IMDCalculationFormulas.Add

Syntax

Add: IMDCalculationFormula;

Description

The Add method creates a new formula.

Example

Executing the example requires that the repository contains multidimensional calculation on database server with the MDCalc_1 identifier. Time dependency is enabled for formulas.

Sub UserProc;
Var
    MB: IMetabase;
    MDInst: IMDCalculationInstance;
    Source: IMDCalculationSourceInstance;
    Dest: IMDCalculationDestinationInstance;
    Slices: IMDCalculationSlicesInstance;
    Formulas: IMDCalculationFormulas;
    Formula: IMDCalculationFormula;
    FormulaExpression: IMDCalculationFormulaExpression;
    DestCoord, SourceCoord: IMatrixCoord;
    SourceElKey, ElementKey: IMDCalculationFormulaElementKey;
    Operand: IMDCalculationFormulaOperand;
    CoordOperand: IMDCalculationFormulaElement;
    BinaryOperand: IMDCalculationFormulaBinaryOperation;
    ConstOperand: IMDCalculationFormulaConstantValue;
    i: Integer;
Begin
    MB := MetabaseClass.Active;
    MDInst := MB.ItemById("MDCalc_1").Open(NullAs IMDCalculationInstance;
    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;
    Source := MDInst.Sources.Item(0);
    Slices := Source.Slices;
    Formulas := MDInst.ReadFormulas(ElementKey);
    Formula := Formulas.Add;
    FormulaExpression := Formula.Expression;
    Formula.ChangePeriod(DateTime.ComposeDay(20250101), DateTime.ComposeDay(20260101));
    //Set element from source as an operand
    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);
    // Set the "*" symbol as an operand
    Operand := FormulaExpression.CreateItem(MDCalculationFormulaOperandKind.BinaryOperation);
    BinaryOperand := Operand As IMDCalculationFormulaBinaryOperation;
    BinaryOperand.BinaryOperation := MDCalculationFormulaBinaryOperation.Mul;
    FormulaExpression.InsertItem(Operand);
    // Set the "3.14" constant as an operand
    Operand := FormulaExpression.CreateItem(MDCalculationFormulaOperandKind.ConstantValue);
    ConstOperand := Operand As IMDCalculationFormulaConstantValue;
    ConstOperand.ConstantValue := 3.14;
    FormulaExpression.InsertItem(Operand);
    MDInst.WriteFormulas(ElementKey, Formulas);
End Sub UserProc;

After executing the example a formula is added for the specified data consumer element. The operation period is set for the formula. Actual periods of other formulas are adjusted according to this one.

See also:

IMDCalculationFormulas