不要害怕关系
新的数据建模功能可创建围绕关系构建的灵活数据源。
关系通过查看这些表共有的列(字段)以及使用该信息将分析中每个表中的信息汇集在一起来合并不同表中的数据。
与联接或并集不同,关系无需将多个表拼合为单个表即可形成数据源。因此,相关数据源知道每个字段来自哪个表。这意味着每个字段都会保留其上下文或详细级别。因此,相关数据源可以处理粒度不同的表,而不会出现重复或数据丢失问题。
在相关数据源中,联接不会预先修复。不会合并所有数据(并且无论每个可视化项需要什么,都必须处理所有数据),而只是合并相关数据 — 按工作表在必要时合并。在您拖放时,Tableau 会评估相关字段和表的关系。这些关系用于编写具有正确联接类型、聚合和 null 处理的查询。
您可以考虑数据如何组合在一起,以及您想要回答什么问题,而不是如何合并数据或补偿数据源中的项目。
关系不会取代以前合并数据的方式:联接、并集和混合。相反,关系是将来自多个来源的数据汇集在一起的新的灵活方式。现有方法不会消失,并且在特定情形下仍然有用。
注意:若要了解关系查询工作方式的相关信息,请参见以下 Tableau 博客文章:
另请参见 Action Analytics(链接在新窗口中打开) 中有关关系的视频播客,例如为什么 Tableau 发明了关系?(链接在新窗口中打开)单击 Library(库)(链接在新窗口中打开)中的“Video Podcast”(视频播客)以查看更多信息。
使用关系
本主题将演练如何构建相关数据源,并使用数据源进行分析。如果希望继续,您可以下载 Bookshop 数据集(链接在新窗口中打开)。 为原始数据选择 Bookshop.xlsx 以便从头开始,或者选择 MinimalBookshop.tdsx 以从为您配置的相关数据源基础开始。
注意:“关系”在 Tableau 2020.2 及更高版本中可用。
视频:迁移的数据
如果在 Tableau 2020.2 或更高版本中打开来自早期版本的 Tableau(版本 2020.1 或更低版本)的现有工作簿,则数据源选项卡可能会显示“迁移的数据”表。
如果打开在关系功能推出之前(版本 2020.2 之前)创建的工作簿,则数据源可能看起来不同。如果存在联接或合并的表,则它们显示为名为“迁移的数据”的单个逻辑表。双击以查看基础表 — 它们仍然存在,您的分析仍将按预期方式进行。
请注意,当您仅使用“迁移的数据”表时,“数据”窗格的运行情况与 Tableau Desktop 的早期版本更类似。
您甚至可以将新表直接与“迁移的数据”表相关联,以扩展数据模型。
将关系添加到数据模型后,“数据”窗格将更新为新布局,每个表中保留维度和度量,并且“迁移的数据”表显示为单个合并的表。
视频:关联表
注意:本视频中显示的用于编辑关系的界面与当前版本略有不同,但具有相同的功能。
若要生成关联表的数据源,请连接到数据并将表拖到画布上。拖出第二个表。在可能的情况下,关系将自动形成。如果 Tableau 无法检测到关联字段,系统将提示您自行选择。
您看到的画布是一个新的数据模型层,您可以在其中将表关联在一起。拖出其他表会将它们添加到数据模型中。关系线会显示哪些表是关联的。
关系可以基于计算字段。还可以指定在定义关系时使用运算符来指定应如何比较字段。
添加联接
可以通过双击表来打开联接画布(也称为物理层),然后拖出表以创建联接,从而创建一个联接。创建联接的体验与早期版本的 Tableau 相同 ,您可以设置联接子句(在必要时包括计算)以及配置联接类型。
关闭联接画布后,关系画布上的表(也称为逻辑层)包含一个联接图标来指明基础联接。这是因为联接会将其表合并在一起以形成单个新表。关联表仍然不同。
添加并集
通过拖出新并集来添加并集。像联接一样,并集实际上会合并数据,并在逻辑层上显示一个图标。我们建议始终将并集(或任何名称不明确的表)重命名为更有用的内容。
视频:性能选项
注意:本视频中显示的用于编辑关系的界面与当前版本略有不同,但具有相同的功能。
对于任何关系,都有性能选项以及相关字段。Tableau 会自动为这些选项选择安全的默认值。但是,如果您确定数据的特征,更改这些选项可以为 Tableau 提供有关如何在分析期间以最佳方式配置自动联接的详细信息。设置关联基数和引用完整性选项可向 Tableau 提供有关如何优化查询的详细信息。
关联基数
关联基数表示链接字段记录是否唯一。如果多本书的作者可能相同,但每个作者在作者表中只列出一次,那么在这两个表之间,AuthID 的关联基数将是“多本书一名作者”。此设置会影响 Tableau 在联接前后处理聚合的方式。
引用完整性
引用完整性指示是否保证一个表中的记录在另一个表中具有关系。如果每本书都有作者,则书对作者具有引用完整性。如果不是每名作者都有书,则作者对书没有引用完整性。此设置会影响 Tableau 选择联接类型和处理不匹配记录的方式。
有关详细信息,请参见关联基数和引用完整性。
示例:书店数据
我们稍后会用这个数据源做一些分析,所以让我们来谈谈数据。
数据集围绕的是(虚构的)书籍,考虑书籍和版本之间的区别很重要。一本书本身就是概念性的作品,具有诸如书名、作者和体裁等属性。书籍也有不同的版本,具有诸如价格和格式(精装或平装)等属性,这些属性由 ISBN 标识。书的版本包含出版商和页数信息,而对于书而言,其信息可能是“获得了某个奖项或是丛书中的一本”。
您可以下载 MinimalBookshop.tdsx,跟着步骤进行操作,或者大胆一点,依据 Bookshop.xlsx 自己建立模型。请注意,在合并表后,可以隐藏许多 ID 字段。
视频:使用多个表
注意:本视频中显示的用于编辑关系的界面与当前版本略有不同,但具有相同的功能。
“数据源”页面
在转到工作表标签之前,请注意,下面的数据网格视图一次只显示一个表中的字段。如果我们单击另一个表,我们将看到它包含的数据。没有总体视图,因为在分析中使用关联的数据之前,这些数据不会汇集在一起。目前,数据保留在每个表中,因此会按表显示。
如果我们单击具有基础联接或并集的表,我们确实会看到合并的数据,以及可能包含的任何 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”(作者姓名)计算一样,我们刚刚创建的这些项目在单个表中是相关的,因此会保留在“数据”窗格中的这些表内。
分析关联数据
让我们对关系和联接之间的分析进行一些比较。我们建议您下载问题 1 和问题 2 的配套工作簿,而不是从上面继续使用您自己的数据源。如果您发现问题 1 的数据源配置或步骤存在问题,请注意,这些问题是针对场景的目的而设计的。
问题 1:每本书有多少版本?
重要信息:问题 1 的视频是针对测试版软件录制的。2020.2 的发布版本正确处理了我们在相关数据源中引入错误的尝试。如果您继续操作,您的工作簿将与视频不匹配 - 关系值将是正确的。出于教育目的,我们会对产品进行失败尝试并制造错误,请原谅我们。
我们将通过对两个数据源执行一些基本分析来设置此项。我们将为每个版本建立一个条形图,按书名查看版本数量。
已关联 | 已联接 |
使用关联数据源:
| 使用联接的数据源:
|
很明显,“计数”不是适用于联接的数据的正确聚合。但是,关联的数据也有问题。让我们查看数据,看看发生了什么以及如何进行修复。观看视频(或阅读转录文稿),了解如何操作。
视频:数据验证和修复数据模型
已联接
在这里,我们来查看联接的数据。在联接的可视化项上,我们将查看标记的基础数据。
此视图数据对话框有两个选项卡,即“摘要”和“完整数据”。
- 同一本书有大量行,由于所有联接的原因,这很可能是重复的。
为了处理重复,我们将视图中“ISBN”字段上的聚合更改为“计数(不重复)”。请记住,我们几乎在每个分析方案中都需要考虑这种重复,并采用正确的聚合、筛选或可视化项构建方式来解决它。
已关联
让我们来看看关联数据源的结构,并还将了解一下联接的情况。在关联的可视化项上,我们将查看标记的基础数据。
我们看到视图数据对话框同样有两个选项卡,但这次是“版本”选项卡,而不是“完整数据”。可视化项中使用的每个表都将有自己的选项卡。
- 这本书的行数增加了一倍,我们知道联接会导致重复,并且此数据源中的 Book 表实际上是与 Info 和 Award 联接的 Book 表。
我们可以创建一个包含“Title”(书名)和“Award Name”(奖项名称)的可视化项,然后向下滚动以进行调查。果然,《Mallemaroking》获得了两个奖项。最好将这些表关联,而不是将它们联接。
我们将返回“数据源”选项卡,然后从联接中移除 Awards 表,改为将其关联。现在,我们不必再担心此数据源的重复问题了。
问题 2:对于拥有系列图书的作者来说,谁的图书巡回活动最多?
视频:处理不同的详细级别
让我们来看看我们将处理哪些作者。使用关联的数据源,我们将“Author Name”(作者姓名)和“Series Name”(系列名称)拖到“行”。
因为关联的数据源减少了仅包含维度的表中不匹配的数据,所以我们将重点放在与我们相关的数据上。我们可以看到有七位作者,其中两位为两个系列的作者。如果不想只看到匹配的值,可以通过转到“分析”菜单 >“表布局”并选中“显示空行”来恢复那些不匹配的值(这更像是遗留行为)。
已关联 | 已联接 |
使用关联数据源:
| 使用联接的数据源:
我们这里的数字看起来有点偏离。 |
对于联接的数据,我们知道由于联接而存在重复,并且我们也知道一些作者是多个系列的作者。因此,我们不能仅仅将聚合更改为 MIN 或 MAX,因为我们丢失了作为多个系列的作者的信息。
我们真正想要的是每个系列的活动数,按作者显示。这是详细级别 (LOD) 表达式的一个经典案例。我们将创建一个计算“Series Events”(系列活动):
{FIXED [Series Name] : MIN ([Book Tour Events])}
请注意,MIN 用于处理单个系列的重复事件。
现在,如果我们将此新字段拖到“列”(而不是原始活动字段),我们将获得正确的值。
对于关联的数据,我们不需要执行任何操作。关系足够智能,可以理解本机详细级别以及 Author 表通过 Book 和 Info 表与 Series 表的关联方式,并正确联接“Events”(活动)度量并将其聚合回“Author Name”(作者姓名) — 所有这些都无需编写 LOD 计算。
因此,不要害怕关联您的数据。眼见为实!您可以下载 Bookshop 数据(链接在新窗口中打开)或使用自己的一些数据。尝试筛选、使用表计算、构建各种图表类型、配置性能选项,以及尽可能的推动关系。
使用关联的数据时的提示
- 经常查看基础数据,以验证标记表示的数据。
- 如果不要求您进行联接(而您出于一些原因可能需要联接),使用关系可提供更大的灵活性。
- 如果不想只看到匹配的值,可以通过转到“分析”菜单>“表布局”>“显示空行”来恢复那些不匹配的值。
相关资源
准备好处理关系计算了吗?请查看不要害怕关系中的计算。
准备好继续探索如何使用关系进行复杂的分析了吗?请查看不要害怕更深层次的关系。
有关直接来自产品管理团队的关系的技术基础的详细信息,请查看 Tableau 博客上有关关系的系列文章。
另请参见 Action Analytics(链接在新窗口中打开) 中有关关系的视频播客,例如为什么 Tableau 发明了关系?(链接在新窗口中打开)单击 Library(库)(链接在新窗口中打开)中的“Video Podcast”(视频播客)以查看更多信息。