Содержание
Рассмотрим пример создания модели детерминированного уравнения с операндами, для которых задан лаг.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS» и базы данных временных рядов с идентификатором «TSDB». Данная база данных временных рядов должна содержать обязательные пользовательские атрибуты рядов, являющиеся ссылкой на справочник.
Добавьте ссылки на системные сборки: Cubes, Dimensions, Metabase, Ms.
Sub UserProc;
Var
Mb: IMetabase;
CrInf: IMetabaseObjectCreateInfo;
Model: IMsModel;
Transform: IMsFormulaTransform;
TransformVarables: IMsFormulaTransformVariables;
RubrDescr: IMetabaseObjectDescriptor;
Stub: IVariableStub;
TransVar: IMsFormulaTransformVariable;
Tree: IMsFormulaTransformSlicesTree;
Slice: IMsFormulaTransformSlice;
Selector: IMsFormulaTransformSelector;
Formula: IMsFormula;
Determ: IMsDeterministicTransform;
TermX1, TermX2: IMsFormulaTerm;
TermInfo: IMsFormulaTermInfo;
Period: IMsModelPeriod;
Begin
Mb := MetabaseClass.Active;
// Задаем базовые параметры модели как объекта репозитория
CrInf := Mb.CreateCreateInfo;
CrInf.ClassId := MetabaseObjectClass.KE_CLASS_MSMODEL;
// Задаем идентификатор модели
CrInf.Id := Mb.GenerateId("MODEL_DETERMINISTIC_LAG", Mb.ItemById("MS").Key);
// Задаем наименование модели
CrInf.Name := "Детерминированное уравнение с лагированными операндами";
// Задаем контейнер моделирования, в котором будет создаваться модель
CrInf.Parent := Mb.ItemById("MS");
// Создаем модель
Model := Mb.CreateObject(CrInf).Edit As IMsModel;
// Получаем объект для настройки параметров модели
Transform := Model.Transform;
// Получаем объект для работы с моделируемой переменной
TransformVarables := Transform.Outputs;
// Получаем базу данных временных рядов (БДВР)
RubrDescr := Mb.ItemById("TSDB");
// Приводим полученную БДВР к абстрактному источнику данных
Stub := RubrDescr.Bind As IVariableStub;
// Используем БДВР в качестве источника данных моделируемой переменной
TransVar := TransformVarables.Add(Stub);
// Задаем срез моделируемой переменной
Tree := TransVar.SlicesTree(TransVar);
Slice := Tree.CreateSlice(1);
// Получаем настройки модели для среза моделируемой переменной
Selector := Transform.CreateSelector;
Selector.Slice := Slice;
Formula := Transform.Transform(Selector);
// Указываем метод расчета - детерминированное уравнение
Formula.Kind := MsFormulaKind.Deterministic;
// Задаем календарную динамику расчета
Formula.Level := DimCalendarLevel.Year;
// Получаем объект для настройки детерминированного уравнения
Determ := Formula.Method As IMsDeterministicTransform;
// Добавляем в модель фактор, источником данных которого является БДВР
TransVar := Transform.Inputs.Add(Stub);
Tree := TransVar.SlicesTree(TransVar);
Slice := Tree.CreateSlice(2);
// Добавляем 1-й фактор в коллекцию элементов выражений, используемых для составления уравнения
TermX1 := Determ.Operands.Add(Slice);
// Получаем параметры элемента выражения
TermInfo := TermX1.TermInfo;
// Задаем тип элемента выражения: значение на определенную дату
TermInfo.Type := MsFormulaTermType.Date;
// Задаем дату для элемента выражения
TermInfo.SetDate(DateTime.ComposeDay(2014, 1, 1), "YYYY");
// Устанавливаем измененные параметры для элемента выражения
TermX1.TermInfo := TermInfo;
// Добавляем в модель фактор, источником данных которого является БДВР
TransVar := Transform.Inputs.Add(Stub);
Tree := TransVar.SlicesTree(TransVar);
Slice := Tree.CreateSlice(3);
// Добавляем 2-й фактор в коллекцию элементов выражений, используемых для составления уравнения
TermX2 := Determ.Operands.Add(Slice);
// Получаем параметры элемента выражения
TermInfo := TermX2.TermInfo;
// Задаем лаг для элемента выражения
TermInfo.Lag := "-2";
// Устанавливаем измененные параметры для элемента выражения
TermX2.TermInfo := TermInfo;
// Задаем выражение для расчета детерминированного уравнения
Determ.Expression.AsString := "Iif(" + TermX1.TermToInnerText + ">-0.5, " +
TermX2.TermToInnerText + "+1, " + TermX2.TermToInnerText + "-1)";
// Задаем периоды расчета модели
Period := Transform.Period;
Period.IdentificationStartDate := DateTime.ComposeDay(2000, 1, 1);
Period.IdentificationEndDate := DateTime.ComposeDay(2014, 12, 31);
Period.ForecastStartDate := DateTime.ComposeDay(2015, 1, 1);
Period.ForecastEndDate := DateTime.ComposeDay(2020, 12, 31);
// Сохраняем модель в репозитории
(Model As IMetabaseObject).Save;
End Sub UserProc;
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Ms;
…
Public Shared Sub Main(Params: StartParams);
Var
Mb: IMetabase;
CrInf: IMetabaseObjectCreateInfo;
Model: IMsModel;
Transform: IMsFormulaTransform;
TransformVarables: IMsFormulaTransformVariables;
RubrDescr: IMetabaseObjectDescriptor;
Stub: IVariableStub;
TransVar: IMsFormulaTransformVariable;
Tree: IMsFormulaTransformSlicesTree;
Slice: IMsFormulaTransformSlice;
Selector: IMsFormulaTransformSelector;
Formula: IMsFormula;
Determ: IMsDeterministicTransform;
TermX1, TermX2: IMsFormulaTerm;
TermInfo: IMsFormulaTermInfo;
Period: IMsModelPeriod;
Begin
Mb := Params.Metabase;
// Задаем базовые параметры модели как объекта репозитория
CrInf := Mb.CreateCreateInfo();
CrInf.ClassId := MetabaseObjectClass.KE_CLASS_MSMODEL As integer;
// Задаем идентификатор модели
CrInf.Id := Mb.GenerateId("MODEL_DETERMINISTIC_LAG", Mb.ItemById["MS"].Key);
// Задаем наименование модели
CrInf.Name := "Детерминированное уравнение с лагированными операндами";
// Задаем контейнер моделирования, в котором будет создаваться модель
CrInf.Parent := Mb.ItemById["MS"];
// Создаем модель
Model := Mb.CreateObject(CrInf).Edit() As IMsModel;
// Получаем объект для настройки параметров модели
Transform := Model.Transform;
// Получаем объект для работы с моделируемой переменной
TransformVarables := Transform.Outputs;
// Получаем базу данных временных рядов (БДВР)
RubrDescr := Mb.ItemById["TSDB"];
// Приводим полученную БДВР к абстрактному источнику данных
Stub := RubrDescr.Bind() As IVariableStub;
// Используем БДВР в качестве источника данных моделируемой переменной
TransVar := TransformVarables.Add(Stub);
// Задаем срез моделируемой переменной
Tree := TransVar.SlicesTree[TransVar];
Slice := Tree.CreateSlice(1);
// Получаем настройки модели для среза моделируемой переменной
Selector := Transform.CreateSelector();
Selector.Slice := Slice;
Formula := Transform.Transform[Selector];
// Указываем метод расчета - детерминированное уравнение
Formula.Kind := MsFormulaKind.mfkDeterministic;
// Задаем календарную динамику расчета
Formula.Level := DimCalendarLevel.dclYear;
// Получаем объект для настройки детерминированного уравнения
Determ := Formula.Method As IMsDeterministicTransform;
// Добавляем в модель фактор, источником данных которого является БДВР
TransVar := Transform.Inputs.Add(Stub);
Tree := TransVar.SlicesTree[TransVar];
Slice := Tree.CreateSlice(2);
// Добавляем 1-й фактор в коллекцию элементов выражений, используемых для составления уравнения
TermX1 := Determ.Operands.Add(Slice);
// Получаем параметры элемента выражения
TermInfo := TermX1.TermInfo;
// Задаем тип элемента выражения: значение на определенную дату
TermInfo.Type := MsFormulaTermType.mfttDate;
// Задаем дату для элемента выражения
TermInfo.SetDate(DateTime.Parse("2014.1.1"), "YYYY");
// Устанавливаем измененные параметры для элемента выражения
TermX1.TermInfo := TermInfo;
// Добавляем в модель фактор, источником данных которого является БДВР
TransVar := Transform.Inputs.Add(Stub);
Tree := TransVar.SlicesTree[TransVar];
Slice := Tree.CreateSlice(3);
// Добавляем 2-й фактор в коллекцию элементов выражений, используемых для составления уравнения
TermX2 := Determ.Operands.Add(Slice);
// Получаем параметры элемента выражения
TermInfo := TermX2.TermInfo;
// Задаем лаг для элемента выражения
TermInfo.Lag := "-2";
// Устанавливаем измененные параметры для элемента выражения
TermX2.TermInfo := TermInfo;
// Задаем выражение для расчета детерминированного уравнения
Determ.Expression.AsString := "Iif(" + TermX1.TermToInnerText() + ">-0.5, " +
TermX2.TermToInnerText() + "+1, " + TermX2.TermToInnerText() + "-1)";
// Задаем периоды расчета модели
Period := Transform.Period;
Period.IdentificationStartDate := DateTime.Parse("2000.1.1");
Period.IdentificationEndDate := DateTime.Parse("2014.12.31");
Period.ForecastStartDate := DateTime.Parse("2015.1.1");
Period.ForecastEndDate := DateTime.Parse("2020.12.31");
// Сохраняем модель в репозитории
(Model As IMetabaseObject).Save();
End Sub;
После выполнения примера в контейнере моделирования «MS» будет создана модель детерминированного уравнения со следующими параметрами:
в модели присутствует два фактора: X1 и X2;
первый фактор передается в уравнение в качестве значения на 2014 год;
второй фактор передается в уравнение поточечно с лагом на две точки вперед на временном периоде;
для расчета модели используется следующее выражение: iif(X1 > -0.5, X2 + 1, X2 - 1). Если значение первого фактора на 2014 год больше «-0,5», то значение второго фактора будет увеличено на единицу, иначе - уменьшено на единицу;
используется годовая динамика расчета;
период идентификации: начало - «2000», окончание - «2014»;
период прогнозирования: начало - «2015», окончание - «2020».
См. также: