关联是根据两个表中的匹配字段为两个表创建关系。关联不会真正将两个表中的数据合并到单个表中,而是通过设置的关系告知Tableau两个表中的数据是如何相关的,具体来说,就是如何在两个表之间连接数据行。只有在创建视图时,Tableau才会分析两个表之间的关系,并根据关系中指定的匹配字段在相关表中查找适合的数据。在Tableau Desktop中关联表的行为类似于在关系数据库软件(例如Access)中为表设置关系。
关系是指两个表之间存在的某种内在联系。两个表之间的关系有3种类型:一对一、一对多(或多对一)、多对多,关系的类型决定两个表中的数据关联方式。
“一对一”关系是指第一个表中的每条记录在第二个表中只有一个匹配的记录,而第二个表中的每条记录在第一个表中也只有一个匹配的记录。
一对一关系不太常见,因为在大多数情况下,应该将具有一对一关系的两个表中的数据合并到一个表中。在某些特定情况下,可能需要为两个表创建一对一关系。例如,在一个包含客户的个人信息、账号和密码的表中,为了提高账号的安全性,可以将账号和密码单独存储在一个表中,该表与用户个人信息所在的表就是“一对一”关系。
“一对多”关系是指第一个表中的每条记录在第二个表中有一条或多条匹配的记录,而第二个表中的每条记录在第一个表中只有一条匹配的记录。多对一与一对多是同一种关系类型,只是由于两个表的位置不同而导致相反的关系方向。
客户和订单之间是一对多关系。每个客户可以提交一个或多个订单,但是每个订单只属于一个客户。如图3-1所示,“客户信息”表中的“客户编号”字段能够唯一标识每一个客户,在“订单信息”表中也包含该字段,但是客户编号可能会出现多次,这样就可以通过“客户信息”表中的“客户编号”字段,在“订单信息”表中找到每个客户提交了哪些订单,或者通过“订单信息”表中的“客户信息”字段在“客户信息”表中找到对应的客户信息。
图3-1 一对多关系
例如,在“客户信息”表中客户编号为KH001的客户,在“订单信息”表中该客户编号出现在订单编号为DD003和DD006的两个订单中,这意味着这两个订单是客户编号为KH001的客户提交的。
“多对多”关系是指第一个表中的每条记录在第二个表中有一条或多条匹配的记录,而第二个表中的每条记录在第一个表中也有一条或多条匹配的记录。
商品和订单之间是多对多关系,同一种商品可以出现在多个订单中,而一个订单也可以包含多种商品。
如需为两个或多个表创建关联,需要使用Tableau Desktop 2020.2及更高版本。关联在一起的表可以是同一个数据连接或不同数据连接中的表,无论哪种情况,这些表都必须位于同一个数据源中。
在Tableau Desktop中建立数据连接后,如需关联两个表中的数据,可以在“数据源”页面中将一个表拖动到画布中,然后将另一个表拖动到画布中,Tableau会自动检测两个表中的匹配字段。如果发现匹配字段,将为两个表创建关系,并在两个表之间显示一条关系线,如图3-2所示。
图3-2 自动为两个表创建关系
提示 :将第二个表添加到画布后,Tableau为两个表创建关系的同时会自动打开“编辑关系”对话框,单击对话框右上角的 按钮可以关闭该对话框。
如果Tableau检测不到两个表中的匹配字段,则会在两个表之间显示警告图标,将鼠标指针移动到该图标上,会显示如图3-3所示的信息,此时需要手动设置用于创建关系的匹配字段。
图3-3 检测不到匹配字段时显示警告图标
提示 :即使没有显示警告图标,也可以将鼠标指针移动到关系线上,此时会显示关联的基本信息。
无论是需要更改用于确定表关系的匹配字段,还是由于未检测到匹配字段而需要手动对其进行设置,都可以单击两个表之间的关系线或警告图标,打开“编辑关系”对话框,左、右两侧显示当前关系涉及的两个表的名称和已指定的匹配字段,如图3-4所示。由于本例中的匹配字段在两个表中的名称相同,为了便于区分,在其中一个字段名称的右侧显示了表名。
图3-4 “编辑关系”对话框
如需删除当前设置好的匹配字段,可以将鼠标指针移动到字段所在的行,此时会在该行的右侧显示垃圾桶图标,单击该图标将删除当前的匹配字段,如图3-5所示。
图3-5 单击垃圾桶图标删除当前的匹配字段
如需更改当前设置好的匹配字段,可以单击左、右两个字段中的任意一个字段,此时会在字段的下方显示表中的所有字段,分别在左、右两侧选择要在关系中使用的匹配字段,即可替换当前的匹配字段,如图3-6所示。
图3-6 更改关系中的匹配字段
提示 :如果表中包含的字段数量较多,则可以通过在搜索框中输入字段的名称快速找到所需的字段。
如需为关系添加多组匹配字段,可以在“编辑关系”对话框中单击“添加更多字段”,然后分别在左、右两侧选择新的一组匹配字段,如图3-7所示。
图3-7 添加新的匹配字段
注意 :如果当前正在“编辑关系”对话框中显示表中的所有字段,则需要先单击对话框右下角的“关闭”,然后在“编辑关系”对话框才会显示“添加更多字段”。
通过设置关系的基数和引用完整性,可以优化Tableau在关联的表中查询数据的性能。在为表创建关联时,Tableau会自动设置关系的基数和引用完整性,所以即使不额外设置这两项,关联的表中的数据也能正常工作。如果了解两个表中的记录之间的唯一性和匹配方式,则可以更改这两项设置,从而更加准确地描述数据,使Tableau发挥最佳性能。
如需设置基数和引用完整性,可以在“编辑关系”对话框中单击“性能选项”,然后在展开的对话框中进行设置,如图3-8所示。
图3-8 设置基数和引用完整性
“基数”选项用于设置关系的类型,即一对一、一对多(多对一)和多对多。由于“订单信息”和“客户信息”两个表是多对一的关系,所以需要将图3-8中右侧的“基数”选项设置为“一个”,如图3-9所示。
图3-9 更改“基数”选项
“引用完整性”选项用于设置一个表中的每条记录在其他表中是否存在匹配项。如果一个表中的每条记录始终与另一个表中的一条或多条记录匹配,则应该将“引用完整性”选项设置为“所有记录匹配”,否则设置为“某些记录匹配”。
例如,“订单信息”表中的任意一条记录肯定与“客户信息”表中的某条记录匹配,因为每个订单都必须由一个客户提交,所以该订单必然在“客户信息”表中有一个对应的客户。反之则未必如此,“客户信息”表中的任意一个客户未必提交过订单,这样在“订单信息”表中也就没有对应的订单记录了。
提示 :如果在更改“基数”和“引用完整性”两个选项之后,想要使它们恢复到Tableau最初的默认设置,则可以单击“编辑关系”对话框中的“恢复为默认值”按钮。“基数”选项的默认值为“多对多”,“引用完整性”选项的默认值为“某些记录匹配”。
画布中的每个表都至少与另一个表具有关系。如需为一个表创建与另一个表的关系,可以使用鼠标将该表拖动到另一个表的附近,当在两个表之间显示关系线时,释放鼠标左键,将在两个表之间创建关系,并自动删除该表原来具有的关系。
如需删除关系中的表,可以在画布中右击该表,然后在弹出的菜单中选择“移除”命令,如图3-10所示。
注意 :删除画布中的表时,将自动删除与该表关联的下级表。如果删除根表,则会自动删除数据模型中的所有其他表。
图3-10 选择“移除”命令