Options. Параметры расчёта куба.
Метод PerformExecuteO осуществляет расчёт куба в заданном режиме.
Если расчёт результирующей матрицы куба осуществляется на базе кэшированных данных (Options = CubeInstanceDestinationExecutorOptions.Cached), то дальнейшая работа с полученными данными должна осуществляться с использованием блокировок чтения/изменения данных на прикладном уровне. Для использования блокировок приведите полученную матрицу Matrix к интерфейсу IRWMutex и используйте его методы для включения/отключения необходимой блокировки.
Для выполнения примера предполагается наличие в репозитории базы данных временных рядов с идентификатором «FC_RUBRICATOR». В данной базе должен присутствовать уникальный атрибут, ссылающийся на справочник с идентификатором «DICT_IND», расположенный в репозитории НСИ с идентификатором «RDS_REPO».
Sub UserProc;
Var
MB: IMetabase;
RubDesc: IMetabaseObjectDescriptor;
RubrIn: IRubricatorInstance;
Cub: ICubeInstance;
Dest: ICubeInstanceDestination;
Sels: IDimSelectionSet;
Sel: IDimSelection;
DictDescr: IMetabaseObjectDescriptor;
DictInst: IDimInstance;
Exec: ICubeInstanceDestinationExecutor;
Mat: IMatrix;
Iter: IMatrixIterator;
Begin
MB := MetabaseClass.Active;
RubDesc := MB.ItemById("FC_RUBRICATOR");
RubrIn := RubDesc.Open(Null) As IRubricatorInstance;
Cub := RubrIn As ICubeInstance;
Dest := Cub.Destinations.DefaultDestination;
Sels := Dest.CreateDimSelectionSet;
Sels.Clear;
Sel := Sels.Add(RubrIn.CalendarLevelsDimension);
Sel.SelectAll;
DictDescr := MB.ItemByIdNamespace("DICT_IND", MB.ItemById("RDS_REPO").Key);
DictInst := DictDescr.Open(Null) As IDimInstance;
Sel := Sels.Add(DictInst);
Sel.SelectElement(0, False);
Exec := Dest.CreateExecutor;
Exec.ScenarioKey := -1;
Exec.PrepareExecute(Sels);
Exec.PerformExecuteO(CubeInstanceDestinationExecutorOptions.Reload);
Mat := Exec.Matrix;
Iter := Mat.CreateIterator;
Iter.Move(IteratorDirection.First);
While Iter.Valid Do
Debug.WriteLine(Iter.Value);
Iter.Move(IteratorDirection.Next);
End While;
End Sub UserProc;
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Matrix;
Imports Prognoz.Platform.Interop.ForeSystem;
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
RubDesc: IMetabaseObjectDescriptor;
RubrIn: IRubricatorInstance;
Cub: ICubeInstance;
Dest: ICubeInstanceDestination;
Sels: IDimSelectionSet;
Sel: IDimSelection;
DictDescr: IMetabaseObjectDescriptor;
DictInst: IDimInstance;
Exec: ICubeInstanceDestinationExecutor;
Mat: IMatrix;
Iter: IMatrixIterator;
Begin
MB := Self.Metabase;
RubDesc := MB.ItemById["FC_RUBRICATOR"];
RubrIn := RubDesc.Open(Null) As IRubricatorInstance;
Cub := RubrIn As ICubeInstance;
Dest := Cub.Destinations.DefaultDestination;
Sels := Dest.CreateDimSelectionSet();
Sels.Clear();
Sel := Sels.Add(RubrIn.CalendarLevelsDimension);
Sel.SelectAll();
DictDescr := MB.ItemByIdNamespace["DICT_IND", MB.ItemById["RDS_REPO"].Key];
DictInst := DictDescr.Open(Null) As IDimInstance;
Sel := Sels.Add(DictInst);
Sel.SelectElement(0, False);
Exec := Dest.CreateExecutor();
Exec.ScenarioKey := UInteger.MaxValue;
Exec.PrepareExecute(Sels);
Exec.PerformExecuteO(CubeInstanceDestinationExecutorOptions.cideoReload As Integer);
Mat := Exec.Matrix;
Iter := Mat.CreateIterator();
Iter.Move(IteratorDirection.itdFirst);
While Iter.Valid Do
System.Diagnostics.Debug.WriteLine(Iter.Value);
Iter.Move(IteratorDirection.itdNext);
End While;
End Sub;
При выполнении примера данные базы данных временных рядов будут представлены как данные отстроенного куба. При этом кэш данных объекта будет перечитан и перезагружен из базы данных, после чего произведётся расчёт и полученные данные будут выведены в окно консоли.
См. также: