使用数据透视表

本主题讨论 Open XML SDK PivotTableDefinition 类及其与 Open XML 文件格式 SpreadsheetML 架构的关系。 有关构成 SpreadsheetML 文档的部件和元素的整体结构的详细信息,请参阅 SpreadsheetML 文档的结构

SpreadsheetML 中的数据透视表

ISO/IEC 29500 规范中的以下信息介绍了 PivotTableDefinition (<pivotTableDefinition>) 元素。

数据透视表能够以易于理解的布局轻松显示数据的聚合视图。 成百上千条基础信息可以聚合在行和列轴上,以揭示数据背后的含义。 数据透视表报表用于以不同方式组织和汇总数据。 创建数据透视表报表是指四处移动信息以查看它们的内在关系。 通过几次移动,即可将数据透视行和列转变为其他排列方式和布局。

数据透视表对象具有行轴区域、列轴区域、值区域和报表筛选区域。 此外,数据透视表还具有相应的字段列表窗格,该窗格显示可以置于某个数据透视表区域中的所有数据字段。

工作簿指向并始终拥有 pivotCacheDefinition 部件,后者指向并拥有 pivotCacheRecords 部件。 工作簿还指向并拥有工作表部件,并且当工作表上具有数据透视表(一个工作表上可以有多个数据透视表)时,工作表部件会指向并拥有 pivotTable 部件定义。 pivotTable 部件指向它使用的相应 pivotCacheDefinition。 因为多个数据透视表可以使用同一缓存,所以 pivotTable 部件并不始终拥有 pivotCacheDefinition。

pivotTable 部件描述工作表上数据透视表的布局的详细信息。 它指明哪些字段位于数据透视表的行轴、列轴、报表筛选和值区域。 它还指明有关数据透视表的格式信息。 如果对数据透视表应用了条件格式,则该信息也在 pivotTable 部件中表示。

数据透视缓存定义包含数据透视表中所有字段的定义。 如果以普通表为基础创建数据透视表,则表中的每列都会成为数据透视缓存定义中的一个字段。 数据透视缓存包含字段定义,以及有关该字段中包含的内容类型的信息。 它还维护对缓存标记中源数据的引用,以便数据透视缓存可以随数据透视缓存记录部件中缓存的数据一起刷新。

显示在数据透视表中的数据存储在两个位置。 数据透视缓存记录部件维护数据透视表的实际数据。 工作表中的表单元格也存储数据的缓存版本,但是仅用于显示目的。 数据透视缓存记录部件通过两种方式之一存储数据。 数据透视表的数据区域的唯一值以内嵌方式缓存。 通常存在于行和列中的重复项目以引用方式缓存。 此共享数据实际上存储在数据透视缓存定义中。 数据透视缓存记录部件中的每个记录都由 N 个值组成,其中 N 等于在数据透视缓存定义中定义的字段数。

最后一步是创建数据透视表本身。 数据透视表定义部件包含有关数据透视表的哪个位置存在哪个字段的信息。 您可以将字段放置在四个区域:行、列、数据或筛选区域。 字段从数据透视缓存定义中缓存的字段中选择。

若要创建在打开工作簿时已可供使用的数据透视表,还需要为表单元格创建标记。 数据透视表显示在工作表的单元格中,因此您还需要构造单元格。 您还可以让用户在打开文档时更新数据透视表单元格。

下表列出了使用 PivotTableDefinition 类时使用的常见 Open XML SDK 类。

SpreadsheetML 元素 Open XML SDK 类
pivotField PivotField
pivotCacheDefinition PivotCacheDefinition
pivotCacheRecords PivotCacheRecords

Open XML SDK PivotTableDefinition 类

Open XML SDKPivotTableDefinition 类表示在 SpreadsheetML 文档的 < Open XML 文件格式架构中定义的 pivotTableDefinition (pivotTableDefinition>) 元素。 使用 PivotTableDefinition 类可操作 SpreadsheetML 文档中的各个 <pivotTableDefinition> 元素。

数据透视表定义的主要功能是存储有关哪个字段按什么顺序显示在数据透视表的哪个轴上的信息。 可以向数据透视表定义中添加许多其他设置,但下面只介绍一些基本设置。

根元素用于命名数据透视表,以便它可以用作数据源。 根元素还使用添加到工作簿部件的 ID 来引用数据透视缓存,并且定义显示在数据透视表的数据区域上方的标题标签。 所有这些元素都是必需的。

pivotTableDefinition 的三个主要部分为:表的位置,缓存字段的显示信息和缓存字段的位置信息。 有关构成 pivotTableDefinition 的这些信息和其他附加元素的详细信息,请参阅 ISO/IEC 29500 规范。

PivotField 类

PivotTableDefinition 元素包含 pivotField (<pivotField>) 元素。 ISO/IEC 29500 规范中的以下信息介绍了 PivotField (<pivotField>) 元素。

表示数据透视表中的单个字段。 此元素包含有关字段的信息,其中包括字段中的项目集合。

首先,使用 pivotFields 元素定义显示在数据透视表上的字段集合。 每个字段都充当该字段在数据源中的数据的缓存。 无需定义缓存。 实际上,您可以将 item 元素设置为 default,并让用户在打开文档时更新表。 showAll 属性用于隐藏该数据维度的某些元素。 定义表中包含哪些字段后,字段将应用于数据透视表的四个区域。

PivotCacheDefinition 类

ISO/IEC 29500 规范中的以下信息介绍了 PivotCacheDefinition (<pivotCacheDefinition>) 元素。

pivotCacheDefinition 部件定义 pivotCacheRecords 部件中的每个字段,包括字段名称以及有关字段中包含的数据的信息。 pivotCacheDefinition 部件还定义在 pivotTable 和 pivotRecords 部件之间共享的数据透视项目。

数据透视缓存定义数据透视表中数据的来源,以允许更新缓存,并定义该数据中的字段列表。 请注意,缓存可定义适用于数据透视表的所有字段,而不仅仅是实际使用的字段。 数据透视表定义会定义特定数据透视表使用哪些可用字段。

数据源定义引用数据透视表中显示的数据。 数据透视表还维护缓存记录部件中的数据,以便在数据连接不可用时表仍可更新。 不能依赖数据透视表的单元格来存储数据,因为这些单元格中的数据从本质上讲是临时数据,在您透视相应的表时,这些数据会更改。 有多种类型的数据源,例如工作表、数据库、OLAP 多维数据集和其他数据透视表。

缓存定义的最后一部分使用 cacheField 元素来定义数据源的字段。 cacheField 元素有两个用途:定义字段的数据类型和格式,以及用作共享字符串的缓存。 数据透视值存储在数据透视缓存记录部件中。 当将某个重复字符串用作值时,缓存记录使用对共享项目的 cacheField 集合的引用。

PivotCacheRecords 类

ISO/IEC 29500 规范中的以下信息介绍了 PivotCacheRecords (<pivotCacheRecords>) 元素。

pivotCacheRecords 部件包含要聚合的基础数据。 它是源数据的缓存。

缓存记录部件可以存储任意数目的缓存记录。 每个记录定义的值的数目都与缓存定义中的字段数相同。 每个记录都使用 r 元素定义。 此记录包含以子元素形式存在的值项目。 您可以提供特定类型的值(如 Numeric、Boolean 或 Date-Time),也可以引用共享项目。