4.2 视图级别合并:数据混合与Desktop方法
(注:数据混合属于可视化层面的数据合并,初学者如果难以理解,请在学习完第5章后重读此部分。另外,Tableau 2020.2版本推出的“数据关系”,可以部分替代数据混合的功能。)
有一种合并数据的高级方法,可以在保持数据源独立的前提下实现数据聚合的“合并”。我们以Tableau官方超市的“销售完成率”数据来说明:有两份数据,一份是分类、细分、每天的商品交易记录;另一份是类别、细分、每天的销售额目标值。前者的数据是百万级别,后者则仅仅是几千行数据。基于这两个数据源,我们要分析每个类别、每个细分、每个月的销售额达成情况。
也就是说,只关心月度销售额和达成,而不关心数据库保存的每天的目标值。如果贸然使用数据连接,则会在每一笔订单、每一笔商品交易后面都附加上当天的销售目标值,而由于每天的交易量非常大,这样的数据重复会增加计算困难,所以需要寻找更好的方法。我们不妨用Excel的数据透视表来形象表述这个问题所要达到的目标。
我们先用销售数据做透视表,将行级别数据聚合(汇总)到每个细分、每个类别、每年,返回销售额(见图4-19左侧部分);然后对销售目标数据做同样的操作,返回每个细分、每个类别、每年的销售额目标值数值(见图4-19中间部分)。我们想要的数据合并,是把左侧透视表的聚合值和右侧透视表的聚合值,按照维度匹配起来。
图4-19 使用Excel数据透视表理解数据混合的逻辑
这个过程和行级别连接有本质的区别,行级别连接是在每一行做匹配追加,而这里是先计算聚合再按照维度匹配,这个过程是“聚合层面的数据连接”,又称之为“数据混合”。
那这个过程在Tableau Desktop中如何完成呢?
4.2.1 使用Desktop进行数据混合
Tableau Desktop单一层次的工作表,和Excel的数据透视表原理一样,都是基于指定字段的数据聚合。
使用Desktop默认的超市数据,新建一个工作表,如图4-20所示,左侧会显示所有的维度和度量,右侧就是做数据聚合和可视化的区域。依次双击“细分”“类别”“订单日期”和“销售额”字段,或者把各个字段拖曳到如图4-20中指定的位置,就可以获得各个细分、类别、年(订单日期)级别的销售额聚合。
同理,基于“超市-目标”数据,也可以生成细分、类别、年级别的销售额目标聚合。两个聚合的缩略图如图4-21所示。
图4-20 使用Desktop在指定层次计算销售额聚合
图4-21 使用Desktop完成数据聚合
此处数据合并的目的,就是依据维度字段做关联匹配,把表B中的销售额目标数值放在表A的实际销售额后面,从而直接计算达成占比,合并结果如图4-22所示。
图4-22 数据混合是两个视图聚合的连接匹配
需求很简单,但不能使用之前的连接实现,此时需要一种全新的数据合并方法——类似于此前的“跨数据源连接”,但不是行级别连接,而是聚合查询结果的连接。可以用一句话来完整地描述这个结果:从“示例-超市”中计算每个细分、类别、每年的聚合销售额,并从“销售目标”中匹配对应的聚合销售目标,而后把两组数值一一对应。
1.新建辅助数据源
如图4-23所示,通过快捷工具栏或者“数据→新建数据源”命令增加数据源,选择对应的“数据目标”数据表。
图4-23 增加辅助数据源
2.匹配数据源关系
在图4-20创建的聚合基础上,在左上角“数据源”部分点击新增加的“销售目标”,此时发现维度字段右侧增加了类似于锁链的图标,如图4-24所示。
图4-24 相同的维度字段自动建立匹配关系
两个数据之间的匹配,默认是自动匹配的。可以通过“数据→编辑混合关系”命令查看。不过,在实际业务中经常由于字段名称不一致而无法建立默认匹配。如图4-25所示,“细分”重命名就会导致字段匹配失效。此时可以通过“数据→编辑混合关系”命令,手动添加两个字段的匹配。
图4-25 手动建立字段的匹配关系
3.跨数据源集合查询
在主视图中增加跨数据源聚合查询确认字段的匹配关系之后,可以在主视图中增加辅助数据源的字段了。如图4-26所示,双击“销售目标”数据源下的“销售目标”字段,主视图中每一行的销售额聚合之后,就增加了辅助数据源的销售目标聚合。
图4-26 Desktop的数据混合的方法
4.创建“完成比率”
借助即席计算(即无须提前创建计算字段直接输入表达式),在“总和(销售目标)”的胶囊下双击,然后拖入上面的两个字段并相除,即可创建“完成比率”。字段上“更改格式”还可以修改为百分比显示。
图4-27 在数据混合基础上增加计算字段
5.在视图中调整主视图的详细级别
不同于并集和连接生成一个完整的数据结果,在数据混合中,两个数据源是完全独立的。主视图焦点是在“主数据源”基础上创建的,之后引入“辅助数据源”字段。正是因为数据混合中的两个数据源相互独立,相互之间的数据连接字段可以根据视图需要调整,因此具有了绝无仅有的灵活性。
Desktop自带的超市数据有一个“性能”(Performance,翻译为“达成”更加)工作表。就是在4-25的数据基础上转化为“标靶图”——用条形图代表销售额,用参考线和分布区间描述销售目标,用颜色直观描述二者的关系,如图4-28所示。
图4-28 基于销售额和销售目标的标靶图
假设在给领导汇报时,领导希望调整问题的层次,比如“查看每个类别、每年的销售额及其达成”,可以在图4-28中移除“细分”字段。主视图中既然没有了这个字段,也就无须从辅助数据源查询,因此连接标识就会自动取消,如图4-29所示。
图4-29 细分字段移除之后,数据混合自动调整混合的连接字段
这种灵活性,就是数据混合相对于数据连接最重要的价值。在企业分析中,这种既保持数据源独立,又能随时跨数据源查询的方法是平衡效率和性能的最佳方法。在第6章中,为了能使用单独的地图数据,本书也使用了数据混合——基于主数据创建聚合,基于辅助数据源的坐标创建地图。
为了更好地理解数据混合,并为之后的“数据关系”奠定基础,接下来介绍数据混合的原理,及其与并集、连接的区别。
4.2.2 数据混合的逻辑及其与连接的差异
借用Joshua N.Milligan[1]在Learning Tableau 10一书中的图片,可以把4.2.1节中介绍的混合过程,用图4-30来理解。
图4-30 数据混合的原理:两次独立的数据库查询并匹配
熟悉SQL的读者可以用两次包含group by的语法来理解。
不熟悉SQL的读者(包括笔者),则可以用Excel的数据透视表来理解这个过程,Desktop视图分别向两个数据源发起查询请求,返回聚合结果(如同Excel的数据透视表),然后按照关联字段匹配连接在一起(见4.2.1节介绍)。
Tableau用拖曳简化了这个过程,拖曳即查询,返回即匹配。
既然数据混合本质上是跨数据源的聚合查询,那它与和4.1.3节中介绍的跨数据源的数据连接有何不同呢?
最关键的不同是,数据混合是在聚合层面的查询和合并(聚合过程类似于Excel的数据透视表),而数据连接是在行级别的查询和匹配(类似于Excel的VLOOKUP函数)。Tableau的聚合意味着视图,所以数据混合可以理解为在已经创建好的视图的基础上增加新字段的“视图升级”。
假定在可视化分析中同时使用了所有的数据合并技术:数据并集、连接、数据混合,那么它们之间的先后关系必然如图4-31所示。
图4-31 数据并集、连接和混合的关系图
在此,笔者用几句话来介绍,可以视为“数据合并”的最终概括。
● 数据并集优先于数据连接,二者都是行级别(数据库层面)的合并;
● 数据并集和连接是构建视图的准备,因此必定先于视图完成;
● 数据混合是对已有视图的升级完善,因此必定后于视图而可用;
● 构建主视图的数据源是主数据源,通过混合加入的是辅数据源。
既然数据混合是在主数据源的基础上从辅助数据源进行对应的查询和连接,所以那些在辅助数据源中存在但主数据源不存在的维度,就不会出现在升级后的视图中,从这个角度看,数据混合类似数据连接的“左连接”——以主数据源中的数据为准,查询并合并辅助数据源的匹配项。我们可以用上面的数据结果来做一下说明。
如图4-32所示,表A中有2019年的销售数据(高亮部分),但是表B没有对应的销售目标值,因此数据混合后的结果是空值——也就是没有查询到相应的聚合值。
图4-32 数据混合相当于左连接匹配
同理,表B有2015年的销售目标值,而表A中没有相应的销售订单数据。数据混合是在主数据源(表A)的基础上,从辅助数据源(表B)中查询和合并,既然主数据源中没有2015年的数据,升级后的数据视图也不会增加。