PowerPivot,俗称超级数据透视表,是微软公司研发的嵌入 Excel中的商务智能(Business Intelligence,BI)组件。微软为了在电子表格软件市场上保持竞争优势,将商务智能理念应用到了Excel中。


PowerPivot是 Excel中非常强大的商务智能组件,它采用全新的 PowerPivot数据模型理念和一套被称为 DAX(Data Analysis Expressions,数据分析表达式)的函数与公式体系。


传统 Excel数据透视表,是指在 PowerPivot出现之前,我们经常使用的 Excel数据透视表( Pivot Table)。无论是传统 Excel数据透视表 PivotTable,还是超级数据透视表 PowerPivot,它们都能够批量、快速地对大量数据进行多维度汇总计算,从而使我们能够从各个视角对数据进行观察和分析。这里的“从各个视角”,就是数据透视表中“透视”二字的来历。下面讲解传统 Excel数据透视表在数据分析方面的能力和局限。


传统 Excel数据透视表的能力


下图是传统 Excel 数据透视表的典型外观,该数据透视表的数据源为一个假想的小型书店的销售数据。该数据透视表将该书店销售的图书按照图书子类和图书封面颜色进行分组,得到了各个组合中图书销售的总册数。在下图中,我们将图书子类(11 机械、12 电子、13 网络等)和图书封面颜色(橙、赤、黄等)分别称为数据透视表的“行标题”和“列标题”。


PowerPivot超级数据透视表与传统Excel数据透视表的能力比拼_java

在数据透视表中,根据数据分析的需求,当将光标置于数据透视表中的任意单元格时,可以从 Excel 工作表界面右侧的“数据透视表字段”视图中拖曳数据源中任意字段到数据透视表相应区域,从而动态、快速地改变数据透视表的布局结构,并且立即得到变化后的数据分析结果。


我们从 Excel 工作表界面右侧的“数据透视表字段”视图中可以看到,在数据透视表中,我们可以放置数据源字段的区域有以下几个 :1. 筛选区(筛选)、2. 行标题区域(行)、3. 列标题区域(列)、4. 值区域(值)。“数据透视表字段”视图中的这些区域分别对应着数据透视表的不同部分。


这里需要说明的是,在数据透视表中,“行标题”和“列标题”也可以称作“行标签”和“列标签”。在本书中,我们使用“行标题”和“列标题”,作者感觉这样的称呼更贴切。


传统 Excel 数据透视表除了具有上述常见区域,还可以添加看起来“高大上”的切片器控件和日程表控件。下图是添加了切片器控件和日程表控件的数据透视表。为了更加直观地了解数据透视表的整体布局,我们给数据透视表的每个区域都标记了相应的名称。在下图中,我们对数据透视表布局做了一些更改,将数据透视表列标题改成了图书的原始单价。


PowerPivot超级数据透视表与传统Excel数据透视表的能力比拼_java_02

接下来,我们重点关注一下数据透视表值区域,如下图所示。数据透视表值区域的本质是数据透视表汇总结果的呈现区。在数据透视表值区域中,不但能够快速地对数字字段进行默认求和操作,还可以通过改变数据透视表“值字段设置”对话框中的“值汇总方式”,对数据源中指定的字段进行计数、计算平均值、计算最大值、计算最小值、计算方差等批量汇总操作。


在传统 Excel数据透视表中,除了前面提到的各种常见的汇总方式,还可以通过设置数据透视表“值字段设置”对话框中的“值显示方式”,从而在值区域中得到针对某特定字段的差异、差异百分比等较为复杂的汇总结果,甚至可以在传统 Excel数据透视表中增加更加灵活的计算字段或计算项等自定义计算内容。


在一般情况下,如果拖曳至数据透视表值区域中的字段是数字类型数据,那么数据透视表默认的汇总方式是求和 ;如果拖曳至数据透视表值区域中的字段是文本类型,那么数据透视表的汇总方式变成了计算“在满足当前数据透视表布局限制下的”数据源中数据行数的统计(也就是所谓的“计数”)。


综上可知,在传统的 Excel 数据透视表中,我们不但可以快速地变换数据透视表的布局,还可以快速地改变数据透视表值区域中指定字段的数据汇总方式。这样看来,传统 Excel 数据透视表的功能似乎已经足够强大,那为什么还要搞出一个 PowerPivot,即超级数据透视表呢?请继续往下看。


传统 Excel 数据透视表的局限


尽管传统 Excel 数据透视表提供了各种灵活的数据汇总方式,但这些数据汇总方式大多是在 Excel 数据透视表中预置好的,我们只能在已有的数据汇总方式中选择,却不能对这些已有的数据汇总方式进行自定义修改和补充,这就是传统 Excel 数据透视表的最大局限。


我们知道,Excel 数据透视表是用于汇总数据的,而用户对数据的汇总方式往往是千变万化、难以预测的,如果 Excel 数据透视表不能满足我们这个需求,则永远是它的一个硬伤。


