关联您的数据
关系是为分析合并来自多个表的数据的一种动态、灵活的方式。关系描述两个表如何基于公共字段相互关联,但不将表合并在一起。在表之间创建关系时,表将保持独立,同时保持其单独的详细级别和域。
将关系视为两个表之间的协定。当您使用这些表中的字段构建可视化项时,Tableau 会从这些表中引入数据,使用该协定借助适当的联接生成查询。
了解详细信息:使用关系合并数据的能力是 Tableau 的新数据建模功能的一个重要功能。有关详细信息,请参见“数据源和分析的变化”(链接在新窗口中打开)。在以下 Tableau 博客文章中详细了解关系的工作方式:
观看视频:有关在 Tableau 中使用关系的简介,请观看这个时长 5 分钟的视频。
注意:本视频中显示的用于编辑关系的界面与当前版本略有不同,但具有相同的功能。
Action Analytics(链接在新窗口中打开) 还提供有关在 Tableau 中使用关系的有用视频播客。有关介绍,请参见 Why did Tableau Invent Relationships?(Tableau 为何发明关系?)(链接在新窗口中打开)单击 Action Analytics 网站 Library(库)(链接在新窗口中打开)中的“视频播客”以查看其他播客。
什么是关系?
关系是在数据源中的逻辑表之间创建的灵活连接线。有些人亲切地称关系为“关系线”,但我们通常在帮助文档中将其称为“关系”。
我们建议使用关系作为合并数据的第一种方法,因为它使数据准备和分析更加轻松直观。仅在绝对需要时才使用联接(链接在新窗口中打开)。
与为多表数据使用联接相比,关系提供了若干优点:
- 您无需配置表之间的联接类型(链接在新窗口中打开)。您只需要选择字段来定义关系。
- 关联的表保持独立和不同;它们不会合并到单个表中。
- 关系使用联接,但它们是自动的。Tableau 根据可视化项中使用的字段自动选择联接类型。在分析过程中,Tableau 会智能地调整联接类型,并在数据中保留本机详细级别。
- Tableau 使用关系根据工作表中正在使用的字段的当前上下文,在分析期间生成正确的聚合和适当的联接。
- 单个数据源中支持位于不同详细级别的多个表。您可以生成包含更多表的数据模型,并减少构建可视化项所需的数据源数。
- 不匹配的度量值不会被删除(不会意外丢失数据)。
- 使用关系可防止数据重复和筛选问题,这些问题有时可能由联接导致。
- Tableau 会仅针对与当前视图相关的数据生成查询。
若要了解相关信息,请参见:
关系的要求
- 在关联表时,定义关系的字段必须具有相同的数据类型。
- 不能基于地理字段定义关系。
- 数据模型中不支持循环关系。
- 无法定义已发布数据源之间的关系。
限制使用关联表的好处的因素包括:
- 表中的脏数据(例如,创建时未考虑结构良好的模型且包含多个表中度量值和维度混合的表)可能会使多表分析更加复杂。
- 使用数据源筛选器会限制 Tableau 在数据中执行联接剔除的能力。联接剔除是定义 Tableau 如何通过移除不必要的联接来简化查询的术语。
- 具有多个跨关系的不匹配值的表。
- 在 Tableau 版本 2024.2 及更高版本中,您可以对共享维度进行建模,并使用多事实关系来使用多个基表。有关详细信息,请参见关于多事实关系数据模型(链接在新窗口中打开)、何时使用多事实关系模型(链接在新窗口中打开)和构建多事实关系数据模型(链接在新窗口中打开)。
不能关联的数据
完全支持大多数关系连接类型。多维数据集、SAP HANA(具有 OLAP 属性)、JSON 和 Google Analytics 仅在 Tableau 2020.2 中支持单个逻辑表。存储过程只能在单个逻辑表中使用。
已发布数据源不能相互关联。
不支持
- 多维数据集数据库不支持新的逻辑层。连接到多维数据集可提供与 2020.2 之前相同的体验。
- 存储过程:不支持联合、关系或关联。它们在单个逻辑表中表示,并且不允许打开联接/并集画布(物理 层)。
- Splunk:不支持左联接(因此与逻辑表相关)。
- JSON:不支持联合、自定义 SQL、联接或关系(仅限并集)。
- 不支持 LOD 计算的数据源。有关详细信息,请参见“详细级别表达式的数据源约束”(链接在新窗口中打开)。
有限支持
- Salesforce 和 WDC 标准连接:这些连接表示为逻辑表中的联接表。目前仅支持为单个逻辑表数据源添加这些连接。标准连接无法联接到现有表。
- SAP HANA:当连接具有 OLAP 属性集时,当前不支持关联逻辑表。
创建和定义关系
对于单基表模型,将第一个表拖动到数据源的顶层画布后,拖到画布的每个新表都必须与现有表相关。在逻辑层中的表之间创建关系时,您将为数据源构建数据模型。
在 2024.2 及更高版本中:对于多基表模型,添加到模型的每个新表都必须至少与一个基表树相关。有关详细信息,请参见构建多事实关系数据模型(链接在新窗口中打开)。
创建关系
您在数据源的逻辑层中创建关系。这是您在“数据源”页面中看到的画布的默认视图。
本主题中的步骤专门介绍如何为单基表模型设置关系。
在版本 2024.2 及更高版本中,您可以构建单基表模型或多基表模型。有关如何创建具有多个基表的多事实关系的信息,请参见构建多事实关系数据模型(链接在新窗口中打开)。
- 将一个表拖到画布上。
对于单基表模型:您添加到画布的第一个表将成为基表。您添加的所有其他表都将与该表相关。
对于多基表模型:您需要决定哪些表是基表。若要创建另一个基表,请将表从左侧窗格拖到“新基表”放置区。有关详细信息,请参见构建多事实关系数据模型(链接在新窗口中打开)。
- 将另一个表拖到画布上。当您看到要关联的两个表之间的“关系线”时,将该表放下。
关系设置在“表详细信息”窗格中的画布下方打开。Tableau 会自动尝试基于现有键约束和匹配字段创建关系,从而定义关系。如果无法确定匹配字段,则需要选择它们。
更改字段:选择字段对,然后从下面的字段列表中选择以设置新的匹配字段对。
添加多个字段对:选择第一字段对后,选择“关闭”,然后选择“添加更多字段”。
果未检测到约束,则会创建“多对多”关系,并将引用完整性设置为“某些记录匹配”。这些默认设置是安全的选择,为您的数据源提供了最大的灵活性。默认设置支持完全外部联接,并通过在分析期间形成联接之前聚合表数据来优化查询。每个表中的所有列和行数据将可用于分析。
在许多分析方案中,使用关系的默认设置可为您提供分析所需的所有数据。即使数据为多对一或一对一,使用多对多关系也将起作用。如果您知道数据的特定关联基数和引用完整性,则可以调整性能选项设置(链接在新窗口中打开)以更准确地描述数据,并优化 Tableau 查询数据库的方式。
根据需要按照相同的步骤添加更多表。
构建多表关联数据源后,可以深入了解该数据。有关详细信息,请参见分析如何适用于使用关系的多表数据源和多表分析疑难解答(链接在新窗口中打开)。
注意:Salesforce 连接器不支持不等运算符。从版本 2021.4 开始,Google Big Query 和 MapR 连接器支持非对等联接。从版本 2022.3 开始,MapR 连接器已弃用。
移动表以创建其他关系
若要移动表,请将其拖到其他表的旁边。或者,将鼠标悬停在表上,选择箭头,然后选择“移动”。
提示:将表拖到另一个表上以替换它。
更改数据模型的根表或基表
您可以将根表(版本 2020.2 至 2024.1)或基表(版本 2024.2 及更高版本)与另一个下游表交换。右键单击数据模型中的另一个逻辑表,然后选择“与根交换”或“与基表(表名称)交换”以进行更改。
从关系中移除表
若要移动表,请将光标鼠标悬停在表上,选择箭头,然后选择“移除”。
删除画布中的表也会自动删除其关联的下级。
查看关系
- 将光标悬停在关系线(“关系线”)上以查看定义它的匹配字段。您还可以将光标悬停在任何逻辑表上,以查看它包含的内容。
编辑关系
- 选择关系线即可在“表详细信息”窗格中打开关系设置。您可以添加、更改或移除用于定义关系的字段。添加更多字段对以创建复合关系。
- 添加多个字段对:选择第一字段对后,选择“关闭”,然后选择“添加更多字段”。
有关创建关系的提示
- 拖到画布的第一个表将成为数据源中数据模型的根表或基表。拖出基表后,可以按任意顺序拖出更多表。您将需要考虑哪些表应彼此关联,以及为每个关系定义的匹配字段对。
- 在开始创建关系之前,在分析之前或期间查看数据源中数据对于让您了解每个表的范围非常有用。有关详细信息,请参见查看基础数据。当关系无效时,您也可以使用“查看数据”来查看表的基础数据。
- 如果您正在处理星型架构中的数据,则首先将事实数据表拖出以使其成为基表,然后将维度表与该表相关联会很有帮助。
- 每个关系必须至少由一对匹配的字段组成。添加多个字段对以创建复合关系。匹配的字段对在基础数据库中必须具有相同的数据类型。更改“数据源”页面中的数据类型不会更改此要求。Tableau 使用数据库中的数据类型进行查询。
- 关系可以基于计算字段。还可以指定在定义关系时使用运算符来指定应如何比较字段。
- 删除画布中的表也会自动删除其关联的下级。
- 您可以将根表(版本 2020.2 至 2024.1)或基表(版本 2024.2 及更高版本)与另一个下游表交换。右键单击数据模型中的另一个逻辑表,然后选择“与根交换”或“与基表(表名称)交换”以进行更改。
验证数据源中的关系
有几个选项可用于验证数据模型以进行分析。为数据源创建模型时,我们建议转到工作表,选择该数据源,然后构建可视化项以浏览记录计数、不匹配的值、null 值或重复的度量值。尝试跨不同的表处理字段,以确保所有内容都符合您的预期。
要查找的内容:
- 数据模型中的关系是否为它们的表使用正确的匹配字段?
- 将不同的维度和度量拖到视图中会产生什么结果?
- 您是否看到预期的行数?
- 复合关系会使关系更准确吗?
- 如果从默认设置更改了任何性能选项设置,则可视化项中的值是否符合预期?如果不符合预期,请检查设置,或重置为默认值。
用于验证关系和数据模型的选项:
- 每个表以名为 TableName(Count)的字段的形式在该表的详细级别包括其记录的计数。若要查看表的计数,请将其“计数”字段拖到视图中。若要查看所有表的计数,请在“数据”窗格中选择每个表的“计数”字段,然后在“智能显示”中单击“文本表”。
- 在“数据”窗格中单击“查看数据”以查看每个表的行数和数据。此外,在开始创建关系之前,在分析之前或期间查看数据源中数据对于让您了解每个表的范围非常有用。有关详细信息,请参见查看基础数据(链接在新窗口中打开)。
- 将维度拖到行上以在状态栏中查看行数。若要查看不匹配的值,请单击“分析”菜单,然后选择“表布局”>“显示空行”或“显示空列”。您还可以将不同的度量从可视化项中呈现的其中一个表拖到视图,例如 <YourTable>(Count) 。这可确保从该表中看到维度的所有值。
提示:如果要查看为关系生成的查询,可以使用 Tableau Desktop 中的性能记录器。
- 单击“帮助”菜单,然后选择“设置和性能”>“启动性能记录”。
- 将字段拖到视图中以构建可视化项。
- 单击“帮助”菜单,然后选择“设置和性能”>“停止性能记录”。
- 在“性能摘要”仪表板中的“按时间排序的事件”下,单击“正在执行的查询”栏并查看下面的查询。
另一个更高级的选项是使用 GitHub 上的 Tableau 日志查看器(链接在新窗口中打开)。您可以使用 end-protocol.query
筛选特定关键字。有关详细信息,请从 GitHub 中的 Tableau 日志查看器 wiki 页面(链接在新窗口中打开)开始。
仅维度可视化项
将多表数据源与相关表一起使用时:如果构建仅维度可视化项,Tableau 将使用内部联接,并且您将看不到完整的不匹配域。
若要查看维度值的部分组合,您可以:
- 使用“显示空行/显示空列”来查看所有可能的行。单击“分析”菜单,然后选择“表布局”>“显示空行”或“显示空列”。
- 将度量从可视化项中呈现的一个表添加到视图,例如 <YourTable>(Count) 。这可确保从该表中看到维度的所有值。
有关详细信息,请参见“多表与单表数据源中的分析”(链接在新窗口中打开)和“多表分析疑难解答”(链接在新窗口中打开)。
关系(逻辑表)与联接(物理表)
虽然很相似,但联接和关系在 Tableau 中的行为方式不同,并且是在数据模型的不同层中定义的(链接在新窗口中打开)。您在数据源的顶层逻辑层处的逻辑表之间创建关系。您在数据源的物理层中的物理表之间创建联接。
在分析开始之前,联接会将两个表中的数据合并到单个表中。将表合并在一起可能会导致从一个或两个表中的数据重复或被筛选掉;如果使用左联接、右联接或完全外部联接,则还会导致 NULL 行被添加到数据中。对联接数据进行分析时,需要确保正确处理联接对数据的影响。
注意:当可能需要联接的复制或筛选效果时,请使用联接将表合并在一起,而不是将关系。双击逻辑表以打开物理层并添加联接的表。
关系描述两个独立表如何相互关联,但不将表合并在一起。这样可以避免联接中可能出现的数据重复和筛选问题,并使数据处理更加容易。
关系 | 联接 |
---|---|
在“关系”画布中的逻辑表之间定义(逻辑层) | 在“联接/并集”画布中的物理表之间定义(物理层) |
不需要您定义联接类型 | 需要联接计划和联接类型 |
充当联接或并联的表的容器 | 合并到其逻辑表中 |
仅查询与可视化项相关的数据可以调整基数和引用完整性设置来优化查询。 | 作为每个查询的一部分运行 |
详细级别位于可视化项的聚合处 | 详细级别位于单个表的行级别 |
联接类型由 Tableau 根据分析上下文自动形成。Bleau 根据可视化项中的度量和维度确定必要的联接。 | 联接类型是静态的,并且在数据源中是固定的,与分析上下文无关。联接和并集是在分析之前建立的,不会更改。 |
行不重复 | 合并的表数据可能会导致重复 |
除非显式排除,否则不匹配的记录包含在聚合中 | 合并数据中会忽略不匹配的记录 |
在多个详细级别创建独立域 | 支持需要单个数据表的方案,例如数据提取筛选器和聚合 |
关系与混合
尽管关系和混合都支持在不同详细级别进行分析,但它们有明显的差异。使用混合的原因之一是将已发布的数据源合并用于分析。
关系 | 混合 |
---|---|
在数据源中定义 | 在主数据源与辅助数据源之间的工作表中定义 |
可发布 | 无法发布 |
所有表在语义上相等 | 取决于选择的主数据源和辅助数据源,以及这些数据源的结构。 |
支持完全外部联接 | 仅支持左联接 |
在本地计算 | 作为 SQL 查询的一部分计算 |
相关字段是固定的 | 关联的字段因工作表而异(可以逐工作表自定义) |
用于合并数据的不同选项的功能:关系、联接和混合
可以通过多种方法来合并数据表,每种方法都有自己的首选方案和细微差别。
关联 | 在合并来自不同详细级别的数据时使用。
|
联接 | 在需要在同一行结构上添加更多数据列时使用。
|
并集 | 在需要添加具有相同列结构的更多行数据时使用。
|
混合 | 在合并来自不同详细级别的数据时使用。
|