4.3. Использование ShowPivotAction

ShowPivotAction – это особое действие, позволяющее экспортировать данные из компонентов – наследников ListComponent, таких как Table, Tree и DataGrid, и представлять их в виде сводной таблицы. По сути, это простой инструмент для BI-анализа, не требующий установки дополнительных компонентов приложения.

Действие ShowPivotAction можно создать программно в контроллере экрана и присвоить его некоторой кнопке, к примеру:

ShowPivotAction showPivotAction = new ShowPivotAction(tipsGroupTable);
exportButton.setAction(showPivotAction);

ShowPivotAction предоставляет два способа экспорта данных: только выделенные строки и все строки. Если в таблице не выделена ни одна строка, диалоговое окно выбора не будет показано, и по умолчанию будут экспортированы все строки.

После нажатия кнопки в новой вкладке появится редактируемая таблица PivotTable. По умолчанию в этой таблице отображаются все атрибуты, включенные в контейнер данных компонента, кроме следующих:

  • атрибуты-коллекции;

  • байтовые массивы;

  • атрибуты с типом UUID;

  • аннотированные @SystemLevel.

Если вы хотите исключить некоторые атрибуты или, наоборот, включить выборочно только часть из них, используйте методы fluent API:

  • withIncludedProperties() для включения атрибутов, например:

    ShowPivotAction showPivotAction = new ShowPivotAction(tipsGroupTable)
            .withIncludedProperties(Arrays.asList("sex", "smoker", "day", "totalBill"));
  • withExcludedProperties() для исключения атрибутов, например:

    ShowPivotAction showPivotAction = new ShowPivotAction(tipsGroupTable)
            .withExcludedProperties(Arrays.asList("sex", "smoker"));

Эти методы принимают список имен атрибутов. Некорректные имена будут проигнорированы.

Вы можете изменить конфигурацию сводной таблицы по умолчанию, использовав метод withNativeJson(), который принимает конфигурацию в формате JSON-строки. Обратите внимание, что в нём используются локализованные имена атрибутов:

ShowPivotAction showPivotAction = new ShowPivotAction(tipsGroupTable)
        .withNativeJson("{" +
                " \"cols\": [\"Time\", \"Day\"]," +
                " \"rows\": [\"Sex\", \"Smoker\"]," +
                " \"editable\": false," +
                " \"renderer\": \"heatmap\"," +
                " \"aggregation\": {" +
                " \"id\": \"d8fc3fdf-730d-c94f-a0c8-72a9ce3dcb3a\"," +
                " \"mode\": \"count\"," +
                " \"properties\": [\"Sex\"]" +
                " }" +
                " }");

Ниже приведена структура JSON для нередактируемой сводной таблицы:

{
        "cols": ["localized property", "localized property"],
        "rows": ["localized property"],
        "editable": false,
        "renderer": "heatmap",
        "aggregation": {
                "id": "d8fc3fdf-730d-c94f-a0c8-72a9ce3dcb3a",
                "mode": "sumOverSum",
                "properties": ["localized property", "localized property"]
        }
}

А здесь – структура JSON для редактируемой сводной таблицы:

{
        "cols": ["localized property"],
        "rows": ["localized property"],
        "editable": true,
        "renderers": {
                "selectedRenderer": "barChart"
        },
        "autoSortUnusedProperties": true,
        "aggregationProperties": ["localized property", "localized property"],
        "aggregations": {
                "selectedAggregation": "count",
                "aggregations": [{
                        "id": "647780f0-c6d0-6ade-a63a-542b5c8cdbd5",
                        "mode": "count",
                        "caption": "Count"
                }, {
                        "id": "c2663238-2654-67f0-2dec-add6962d867c",
                        "mode": "sumOverSum"
                }]
        }
}

Отображенные в сводной таблице данные можно легко скачать в формате Excel-файла, если выбран поддерживаемый рендерер. Кнопка экспорта по умолчанию будет отображена на открывшейся вкладке.