IModelling.LevelIndexSeries

Синтаксис Fore

LevelIndexSeries(TargetFrequency: MsFrequency,
                 [OutputFrequency: MsFrequency = 0]): Variant;

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

LevelIndexSeries(TargetFrequency: Prognoz.Platform.Interop.Ms.MsFrequency,
                 [OutputFrequency: Prognoz.Platform.Interop.Ms.MsFrequency = 0]): Object;

Параметры

TargetFrequency. Календарная динамика, индексы элементов которой требуется получить;

OutputFrequency. Календарная динамика результирующего ряда.

Описание

Метод LevelIndexSeries возвращает текущий индекс элемента для заданной календарной динамики.

Комментарии

Для корректного расчета календарная динамика TargetFrequency должна быть больше или равна динамике расчета.

Если параметр OutputFrequency имеет значение «0», то результирующий ряд создаётся с динамикой текущего расчета.

Пример Fore

Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS». В данном контейнере содержится модель с идентификатором «MODEL_D_Q», рассчитываемая методом детерминированного уравнения на квартальных данных и содержащая хотя бы один фактор.

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

Sub UserProc;
Var
    Mb: IMetabase;
    ModelSpace, ModelObj: IMetabaseObject;
    Transf: IMsFormulaTransform;
    Formula: IMsFormula;
    Model: IMsModel;
    Determ: IMsDeterministicTransform;
    TransVar: IMsFormulaTransformVariable;
    Slice: IMsFormulaTransformSlice;
    TermInfo: IMsFormulaTermInfo;
    Expr: IExpression;
Begin
    // Получаем репозиторий
    Mb := MetabaseClass.Active;
    // Получаем контейнер моделирования
    ModelSpace := Mb.ItemById("MS").Bind;
    // Получаем модель
    ModelObj := Mb.ItemByIdNamespace("MODEL_D_Q", ModelSpace.Key).Edit;
    Model := ModelObj As IMsModel;
    // Получаем параметры расчета модели
    Transf := Model.Transform;
    Formula := Transf.FormulaItem(0);
    Determ := Formula.Method As IMsDeterministicTransform;
    // Получаем первую входную переменную
    TransVar := Transf.Inputs.Item(0);
    Slice := TransVar.Slices.Item(0);
    TermInfo := Transf.CreateTermInfo;
    TermInfo.Slice := Slice;
    // Задаем режим передачи переменной в расчет
    TermInfo.Type := MsFormulaTermType.Pointwise;
    // Получаем выражение расчета модели
    Expr := Determ.Expression;
    Expr.References := "Ms";
    // Задаем выражение расчета модели
    Expr.AsString := "iif(LevelIndexSeries(MsFrequency.Annual,MsFrequency.Quarterly)<=2," + TermInfo.TermInnerText + ",0)";
    // Проверяем корректность выражения
    If Expr.Valid
        // Если выражение задано корректно, то сохраняем модель
        Then ModelObj.Save;
        // Если выражение некорректное, то выводим сообщение в окно консоли
        Else Debug.WriteLine("Модель не сохранена: ошибка в формуле");
    End If;
End Sub UserProc;

В результате выполнения примера для модели будет изменена формула. Для значений первого и второго кварталов модель будет возвращать значения первого фактора, а для значений третьего и четвертого кварталов - нули.

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Ms;

Public Shared Sub Main(Params: StartParams);
Var
    Mb: IMetabase;
    ModelSpace, ModelObj: IMetabaseObject;
    Transf: IMsFormulaTransform;
    Formula: IMsFormula;
    Model: IMsModel;
    Determ: IMsDeterministicTransform;
    TransVar: IMsFormulaTransformVariable;
    Slice: IMsFormulaTransformSlice;
    TermInfo: IMsFormulaTermInfo;
    Expr: IExpression;
Begin
    // Получаем репозиторий
    Mb := Params.Metabase;
    // Получаем контейнер моделирования
    ModelSpace := Mb.ItemById["MS"].Bind();
    // Получаем модель
    ModelObj := Mb.ItemByIdNamespace["MODEL_D_Q", ModelSpace.Key].Edit();
    Model := ModelObj As IMsModel;
    // Получаем параметры расчета модели
    Transf := Model.Transform;
    Formula := Transf.FormulaItem[0];
    Determ := Formula.Method As IMsDeterministicTransform;
    // Получаем первую входную переменную
    TransVar := Transf.Inputs.Item[0];
    Slice := TransVar.Slices.Item[0];
    TermInfo := Transf.CreateTermInfo();
    TermInfo.Slice := Slice;
    // Задаем режим передачи переменной в расчет
    TermInfo.Type := MsFormulaTermType.mfttPointwise;
    // Получаем выражение расчета модели
    Expr := Determ.Expression;
    Expr.References := "Ms";
    // Задаем выражение расчета модели
    Expr.AsString := "iif(LevelIndexSeries(MsFrequency.Annual,MsFrequency.Quarterly)<=2," + TermInfo.TermInnerText + ",0)";
    // Проверяем корректность выражения
    If Expr.Valid
        // Если выражение задано корректно, то сохраняем модель
        Then ModelObj.Save();
        // Если выражение некорректное, то выводим сообщение в окно консоли
        Else System.Diagnostics.Debug.WriteLine("Модель не сохранена: ошибка в формуле");
    End If;
End Sub;

Пример использования в выражениях

Выражение 1:

LevelIndexSeries(MsFrequency.Annual)

Период расчета: 01.04.2000-01.09.2002; динамика расчета квартальная. Результат: [2, 3, 4, 1, 2, 3, 4, 1, 2, 3].

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

Выражение 2:

iif(levelindexseries(MsFrequency.Annual, MsFrequency.Quarterly) <= 3, X1, X2)

Результат: для значений первого, второго и третьего кварталов выражение будет возвращать значения фактора «X1», а для значений четвертого квартала -фактора «X2».

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

См. также:

IModelling