Sources: IMDCalculationSourcesInstance;
The Sources property returns data of data consumer instances used in multidimensional calculation on database server.
Executing the example requires that the repository contains multidimensional calculation on database server with the MDCalc_1 identifier.
Sub UserProc;
Var
MB: IMetabase;
MDInst: IMDCalculationInstance;
Formulas: IMDCalculationFormulas;
Formula: IMDCalculationFormula;
FormulaExpression: IMDCalculationFormulaExpression;
Source: IMDCalculationSourceInstance;
Dest: IMDCalculationDestinationInstance;
Slices: IMDCalculationSlicesInstance;
Operand: IMDCalculationFormulaOperand;
SourceCoord, DestCoord: 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;
// Set the coordinate in the source as an operand
Operand := FormulaExpression.CreateItem(MDCalculationFormulaOperandKind.Element);
SourceCoord := Source.NewCoord;
For i := 0 To Slices.Count - 1 Do
SourceCoord.Item(i) := 0;
End For;
SourceElKey := Source.CoordToKey(SourceCoord);
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);
// Coordinate, by which formula is written to data consumer
Dest := MDInst.Destination;
DestCoord := Dest.NewCoord;
Slices := Dest.Slices;
For i := 0 To Slices.Count - 1 Do
DestCoord.Item(i) := 0;
End For;
ElementKey := Dest.CoordToKey(DestCoord);
ElementKey.FactIndex := 0;
MDInst.WriteFormulas(ElementKey, Formulas);
End Sub UserProc;
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 indicator of the consumer.
See also: