GetVariableByAttrValues(RubricatorKey: Integer;
AttrKeys: Array;
AttrValues: Array;
GraphMeta: String
Var VariableExists: Boolean;
[ParentKey: Integer = -1]): IMsCalculationChainVariable;
GetVariableByAttrValues(RubricatorKey: uinteger;
AttrKeys: System.Array;
AttrValues: System.Array;
GraphMeta: string;
var VariableExists: boolean;
ParentKey: uinteger): Prognoz.Platform.Interop.Ms.IMsCalculationChainVariable;
RubricatorKey. Time series database key.
AttrKeys. Array of keys of attributes by values of which the variable will be extracted.
AttrValues. Array of attribute values.
GraphMeta. Graphical context.
VariableExists. The attribute of the fact that the variable corresponding to the specified series exists in the internal time series database. It is returned after executing the method.
ParentKey. Parent element key.
The GetVariableByAttrValues method returns the variable corresponding to the series with the specified value of attributes.
The AttrKeys array must contain real values, and the AttrValues array must contain Variant type values. The order of attribute keys in the AttrKeys array must correspond to that in the AttrValues array, that is, the first element of the AttrKeys array sets the attribute key and the first element of the AttrValues array is the value of this attribute and so on.
The GraphMeta parameter can take the Null value.
Available values of the VariableExists parameter:
True. The variable exists in internal time series database
False. The variable is absent in time series database.
If the ParentKey parameter is set to -1, the variable is in the time series database root.
Executing the example requires:
A time series database with the TSDB identifier, containing an attribute with the COUNTRY and INDICATOR identifiers. These attributes should be links to the dictionary. Dictionary to which the COUNTRY attribute is referred should contain element with the 755 key and dictionary to which the INDICATOR attribute is referred should contain element with the 765 key.
A modeling container with the MS identifier, containing a metamodel with the META identifier.
Add links to the Cubes, Dimensions, Metabase, Ms, Rds system assemblies.
Sub GetVariableByAttrValues;
Var
mb: IMetabase;
RubObj, MsObj: IMetabaseObjectDescriptor;
Meta: IMsMetaModel;
MetaVisual: IMsMetaModelVisualController;
VarInp: IMsCalculationChainVariable;
VarEx: Boolean;
InVarKey, InModelKey: Integer;
InpKeys: Array[1] Of Integer;
AttsKey: Array[2] Of Integer;
AttsVal: Array[2] Of Variant;
SimpleModel: IMsModel;
j: Integer;
Begin
mb := MetabaseClass.Active;
// Get modeling container
MsObj := mb.ItemById("MS");
// Get metamodel
Meta := mb.ItemByIdNamespace("META", MsObj.Key).Edit As IMsMetaModel;
MetaVisual := Meta.VisualController;
// Set attribute values of input variable
RubObj := mb.ItemById("TSDB");
AttsKey[0] := (RubObj.Bind As IRubricator).Facts.Attributes.FindById("CITY").Key;
AttsVal[0] := 755;
AttsKey[1] := (RubObj.Bind As IRubricator).Facts.Attributes.FindById("INDICATOR").Key;
AttsVal[1] := 765;
// Add folder
j := Meta.CalculationChain.AddFolder("Folder for expression").Key;
// Create input variable in folder and get variable key
VarInp := MetaVisual.GetVariableByAttrValues(RubObj.Key, AttsKey, AttsVal, "", VarEx, j);
VarInp.Slice.Level := DimCalendarLevel.Year;
InpKeys[0] := VarInp.Key;
// Create internal model in folder
SimpleModel := MetaVisual.CreateSimpleModel(-1, InpKeys, VarInp.Key, MsFormulaKind.LinearRegression, "", InVarKey, InModelKey, j);
// Display model name in the console window
Debug.WriteLine(SimpleModel.CreateStringGenerator.Execute);
// Save metamodel
(Meta As IMetabaseObject).Save;
End Sub GetVariableByAttrValues;
After executing the example folder will be created in the META metamodel. Variable basing on specified values of time series database attributes will be added in this folder. Model using added variable will be also created in this folder.
The requirements and result of the Fore.NET example execution match with those in the Fore example.
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Rds;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
RubObj, MsObj: IMetabaseObjectDescriptor;
Meta: IMsMetaModel;
MetaVisual: IMsMetaModelVisualController;
VarInp: IMsCalculationChainVariable;
VarEx: Boolean;
InVarKey, InModelKey: Integer;
InpKeys: Array[1] Of integer;
AttsKey: Array[2] Of integer;
AttsVal: Array[2] Of object;
SimpleModel: IMsModel;
j: uinteger;
Begin
mb := Params.Metabase;
// Get modeling container
MsObj := mb.ItemById["MS"];
// Get metamodel
Meta := mb.ItemByIdNamespace["META", MsObj.Key].Edit() As IMsMetaModel;
MetaVisual := Meta.VisualController;
// Set attribute values of input variable
RubObj := mb.ItemById["TSDB"];
AttsKey[0] := (RubObj.Bind() As IRubricator).Facts.Attributes.FindById("CITY").Key As integer;
AttsVal[0] := 755;
AttsKey[1] := (RubObj.Bind() As IRubricator).Facts.Attributes.FindById("INDICATOR").Key As integer;
AttsVal[1] := 765;
// Add folder
j := Meta.CalculationChain.AddFolder("Folder for expression").Key;
// Create input variable in folder and get variable key
VarInp := MetaVisual.GetVariableByAttrValues(RubObj.Key, AttsKey, AttsVal, "", Var VarEx, j);
VarInp.Slice.Level := DimCalendarLevel.dclYear;
InpKeys[0] := VarInp.Key As integer;
// Create internal model in folder
SimpleModel := MetaVisual.CreateSimpleModel(-1, InpKeys, VarInp.Key As integer, MsFormulaKind.mfkLinearRegression,
"", Var InVarKey, Var InModelKey, j, uinteger.MaxValue, False);
// Display model name in the console window
System.Diagnostics.Debug.WriteLine(SimpleModel.CreateStringGenerator().Execute());
// Save metamodel
(Meta As IMetabaseObject).Save();
End Sub;
See also: