GetMatrix(Executor: ICubeInstanceDestinationExecutor; Selection: IDimSelectionSet; [Options: Integer = 0]): IMatrix;
GetMatrix(Executor: Prognoz.Platform.Interop.Cubes.ICubeInstanceDestinationExecutor; Selection: Prognoz.Platform.Interop.Dimensions.IDimSelectionSet; Options: Integer): Prognoz.Platform.Interop.Matrix.IMatrix;
Executor. Объект, предназначенный для расчёта куба.
Selection. Отметка, в соответствии с которой осуществляется расчёт.
Options. Параметры расчёта куба.
Метод GetMatrix возвращает матрицу с данными из кэша в соответствии с заданными параметрами расчёта куба.
Для проверки наличия в кэше данных для куба используйте метод CheckHasMatrix.
Для выполнения примера предполагается наличие в репозитории куба с идентификатором «STD_CUBE». В кубе имеется измерение с идентификатором «Country». В репозитории используется механизм кэширования In-Memory.
Добавьте ссылки на системные сборки: Cubes, Metabase.
Sub UserProc;
Var
Mb: IMetabase;
CubeInst: ICubeInstance;
DestInst: ICubeInstanceDestination;
InMem: IInMemManager;
DimSS: IDimSelectionSet;
DimS: IDimSelection;
Matr: IMatrix;
Begin
Mb := MetabaseClass.Active;
// Открытие куба
CubeInst := Mb.ItemById("STD_CUBE").Open(Null) As ICubeInstance;
DestInst := CubeInst.Destinations.DefaultDestination;
// Отметка, в соответствии с которой осуществляется работа
DimSS := DestInst.CreateDimSelectionSet;
For Each DimS In DimSS Do
If DimS.Dimension.Ident = "COUNTRY" Then
DimS.SelectElement(0, False);
Else
DimS.SelectAll;
End If;
End For;
// Менеджер для работы с кэшем In-Memory
InMem := New InMemManager.Create;
// Проверка наличия данных в кэше
If InMem.CheckHasMatrix(DestInst) Then
// Получение матрицы с данными
Matr := InMem.GetMatrix(DestInst.CreateExecutor, DimSS);
// Просмотр матрицы
ShowMatrix(Matr);
// Обновление данных в кэше из источника
InMem.UpdateBySelection(DestInst, DimSS);
Else
InMem.PrepareMatrixPartial(DestInst, DimSS);
End If;
End Sub UserProc;
Sub ShowMatrix(Matr: IMatrix);
Var
Iter: IMatrixIterator;
Begin
If Matr.Count <> 0 Then
Iter := Matr.CreateIterator;
Iter.Move(IteratorDirection.First);
While Iter.Valid Do
Debug.Write(Iter.Value + " ");
Iter.Move(IteratorDirection.Next);
End While;
Debug.WriteLine("");
Else
Debug.WriteLine("Empty");
End If;
End Sub ShowMatrix;
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;
DestInst: ICubeInstanceDestination;
InMem: InMemManager = New InMemManagerClass();
DimSS: IDimSelectionSet;
DimS: IDimSelection;
Matr: IMatrix;
Begin
Mb := Params.Metabase;
// Открытие куба
CubeInst := Mb.ItemById["STD_CUBE"].Open(Null) As ICubeInstance;
DestInst := CubeInst.Destinations.DefaultDestination;
// Отметка, в соответствии с которой осуществляется работа
DimSS := DestInst.CreateDimSelectionSet();
For Each DimS In DimSS Do
If DimS.Dimension.Ident = "COUNTRY" Then
DimS.SelectElement(0, False);
Else
DimS.SelectAll();
End If;
End For;
// Проверка наличия данных в кэше
If InMem.CheckHasMatrix(DestInst) Then
// Получение матрицы с данными
Matr := InMem.GetMatrix(DestInst.CreateExecutor(), DimSS, 0);
// Просмотр матрицы
ShowMatrix(Matr);
// Обновление данных в кэше из источника
InMem.UpdateBySelection(DestInst, DimSS);
Else
InMem.PrepareMatrixPartial(DestInst, DimSS);
End If;
End Sub;
Shared Sub ShowMatrix(Matr: IMatrix);
Var
Iter: IMatrixIterator;
Begin
If Matr.Count <> 0 Then
Iter := Matr.CreateIterator();
Iter.Move(IteratorDirection.itdFirst);
While Iter.Valid Do
System.Diagnostics.Debug.Write(Iter.Value + " ");
Iter.Move(IteratorDirection.itdNext);
End While;
System.Diagnostics.Debug.WriteLine("");
Else
System.Diagnostics.Debug.WriteLine("Empty");
End If;
End Sub;
При выполнении примера будет осуществлена проверка на наличие кэшированных данных для указанного куба. Если кэшированные данные имеются, то будет получена матрица с данными в соответствии с указанной отметкой. Полученные данные будут выведены в консоль среды разработки, после этого данные в кэше будут обновлены в соответствии с данными источника.
Если кэшированных данных нет, то будет отстроена и сохранена новая матрица с данными.
См. также: