Execute(DimIndex: Integer; Source: IMatrix): IMatrix;
DimIndex. Индекс измерения, по элементам которого, осуществляется агрегация;
Source. Матрица исходных данных, на основании которых, будет осуществляться агрегация.
Метод Execute осуществляет расчет агрегированных данных.
Для выполнения примера предполагается наличие в репозитории куба с идентификатором "Cube_1". В структуре куба имеются два измерения. Второе в списке измерение - календарное.
Sub AggregationData;
Var
MB: IMetabase;
CubeInst: ICubeInstance;
Destination: ICubeInstanceDestination;
Man: IMatrixAggregatorManager;
Dim: IDimensionModel;
Lvls: IDimLevels;
BasicAggr: IBasicMatrixAggregator;
LevAggr: IBasicMatrixLevelAggregator;
MatrDS: IMatrixDataSource;
DimSS: IDimSelectionSet;
Matr, Matr1: IMatrix;
Iter, Iter1: IMatrixIterator;
Begin
MB := MetabaseClass.Active;
CubeInst := MB.ItemById("Cube_1").Open(Null) As ICubeInstance;
Destination := CubeInst.Destinations.DefaultDestination;
//Создаем и настраиваем агрегатор данных
Man := New MatrixAggregatorManager.Create As IMatrixAggregatorManager;
BasicAggr := Man.CreateAggregator("BasicMatrixAggregator") As IBasicMatrixAggregator;
//Второе измерение - календарное
Dim := Destination.Dimensions.Item(1).Dimension;
Lvls := Dim.Levels;
BasicAggr.Dimension := Dim;
LevAggr := BasicAggr.LevelAggregation(Lvls.Item(Lvls.Count - 2));
LevAggr.Operation := BasicAggregatorOperation.ActualMean;
LevAggr.Include(Lvls.Item(Lvls.Count - 1)) := True;
//Получение исходной матрицы с данными
MatrDS := Destination As IMatrixDataSource;
DimSS := MatrDS.CreateDimSelectionSet;
//Первый элемент в первом измерении
DimSS.Item(0).SelectElement(0, False);
//Все элементы в календарном измерении
DimSS.Item(1).SelectAll;
//Получение исходной матрицы с данными
Matr := MatrDS.Execute(DimSS);
//Получение агрегированных данных по календарному измерению
Matr1 := BasicAggr.Execute(1, Matr);
//Просмотр результатов
Iter := Matr.CreateIterator;
Iter1 := Matr1.CreateIterator;
Iter.Move(IteratorDirection.First);
Iter1.Move(IteratorDirection.First);
Debug.WriteLine("Матрица исходных данных");
While Iter.Valid Do
Debug.WriteLine(Iter.Value);
Iter.Move(IteratorDirection.Next);
End While;
Debug.WriteLine("Матрица агрегированных данных");
While Iter1.Valid Do
Debug.WriteLine(Iter1.Value);
Iter1.Move(IteratorDirection.Next);
End While;
End Sub AggregationData;
После выполнения примера для куба будет создан новый агрегатор данных. Агрегация будет осуществляться по элементам календарного измерения с последнего на предпоследний уровень, с использованием метода фактического среднего. После настройки будет осуществлен расчет агрегированных данных. Исходная матрица и матрица агрегированных данных будут выведены в консоль среды разработки.
См. также: