AddCube(Cube: ICubeInstance; Selection: IDimSelectionSet);
AddCube(Cube: Prognoz.Platform.Interop.Cubes.ICubeInstance; Selection: Prognoz.Platform.Interop.Dimensions.IDimSelectionSet);
Cube. Открытый экземпляр куба, который необходимо добавить для расчёта.
Selection. Отметка измерений в соответствии с которой осуществляется расчёт.
Метод AddCube добавляет куб в список для параллельного расчёта.
Куб должен соответствовать требованиям, представленным в описании интерфейса ICubeCombinedExecutor.
Для выполнения примера предполагается наличие в репозитории двух стандартных кубов с идентификаторами «STD_CUBE1» и «STD_CUBE2». Настройки кубов удовлетворяют заданным требованиям. В каждом кубе по три измерения.
Добавьте ссылки на системные сборки: Cubes, Dimensions, ForeSystem, Matrix, Metabase.
Sub UserProc;
Var
MB: IMetabase;
CubeInst: ICubeInstance;
Dest: ICubeInstanceDestination;
Sels: IDimSelectionSet;
CCE: ICubeCombinedExecutor;
Item: ICubeCombinedExecutorItem;
M: IMatrix;
Iter: IMatrixIterator;
i: Integer;
Begin
MB := MetabaseClass.Active;
CCE := New CubeCombinedExecutor.Create;
//Открываем первый куб, задаём отметку и добавляем для параллельного вычисления
CubeInst := MB.ItemById("STD_CUBE1").Open(Null) As ICubeInstance;
Dest := CubeInst.Destinations.DefaultDestination;
Sels := Dest.CreateDimSelectionSet;
Sels.Item(0).SelectAll;
Sels.Item(1).SelectAll;
Sels.Item(2).SelectAll;
CCE.AddCube(CubeInst, Sels);
//Открываем второй куб, задаём отметку и добавляем для параллельного вычисления
CubeInst := MB.ItemById("STD_CUBE2").Open(Null) As ICubeInstance;
Dest := CubeInst.Destinations.DefaultDestination;
Sels := Dest.CreateDimSelectionSet;
Sels.Item(0).SelectAll;
Sels.Item(1).SelectAll;
Sels.Item(2).SelectAll;
CCE.AddCube(CubeInst, Sels);
//Вычисляем добавленные кубы
CCE.Execute;
//Выводим результат для каждого из кубов
For i := 0 To CCE.Count - 1 Do
Item := CCE.Item(i);
Debug.WriteLine("Куб: " + (Item.Cube.Cube As IMetabaseObject).Id + ". MultiExecuted: " + Item.MultiExecuted.ToString);
//Матрица с данными
M := Item.Matrix;
//Выводим элементы матрицы
Iter := M.CreateIterator;
Iter.Move(IteratorDirection.First);
While Iter.Valid Do
Debug.Write(Iter.Value + " ");
Iter.Move(IteratorDirection.Next);
End While;
Debug.WriteLine("");
End For;
End Sub UserProc;
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 Main1(Params: StartParams);
Var
MB: IMetabase;
CubeInst: ICubeInstance;
Dest: ICubeInstanceDestination;
Sels: IDimSelectionSet;
CCE: ICubeCombinedExecutor = New CubeCombinedExecutorClass();
Item: ICubeCombinedExecutorItem;
M: IMatrix;
Iter: IMatrixIterator;
i: Integer;
Begin
MB := Params.Metabase;
//Открываем первый куб, задаём отметку и добавляем для параллельного вычисления
CubeInst := MB.ItemById["STD_CUBE1"].Open(Null) As ICubeInstance;
Dest := CubeInst.Destinations.DefaultDestination;
Sels := Dest.CreateDimSelectionSet();
Sels.Item[0].SelectAll();
Sels.Item[1].SelectAll();
Sels.Item[2].SelectAll();
CCE.AddCube(CubeInst, Sels);
//Открываем второй куб, задаём отметку и добавляем для параллельного вычисления
CubeInst := MB.ItemById["STD_CUBE2"].Open(Null) As ICubeInstance;
Dest := CubeInst.Destinations.DefaultDestination;
Sels := Dest.CreateDimSelectionSet();
Sels.Item[0].SelectAll();
Sels.Item[1].SelectAll();
Sels.Item[2].SelectAll();
CCE.AddCube(CubeInst, Sels);
//Вычисляем добавленные кубы
CCE.Execute();
//Выводим результат для каждого из кубов
For i := 0 To CCE.Count - 1 Do
Item := CCE.Item[i];
System.Diagnostics.Debug.WriteLine("Куб: " + (Item.Cube.Cube As IMetabaseObject).Id + ". MultiExecuted: " + Item.MultiExecuted.ToString());
//Матрица с данными
M := Item.Matrix;
//Выводим элементы матрицы
Iter := M.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("");
End For;
End Sub;
При выполнении примера осуществляется параллельный расчёт двух кубов. Результаты расчётов будут выведены в консоль среды разработки.
См. также: