Day(Calendar: IDimInstance; El: Integer): Integer;
Day(Calendar: Prognoz.Platform.Interop.Dimensions.IDimInstance; El: uinteger): uinteger;
Calendar. Данные календарного справочника, по которым выполняется расчет;
El. Индекс элемента, относительно которого выполняется расчет.
Метод Day возвращает индекс элемента, соответствующий началу календарного периода, в который входит указанный элемент.
Для корректного расчёта календарный справочник должен содержать уровень «Дни».
Например, если календарный справочник содержит уровни годы, кварталы, дни и расчёт выполняется для:
элемента квартальной динамики, то метод Day возвращает элемент, соответствующий началу квартала;
элемента годовой динамики, то метод 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;
Результат использования отношения в формуле вычисляемого факта: значение для элемента месячной динамики будет браться из последнего дня месяца.
См. также: