Группировка по атрибутам элементов измерений боковика и шапки

Описание

Продукт «Форсайт. Аналитическая платформа» позволяет группировать по атрибутам элементы измерений боковика или шапки. Значения группировочных элементов могут быть агрегированы.

В данном примере рассмотрено создание группировки по атрибутам в боковике и шапке таблицы и вывод агрегированных значений в группировочный элемент.

Требования

Для выполнения примера в репозитории предполагается наличие регламентного отчёта с идентификатором REPORT. Отчет содержит таблицу.

Источником данных для таблицы является куб, который содержит четыре измерения:

Измерения боковика и шапки имеют по три атрибута:

Добавьте ссылки на системные сборки: Dimensions, Drawing, Express, ForeSystem, Matrix, Metabase, Pivot, Report, Tab.

Пример

Sub UserProc;
Var
    MB: IMetabase;
    Report: IPrxReport;
    Slice: IEaxDataAreaSlice;
    Pivotslice: IEaxDataAreaPivotSlice;
    Pivot: IPivot;
    DimInst: IDimInstance;
    PivotGroupItems: IPivotGroupItems;
    PivotGroupItem: IPivotGroupItem;
    PivotGroupAggregations: IPivotGroupAggregations;
    DimselectionSet, Selection: IDimselectionSet;
    Stylesettings: IDataAreaHeaderStyleSettingsBase;
    HeaderStyle, DataStyle: ITabCellStyle;
    Settings: IDataAreaHeaderSettingsBase;
    Key: Integer;
    Viewsettings: IEaxGridViewSettings;
    Pivotdim: IPivotDimension;
    Method: BasicAggregatorOperation;
Begin
    
// Получим репозиторий
    MB := MetabaseClass.Active;
    
// Получим отчёт
    Report := MB.ItemById("REPORT").Edit As IPrxReport;
    
// Получим срез отчёта
    Slice := Report.DataArea.Slices.Item(0);
    
// Получим объект для работы с таблицей
    Pivotslice := Slice As IEaxDataAreaPivotSlice;
    Pivot := Pivotslice.Pivot;
    
// Зададим объект для группировки по атрибутам элемента изерения
    PivotGroupItems := Pivot.AttributesGroups;
    
