ICubeExecuteDataTypes.AddSelectionSet

Syntax

AddSelectionSet(SelSet: IDimSelectionSet; Type: CubeDataType);

AddSelectionSet(SelSet: Prognoz.Platform.Interop.Dimensions.IDimSelectionSet; Type: CubeDataType);

Parameters

SelSet. Selection according to which cells are taken.

Type. The method of data creation that is to be set for the cell.

Description

The AddSelectionSet method sets how data is generated for multiple cells that match the specified selection.

Example

Executing the example requires a standard cube with the STD_CUBE identifier. The cube contains two dimensions and facts dimension. The aggregation for calendar dimension with the CALENDAR identifier is set up.

Add links to the Cubes, Dimensions, Matrix and Metabase system assemblies. In Fore.NET add a link to the ForeSystem assembly.

Sub UserProc;
Var
    MB: IMetabase;
    CubeInst: ICubeInstance;
    Dest: ICubeInstanceDestination;
    Sels: IDimSelectionSet;
    Sel: IDimSelection;
    Exec: ICubeInstanceDestinationExecutor;
    Matr: IMatrix;
    CubeExecRes: ICubeExecuteResult;
    CubeDataTyp: ICubeExecuteDataTypes;
Begin
    
// Open cube
    MB := MetabaseClass.Active;
    CubeInst := MB.ItemById(
"STD_CUBE").Open(NullAs ICubeInstance;
    Dest := CubeInst.Destinations.DefaultDestination;
    
// Set selection
    Sels := Dest.CreateDimSelectionSet;
    
For Each Sel In Sels Do
        Sel.SelectAll;
    
End For;
    
// Set support of working with information about how data is generated in the cells
    (Sels As ICubeExecuteSetup).UseDataTypes := True;
    Exec := Dest.CreateExecutor;
    
// Calculate cube
    Exec.PrepareExecute(Sels);
    Exec.PerformExecuteO(CubeInstanceDestinationExecutorOptions.None);
    Matr := Exec.Matrix;
    ShowMatrix(
"Cube matrix", Matr);
    
// Set how data is generated for a cell
    CubeExecRes := Matr As ICubeExecuteResult;
    CubeDataTyp := CubeExecRes.DataTypes;
    Sels := Matr.Dimensions.CreateCopy;
    Sel := Sels.FindById(
"CALENDAR");
    Sel.DeselectAll;
    Sel.SelectElement(
1False);
    CubeDataTyp.AddSelectionSet(Sels, CubeDataType.Calculated);
    ShowMatrix(
"Matrix after creating the way how data is generated for the cell", Matr);
End Sub UserProc;

Sub ShowMatrix(Title: String; Matr: IMatrix);
Var
    Iter: IMatrixIterator;
    CubeExecRes: ICubeExecuteResult;
    CubeDataTyp: ICubeExecuteDataTypes;
    S: String;
    Coord: IMatrixCoord;
Begin
    CubeExecRes := Matr 
As ICubeExecuteResult;
    CubeDataTyp := CubeExecRes.DataTypes;
    Iter := Matr.CreateIterator;
    Iter.Move(IteratorDirection.First);
    Debug.WriteLine(Title);
    Coord := Matr.CreateCoord;
    
While Iter.Valid Do
        S := (Iter.Value 
As String) + "   (" + Iter.CoordsAsString + ")";
        Iter.PutCurrentPos(Coord);
        
If CubeDataTyp.DataType(Coord) <> CubeDataType.Default_ Then
            S := S + 
"*";
        
End If;
        Debug.WriteLine(s);
        Iter.Value := (Iter.Value 
As Integer) + 1;
        Iter.Move(IteratorDirection.Next);
    
End While;
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;
    Dest: ICubeInstanceDestination;
    Sels: IDimSelectionSet;
    Sel: IDimSelection;
    Exec: ICubeInstanceDestinationExecutor;
    Matr: IMatrix;
    CubeExecRes: ICubeExecuteResult;
    CubeDataTyp: ICubeExecuteDataTypes;
Begin
    
// Open cube
    MB := Params.Metabase;
    CubeInst := MB.ItemById[
"STD_CUBE"].Open(NullAs ICubeInstance;
    Dest := CubeInst.Destinations.DefaultDestination;
    
// Set selection
    Sels := Dest.CreateDimSelectionSet();
    
For Each Sel In Sels Do
        Sel.SelectAll();
    
End For;
    
// Set support of working with information about how data is generated in the cells
    (Sels As ICubeExecuteSetup).UseDataTypes := True;
    Exec := Dest.CreateExecutor();
    
// Calculate cube
    Exec.PrepareExecute(Sels);
    Exec.PerformExecuteO(CubeInstanceDestinationExecutorOptions.cideoNone 
As Integer);
    Matr := Exec.Matrix;
    ShowMatrix(
"Cube matrix", Matr);
    
// Set how data is generated for a cell
    CubeExecRes := Matr As ICubeExecuteResult;
    CubeDataTyp := CubeExecRes.DataTypes;
    Sels := Matr.Dimensions.CreateCopy();
    Sel := Sels.FindById(
"CALENDAR");
    Sel.DeselectAll();
    Sel.SelectElement(
0False);
    CubeDataTyp.AddSelectionSet(Sels, CubeDataType.cubdtCalculated);
    ShowMatrix(
"Matrix after creating the way how data is generated for the cell", Matr);
End Sub;

Shared Sub ShowMatrix(Title: String; Matr: IMatrix);
Var
    Iter: IMatrixIterator;
    CubeExecRes: ICubeExecuteResult;
    CubeDataTyp: ICubeExecuteDataTypes;
    S: String;
    Coord: IMatrixCoord;
Begin
    CubeExecRes := Matr 
As ICubeExecuteResult;
    CubeDataTyp := CubeExecRes.DataTypes;
    Iter := Matr.CreateIterator();
    Iter.Move(IteratorDirection.itdFirst);
    System.Diagnostics.Debug.WriteLine(Title);
    Coord := Matr.CreateCoord();
    
While Iter.Valid Do
        S := (Iter.Value 
As String) + "   (" + Iter.CoordsAsString + ")";
        Iter.PutCurrentPos(Coord);
        
If CubeDataTyp.DataType[Coord] <> CubeDataType.cubdtDefault Then
            S := S + 
"*";
        
End If;
        System.Diagnostics.Debug.WriteLine(s);
        Iter.Move(IteratorDirection.itdNext);
    
End While;
End Sub;

On executing the example the cube output matrix is calculated. The development environment console displays information about matrix: values in cells and cells coordinates. The cells containing calculated data will be marked by the * character. After that, according to modified selection of the CALENDAR dimensions, data formatting method will be set for cells and information about matrix will be re-displayed to the development environment console.

See also:

ICubeExecuteDataTypes