3.3. 使用 ShowPivotAction

ShowPivotAction 是一个特殊的操作,可以通过这个操作从继承了 ListComponent 的组件中导出数据,比如 TableTree 以及 DataGrid,甚至透视表。此操作不需要其它任何额外的应用程序组件就可以提供简单的 BI 分析方法。

这个操作需要在界面控制器中以编程的方式创建并使用,比如,在按钮中:

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

ShowPivotAction 有两种导出模式:所有行和选中行。如果没有选中行,默认会不进行确认导出所有行。

可编辑的 PivotTable 组件会显示在新标签页中。默认情况下,包含在组件数据容器视图的所有属性都会被展示,除了下面这些:

  • 集合(Collection)类型的属性;

  • 字节(byte)数组类型的属性;

  • UUID 属性;

  • 带有 @SystemLevel 注解的属性。

如果需要排除某些属性或者只包含部分属性,可以通过下面的流式 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(如果支持当前渲染器)。默认情况下,在打开的标签页中将显示相应的导出按钮。