// Определим параметры отображения таблицы с данными
    Viewsettings := (Report.DataArea.Views.Item(0As IEaxGrid).ViewSettings;
    
// Создадим копию отметок справочника
    DimselectionSet := Pivot.Selection.CreateCopy;
    
// Удалим отметки
    DimselectionSet.Clear;
    
// Добавим отметку
    DimselectionSet.Add(Pivot.DimItem(0));
    DimselectionSet.Item(
0).SelectElement(1False);
    
// Добавим измерение расположенное в шапке
    DimInst := pivot.DimItem(2);
    
// Определим атрибут для группировки
    Key := DimInst.Attributes.Item(2).Attribute.Key;
    
// Добавим элементы в группировку
    PivotGroupItems.Clear;
    PivotGroupItem := PivotGroupItems.Add;
    PivotGroupItem.AttributeKey := Key;
    PivotGroupItem.Dimension := DimInst;

    // Установим оформление столбцов
    Stylesettings := PivotGroupItem As IDataAreaHeaderStyleSettingsBase;
    HeaderStyle := Viewsettings.GetStyleSettings(Stylesettings).Header;
    DataStyle := Viewsettings.GetStyleSettings(Stylesettings).Data;
    HeaderStyle.BackgroundBrush := 
New GxSolidBrush.Create(GxColor.FromName("Yellow"));
    DataStyle.Font.Color := GxColor.FromName(
"Black");
    DataStyle.BackgroundBrush := 
New GxSolidBrush.Create(GxColor.FromName("LightYellow"));
    
// Добавим измерение расположенное в боковике
    DimInst := Pivot.DimItem(1);
    Pivotdim := Pivot.Dimensions.FindByKey(DimInst.Key);
    
// Определим стиль оформления заголовков
    Settings := Pivotdim As IDataAreaHeaderSettingsBase;
    Stylesettings := Pivotdim 
As IDataAreaHeaderStyleSettingsBase;
    HeaderStyle := Viewsettings.GetStyleSettings(Stylesettings).Header;
    HeaderStyle.Font.Bold := TriState.OnOption;
    Viewsettings.GetViewSettings(Settings).Hierarchical := TriState.OffOption;
    
// Определим атрибут для группировки
    Key := DimInst.Attributes.Item(2).Attribute.Key;
    
// Добавим элементы в группировку
    PivotGroupItem := PivotGroupItems.Add;
    PivotGroupItem.AttributeKey := Key;
    PivotGroupItem.Dimension := DimInst;
    
// Установим оформление строк
    Stylesettings := PivotGroupItem As IDataAreaHeaderStyleSettingsBase;
    HeaderStyle := Viewsettings.GetStyleSettings(Stylesettings).Header;
    DataStyle := Viewsettings.GetStyleSettings(Stylesettings).Data;
    HeaderStyle.BackgroundBrush := 
New GxSolidBrush.Create(GxColor.FromName("Green"));
    DataStyle.Font.Color := GxColor.FromName(
"White");
    DataStyle.BackgroundBrush := 
New GxSolidBrush.Create(GxColor.FromName("SkyBlue"));
    
// Определим второй атрибут для группировки
    Key := DimInst.Attributes.Item(1).Attribute.Key;
    
// Добавим элементы в группировку
    PivotGroupItem := PivotGroupItems.Add;
    PivotGroupItem.AttributeKey := Key;
    PivotGroupItem.Dimension := DimInst;
    
// Установим оформление строк
    Stylesettings := PivotGroupItem As IDataAreaHeaderStyleSettingsBase;
    HeaderStyle := Viewsettings.GetStyleSettings(Stylesettings).Header;
    DataStyle := Viewsettings.GetStyleSettings(Stylesettings).Data;
    HeaderStyle.BackgroundBrush := 
New GxSolidBrush.Create(GxColor.FromName("LightGreen"));
    DataStyle.Font.Color := GxColor.FromName(
"White");
    DataStyle.BackgroundBrush := 
New GxSolidBrush.Create(GxColor.FromName("Turquoise"));
    
// Зададим метод агрегации для строк
    PivotGroupAggregations := PivotGroupItem.AggregationMethods;
    Method := BasicAggregatorOperation.Sum;
    Selection := DimselectionSet;
    PivotGroupAggregations.Add(Selection, Method);
    
// Обновим объект для работы с таблицей 
    Pivot.Refresh;
    
// Сохраним отчёт
    (Report As IMetabaseObject).Save;
End Sub UserProc;

Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Drawing;
Imports Prognoz.Platform.Interop.Express;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Matrix;
Imports Prognoz.Platform.Interop.Pivot;
Imports Prognoz.Platform.Interop.Report;
Imports Prognoz.Platform.Interop.Tab;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    Report: IPrxReport;
    Slice: IEaxDataAreaSlice;
    Pivotslice: IEaxDataAreaPivotSlice;
    Pivot: IPivot;
    DimInst: IDimInstance;
    PivotGroupItems: IPivotGroupItems;
    PivotGroupItem: IPivotGroupItem;
    PivotGroupAggregations: IPivotGroupAggregations;
    DimselectionSet, Selection: IDimselectionSet;
    Stylesettings: IDataAreaHeaderStyleSettingsBase;
    HeaderStyle, DataStyle: ITabCellStyle;
    GxColorCls: GxColorClass = 
New GxColorClassClass();
    GxSolidBrushCls: GxSolidBrush = 
New GxSolidBrushClass();
    Settings: IDataAreaHeaderSettingsBase;
    Key: uinteger;
    Viewsettings: IEaxGridViewSettings;
    Pivotdim: IPivotDimension;
    Method: BasicAggregatorOperation;
Begin
    
// Получим репозиторий
    MB := Params.Metabase;
    
// Получим отчёт
    Report := MB.ItemById["REPORT"].Edit() As IPrxReport;
    
// Получим срез отчёта
    Slice := Report.DataArea.Slices.Item[0];
    
// Получим объект для работы с таблицей
    Pivotslice := Slice As IEaxDataAreaPivotSlice;
    Pivot := Pivotslice.Pivot;
    
// Зададим объект для группировки по атрибутам элемента изерения
    PivotGroupItems := Pivot.AttributesGroups;
    
// Определим параметры отображения таблицы с данными
    Viewsettings := (Report.DataArea.Views.Item[0As IEaxGrid).ViewSettings;
    
// Создадим копию отметок справочника
    DimselectionSet := Pivot.Selection.CreateCopy();
    
// Удалим отметки
    DimselectionSet.Clear();
    
// Добавим отметку
    DimselectionSet.Add(Pivot.DimItem[0]);
    DimselectionSet.Item[
0].SelectElement(1False);
    
// Добавим измерение расположенное в шапке
    DimInst := pivot.DimItem[2];
    
// Определим атрибут для группировки
    Key := DimInst.Attributes.Item[6].Attribute.Key;
    
// Добавим элементы в группировку
    PivotGroupItems.Clear();
    PivotGroupItem := PivotGroupItems.Add();
    PivotGroupItem.AttributeKey := Key;
    PivotGroupItem.Dimension := DimInst;

    // Установим оформление столбцов
    Stylesettings := PivotGroupItem As IDataAreaHeaderStyleSettingsBase;
    HeaderStyle := Viewsettings.GetStyleSettings[Stylesettings].Header;
    DataStyle := Viewsettings.GetStyleSettings[Stylesettings].Data;
    GxSolidBrushCls.Create(GxColorCls.FromName(
"Yellow"));
    HeaderStyle.BackgroundBrush := GxSolidBrushCls;
    DataStyle.Font.Color := GxColorCls.FromName(
"Black");
    GxSolidBrushCls.Create(GxColorCls.FromName(
"LightYellow"));
    DataStyle.BackgroundBrush := GxSolidBrushCls;
    
// Добавим измерение расположенное в боковике
    DimInst := Pivot.DimItem[1];
    Pivotdim := Pivot.Dimensions.FindByKey(DimInst.Key);
    
// Определим стиль оформления заголовков
    Settings := Pivotdim As IDataAreaHeaderSettingsBase;
    Stylesettings := Pivotdim 
As IDataAreaHeaderStyleSettingsBase;
    HeaderStyle := Viewsettings.GetStyleSettings[Stylesettings].Header;
    HeaderStyle.Font.Bold := TriState.tsOnOption;
    Viewsettings.GetViewSettings[Settings].Hierarchical := TriState.tsOffOption;
    
// Определим атрибут для группировки
    Key := DimInst.Attributes.Item[2].Attribute.Key;
    
// Добавим элементы в группировку
    PivotGroupItem := PivotGroupItems.Add();
    PivotGroupItem.AttributeKey := Key;
    PivotGroupItem.Dimension := DimInst;
    
// Установим оформление строк
    Stylesettings := PivotGroupItem As IDataAreaHeaderStyleSettingsBase;
    HeaderStyle := Viewsettings.GetStyleSettings[Stylesettings].Header;
    DataStyle := Viewsettings.GetStyleSettings[Stylesettings].Data;
    GxSolidBrushCls.Create(GxColorCls.FromName(
"Green"));
    HeaderStyle.BackgroundBrush := GxSolidBrushCls;
    DataStyle.Font.Color := GxColorCls.FromName(
"White");
    GxSolidBrushCls.Create(GxColorCls.FromName(
"SkyBlue"));
    DataStyle.BackgroundBrush := GxSolidBrushCls;
    
// Определим второй атрибут для группировки
    Key := DimInst.Attributes.Item[1].Attribute.Key;
    
// Добавим элементы в группировку
    PivotGroupItem := PivotGroupItems.Add();
    PivotGroupItem.AttributeKey := Key;
    PivotGroupItem.Dimension := DimInst;
    
// Установим оформление строк
    Stylesettings := PivotGroupItem As IDataAreaHeaderStyleSettingsBase;
    HeaderStyle := Viewsettings.GetStyleSettings[Stylesettings].Header;
    DataStyle := Viewsettings.GetStyleSettings[Stylesettings].Data;
    GxSolidBrushCls.Create(GxColorCls.FromName(
"LightGreen"));
    HeaderStyle.BackgroundBrush := GxSolidBrushCls;
    DataStyle.Font.Color := GxColorCls.FromName(
"White");
    GxSolidBrushCls.Create(GxColorCls.FromName(
"Turquoise"));
    DataStyle.BackgroundBrush := GxSolidBrushCls;
    
// Зададим метод агрегации для строк
    PivotGroupAggregations := PivotGroupItem.AggregationMethods;
    Method := BasicAggregatorOperation.baoSum;
    Selection := DimselectionSet;
    PivotGroupAggregations.Add(Selection, Method);
    
// Обновим объект для работы с таблицей 
    Pivot.Refresh();
    
// Сохраним отчёт
    (Report As IMetabaseObject).Save();
End Sub;

Результат выполнения примеров Fore и Fore.NET

До выполнения примера отчёт содержал таблицу данных:

В результате выполнения примера в боковик и шапку будут выведены группировочные элементы. Для группировочных элементов боковика задан метод агрегации «Сумма».

Таблица примет вид:

См. также:

IPivot.AttributesGroups