IInMemManager.GetMatrix

Syntax

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;

Parameters

Executor. Object used for data calculation.

Selection. Selection according to which calculation is executed.

Options. Cube calculation parameters.

Description

The GetMatrix method returns matrix with data from cache according to the specified parameters of cube calculation.

Comments

To check, whether cache contains data for cube, use the CheckHasMatrix method.

Example

Executing the example requires that the repository contains a cube with the STD_CUBE identifier. The cube contains dimension with the Country identifier. The repository uses In-Memory caching mechanism.

Add links to the Cubes and Metabase system assemblies.

Sub UserProc;
Var
    Mb: IMetabase;
    CubeInst: ICubeInstance;
    DestInst: ICubeInstanceDestination;
    InMem: IInMemManager;
    DimSS: IDimSelectionSet;
    DimS: IDimSelection;
    Matr: IMatrix;
Begin
    Mb := MetabaseClass.Active;
    
// Open cube
    CubeInst := Mb.ItemById("STD_CUBE").Open(NullAs ICubeInstance;
    DestInst := CubeInst.Destinations.DefaultDestination;
    
// Selection according to which work is executed
    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;
    
// Manager to work with In-Memory cache
    InMem := New InMemManager.Create;
    
// Check whether there is data in cache
    If InMem.CheckHasMatrix(DestInst) Then
        // Get matrix with data
        Matr := InMem.GetMatrix(DestInst.CreateExecutor, DimSS);
        
// Get matrix
        ShowMatrix(Matr);
        
// Update data in cache from source
        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;
    
// Open cube
    CubeInst := Mb.ItemById["STD_CUBE"].Open(NullAs ICubeInstance;
    DestInst := CubeInst.Destinations.DefaultDestination;
    
// Selection according to which work is executed
    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;
    
// Check whether there is data in cache
    If InMem.CheckHasMatrix(DestInst) Then
        // Get matrix with data
        Matr := InMem.GetMatrix(DestInst.CreateExecutor(), DimSS, 0);
        
// Get matrix
        ShowMatrix(Matr);
        
// Update data in cache from source
        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;

On executing the example, it will be checked whether there is cached data for the specified cube. If there is cached data, the matrix with data will be obtained according to the specified selection. Obtained data will be displayed to the development environment console, after that data in cache will be updated according to the source data.

If there are no cached data, new matrix with data will be built and saved.

See also:

IInMemManager