透视表

时间:2023-12-19 09:18  

枢轴表(英语:pivot table)也翻译成透视表,是用来汇总其它表的数据。首先把源表分组(grouping),然后对各组内数据做汇总操作如排序、平均、累加、计数或字符串连接等。透视表用于数据处理,在数据可视化程序如电子表格或商业智能软件中常见。这种“枢轴”或者pivoting汇总表的概念得以命名。

举例:

  • 一个平凡的例子:第一张表包含一列数,透视表仅含一行一列为源表该列的均值。
  • 稍微复杂点的例子,源表有两列分别为性别与“身高”,每行给出一个人的性别与高度;透视表有两行两列,在“性别”列分别写“男性”与“女性”,在“身高”列分别写对应性别的平均身高。
  • 更为复杂与更为典型的例子,源表有列“月份”、“销售员”、“产品”、“销售额”,每行给出一个销售员在某个月度卖出的某种产品的金额;透视表第一列是“销售员”用于写其名字,其余列还有“产品名”与“总销售”用于汇总该产品在该销售人卖出的销售总额。

透视表与列联表 (也称作“交叉列表”cross tabulation或“交叉表”crosstab)相关。但透视表被认为更为动态,可以在其上执行某些动作;而列联表是静态显示数据。

微软在美国注册了复合词形式的PivotTable为商标。

历史

《Pivot Table Data Crunching》指出Pito Salas是“透视表之父”,在开发Lotus Improv时,Salas称电子表格有数据模式,帮助用户识别出数据模式的工具有助于快速建立高级数据模型。Lotus Improv允许用户定义范畴(categories)存储集合,用鼠标拖拉范畴名字可以改变视图(view)。这种核心功能提供了透视表模型。Lotus Development1991年在NeXT平台上发布了Lotus Improv。几个月后,Brio Technology发布了在Macintosh的实现,称作DataPivot。1999年申请了专利。 1992年Borland收购了DataPivot技术,用在了其电子表格软件Quattro Pro

1993年Microsoft Windows版本的Improv发布。

1994年初Microsoft Excel 5带来了新功能"PivotTable"。微软在其后版本的Excel中继续改进这个功能:

  • Excel 97包括了新的改进版的PivotTable向导(Wizard),能够创建计算字段,允许开发者写Visual Basic for Applications小程序以创建或修改透视表;
  • Excel 2000引入了"透视图"以便可视化透视表

2007年,Oracle公司在Oracle数据库11g版本中推出了PIVOTUNPIVOT运算。

机制

典型的数据存储为扁平的(flat)表,即只包含行和列。 例如下述电子表格为销货明细:

当表中包含很多列,就难以总结出表中的信息。透视表可以快速总结数据并高亮期望的信息。“我正在看什么?”例如,对上例,问“多少件货在各个地区各个发货日期被销售?”

透视表通常包含行、列与数据(fact)。在这个例子中,列是“发货日期”,行是“地区”,数据是销售数量的汇总。

实现

从SQL编程实现角度,透视表是做一个grouping by操作,对组内数据做汇总计算。

下例在Excel中创建透视表的过程如下:

Date of sale Sales person Item sold Color of item Units sold Per unit price Total price
10/01/13 Jones Notebook Black 8 25000 200000
10/02/13 Prince Laptop Red 4 35000 140000
10/03/13 George Mouse Red 6 850 5100
10/04/13 Larry Notebook White 10 27000 270000
10/05/13 Jones Mouse Black 4 700 3200

各个列可用于透视表设计的布局的四个地方:

  1. 报表筛选 Report filter
  2. 列标签 Column labels
  3. 行标签 Row labels
  4. 数值 Summation values

报表筛选 Report filter

报表筛选用于过滤源表的行。例如,鼠标拖拉"Color of Item"到这个区域,则有一个下拉列表选项(Black, Red, White),可以选择某个值作为源表中行的过滤标准,例如"Color of Item = Black"。

列标签 Column labels

列标签用于一个或多个源表中列,其值将作为透视表中的列名。例如,鼠标拖拉"Sales person"到这个区域中,那么透视表中将有5个列,每个销售人占一列,还有一列为Grand Total。也可以施加筛选器,选中或者反选特定的销售人。

行标签 Row labels

行标签类似于列标签,用于一个或多个源表中列,其值将作为透视表中的行名。例如,鼠标拖拉"Sales person"到这个区域中,那么透视表中将有5个行,每个销售人占一行,还有一行为Grand Total。也可以施加筛选器,选中或者反选特定的销售人。

数值 Summation values

通常选择一个数值型的列。可施加不同的累积计算。对文本型的列,可以做计数(count)或者连接操作。上例中,如果列标签选择了"Sales person", 数值选择了"units sold",那么透视表将增加一个新列"Sum of units sold",是对每位销售人的销售额汇总。

Row labels Sum of units sold
Jones 12
Prince 4
George 6
Larry 10
Grand total 32

应用程序支持

数据透视表或数据透视功能是许多电子表格应用程序和一些数据库软件的组成部分,也可以在其他数据可视化工具和商业智能包中找到。

电子表格

  • Microsoft Excel、Apache OpenOffice Calc、LibreOffice
  • Google Docs

数据库

  • PostgreSQL使用tablefunc模块
  • MariaDB使用CONNECT存储引擎
  • Microsoft Access 使用TRANSFORM aggfunction selectstatement PIVOT pivotfield [IN (value1[, value2[, …]])],aggfunction是对被选中数据的累积计算,selectstatement是select语句,pivotfield是将在透视表中展开为列表的域, value1, value2是创建列名的固定值。
  • Oracle database支持PIVOT操作
  • Microsoft SQL Server从2005版本开始支持。透视的语法格式为:select <非旋转列>,[第一个旋转列] AS <列名>,...,[最后一个旋转列] AS <列名> FROM (<SELECT生成的数据查询>) AS <为源查询结果指定的别名>PIVOT({聚合函数运算}FOR[<被转换为列标题值的列>] IN ([第一个旋转后的列],...,[最后一个旋转后的列])AS <为透视表指定的别名><可选的Order子句>。反透视的语法格式为:select <非旋转列>,[第一个旋转列] AS <列名>,...,[最后一个旋转列] AS <列名> FROM (透视表) AS <透视表的别名>UNPIVOT( <值的列名> FOR <列标题的列名> IN (列标题1,...,列标题N) )AS <为反透视表指定的别名>
  • MySQL不支持支持透视与反透视

Web应用

  • ZK框架,允许嵌入透视表

编程语言与库

  • Python数据分析工具库pandas的函数pivot_table, 以及用于获取透视表部分的xs方法.

参见

  • 列联表
  • 萃取、转置、加载
  • 折叠 (高阶函数)
  • 关系代数_(数据库)

 

本文版权遵从外房网免责声明,更多问题请发送邮件至:
sam@glofang.com

为您推荐:

12小时在线QQ客服
周一至周日 9:00-21:00

广告联系

邮箱:glofang@glofang.com