基础认知和操作:

一、数据透视表的概念
数据透视表是用来从Excel数据列表、关系数据库文件等数据集的字段中总结信息的分析工具。所谓“透视”,可以理解为对原始数据具有透视功能,也就是可以从数据背后找到联系,从而将看似杂乱的数据转化为有价值的信息。

二、数据透视表的功能
数据透视表因具有强大的交互性,可以通过通过简单的布局改变,全方位、多角度、动态地统计和分析数据,从大量数据中快速提取有价值信息。它综合了数据排序、筛选、分类汇总等功能,还可以计算平均数或标准差、建立列联表、计算百分比、建立新的数据子集等。数据透视表同时还是解决函数公式速度瓶颈的手段之一。

三、数据透视表的数据来源
1、Excel数据列表
这里需要注意的是,如果以Excel数据列表作为数据源,则其标题行不能有空白单元格或和合并的单元格,否则会出现如下的错误提示:




sparksql 数据透视表功能 sql 数据透视表的功能_数据


sparksql 数据透视表功能 sql 数据透视表的功能_数据_02


2、外部数据源
这里可以是文本文件、Microsoft SQL Server数据库、Microsoft Access数据库、Dbase数据库等。
3、多个独立的Excel数据列表
数据透视表在创建过程中可以将多个独立的Excel数据列表中的信息汇总到一起。
4、其他的数据透视表
创建完成的数据透视表也可以作为数据源来创建另外一个数据透视表。

四、数据透视表的结构
这里我们先用以下这个表格来做一个数据透视表的建立:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_03


现在想统计各个区域不同年份的销售数量总和:
1、单击A1:E13单元格区域中的任意一个单元格或者选中A1:E13单元格区域。
2、插入数据透视表:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_04


按下图设置:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_05


单击“确定“得到下图;


sparksql 数据透视表功能 sql 数据透视表的功能_数据_06


3、根据需要拖动字段到指定的位置区域:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_07


效果如下:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_08


是不是非常三招两式就搞定了,而且全程不用公式,动动手指就好了。从结构上看,数据透视表结构分为4个区域部分:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_09


行区域:此标志区域中按钮将作为数据透视表的行字段。
列区域:此标志区域中按钮将作为数据透视表的列字段。
数值区域:此标志区域中按钮将作为数据透视表的显示汇总的数据。
报表筛选区域:此标志区域中按钮将作为数据透视表的分页符。

数据透视表字段列表

一 数据透视表字段列表功能

通过数据透视表字段列表对话框,我们可以很明了地看出数据透视表的结构,具体如下图:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_10


二、打开和关闭数据透视表字段列表对话框
方法1:在数据透视表中的任意单元格右键,在弹出的扩展菜单中选择“显示字段列表”,如下图:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_11


方法2:选中数据透视表数据区域的任意一个单元格,在【数据透视表工具】下的【分析】中单击【字段列表】按钮,即可调出数据透视表字段列表对话框:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_12


需要注意的是:数据透视表字段列表对话框一旦被调出后,只要单击数据透视表它就会显示。 三、在数据透视表字段列表对话框中显示更多的字段
如果我们的数据源很大,势必会有很多个字段,在这种情况下,数据透视表创建完成后很多字段在【选择要添加到报表的字段】列表框内则无法显示,此时只能靠拖动滚动条来选择要添加的字段,显然有些不方便。为了解决这个问题,可以单击【选择要添加到报表的字段】列表框右侧的下拉按钮选择【字段节和区域节并排】命令:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_13


即可展开【选择要添加到报表的字段】列表框内的所有字段,如下图所示:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_14


数据透视表布局

数据透视表布局的知识。布局其实就是不同字段的排放,在任何时候,我们都可以通过在【数据透视表字段列表】里拖动字段按钮就可以重新调整数据透视表布局了。
如下图:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_15


如果我们想调整“负责区域”和销售员的位置布局,可以在【数据透视表字段列表】里单击“销售区域”,然后在弹出的扩展菜单里选择【下移】即可:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_16


当然你也可以选择“销售员”,然后再执行【上移】,效果也是一样的~

数据透视表报表筛选区域的使用

我们知道,当字段显示在列区域或行区域上时,会显示字段中的所有项。当字段位于报表筛选区域中时,字段中的所有项都成为数据透视表的筛选条件。单击字段右侧的下拉箭头,在弹出的下拉列表中会显示该字段的所有项目,选中其中一项并单击【确定】按钮,则数据透视表将根据此项进行筛选。如下图:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_17


现在这个数据透视表报表筛选区域是【负责区域】字段,我们可以根据需要随意选择该字段下的项目,比如只想显示“华北”地区的数据,则只需要勾选“华北”即可,十分方便。
数据透视表报表筛选区域的另一个功能是可以显示报表筛选页。利用数据透视表的【显示报表筛选页】功能,可以创建一系列链接在一起的数据透视表,会根据不同的筛选项生成单独的工作表,每一张工作表显示报表筛选字段中的一项,具体操作效果看下面的演示动图:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_18


所以这里又给了我们一个灵感,也就是网上常说的批量生成指定名称的工作表,想想是不是这个道理。

数据透视表的布局显示

数据透视表为我们提供了三种常见的布局形式:以压缩形式显示、以大纲形式显示、以表格形式显示。需要注意的是我们新创建的数据透视表显示方式是系统默认的“以压缩形式显示”。我们新建一个数据透视表看看:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_19


(数据源)


sparksql 数据透视表功能 sql 数据透视表的功能_数据_20


切换数据透视表布局的功能如下:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_21


1、压缩形式


sparksql 数据透视表功能 sql 数据透视表的功能_数据_20


系统默认创建的就是这个压缩形式布局,该布局的特点是数据透视表所有行字段都堆积在一列中,可以很方便地展开和折叠整个字段,但缺点是当我们复制数据透视表后无法显示行字段标题,没有实际应用意义,如下图是复制后的数据透视表:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_23


2、大纲形式


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_24


这种格式介于压缩形式和表格形式之间,从层次上来看为压缩形式,而从列表现为表格形式。 3、表格形式


sparksql 数据透视表功能 sql 数据透视表的功能_数据_25


以表格形式显示的数据透视表更加直观、便于阅读,是我们的首选数据透视表显示方式。
补充:
我们可以看到在布局列表下面还有两个选项:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_26


即“重复所有项目标签”和“不重复项目标签”,当我们新建数据透视表时,系统默认的是“不重复项目标签”,如果我们选择“重复所有项目标签”的话,三种数据透视表布局效果如下:
1、压缩形式


sparksql 数据透视表功能 sql 数据透视表的功能_数据_27


我们可以看到,压缩形式下,“重复所有项目标签”和“不重复项目标签”的效果是一样的。
2、大纲形式


sparksql 数据透视表功能 sql 数据透视表的功能_数据_28


3、表格形式


sparksql 数据透视表功能 sql 数据透视表的功能_数据_29


数据透视表的刷新

很多时候我们的数据源是不定期发生变化的,这就要求在数据透视表中也要体现出来,此时不需要重新创建一个新的数据透视表,刷新一下即可。数据透视表刷新可以分为如下三种情况:
一、数据源为本工作簿
1、手动刷新数据透视表
方法是在数据透视表的任意一个单元格区域鼠标右键,在弹出的快捷菜单中单击【刷新】命令即可:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_30


此外,利用【数据透视表工具】选项卡的【分析】子选项卡中单击【刷新】按钮也可以实现同样的效果。
2、在打开文件时刷新
方法是在数据透视表的任意一个单元格区域鼠标右键,在弹出的快捷菜单中单击【数据透视表选项】命令:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_31


然后在【数据透视表选项】对话框中单击【数据】选项卡,勾选【打开文件时刷新数据】复选框即可:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_32


二、数据源为外部数据
1、后台刷新
方法是单击数据透视表任意单元格,然后在【数据】选项卡中单击【属性】按钮:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_33


弹出【连接属性】对话框,在【刷新控件】中勾选【允许后台刷新】的复选框,单击确定即可:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_34


2、定时刷新
在【连接属性】对话框中的【刷新控件】中勾选【刷新频率】复选框,设置固定的时间间隔,然后单击确定即可:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_35


3、打开文件时刷新
在【连接属性】对话框,在【刷新控件】中勾选【打开文件时刷新数据】的复选框,单击确定即可:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_36


三、全部刷新数据透视表
如果要刷新工作簿中的所有数据透视表,可以单击任意一个数据透视表中的任意单元格,然后在【数据透视表工具】选项卡的【分析】子选项卡中单击【刷新】按钮的下拉箭头,在弹出的下拉菜单中选择【全部刷新】命令即可:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_37


行列标签的顺序:

数据透视表的行标签以及列标签的排序,如下图,是一个简单的数据透视表示例:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_38


现在想把含标签的内容(陈七、李四、王五、张三、赵六)以及列标签的内容(1月、2月、3月)排序一下,该如何操作呢?这个问题其实很简单,这里以行标签排序做一个示例,首先用鼠标单击一下行标签,然后单击行标签后的下拉三角按钮,此时就会弹出一个包含排序功能的菜单:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_39


在上面这个菜单里,我们可以根据自己的实际情况来执行排序操作。列标签的排序方法原理相同。

数据透视表的按值排序

如下图,是一个简单的数据透视表示例:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_40


现在想要排列1月的数据,按升序排列,也就是上图中红色区域。
1、选择红色区域中的任意一个单元格,然后右键,选择排序下的其他排序选项:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_41


2、在弹出的安置排序对话框中按下图设置即可:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_42


我们可以仔细观察一下这个面板,它还可以完成从左到右的排序功能。因为某个单元格在横向和纵向都有所在的数据,所以必然存在和两种方向的排序

切片功能:

数据透视表切片器的插入方式:单击数据透视表任意单元格,在【数据透视表工具】选项卡下的【选项】子选项卡下单击【插入切片器】的下拉按钮,在弹出的下拉列表中选择【插入切片器】命令,在弹出的【插入切片器】对话框中勾选自己所需的内容即可。这个功能如果你能领会,其实是可以做出很多炒鸡炫酷的功能的。接下来我们看一个例子,用数据透视表配合它的切片器来做一个分段查询。如下图是一份简单的员工表:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_43


现在想要做一个如下的自动分段统计功能,也就是按照工龄1-2年,3-5年,5年以上分段:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_44


如果觉得效果不错的话,来看看如何完成的:
1、先计算下工龄以及工龄段:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_45


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_46


2、按如下设置插入数据透视表:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_47


然后在字段列表作如下设置:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_48


得到下图结果:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_49


3、设置数据透视表的格式:
3.1 以表格形式显示:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_50


3.2 不显示分类汇总:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_51


3.3 对行和列禁用:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_52


3.4 取消“+/-按钮”:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_53


3.5 调整下格式,得到:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_54


4、加一个切片器:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_55


sparksql 数据透视表功能 sql 数据透视表的功能_数据_56


得到:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_57


至此,我们就完成了这个自动按照工龄段区分的功能。

行列项目的文字项组合

虽然数据透视表提供了强大的分类汇总功能,但由于数据分析需求的多样性,使得数据透视表的常规分类方式不能应付所有的应用场景。因此,数据透视表还提供了另一项非常有用的功能,即项目组合。它通过对数字、日期、文本等不同数据类型的数据项采取多种组合方式,增强了数据透视表分类汇总的适应性。注意这里说的项目是指行标题或列标题的项目。

如下图,是一份销售表:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_58


现在想得到如下的汇总:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_59


1、首先建立一个普通的数据透视表:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_60


2、利用Ctrl键选中陈七和赵六两行,点击【分析】里的“分组选择”:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_61


得到:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_62


将报表布局改为“以表格形式显示”,得到:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_63


修改数据组1为“主管”,得到:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_64


3、同样的操作来执行“经理”和“员工”即可。

数据透视表的数字项目组合

如下图,是一份销售表:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_65


现在想得到如下的汇总:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_66


1、首先建立一个普通的数据透视表:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_67


2、单击销售月份字段下的任意一个单元格,点击【分析】里的“分组选择”:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_68


然后按下图设置:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_69


得到:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_70


注意:此报表布局为“以表格形式显示”。
3、右键数据透视表,选择“数据透视表选项”,勾选“合并且居中排列带标签的单元格”:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_71


得到结果:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_72


数据透视表的期或时间项组合知识

如下图,是一份销售表:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_73


现在想得到如下的汇总:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_74


1、首先建立一个普通的数据透视表:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_75


2、单击行标签的任意一个单元格,点击【分析】里的“分组选择”:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_76


然后按如下设置:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_77


最后将报表布局改为“以表格形式显示”,即可得到结果。这就是行标题的日期或时间项组合知识,是不是很方便呢~

数据透视表计算选项:

1、数据准备,下图是一个销售业绩表:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_78


2、创建一个如下的基本数据透视表:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_79


sparksql 数据透视表功能 sql 数据透视表的功能_数据_80


3、现在需要增加三个新的字段,分别为:业绩总和、有业绩的月份数、平均业绩。仔细分析一下可以知道需要只能使用目前现有的四个字段(分别是求和项:一月、求和项:二月、求和项:三月、求和项:四月)来计算得到,所以这必然是要通过添加计算字段来实现的。现在我们来添加业绩总和的计算字段:
(1)、在“数据透视表工具”选择“分析”下的“字段、项目和集”:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_81


(2)、继续选择“计算字段”:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_82


(3)、在弹出的“插入计算字段”按如下图的设置:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_83


(4)、点击“确定”按钮即可得到结果:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_84


(5)、按照同样的思路我们添加“有业绩的月份数”的计算字段:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_85


(6)、再添加一个“平均业绩”的计算字段:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_86


(7)、最后得到结果如下图:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_87


再会过头来看看现在的数据透视表的字段情况,如下图,我们发现刚才新增的三个计算字段现在也全部出现在字段列表中了:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_88


总结:始终记住计算字段是通过现有字段之间的运算得到的新字段!

计算项是现有字段中的一个新项,它是对字段中已有的其他项进行的计算而得到的新的项目,也就是这个新增的项目还属于这个字段下的。计算字段和计算项可以对数据透视表缓存中已经存在字段的任何数据应用算术运算,但不能引用在数据透视表之外的工作表数据。我们先来看看什么叫做字段下的项目,我做了一个如下图的示例说明,希望有助于理解:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_89


现在我们用一个例子来演示一下如何使用计算项:
1、准备数据,下图是一个销售业绩表:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_90


2、创建一个数据透视表以统计每个人的销售总额


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_91


sparksql 数据透视表功能 sql 数据透视表的功能_数据_92


3、现在假如“王进”和“杨阳”是属于财政部门的,其他人是属于策划部门的,现在想要在行标签下面添加这两个部门的业绩汇总。很显然这需要使用添加计算项功能,我来演示一下:
(1)、单击行标签下任意一个数据,然后在“数据透视表工具”选择“分析”下的“字段、项目和集”:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_81


(2)、继续选择“计算项”:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_94


(3)、在弹出的“插入计算字段”按如下图的设置:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_95


(4)、点击“确定”按钮即可得到结果:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_96


(5)、按照同样的思路我们添加“策划部门”的计算项:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_97


(6)、点击“确定”按钮即可得到结果:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_98


(7)、调整一下项目位置再美化一下:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_99


总结:计算项是通过某个字段下面的项目之间的运算的到的新项目,得到的新项目也在原来的字段下。

当我们在Excel中创建了一个数据透视表后,如果数据源增加了新的行或列,即使刷新数据透视表,新增的数据仍无法出现在数据透视表中,这是因为按照常规方式获取数据源的区域已经被我们定死了。为了避免这种情况的发生,我们需要创建动态的数据透视表,以此获得更改后的数据。最常用的方法就是用定义名称法来创建动态的数据引用。我们来看一个例子:
1、准备数据,下图是一个销售业绩表:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_100


2、在这个“销售表”的名称管理器中定义一个如下名称:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_101


3、在【创建数据透视表】对话框中【表/区域】编辑框中输入已定义好的动态名称DATA,单击【确定】即可:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_102


4、创建一如下数据透视表:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_103


5、此时我们可以在数据源下面新增加一行试试:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_104


然后刷新一下数据透视表,可得到:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_105


PS:创建动态的除了定义名称法,其实还可以通过创建列表法(思路其实和定义名称法相似),当然你若精通VBA的话,也可以用Excel VBA方法去完成。

有时候根据需要,我们会在同一个工作表中依据相同的数据源创建多个不同分析角度的数据透视表。这些数据透视表可能会有相同的筛选字段。如果每个数据透视表都单独进行某个字段的筛选,会显得比较繁琐,那么这个时候我们使用同一个切片器工具让它们共用就十分方便了。我们看一个小例子,下图是一个数据源:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_106


现在建立两个数据透视表,朋友们可以依据自己实际的数据源建立更多的数据透视表。如下图:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_107


点击第一个数据透视表,插入一个负责区域的切片器:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_108


然后用负责区域的切片器将以上两个数据透视表连接起来:


sparksql 数据透视表功能 sql 数据透视表的功能_sparksql 数据透视表功能_109


最后的效果如下:


sparksql 数据透视表功能 sql 数据透视表的功能_数据_110


试想,如果你的有多个两个数据透视表的话,这样筛选的效果是不是就更实用了。