ICubeInstanceDestination.CreateExecutorO

Синтаксис

CreateExecutorO(Options: Integer): ICubeInstanceDestinationExecutor;

CreateExecutorO(Options: integer): Prognoz.Platform.Interop.Cubes.ICubeInstanceDestinationExecutor;

Параметры

Options. Параметры расчёта куба.

Описание

Метод CreateExecutorO создает объект, осуществляющий расчёт результирующей матрицы куба с использованием параметров.

Пример 1

Для выполнения примера предполагается наличие в репозитории куба с идентификатором «CUBE».

Добавьте ссылки на системные сборки: Cubes, Dimensions, Matrix, Metabase.

Sub UserProc;
Var
    MB: IMetabase;
    CubeInst: ICubeInstance;
    DefDest: ICubeInstanceDestination;
    SelSet: IDimSelectionSet;
    i: integer;
    DestExec: ICubeInstanceDestinationExecutor;
    Proxy: IMatrix;
    Iter: IMatrixIterator;
Begin
    MB := MetabaseClass.Active;
    CubeInst := MB.ItemById("CUBE").Open(NullAs ICubeInstance;
    DefDest := CubeInst.Destinations.DefaultDestination;
    SelSet := DefDest.CreateDimSelectionSet;
    For i := 0 To SelSet.Count - 1 Do
        SelSet.Item(i).SelectAll;
    End For;
    Debug.WriteLine("---------------Значения-------------------");
    DestExec := DefDest.CreateExecutorO(CubeInstanceDestinationExecutorOptions.MatrixProxy);
    DestExec.PrepareExecute(SelSet);
    DestExec.PerformExecute(False);
    Proxy := DestExec.Matrix;
    Iter := Proxy.CreateIterator;
    Iter.Move(IteratorDirection.First);
    i := 0;
    While Iter.Valid Do
        Debug.WriteLine(i.ToString + " Iter.Value = " + Iter.Value);
        Iter.Move(IteratorDirection.Next);
        i := i + 1;
    End While;
End Sub UserProc;

Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Matrix;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    CubeInst: ICubeInstance;
    DefDest: ICubeInstanceDestination;
    SelSet: IDimSelectionSet;
    i: integer;
    DestExec: ICubeInstanceDestinationExecutor;
    Proxy: IMatrix;
    Iter: IMatrixIterator;
Begin
    MB := Params.Metabase;
    CubeInst := MB.ItemById["CUBE"].Open(NullAs ICubeInstance;
    DefDest := CubeInst.Destinations.DefaultDestination;
    SelSet := DefDest.CreateDimSelectionSet();
    For i := 0 To SelSet.Count - 1 Do
        SelSet.Item[i].SelectAll();
    End For;
    System.Diagnostics.Debug.WriteLine("---------------Значения-------------------");
    DestExec := DefDest.CreateExecutorO(CubeInstanceDestinationExecutorOptions.cideoMatrixProxy As Integer);
    DestExec.PrepareExecute(SelSet);
    DestExec.PerformExecute(False);
    Proxy := DestExec.Matrix;
    Iter := Proxy.CreateIterator();
    Iter.Move(IteratorDirection.itdFirst);
    i := 0;
    While Iter.Valid Do
        System.Diagnostics.Debug.WriteLine(i.ToString() + " Iter.Value = " + Iter.Value);
        Iter.Move(IteratorDirection.itdNext);
        i := i + 1;
    End While;
End Sub;

После выполнения примера в окно консоли будут выведены значения элементов матрицы куба.

Пример 2

Для выполнения примера предполагается наличие в репозитории каталога ADOMD с идентификатором «ADOMDTest». В каталоге имеется куб ADOMD «SALES». В структуре куба имеются измерения «DATE» и «TERRITORY». Подключите системные сборки: AdoMd, Cubes, Dimensions, Matrix, Metabase.

Sub UserProc;
Var
    MB: IMetabase;
    AdomdInst: IAdoMdCubeInstance;
    CubeInst: ICubeInstance;
    DefDest: ICubeInstanceDestination;
    SelSet: IDimSelectionSet;
    CubeExecSetup: ICubeExecuteSetup;
    DimSetup: ICubeExecuteDimSetup;
    DestExec: ICubeInstanceDestinationExecutor;
    Matr: IMatrix;
    Iter: IMatrixIterator;
    i: Integer;
Begin
    MB := MetabaseClass.Active;
    AdomdInst := MB.ItemByIdNamespace(
"SALES", MB.GetObjectKeyById("ADOMDTest")).Open(NullAs IAdoMdCubeInstance;
    CubeInst := AdomdInst.CubeInstance;
    DefDest := CubeInst.Destinations.DefaultDestination;
    SelSet := DefDest.CreateDimSelectionSet;
    CubeExecSetup := SelSet 
As ICubeExecuteSetup;
    
For Each DimSetup In CubeExecSetup Do
        
If DimSetup.Id = "DATE" Then
            DimSetup.Selection.SelectAll;
            DimSetup.GroupIndex := 
2//По строкам
        Elseif DimSetup.Id = "TERRITORY" Then
            DimSetup.Selection.SelectAll;
            DimSetup.GroupIndex := 
1//По столбцам
        Else
            DimSetup.Selection.SelectElement(0
False);
            DimSetup.GroupIndex := 
0//Фиксированные
        End If;
    
End For;
    
//Подготовка к расчёту
    DestExec := DefDest.CreateExecutorO(CubeInstanceDestinationExecutorOptions.MatrixWOFixed);
    DestExec.PrepareExecute(SelSet);
    DestExec.PerformExecute;
    Matr := DestExec.Matrix;
    Debug.WriteLine(
"---------------Значения-------------------");
    Debug.WriteLine(
"Количество значений: " + Matr.Count.ToString);
    Debug.WriteLine(
"Количество измерений: " + Matr.DimensionCount.ToString);
    Iter := Matr.CreateIterator;
    Iter.Move(IteratorDirection.First);
    
While Iter.Valid Do
        i := i + 
1;
        Debug.WriteLine(
"№" + i.ToString + ". Value = " + Iter.Value);
        Iter.Move(IteratorDirection.Next);
    
End While;
End Sub UserProc;

Imports Prognoz.Platform.Interop.AdoMd;
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;
    AdomdInst: IAdoMdCubeInstance;
    CubeInst: ICubeInstance;
    DefDest: ICubeInstanceDestination;
    SelSet: IDimSelectionSet;
    CubeExecSetup: ICubeExecuteSetup;
    DimSetup: ICubeExecuteDimSetup;
    DestExec: ICubeInstanceDestinationExecutor;
    Matr: IMatrix;
    Iter: IMatrixIterator;
    i: Integer;
Begin
    MB := Params.Metabase;
    AdomdInst := MB.ItemByIdNamespace[
"SALES", MB.GetObjectKeyById("ADOMDTest")].Open(NullAs IAdoMdCubeInstance;
    CubeInst := AdomdInst.CubeInstance;
    DefDest := CubeInst.Destinations.DefaultDestination;
    SelSet := DefDest.CreateDimSelectionSet();
    CubeExecSetup := SelSet 
As ICubeExecuteSetup;
    
For Each DimSetup In CubeExecSetup Do
        
If DimSetup.Id = "DATE" Then
            DimSetup.Selection.SelectAll();
            DimSetup.GroupIndex := 
2//По строкам
        Elseif DimSetup.Id = "TERRITORY" Then
            DimSetup.Selection.SelectAll();
            DimSetup.GroupIndex := 
1//По столбцам
        Else
            DimSetup.Selection.SelectElement(0
False);
            DimSetup.GroupIndex := 
0//Фиксированные
        End If;
    
End For;
    
//Подготовка к расчёту
    DestExec := DefDest.CreateExecutorO(CubeInstanceDestinationExecutorOptions.cideoMatrixWOFixed As Integer);
    DestExec.PrepareExecute(SelSet);
    DestExec.PerformExecute(
False);
    Matr := DestExec.Matrix;
    System.Diagnostics.Debug.WriteLine(
"---------------Значения-------------------");
    System.Diagnostics.Debug.WriteLine(
"Количество значений: " + Matr.Count.ToString());
    System.Diagnostics.Debug.WriteLine(
"Количество измерений: " + Matr.DimensionCount.ToString());
    Iter := Matr.CreateIterator();
    Iter.Move(IteratorDirection.itdFirst);
    
While Iter.Valid Do
        i := i + 
1;
        System.Diagnostics.Debug.WriteLine(
"№" + i.ToString() + ". Value = " + Iter.Value);
        Iter.Move(IteratorDirection.itdNext);
    
End While;
End Sub;

При выполнении примера будет произведён расчёт куба ADOMD. Отметка измерений для расчёта формируется следующим образом:

При расчёте из результирующей матрицы будут исключены фиксированные измерения. Результаты расчёта будут выведены в консоль среды разработки.

См. также:

ICubeInstanceDestination