WriteFormulas(Key: IMDCalculationFormulaElementKey; Formulas: IMDCalculationFormulas; [Options: Integer = 0]);
Key. Unique key of the element, by which formulas must be written.
Formulas. Formulas that must be written.
Options. Optional parameter reserved for the future.
The WriteFormulas method writes formulas based on the specified element.
Executing the example requires that the repository contains multidimensional calculation on DB server with the MDCalc_1 identifier.
Sub Main;
Var
MB: IMetabase;
MDInst: IMDCalculationInstance;
Formulas: IMDCalculationFormulas;
Formula: IMDCalculationFormula;
FormulaExpression: IMDCalculationFormulaExpression;
Source: IMDCalculationSourceInstance;
Dest: IMDCalculationDestinationInstance;
Slices: IMDCalculationSlicesInstance;
Operand: IMDCalculationFormulaOperand;
DestCoo, SourceCoo: IMatrixCoord;
ElementKey, SourceElKey: IMDCalculationFormulaElementKey;
CoordOperand: IMDCalculationFormulaElement;
ConstOperand: IMDCalculationFormulaConstantValue;
BinaryOperand: IMDCalculationFormulaBinaryOperation;
i: Integer;
Begin
MB := MetabaseClass.Active;
MDInst := MB.ItemById("MDCalc_1").Open(Null) As IMDCalculationInstance;
Formulas := MDInst.CreateFormulas;
Formula := Formulas.Add;
FormulaExpression := Formula.Expression;
Source := MDInst.Sources.Item(0);
Slices := Source.Slices;
//Assign as an operand - coordinate in the source
Operand := FormulaExpression.CreateItem(MDCalculationFormulaOperandKind.Element);
SourceCoo := Source.NewCoord;
For i := 0 To Slices.Count - 1 Do
SourceCoo.Item(i) := 0;
End For;
SourceElKey := Source.CoordToKey(SourceCoo);
SourceElKey.FactIndex := 0;
CoordOperand := Operand As IMDCalculationFormulaElement;
CoordOperand.Key := SourceElKey;
FormulaExpression.InsertItem(Operand);
//Assign symbol * as an operand
Operand := FormulaExpression.CreateItem(MDCalculationFormulaOperandKind.BinaryOperation);
BinaryOperand := Operand As IMDCalculationFormulaBinaryOperation;
BinaryOperand.BinaryOperation := MDCalculationFormulaBinaryOperation.Mul;
FormulaExpression.InsertItem(Operand);
//Assign constant 3.14 as an operand
Operand := FormulaExpression.CreateItem(MDCalculationFormulaOperandKind.ConstantValue);
ConstOperand := Operand As IMDCalculationFormulaConstantValue;
ConstOperand.ConstantValue := 3.14;
FormulaExpression.InsertItem(Operand);
//Coordinate, by which formulas are written into the consumer
Dest := MDInst.Destination;
DestCoo := Dest.NewCoord;
Slices := Dest.Slices;
For i := 0 To Slices.Count - 1 Do
DestCoo.Item(i) := 0;
End For;
ElementKey := Dest.CoordToKey(DestCoo);
ElementKey.FactIndex := 0;
MDInst.WriteFormulas(ElementKey, Formulas);
End Sub Main;
After executing the example a formula is set for the element that corresponds to the first elements of data consumer dimensions. The value by coordinate in the data consumer is calculated by the formula: value by coordinate in the data source is multiplied by 3.14. Data is saved by the first factor of the data consumer.
See also: