Input: IMsFormulaTermInfo;
Input: Prognoz.Platform.Interop.Ms.IMsFormulaTermInfo;
Свойство Input определяет терм, соответствующий исходной переменной.
Для исходной динамики используйте свойство IMsCollapseTransform.InputLevel.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS». В данном контейнере моделирования должна присутствовать модель с идентификатором «MODEL_COLLAPSE_VECT», рассчитываемая методом «Коллапс (векторный расчет)». Также предполагается наличие базы данных временных рядов с идентификатором «TSDB», содержащая годовые и месячные динамики.
Добавьте ссылки на системные сборки: Cubes, Dimensions, Metabase, Ms, Stat.
Sub UserProc;
Var
mb: IMetabase;
MsKey: Integer;
Model: IMsModel;
Stub: IVariableStub;
Tree: IMsFormulaTransformSlicesTree;
RubrDescr: IMetabaseObjectDescriptor;
Transform: IMsFormulaTransform;
TransformVarables: IMsFormulaTransformVariables;
TransformVar: IMsFormulaTransformVariable;
Coord: IMsFormulaTransformCoord;
Slice: IMsFormulaTransformSlice;
Collapse: IMsCollapseTransform;
TermInfo: IMsFormulaTermInfo;
Calcul: IMsMethodCalculation;
arr: Array Of double;
i: Integer;
Period: IMsModelPeriod;
Begin
// Получаем текущий репозиторий
mb := MetabaseClass.Active;
// Получаем ключ контейнера моделирования
MsKey := mb.GetObjectKeyById("MS");
// Получаем модель
Model := mb.ItemByIdNamespace("MODEL_COLLAPSE_VECT", MsKey).Edit As IMsModel;
// Получаем объект для настройки параметров модели
Transform := Model.Transform;
// Получаем коллекцию моделируемых переменных
TransformVarables := Transform.Outputs;
// Получаем первую моделируемую переменную
TransformVar := TransformVarables.Item(0);
// Создаем параметры расчета моделируемой переменной
Coord := Transform.CreateCoord(TransformVar);
// Получаем параметры расчета метода «Коллапс»
Collapse := Transform.FormulaItem(0).Method As IMsCollapseTransform;
// Получаем базу данных временных рядов (БДВР)
RubrDescr := Mb.ItemById("TSDB");
// Приводим полученную БДВР к абстрактному источнику данных
Stub := RubrDescr.Bind As IVariableStub;
// Добавляем в модель фактор, источником данных которого является БДВР
TransformVar := Transform.Inputs.Add(Stub);
Tree := TransformVar.SlicesTree(TransformVar);
Slice := Tree.CreateSlice(2);
// Получаем фактор в виде терма
TermInfo := Transform.CreateTermInfo;
TermInfo.Slice := Slice;
// Указываем полученный терм в качестве исходной переменной
Collapse.Input := TermInfo;
// Указываем исходную динамику
Collapse.InputLevel := DimCalendarLevel.Month;
// Задаем тип коллапса
Collapse.MethodType := MsCollapseType.Average;
// Указываем метод обработки пропусков
Collapse.MissingData.Method := MissingDataMethod.LinTrend;
// Задаем количество пропущенных значений в моделируемом ряде,
// которое можно считать приемлемыми для выполнения агрегации
Collapse.Tolerance := 5;
// Создаем объект с параметрами расчета модели
Calcul := Transform.CreateCalculation;
// Задаем периоды расчета
Period := Model.Transform.Period;
Calcul.Period.IdentificationStartDate := Period.IdentificationStartDate;
Calcul.Period.IdentificationEndDate := Period.IdentificationEndDate;
Calcul.Period.ForecastStartDate := Period.ForecastStartDate;
Calcul.Period.ForecastEndDate := Period.ForecastEndDate;
Calcul.CurrentPoint := Period.IdentificationStartDate;
// Получаем данные моделируемой переменной
arr := Collapse.CalculateSeries(Calcul, Coord).Modelling;
// Выводим наименование и данные моделируемой переменной в окно консоли
Debug.WriteLine(Collapse.Result.TermInfo.TermText);
For i := 0 To arr.Length - 1 Do
Debug.WriteLine(arr[i]);
End For;
// Сохраняем изменения в модели
(Model As IMetabaseObject).Save;
End Sub UserProc;
В результате выполнения примера будут изменены настройки расчета модели «MODEL_COLLAPSE_VECT»: изменена выходная переменная, метод расчета коллапса и пр. Результаты расчета будут выведены в окно консоли.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
MsKey: uinteger;
Model: IMsModel;
Stub: IVariableStub;
Tree: IMsFormulaTransformSlicesTree;
RubrDescr: IMetabaseObjectDescriptor;
Transform: IMsFormulaTransform;
TransformVarables: IMsFormulaTransformVariables;
TransformVar: IMsFormulaTransformVariable;
Coord: IMsFormulaTransformCoord;
Slice: IMsFormulaTransformSlice;
Collapse: IMsCollapseTransform;
TermInfo: IMsFormulaTermInfo;
Calcul: IMsMethodCalculation;
arr: System.Array;
i: Integer;
Period: IMsModelPeriod;
Begin
// Получаем текущий репозиторий
mb := Params.Metabase;
// Получаем ключ контейнера моделирования
MsKey := mb.GetObjectKeyById("MS");
// Получаем модель
Model := mb.ItemByIdNamespace["MODEL_COLLAPSE_VECT", MsKey].Edit() As IMsModel;
// Получаем объект для настройки параметров модели
Transform := Model.Transform;
// Получаем коллекцию моделируемых переменных
TransformVarables := Transform.Outputs;
// Получаем первую моделируемую переменную
TransformVar := TransformVarables.Item[0];
// Создаем параметры расчета моделируемой переменной
Coord := Transform.CreateCoord(TransformVar);
// Получаем параметры расчета метода «Коллапс»
Collapse := Transform.FormulaItem[0].Method As IMsCollapseTransform;
// Получаем базу данных временных рядов (БДВР)
RubrDescr := Mb.ItemById["TSDB"];
// Приводим полученную БДВР к абстрактному источнику данных
Stub := RubrDescr.Bind() As IVariableStub;
// Добавляем в модель фактор, источником данных которого является БДВР
TransformVar := Transform.Inputs.Add(Stub);
Tree := TransformVar.SlicesTree[TransformVar];
Slice := Tree.CreateSlice(2);
// Получаем фактор в виде терма
TermInfo := Transform.CreateTermInfo();
TermInfo.Slice := Slice;
// Указываем полученный терм в качестве исходной переменной
Collapse.Input := TermInfo;
// Указываем исходную динамику
Collapse.InputLevel := DimCalendarLevel.dclMonth;
// Задаем тип коллапса
Collapse.MethodType := MsCollapseType.mctAverage;
// Указываем метод обработки пропусков
Collapse.MissingData.Method := MissingDataMethod.mdmLinTrend;
// Задаем количество пропущенных значений в моделируемом ряде,
// которое можно считать приемлемыми для выполнения агрегации
Collapse.Tolerance := 5;
// Создаем объект с параметрами расчета модели
Calcul := Transform.CreateCalculation();
// Задаем периоды расчета
Period := Model.Transform.Period;
Calcul.Period.IdentificationStartDate := Period.IdentificationStartDate;
Calcul.Period.IdentificationEndDate := Period.IdentificationEndDate;
Calcul.Period.ForecastStartDate := Period.ForecastStartDate;
Calcul.Period.ForecastEndDate := Period.ForecastEndDate;
Calcul.CurrentPoint := Period.IdentificationStartDate;
// Получаем данные моделируемой переменной
arr := Collapse.CalculateSeries[Calcul, Coord].Modelling;
// Выводим наименование и данные моделируемой переменной в окно консоли
System.Diagnostics.Debug.WriteLine(Collapse.Result.TermInfo.TermText);
For i := 0 To arr.Length - 1 Do
System.Diagnostics.Debug.WriteLine(arr[i]);
End For;
// Сохраняем изменения в модели
(Model As IMetabaseObject).Save();
End Sub;
См. также: