ITsCalculationContext.CalculationType

Синтаксис Fore

CalculationType: TsCalculationType;

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

CalculationType[Context: Prognoz.Platform.Interop.Fore.IForeRuntimeContext]: TsCalculationType;

Параметры

Context. Контекст выполнения метода. Актуален только для Fore.NET.

Описание

Свойство доступно только для чтения.

Свойство CalculationType возвращает режим расчета пользовательского метода.

Комментарии

Если применяется поточечный расчет, т.е. CalculationType = TsCalculationType.Pointwise, то пользовательский метод выполняется для каждого наблюдения ряда. Если используется векторный расчет, т.е. CalculationType = TsCalculationType.Series, то метод выполняется для всего ряда в целом.

Пример Fore

В данном примере приведен пользовательский метод расчета. Для выполнения примера добавьте ссылки на системные сборки «Metabase», «Ms», «Transform».

Public Function CalculateSomething: Variant;
Var
    pContext: ITsCalculationContext;
    i: Integer;
    pSeries: ITimeSeries;
Begin
    pContext := TsCalculation.Current;
    pContext.Tag := pContext.ParentObject.Name;
    pSeries := pContext.CreateTimeSeries;
    If pContext.CalculationType = TsCalculationType.Series Then
        pContext.RaiseMessage("Векторный режим");
        If pSeries.CalcPointCount < 25 Then
            If pSeries.CalcPointCount < 15 Then
                pContext.RaiseError("Число наблюдений недостаточно. Расчет не может быть произведен");
            Else
                pContext.RaiseWarning("Число наблюдений мало. Могут быть получены недостоверные данные");
            End If;
        End If;
        For i := pSeries.StartIndex To pSeries.EndIndex Do
            pSeries.Item(i) := 1 / i;
        End For;
        Return pSeries;
    Else
        If pContext.CalculationDirection = TsCalculationDirection.Forward Then
            pContext.RaiseMessage("Поточечный режим (вперед)");
        Else
            pContext.RaiseMessage("Поточечный режим (назад)");
        End If;
        If pSeries.CalcPointCount < 25 Then
            If pSeries.CalcPointCount < 15 Then
                pContext.RaiseError("Число наблюдений недостаточно. Расчет не может быть произведен");
            Else
                pContext.RaiseWarning("Число наблюдений мало. Могут быть получены недостоверные данные");
            End If;
        End If;
        i := pSeries.CurrentIndex;
        pSeries.Item(i) := 1 / i;
        Return pSeries.Item(i);
    End If;
End Function CalculateSomething;

Метод вычисляет значения на основании индекса наблюдения. Метод работает, как в векторном, так и в поточечном режимах. Режим расчета выводится в сообщении. Если число наблюдений меньше 25, то выводится предупреждение. Если число наблюдений меньше 15, то выводится ошибка и метод не рассчитывается.

Пример Fore.NET

В данном примере приведен пользовательский метод расчета.

Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Transform;
Imports Prognoz.Platform.Interop.Dimensions;

Public Shared Function CalculateSomethingNet(): object;
Var
    TsCalc: TsCalculation;
    pContext: ITsCalculationContext;
    i: Integer;
    pSeries: ITimeSeries;
Begin
    TsCalc := New TsCalculation.Create();
    pContext := TsCalc.Current[Null];
    pContext.Tag := pContext.ParentObject.Name;
    pSeries := pContext.CreateTimeSeries(-1 As DimCalendarLevel, NullAs ITimeSeries;
    If pContext.CalculationType[Null] = TsCalculationType.tctSeries Then
        pContext.RaiseMessage("Векторный режим");
        If pSeries.CalcPointCount < 25 Then
            If pSeries.CalcPointCount < 15 Then
                pContext.RaiseError("Число наблюдений недостаточно. Расчет не может быть произведен");
            Else
                pContext.RaiseWarning("Число наблюдений мало. Могут быть получены недостоверные данные");
            End If;
        End If;
        For i := pSeries.StartIndex To pSeries.EndIndex Do
            pSeries.Item[i] := 1 / i;
        End For;
        Return pSeries;
    Else
        If pContext.CalculationDirection[Null] = TsCalculationDirection.tcdForward Then
            pContext.RaiseMessage("Поточечный режим (вперед)");
        Else
            pContext.RaiseMessage("Поточечный режим (назад)");
        End If;
        If pSeries.CalcPointCount < 25 Then
            If pSeries.CalcPointCount < 15 Then
                pContext.RaiseError("Число наблюдений недостаточно. Расчет не может быть произведен");
            Else
                pContext.RaiseWarning("Число наблюдений мало. Могут быть получены недостоверные данные");
            End If;
        End If;
        i := pSeries.CurrentIndex;
        pSeries.Item[i] := 1 / i;
        Return pSeries.Item[i];
    End If;
End Function;

Метод вычисляет значения на основании индекса наблюдения. Метод работает, как в векторном, так и в поточечном режимах. Режим расчета выводится в сообщении. Если число наблюдений меньше 25, то выводится предупреждение. Если число наблюдений меньше 15, то выводится ошибка и метод не рассчитывается.

См. также:

ITsCalculationContext