IInMemManager.GetMatrix

Синтаксис

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(NullAs ICubeInstance;
    DestInst := CubeInst.Destinations.DefaultDestination;
    
// Отметка, в соответствии с которой осуществляется работа
    DimSS := DestInst.CreateDimSelectionSet;
    
For Each DimS In DimSS Do
        
If DimS.Dimension.Ident = "COUNTRY" Then
            DimS.SelectElement(
0False);
        
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(NullAs ICubeInstance;
    DestInst := CubeInst.Destinations.DefaultDestination;
    
// Отметка, в соответствии с которой осуществляется работа
    DimSS := DestInst.CreateDimSelectionSet();
    
For Each DimS In DimSS Do
        
If DimS.Dimension.Ident = "COUNTRY" Then
            DimS.SelectElement(
0False);
        
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;

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

Если кэшированных данных нет, то будет отстроена и сохранена новая матрица с данными.

См. также:

IInMemManager