接下来,我们将列举几个场景来介绍传统 Excel 数据透视表在功能上的不足,以及为什么 PowerPivot,即超级数据透视表终将“革”了传统 Excel 数据透视表的“命”。


PowerPivot在数据分析方面的优势


尽管传统的 Excel 数据透视表已经很强大了,但在学习了 PowerPivot 之后,你就会深深地体会到,PowerPivot 中的 Power 确实是所言不虚。下面我们通过几个数据分析场景来看看 PowerPivot 的特殊能力。


多表关联能力

分析对象的原始数据通常称为数据源。传统 Excel 数据透视表只能对单一的表进行数据分析,它的数据源只能是一个独立的大表。尽管后来传统 Excel 数据透视表也提供了初步的多表关联功能,但这个功能非常原始,远远满足不了我们日益复杂的数据分析需求。


在一般情况下,作为传统 Excel 数据透视表分析对象的大表(数据源)可能由公司 IT 部门提供,可能是我们直接链接公司数据库中的表,也可能是本部门业务数据的积累。我们通常将这些不由自己控制的数据称为外部数据。


此外,这个“大表”往往缺少一些满足特定数据分析需求的、至关重要的信息。例如,本部门自定义的数据分组规则,一些绩效指标等级划分,等等。我们通常将这些由本部门自行维护的数据称为本地数据。


在数据分析实践中往往需要将这些本地数据与外部数据进行关联,得出各种分组划分标准下的数据分析结果。对于这种情况,不完美的解决方案是,利用 Excel 中的 VLOOKUP() 函数提取本地数据并将其合并到已经导入 Excel 中的外部数据表(简称表)中,然后进行数据透视操作。这种方法虽然可以暂时解决问题,但每次更新原始数据,我们都要检查一次 VLOOKUP() 函数是否正确地计算了全部数据,明显降低了数据分析工作的效率,并且有潜在的数据分析质量风险。


我们可以利用 PowerPivot 的多表关联能力(也称为 PowerPivot 的数据建模能力),将来自不同数据源的多个表按照表间的逻辑关系关联到一起,从数据源头建立起表间的关联关系,使数据提取和分析的过程浑然一体。


就这样,一旦建立数据分析逻辑,我们就可以用一键刷新的方式快速得到最新的数据分析结果,从而实现数据分析的流程化、自动化。在 PowerPivot 数据模型管理界面中将多个表按照表间的逻辑关系关联起来,如下图所示。

PowerPivot超级数据透视表与传统Excel数据透视表的能力比拼_java_03

下图是基于上图所示的 PowerPivot 数据模型建立的 PowerPivot 超级数据透视表,它能够建立数据模型,并且基于数据模型进行分析,是 PowerPivot 超级数据透视表和传统 Excel 数据透视表的本质区别。因此,我们将基于 PowerPivot 数据模型建立的数据透视表统称为 PowerPivot。PowerPivot 的特点是数据在 PowerPivot 数据模型中存储和管理,数据分析结果在 PowerPivot 超级数据透视表中呈现。

PowerPivot超级数据透视表与传统Excel数据透视表的能力比拼_java_04

单从外观上来看,PowerPivot 超级数据透视表和传统 Excel 数据透视表似乎并没有什么不同,但如果仔细观察,会看到在上图右侧的“数据透视表字段”视图中有五个表,每个表都包含各自的字段名称,这明显与我们常见的传统 Excel 数据透视表不同。


在 PowerPivot 数据模型管理界面中,我们根据表内容间的逻辑关系建立了表与表之间的关联,即建立了数据模型。在已经建立了数据模型的前提下,对于一些数据分析操作,我们就可以将本来比较复杂的多表关联分析转换为直接将不同字段拖曳至数据透视表的相应区域的简单拖曳操作。


从数据建模的角度来看,PowerPivot 实际上是一个可以对多表数据模型进行分析的工具(当然也可以只有一个表)。作为用户,我们可以将 PowerPivot 超级数据透视表看成一个对 PowerPivot 数据模型进行高级查询的工具。因此,我们对 PowerPivot 的学习,至少包含数据建模和数据分析两方面内容。

事实上,区别于传统 Excel 数据透视表,PowerPivot 不仅能够对多个表进行数据建模操作,而且提供了一套让数据提取和分析更加灵活的 DAX 工具。在本书的前面章节中主要介绍 PowerPivot 单表数据模型和一些基本的 DAX 函数 ;在本书的后面章节中会详细讲解 PowerPivot 数据建模知识和相关数据分析方法。


功能更加丰富

在 PowerPivot出现之前,传统 Excel数据透视表可谓是独领风骚。传统 Excel数据透视表除了能够对拖曳至值区域中的字段进行基本的批量求和计算,还能够使用数据透视表的一些预置选项实现其他常用类型的汇总计算,如求平均值、求方差、计数等。


然而,这些在传统 Excel数据透视表中已经预置好的、不可改变的数据透视表汇总计算大大限制了传统 Excel数据透视表的能力。要满足超出传统 Excel数据透视表预置汇总计算能力的、复杂的数据分析需求,我们不得不使用传统 Excel数据透视表之外的方法。例如,如果需要对数据源中某个字段进行不重复计数,或者对数据源中某文本字段按组别合并到数据透视表值区域中对应的单个单元格,则几乎无法使用传统 Excel数据透视表的内置能力实现。但是 PowerPivot超级数据透视表为我们提供了一套全新的 DAX函数,利用它解决传统 Excel数据透视表的上述难题变得轻而易举。


在 PowerPivot的世界中,我们几乎可以应对所有传统 Excel数据透视表无法解决的难题,唯一限制我们的是对 PowerPivot数据模型理解的深度和对 DAX表达式应用的熟练程度,而这些完全可以通过持续的学习和实践来提升。


使 DAX表达式实现在 PowerPivot超级数据透视表值区域中的单元格中显示每个图书子类下所销售图书书名的不重复列表,如下图所示。这种分析结果在传统 Excel数据透视表中是无法得到的,而在 PowerPivot中,使用一个简单的 DAX函数即可得到。


PowerPivot超级数据透视表与传统Excel数据透视表的能力比拼_java_05


更快的运算速度


传统 Excel 数据透视表存在一个严重的问题,就是运算的执行速度。经常使用传统 Excel 数据透视表的读者可能都知道,如果分析的数据量较大,那么哪怕只是简单地更改数据透视表的布局,也会等待相当长的时间。


其实 Excel 软件的开发者也知道这个问题的存在,并且提供了一个并不优雅的解决方案。他们在传统 Excel 数据透视表的“数据透视表字段”视图下方设计了一个“延迟布局更新”的复选框,在勾选这个复选框后,当我们在“数据透视表字段视图中拖曳字段时,数据透视表不会在每次布局改变后立即实时显示新的分析结果,而是在确定数据透视表的最终布局后,通过单击旁边的“更新”按钮对数据透视表进行一次性的全面计算和更新。


PowerPivot超级数据透视表与传统Excel数据透视表的能力比拼_java_06

在 PowerPivot 中,虽然“推迟布局更新”复选框和“更新”按钮仍然存在,但由于 PowerPivot 采用了一种全新的内部数据组织方式,因此针对海量的数据处理、分析和展示速度明显加快,从源头上解决了数据处理的速度问题,明显地减少了数据分析过程中的等待时间。


PowerPivot,数据分析更智能


PowerPivot 全面超越传统 Excel 数据透视表,主要体现在 PowerPivot 的数据建模能力,以及 PowerPivot 提供的 DAX。


在传统 Excel数据透视表中,大部分数据汇总方法都限制在数据透视表的界面操作,我们只能使用几种已经预置好、不可自行改变的数据汇总方法,很难实现稍微复杂的自定义数据分析操作。现在有了 PowerPivot和 DAX,这一切都会改变!


PowerPivot提供了九大类约两百个 DAX函数,虽然 DAX函数数量众多,但是这些 DAX函数与 Excel函数中的几百个工作表函数一样,每个特定用户经常使用的函数只有一二十个,而且在这一二十个函数中,除了几个特别的函数外(如 CALCULATE()函数),其他大多数函数与 Excel工作表函数用法类似,甚至连函数名都一样。


《Excel革命!超级数据透视表Power Pivot与数据分析表达式DAX快速入门》重点研究 PowerPivot特有的、对理解 PowerPivot数据模型至关重要的 DAX函数。对于其他大多数函数,只要你有 Excel工作表函数的使用经验,那么只要一看名称,就知道如何使用它们了。


PowerPivot虽然名称中包含 Pivot,并且外观布局与传统 Excel数据透视表(PivotTable)基本相似,但我们必须了解,PowerPivot本质上是一个数据库, DAX本质上是一种数据库查询语言。与传统数据库查询语言不同的是,DAX更强调数据分析。


在 PowerPivot中,我们可以在 PowerPivot数据模型管理界面中,依据各个数据表间的实际业务逻辑建立表间的关联关系,即数据建模。在创建好 PowerPivot数据模型后,即可通过 DAX表达式对数据模型进行各种操作,最终得到我们所需的结果。


DAX表达式能够对 PowerPivot背后的数据模型进行操作,这是 PowerPivot区别于传统 Excel数据透视表的重要因素。因此,我们在学习 PowerPivot时,必须时刻牢记 PowerPivot数据模型的概念,只有这样,才能真正理解和掌握 PowerPivot的精髓,做到举一反三。


PowerPivot的设计目的是使商务数据分析更智能、更易上手。作者认为微软公研发这个产品的目的是,通过 PowerPivot组件,使普通 Excel用户也能搞定那些以前只有数据分析专业人员才能完成的数据分析任务。就让我们先人一步,一起学习 Excel中的革命性分析工具—— PowerPivot吧!