“我是Tableau手册的深度解说家,而非官方文档的搬运工。”

在业务分析中,我们经常会遇到下面的各种问题?

  • 我想在订单分析中体现门店的分类信息怎么办?

  • 在会员的静态表分析中,我想把会员和贡献的贡献额结合起来怎么办?

  • 如何把来自多个部门的分析数据合并起来呢?

  • 部分数据需要清理,应该在清理前连接还是清理后?

在大数据分析过程中,我们会频繁的遇到需要把数据结合到一起的情形;在Tableau中,数据连接在一起有多种方式,,而在合适的地方选择合适的方法,是确保数据性能的重要前提。

  • Tableau数据合并的方法及

  • Tableau数据连接与数据混合的对比

  • Tableau数据连接的多种可能

我喜欢称 数据混合为可以灵活调整的“软联结”,而数据连接为返回静态结果的“硬联结”。

数据混合Blend是聚合级别的数据联结,而数据连接join则是行级别的。

、区分

在具体展开之前,我们先统一一下概念,“数据联结”(Data Connect)是最为广义的统称,意指把来自不同地方(专业用于为:数据源)的数据结合在一起。在Tableau中,根据不同的合并方式和数据处理阶段,使用了不同的用词,其一是Data Union,翻译为“数据并集”,其二是Data Join,翻译为“数据连接”,其三是Data Blend,翻译为“数据混合”

Screen Shot 2019-04-29 at 10.53.59 AM.png

“数据并集”最容易理解,它用于数据结构完全一致的数据的合并,比如将分别存放的12个月的订单数据csv文件合并,合并不会增加新的列(字段不会增加),只是将不同文件的数据追加在一起(增加了行行数)。因此,并集一般在早期的数据处理阶段就执行。比如在下图中,我们手动把各个月的订单数据拖到右侧的并集中,就把结果合并在一起。

Tableau 并集 手动并集.jpg

只要数据结果完全一致,数据并集并不会增加新的字段;不过在Tableau中,系统自动把文件路径和名称作为一个参考字段加入了并集结合,可以用来检查数据结果。在一些情况下,我们可以使用这个辅助字段,比如在上面的数据中,各月的数据中没有包含“日期”字段,我们可以使用path字段来生成日期字段。

数据连接 从辅助字段提取日期.jpg

相比之下,数据连接和数据混合不太容易区分。

简单的说,数据连接是在行级别联结数据的方式,而数据混合是在指定的聚合级别联结数据的方式。从这个角度去区分,更容易理解以下的特征:

  • 数据连接一般在构建视图之前就处理,而数据混合是在构建视图过程中根据需要处理;

  • 数据连接容易产生数据垃圾(冗余),因为它是行级别的运算;

  • 数据连接的结果是静态的,不能更改;而数据混合可以根据连接字段的不同组合改变连接的结果,相当于指定了在哪个聚合层面做数据连接;

  • 数据连接更慢,它是行级别的操作。

二、数据连接 Join

举例来说:假定我们有两组数据,它们有共同的标题字段,这个字段中有重复数据,也有不重复数据。在分析之前,我们想要把两个数据结合在一起。连接有四种方式:查找同类项、左侧为准、右侧为准、重复项同时保留差异;用数据库的专业术语,就是:内连接、左连接、右连接和全连接。(有数据库基础的可直接跳过本段)

1 内连接 inner join

最常用的是内连接,也就是根据关联字段查找两侧数据的重复项。如下图,我们用两侧的“维度”字段做连接,结果就是返回三行相同的数据,抛弃了其他的相关数据。

Screen Shot 2019-04-26 at 5.40.33 PM.png

2 左连接 Left join

那如果是左连接呢?也就是以左侧为主,不仅匹配相同数据,同时保留左侧的不匹配数据,相当于在上面的基础上增加了左侧的B、C两行,需要注意不匹配的项目中,右侧数据的字段会用“空值”填充,往往用null来代替,而不是0. 示例如下:

Screen Shot 2019-04-26 at 5.00.25 PM.png

3、右连接 right join

右连接的结果也就容易理解了,相当于在内连接的基础上追加了右侧数据的不重复数据,示例如下:

Screen Shot 2019-04-26 at 4.59.57 PM

4 外连接 out join

外连接相当于既保留了重复项,也保留了不重复项,不匹配的字段用空值代替,示例如下:

Screen Shot 2019-04-26 at 5.03.49 PM

所有的数据连接都是这四种连接方式之一,没有例外。

5、数据连接属性 data join

用上面的图片我们再来说一下“数据连接”join的几个特征,

其一,数据连接是在行级别的连接,左侧数据源的“维度”列的A行在右侧找到了相等的匹配项,就会在A行的后面追加右侧的字段“度量2”,默认会把右侧所有字段全部追加到后面;因此:

其二,行级别连接默认追加所有字段的方式,会产生大量的数据垃圾(冗余),想象一下,如果我们只想要右侧的一个字段,但是右侧数据源有30个字段,这30个字段都会被追加到同一个数据缓存中。如下图,右侧十几个字段全部被连接进来:

Tableau 数据连接 生成冗余字段.jpg

如果我们一方面想要数据连接,另一方面不想因为数据垃圾影响性能怎么办? 使用数据混合。

6、跨数据源的数据连接(增补)

在Tableau 10版本之后,推出来了跨数据源的数据连接,其本质与此前一致,却极大的扩大了数据连接的应用范围。和默认情况下的 同一数据源的不同数据表 连接相比,相当于同时把SQL查询发送到两个数据源位置。我们可以用示例图做一个简单对比,如下。

屏幕快照 2019-04-30 上午7.46.07.png

三、数据混合Blend

和数据连接相比,数据混合是在指定的聚合级别对数据进行合并;它的结果,依赖于我们的操作。数据混合如何能避免上面的数据垃圾呢?这就需要了解它的运行机制。

1、数据混合的运行方式

数据连接是在行级别的数据合并,默认会合并所有字段,生成一个数据表;之后我们在视图中使用数据连接的结果。而数据混合是两个数据表的混合,当我们指定了数据混合的连接字段,然后使用这些字段或其他字段时,Tableau并非从之前建好的结果中返回数据,而是把我们的拖拽转化为一次查询,从第二个工作表中查找结果,然后返回。因此,数据混合只会返回我们使用的字段,这样就减少了数据垃圾。我借鉴了Tableau大神 Milligan的图,翻译说明如下:

屏幕快照 2019-04-30 上午7.28.01.png

比如说上面的“月订单数据”和“客户数据”,我们用数据混合的方式建立关联。在Tableau中,建立数据混合的方式是 顶部菜单“数据”——“编辑关系”。系统会自动推荐匹配的字段,如果我们希望修改或者建立更多匹配,可以通过“自定义”添加或编辑即可。

Screen Shot 2019-04-26 at 8.02.46 PM.png

这里需要注意,首先在视图中引用的数据源会被认定为“主数据源”,另外的数据源即为“从数据源”。当我们从主数据源加入一个字段,然后从从数据源中把另一个字段加入视图时,Tableau背后的计算逻辑是以关联字段为匹配依据,从“从数据源”中返回相应的匹配项,显示到视图中。因此,它并不会引用其他的任何字段,如此一来,没有了数据冗余,速度也就更快。

数据混合 .jpg

2、在数据混合中更改联结的详细级别

我们说数据混合优于数据连接的一个地方在于可以在构建视图过程中指定联结的字段,联结字段决定了联结的聚合级别。我们看一下官方示例工作簿“超市”,又一个工作簿“性能”,分析了每个月不同细分的销售达成情况。

注意视图的详细级别是“类别细分”,为了确保在同一个聚合级别做数据混合,我们把 从数据源“销售目标”的三个维度字段点亮(注意后面的链条图表)。这样主数据源“每个类别下、每个细分的每个月”销售目标,就对应了从数据源中相同聚合级别的数据——在这里使用了全部字段,相当于实现了行级别的联结。

数据混合 超市字段

如果我们从上面的视图中移除“细分”字段,也就是详细级别改为了“每个类别每个月的销售额”,这时我们当然希望数据混合的聚合级别保持不变,Tableau也恰好如此聪明,结果是下面的图:

数据混合 不同聚合级别的混合.jpg

也就是说,数据混合可以根据视图需要,在不同聚合级别实现数据联结;而不像数据连接join的结果如此确定性、难以灵活更改。

因此,我喜欢称 数据混合为可以灵活调整的“软联结”,而数据连接为返回静态结果的“硬联结”。

【好奇者补充说明】

上面的数据混合是高于行级别的混合,Tableau会自动调整,即便我们再点亮“细分”字段,结果也不会有差异,因为更高聚合的销售目标其实也是更低详细级别的聚合而已。但是如果我们的视图是更低的详细级别,比如“类别细分”,而我们此时把默认的联结的三个字段关掉一个“细分”,视图就会明显的变化。结果就是:

  • 视图:销售额:类别*月*细分的详细级别;
  • 目标值:类别*月。

数据混合 不同聚合级别的混合 2.jpg

 

四、如何选择数据联结的类型

如何选择数据联结方式?

Screen Shot 2019-04-27 at 10.02.11 AM.png

 

五、 数据连接与数据混合的高级区别

(待补充)

1、数据连接支持更复杂的判断,比如“不等于”“大于等于”,而数据混合只支持“相等”这一种。数据混合更加灵活

2、数据连接效率低,在某些情况下,可以使用“数据具有引用完整性”提高性能;

3、数据混合中经常使用辅助数据源的维度字段怎么办?创建主组,可以加入主数据源。

 

Apr 26, 2019 G152
Apr 27, 2019
Apr 30, 2019 增加cross database join