IStandardCubeDimension.Aggregator

Синтаксис

Aggregator(FactKey: Variant; Destination: IStandardCubeDestination): IMatrixAggregatorModel;

Параметры

FactKey. Значение первичного ключа у элемента измерения фактов, для которого необходимо настроить агрегацию;

Destination. Вариант отображения куба, в рамках которого необходимо настроить агрегацию.

Описание

Свойство Aggregator определяет настройки агрегации измерения по указанному факту куба.

Пример

Для выполнения примера в репозитории предполагается наличие стандартного куба с идентификатором STD_CUBE. В кубе имеется календарное измерение с идентификатором CALENDAR. В данном измерении имеется не менее двух уровней.

Добавьте ссылки на системные сборки: Cubes, Dimensions, Matrix, Metabase.

Sub UserProc;
Var
    MB: IMetabase;
    StdCube: IStandardCube;
    Man: IMatrixAggregatorManager;
    Dest: IStandardCubeDestination;
    Dim: IStandardCubeDimension;
    DimModel: IDimensionModel;
    ChronAggr: IChronologicalMatrixAggregator;
    LevAggr: IChronologicalMatrixLevelAggregator;
    FactDim: IStandardCubeDimension;
    CustomElements: ICustomDimElements;
    DimInst: IDimInstance;
    DimElements: IDimElements;
    i: Integer;
Begin
    MB := MetabaseClass.Active;
    StdCube := MB.ItemById("STD_CUBE").Edit As IStandardCube;
    Dest := StdCube.Destinations.Item(0);
    // Создаём новый агрегатор
    Man := New MatrixAggregatorManager.Create As IMatrixAggregatorManager;
    // Хронологический механизм агрегации
    ChronAggr := Man.CreateAggregator("ChronologicalMatrixAggregator"As IChronologicalMatrixAggregator;
    // Для измерения - календарь
    Dim := Dest.Dimensions.FindById("D_CALENDAR");
    DimModel := Dim.Dimension;
    ChronAggr.Dimension := DimModel;
    // Уровень-источник
    LevAggr := ChronAggr.LevelAggregation(DimModel.Levels.Item(0));
    // Метод - равномерная дезагрегация
    LevAggr.Operation := ChronologicalAggregatorOperation.UniformDisaggregation;
    // Уровень-приёмник
    LevAggr.SourceLevel := DimModel.Levels.Item(1);
    // Получение элементов измерения фактов для установки по ним агрегации
    FactDim := Dest.FactDimension;
    // Если измерение фактов локальное, то получаем список элементов через ICustomDimension.Elements,
    // иначе открываем справочник, используемый в качестве измерения фактов
    If StdCube.ExternalFactDimension = False Then
        // Элементы измерения фактов
        CustomElements := (FactDim.Dimension As ICustomDimension).Elements;
        // Устанавка выбранного механизма агрегации
        For i := 0 To CustomElements.RowCount - 1 Do
            // По умолчанию ключ элементов хранится в атрибуте с индексом 0
            // Устанавливаем агрегацию для элемента по его ключу
            Dim.Aggregator(CustomElements.AttributeValue(i, 0), Dest) := ChronAggr;
        End For;
    Else
        // Данные справочника
        DimInst := (FactDim.Dimension As IMetabaseObject).Open(NullAs IDimInstance;
        // Элементы справочника
        DimElements := DimInst.Elements;
        // Устанавка выбранного механизма агрегации
        For i := 0 To DimElements.Count - 1 Do
            // Первичным ключом в справочнике является атрибут с назначением Идентификатор
            // Устанавливаем агрегацию для элемента по значению этого атрибута
            Dim.Aggregator(DimElements.Id(i), Dest) := ChronAggr;
        End For;
    End If;
    (StdCube As IMetabaseObject).Save;
End Sub UserProc;

После выполнения примера будет настроена агрегация данных для календарного измерения куба. С первого уровня, имеющегося в календарном измерении, будет осуществляться равномерная дезагрегация данных на второй уровень календаря. Данный метод агрегации будет установлен для всех элементов измерения фактов.

См. также:

IStandardCubeDimension