IMsCrossDimensionAggregationTransform.AgregationMethod

Синтаксис Fore

AgregationMethod: MsAgregationMethodType;

Синтаксис Fore.NET

AgregationMethod: Prognoz.Platform.Interop.Ms.MsAgregationMethodType;

Описание

Свойство AgregationMethod определяет метод агрегации.

Комментарии

Для получения выражения агрегации используйте свойство IMsCrossDimensionAggregationTransform.Expression.

Пример Fore

Для выполнения примера предполагается наличие формы, содержащей компонент 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(
NullAs 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». Например:

Пример Fore.NET

Для выполнения примера предполагается наличие формы, содержащей компонент 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(NullAs 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.

См. также:

IMsCrossDimensionAggregationTransform