关联您的数据

关系是为分析合并来自多个表的数据的一种动态、灵活的方式。关系描述两个表如何基于公共字段相互关联,但不将表合并在一起。在表之间创建关系时,表将保持独立,同时保持其单独的详细级别和域。

将关系视为两个表之间的协定。当您使用这些表中的字段构建可视化项时,Tableau 会从这些表中引入数据,使用该协定借助适当的联接生成查询。

了解详细信息:将数据关联的能力是 Tableau 的新数据建模功能的一个重要功能。有关详细信息,请参见数据源和分析的变化。在以下 Tableau 博客文章中详细了解关系的工作方式:

观看视频:有关数据源增强功能的概述以及在 Tableau 中使用关系的简介,请参阅这个时长 5 分钟的视频。

什么是关系?

关系是在数据源中的逻辑表之间创建的灵活连接线。有些人亲切地称关系为“关系线”,但我们通常在帮助文档中将其称为“关系”。

我们建议使用关系作为合并数据的第一种方法,因为它使数据准备和分析更加轻松直观。仅在绝对需要时才使用联接(链接在新窗口中打开)

与为多表数据使用联接相比,关系提供了若干优点:

  • 您无需在表之间配置联接类型。您只需要选择字段来定义关系。
  • 关联的表保持独立和不同;它们不会合并到单个表中。
  • 关系使用联接,但它们是自动的。Tableau 根据可视化项中使用的字段自动选择联接类型。在分析过程中,Tableau 会智能地调整联接类型,并在数据中保留本机详细级别。
  • Tableau 使用关系根据工作表中正在使用的字段的当前上下文,在分析期间生成正确的聚合和适当的联接。
  • 单个数据源中支持位于不同详细级别的多个表。您可以生成包含更多表的数据模型,并减少构建可视化项所需的数据源数。
  • 不匹配的度量值不会被删除(不会意外丢失数据)。
  • 避免数据重复和筛选问题,这些问题有时可能由联接导致。
  • Tableau 将仅针对与当前视图相关的数据生成查询。

关系的要求

  • 在关联表时,定义关系的字段必须具有相同的数据类型。
  • 不能基于地理字段定义关系。
  • 数据模型中不支持循环关系。
  • 无法编辑已发布数据源中的关系。
  • 无法定义已发布数据源之间的关系。
  • 工作簿必须使用嵌入式数据源,您才能在 Tableau Online 或 Tableau Server 的“数据源”页面中编辑关系和性能选项。

限制使用关联表的好处的因素:

  • 表中的脏数据(即创建时未考虑结构良好的模型且包含多个表中度量值和维度混合的表)可能会使多表分析更加复杂。
  • 使用数据源筛选器将限制 Tableau 在数据中执行联接剔除的能力。联接剔除是定义 Tableau 如何通过移除不必要的联接来简化查询的术语。
  • 具有许多跨关系的不匹配值的表。
  • 将多个事实数据表与多个维度表相关联(尝试对共享或一致的维度建模)。

不能关联的数据

完全支持大多数关系连接类型。多维数据集、SAP HANA(具有 OLAP 属性)、JSON 和 Google Analytics 仅在 Tableau 2020.2 中支持单个逻辑表。存储过程只能在单个逻辑表中使用。

已发布数据源不能相互关联。您也不能编辑已发布数据源。

不支持

  • 多维数据集数据库不支持新的逻辑层。连接到多维数据集可提供与 2020.2 之前相同的体验。
  • 存储过程:不支持联合、关系或关联。它们在单个逻辑表中表示,并且不允许打开联接/并集画布(物理 层)。
  • Splunk:不支持左联接(因此与逻辑表相关)。
  • JSON:不支持联合、自定义 SQL、联接或关系(仅限并集)。
  • 不支持 LOD 计算的数据源。有关详细信息,请参见详细级别表达式的数据源约束

有限支持

  • Salesforce 和 WDC 标准连接:这些连接表示为逻辑表中的联接表。目前仅支持为单个逻辑表数据源添加这些连接。标准连接无法联接到现有表。
  • SAP HANA:当连接具有 OLAP 属性集时,当前不支持关联逻辑表。

创建和定义关系

将第一个表拖动到数据源的顶层画布后,拖到画布的每个新表都必须与现有表相关。在逻辑层中的表之间创建关系时,您将为数据源构建数据模型。

注意:无法编辑已发布数据源的数据模型。

创建关系

您在数据源的逻辑层中创建关系。这是您在“数据源”页面中看到的画布的默认视图。

  1. 将一个表拖到画布上。

  2. 将另一个表拖到画布上。当你看到两个表之间的“关系线”时,将该表放下。

    “编辑关系”对话框将打开。Tableau 会自动尝试基于现有键约束和匹配字段创建关系,从而定义关系。如果无法确定匹配字段,则需要选择它们。

    若要更改字段:选择字段对,然后单击下面的字段列表中以选择新的匹配字段对。

    若要添加多个字段对:选择第一字段对后,单击“关闭”,然后单击“添加更多字段”

    注意:在Tableau 2020.3 及更高版本中,您可以基于计算字段创建关系,并使用关系定义中的运算符比较用于关系的字段。请注意,以下连接器不支持不等式运算符:Google BigQuery、MapR、Salesforce。

    果未检测到约束,则会创建“多对多”关系,并将引用完整性设置为“某些记录匹配”。这些默认设置是安全的选择,为您的数据源提供了最大的灵活性。默认设置支持完全外部联接,并通过在分析期间形成联接之前聚合表数据来优化查询。每个表中的所有列和行数据将可用于分析。

    在许多分析方案中,使用关系的默认设置将为您提供分析所需的所有数据。即使数据实际上为多对一或一对一,使用多对多关系也将起作用。如果您知道数据的特定关联基数和引用完整性,则可以调整性能选项设置(链接在新窗口中打开)以更准确地描述数据,并优化 Tableau 查询数据库的方式。

  3. 根据需要按照相同的步骤添加更多表。

构建多表关联数据源后,可以深入了解该数据。有关详细信息,请参见分析如何适用于使用关系的多表数据源多表分析疑难解答

移动表以创建其他关系

若要移动表,请将其拖到其他表的旁边。或者,将鼠标悬停在表上,单击箭头,然后选择“移动”。

提示:将表拖到另一个表上以替换它。

从关系中移除表

若要移动表,请将光标鼠标悬停在表上,单击箭头,然后选择“移除”。

查看关系

  • 将光标悬停在关系线(“关系线”)上以查看定义它的匹配字段。您还可以将光标悬停在任何逻辑表上,以查看它包含的内容。


编辑关系

  • 单击关系行以打开“编辑关系”对话框。您可以添加、更改或移除用于定义关系的字段。添加其他字段对以创建复合关系。

    若要添加多个字段对:选择第一字段对后,单击“关闭”,然后单击“添加更多字段”

有关创建关系的提示

  • 拖到画布的第一个表将成为数据源中数据模型的根表。拖出根表后,可以按任意顺序拖出其他表。您需要考虑哪些表应彼此关联,以及为每个关系定义的匹配字段对。
  • 在开始创建关系之前,在分析之前或期间查看数据源中数据对于让您了解每个表的范围非常有用。有关详细信息,请参见查看基础数据。当关系无效时,您也可以使用“查看数据”来查看表的基础数据。
  • 如果要创建星形架构,则首先将事实数据表拖出,然后将维度表与该表相关联会很有帮助。
  • 每个关系必须至少由一对匹配的字段组成。添加多个字段对以创建复合关系。匹配的字段对必须具有相同的数据类型。更改“数据源”页面中的数据类型不会更改此要求。Tableau 仍将使用基础数据库中的数据类型进行查询。
  • 关系可以基于计算字段。还可以指定在定义关系时使用运算符来指定应如何比较字段。
  • 删除画布中的表也会自动删除其关联的下级。如果删除根表,模型中的所有其他表也将被移除。

验证数据源中的关系

有几个选项可用于验证数据模型以进行分析。为数据源创建模型时,我们建议转到工作表,选择该数据源,然后构建可视化项以浏览记录计数、不匹配的值、null 值或重复的度量值。尝试跨不同的表处理字段,以确保所有内容都符合您的预期。

要查找的内容:

  • 数据模型中的关系是否为它们的表使用正确的匹配字段?
  • 将不同的维度和度量拖到视图中会产生什么结果?
  • 您是否看到预期的行数?
  • 复合关系会使关系更准确吗?
  • 如果从默认设置更改了任何性能选项设置,则您在可视化项中看到的值是否符合预期?如果不符合,您可能需要检查设置,或重置为默认值。

用于验证关系和数据模型的选项:

  • 每个表以名为 TableName(Count)的字段的形式在该表的详细级别包括其记录的计数。若要查看表的计数,请将其“计数”字段拖到视图中。若要查看所有表的计数,请在“数据”窗格中选择每个表的“计数”字段,然后在“智能显示”中单击“文本表”。
  • 在“数据”窗格中单击“查看数据”以查看每个表的行数和数据。此外,在开始创建关系之前,在分析之前或期间查看数据源中数据对于让您了解每个表的范围非常有用。有关详细信息,请参见查看基础数据
  • 将维度拖到行上以在状态栏中查看行数。若要查看不匹配的值,请单击“分析”菜单,然后选择“表布局”>“显示空行”“显示空列”。您还可以将不同的度量从可视化项中呈现的其中一个表拖到视图,例如 <YourTable>(Count) 。这可确保从该表中看到维度的所有值。

提示:如果要查看为关系生成的查询,可以使用 Tableau Desktop 中的性能记录器。

  1. 单击“帮助”菜单,然后选择“设置和性能”>“启动性能记录”
  2. 将字段拖到视图中以构建可视化项。
  3. 单击“帮助”菜单,然后选择“设置和性能”>“停止性能记录”
  4. 在“性能摘要”仪表板中的“按时间排序的事件”下,单击“正在执行的查询”栏并查看下面的查询。

另一个更高级的选项是使用 GitHub 上的 Tableau 日志查看器(链接在新窗口中打开)。您可以使用 end-protocol.query 筛选特定关键字。有关详细信息,请从 GitHub 中的 Tableau 日志查看器 wiki 页面(链接在新窗口中打开)开始。

仅维度可视化项

将多表数据源与相关表一起使用时:如果构建仅维度可视化项,Tableau 将使用内部联接,并且您将看不到完整的不匹配域。

若要查看维度值的部分组合,您可以:

  • 使用“显示空行/显示空列”来查看所有可能的行。单击“分析”菜单,然后选择“表布局”>“显示空行”“显示空列”
  • 将度量从可视化项中呈现的一个表添加到视图,例如 <YourTable>(Count) 。这可确保从该表中看到维度的所有值。

有关详细信息,请参见分析如何适用于使用关系的多表数据源多表分析疑难解答

关系(逻辑表)与联接(物理表)

虽然很相似,但联接和关系在 Tableau 中的行为方式不同,并且是在数据模型的不同层中定义的。您在数据源的顶层逻辑层处的逻辑表之间创建关系。您在数据源的物理层中的物理表之间创建联接。

在分析开始之前,联接会将两个表中的数据合并到单个表中。将表合并在一起可能会导致从一个或两个表中的数据重复或被筛选掉;如果使用左联接、右联接或完全外部联接,则还会导致 NULL 行被添加到数据中。对联接数据进行分析时,需要确保正确处理联接对数据的影响。

注意:当可能需要联接的复制或筛选效果时,请使用联接将表合并在一起,而不是将关系。双击逻辑表以打开物理层并添加联接的表。

关系描述两个独立表如何相互关联,但不将表合并在一起。这样可以避免联接中可能出现的数据重复和筛选问题,并使数据处理更加容易。

关系 联接
在“关系”画布中的逻辑表之间定义(逻辑层) 在“联接/并集”画布中的物理表之间定义(物理层)
不需要您定义联接类型 需要联接计划和联接类型
充当联接或并联的表的容器 合并到其逻辑表中
仅查询与可视化项相关的数据可以调整基数和引用完整性设置来优化查询。 作为每个查询的一部分运行
详细级别位于可视化项的聚合处 详细级别位于单个表的行级别
联接类型由 Tableau 根据分析上下文自动形成。Bleau 根据可视化项中的度量和维度确定必要的联接。 联接类型是静态的,并且在数据源中是固定的,与分析上下文无关。联接和并集是在分析之前建立的,不会更改。
行不会重复 合并的表数据可能会导致重复
除非显式排除,否则不匹配的记录包含在聚合中 合并数据中会忽略不匹配的记录
在多个详细级别创建独立域 支持需要单个数据表的方案,例如数据提取筛选器和聚合

关系与混合

尽管关系和混合都支持在不同详细级别进行分析,但它们有明显的差异。使用混合的原因之一是将已发布的数据源合并用于分析。

关系 混合
在数据源中定义 在主数据源与辅助数据源之间的工作表中定义
可发布 无法发布
所有表在语义上相等 取决于选择的主数据源和辅助数据源,以及这些数据源的结构。
支持完全外部联接 仅支持左联接
在本地计算 作为 SQL 查询的一部分计算
相关字段是固定的 关联的字段因工作表而异(可以逐工作表自定义)

用于合并数据的不同选项的功能:关系、联接和混合

可以通过多种方法来合并数据表,每种方法都有自己的首选方案和细微差别。

关联

在合并来自不同详细级别的数据时使用。

  • 需要两个逻辑表之间的匹配字段。多个匹配字段对可以定义关系。
  • 根据字段在可视化项中关联和使用的方式自动使用正确的聚合和上下文联接。
  • 支持多对多联接和外部联接。
  • 关系对于整个工作簿是一致的,并且可发布。
  • 可以发布,但不能关联已发布数据源,也不能编辑已发布数据源中的关系。
  • 不能基于计算字段或地理字段定义关系。
  • 使用数据源筛选器限制了关系的联接剔除优势。
联接

在需要在同一行结构上添加更多数据列时使用。

  • 需要两个物理表之间的公共字段。
  • 需要建立联接子句和联接类型。
  • 可以在计算上联接。
  • 联接的物理表将合并到具有固定数据组合的单个逻辑表中。
  • 如果所有表中不存在字段或值,则可能会导致数据丢失(取决于使用的联接类型)。
  • 如果字段处于不同的详细级别,则可能会导致数据重复。
  • 可以使用数据源筛选器。
并集

在需要添加具有相同列结构的更多行数据时使用。

  • 基于两个表之间的匹配列。
  • 联合的物理表将合并到具有固定数据组合的单个逻辑表中。
混合

在合并来自不同详细级别的数据时使用。

  • 可用于合并已发布数据源,但不能发布。
  • 可以在关系数据源和多维数据集数据源之间使用。
  • 数据源可以按工作表混合。
  • 始终有效地左联接(可能会丢失来自辅助数据源的数据)。

此部分中的其他文章

感谢您的反馈!