ICubeValueChange.Executor

Синтаксис

Executor: ICubeInstanceDestinationExecutor;

Executor: Prognoz.Platform.Interop.Cubes.ICubeInstanceDestinationExecutor;

Описание

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

Комментарии

Свойство доступно только на запись. Указываемый объект для расчёта куба будет использоваться для получения матрицы с данными. Для дальнейшей работы получите матрицу в свойстве ICubeValueChange.Matrix. Изменение значений в этой матрице будет приводить к автоматическому пересчёту значений, которые соответствуют вычисляемым фактам.

Пример

Для выполнения примера предполагается наличие стандартного куба с идентификатором «CALC_FACTS_CUBE». В структуре куба имеются измерения с идентификаторами «FACTS», «COUNTRY» и «CALENDAR». В измерении фактов первый факт привязан к данным источника, второй факт является вычисляемым.

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

Sub UserProc;
Var
    MB: IMetabase;
    Cube: ICubeInstance;
    Dest: ICubeInstanceDestination;
    Exec: ICubeInstanceDestinationExecutor;
    Sels: IDimSelectionSet;
    VChange: ICubeValueChange;
    Matr: IMatrix;
    Coord1, Coord2: IMatrixCoord;
Begin
    
//Открываем куб
    MB := MetabaseClass.Active;
    Cube := MB.ItemById(
"CALC_FACTS_CUBE").Open(NullAs ICubeInstance;
    Dest := Cube.Destinations.DefaultDestination;
    
//Создаём отметку
    Sels := Dest.CreateDimSelectionSet;
    Sels.FindById(
"FACTS").SelectAll;
    Sels.FindById(
"COUNTRY").SelectElement(0False);
    Sels.FindById(
"CALENDAR").SelectElement(0False);
    
//Выполняем
    Exec := Dest.CreateExecutor;
    Exec.PrepareExecute(Sels);
    Exec.PerformExecute;
    
//Создаём объект для пересчёта вычисляемых фактов
    VChange := New CubeValueChangeCallback.Create;
    VChange.Executor := Exec;
    Matr := VChange.Matrix;
    
//Координата в кубе по обычному факту
    Coord1 := Matr.CreateCoord;
    Coord1.Item(
0) := 0;
    Coord1.Item(
1) := 0;
    Coord1.Item(
2) := 0;
    
//Координата по вычисляемому факту
    Coord2 := Matr.CreateCoord;
    Coord2.Item(
0) := 1;
    Coord2.Item(
1) := 0;
    Coord2.Item(
2) := 0;
    
//Смотрим текущее значение по вычисляемому факту
    Debug.WriteLine(Matr.Item(Coord2));
    
//Меняем значение элемента матрицы, при этом автоматически пересчитываются вычисляемые факты
    Matr.Item(Coord1) := 500;
    
//Смотрим новое значение по вычисляемому факту
    Debug.WriteLine(Matr.Item(Coord2));
End Sub UserProc;

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

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    Cube: ICubeInstance;
    Dest: ICubeInstanceDestination;
    Exec: ICubeInstanceDestinationExecutor;
    Sels: IDimSelectionSet;
    VChange: ICubeValueChange = 
New CubeValueChangeCallbackClass();
    Matr: IMatrix;
    Coord1, Coord2: IMatrixCoord;
Begin
    
//Открываем куб
    MB := Params.Metabase;
    Cube := MB.ItemById[
"CALC_FACTS_CUBE"].Open(NullAs ICubeInstance;
    Dest := Cube.Destinations.DefaultDestination;
    
//Создаём отметку
    Sels := Dest.CreateDimSelectionSet();
    Sels.FindById(
"FACTS").SelectAll();
    Sels.FindById(
"COUNTRY").SelectElement(0False);
    Sels.FindById(
"CALENDAR").SelectElement(0False);
    
//Выполняем
    Exec := Dest.CreateExecutor();
    Exec.PrepareExecute(Sels);
    Exec.PerformExecute(
False);
    
//Создаём объект для пересчёта вычисляемых фактов
    VChange.Executor := Exec;
    Matr := VChange.Matrix;
    
//Координата в кубе по обычному факту
    Coord1 := Matr.CreateCoord();
    Coord1.Item[
0] := 0;
    Coord1.Item[
1] := 0;
    Coord1.Item[
2] := 0;
    
//Координата по вычисляемому факту
    Coord2 := Matr.CreateCoord();
    Coord2.Item[
0] := 1;
    Coord2.Item[
1] := 0;
    Coord2.Item[
2] := 0;
    
//Смотрим текущее значение по вычисляемому факту
    System.Diagnostics.Debug.WriteLine(Matr.Item[Coord2]);
    
//Меняем значение элемента матрицы, при этом автоматически пересчитываются вычисляемые факты
    Matr.Item[Coord1] := 500;
    
//Смотрим новое значение по вычисляемому факту
    System.Diagnostics.Debug.WriteLine(Matr.Item[Coord2]);
End Sub;

При выполнении примера будет создан объект, предназначенный для пересчёта значений по вычисляемым фактам. Сначала будет получено текущее значение вычисляемого факта. Затем по заданной координате матрицы будет изменено значение. После этого будет получено новое значение вычисляемого факта.

См. также:

ICubeValueChange