---
schema_version: "1"
id: a6e205c4b67d0b70aa572d99539c87408f3af487caaa765e3c03a85ccc961af4
title: 不要害怕关系
collection: tableau
version: next
locale: zh-cn
portal_url: https://docs.salesforce.com/tableau/next/zh-cn/public/desktop/datasource_dont_be_scared.md
canonical_url: https://help.tableau.com/v0.0/public/desktop/zh-cn/datasource_dont_be_scared.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 9b625f14be62b1aef37b4db6a2631785b2bfbfe4d853add2081db9ecc1de4159
description: Get comfortable with relationships that combine tables without flattening them into one table.
---
[跳转到主要内容](#main-content)

# 不要害怕关系

新的数据建模功能可创建围绕关系构建的灵活数据源。

关系通过查看这些表共有的列（字段）将分析中每个表中的信息汇集在一起来合并不同表中的数据。

与联接或并集不同，关系无需将多个表拼合为单个表即可形成数据源。因此，相关数据源知道每个字段来自哪个表。这意味着每个字段都会保留其上下文或详细级别。因此，相关数据源可以处理粒度不同的表，而不会出现重复或数据丢失问题。

在相关数据源中，联接不会预先修复。不会合并所有数据（并且无论每个可视化项需要什么，都必须处理所有数据），而只是合并相关数据 — 按工作表在必要时合并。在您拖放时，Tableau 会评估相关字段和表的关系。这些关系用于编写具有正确联接类型、聚合和 null 处理的查询。

您可以考虑数据如何组合在一起，以及您想要回答什么问题，而不是如何合并数据或补偿数据源中的项目。

关系不会取代以前合并数据的方式：联接、并集和混合。相反，关系是将来自多个来源的数据汇集在一起的新的灵活方式。现有方法不会消失，并且在特定情形下仍然有用。

**注意**：若要了解关系查询工作方式的相关信息，请参见以下 Tableau 博客文章：

- [关系，第 1 部分：在 Tableau 中引入新的数据建模](https://www.tableau.com/about/blog/2020/5/relationships-part-1-meet-new-tableau-data-model)
- [关系，第 2 部分：提示和技巧](https://www.tableau.com/about/blog/2020/5/relationships-part-2-tips-and-tricks)
- [关系，第 3 部分：跨多个相关表提出问题](https://www.tableau.com/about/blog/2020/6/relationships-part-3-asking-questions-across-multiple-related-tables)

另请参见 [Action Analytics](https://action-analytics.com/library/) 中有关关系的视频播客，例如[为什么 Tableau 发明了关系？](https://action-analytics.com/ep-1-why-did-tableau-invent-relationships/)单击 [Library（库）](https://action-analytics.com/library/)中的“Video Podcast”（视频播客）以查看更多信息。

## 使用关系

本主题将演练如何构建相关数据源，并使用数据源进行分析。如果希望继续，您可以[下载 Bookshop 数据集](https://help.tableau.com/current/pro/desktop/zh-cn/bookshop_data.htm)。为原始数据选择 Bookshop.xlsx 以便从头开始，或者选择 MinimalBookshop.tdsx 以从为您配置的相关数据源基础开始。

**注意：**“关系”在 Tableau 2020.2 及更高版本中可用。

### 视频：迁移的数据

如果在 Tableau 2020.2 或更高版本中打开来自早期版本的 Tableau（版本 2020.1 或更低版本）的现有工作簿，则数据源选项卡可能会显示“迁移的数据”表。

本主题中嵌入了多个视频。为方便起见，每个视频下方的可展开部分会提供转录文稿。

“迁移的数据”视频转录文稿

在关系功能推出之前（版本 2020.2 之前）创建的工作簿中，数据源可能看起来不同。如果存在联接或合并的表，则它们显示为名为“迁移的数据”的单个逻辑表。双击以查看基础表 — 它们仍然存在，您的分析仍将按预期方式进行。

请注意，当您仅使用“迁移的数据”表时，“数据”窗格的运行情况与 Tableau Desktop 的早期版本更类似。

您甚至可以将新表直接与“迁移的数据”表相关联，以扩展数据模型。

将关系添加到数据模型之后，“数据”窗格将更新为新布局，每个表中保留维度和度量，并且“迁移的数据”表显示为单个合并的表。

### 视频：性能选项

**注意**：本视频中显示的用于编辑关系的界面与当前版本略有不同，但具有相同的功能。

“性能选项”视频转录文稿

对于任何关系，都有性能选项以及相关字段。Tableau 会自动为这些选项选择安全的默认值。但是，如果您确定数据的特征，更改这些选项可以为 Tableau 提供有关如何在分析期间以最佳方式配置自动联接的详细信息。设置关联基数和引用完整性选项可向 Tableau 提供有关如何优化查询的详细信息。

#### 关联基数

关联基数表示链接字段记录是否唯一。如果多本书的作者可能相同，但每个作者在作者表中只列出一次，那么在这两个表之间，AuthID 的关联基数将是“多本书一名作者”。此设置会影响 Tableau 在联接前后处理聚合的方式。

#### 引用完整性

引用完整性指示是否保证一个表中的记录在另一个表中具有关系。如果每本书都有作者，则书对作者具有引用完整性。如果不是每名作者都有书，则作者对书没有引用完整性。此设置会影响 Tableau 选择联接类型和处理不匹配记录的方式。

有关详细信息，请参见[关联基数和引用完整性](https://help.tableau.com/v0.0/public/desktop/zh-cn/cardinality_and_ri.htm)。

## 示例：书店数据

我们稍后会用这个数据源做一些分析，所以让我们来谈谈数据。

数据集围绕的是（虚构的）书籍，考虑书籍和版本之间的区别很重要。一本书本身就是概念性的作品，具有诸如书名、作者和体裁等属性。书籍也有不同的版本，具有诸如价格和格式（精装或平装）等属性，这些属性由 ISBN 标识。书的版本包含出版商和页数信息，而对于书而言，其信息可能是“获得了某个奖项或是丛书中的一本”。

您可以下载 [MinimalBookshop.tdsx](https://help.tableau.com/samples/en-us/bookshop/MinimalBookshop.tdsx)，跟着步骤进行操作，或者大胆一点，依据 [Bookshop.xlsx](https://help.tableau.com/samples/en-us/bookshop/Bookshop.xlsx) 自己建立模型。请注意，在合并表后，可以隐藏许多 ID 字段。

![书籍数据的数据库架构。](/tableau/next/zh-cn/public/desktop/zh-cn/Img/Bookshop_schema.png)

### 视频：使用多个表

**注意**：本视频中显示的用于编辑关系的界面与当前版本略有不同，但具有相同的功能。

“使用多个表”视频转录文稿

### “数据源”页面

在转到工作表标签之前，请注意，下面的数据网格视图一次只显示一个表中的字段。如果我们单击另一个表，我们将看到它包含的数据。没有总体视图，因为在分析中使用关联的数据之前，这些数据不会汇集在一起。目前，数据保留在每个表中，因此会按表显示。

如果我们单击具有基础联接或并集的表，我们确实会看到合并的数据，以及可能包含的任何 null 值。

### “数据”窗格

当我们单击某个工作表时，您可能会注意到“数据”窗格看起来与 Tableau 的早期版本不同。它现在侧重于表，而不是主要将维度和度量组织在一起。每个表都有其自己的尺寸和度量细分，由这条线表示。如果您愿意，仍可以按文件夹分组。

### 记录数和计数

也没有**“记录数”**字段。这是因为“记录数”的概念已更改。数据源没有单个“记录数”。每个表都有一个**“计数”**字段，可以视为该表的本地“记录数”。

若要同时了解多个表的记录数，可以使用“度量名称”和“度量值”或选择多个计数字段，并使用“智能显示”来创建可视化项。

### 视频：基本计算

“基本计算”视频转录文稿

我们可以进行一些计算，使此数据集更易于处理。首先，我们可以为完整的作者姓名创建计算，该姓名将名字和姓氏组合在一起。我们将创建一个名为“**Author Name**”（作者姓名）的计算，它仅包含名字、空格和姓氏。请注意，此计算保留在 Author 表中，因为它仅使用该表中的字段。

\[First Name\] + " " + \[Last Name\]

当我们进行销售时，销售金额是价格（由出版商确定，并且特定于版本或 ISBN）以及销售时的任何折扣的组合。因此，计算“**Sales Amount**”（销售金额）将是价格乘以 1 减去折扣。 请注意，我们使用 ZN（或零 Null）函数来处理无折扣的销售，以便不会得到 null 值。此计算将转到“数据”窗格底部的共享区域，因为它使用来自多个表的字段。聚合计算也将转到“数据”窗格的底部。

\[Price\] \* (1-ZN(\[Discount\]))

### 视频：集和组

“集和组”视频转录文稿

我们将为书籍创建一个集，以确定它们是否在某个系列中。在 Book 表中，右键单击“Title”（书名），并选择“创建”>“集”。我们会将其命名为“**In a series**”（在系列中）。在“**条件**”选项卡上，选择“**按字段**”，并选择“**Series Name**”（系列名称）、“**Count as >= 1**”（计数 >= 1）。

在 Edition 表中，“Format”（格式）字段非常详细，包括指定大众市场和平装本。有时，该细节很有用，但有时我们希望在精装本和平装本之间进行归纳。在“数据”窗格中右键单击**“Format”**（格式）字段，并选择“创建”>“组”。我们将其命名为**“Cover”**（封面）。按住 Control 并单击以选择除“Hardcover”（精装本）外的所有内容，然后单击“**组**”。组的名称会自动突出显示，我们可以将其命名为“**Paperback**”（平装本）。

与“Author Name”（作者姓名）计算一样，我们刚刚创建的这些项目在单个表中是相关的，因此会保留在“数据”窗格中的这些表内。

## 分析关联数据

让我们对关系和联接之间的分析进行比较。我们建议您下载[配套工作簿](https://help.tableau.com/samples/en-us/bookshop/dontbescaredq2.twbx)，而不是继续使用您自己以前的数据源。

### 问题：对于拥有系列图书的作者来说，谁的图书巡回活动最多？

### 视频：处理不同的详细级别

视频转录文稿

让我们来看看我们将处理哪些作者。使用关联的数据源，我们将“**Author Name**”（作者姓名）和“**Series Name**”（系列名称）拖到“行”。

因为关联的数据源减少了仅包含维度的表中不匹配的数据，所以我们将重点放在与我们相关的数据上。我们可以看到有七位作者，其中两位为两个系列的作者。如果不想只看到匹配的值，可以通过转到“分析”菜单 >“表布局”并选中“显示空行”来恢复那些不匹配的值（这更像是遗留行为）。

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 690px;"><col style="width: 50%;"></colgroup><tbody><tr><td style="font-weight: bold;">已关联</td><td style="font-weight: bold;">已联接</td></tr><tr><td><p>使用关联数据源：</p><ol><li value="1">将集“<b>In a series</b>”（在系列中）从 Book 表拖到筛选器功能区。默认值是仅筛选到集中的成员。</li><li value="2">将“<b>Author Name</b>”（作者姓名）拖到“行”。</li><li value="3">将“<b>Book Tour Events</b>”（图书巡回活动）拖到“列”。</li></ol></td><td><p>使用联接的数据源：</p><ol><li value="1">将集“<b>In a series</b>”（在系列中）拖到筛选器功能区。</li><li value="2">将“<b>Author Name</b>”（作者姓名）拖到“行”。</li><li value="3">将“<b>Book Tour Events</b>”（图书巡回活动）拖到“列”。</li></ol><p>我们这里的数字看起来有点偏离。</p></td></tr></tbody></table>

对于联接的数据，我们知道由于联接而存在重复，并且我们也知道一些作者是多个系列的作者。因此，我们不能仅仅将聚合更改为 MIN 或 MAX，因为我们丢失了作为多个系列的作者的信息。

我们真正想要的是每个系列的活动数，按作者显示。这是详细级别 (LOD) 表达式的一个经典案例。我们将创建一个计算“**Series Events**”（系列活动）：

{FIXED \[Series Name\] : MIN (\[Book Tour Events\])}

请注意，MIN 用于处理单个系列的重复事件。

现在，如果我们将此新字段拖到“列”（而不是原始活动字段），我们将获得正确的值。

对于关联的数据，我们不需要执行任何操作。关系足够智能，可以理解本机详细级别以及 Author 表通过 Book 和 Info 表与 Series 表的关联方式，并正确联接“Events”（活动）度量并将其聚合回“Author Name”（作者姓名） — 所有这些都无需编写 LOD 计算。

因此，不要害怕关联您的数据。眼见为实！您可以[下载 Bookshop 数据](https://help.tableau.com/current/pro/desktop/zh-cn/bookshop_data.htm)或使用自己的一些数据。尝试筛选、使用表计算、构建各种图表类型、配置性能选项，以及尽可能的推动关系。

### 使用关联的数据时的提示

- 经常[查看基础数据](https://help.tableau.com/v0.0/public/desktop/zh-cn/inspectdata_viewdata.htm)，以验证标记表示的数据。
- 如果不要求您进行联接（而您出于一些[原因](https://help.tableau.com/current/pro/desktop/zh-cn/relate_tables.htm#features-of-different-options-for-combining-data-relationships-joins-and-blends)可能需要联接），使用关系可提供更大的灵活性。
- 如果不想只看到匹配的值，可以通过转到“分析”菜单>“表布局”>“显示空行”来恢复那些不匹配的值。

## 相关资源

准备好处理关系计算了吗？请查看[不要害怕关系中的计算](https://help.tableau.com/v0.0/public/desktop/zh-cn/datasource_dont_be_scared_calcs.htm)。

准备好继续探索如何使用关系进行复杂的分析了吗？请查看[不要害怕更深层次的关系](https://help.tableau.com/v0.0/public/desktop/zh-cn/datasource_dont_be_scared_deeper.htm)。

有关直接来自产品管理团队的关系的技术基础的详细信息，请查看 Tableau 博客上有关关系的系列文章。

- [关系，第 1 部分：在 Tableau 中引入新的数据建模](https://www.tableau.com/about/blog/2020/5/relationships-part-1-meet-new-tableau-data-model)
- [关系，第 2 部分：提示和技巧](https://www.tableau.com/about/blog/2020/5/relationships-part-2-tips-and-tricks)
- [关系，第 3 部分：跨多个相关表提出问题](https://www.tableau.com/about/blog/2020/6/relationships-part-3-asking-questions-across-multiple-related-tables)

另请参见 [Action Analytics](https://action-analytics.com/library/) 中有关关系的视频播客，例如[为什么 Tableau 发明了关系？](https://action-analytics.com/ep-1-why-did-tableau-invent-relationships/)单击 [Library（库）](https://action-analytics.com/library/)中的“Video Podcast”（视频播客）以查看更多信息。

## 此部分中的其他文章