Настройка вычисляемых фактов в стандартном кубе

При создании стандартного куба, после формирования иерархии фактов осуществляется их привязка к полям источников данных. Если факты не привязаны к источнику данных, то для них в дальнейшем могут быть заданы формулы, по которым будут рассчитываться значения. Такие факты называются «Вычисляемые», при работе из мастера настройка их параметров осуществляется на вкладке «Вычисляемые факты». Работа с вычисляемыми фактами из прикладного кода происходит следующим образом:

В качестве формулы может быть указано какое-либо математическое выражение либо пользовательский макрос, который будет выполнен для каждой координаты куба. Макрос указывается в следующем формате: <идентификатор модуля/формы>.<наименование функции>.

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

Формирование макросов для вычисляемых фактов

В качестве макроса для вычисляемого факта должна выступать функция, реализованная в глобальном пространстве имен модуля/формы. Функция может иметь какие-либо параметры, также через параметры в функцию могут быть переданы значения других фактов куба.

Примеры функций для вычисляемых фактов:

Function CalculateFact: Variant;
Var
    Value: Variant;
Begin
    Value := ...; //Вычисление значения
    Return Value;
End Function CalculateFact;

Function CalculateFact1(FactX: Double; FactY: Double): Double;
Begin
    Return FactX / FactY;
End Function CalculateFact1;

Для доступа к параметрам текущего куба предназначены статические свойства класса CubeClass: CurrentCoord и CurrentCube.

Function CalculateFact2: String;
Var
    Coord: IMatrixCoord;
    DimSelSet: IDimSelectionSet;
    DimInst: IDimInstance;
    DimIndex: Integer;
    ElementName: String;
Begin
    //Текущая координата
    Coord := CubeClass.CurrentCoord;
    DimSelSet := Coord.Matrix.Dimensions;
    //Данные календарного измерения
    DimInst := DimSelSet.FindById("CALENDAR").Dimension;
    //Индекс календарного измерения в списке
    DimIndex := DimSelSet.IndexOfKey(DimInst.Key);
    //Наименование элемента в календаре, которому соответствует текущая координата
    ElementName := DimInst.Attributes.FindById("NAME").Value(Coord.Item(DimIndex));
    Return ElementName;
End Function CalculateFact2;

См. также:

Примеры | IStandardCubeFactBinding.Formula