联接数据
通常需要合并来自多个位置(不同的表甚至数据源)的数据来执行所需的分析。根据数据的结构和分析的需要,有几种方法可以组合这些表。
关系与联接
Tableau Desktop 中的默认方法是使用关系。关系在合并信息时保留原始表的详细级别。关系还允许按工作表执行基于上下文的联接,使每个数据源更加灵活。在大多数情况下,关系是合并数据的推荐方法。有关详细信息,请参见关系与联接有何不同。
但是,有时您可能想要直接建立联接,无论是用于控制,还是用于联接与关系相比所需的方面,例如有意筛选或复制。
注意:关系最终会利用联接(只是在后台利用)。例如,当可视化项使用不同数据源中表中的字段时,跨数据源的关系将生成跨数据库联接。因此,提高跨数据库联接的性能可能相关。
常见问题
- 若要查看、编辑或创建联接,必须在关系画布中打开逻辑表(首次打开或创建数据源时看到的区域),并访问联接画布。
- 已发布 Tableau 数据源无法在联接中使用。若要合并已发布数据源,必须编辑原始数据源以原生包含联接或使用数据混合。
- 在联接表时,您在其上进行联接的字段必须具有相同的数据类型。如果在联接表之后更改数据类型,联接将中断。
- 联接子句中使用的字段不能在不中断联接的情况下移除。若要联接数据并能够清理重复字段,请使用 Tableau Prep Builder 而不是 Desktop
提示:虽然 Tableau Desktop 具有创建联接和执行一些基本数据调整的功能,但 Tableau Prep Builder 是为数据准备而设计的。如果需要执行多个联接、清理字段名、更改数据类型、执行多个转置或其他类型的相关数据准备,请考虑使用 Tableau Prep Builder(链接在新窗口中打开)。
创建联接
若要创建联接,请连接到相关的一个数据源或多个数据源。请参见连接到数据。
这些可以位于同一数据源中(例如数据库中的表或 Excel 电子表格中的工作表)或不同的数据源中(这称为跨数据库联接)。如果使用跨数据库联接合并表,Tableau 会对画布中的表和数据网格中的列进行着色,以向您表明数据所来自的连接。
注意:并非所有数据源都支持跨数据库联接,包括已发布的 Tableau 数据源。若要合并已发布数据源,请编辑原始数据源以原生包含联接或使用数据混合。
将第一个表拖到画布上。
从菜单中选择“打开”或双击第一个表以打开联接画布(物理层)。
双击或将另一个表拖到联接画布。
如果下一个表完全来自另一个数据源,请在左侧窗格中的“连接”下,单击“添加”按钮(在 Web 制作中为 )以将新连接添加到 Tableau 数据源。选择该连接后,将所需表拖到联接画布。
单击联接图标可配置联接。通过从数据源中使用的可用表之一中选择字段、选择联接运算符并从添加的表中选择字段来添加一个或多个联接子句。
注意:通过单击将鼠标指针悬停在联接子句右侧时显示的“x”,您可以删除不需要的联接子句。
完成后,关闭联接对话框和联接画布。
联接的剖析
联接由其类型和联接子句定义。
联接类型
通常,您可以在 Tableau 中使用四种类型的联接:内部联接、左联接、右联接和完全外部联接。如果不确定要使用哪种联接类型来合并来自多个表的数据,则应使用关系。
联接类型 | 结果 |
内部联接 | 使用内部联接来合并表时,生成的表将包含与两个表均匹配的值。 当值在两个表中不匹配时,将完全删除该值。 |
左联接 | 使用左联接来合并表时,生成的表将包含左侧表中的所有值以及右侧表中的对应匹配项。 当左侧表中的值在右侧表中没有对应匹配项时,您将在数据网格中看到 null 值。 |
右联接 | 使用右联接来合并表时,生成的表将包含右侧表中的所有值以及左侧表中的对应匹配项。 当右侧表中的值在左侧表中没有对应匹配项时,您将在数据网格中看到 null 值。 |
完全外部联接 | 使用完全外部联接来合并表时,生成的表将包含两个表中的所有值。 当任一表中的值在另一个表中没有匹配项时,您将在数据网格中看到 null 值。 |
并集 | 尽管并集不是一种联接,但并集是通过将一个表中的几行数据附加到另一个表来合并两个或更多表的另一种方法。理想情况下,您合并的表必须具有相同的字段数,并且这些字段必须具有匹配的名称和数据类型。有关合并的详细信息,请参见合并数据。 |
并非所有数据库都支持所有联接类型。如果联接对话框中的选项不可用,则可能是由于数据源的约束。
联接子句
联接是通过设置一个或多个联接子句来执行的。联接子句告知 Tableau 在表之间共享哪些字段以及如何匹配相应的行。例如,具有相同 ID 的行在结果表中对齐。
联接子句通常使用与具有相同值的行匹配的相等运算符 (=)。也可以执行非等联接,例如小于 (<) 和不等于 (<>)。
联接也可以有多个联接子句。举例来说,如果“First name”(名字)和“Last name”(姓氏)存储在单独的列中,则只有在“First name = First name”和“Last name = Last name”的情况下联接才可能是有益的。若要联接各行,必须同时满足这两个条件。或者,如果目标是在姓氏共享但名字未共享时返回结果,则联接子句可能是“First name <> First name”和“Last name = Last name”。
联接子句也可以包含计算。例如,联接子句可能是名称字段的串联“[First name] + [Last name] = [First name] + [Last name]”。请注意,并非所有数据源连接都支持在联接子句中使用计算。
关于联接键中的 Null 值
通常,会在数据库级别执行联接。如果用于联接表的字段包含 Null 值,则大多数数据库返回的数据不存在包含 Null 值的行。但是,对于某些单连接数据源,Tableau 会提供附加选项,以允许联接包含 null 值的字段与其他包含 null 值的字段。
设置了数据源后,在数据源页面上选择“数据”>“将 Null 值联接到 Null 值”。
如果该选项为灰色,则它不适用于数据源。请注意,如果您向数据源添加使用此选项的第二个连接,则联接会恢复排除包含 null 值的行的默认行为。
跨数据库联接
Tableau 允许来自不同数据源的表的联接,尽管在平台兼容的数据库方面有一些限制。跨数据库联接需要一个多连接数据源 - 即,在联接表之前创建到每个数据库的新连接。
- 连接到第一个数据源后,请使用数据窗格中的“添加”选项添加另一个连接。
注意:如果尝试添加另一个连接时,“连接”列表中未提供您想要的连接器,则不支持使用跨数据库联接合并想要联接的来源。这包括到多维数据集数据(如 Microsoft Analysis Services)、大部分纯数据提取数据(如 Google Analytics 和 OData)和已发布 Tableau Server 数据源的连接。
- 这将创建第二个连接,而不是完全不同的数据源。您可以在数据源选项卡上切换两个(或更多)连接。
- 移动到工作表并开始分析后,数据源将充当单个合并数据源。这与可以在工作表上切换的两个独立数据源形成对比。
注意:通常,联接来自同一数据库的表会产生更好的性能。这是因为查询存储在同一数据库中的数据需要的时间较短,并且会利用数据库的本机功能来执行联接。有关跨数据库联接性能的详细信息,请参见提高跨数据库联接的性能。