AddCoord(Coord: IMatrixCoord; Type: CubeDataType);
AddCoord(Coord: Prognoz.Platform.Interop.Matrix.IMatrixCoord; Type: Prognoz.Platform.Interop.Cubes.CubeDataType);
Coord. Координата ячейки с данными.
Type. Способ формирования данных, который необходимо задать для ячейки.
Метод AddCoord задаёт способ формирования данных для ячейки с заданной координатой.
Для выполнения примера предполагается наличие стандартного куба с идентификатором «STD_CUBE». В состав куба входят два измерения и измерение фактов. По какому-либо измерению настроена агрегация.
Добавьте ссылки на системные сборки: Cubes, Dimensions, Matrix, Metabase. В Fore.NET также добавьте ссылку на сборку ForeSystem.
Sub UserProc;
Var
MB: IMetabase;
CubeInst: ICubeInstance;
Dest: ICubeInstanceDestination;
Sels: IDimSelectionSet;
Sel: IDimSelection;
Exec: ICubeInstanceDestinationExecutor;
Matr: IMatrix;
CubeExecRes: ICubeExecuteResult;
CubeDataTyp: ICubeExecuteDataTypes;
Coord: IMatrixCoord;
Begin
// Открываем куб
MB := MetabaseClass.Active;
CubeInst := MB.ItemById("STD_CUBE").Open(Null) As ICubeInstance;
Dest := CubeInst.Destinations.DefaultDestination;
// Устанавливаем отметку
Sels := Dest.CreateDimSelectionSet;
For Each Sel In Sels Do
Sel.SelectAll;
End For;
// Устанавливаем поддержку работы с информацией о том, как формируются данные в ячейках
(Sels As ICubeExecuteSetup).UseDataTypes := True;
Exec := Dest.CreateExecutor;
// Вычисляем куб
Exec.PrepareExecute(Sels);
Exec.PerformExecuteO(CubeInstanceDestinationExecutorOptions.None);
Matr := Exec.Matrix;
ShowMatrix("Матрица куба", Matr);
// Задание способа формирования данных для ячейки
CubeExecRes := Matr As ICubeExecuteResult;
CubeDataTyp := CubeExecRes.DataTypes;
Coord := Matr.CreateCoord;
Coord.Item(0) := 0;
Coord.Item(1) := 0;
Coord.Item(2) := 0;
CubeDataTyp.AddCoord(Coord, CubeDataType.Calculated);
ShowMatrix("Матрица после задания способа формирования данных для ячейки", Matr);
End Sub UserProc;
Sub ShowMatrix(Title: String; Matr: IMatrix);
Var
Iter: IMatrixIterator;
CubeExecRes: ICubeExecuteResult;
CubeDataTyp: ICubeExecuteDataTypes;
S: String;
Coord: IMatrixCoord;
Begin
CubeExecRes := Matr As ICubeExecuteResult;
CubeDataTyp := CubeExecRes.DataTypes;
Iter := Matr.CreateIterator;
Iter.Move(IteratorDirection.First);
Debug.WriteLine(Title);
Coord := Matr.CreateCoord;
While Iter.Valid Do
S := (Iter.Value As String) + " (" + Iter.CoordsAsString + ")";
Iter.PutCurrentPos(Coord);
If CubeDataTyp.DataType(Coord) <> CubeDataType.Default_ Then
S := S + "*";
End If;
Debug.WriteLine(s);
Iter.Value := (Iter.Value As Integer) + 1;
Iter.Move(IteratorDirection.Next);
End While;
End Sub ShowMatrix;
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
CubeInst: ICubeInstance;
Dest: ICubeInstanceDestination;
Sels: IDimSelectionSet;
Sel: IDimSelection;
Exec: ICubeInstanceDestinationExecutor;
Matr: IMatrix;
CubeExecRes: ICubeExecuteResult;
CubeDataTyp: ICubeExecuteDataTypes;
Coord: IMatrixCoord;
Begin
// Открываем куб
MB := Params.Metabase;
CubeInst := MB.ItemById["STD_CUBE"].Open(Null) As ICubeInstance;
Dest := CubeInst.Destinations.DefaultDestination;
// Устанавливаем отметку
Sels := Dest.CreateDimSelectionSet();
For Each Sel In Sels Do
Sel.SelectAll();
End For;
// Устанавливаем поддержку работы с информацией о том, как формируются данные в ячейках
(Sels As ICubeExecuteSetup).UseDataTypes := True;
Exec := Dest.CreateExecutor();
// Вычисляем куб
Exec.PrepareExecute(Sels);
Exec.PerformExecuteO(CubeInstanceDestinationExecutorOptions.cideoNone As Integer);
Matr := Exec.Matrix;
ShowMatrix("Матрица куба", Matr);
// Задание способа формирования данных для ячейки
CubeExecRes := Matr As ICubeExecuteResult;
CubeDataTyp := CubeExecRes.DataTypes;
Coord := Matr.CreateCoord();
Coord.Item[0] := 0;
Coord.Item[1] := 0;
Coord.Item[2] := 0;
CubeDataTyp.AddCoord(Coord, CubeDataType.cubdtCalculated);
ShowMatrix("Матрица после задания способа формирования данных для ячейки", Matr);
End Sub;
Shared Sub ShowMatrix(Title: String; Matr: IMatrix);
Var
Iter: IMatrixIterator;
CubeExecRes: ICubeExecuteResult;
CubeDataTyp: ICubeExecuteDataTypes;
S: String;
Coord: IMatrixCoord;
Begin
CubeExecRes := Matr As ICubeExecuteResult;
CubeDataTyp := CubeExecRes.DataTypes;
Iter := Matr.CreateIterator();
Iter.Move(IteratorDirection.itdFirst);
System.Diagnostics.Debug.WriteLine(Title);
Coord := Matr.CreateCoord();
While Iter.Valid Do
S := (Iter.Value As String) + " (" + Iter.CoordsAsString + ")";
Iter.PutCurrentPos(Coord);
If CubeDataTyp.DataType[Coord] <> CubeDataType.cubdtDefault Then
S := S + "*";
End If;
System.Diagnostics.Debug.WriteLine(s);
Iter.Move(IteratorDirection.itdNext);
End While;
End Sub;
При выполнении примера будет осуществлён расчет результирующей матрицы куба. В консоль среды разработки будет выведена информация о матрице: значения в ячейках и координаты ячеек. Ячейки, содержащие расчётные данные, будут отмечены символом «*». После этого для первой ячейки будет задан способ формирования данных и информация о матрице повторно будет выведена в консоль среды разработки.
См. также: