IMsMetaModel.DimOpenStubParamValues

Синтаксис Fore

DimOpenStubParamValues: IMsDimOpenStubParamValues;

Синтаксис Fore.NET

DimOpenStubParamValues: Prognoz.Platform.Interop.Ms.IMsDimOpenStubParamValues;

Описание

Свойство DimOpenStubParamValues возвращает коллекцию параметров, используемых при открытии объектов с параметрическими измерениями.

Комментарии

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

Пример Fore

Для выполнения примера в репозитории предполагается наличие:

  1. контейнера моделирования с идентификатором «MS», содержащего метамодель с идентификатором «METAMODEL»;

  2. параметрического справочника с идентификатором «DIM», содержащего строковый параметр с идентификатором «PARAM1»;

  3. параметрических кубов с идентификаторами «CUBE_IN», «CUBE_OUT» содержащих строковый параметр с идентификатором «PARAM1». Кубы должны содержать календарное измерение и управляющее измерение, основанное на справочнике «DIM».

Добавьте ссылки на системные сборки «Cubes», «Dimensions», «Metabase», «Ms».

Sub UserProc;
Var
    mb: IMetabase;
    ms: IMetabaseObjectDescriptor;
    MetaModel: IMsMetaModel;
    Dimension: IDimensionModel;
    CubeIn, CubeOut: IMetabaseObject;
    StParams: IMsDimOpenStubParamValues;
    StubParam: IMsDimOpenStubParamValue;
    Param: IMsDimOpenParamValue;
    ChainEntries: IMsCalculationChainEntries;
    ChainModel: IMsCalculationChainModel;
    Model: IMsModel;
    Trans: IMsFormulaTransform;
    Vars: IMsFormulaTransformVariables;
    Stub: IVariableStub;
    SelectionFact: IDimSelectionSetFactory;
    Selection: IDimSelectionSet;
    DimSel: IDimSelection;
    Slice: IMsFormulaTransformSlice;
    Selector: IMsFormulaTransformSelector;
    ParamValues: IMetabaseObjectParamValues;
    Formula: IMsFormula;
    Determ: IMsDeterministicTransform;
    TermX1: IMsFormulaTerm;
Begin
    mb := MetabaseClass.Active;
    // Получаем метамодель
    ms := mb.ItemById("MS");
    MetaModel := mb.ItemByIdNamespace("METAMODEL", ms.Key).Edit As IMsMetaModel;
    // Получаем параметрический справочник
    Dimension := mb.ItemById("DIM").Bind As IDimensionModel;
    // Получаем входной куб
    CubeIn := mb.ItemById("CUBE_IN").Bind;
    // Получаем выходной куб
    CubeOut := mb.ItemById("CUBE_OUT").Bind;
    // Добавляем параметры в метамодель и задаем их значения
    StParams := MetaModel.DimOpenStubParamValues;
    StParams.Clear;
    // Параметр для выходного куба  
    StubParam := StParams.Add(CubeOut.Key);
    StubParam.StubValues := CubeOut.Params.CreateEmptyValues;
    StubParam.StubValues.FindById("PARAM1").Value := "1";
    Param := StubParam.Values.Add(Dimension);
    Param.Values := (Dimension As IMetabaseObject).Params.CreateEmptyValues;
    Param.Values.FindById("PARAM1").Value := "1";
    // Параметр входного куба
    StubParam := StParams.Add(CubeIn.Key);
    StubParam.StubValues := CubeIn.Params.CreateEmptyValues;
    StubParam.StubValues.FindById("PARAM1").Value := "1";
    Param := StubParam.Values.Add(Dimension);
    Param.Values := (Dimension As IMetabaseObject).Params.CreateEmptyValues;
    Param.Values.FindById("PARAM1").Value := "1";
    // Создаем в метамодели внутреннюю модель
    ChainEntries := MetaModel.CalculationChain;
    ChainModel := ChainEntries.AddExclusiveModel;
    Model := ChainModel.EditModel;
    Trans := Model.Transform;
    // Добавляем выходную переменную
    Vars := Trans.Outputs;
    Stub := CubeOut As IVariableStub;
    ParamValues := (Dimension As IMetabaseObject).Params.CreateEmptyValues;
    ParamValues.FindById("PARAM1").Value := "1";
    SelectionFact := New DimSelectionSetFactory.Create;
    Selection := SelectionFact.CreateDimSelectionSet;
    // Задаем отметку
    DimSel := Selection.Add((Dimension As IMetabaseObject).Open(ParamValues) As IDimInstance);
    DimSel.SelectElement(0False);
    // Настраиваем расчёт модели
    Slice := Vars.Add(Stub).Slices.Add(Selection);
    Selector := Model.Transform.CreateSelector;
    Selector.Slice := Slice;
    Formula := Model.Transform.Transform(Selector);
    Formula.Level := DimCalendarLevel.Year;
    // Настраиваем детерминированное уравнение
    (Model As IMetabaseObject).Name := "Детерминированное уравнение";
    Formula.Kind := MsFormulaKind.Deterministic;
    Determ := Formula.Method As IMsDeterministicTransform;
    // Добавляем входную переменную
    Vars := Trans.Inputs;
    Stub := CubeIn As IVariableStub;
    ParamValues := (Dimension As IMetabaseObject).Params.CreateEmptyValues;
    ParamValues.FindById("PARAM1").Value := "1";
    SelectionFact := New DimSelectionSetFactory.Create;
    Selection := SelectionFact.CreateDimSelectionSet;
    // Задаем отметку
    DimSel := Selection.Add((Dimension As IMetabaseObject).Open(ParamValues) As IDimInstance);
    DimSel.SelectElement(0False);
    // Задаем формулу   
    Slice := Vars.Add(Stub).Slices.Add(Selection);
    TermX1 := Determ.Operands.Add(Slice);
    Determ.Expression.AsString := "10 -" + TermX1.TermToInnerText + " * 3.14";
    // Сохраняем изменения в метамодели
    (MetaModel As IMetabaseObject).Save;
End Sub UserProc;

После выполнения примера в метамодель будет добавлена внутренняя модель, рассчитываемая методом «Детерминированное уравнение». Входная переменная модели - куб «CUBE_IN», выходная - куб «CUBE_OUT». В метамодель будут добавлены параметры для управления параметрами данных кубов.

Пример Fore.NET

Необходимые требования и результат выполнения примера 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;
    ms: IMetabaseObjectDescriptor;
    MetaModel: IMsMetaModel;
    Dimension: IDimensionModel;
    CubeIn, CubeOut: IMetabaseObject;
    StParams: IMsDimOpenStubParamValues;
    StubParam: IMsDimOpenStubParamValue;
    Param: IMsDimOpenParamValue;
    ChainEntries: IMsCalculationChainEntries;
    ChainModel: IMsCalculationChainModel;
    Model: IMsModel;
    Trans: IMsFormulaTransform;
    Vars: IMsFormulaTransformVariables;
    Stub: IVariableStub;
    SelectionFact: IDimSelectionSetFactory;
    Selection: IDimSelectionSet;
    DimSel: IDimSelection;
    Slice: IMsFormulaTransformSlice;
    Selector: IMsFormulaTransformSelector;
    ParamValues: IMetabaseObjectParamValues;
    Formula: IMsFormula;
    Determ: IMsDeterministicTransform;
    TermX1: IMsFormulaTerm;
Begin
    mb := Params.Metabase;
    // Получаем метамодель
    ms := mb.ItemById["MS"];
    MetaModel := mb.ItemByIdNamespace["METAMODEL", ms.Key].Edit() As IMsMetaModel;
    // Получаем параметрический справочник
    Dimension := mb.ItemById["DIM"].Bind() As IDimensionModel;
    // Получаем входной куб
    CubeIn := mb.ItemById["CUBE_IN"].Bind();
    // Получаем выходной куб
    CubeOut := mb.ItemById["CUBE_OUT"].Bind();
    // Добавляем параметры в метамодель и задаем их значения
    StParams := MetaModel.DimOpenStubParamValues;
    StParams.Clear();
    // Параметр для выходного куба
    StubParam := StParams.Add(CubeOut.Key);
    StubParam.StubValues := CubeOut.Params.CreateEmptyValues();
    StubParam.StubValues.FindById("PARAM1").Value := "1";
    Param := StubParam.Values.Add(Dimension);
    Param.Values := (Dimension As IMetabaseObject).Params.CreateEmptyValues();
    Param.Values.FindById("PARAM1").Value := "1";
    // Параметр входного куба
    StubParam := StParams.Add(CubeIn.Key);
    StubParam.StubValues := CubeIn.Params.CreateEmptyValues();
    StubParam.StubValues.FindById("PARAM1").Value := "1";
    Param := StubParam.Values.Add(Dimension);
    Param.Values := (Dimension As IMetabaseObject).Params.CreateEmptyValues();
    Param.Values.FindById("PARAM1").Value := "1";
    // Создаем в метамодели внутреннюю модель
    ChainEntries := MetaModel.CalculationChain;
    ChainModel := ChainEntries.AddExclusiveModel();
    Model := ChainModel.EditModel;
    Trans := Model.Transform;
    // Добавляем выходную переменную
    Vars := Trans.Outputs;
    Stub := CubeOut As IVariableStub;
    ParamValues := (Dimension As IMetabaseObject).Params.CreateEmptyValues();
    ParamValues.FindById("PARAM1").Value := "1";
    SelectionFact := New DimSelectionSetFactory.Create();
    Selection := SelectionFact.CreateDimSelectionSet();
    // Задаем отметку
    DimSel := Selection.Add((Dimension As IMetabaseObject).Open(ParamValues) As IDimInstance);
    DimSel.SelectElement(0False);
    // Настраиваем расчёт модели
    Slice := Vars.Add(Stub).Slices.Add(Selection);
    Selector := Model.Transform.CreateSelector();
    Selector.Slice := Slice;
    Formula := Model.Transform.Transform[Selector];
    Formula.Level := DimCalendarLevel.dclYear;
    // Настраиваем детерминированное уравнение
    (Model As IMetabaseObject).Name := "Детерминированное уравнение";
    Formula.Kind := MsFormulaKind.mfkDeterministic;
    Determ := Formula.Method As IMsDeterministicTransform;
    // Добавляем входную переменную
    Vars := Trans.Inputs;
    Stub := CubeIn As IVariableStub;
    ParamValues := (Dimension As IMetabaseObject).Params.CreateEmptyValues();
    ParamValues.FindById("PARAM1").Value := "1";
    SelectionFact := New DimSelectionSetFactory.Create();
    Selection := SelectionFact.CreateDimSelectionSet();
    // Задаем отметку
    DimSel := Selection.Add((Dimension As IMetabaseObject).Open(ParamValues) As IDimInstance);
    DimSel.SelectElement(0False);
    // Задаем формулу   
    Slice := Vars.Add(Stub).Slices.Add(Selection);
    TermX1 := Determ.Operands.Add(Slice);
    Determ.Expression.AsString := "10 -" + TermX1.TermToInnerText() + " * 3.14";
    // Сохраняем изменения в метамодели
    (MetaModel As IMetabaseObject).Save();
End Sub;

См. также:

IMsMetaModel