所有的数据可以以不同的聚合度来呈现,比如某零售门店的销售数据,可以是商品流水数据、订单销售数据、日总账数据、月度品类销售数据等多种聚合方式,这些数据颗粒度逐步降低(即聚合度不断提高)。数据聚合就是降低数据颗粒度的过程。
颗粒度即数据的详细级别。Granularity is the level of detail of the data.
一、使用场景
在数据分析的过程中,我们经常会调整数据的颗粒度(granularity),比如上面说的不同的销售数据,这就需要在数据整理的过程中调整数据的颗粒度。Tableau Prep通过聚合(aggregate)的功能降低数据颗粒度。
聚合度和颗粒度是完全相反的。典型的聚合计算包括求和(sum)、求平均(avg)、计数(count)等;从某种角度讲,最大值、最小值等计算也可以视为是聚合计算。
数据的颗粒度越高,意味着聚合程度就越低,反之亦然。数据聚合就是降低数据的颗粒度的过程。
当然,prep的聚合功能,只能提高数据的聚合度,不能执行反操作。
二、聚合的功能介绍与方法
Prep聚合的功能非常简单便捷,默认会把所有的字段分为“分组”和“聚合”两类,点击全部添加,就可以分别加入到右侧的“分组字段”和“聚合字段”。
在左侧点击各个字段名称,系统会提示可用的聚合方式(如下图)。
- 数值类的聚合字段支持:求和(sum)-默认、平均值(avg)、中位数、计数、最大值、最小值、方差等多种方式;

- 而时间和其他文本类字段则为分组字段,支持:计数(count)、不同计数(countd)、最大值(max)和最小值(min);

三、使用分阶段聚合功能提高运算性能
前几日一个客户反应,“Tableau的BI展现反应太慢了!”我看了他们的数据,发现了问题。第一次使用Tableau 的客户,往往希望得到整个公司的KPI层面的宏观数据,用来随时了解集团/公司业绩的达成进度。但是,客户往往直接从颗粒度最高的销售明细,直接计算聚合度最高的KPI指标,因此就会出现500M数据聚合为10个指标的情况,这就需要Tableau短期内执行巨量的计算。
如何解决这个问题?——使用聚合功能提前准备数据到一定的聚合水平,减少数据的大跨度聚合。
因此,在使用数据聚合时,我们首先应该想:我们想要得到怎样的数据结构?其次,我们想要怎样的数据聚合级别?
比如说,如果我们希望在每周一,看到集团 /公司当月的KPI达成进展(比如总公司各产品品类的月度销售金额、利润金额、成本——数据结构),那么我们可以通过prep在每周日时完成各个事业部的聚合计算,然后通过事业部的再次聚合完成集团的业绩计算,并通过Server和Viewer账号分配给不同的访问者,或者通过订阅推送。不同的聚合级别,可以得到不同级别的KPI指标,分配给不同级别的Viewer账号。
四、聚合的意义:看不同详细级别的数据混合
数据聚合之后往往要参与到和其他数据的连接,不同聚合级别的数据连接join之后,会出现数据冗余,或者高颗粒度数据丢失,并且容易出现误导,这是需要注意的事情。如下图,
我们把上面各年度公司的员工总数,和各年度各门店的销售业绩通过年度合并之后,要么员工信息会重复出现(保留颗粒度高的门店数据),要么就要删除门店的数据(按照聚合度高的年度级别连接)。
1、不同级别的数据联结,容易出现误导
由于我们把测试数据放在了一个数据表格里,通过prep导入数据,打开数据解释器,把生成的两个子表格拖入prep flow,然后根据“年度”字段执行union合并,结果如下:
这种不同级别的数据联结(门店级别的销售数据+公司级别的员工数据),会导致数据上的误解:
- 容易出现误导,员工数量本来是各年度公司的总员工数(聚合度高);联结后,在门店详细级别重复出现的“员工数量”字段,会被认为是每个门店的员工数量(聚合度低的级别)。——这种情况就要在数据分析时特别加以注意。
2、先聚合到同一详细级别,再联结
上述的联结容易出现误导,但是会保留颗粒度高的门店数据;换一种方式,我们可以先把数据聚合到同一详细级别,然后再联结。比如下图,在门店级别的数据后面增加一个聚合,将门店的销售数据聚合到公司级别,然后再与公司级别的员工数据联结,得到的数据只有三行。
这样的聚合数据不会有误导,但是高颗粒度(high granularity)的数据会被删除——各年的门店数据。
从上面可以看到,在执行数据聚合时,应该首先想好想要的结构(想要各年度的员工、门店及销售数据,还是仅仅要员工及销售数据),然后确定聚合的详细级别。上述的两种方式没有对错,只要符合需求就好。
五、使用要点
个人经验,理解和使用聚合(aggregate)的要点如下:
- 聚合阶段可以也修改字段的数据类型,Prep会自动前置增加一个step步骤并保存修改步骤,聚合操作和整理分开——聚合和联结步骤都不会保存数据清理步骤;
- 聚合只能降低数据的颗粒度(即提高聚合度),不能解聚,只能回到当前步骤完成聚合/解聚工作。
- 分组字段和聚合字段都可以加入到右侧“聚合字段”中,默认为计数和总和,一定要选择适合自己的聚合方式。
- 在聚合之前,想要想要的数据结构和数据聚合详细级别。
鸣谢:官方英文博客 Data Prep 101: What is an aggregate function and how do you combine aggregated data?
26 Aug 2018
2 Sep 2018 update 增加了第三、第四部分
《【Tableau】 Prep数据整理之聚合aggregate 2.0》有5个想法