ICubeExecuteDataTypes.AddSelectionSet

Синтаксис

AddSelectionSet(SelSet: IDimSelectionSet; Type: CubeDataType);

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

Параметры

SelSet. Отметка, в соответствии с которой берутся ячейки.

Type. Способ формирования данных, который необходимо задать для ячейки.

Описание

Метод AddSelectionSet задаёт способ формирования данных для множества ячеек, которые соответствуют указанной отметке.

Пример

Для выполнения примера предполагается наличие стандартного куба с идентификатором «STD_CUBE». В состав куба входят два измерения и измерение фактов. Настроена агрегация для календарного измерения с идентификатором «CALENDAR».

Добавьте ссылки на системные сборки: Cubes, Dimensions, Matrix, Metabase. В Fore.NET также добавьте ссылку на сборку ForeSystem.

Sub UserProc;
Var
    MB: IMetabase;
    CubeInst: ICubeInstance;
    Dest: ICubeInstanceDestination;
    Sels: IDimSelectionSet;
    Sel: IDimSelection;
    Exec: ICubeInstanceDestinationExecutor;
    Matr: IMatrix;
    CubeExecRes: ICubeExecuteResult;
    CubeDataTyp: ICubeExecuteDataTypes;
Begin
    
// Открываем куб
    MB := MetabaseClass.Active;
    CubeInst := MB.ItemById(
"STD_CUBE").Open(NullAs ICubeInstance;
    Dest := CubeInst.Destinations.DefaultDestination;
    
// Устанавливаем отметку
    Sels := Dest.CreateDimSelectionSet;
    
For Each Sel In Sels Do
        Sel.SelectAll;
    
End For;
    
// Устанавливаем поддержку работы с информацией о том, как формируются данные в ячейках
    (Sels As ICubeExecuteSetup).UseDataTypes := True;
    Exec := Dest.CreateExecutor;
    
// Вычисляем куб
    Exec.PrepareExecute(Sels);
    Exec.PerformExecuteO(CubeInstanceDestinationExecutorOptions.None);
    Matr := Exec.Matrix;
    ShowMatrix(
"Матрица куба", Matr);
    
// Задание способа формирования данных для ячейки
    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(
"Матрица после задания способа формирования данных для ячейки", 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
    
// Открываем куб
    MB := Params.Metabase;
    CubeInst := MB.ItemById[
"STD_CUBE"].Open(NullAs ICubeInstance;
    Dest := CubeInst.Destinations.DefaultDestination;
    
// Устанавливаем отметку
    Sels := Dest.CreateDimSelectionSet();
    
For Each Sel In Sels Do
        Sel.SelectAll();
    
End For;
    
// Устанавливаем поддержку работы с информацией о том, как формируются данные в ячейках
    (Sels As ICubeExecuteSetup).UseDataTypes := True;
    Exec := Dest.CreateExecutor();
    
// Вычисляем куб
    Exec.PrepareExecute(Sels);
    Exec.PerformExecuteO(CubeInstanceDestinationExecutorOptions.cideoNone 
As Integer);
    Matr := Exec.Matrix;
    ShowMatrix(
"Матрица куба", Matr);
    
// Задание способа формирования данных для ячейки
    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(
"Матрица после задания способа формирования данных для ячейки", 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;

При выполнении примера будет осуществлён расчет результирующей матрицы куба. В консоль среды разработки будет выведена информация о матрице: значения в ячейках и координаты ячеек. Ячейки, содержащие расчётные данные, будут отмечены символом «*». После этого в соответствии с изменённой отметкой измерения «CALENDAR» для ячеек будет задан способ формирования данных и информация о матрице повторно будет выведена в консоль среды разработки.

См. также:

ICubeExecuteDataTypes