Matrix(Index: Integer): IMatrix;
Index. Индекс источника, матрицу с данными которого необходимо получить.
Свойство Matrix возвращает матрицу источника данных виртуального куба.
Для выполнения примера в репозитории предполагается наличие виртуального куба с идентификатором VIRT_CUBE. Виртуальный куб имеет минимум один источник данных, в структуре которого два измерения. Измерения не фиксируются в виртуальном кубе.
Добавьте ссылки на системные сборки: Cubes, Dimensions, Matrix, Metabase.
Sub UserProc;
Var
MB: IMetabase;
Desc: IMetabaseObjectDescriptor;
Cube: ICubeInstance;
Dest: ICubeInstanceDestination;
Sels: IDimSelectionSet;
Sel: IDimSelection;
Exec: ICubeInstanceDestinationExecutor;
Matrs: IVirtualCubeSourceMatrices;
Matr: IMatrix;
Coord: IMatrixCoord;
Begin
// Открытие куба
MB := MetabaseClass.Active;
Desc := MB.ItemById("VIRT_CUBE");
Cube := Desc.Open(Null) As ICubeInstance;
Dest := Cube.Destinations.DefaultDestination;
// Установка отметки
Sels := Dest.CreateDimSelectionSet;
For Each Sel In Sels Do
Sel.SelectAll;
End For;
// Расчёт виртуального куба с доступом к матрицам источников
Exec := Dest.CreateExecutorO(CubeInstanceDestinationExecutorOptions.KeepSourceMatrices);
Exec.PrepareExecute(Sels);
Exec.PerformExecute;
// Доступ к матрицам источников
Matrs := Exec.Matrix As IVirtualCubeSourceMatrices;
Debug.WriteLine("Количество матриц источников: " + Matrs.Count.ToString);
// Заменяем данные в одном из источников, после чего изменяются также данные в матрице-результате
Matr := Matrs.Matrix(0);
Coord := Matr.CreateCoord;
Coord.Item(0) := 0;
Coord.Item(1) := 0;
Matr.Item(Coord) := 100;
// Заменяем данные в матрице-результате, после чего изменяются данные в соответствующем источнике
Matr := Exec.Matrix;
Coord := Matr.CreateCoord;
Coord.Item(0) := 0;
Coord.Item(1) := 0;
Coord.Item(2) := 0;
Matr.Item(Coord) := 200;
End Sub UserProc;
При выполнении примера будет произведён расчёт результирующей матрицы виртуального куба в режиме доступа к матрицам источников. Количество доступных матриц выводится в консоль среды разработки. В коде в общем виде приведён пример изменения данных в матрице источника и в результирующей матрице самого виртуального куба без фактического сохранения изменённых данных.
См. также: