前面介绍了Prep的pivot和aggregate,前者修改了数据的展现样式,后者修改了数据的聚合度;prep还可以把多个数据表合并在一起,提供了join和union两个功能。

一、理解Join和Union

在Tableau中,合并数据有两个基本的方法,联结join 和并集Union,更具体的说,是基于部分共同字段的数据联结Join,和全部字段一致的数据并集Union。

不得不说,Tableau Prep的官方翻译是有误导性的,它把Join和Union翻译为“联结和合并”,又说,“两种方法来合并 Tableau Prep 中的数据:联接和合并”,非常容易导致理解Union上的误解。

形象的讲,可以这么理解二者的区别:联结Join用于不同详细级别的数据,Union用于格式相同的数据;联结Join的结果是数据变得又高又胖(tall and wide)——增加了数据,同时增加了字段数量;而并集Union的结果是数据变高却没有变胖(tall not wide)——后面的数据追加到前面的数据,而字段没有增加。

  • 联结Join:不同的数据、有共同的字段、字段增多——横向扩展了字段,纵向增加了数据;
  • “并集”Union:相同结构的数据、完全相同的字段、字段不变——纵向追加数据。

Join容易理解,它在英文中的本意就是前后相接;在Tableau中,诸如标题列{ABCD }与{CDEF}联结,结果就是{ABCDEF},CD是联结二者的共同字段。

Union的本意就是指具有相同结构和属性的人员、国家、企业等的合并,就像共同信仰的人成立政党或工会、有共同价值的国家形成联邦、同为国家的国家形成联合国、企业成为集团等等;Tableau中的Union,要“确保合并的表具有相同的字段数、相同的字段名称,并且字段的数据类型相同”,因此“并集”也不是特别准确,逻辑学和常用的“并集”也有重合和不重合的情况,如果用“追加”词语,可能更加清晰一些。

不妨我们就用Join和Union吧。

 

二、Join的用法和说明

任意两个以上的数据表都可以通过关联字段Join在一起,在flow面板中,把一个工作表直接拖拽到另一个上面,就会提示Join OR Union,放在右侧是join(横向扩展),放在下面是Union(纵向追加)。

1、联结子句与判断

此时,prep会自动建议一个联结的字段,比如在superstore中的Product ID,你可以从下面的“联结子句建议”中增加新的子句,也可以在“联结”右上角的“+”手动增加。

Join 截图.png

这里要注意的是,联结的判断是可以修改的,默认是等于(=),可以修改为不等于、大于等于、小于等于,等。

join 联结判断.png

说一个使用“不等于”的案例,比如在做顾客分析时,首次购物时间可以通过 Min[购物时间] 来查找,那第二次购物时间如何查找呢?通过Join联结全部的购物记录和首次购物记录,通过 “购物时间”Join,然后修改为“不等于”(!=),这样从全部购物记录中把首次排除,之后再做一次Min(购物时间)的聚合就可以了。

同样的操作,如果我们在desktop中实现,需要使用 fixed LOD先返回第一次购买时间,然后通过if判断建立新的字段,把首次购买时间替换为null,生成的新字段再重新做一遍fixed LOD计算。每一次LOD表达式计算,都是完整的一次数据查询,通过prep,我们可以在数据清理阶段完成这个操作,提高desktop中的分析效率。(本案例参考“15大详细级别表达式”之 案例10:各个阵列的回头客。链接:【Tableau】15大详细级别表达式-思路解读版 (5)

2、联结类型

在Join中,最重要的地方就在联结子句(Join clause)和联结类型(Join Type),联结类型分为几种:

  • 内部联结(Inner Join,默认):包含了两侧数据中的重合数据;
  • 左联结(Left Join):以左侧数据为主,增加右侧的匹配数据
  • 右联结(Right Join):以右侧数据为主,增加左侧的匹配数据
  • 外联结(Outer Join):包含两侧数据的所有数据,重合或者不重合

我们可以据一个最简单的例子,Table 1有四行数据,Table 2有四行数据,其中两行重合(1和3)通过B=B和C=C两行数据来Join,四种联结方式如下图。最简单的数据可以了解真相。

Join .jpg

当然,如果我们只用B=B联结怎么办?那就在内心中把C作为两个字段,一个叫C1,另一个叫C2,不要理会就好了——Tableau也是这么干的。

Tableau不愧为可视化王冠,它把联结结果通过可视化的方式表达出来,可以清晰的看到数据的分布。结合经验,可以提前判断Join的可靠性。

屏幕快照 2018-09-04 上午7.02.43.png

3、注意要点

  • 在Join的过程中,会遇到我们在讲聚合aggregation中同样的问题,不同的数据聚合程度,Join之后会造成理解上的误解,因此建议同一详细级别(Level of Detai)的数据执行Join操作。

这种不同级别的数据联结(门店级别的销售数据+公司级别的员工数据),会导致数据上的误解:员工数量本来是各年度公司的总员工数(聚合度高);联结后,在门店详细级别重复出现的“员工数量”字段,会被认为是每个门店的员工数量(聚合度低的级别)。——这种情况就要在数据分析时特别加以注意。

  • 默认的数据联结子句是左右相等,必要时修改为“不等于”、“大于”等其他判断;
  • 使用数据可视化图形,和对数据的了解经验,提前判断数据Join的可靠性。

 

三、Union的用法

执行Union和上面的Join,仅需要把数据表拖动到另一个上面,根据提示放在下面的Union就可以,在Union的数据窗格中,我们可以通过清晰的颜色标识,查看每个字段Union后的完整性。

  • 如果并集配置和并集结果中,字段上包含了全部四种颜色,表示union正常;
  • 对于同一个名字,不同类型的数据,Prep会自动转换实现union,当然,之后可以“分隔具有不同类型的输入”以还原合并。

prep union.png

Union的重点在于修复和完善不匹配的字段。

  • 修复上述不匹配的字段名称,可以同时选择两个字段,然后右键合并;如果想要执行反向操作,可以找到相应的字段,点击下来箭头,选择“分隔对齐的字段”,从而从每个数据表中分离出来;

屏幕快照 2018-09-04 上午7.30.16.png

 

四、说明

区分Tableau中的几个概念,避免使用上的误区。

  • group 字段的合并
  • Join 基于共同数据字段作为的横向数据联结
  • Union,具有相同字段的纵向数据合并(追加)

Tableau Prep系列

 

4 Sep 2018
Feb 25, 2019 revise