IEaxDataAreaSlice.CalcTransformations

Синтаксис Fore

CalcTransformations: IEaxDataAreaTransformations;

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

CalcTransformations: Prognoz.Platfrorm.Interop.Express.IEaxDataAreaTransformations;

Описание

Свойство CalcTransformations возвращает коллекцию формул преобразования данных, заданных для вычисляемых элементов.

Комментарии

Вычисляемые элементы создаются в конструируемом справочнике отдельной альтернативной иерархии. Альтернативная иерархия должна быть создана для того измерения, в котором необходимо использовать вычисляемые элементы. Для каждого вычисляемого элемента в коллекции CalcTransformations создается собственная формула преобразования данных, по которой будут вычисляться значения.

Пример Fore

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

Подключите системные сборки: Dal, Dimensions, Express, Metabase, Report.

Sub UserProc;
Var
    MB: IMetabase;
    Report: IPrxReport;
    DataArea: IEaxDataArea;
    DataAreaSlice: IEaxDataAreaSlice;
    DimSS: IDimSelectionSet;
    DimS: IDimSelection;
    Hierarchies: IEaxDataAreaHierarchies;
    Hierarchy: IEaxDataAreaHierarchy;
    CustomDim: ICustomDimension;
    Elements: ICustomDimElements;
    Attributes: ICustomDimAttributes;
    NameAttribute: ICustomDimAttribute;
    Transform: IEaxDataAreaTransformation;
    hKey, newElIndex, ElId: Integer;
Begin
    MB := MetabaseClass.Active;
    Report := MB.ItemById(
"REPORT").Edit As IPrxReport;
    DataArea := Report.DataArea 
As IEaxDataArea;
    DataAreaSlice := DataArea.Slices.Item(
0);
    
//Измерение источника
    DimSS := DataAreaSlice.Selection;
    DimS := DimSS.FindById(
"REGIONS");
    
//Создадим вычисляемый элемент на базе созданного параметра
    Hierarchies := DataArea.Hierarchies;
    
//Уникальный ключ иерархии
    hKey := Hierarchies.CreateKey(DataAreaSlice.Key, DimS.Dimension.Key);
    
//Получим альтернативную иерархию по ее ключу
    Hierarchy := Hierarchies.FindByKey(hKey);
    
//Если иерархия не найдена по ключу, то создадим её
    If Hierarchy = Null Then
        Hierarchy := Hierarchies.Add(DataAreaSlice, DimS, hKey);
    
End If;
    
//Получим измерение фактов
    CustomDim := Hierarchy.CustomDimension;
    
//Получим элементы и индексы атрибутов измерения фактов
    Elements := CustomDim.Elements;
    Attributes := CustomDim.Attributes;
    NameAttribute := Attributes.Name;
    
//Создание нового элемента
    newElIndex := Elements.Add;
    ElId := Elements.RowCount + 
1;
    
//Значения атрибутов для нового элемента
    Elements.AttributeValueByKey(newElIndex, NameAttribute.Key) := "Calculated element";
    Elements.AttributeValueByKey(newElIndex, Attributes.Id.Key) := ElId.ToString;
    Elements.AttributeValueByKey(newElIndex, Attributes.Order.Key) := ElId;
    
//Применение изменений к измерению с альтернативной иерархией
    Hierarchies.PushChangesToDimInstance(DimS, CustomDim);
    newElIndex := DimS.Dimension.Elements.FindById(ElId.ToString);
    
//Формула трансформации для вычисляемого элемента
    Transform := DataAreaSlice.CalcTransformations.Add(DimSS, DimS, newElIndex);
    Transform.Enabled := 
True;
    Transform.Expression.AsString := 
'{' + Elements.AttributeValueByKey(0, NameAttribute.Key) + "[t]}+{" + Elements.AttributeValueByKey(1, NameAttribute.Key) + "[t]}";
    Hierarchies.AddDependant(DimS, hKey, DimSS, ElId.ToString, Transform);
    
//Сохранение
    Report.MetabaseObject.Save;
End Sub UserProc;

При выполнении примера будет осуществлена доработка среза аналитической области данных:

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Express;
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Report;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    Report: IPrxReport;
    DataArea: IEaxDataArea;
    DataAreaSlice: IEaxDataAreaSlice;
    DimSS: IDimSelectionSet;
    DimS: IDimSelection;
    Hierarchies: IEaxDataAreaHierarchies;
    Hierarchy: IEaxDataAreaHierarchy;
    CustomDim: ICustomDimension;
    Elements: ICustomDimElements;
    Attributes: ICustomDimAttributes;
    NameAttribute: ICustomDimAttribute;
    Transform: IEaxDataAreaTransformation;
    hKey, elIndex: uinteger;
    newElIndex, ElId: Integer;
Begin
    MB := Params.Metabase;
    Report := MB.ItemById[
"REPORT"].Edit() As IPrxReport;
    DataArea := Report.DataArea 
As IEaxDataArea;
    DataAreaSlice := DataArea.Slices.Item[
0];
    
//Измерение источника
    DimSS := DataAreaSlice.Selection;
    DimS := DimSS.FindById(
"REGIONS");
    
//Создадим вычисляемый элемент на базе созданного параметра
    Hierarchies := DataArea.Hierarchies;
    
//Уникальный ключ иерархии
    hKey := Hierarchies.CreateKey(DataAreaSlice.Key, DimS.Dimension.Key);
    
//Получим альтернативную иерархию по ее ключу
    Hierarchy := Hierarchies.FindByKey(hKey);
    
//Если иерархия не найдена по ключу, то создадим её
    If Hierarchy = Null Then
        Hierarchy := Hierarchies.Add(DataAreaSlice, DimS, hKey, 
Null);
    
End If;
    
//Получим измерение фактов
    CustomDim := Hierarchy.CustomDimension;
    
//Получим элементы и индексы атрибутов измерения фактов
    Elements := CustomDim.Elements;
    Attributes := CustomDim.Attributes;
    NameAttribute := Attributes.Name;
    
//Создание нового элемента
    newElIndex := Elements.Add();
    ElId := Elements.RowCount + 
1;
    
//Значения атрибутов для нового элемента
    Elements.AttributeValueByKey[newElIndex, NameAttribute.Key] := "Calculated element";
    Elements.AttributeValueByKey[newElIndex, Attributes.Id.Key] := ElId.ToString();
    Elements.AttributeValueByKey[newElIndex, Attributes.Order.Key] := ElId;
    
//Применение изменений к измерению с альтернативной иерархией
    Hierarchies.PushChangesToDimInstance(DimS, CustomDim);
    elIndex := DimS.Dimension.Elements.FindById(ElId.ToString());
    
//Формула трансформации для вычисляемого элемента
    Transform := DataAreaSlice.CalcTransformations.Add(DimSS, DimS, elIndex);
    Transform.Enabled := 
True;
    Transform.Expression.AsString := 
'{' + Elements.AttributeValueByKey[0, NameAttribute.Key] + "[t]}+{" + Elements.AttributeValueByKey[1, NameAttribute.Key] + "[t]}";
    Hierarchies.AddDependant(DimS, hKey, DimSS, ElId.ToString(), Transform);
    
//Сохранение
    Report.MetabaseObject.Save();
End Sub;

См. также:

IEaxDataAreaSlice