ICalendarDimensionClass.Day

Синтаксис

Day(Calendar: IDimInstance; El: Integer): Integer;

Day(Calendar: Prognoz.Platform.Interop.Dimensions.IDimInstance; El: uinteger): uinteger;

Параметры

Calendar. Данные календарного справочника, по которым выполняется расчет;

El. Индекс элемента, относительно которого выполняется расчет.

Описание

Метод Day возвращает индекс элемента, соответствующий началу календарного периода, в который входит указанный элемент.

Комментарии

Для корректного расчёта календарный справочник должен содержать уровень «Дни».

Например, если календарный справочник содержит уровни годы, кварталы, дни и расчёт выполняется для:

Пример

Пример является функцией, используемой для расчёта отношения в стандартном кубе.

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

Function GetLag(DimInst: IDimInstance; El: Integer): Integer;
Var
    Result: Integer;
Begin
    
// Выполняем вычисления
    If CalendarDimension.Level(DimInst, El) = DimCalendarLevel.Day Then
        Result := CalendarDimension.Day(DimInst, CalendarDimension.Shift(DimInst, El, 
365));
    
Else
        Result := -
1;
    
End If;
    
// Возвращаем результат
    Return Result;
End Function GetLag;

Public Function Lag(T: Variant): Variant;
Var
    Cube: ICubeInstance;
    CubeDest: ICubeInstanceDestination;
    DimInsts: ICubeInstanceDimensions;
    DimInst: IDimInstance;
    Res: Array 
Of Integer;
    I: Integer;
    Cnt: Integer;
Begin
    
// Получаем текущий куб
    Cube := CubeClass.CurrentCube;
    CubeDest := Cube.Destinations.DefaultDestination;
    
// Находим календарное измерение
    DimInsts := CubeDest.Dimensions;
    Cnt := DimInsts.Count;
    
For I := 0 To Cnt - 1 Do
        
If DimInsts.Item(I).Dimension.IsCalendar Then
            DimInst := DimInsts.Item(I);
        
End If;
    
End For;
    
// Укажем возможность наличия массива в качестве входного параметра T
    If T.VarType = ForeVariantType.Matrix Then
        Res := T 
As Array Of Integer;
        Cnt := Res.Length;
        
For I := 0 To Cnt - 1 Do
            Res[I] := GetLag(DimInst, Res[I]);
        
End For;
        
// Возвращаем результат
        Return Res;
    
Else
        
//Возвращаем целоечисленное значение    
        Return GetLag(DimInst, T);
    
End If;
End Function Lag;

Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;

Public Shared Function Day(T: object): Integer;
Var
    cClass: CubeClassClass;
    Cube: ICubeInstance;
    CubeDest: ICubeInstanceDestination;
    DimInsts: ICubeInstanceDimensions;
    DimInst: IDimInstance;
    i: Integer;
    calendDim: CalendarDimension;
    el: uinteger;
    Result: Integer;
Begin
    // Получаем текущий куб
    cClass := New CubeClassClass.Create();
    Cube := cClass.CurrentCube[Null];
    CubeDest := Cube.Destinations.DefaultDestination;
    // Получаем календарное измерение
    DimInsts := CubeDest.Dimensions;
    For i := 0 To DimInsts.Count - 1 Do
        If (DimInsts.Item[i].Dimension Is ICalendarDimension) Then
            DimInst := DimInsts.Item[i];
        End If;
    End For;
    // Выполняем вычисления
    calendDim := New CalendarDimension.Create();
    el := uinteger.Parse(t.ToString());
    If calendDim.Level(DimInst, el) = DimCalendarLevel.dclMonth Then
        Result := calendDim.Day(DimInst, el) As integer;
    Else
        Result := -1;
    End If;
    // Возвращаем результат
    Return Result;
End Function Day;

Результат использования отношения в формуле вычисляемого факта: значение для элемента месячной динамики будет браться из последнего дня месяца.

См. также:

ICalendarDimensionClass