AgregationMethod: MsAgregationMethodType;
AgregationMethod: Prognoz.Platform.Interop.Ms.MsAgregationMethodType;
Свойство AgregationMethod определяет метод агрегации.
Для получения выражения агрегации используйте свойство IMsCrossDimensionAggregationTransform.Expression.
Для выполнения примера предполагается наличие формы, содержащей компонент Button с идентификатором «Button1», компонент LanerBox с идентификатором «LanerBox1» и компонент UiErAnalyzer с идентификатором «UiErAnalyzer1». Укажите «UiErAnalyzer1» в качестве источника данных для компонента «LanerBox1». В компонент «UiErAnalyzer1» должна быть загружена рабочая книга базы данных временных рядов. Пример является обработчиком события OnClick для компонента «Button1».
Добавьте ссылки на системные сборки «Ms», «Cubes», «Rds», «Metabase», «Dimensions».
Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Var
mb: IMetabase;
Laner: ILaner;
CalcSerie: ILanerCalculateSerie;
Transform: IMsFormulaTransform;
Selector: IMsFormulaTransformSelector;
Formula: IMsFormula;
Method: IMsMethod;
Aggr: IMsCrossDimensionAggregationTransform;
TransformVar: IMsFormulaTransformVariable;
Options: IMsCrossDimensionAggregationOptions;
FilterList: IMsAggregationFilterList;
Filter: IMsAggregationFilter;
Rubr: IRubricator;
Attributes: IMetaAttributes;
DictDescr: IMetabaseObjectDescriptor;
FilterDimension: IMetabaseObject;
DimInst: IDimInstance;
Selection: IDimSelection;
i: Integer;
Begin
mb := MetabaseClass.Active;
Laner := UiErAnalyzer1.ErAnalyzer.Laner;
Laner.BeginUpdate;
CalcSerie := Laner.Series.AddCalculateSerie("Aggregation");
Transform := CalcSerie.Transform.Transform As IMsFormulaTransform;
Selector := Transform.CreateSelector;
TransformVar := Transform.Outputs.Item(0);
Selector.Slice := TransformVar.Slices.Add(Null);
Formula := Transform.Transform(Selector);
Formula.Kind := MsFormulaKind.CrossDimensionAggregation;
Method := Formula.Method;
// Настройка агрегации
Aggr := Method As IMsCrossDimensionAggregationTransform;
// Задаем метод агрегации
Aggr.AgregationMethod := MsAgregationMethodType.Sum;
// Определяем дополнительные параметры агрегации
Options := Aggr.Options;
Options.Threshold := 0;
Options.Level := False;
Options.Rebase := False;
// Настраиваем фильтр агрегации
FilterList := Aggr.Filter;
FilterList.Clear;
Rubr := Laner.RubricatorInstance.Rubricator;
Attributes := Rubr.Facts.Attributes;
DictDescr := Attributes.FindById("COUNTRY").ValuesObject;
Filter := FilterList.Add(DictDescr.Bind As IDimensionModel);
FilterDimension := Filter.FilterDimension As IMetabaseObject;
DimInst := FilterDimension.Open(Null) As IDimInstance;
Selection := DimInst.CreateSelection;
For i := 0 To 3 Do
Selection.SelectElement(i, False);
End For;
Filter.AggregationSelection := Selection;
// Задаем измерение, по которому ведется агрегация
DictDescr := Attributes.FindById("INDICATOR").ValuesObject;
Aggr.AggregationDimenson := DictDescr.Bind As IDimensionModel;
// Задаем выражение агрегации
Aggr.Expression.AsString := "{BCA[t]}";
LanerBox1.ExecuteOperation(LanerBoxOperation.Refresh);
Laner.EndUpdate;
End Sub Button1OnClick;
После выполнения примера в компонент LanerBox будет добавлен вычисляемый ряд «Aggregation», рассчитанный методом агрегации. Агрегация будет рассчитана как сумма значений показателя «BCA» для первых четырех стран справочника, на который ссылается атрибут «COUNTRY». Например:
Для выполнения примера предполагается наличие формы, содержащей компонент Button с идентификатором «button1», компонент LanerBoxNet с идентификатором «lanerBoxNet1», компонент UiErAnalyzerNet с идентификатором «uiErAnalyzerNet1». Укажите «uiErAnalyzerNet1» в качестве источника данных для компонента «lanerBoxNet1». В компонент «uiErAnalyzerNet1» должна быть загружена рабочая книга базы данных временных рядов. Пример является обработчиком события Click для компонента «button1».
Добавьте ссылки на системные сборки «Ms», «Cubes», «Rds», «Dimensions», «Laner», «Express».
Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Rds;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Laner;
Imports Prognoz.Platform.Interop.Express;
…
Private Sub button1_Click(sender: System.Object; e: System.EventArgs);
Var
mb: IMetabase;
Laner: ILaner;
CalcSerie: ILanerCalculateSerie;
Transform: IMsFormulaTransform;
Selector: IMsFormulaTransformSelector;
Formula: IMsFormula;
Method: IMsMethod;
Aggr: IMsCrossDimensionAggregationTransform;
TransformVar: IMsFormulaTransformVariable;
Options: IMsCrossDimensionAggregationOptions;
FilterList: IMsAggregationFilterList;
Filter: IMsAggregationFilter;
Rubr: IRubricator;
Attributes: IMetaAttributes;
DictDescr: IMetabaseObjectDescriptor;
FilterDimension: IMetabaseObject;
DimInst: IDimInstance;
Selection: IDimSelection;
i: uinteger;
Begin
mb := Self.Metabase;
Laner := uiErAnalyzerNet1.ErAnalyzer.ErAnalyzer.Laner;
Laner.BeginUpdate();
CalcSerie := Laner.Series.AddCalculateSerie("Aggregation", DimCalendarLevel.dclYear, -1);
Transform := CalcSerie.Transform.Transform As IMsFormulaTransform;
Selector := Transform.CreateSelector();
TransformVar := Transform.Outputs.Item[0];
Selector.Slice := TransformVar.Slices.Add(Null);
Formula := Transform.Transform[Selector];
Formula.Kind := MsFormulaKind.mfkCrossDimensionAggregation;
Method := Formula.Method;
// Настройка агрегации
Aggr := Method As IMsCrossDimensionAggregationTransform;
// Задаем метод агрегации
Aggr.AgregationMethod := MsAgregationMethodType.mammtSum;
// Определяем дополнительные параметры агрегации
Options := Aggr.Options;
Options.Threshold := 0;
Options.Level := False;
Options.Rebase := False;
// Настраиваем фильтр агрегации
FilterList := Aggr.Filter;
FilterList.Clear();
Rubr := Laner.RubricatorInstance.Rubricator;
Attributes := Rubr.Facts.Attributes;
DictDescr := Attributes.FindById("COUNTRY").ValuesObject;
Filter := FilterList.Add(DictDescr.Bind() As IDimensionModel);
FilterDimension := Filter.FilterDimension As IMetabaseObject;
DimInst := FilterDimension.Open(Null) As IDimInstance;
Selection := DimInst.CreateSelection();
For i := 0 To 3 Do
Selection.SelectElement(i, False);
End For;
Filter.AggregationSelection := Selection;
// Задаем измерение, по которому ведется агрегация
DictDescr := Attributes.FindById("INDICATOR").ValuesObject;
Aggr.AggregationDimenson := DictDescr.Bind() As IDimensionModel;
// Задаем выражение агрегации
Aggr.Expression.AsString := "{BCA[t]}";
lanerBoxNet1.CtrlBox.ExecuteOperation(LanerBoxOperation.lboRefresh, Null);
Laner.EndUpdate();
End Sub;
Результат выполнения примера Fore.NET совпадет с результатом выполнения примера Fore.
См. также: