CumulativeMethod: MsCumulativeMethodType;
CumulativeMethod: Prognoz.Platform.Interop.Ms.MsCumulativeMethodType;
Свойство CumulativeMethod определяет метод накопления.
По умолчанию свойство имеет значение MsCumulativeMethodType.Average.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS». В данном контейнере моделирования должна присутствовать модель накопления с идентификатором «MODEL_CUMULATIVE».
Добавьте ссылки на системные сборки: Dimensions, Cubes, Ms, Metabase.
Sub UserProc;
Var
mb: IMetabase;
ModelCont: IMetabaseObjectDescriptor;
Model: IMsModel;
Transform: IMsFormulaTransform;
TransformVar: IMsFormulaTransformVariable;
Slice: IMsFormulaTransformSlice;
Formula: IMsFormula;
CumTr: IMsCumulativeTransform;
trInfo: IMsFormulaTermInfo;
DataSC: IVariableStub;
Calcul: IMsModelCalculation;
SelSetFactory: IDimSelectionSetFactory;
SelSet: IDimSelectionSet;
Sel: IDimSelection;
i: Integer;
ResultVals: Array Of Double;
Begin
// Получаем текущий репозиторий
mb := MetabaseClass.Active;
// Получаем контейнер моделирования
ModelCont := mb.ItemById("MS");
// Получаем модель накопления
Model := mb.ItemByIdNamespace("MODEL_CUMULATIVE", ModelCont.Key).Edit As IMsModel;
// Получаем параметры модели
Transform := Model.Transform;
Formula := Transform.FormulaItem(0);
CumTr := Formula.Method As IMsCumulativeTransform;
// Заменяем входную переменную
Transform.Inputs.Clear;
DataSC := (ModelCont.Bind As IMsModelSpace).DefaultObject As IVariableStub;
TransformVar := Transform.Inputs.Add(DataSC);
SelSetFactory := New DimSelectionSetFactory.Create;
SelSet := SelSetFactory.CreateDimSelectionSet;
For i := 0 To DataSC.DimensionCount - 1 Do
Sel := SelSet.Add((DataSC.Dimension(i) As IMetabaseObject).Open(Null) As IDimInstance);
Sel.SelectElement(2, False);
End For;
Slice := TransformVar.Slices.Add(SelSet);
trInfo := Transform.CreateTermInfo;
trInfo.Slice := Slice;
CumTr.Input := trInfo;
// Задаем метод накопления
CumTr.CumulativeMethod := MsCumulativeMethodType.Median;
// Создаем параметры расчета
calcul := Model.CreateCalculation;
calcul.Period.IdentificationStartDate := Transform.Period.IdentificationStartDate;
calcul.Period.IdentificationEndDate := Transform.Period.IdentificationEndDate;
calcul.Period.ForecastStartDate := Transform.Period.ForecastStartDate;
calcul.Period.ForecastEndDate := Transform.Period.ForecastEndDate;
// Получаем и выводим значения моделируемой переменной
ResultVals := CumTr.Result.Serie(Calcul As IMsMethodCalculation);
For i := 0 To ResultVals.Length - 1 Do
Debug.WriteLine(ResultVals[i]);
End For;
// Сохраняем модель
(Model As IMetabaseObject).Save;
End Sub UserProc;
В результате выполнения примера для модели будет изменена входная переменная и метод расчета накопления. В окно консоли будут выведены значения моделируемой переменной.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore. Вместо компонентов Fore используйте их Fore.NET аналоги.
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Ms;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
ModelCont: IMetabaseObjectDescriptor;
Model: IMsModel;
Transform: IMsFormulaTransform;
TransformVar: IMsFormulaTransformVariable;
Slice: IMsFormulaTransformSlice;
Formula: IMsFormula;
CumTr: IMsCumulativeTransform;
trInfo: IMsFormulaTermInfo;
DataSC: IVariableStub;
Calcul: IMsModelCalculation;
SelSetFactory: IDimSelectionSetFactory;
SelSet: IDimSelectionSet;
Sel: IDimSelection;
i: Integer;
ResultVals: System.Array;
Begin
// Получаем текущий репозиторий
mb := Params.Metabase;
// Получаем контейнер моделирования
ModelCont := mb.ItemById["MS"];
// Получаем модель накопления
Model := mb.ItemByIdNamespace["MODEL_CUMULATIVE", ModelCont.Key].Edit() As IMsModel;
// Получаем параметры модели
Transform := Model.Transform;
Formula := Transform.FormulaItem[0];
CumTr := Formula.Method As IMsCumulativeTransform;
// Заменяем входную переменную
Transform.Inputs.Clear();
DataSC := (ModelCont.Bind() As IMsModelSpace).DefaultObject As IVariableStub;
TransformVar := Transform.Inputs.Add(DataSC);
SelSetFactory := New DimSelectionSetFactory.Create();
SelSet := SelSetFactory.CreateDimSelectionSet();
For i := 0 To DataSC.DimensionCount - 1 Do
Sel := SelSet.Add((DataSC.Dimension[i] As IMetabaseObject).Open(Null) As IDimInstance);
Sel.SelectElement(2, False);
End For;
Slice := TransformVar.Slices.Add(SelSet);
trInfo := Transform.CreateTermInfo();
trInfo.Slice := Slice;
CumTr.Input := trInfo;
// Задаем метод накопления
CumTr.CumulativeMethod := MsCumulativeMethodType.mcmtMedian;
// Создаем параметры расчета
calcul := Model.CreateCalculation();
calcul.Period.IdentificationStartDate := Transform.Period.IdentificationStartDate;
calcul.Period.IdentificationEndDate := Transform.Period.IdentificationEndDate;
calcul.Period.ForecastStartDate := Transform.Period.ForecastStartDate;
calcul.Period.ForecastEndDate := Transform.Period.ForecastEndDate;
// Получаем и выводим значения моделируемой переменной
ResultVals := CumTr.Result.Serie[Calcul As IMsMethodCalculation];
For i := 0 To ResultVals.Length - 1 Do
System.Diagnostics.Debug.WriteLine(ResultVals[i]);
End For;
// Сохраняем модель
(Model As IMetabaseObject).Save();
End Sub;
См. также: