优阅达“优课堂” | 第5课:Tableau 关系模型
published: 2021-11-17 22:26

欢迎观看由优阅达制作的【优课堂】系列视频。第五节课是 Tableau 关系模型,你可以下载本视频所用数据集同步实操。


“关系”模型是 Tableau 2020.2 新增的数据连接功能。我们可以使用关系,组合多个表中的数据进行分析。

在本期优课堂视频中,我们将介绍关系的定义,并根据模拟的业务场景来探讨其对应的数据模型图。然后,根据这些模型图来对数据源进行关联,并使用关联好的数据源来回答一些重要的业务问题。

在这个过程中,我们将学习到“关系”连接界面的各个方面,以及关键功能的特性,包括查看数据窗格的布局,探索如何显示或隐藏空值,使用多个表中的字段创建计算,以及使用自动生成的计数字段等。

最后,我们将微调性能选项设置,例如基数和引用完整性,以便更好地了解关系。


关系的定义

关系,是在数据源逻辑层中的逻辑表之间,创建的灵活连接线,有人亲切地称关系为“面条”。关系,用于描述两个表如何基于公共字段相互关联,但不将表合并在一起。

关系是合并数据的一种新方式,与使用联接相比具有轻松、快速并且更灵活的优势:

  • 关系支持在单个数据源中使用位于不同详细级别的多个表,从而回答各种各样的业务问题;

  • 关系为所有类型的用户提供直观的分析体验;

  • 关系让数据源易于创建,并且经过优化以提高效率,从而加快分析和报表制作的速度。

在跳转到 Tableau Desktop 之前,让我们先来熟悉一下业务场景。


业务场景和数据模型

假设我们有一家便利店,想通过分析交易数据来回答业务问题。

在“便利店”数据源的产品表中,有八个在售的产品,每个产品都有唯一的产品编码、产品名称、单价、单位成本和类别编码。结合类别表可以看到,每个产品属于1个归类,所以每个类别中又包含了许多产品。

表之间的线表示一对多的关系。这两个表基于一个公共字段(类别编码)进行关联。

每天都会产生许多笔交易,每笔交易都有唯一的交易编码。部分客户在交易时使用了便利店的储值卡系统,这为我们提供了部分客户名单。

结合交易表和客户表来看,白松是交易 1 和交易 3 的回头客,交易 4 有一个未知的客户。客户表和交易表之间存在一对多关系。这两个表基于一个公共字段“客户编码”进行关联。


》》》交易表和产品表有什么关系?

单笔交易可以包含多个产品,单个产品又可以出现在多笔交易中,所以这是多对多关系。

但由于两个表之间没有公共字段,所以较好的逻辑表连接方法是:通过在两个表之间添加一个“交易明细表”来解决关联问题。

在交易明细表中,每条记录都是一个交易编码与一个产品编码的组合,每对组合对应为一次交易明细,记录了交易的产品和数量。

例如,在交易编码为”1”的两条记录中,记录了购买的产品是两本杂志和一瓶水。

可见,交易表和产品表之间的多对多关系已被两个一对多关系替换。

了解完数据模型图后,接下来就让我们在 Tableau Desktop 中对不同的数据表进行关联。


使用“关系”连接不同的数据表

打开 Tableau Desktop 2021.1,在“连接”界面上,连接到 Microsoft Excel 文件,选择本次示例数据源 “便利店”,并选择“打开”。

在数据源界面上,可以看到左侧窗格中有五个表。我们先来看看最详细的交易明细表。将 交易明细表拖到空白画布上,下方的概览窗格将显示数据预览。

当一个接一个地引入其他表时,数据源将类似于旋转90度的数据模型图。

将产品表拖到交易明细表右侧的空白处。请注意,此时代表两张表之间关系的“面条”,将出现“编辑关系”窗口。Tableau Desktop 基于一个公共字段(产品编码)自动关联了这两张表。

也可以手动选择公共字段,下方还有可用的性能选项设置,这里保留使用默认设置。关闭“编辑关系”窗口。

从左侧窗格中,将交易表拖入画布中的交易明细表右侧空白处。确认两张表是以 “交易编码“ 字段进行关联。随后关闭“编辑关系”窗口。

将类别表拖到交易明细表右侧,此时发现默认连接是错误的。我们可以在“编辑关系”窗口看到警告。注意警告,这两个表之间没有公共字段。

若要修复拖放错误,请关闭“编辑关系”窗口,然后使用类别表的下拉菜单,并选择“移动到”-“产品”选项,将类别表关联到产品表上。

类别表将自动移动到产品表的右侧,并将基于公共字段(类别编码)进行关联。关闭“编辑关系”窗口。

最后,将客户表拖到画布中的交易表右侧的空白处,这两个表将基于公共字段(客户编码)进行关联。关闭“编辑关系”窗口。

点击菜单栏的“文件”-“保存”选项。文件保存类型选择Tableau 打包工作薄(.twbx),以便将数据嵌入到工作薄中。将文件命名为 “便利店”,单击保存。


业务问题分析

单击工作表1,转入工作区界面。从左侧数据窗格中可以看到,现在的字段是按表来排列的。在每个表中,会有一条浅灰水平线将维度与度量值分开。

每个表都包含一个自动生成的字段,该字段是表中行数的计数。

先对产品表中的“单价“和“单位成本“两个字段进行格式设置。

右键单击“单价“字段,在弹出菜单中选择“默认属性”-“数字格式”选项,在“默认数字格式”窗口中选择“货币(标准)“作为字段的默认格式,最后点击确定,完成设置。同样的方法,将“单位成本”字段的默认格式也设置为“货币(标准)“。保存工作簿。

接下来,我们需要创建分析视图,以回答几个业务问题。


》》》 问题一:最畅销和最不畅销的产品是什么?(提示:需要同时显示产品编码和产品名称)

从产品表中,将 “产品名称” 字段拖到行中。从交易明细表中,将 “售出数量” 字段拖入列中,按售出数量进行降序排序。将视图显示从“标准”设置为“整个视图”。

可以看到,最畅销的产品是水。最不畅销的产品是铅笔和钢笔,因为这两个产品没有任何交易。

如果我们要将结果限制在实际销售的产品上,则单击显示了两个空值的指示器,然后在弹出窗口中,选择“筛选数据”选项。

此时,筛选器功能区出现了一个“总和(售出数量)”胶囊,右键单击此胶囊,选择”编辑筛选器”选项,在“筛选器”对话框中可以看到:此项仅筛选出非空值的数量。

让我们撤消此筛选器的操作,因为未售出的项也很重要。

接下来,还需要在视图中显示”产品编码”。它是产品表和交易明细表之间的公共字段,所以我们从哪个表中拖入“产品编码”字段尤为重要。

先右键单击交易明细表中的”产品编码”字段,选择“转化为维度”选项。然后将其拖到行功能区的最左侧,我们发现:只能看到已售出的六种产品。

所以在这里,要使用产品表中的“产品编码”字段。同上所述,将产品表中的“产品编码”字段转化为维度,并用其替换行功能区中现有的”产品编码”胶囊。此时,我们看到产品的完整列表显示出来了。

再次对条形图进行排序,然后将工作表重命名为畅销和最差产品,保存工作簿。


》》》 问题二:每件产品的单位边际贡献是多少?(提示:单位边际贡献=单价-单位成本)

新建一个工作表。在新工作表中,创建一个计算字段,命名为“单位边际贡献”。从产品表中拖入“单价”字段,输入减号,再拖入“单位成本”字段。单击“确定”。

请注意,“单位边际贡献” 计算字段出现在产品表中,这是因为它是基于单个表的字段创建的。

将 “单位边际贡献”字段的默认数字格式设置为“货币(标准)”。然后,我们创建一个文本表来验证计算是否正确。

按住键盘上的 Ctrl 键,同时选择产品表中的 “产品名称“ 、“单位边际贡献“、“单位成本“ 和 “单价“ 这 4 个字段,然后点击工具栏右侧的“智能推荐(智能显示)”,选择文本表,然后再次单击“智能推荐(智能显示)”将其关闭。

从工具栏中,将视图显示从“标准”设置为“整个视图”。在“度量值”卡上,重新排列度量顺序:“单价“、“单位成本“、“单位边际贡献“。

可以清楚地看到,“单位边际贡献”的计算正确。将当前工作表重命名为每件产品的单位边际贡献。保存工作簿。


》》》问题三:销售收入、利润和每个类别以及产品的边际利润是多少?

新建一个工作表,按照以下说明创建三个计算字段:

第一个计算: “销售收入”=“售出数量”*“单价”。这两个字段分别从交易明细表和产品表中拖入,并在两个字段之间输入乘法符号,计算有效,单击“确定”。

此时,刚创建好的计算字段“销售收入”显示在“数据”窗格的底部,这是因为它是基于多个表中的字段创建的,因此不能放在上面的任何表中。

然后,将“销售收入”字段的默认数字格式设置为货币(标准)。

第二个计算: “利润”=“售出数量”*“单位边际贡献”。这两个字段也需分别从交易明细表和产品表拖入。同上所述,完成公式输入后,点击“确定”。

可以看到,“利润”字段也显示在“数据”窗格的底部,因为它使用的也是多个表中的字段。将“利润”字段的默认数字格式设置为货币(标准)。

第三个计算:“边际利润”=SUM(利润)/SUM(销售收入)。这是一个预聚合计算,因为在公式中使用了 SUM 聚合。

在这里,重要的是:在除法之前分别对两个字段求总和,而不是先除后求总和,以避免利润率百分比总和超过 100%。计算有效,单击“确定”。聚合计算始终显示在“数据”窗格的底部。

将 “边际利润” 字段的默认数字格式设置为一个小数点的百分比。同样使用文本表来验证计算结果的准确性。

按住键盘上的 Ctrl 键。在“数据”窗格中,同时选择类别表中的 “类别名称“、产品表中的“产品名称“以及最底部的“利润“ 、“边际利润“ 和 “销售收入“ 这 5 个字段。然后点击工具栏右侧的“智能推荐”,选择文本表,再次单击“智能推荐”将其关闭。

从工具栏中,将视图显示从“标准”设置为“整个视图”。在“度量值”卡上,重新排列度量顺序:“利润“、“销售收入“、“边际利润“。

请注意,“利润“除以“销售收入“后,将显示每个类别与每个产品的利润率百分比。

要确认类别级别的百分比是否正确,请点击菜单栏中的“分析”- “合计”-“添加所有小计”选项。可以看到,小计值正确。我们还需显示列总和,选择菜单栏中的“分析”- “合计”-“显示列总和”选项,可以看到,总和值也是正确的。

将工作表重命名为每个类别以及产品的利润、销售收入和边际利润。保存工作簿。


》》》 问题四:谁是最常光顾的顾客?

新建一个工作表。从客户表中,将“客户姓名”字段拖入行;从交易表中,将自动生成的 “交易(计数)” 字段拖入列中,按交易计数降序排序,显示整个视图。

我们发现:白松是最常光顾的顾客。此外,交易表中还有一条”客户编码“为空的记录,也包含在我们的比较中。将工作表重命名为每个客户的交易记数。保存工作簿。


》》》 问题五:谁是最赚钱的客户?

这个问题需要用到五个表中四个表的数据。新建一个工作表,将客户表中的“客户姓名”字段拖到行功能区上;从“数据”窗格的底部,将“利润”字段拖到列功能区上;按“利润“进行降序排序。

可以发现:白松这位客户为我们带来了最多利润。将工作表重命名为每个客户利润,保存工作簿。


》》》 问题六:每位顾客购买了哪些类别?数量分别是多少?

这个问题需要用到所有五张表的数据。新建一个工作表,将客户表中的“客户姓名”字段拖到行;将类别表中的“类别名称”字段拖到行上 “客户姓名” 胶囊的右侧;将交易明细表中的“售出数量” 字段拖到列上;按 “售出数量” 进行降序排序。

视图结果正确地反映了所有交易的类别和数量。将工作表重命名为每位顾客每类别售出数量,并保存工作簿。


性能选项

性能选项是在定义表之间的关系时可以指定和配置的选项。默认设置的情况下,可确保可视化中没有数据丢失。如有需要,也可以调整性能选项的设置,达到提高性能的效果。

下面,我们根据数据模型图和业务规则来对其进行不同的定义设置:

》》》 考虑不同的业务规则:

客户可以没有交易记录吗?交易记录中可以没有客户吗?两个客户可以完成单笔交易吗?类别中可以没有产品吗?产品可以没有归属的类别吗?产品可以归属多个类别吗?

由于 Tableau Desktop 无法取得这些问题的答案,因此它必须考虑到以上所有规则都是有效的。所以,想要最大限度地提高查询性能,就必须提前设定这些业务规则。

我们将在调整性能选项中的基数和引用完整性设置时,定义这些业务规则:


》》》类别表与产品表关联规则:一对多关系

  • 单个类别中可以包含多个产品,单个产品仅能归属于单个类别;

  • 某些类别包含产品,这意味着可以在分配产品之前添加新类别;

  • 所有产品都必须归属在类别表所列出的其中一个类别中。


》》》 客户表与交易表关联规则:一对多关系

  • 单个客户可以完成多笔交易,单笔交易只能由一个客户完成。因此,两个客户不能同时完成同一笔交易;

  • 所有客户至少完成了一笔交易。有些交易是由客户表中列出的客户完成的,其他交易则可能没有客户完成。


》》》交易表和交易明细表关联规则:一对多关系

  • 一笔交易可以关联多项交易明细,但一项交易明细仅能归属一个交易;

  • 所有交易都要有交易明细,所有交易明细仅能归属于交易表中所列出的交易。


》》》产品表和交易明细表关联规则:一对多关系

  • 一个产品可以出现在多项交易明细中,但每项交易明细仅能包含一个产品;

  • 有些产品出现在交易明细中,有些产品(如铅笔和钢笔)则没有;

  • 所有交易明细中都包含产品表中列出的产品。

通过以上对基数和引用完整性的调整,工作簿的性能得到了改进,可视化的结果仍然相同。



以上就是关于「Tableau 关系模型」的全部内容。感谢观看本视频,更多 Tableau 学习资源,请关注微信公众号“优阅达大数据生态”。