4.1 行级别合并:并集、连接与Desktop方法

计算机世界的数据多半是以数据表为存储单位保存的,常见有Excel的工作簿、数据库的视图,做数据分析时经常要同时使用多个数据表的数据,此时就需要数据合并的技术。Tableau独创的VizQLTM技术把用户的拖曳操作转化为专业的SQL查询语言,不仅适用于可视化分析,也适用于数据整理过程。

在具体展开之前,我们先统一概念,笔者用“数据合并”代表最为广义的统称,意指把来自不同数据源的数据结合在一起。在Tableau中,根据不同的合并方式和数据处理阶段,使用了不同的用词:其一是Data Union,译为“数据并集”,用于相同数据结构的上下相续;其二是Data Join,译为“数据连接”,基于关联字段把数据左右相连;其三是Data Blend,译为“数据混合”,在视图层面把聚合数据做匹配。

不过,从根本上说,只有两种数据合并方法:相同的数据上下相续的并集(Union)和不同数据前后相连的连接(Join),数据混合(Blend)其实是在视图创建之后附加另一个数据源的聚合查询,应该视为是可视化分析后的增强分析。不过,为了帮助理解,笔者会在本章介绍三者的用法和差异性。

另外,为了和广大的中文计算机世界保持语义上的一致性,虽然Tableau将Join翻译为“联接”,本书依然使用“连接”指Join,并尽可能避免使用“联接”一词。除非特别说明,本章图例中的“联接”均为Join(连接)。

4.1.1 数据并集

在所有的数据合并方法中,“数据并集”最容易理解,它用于数据结构完全一致的多组数据合并。结构完全相同指字段标题名称及其数据类型一致,任意一个的不匹配都会导致并集错误。

并集多用于本地文件的处理,比如同一个Excel文件下的多个工作表,多个Excel文件下的多个工作表,或者多个.csv、.txt文件等,如图4-1所示。基于数据库的数据准备极少用到并集,基本都是连接(Join)。

图4-1 数据并集与数据连接

在第2章的数据连接简介中,本书介绍了数据连接面板的主要功能和单表连接。并集是建立在单表连接基础上的。这里介绍一下在Desktop中创建并集的详细方法。

第一步,打开Desktop,从左侧的数据连接面板连接本地的数据文件,如图4-2所示,选择“订单APAC.csv”文件。此时“订单APAC.csv”会加入右侧的连接主面板,而文件夹中的所有文件都会同步显示在Desktop的连接面板左侧。

图4-2 在Desktop中用3种方法创建出并集

第二步,三种方法任选其一——特定(手动)创建并集。

图4-2中标记了快速创建并集的3种方法,可以双击左侧数据底部的“新建并集”(见图4-2位置a);也可以在已有单表连接处点击右侧小三角图形,在弹出的菜单中选择“转化为并集”(见图4-2位置b);而最快捷的方法大概是直接把另一个需要并集的文件拖曳到之前的图例下方,同时会有“将表拖至并集”的提醒(见图4-2位置c)。

手动创建并集适用于少量的并集文件。

第三步,使用“通配符(自动)”合并多个文件(可选)。

除了上面的手动建立并集的多种方法,Tableau还提供了“通配符”方式,可以合并符合特定条件的工作表(文件)中的特定工作簿。通配符*(星号)代表任意一个或者多个字符,图4-3展示了几种通配符样式。

图4-3 通配符匹配文件或工作簿

明白了通配符的用法,如图4-4所示,在并集窗口中点击“通配符(自动)”切换到通配符模式,设置“文件”对应的“通配符模式”为“订单*”,Desktop会自动查找当前文件夹所有以“订单”开头的数据表,并建立并集。如果存在嵌套文件夹,则可以选择“将搜索扩展到子文件夹”等方式扩大并集的搜索范围。此用法适用于把不同年度的数据表分文件夹存放的情形,不过慎用为好。

并集建立之后,如何查看系统合并了哪些工作表呢?如图4-4所示,系统自动生成两个辅助字段,“File Paths”(文件路径)和“Path”(数据表路径),用来记录合并的文件来源及名称,用鼠标右击“Path”字段,在弹出的下拉菜单中选择“描述”命令,可以查看并集包含的数据表,从而确认并集的准确性。通过验证发现,“订单*”通配符自动合并了4个文件。

图4-4 使用通配符合并多个文件并查看合并项

在某些情况下,我们可以使用这些辅助字段,比如很多客户的月份日期记录在Excel的工作表名称中,因此需要从辅助字段中提取月份加入主数据。4.6节会介绍一个包含此方法的综合案例。

第四步,异常处理(可选)。

此前曾讲过,并集用于数据结构(字段名称和字段类型)完全相同的数据合并。有时候多个数据表中的并集字段存在不一致的情形,就需要发现后再处理。

为此,笔者在并集中加入了一个新文件,它的“国家”字段与其他4个文件的“国家/地区”字段相对应。如图4-5所示,通配符并集无法识别为相同字段,按下Ctrl键(mac OS系统为Command键)的同时选择这两个字段,用鼠标右击,在弹出的下拉菜单中选择“合并不匹配的字段”命令,即可将两者合并。之后双击新字段重命名为“国家/地区”即可。

图4-5 手动合并并集中的不匹配字段

不过,手动匹配的使用场景有限。如果字段的数据需要通过拆分或计算预处理(比如销售额是带有货币符号的文本,“¥45”“¥54”),就无法通过这种方法实现。基于复杂整理之后的并集,只能通过Prep Builder完成,4.3节会介绍在Prep Builder中的数据合并方法。

综上所述,并集的前提是字段完全相同,因此数据并集并不会增加新的字段。系统自动生成几个辅助字段(根据版本和并集的方法不同名称略有差异),帮助验证并集的准确性,手动匹配适用于处理简单的字段不一致问题。

另外,从笔者的经验来看,还需要注意以下几点。

● 数据整理主要用于Excel等本地数据环境中,极少用于数据库环境。

● 虽然使用Prep Builder做数据并集会更直观、更简单,但除非必要,不要把数据整理和可视化分析分开,使用Desktop同步完成数据并集和可视化有助于保持思维的连贯性。

4.1.2 数据连接

在实际的分析场景中,更多的数据合并是两类不同的数据,比如销售订单与商品详情匹配、销售订单与退货订单匹配等。将多个不同的数据表,以相同的字段为关联条件将数据合并在一起的过程,称之为“连接”(Join)。

初学者可以借助Excel的VLOOKUP函数来理解数据连接的过程,VLOOKUP函数用于从指定范围中返回匹配的列,这是最简单的数据连接。不过,这种方式每次只能匹配一个关联字段,只能返回一个字段,不适用于大数据的需求。数据库工程师可以借助SQL语言实现更复杂的数据连接和计算,但对于业务部门的分析师而言又过于晦涩、难以普及,好在Tableau借助于拖曳和图形,使我们无须学习专业的SQL语言,即可实现大数据的匹配验证(见图4-6)。

图4-6 从单行查找到批量数据匹配

理解数据连接有两个关键问题:用哪些字段做连接?选择哪一种连接方式?

笔者用一个简单的例子说明这个过程。

比如,有一份“退货商品明细”(退货交易2020.csv文件),包含退货订单ID、商品ID、退货原因及备注,我们想深入分析退货商品所属的分类、区域,以及退货的时间趋势,就需要用“退货交易”和销售明细做匹配,查询并返回每件退货商品的分类、区域、日期等其他数据明细。

在4.1.1节的基础上,使用Desktop加入“退货交易”并建立匹配关系,步骤如下。

第一步,建立连接。

如图4-7所示,双击“退货商品明细”加入连接面板,Desktop自动建立两个数据表的匹配,点击中间的连接图标,可以查看连接的方式(此处为“内部”)和连接所有的字段(此处为“商品ID”)。

图4-7 双击退货商品名称自动建立连接

默认情况下,Desktop自动为连接查找一个连接字段,默认取两侧重合数据(交集)。接下来,数据分析师需要根据自己的业务问题修改连接字段和连接方式,这是设置连接的关键!

第二步,修改连接。

图4-7中默认使用“商品ID”连接退货明细和销售明细,“内部”连接代表取两侧重合的部分。返回的结果是所有订单中的退货信息。对吗?看似正确,实际不对。

举个简单的例子,爸爸下班路上去楼下超市购买了苹果和香蕉,妈妈也在同一家超市购买了香蕉和猕猴桃。回家发现购买重复了,因此妈妈回超市把香蕉办理退货。如果按照订单退货(只匹配订单ID),那么系统会把妈妈购买的香蕉和猕猴桃全部退掉,而如果按照商品退货(只匹配商品ID),那么系统会把爸爸和妈妈购买的香蕉全部退掉。正确的方法是,让系统知道,是妈妈的订单下的香蕉退货,因此就需要同时匹配订单ID和商品ID。这就是数据分析中最关键的层次,或者称之为详细级别。层次是从Excel到Tableau的最本质跨越,是数据连接、可视化分析的知识基础,也是高级计算的逻辑基础。

基于这样的思考,想匹配并返回“所有退货商品的类别、子类别、区域、退货时间等”,就需要同时匹配“商品ID”和“订单ID”。如图4-8所示,点击连接标识,在弹出的编辑窗口中,点击“添加新的联接(连接)子句”,将两侧的“订单ID”建立相等关联。

图4-8

Tableaude的数据连接支持包含计算的字段作为连接子句,如图4-9所示。

图4-9

连接(Join)中常用的方式有以下4种,如图4-10所示。

图4-10 连接的常见方式

我们在中学时学习的交集和并集,在计算机分析中又被称之为“内连接”和“外连接”,另外还有左连接和右连接。如果连接字段只有一个,则可以用Excel的VLOOKUP函数理解左连接的逻辑——相当于从右侧数据表中查找到匹配的数据行,然后返回每一列的数据值,因此“左连接”是在左侧数据表字段的基础上,增加右侧数据表的数据字段的过程。

我们用最小的数据样本来演示这个过程,用Excel分别存储各区域的销售总额(Sales)和销售目标(Target),区域(Area)作为连接字段,4种连接方式的结果分别如图4-11所示。

图4-11 连接的示例

匹配的字段会返回对应的值,没有对应的值就是空,Tableau中用null(空值)来表示。

不管使用什么工具做数据分析,数据连接都是业务用户学习数据分析的第一个关卡。迈过这个坎儿既需要深刻理解业务问题和数据结构,又需要深刻理解上面的连接逻辑和设置方式。

最后,回到本节开头的问题“查看退货商品的类别、子类别、区域、退货时间等”。既然查看退货商品,为什么选择使用默认的“内部”连接,而不是选择以“退货商品交易”为主的“右连接”呢?

Tableau虽然使用了图4-10清晰地代表数据连接类型,对于退货而言,由于所有的退货都必然在销售中有记录,默认的“内部”与选择“右侧”连接是完全一致的,其真实的关系如图4-12所示。

图4-12 退货商品交易属于所有商品交易的子集

可见,了解技术和了解业务同样重要,这样技术才能为业务分析所用。

换一个分析场景,为了在商品交易分析中排除退货商品的影响,如何在并集的结果中排除退货商品呢?这种排除操作无法使用图4-10中的类型来解决,相当于两种类型的“相减”计算,如图4-13所示。

图4-13 在左连接基础上排除内连接部分

此类的高级连接,在Prep Builder中可以轻松解决,我们在4.3节介绍。

4.1.3 并集与连接的异同点

并集(Union)和连接(Join)是最常用的数据合并方法。为了进一步理解数据合并,同时为理解后面的“数据混合”奠定基础,笔者在这里进一步阐述一下二者的共同点和差异。

1.并集和连接的共同点

● 二者都是行级别的合并,并集是把多个文件的所有行都前后相续,连接是在每一行上匹配字段,行级别意味着没有任何的聚合计算参与其中。

● 并集和连接的结果都是产生新的数据源,而不再存在一个单独的数据表。

● 既然是行级别合并,并且产生了新的数据源,因此一旦开始可视化分析的过程,数据源就保持不变,不能在分析过程中修改。具有这种特征的数据表,称之为“物理表”。图4-14形象地展示二者的差异。

图4-14 并集和连接,都是生成一个完整、独立的数据源

2.并集和连接的差异

(1)并集是相同数据结构的前后相续,连接是不同数据的左右相连。

并集一定会增加行数,但不会增加新字段(除了Tableau自动生成的辅助字段)。连接必然增加字段的数量,但不一定增加行数,是否增加行数取决于连接方式和是否有重复内容),如图4-15所示。

图4-15 并集一定会增加行,而连接一定会增加列

(2)并集比连接更优先。

在4.1.2节创建连接时,直接使用了4.1.1节创建的并集与“退货商品明细”做了匹配。Desktop中并集总是优先于连接,二者关系可以如图4-16所示。

图4-16 并集优先于连接

(3)连接可以跨数据源连接,而并集限于同一数据源。

4.1.2节介绍的数据连接是在同一文件路径下的文件连接,可以视为同一个数据源内的连接。有时候,连接是跨文件路径的,或者跨数据库的,此时就可以在原来的数据源连接基础上,增加额外的数据源连接。

如图4-17所示,点击左侧连接面板的“添加”,可以增加额外的数据文件,Tableau使用不同颜色代表不同的数据源。

图4-17 跨数据源建立连接

从SQL角度理解,跨数据源的数据连接,是两次数据库查询请求的连接。同一个数据源的多个数据表之间的数据连接和跨数据源数据连接如图4-18所示。

图4-18 数据连接是一次性的SQL查询

理解跨数据源数据连接,是理解“数据混合”的基础。