Item(Index: Integer): IMsFormulaTransformSlice;
Index. Slice index.
The Item property returns the variable slice, index of which is passed by the Index parameter.
Executing the example requires two variables, that contain the auxiliary slices in the modeling container.
Sub Main;
Var
MB: IMetabase;
CrInf: IMetabaseObjectCreateInfo;
MObj: IMetabaseObject;
Model: IMsModel;
Trans: IMsFormulaTransform;
VarTrans: IMsFormulaTransformVariable;
Slice, Slice1: IMsFormulaTransformSlice;
Selector: IMsFormulaTransformSelector;
Formula: IMsFormula;
NonLinear: IMsNonLinearRegressionTransform;
Varr: IMsVariable;
TransVar: IMsFormulaTransformVariable;
TermX1, TermX2: IMsFormulaTerm;
SelectionFact: IDimSelectionSetFactory;
Selection: IDimSelectionSet;
s: String;
i: Integer;
Begin
MB := MetabaseClass.Active;
//create a model
CrInf := Mb.CreateCreateInfo;
CrInf.ClassId := MetabaseObjectClass.KE_CLASS_MSMODEL;
CrInf.Id := "New_NonLinReg";
CrInf.Name := "New_NonLinReg";
CrInf.Parent := Mb.ItemById("KONT_MODEL");
CrInf.Permanent := False;
MObj := Mb.CreateObject(CrInf).Edit;
Model := MObj As IMsModel;
Trans := Model.Transform;
// add output variable
Varr := MB.ItemByIdNamespace("Var_1", MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Model.Output.Add(Varr);
//create empty mark
SelectionFact := New DimSelectionSetFactory.Create;
Selection := SelectionFact.CreateDimSelectionSet;
//if in output variable there are additional dimensions, mark there an element with an index 3
For i := 0 To Varr.Dimensions.Count - 1 Do
Selection.Add((Varr.Dimensions.Item(i).Model As IMetabaseObject).Open(Null) As IDimInstance);
Selection.Item(i).SelectElement(3, False);
End For;
VarTrans := Trans.Outputs.Item(0);
//receive the slice in output variable, for which in further the specification is set
Slice := VarTrans.Slices.Add(Selection);
Selector := Model.Transform.CreateSelector;
Selector.Slice := Slice;
Formula := Model.Transform.Transform(Selector);
Formula.Kind := MsFormulaKind.NonLinearRegression;
NonLinear := Formula.Method As IMsNonLinearRegressionTransform;
//add input variable
Varr := MB.ItemByIdNamespace("Var_Factor", MB.ItemById("KONT_MODEL").Key).Bind As IMsVariable;
Model.Input.Add(Varr);
TransVar := Model.Transform.Inputs.Item(0);
//fix the mark by all additional dimensions
For i := 0 To Varr.Dimensions.Count - 1 Do
Selection.Add((Varr.Dimensions.Item(i).Model As IMetabaseObject).Open(Null) As IDimInstance);
Selection.Item(i).DeselectAll;
Selection.Item(i).SelectElement(1, False);
End For;
//add the slice to the variable
Slice := TransVar.Slices.Add(Selection);
//create the mark for second slice
For i := 0 To Varr.Dimensions.Count - 1 Do
Selection.Item(i).DeselectAll;
Selection.Item(i).SelectElement(3, False);
End For;
//add the second slice to the variable
Slice1 := TransVar.Slices.Add(Selection);
//create two terms by different slices in the variable
TermX1 := NonLinear.Operands.Add(Slice);
TermX2 := NonLinear.Operands.Add(Slice1);
//creation of the equation
s := "A0+" + Trans.SliceToTerm(TermX1.Slice, TermX1.Lag.AsString) + "/10+ " + Trans.SliceToTerm(TermX2.Slice, TermX2.Lag.AsString);
NonLinear.Expression.AsString := s;
MObj.Save;
End Sub Main;
After executing the example a model is created in the modeling container. The output variable is added to the model, the elements with 3 index are selected in all auxiliary slices. Specification of calculation is adjusted for the received slice. The method of non-linear regression is used for calculation. A variable with some elements fixed in additional dimensions is added to the list of input variables. Then, the expression elements are obtained, and equation is composed.
See also: