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(Null) As 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;
После выполнения примера будет настроена агрегация данных для календарного измерения куба. С первого уровня, имеющегося в календарном измерении, будет осуществляться равномерная дезагрегация данных на второй уровень календаря. Данный метод агрегации будет установлен для всех элементов измерения фактов.
См. также: