Execute(DimIndex: Integer; Source: IMatrix): IMatrix;
Execute(DimIndex: Integer; Source: Prognoz.Platform.Interop.Matrix.IMatrix): Prognoz.Platform.Interop.Matrix.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;
После выполнения примера для куба будет создан новый агрегатор данных. Агрегация будет осуществляться по элементам календарного измерения с последнего на предпоследний уровень, с использованием метода фактического среднего. После настройки будет осуществлен расчет агрегированных данных. Исходная матрица и матрица агрегированных данных будут выведены в консоль среды разработки.
Для выполнения примера предполагается наличие в репозитории куба с идентификатором "Cube_1". В структуре куба имеются два измерения. Второе в списке измерение - календарное. Указанная процедура является точкой входа для .NET-сборки.
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Matrix;
Imports Prognoz.Platform.Interop.Metabase;
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
CubeInst: ICubeInstance;
Destination: ICubeInstanceDestination;
Man: MatrixAggregatorManager = New MatrixAggregatorManagerClass();
Dim: IDimensionModel;
Lvls: IDimLevels;
BasicAggr: IBasicMatrixAggregator;
LevAggr: IBasicMatrixLevelAggregator;
MatrDS: IMatrixDataSource;
DimSS: IDimSelectionSet;
Matr, Matr1: IMatrix;
Iter, Iter1: IMatrixIterator;
Begin
MB := Params.Metabase;
CubeInst := MB.ItemById["Cube_1"].Open(Null) As ICubeInstance;
Destination := CubeInst.Destinations.DefaultDestination;
//Настраиваем агрегатор данных
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.baoActualMean;
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.itdFirst);
Iter1.Move(IteratorDirection.itdFirst);
System.Diagnostics.Debug.WriteLine("Матрица исходных данных");
While Iter.Valid Do
System.Diagnostics.Debug.WriteLine(Iter.Value);
Iter.Move(IteratorDirection.itdNext);
End While;
System.Diagnostics.Debug.WriteLine("Матрица агрегированных данных");
While Iter1.Valid Do
System.Diagnostics.Debug.WriteLine(Iter1.Value);
Iter1.Move(IteratorDirection.itdNext);
End While;
End Sub;
После выполнения примера для куба будет создан новый агрегатор данных. Агрегация будет осуществляться по элементам календарного измерения с последнего на предпоследний уровень, с использованием метода фактического среднего. После настройки будет осуществлен расчет агрегированных данных. Исходная матрица и матрица агрегированных данных будут выведены в консоль среды разработки.
См.также: