Модель

При создании и работе с моделью следует учитывать следующие особенности:

Для работы с моделью через язык Fore предназначен интерфейс IMsModel. Используя его свойства и методы можно задать периоды идентификации, прогнозирования модели, задать метод расчета и настроить прочие параметры модели.

Примечание. В примерах, представленных ниже, предполагается наличие объектов, которые указаны в разделе описания переменных.

Для работы с параметрами метода расчета модели обязательно необходимо задать моделируемую переменную и ее срез. Переменная должна быть добавлена в коллекцию входных переменных модели. Только после этого возможно получить объект, реализованный интерфейсом IMsFormula, для настройки параметров расчета модели:

Sub Main;

Var

Model: IMsModel;

TransfModel: IMsFormulaTransform;

Varr: IMsVariable;

ModellingVar: IMsFormulaTransformVariable;

Tree: IMsFormulaTransformSlicesTree;

Slice: IMsFormulaTransformSlice;

Selector: IMsFormulaTransformSelector;

Formula: IMsFormula;

Begin

TransfModel := Model.Transform;

ModellingVar := TransfModel.Outputs.Add(Varr As IVariableStub);

Tree := ModellingVar.SlicesTree(ModellingVar);

Slice := Tree.CreateSlice(1);

Selector := TransfModel.CreateSelector;

Selector.Slice := Slice;

Formula := TransfModel.Transform(Selector);

End Sub Main;

Используя свойства/методы интерфейса IMsFormula можно изменить календарную динамику, а также определить и настроить параметры метода расчета модели.

Метод расчета модели реализован интерфейсом IMsMethod. Данный интерфейс является базовым для всех методов расчета:

Для настройки конкретного метода расчета интерфейс IMsMethod нужно привести к какому-либо из дочерних интерфейсов. Например, для расчета фильтра Бакстера-Кинга IMsMethod нужно привести к интерфейсу IMsBandpassFilterTransform:

Sub Main;

Var

Formula: IMsFormula;

BPFilter: IMsBandpassFilterTransform;

Begin

Formula.Kind := MsFormulaKind.BandpassFilter;

BPFilter := Formula.Method As IMsBandpassFilterTransform;

End Sub Main;

Дальнейшее программирование параметров модели зависит от ее метода расчета. Более подробную информацию об этом можно найти в описании соответствующих интерфейсов.

Создание модели

После создания переменных можно приступить к созданию модели «Сальдо торгового баланса, млрд.долл.США» и настройке параметров ее расчета:

Для выполнения модуля по созданию и настройке модели «Сальдо торгового баланса, млрд.долл.США» необходимо добавить ссылки на сборки «Ms», «Metabase», «Dimensions».

Sub Main;

Var

MB: IMetabase;

MsDescr, VarDescr: IMetabaseObjectDescriptor;

CrInf: IMetabaseObjectCreateInfo;

MObj: IMetabaseObject;

Model: IMsModel;

TransfModel: IMsFormulaTransform;

Varr: IMsVariable;

Var_Balance, Var_Exp, Var_Imp: IMsFormulaTransformVariable;

Tree: IMsFormulaTransformSlicesTree;

Slice: IMsFormulaTransformSlice;

Selector: IMsFormulaTransformSelector;

Formula: IMsFormula;

Determ: IMsDeterministicTransform;

Inputs: IMsFormulaTransformVariables;

Term_Exp, Term_Imp: IMsFormulaTerm;

Begin

MB := MetabaseClass.Active;

// Создаем модель

CrInf := Mb.CreateCreateInfo;

CrInf.ClassId := MetabaseObjectClass.KE_CLASS_MSMODEL;

CrInf.Id := "BALANCE_MODEL";

CrInf.Name := "Сальдо торгового баланса, млрд.долл.США";

MsDescr := Mb.ItemById("MODEL_SPACE");

CrInf.Parent := MsDescr;

MObj := Mb.CreateObject(CrInf).Edit;

Model := MObj As IMsModel;

// Получаем объект для настройки параметров модели

TransfModel := Model.Transform;

// Задаем моделируемую переменную

VarDescr := MB.ItemByIdNamespace("BALANCE", MsDescr.Key);

Varr := VarDescr.Bind As IMsVariable;

Var_Balance := TransfModel.Outputs.Add(Varr As IVariableStub);

Tree := Var_Balance.SlicesTree(Var_Balance);

Slice := Tree.CreateSlice(1);

Selector := TransfModel.CreateSelector;

Selector.Slice := Slice;

// Получаем объект для настройки параметров расчета модели

Formula := TransfModel.Transform(Selector);

Formula.Kind := MsFormulaKind.Deterministic;

Formula.Level := DimCalendarLevel.Year;

// Настраиваем расчет детерминированного уравнения

Determ := Formula.Method As IMsDeterministicTransform;

Inputs := TransfModel.Inputs;

// Добавляем в модель входную переменную «Экспорт - всего, млрд.долл.США»

VarDescr := MB.ItemByIdNamespace("EXPORT", MsDescr.Key);

Varr := VarDescr.Bind As IMsVariable;

Var_Exp := Inputs.Add(Varr As IVariableStub);

Tree := Var_Exp.SlicesTree(Var_Exp);

Slice := Tree.CreateSlice(1);

Term_Exp := Determ.Operands.Add(Slice);

// Добавляем в модель входную переменную «Импорт - всего, млрд.долл.США»

VarDescr := MB.ItemByIdNamespace("IMPORT", MsDescr.Key);

Varr := VarDescr.Bind As IMsVariable;

Var_Imp := Inputs.Add(Varr As IVariableStub);

Tree := Var_Imp.SlicesTree(Var_Imp);

Slice := Tree.CreateSlice(1);

Term_Imp := Determ.Operands.Add(Slice);

// Задаем формулу для расчета модели

Determ.Expression.AsString := Term_Exp.TermToInnerText + " - " + Term_Imp.TermToInnerText;

MObj.Save;

Debug.WriteLine("Создана и настроена модель '" + MObj.Name + "' с идентификатором '" + MObj.Id + "'");

End Sub Main;

После выполнения модуля будет создана и настроена модель «Сальдо торгового баланса, млрд.долл.США» с идентификатором «BALANCE_MODEL», информация об этом будет выведена в окно консоли.

Следующим шагом будет создание метамодели.

См. также:

Общие принципы программирования с использованием сборки Ms