SetDate(Value: DateTime; DateFormat: String);
SetDate(Value: System.DateTime; DateFormat: string);
Value. Дата, которую необходимо зафиксировать для данного терма;
DateFormat. Формат даты, в соответствии с которым производится фиксация.
Метод SetDate осуществляет фиксацию даты для терма.
При вызове метода свойству IMsFormulaTermInfo.Type автоматически будет установлено значение MsFormulaTermType.Date, и при вычислении модели в качестве значения терма будет подставляться значение точки, соответствующей указанной дате.
Примеры форматов, которые может принимать параметр DateFormat:
YYYY. Годовая динамика;
YYYY-Hh. Полугодовая динамика;
YYYY-Qq. Квартальная динамика;
YYYY-MM. Месячная динамика;
YYYY-Www. Недельная динамика;
YYYY-DDD. Дневная динамика.
Для выполнения примера предполагается наличие в репозитории контейнера моделирования с идентификатором «MODEL_SPACE». В контейнере имеется переменная «VAR», которая в дальнейшем будет использоваться как моделируемая, а также переменная «VAR_F», используемая как фактор.
Добавьте ссылки на системные сборки «Metabase», «Ms», «Cubes», «Dimensions».
Sub UserProc;
Var
MB: IMetabase;
Kont: IMetabaseObjectDescriptor;
CrInf: IMetabaseObjectCreateInfo;
MObj: IMetabaseObject;
Model: IMsModel;
Trans: IMsFormulaTransform;
VarTrans: IMsFormulaTransformVariable;
Tree: IMsFormulaTransformSlicesTree;
Slice: IMsFormulaTransformSlice;
Selector: IMsFormulaTransformSelector;
Formula: IMsFormula;
NonLinear: IMsNonLinearRegressionTransform;
Varr: IVariableStub;
TransVar: IMsFormulaTransformVariable;
TermX1, TermX2: IMsFormulaTerm;
TermX1Info, TermX2Info: IMsFormulaTermInfo;
Begin
MB := MetabaseClass.Active;
Kont := Mb.ItemById("MODEL_SPACE");
//создание модели
CrInf := Mb.CreateCreateInfo;
CrInf.ClassId := MetabaseObjectClass.KE_CLASS_MSMODEL;
CrInf.Id := MB.GenerateId("New_NonLinReg", Kont.Key);
CrInf.Name := "New_NonLinReg";
CrInf.Parent := Kont;
MObj := Mb.CreateObject(CrInf).Edit;
Model := MObj As IMsModel;
Trans := Model.Transform;
//добавление моделируемой переменной
Varr := MB.ItemByIdNamespace("VAR", Kont.Key).Bind As IVariableStub;
Trans.Outputs.Add(Varr);
VarTrans := Trans.Outputs.Item(0);
Tree := VarTrans.SlicesTree(VarTrans);
Slice := Tree.CreateSlice(1);
Selector := Trans.CreateSelector;
Selector.Slice := Slice;
Formula := Trans.Transform(Selector);
Formula.Kind := MsFormulaKind.NonLinearRegression;
Formula.Level := DimCalendarLevel.Year;
NonLinear := Formula.Method As IMsNonLinearRegressionTransform;
//добавление фактора
Varr := MB.ItemByIdNamespace("VAR_F", Kont.Key).Bind As IVariableStub;
Trans.Inputs.Add(Varr);
TransVar := Trans.Inputs.Item(0);
Slice := TransVar.SlicesTree(VarTrans).CreateSlice(1);
//сопоставление терма срезу в переменной
TermX1 := NonLinear.Operands.Add(Slice);
TermX2 := NonLinear.Operands.Add(Slice);
TermX1Info := TermX1.TermInfo;
TermX2Info := TermX2.TermInfo;
TermX2Info.Type := MsFormulaTermType.Date;
TermX2Info.SetDate(DateTime.ComposeDay(2000, 1, 1), "YYYY");
//создание уравнения
NonLinear.Expression.AsString := "A0+" + TermX1Info.TermInnerText + "/" + TermX2Info.TermInnerText;
MObj.Save;
End Sub UserProc;
После выполнения примера в контейнере моделирования будет создана новая модель. Для расчета модели будет использоваться метод нелинейной регрессии. В модель будет добавлена моделируемая переменная и одна входная переменная. Для составления уравнения будут созданы термы, ссылающиеся на срез входной переменной. При вычислении модели в качестве значения второго терма будет подставляться значение координаты, соответствующей 2000 году.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Ms;
…
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
Kont: IMetabaseObjectDescriptor;
CrInf: IMetabaseObjectCreateInfo;
MObj: IMetabaseObject;
Model: IMsModel;
Trans: IMsFormulaTransform;
VarTrans: IMsFormulaTransformVariable;
Tree: IMsFormulaTransformSlicesTree;
Slice: IMsFormulaTransformSlice;
Selector: IMsFormulaTransformSelector;
Formula: IMsFormula;
NonLinear: IMsNonLinearRegressionTransform;
Varr: IVariableStub;
TransVar: IMsFormulaTransformVariable;
TermX1, TermX2: IMsFormulaTerm;
TermX1Info, TermX2Info: IMsFormulaTermInfo;
Begin
MB := Params.Metabase;
Kont := Mb.ItemById["MODEL_SPACE"];
//создание модели
CrInf := Mb.CreateCreateInfo();
CrInf.ClassId := MetabaseObjectClass.KE_CLASS_MSMODEL As integer;
CrInf.Id := MB.GenerateId("New_NonLinReg", Kont.Key);
CrInf.Name := "New_NonLinReg";
CrInf.Parent := Kont;
MObj := Mb.CreateObject(CrInf).Edit();
Model := MObj As IMsModel;
Trans := Model.Transform;
//добавление моделируемой переменной
Varr := MB.ItemByIdNamespace["VAR", Kont.Key].Bind() As IVariableStub;
Trans.Outputs.Add(Varr);
VarTrans := Trans.Outputs.Item[0];
Tree := VarTrans.SlicesTree[VarTrans];
Slice := Tree.CreateSlice(1);
Selector := Trans.CreateSelector();
Selector.Slice := Slice;
Formula := Trans.Transform[Selector];
Formula.Kind := MsFormulaKind.mfkNonLinearRegression;
Formula.Level := DimCalendarLevel.dclYear;
NonLinear := Formula.Method As IMsNonLinearRegressionTransform;
//добавление фактора
Varr := MB.ItemByIdNamespace["VAR_F", Kont.Key].Bind() As IVariableStub;
Trans.Inputs.Add(Varr);
TransVar := Trans.Inputs.Item[0];
Slice := TransVar.SlicesTree[VarTrans].CreateSlice(1);
//сопоставление терма срезу в переменной
TermX1 := NonLinear.Operands.Add(Slice);
TermX2 := NonLinear.Operands.Add(Slice);
TermX1Info := TermX1.TermInfo;
TermX2Info := TermX2.TermInfo;
TermX2Info.Type := MsFormulaTermType.mfttDate;
TermX2Info.SetDate(DateTime.Parse("01.01.2000"), "YYYY");
//создание уравнения
NonLinear.Expression.AsString := "A0+" + TermX1Info.TermInnerText + "/" + TermX2Info.TermInnerText;
MObj.Save();
End Sub;
См. также: