CreateExecutorO(Options: Integer): ICubeInstanceDestinationExecutor;
CreateExecutorO(Options: integer): Prognoz.Platform.Interop.Cubes.ICubeInstanceDestinationExecutor;
Options. Параметры расчёта куба.
Метод CreateExecutorO создает объект, осуществляющий расчёт результирующей матрицы куба с использованием параметров.
Для выполнения примера предполагается наличие в репозитории куба с идентификатором «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(Null) As 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(Null) As 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;
После выполнения примера в окно консоли будут выведены значения элементов матрицы куба.
Для выполнения примера предполагается наличие в репозитории каталога 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(Null) As 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(Null) As 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. Отметка измерений для расчёта формируется следующим образом:
Измерения «DATE» и «TERRITORY» будут расположены по строкам/столбцам соответственно. В измерениях будут отмечены все элементы;
Все остальные измерения будут включены в фиксированные, по ним будет отмечен первый элемент.
При расчёте из результирующей матрицы будут исключены фиксированные измерения. Результаты расчёта будут выведены в консоль среды разработки.
См. также: