Consider the example of creating a model with attribute based variables, which uses the linear regression (OLS estimation) method for calculation.
Executing the example requires that the repository contains a modeling container with the MS identifier and a time series database with the TSDB identifier. This time series database must contain mandatory custom attributes of series being references to the dictionary.
Add links to the Cubes, Dimensions, Metabase, Ms, Stat system assemblies.
Sub ModelAttr;
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;
Linear: IMsLinearRegressionTransform;
Ar: Array[0..1] Of Integer;
TermInfo: IMsFormulaTermInfo;
Period: IMsModelPeriod;
Begin
Mb := MetabaseClass.Active;
// Set basic parameters of the model as a repository object
CrInf := Mb.CreateCreateInfo;
CrInf.ClassId := MetabaseObjectClass.KE_CLASS_MSMODEL;
// Set model identifier
CrInf.Id := Mb.GenerateId("MODEL_LINEAR_REGRESSION", Mb.ItemById("MS").Key);
// Set model name
CrInf.Name := "Model of linear regression";
// Set modeling container that will contain the model
CrInf.Parent := Mb.ItemById("MS");
// Create a model
Model := Mb.CreateObject(CrInf).Edit As IMsModel;
// Get object to set up model parameters
Transform := Model.Transform;
// Get object to work with output variable
TransformVarables := Transform.Outputs;
// Get time series database (TSDB)
RubrDescr := Mb.ItemById("TSDB");
// Cast obtained TSDB to abstract data source
Stub := RubrDescr.Bind As IVariableStub;
// Use TSDB as a data source of output variable
TransVar := TransformVarables.Add(Stub);
// Set output variable slice
Tree := TransVar.SlicesTree(TransVar);
Slice := Tree.CreateSlice(1);
// Get model settings for output variable slice
Selector := Transform.CreateSelector;
Selector.Slice := Slice;
Formula := Transform.Transform(Selector);
// Specify the Linear Regression (OLS Estimation) calculation method
Formula.Kind := MsFormulaKind.LinearRegression;
// Set calendar frequency of calculation
Formula.Level := DimCalendarLevel.Year;
// Get object to set up linear regression
Linear := Formula.Method As IMsLinearRegressionTransform;
// Determine autoregression order
Ar[0] := 2;
Ar[1] := 4;
Linear.ARMA.OrderAR := Ar;
// Use automatic constant estimation
Linear.ConstantMode := InterceptMode.AutoEstimate;
// Add a factor with the TSDB data source to model
TransVar := Transform.Inputs.Add(Stub);
Tree := TransVar.SlicesTree(TransVar);
Slice := Tree.CreateSlice(2);
// Get factor as an expression element
TermInfo := Transform.CreateTermInfo;
TermInfo.Slice := Slice;
// Set linear regression calculation formula
Linear.Explanatories.Add.Expression.AsString := TermInfo.TermInnerText;
// Set model calculation periods
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);
// Save model to repository
(Model As IMetabaseObject).Save;
End Sub ModelAttr;
See also: