AggregationExpr: IExpression;
Свойство AggregationExpr возвращает выражение агрегации.
Для выполнения примера предполагается наличие базы данных временных рядов с идентификатором «OBJ_RUBRICATOR». В контейнере моделирования данной базы содержится модель с идентификатором «NEW_AGGREGATION». Метод расчёта модели - агрегация (базовая), рассчитываемая как детерминированное уравнение.
Добавьте ссылки на системные сборки «Metabase», «Cubes», «Ms», «Dimensions».
Sub UserProc;
Var
mb: IMetabase;
RubyObj: IMetabaseObjectDescriptor;
Ruby: IRubricator;
ModelCont: IMetabaseObjectDescriptor;
obj: IMetabaseObject;
Model: IMsModel;
Transform: IMsFormulaTransform;
Formula: IMsFormula;
DetermAggregation: IMsDetermAggregationTransform;
TermInfo: IMsFormulaTermInfo;
Stub: IVariableStub;
TransformVar: IMsFormulaTransformVariable;
SelectionFact: IDimSelectionSetFactory;
SelectionAgr, SelectionW, SelectionRel: IDimSelectionSet;
i: Integer;
DimI: IDimInstance;
Slice: IMsFormulaTransformSlice;
Begin
mb := MetabaseClass.Active;
RubyObj := mb.ItemById("OBJ_RUBRICATOR").Bind;
Ruby := RubyObj.Bind As IRubricator;
ModelCont := Ruby.ModelSpace;
Obj := Mb.ItemByIdNamespace("NEW_AGGREGATION", ModelCont.Key).Edit;
Model := Obj As IMsModel;
Transform := Model.Transform;
Formula := Transform.FormulaItem(0);
Formula.Kind := MsFormulaKind.DetermAggregation;
DetermAggregation := Formula.Method As IMsDetermAggregationTransform;
TermInfo := Transform.CreateTermInfo;
Stub := RubyObj.Bind As IVariableStub;
SelectionFact := New DimSelectionSetFactory.Create;
SelectionAgr := SelectionFact.CreateDimSelectionSet;
SelectionW := SelectionFact.CreateDimSelectionSet;
SelectionRel := SelectionFact.CreateDimSelectionSet;
For i := 0 To Stub.DimensionCount - 1 Do
DimI := (Stub.Dimension(i) As IMetabaseObject).Open(Null) As IDimInstance;
SelectionAgr.Add(DimI);
SelectionAgr.Item(i).SelectElement(i, False);
SelectionW.Add(DimI);
SelectionW.Item(i).SelectElement(i + 1, False);
SelectionRel.Add(DimI);
SelectionRel.Item(i).SelectElement(i + 2, False);
End For;
TransformVar := Transform.Inputs.Add(Stub);
Slice := TransformVar.Slices.Add(SelectionAgr);
TermInfo.Slice := Slice;
DetermAggregation.AggregationExpr.AsString := TermInfo.TermText;
TransformVar := Transform.Inputs.Add(Stub);
Slice := TransformVar.Slices.Add(SelectionW);
TermInfo.Slice := Slice;
DetermAggregation.WeightsExpr.AsString := TermInfo.TermText;
TransformVar := Transform.Inputs.Add(Stub);
Slice := TransformVar.Slices.Add(SelectionRel);
TermInfo.Slice := Slice;
DetermAggregation.CompositionRelevanceExpr.AsString := TermInfo.TermText;
obj.Save;
Debug.WriteLine("Терм, содержащий результаты агрегации:" + DetermAggregation.Result.TermToText);
End Sub UserProc;
После выполнения примера для модели будет задано выражение агрегации, выражение для расчета порога агрегации и выражение для задания весов агрегации. В окно консоли будет выведено наименование терма, содержащего результаты агрегации.
См. также: