SetMatrix(StubKey: Integer; Value: IMatrix);
StudKey. Ключ источника данных, для которого устанавливается матрица.
Value. Матрица с данными, которая будет использоваться при расчёте задачи моделирования.
Метод SetMatrix устанавливает для расчёта алгоритма матрицу с данными.
Метод SetMatrix позволяет установить для источника данных, участвующего в задаче, матрицу с данными, которая будет использована при расчёте алгоритма вместо реальных данных куба/СУБД/кеша. Данная матрица может быть полностью создана и заполнена вручную с помощью языка Fore, загружена из другого куба с теми же измерениями или исходного куба, но с измененной отметкой данных. Для отметки изменившихся значений используемой матрицы установите флаг, задав свойство IMatrix.ValueFlag.
Для выполнения примера в репозитории предполагается наличие алгоритма расчёта с идентификатором ALGORITHM, а также двух стандартных кубов с одинаковыми измерениями:
куб с идентификатором CUBE является источником данных блока расчёта;
куб с идентификатором CUBE_2 используется для загрузки матрицы данных в источник.
Добавьте ссылки на системные сборки: Algo, Cubes, Dimensions, Metabase, Matrix. Также добавьте ссылки на сборки, которые необходимы для работы с алгоритмами расчёта.
Sub UserProc;
Var
MB: IMetabase;
MObj: IMetabaseObjectDescriptor;
Cube: ICubeInstance;
DefDes: ICubeInstanceDestination;
Matr, Matr1: IMatrix;
DimSS, DimSS1: IDimSelectionSet;
SSFact: IDimSelectionSetFactory;
DimS: IDimSelection;
Algo: ICalcObject;
CalcAlgo: ICalcAlgorithm;
CalcAlgoExecuter: IAlgorithmCalculationExecutor;
CalcResult: IAlgorithmCalculationResult;
i: Integer;
Begin
// Получаем текущий репозиторий
MB := MetabaseClass.Active;
// Открываем куб,
матрица данных которого будет использоваться при расчёте алгоритма
Cube := Mb.ItemById("CUBE_2").Open(Null) As ICubeInstance;
// Задаем отметку измерений куба
DefDes := Cube.Destinations.DefaultDestination;
DimSS := DefDes.CreateDimSelectionSet;
For Each DimS In DimSS Do
DimS.SelectAll;
End For;
// Получаем матрицу
Matr := DefDes.Execute(DimSS);
// Получаем алгоритм расчёта
MObj := MB.ItemById("ALGORITHM");
Algo := CalcObjectFactory.CreateCalcObject(MObj, True);
CalcAlgo := Algo As ICalcAlgorithm;
CalcAlgoExecuter := CalcObjectFactory.CreateCalculationExecutor(MObj);
// Устанавливаем матрицу для расчета алгоритма
CalcAlgoExecuter.SetMatrix(Mb.ItemById("CUBE").Key, Matr);
// Запускаем расчёт
CalcResult := CalcAlgoExecuter.Run;
Debug.WriteLine(" Расчёт завершён за " + CalcResult.TotalElapsedMilliseconds.ToString + " мс.");
End Sub UseProc;
При выполнении примера для расчёта алгоритма будет определена матрица данных, которая будет использоваться при его расчёте, затем расчёт будет выполнен.
См. также: