在数据透视表中对数据透视字段分组

可能的使用场景

  • 当数据透视表的行或列字段包含许多不同的项时,对数据透视字段分组非常有用,例如包含数百个日期的日期字段或包含许多离散值的数值字段。分组会将这些项折叠为有意义的区段:日期折叠为月份、季度和年份,数字折叠为 0-1、2-3、4-5 等范围。这使得大型数据透视表更加紧凑、更易于分析。Aspose.Cells 通过 PivotField.group() 方法(按数据类型自动分组)和 PivotField.group(PivotFieldGroupOptions)(自定义分组选项)提供此功能。
  • 日期分组将各个日期聚合为更大的周期,例如天、月、季度和年,并构建一个时间层次结构(例如年份、季度、月份)。时间趋势一目了然,每个周期级别都会成为数据透视表行区域或列区域中的独立数据透视字段。
  • 分组仅适用于放置在数据透视表 ROW 或 COLUMN 区域中的字段。数据(值)字段无法直接分组。若要对此类字段进行分组,必须先将其添加到数据透视表的行或列区域中。

自动对数据透视字段分组

无参数的 PivotField.group() 重载会检查字段的数据类型并自动对其分组。仅包含日期(和空白)的字段按月份分组。仅包含数字(和空白)的字段使用自动间隔分组为数值区域。

import com.aspose.cells.*;
Workbook wb = new Workbook("sampleGroupPivotFieldsInPivotTable.xlsx");
PivotTable pt = wb.getWorksheets().get(1).getPivotTables().get(0);
PivotField field = pt.getRowFields().get(0);
field.group();
pt.calculateData();
wb.save("outputAutoGroupPivotField.xlsx");

使用自定义选项对数据透视字段分组

PivotFieldGroupOptions 类提供自定义分组配置。对于日期字段,请设置 startDate、endDate 和 groupTypes。对于数值字段,请设置 startNumber、endNumber 和 interval。newPivotField 属性控制分组是否在原始字段旁边创建新的数据透视字段(请参阅本文末尾的"说明"部分)。

按月份和季度对日期字段分组

下面的示例将示例数据透视表的日期行字段按起始和结束日期之间的月份和季度分组。代码加载示例 Excel 文件,执行分组,计算数据透视表数据,并保存分组后的结果。截图显示了效果:日期行字段现已按季度和月份分组。 请注意,options.groupTypes 中值的顺序会被忽略。无论组类型的列出顺序如何,分组字段始终按从最大周期到最小周期的顺序显示:年、季度、月、天、小时、分钟、秒。在本示例中,options.groupTypes 中月份的列出顺序在季度之前,但季度显示为外部级别,月份显示为内部级别。

import com.aspose.cells.*;
Workbook wb = new Workbook("sampleGroupPivotFieldsInPivotTable.xlsx");
PivotTable pt = wb.getWorksheets().get(1).getPivotTables().get(0);
PivotFieldGroupOptions options = new PivotFieldGroupOptions();
options.setStartDate(new com.aspose.cells.DateTime(2008, 1, 1));
options.setEndDate(new com.aspose.cells.DateTime(2008, 9, 5));
options.setGroupTypes(new int[] { PivotGroupByType.MONTHS, PivotGroupByType.QUARTERS });
pt.getRowFields().get(0).group(options);
pt.calculateData();
wb.save("outputGroupPivotFieldsInPivotTable.xlsx");

按月份和季度分组的数据透视表

将数值字段分组为范围

示例数据透视表的 FieldTwo 最初是一个数据(值)字段。由于只能对行或列字段进行分组,因此代码首先调用 PivotTable.addFieldToArea(PivotFieldType.ROW, "FieldTwo") 将 FieldTwo 移动到行区域,刷新数据透视表,然后使用 startNumber = 0、endNumber = 5 和 interval = 2 将数值字段分组为 0-1、2-3 和 4-5 的范围。

import com.aspose.cells.*;
// 加载示例工作簿
Workbook wb = new Workbook("sampleGroupPivotFieldsInPivotTable.xlsx");
// 访问第二个工作表及其数据透视表
PivotTable pt = wb.getWorksheets().get(1).getPivotTables().get(0);
// FieldTwo 是一个数据字段:首先将其移动到行区域,
// 因为只有行/列字段可以分组
pt.addFieldToArea(PivotFieldType.ROW, "FieldTwo");
pt.calculateData();
// 将数值字段分组为 0-1、2-3、4-5 范围
PivotFieldGroupOptions options = new PivotFieldGroupOptions();
options.setStartNumber(0);
options.setEndNumber(5);
options.setInterval(2);
pt.getRowFields().get(1).group(options);
// 计算数据透视表数据并保存输出文件
pt.calculateData();
wb.save("outputNumberGroupPivotField.xlsx");

说明

相关文章