精通-Tableau-2023-全-
精通 Tableau 2023(全)
原文:
annas-archive.org/md5/dd6efaef313fee7252226d3af4a0b9fd
译者:飞龙
前言
这本畅销的 Tableau 指南将教你如何在 BI 领域的不同范式中利用 Tableau 的最新功能和服务。更新内容包括 Tableau Server、Prep 和 Desktop 中的最新特性,最新的实际案例以及解决现实挑战的方案。本书将带领你从掌握基础的 Tableau 概念到使用高级功能。同时,还新增了一章关于数据治理的内容。
在本书中,你将学习如何使用各种文件和数据库连接到 Tableau Desktop 和 Prep Builder,轻松地执行数据准备和处理,进行复杂的联接、空间联接、联合以及数据混合任务,所有这些都会通过实际示例进行演示。你还将掌握如何执行数据密集化,并探索其他专家级的示例,帮助你使用 Tableau Exchange 进行计算、映射和可视化设计。
后续章节将教你如何改善仪表板性能、连接 Tableau Server,并通过实践示例理解数据可视化。最后,你将学习高级应用场景,如自助分析、时间序列分析、地理空间分析,并将 Tableau 与 Python 和 R 连接,实现在 Tableau 中的编程功能。
最后,新增了一章,涵盖了一个非常热门的话题:数据治理。你将探索 Tableau Server 的重要功能介绍,帮助你为符合 GDPR 以及其他数据隐私和治理法规做好准备。
在本书结束时,你将掌握 Tableau 2023,并能够应对数据分析领域中的常见和高级挑战。
本书适合谁阅读
本书面向那些希望精通 Tableau,解决各种数据科学和商业智能问题的商业分析师、商业智能专家和数据分析师。如果你之前接触过 Tableau,将有助于你更快掌握本书中的功能,但这并不是必需的。
本书内容概览
第一章,回顾基础知识,带你了解开始使用 Tableau 所需的基本概念。
第二章,数据准备入门,是一本以理论为导向的章节,它将帮助你理解数据准备,从而更轻松地处理杂乱的数据。
第三章,使用 Tableau Prep Builder,讨论了 Tableau Prep Builder,它是 Tableau Desktop 的小伙伴——一个不容忽视的提取、转换和加载(ETL)工具。
第四章,了解联接、混合和数据结构,解答了关于是使用关系、联接还是混合来合并数据的问题。
第五章,介绍表计算,涵盖了表计算的特殊情况,这些计算通过数据的顺序来分配像排名这样的值。
第六章,利用 OData、数据密集化、大数据和 Google BigQuery,教授如何利用大数据解决方案和数据密集化的概念。
第七章,实践细节计算,帮助你理解这一高级主题,这一主题可以在某些计算中改变数据的聚合方式。
第八章,超越基础,将介绍高级可视化概念以及 Tableau Exchange、扩展、加速器和连接器。
第九章,使用地图,介绍了 Tableau 内部以及一些外部的地图功能,使用自定义多边形、热图和叠加地图。
第十章,使用 Tableau 进行展示,展示了如何使用 Tableau 进行演示的技巧和窍门。
第十一章,仪表板设计与可视化最佳实践,带你了解不同的格式化技巧和设计规则,以最大化你的可视化效果的美学。
第十二章,利用高级分析,将帮助你通过三个高级用例提升分析技能:自助服务、时间序列和地理空间分析。
第十三章,提高性能,涉及性能的各个方面,旨在帮助你创建快速加载的仪表板,提供最佳用户体验。
第十四章,探索 Tableau Server 和 Tableau Cloud,介绍了 Tableau Server 的不同产品和功能,包括 Ask Data 和 Data Details。
第十五章,集成编程语言,展示了如何将 R 和 Python 与 Tableau 集成,从而实现(几乎)无限的分析能力。
第十六章,开发数据治理实践,介绍了数据治理这一广泛而重要的话题,并说明如何通过使用 Tableau Server 遵守相关法规。
充分利用本书
对 Tableau 的基础知识有所了解将是一个优势,在你 14 天免费试用期结束后,你将需要 Tableau 许可。如果你希望最大限度地利用 第十五章,集成编程语言,对 R 或 Python 的基本知识也会有所帮助。当然,你也可以按照步骤进行操作,一边学习一边跟进。
其他有用的安装程序会在本书中根据需要提及,均属于 Windows 或 Mac 上常见的免费软件安装范畴。
下载示例代码文件
本书的代码包也托管在 GitHub 上,网址为 github.com/PacktPublishing/Mastering-Tableau-2023-Fourth-Edition
。我们还提供了来自我们丰富书籍和视频目录的其他代码包,网址为 github.com/PacktPublishing/
。快去看看吧!
下载彩色图片
我们还提供了一个 PDF 文件,里面包含了本书中使用的截图/图表的彩色图片。你可以在这里下载:packt.link/TybKH
。
使用的约定
本书中使用了许多文本约定。
CodeInText
:表示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 账户名。例如:“在记录性能时,Tableau 初始会在 My Tableau Repository\Logs
中创建一个名为 performance_[timestamp].tab
的文件。”
代码块的设置如下:
SCRIPT_REAL("x <- lm(.arg1 ~ .arg2 + .arg3 + .arg4) x$fitted", SUM(Profit), COUNT(Quantity), SUM(Sales), AVG(Discount)
)
粗体:表示一个新术语、重要词汇,或你在屏幕上看到的词,例如菜单或对话框中的内容,也会以这种方式出现在文本中。例如:“将 Profit_Expected 放置在 Columns 货架上,靠近 Profit。然后点击其中一个并启用 Dual Axis。”
警告或重要提醒以这种方式呈现。
提示和技巧如下所示。
联系我们
我们随时欢迎读者的反馈。
一般反馈:发送电子邮件至 feedback@packtpub.com
,并在邮件主题中注明书名。如果你对本书的任何部分有疑问,请通过 questions@packtpub.com
与我们联系。
勘误:尽管我们已经尽最大努力确保内容的准确性,但错误仍然可能发生。如果你在本书中发现错误,我们将非常感谢你能向我们报告。请访问,www.packtpub.com/submit-errata
,选择你的书籍,点击提交勘误,并填写表单。
盗版:如果你在互联网上发现我们作品的任何非法复制品,我们将非常感谢你提供相关网址或网站名称。请通过 copyright@packtpub.com
联系我们,并附上材料链接。
如果你有兴趣成为作者:如果你对某个主题有专业知识,并且有兴趣撰写或参与书籍的创作,请访问 authors.packtpub.com
。
分享你的想法
阅读完 Mastering Tableau 2023 - Fourth Edition 后,我们希望听到你的想法!请 点击此处直接前往亚马逊评论页面,并分享你的反馈。
你的评论对我们以及技术社区非常重要,能够帮助我们确保提供优质的内容。
下载本书的免费 PDF 版本。
感谢购买本书!
你是否喜欢在旅途中阅读,但无法随身携带纸质书籍?
你的电子书购买与选择的设备不兼容吗?
不用担心,现在每本 Packt 图书都附带 DRM 免费的 PDF 版本,完全免费。
在任何地方、任何设备上阅读。直接从你最喜爱的技术书籍中搜索、复制并粘贴代码到你的应用程序中。
特权不仅如此,你还可以每天通过电子邮件获得独家折扣、新闻通讯以及精彩的免费内容。
按照以下简单步骤享受这些好处:
- 扫描二维码或访问以下链接
packt.link/free-ebook/9781803233765
-
提交您的购买凭证
-
就这样!我们将直接把免费的 PDF 和其他福利发送到您的邮箱
第一章:回顾基础知识
Tableau 是解决 商业智能(BI)和分析挑战的领先工具之一。通过本书,你将掌握 Tableau 在 BI 领域各种范式中的功能和特性。作为成功的 掌握 Tableau 系列的更新,本书涵盖了 Tableau 的基本概念、数据准备和计算,直至机器学习用例。
本版带来了新的数据集、更多改进仪表板性能的示例,以及关于数据可视化、Tableau Server 和 Tableau Prep Builder 的最新技术知识。
本版还将探讨 Tableau 与 Python 和 R 的连接、Tableau 扩展、连接和联合操作,最后但同样重要的是,三个新的强大自助分析用例,时间序列分析和地理空间分析,以便实施所学内容。在本书结束时,你将掌握 Tableau 的高级功能及其最新更新,直至 Tableau 2023 版本。
对于那些对 Tableau 比较陌生的读者,本章将帮助你快速入门;然而,由于本书针对的是高级话题,因此考虑基础内容的时间相对较少。如果需要更深入地了解基础知识,可以参考由 Joshua Milligan 编写、Packt Publishing 出版的 Learning Tableau。
在本章中,我们将讨论以下主题:
-
创建工作表和仪表板
-
连接 Tableau 与你的数据
-
度量名称和度量值
-
三个基本的 Tableau 概念
-
将数据导出到其他设备
现在,让我们通过探索 Tableau 中的工作表和仪表板创建来开始吧。
创建工作表和仪表板
Tableau 的核心是 工作表 和 仪表板。工作表包含单个可视化,仪表板则包含一个或多个工作表。此外,工作表和仪表板可以组合成 故事,通过展示环境向最终用户传达特定的见解。最后,所有的工作表、仪表板和故事都组织在 工作簿 中,可以通过 Tableau Desktop、Server、Reader 或 Tableau 移动应用程序访问。
在这一点上,我想向你介绍 Tableau Public (public.tableau.com/app/discover
)。有时你可能需要一些灵感,或者你可能想复制其他 Tableau 用户创建的仪表板。在这种情况下,Tableau Public 将是你可以去的地方!它是一个基于网页的仪表板集合,也是一个创作者平台,允许你无需许可或安装即可设计美丽的仪表板。
你可以创建自己的个人资料——注册是免费的——并分享你认为世界不容错过的所有仪表板。然而,最棒的部分是你可以下载所有仪表板,在你自己的 Tableau 版本中打开它们,开始学习和复制。即使没有自己的个人资料或注册,也可以下载仪表板。总结一下:Tableau Public 是一个免费的选项,但提供有限的数据源连接、数据隐私和功能可用性。然而,它确实提供了一个优秀的平台,用于公开分享可视化并提升你的 Tableau 技能,无需付费许可。
在本节中,我们将讨论如何创建工作表和仪表板。我们的目标是传达基础知识,同时也提供一些对经验丰富的 Tableau 用户有用的见解。
创建工作表
在创建工作表之前,我们需要先创建可视化来填充它。在 Tableau 中,最基本的可视化是通过将一个或多个字段放置到一个或多个架子上来创建的。例如,注意下面的示例中,可视化是通过将记录数量放置到Marks 卡片上的Text架子上生成的:
图 1.1:Marks 卡片
在考虑了一些基本理论后,在下一小节中,你将有机会在自己的 Tableau 工作簿中跟随操作。让我们开始吧!
创建可视化
现在,让我们通过一个练习来探索创建可视化的基础:
-
访问
public.tableau.com/app/profile/marleen.meier
以定位并下载与本章节相关的工作簿。 -
通过双击下载的工作簿来打开文件。
-
在工作簿中,找到并选择标签为可视化基础的选项卡:
图 1.2:导航工作表标签
- 该仪表板连接了两个数据源;在这个第一个练习中,我们将使用Summer-Olympics数据。点击左上角的数据源Summer-Olympics:
图 1.3:数据源
- 在数据面板中找到Sport,它位于可视化基础工作表的左侧:
图 1.4:数据面板中的维度
- 将Sport拖动到Color上并点击添加所有成员:
图 1.5:将 Color 拖动到 Marks 卡片
- 点击颜色(Color)卡片上的标记(Marks),然后点击编辑颜色…(Edit Colors...),即可根据需要调整可视化的颜色。这将允许你编辑可视化中使用的颜色,以及透明度和边框效果:
图 1.6:编辑颜色…
-
现在,看看如果将运动(Sport)移到大小(Size)、标签(Label)、细节(Detail)、列(Columns)和行(Rows)架子上会发生什么。在每个架子上放置运动后,你可以单击每个架子单独访问更多选项。
-
将其他字段拖到各个架子上,继续探索 Tableau 的行为。例如,在一个空白画布上,将年份(Year)拖到列(Columns)架子上,将记录数(Number of Records)拖到行(Rows)架子上,将奖牌(Medal)拖到标记卡片上的颜色(Color)。你现在将看到每种奖牌类型随时间变化的数量:
图 1.7:随时间变化的奖牌数量
- 你是否想出了任何有趣的可视化效果?随时将它们分享到 Tableau Public。如果你希望本书的其他读者能找到它们,可以添加标签#MasteringTableau——分享即关怀!
当你通过将不同字段拖到不同架子上探索 Tableau 的行为时,你会注意到 Tableau 会以默认行为响应。然而,这些默认设置是可以被覆盖的,接下来我们将深入探讨。
超出默认行为
在前面的练习中,创建可视化,我们可以注意到标记卡片显示的是自动。这意味着 Tableau 正在提供默认视图。可以通过从下拉菜单中选择不同的选项轻松覆盖默认视图:
图 1.8:标记卡片下拉菜单
通过更改标记卡片上的这些设置,我们可以调整数据的显示格式。
另一种类型的默认行为可以通过将字段拖到架子上来观察。例如,将一个度量拖到架子上通常会导致SUM()
聚合,它会将所有值汇总到最高聚合级别。如果没有维度,它将是所有值的总和。如果在标记卡片上有维度,则该维度将作为最高聚合级别。
我们将在本节稍后看到此行为的示例。
在 Windows 中,你可以通过右键单击并从数据(Data)面板中拖动一颗药丸(pill),并将其放到架子上来覆盖默认行为。Tableau 将弹出一个对话框,提供可能的选项:
图 1.9:更改默认聚合方式
如果您在使用 macOS,可以在将数据项拖到位置后,右键点击该数据项,然后通过更改度量来调整默认行为。Windows 系统也适用。另一种方法是,当字段仍在左侧的数据窗格时,右键点击该字段并选择默认属性 | 聚合。
现在,让我们通过一个练习来演示如何在标记卡上覆盖另一个默认行为:
-
在与本章相关的工作簿中,导航到覆盖默认设置工作表。
-
将年份从数据窗格拖放到列架上:
图 1.10:年份到列
-
将记录数量放置在行架上(该字段会自动聚合为SUM(记录数量)),并将运动放置在详细信息架上。
-
点击标记卡上的下拉菜单,选择区域:
图 1.11:区域图
在图 1.11中,我们可以看到记录数量随时间(年份)变化的图表,每一条线代表一种类型的运动。我们选择将其可视化为堆叠区域图。
排序与嵌套排序
现在,您已经熟悉了拖放数据项的基本操作,并了解了 Tableau 的默认行为,接下来大多数用户希望做的就是对数据进行排序,以便得出初步结论,例如最小值和最大值。
导航到嵌套排序标签页,尝试按获得的奖牌数对国家进行排序,但要分别显示金牌、银牌和铜牌。
这对您有用吗?
在 Tableau 中,排序和嵌套排序可以通过简单地点击每个列名旁边的图标来完成:
图 1.12:排序
为了再次确认排序方式,将光标移动到国家区域,直到右上角出现箭头,点击给定字段旁的箭头,在本例中为国家,然后选择排序…:
图 1.13:排序设置
从下拉菜单中选择嵌套以及所需的字段名称,并选择聚合类型:
图 1.14:嵌套排序
完成并理解了排序和嵌套排序之后,您将能够通过以最合乎逻辑的方式展示数据,为仪表板增值。现在,我们可以继续下一个主题:Tableau 自带的不同默认图表类型:Show Me。
Show Me
Show Me可以帮助 Tableau 新手创建他们所需的可视化,如条形图、直方图和面积图。它允许 Tableau 作者通过点击按钮快速从输入数据创建可视化。为了理解它是如何工作的,让我们参考以下屏幕截图,该截图再次使用了Overriding Defaults工作表。通过点击任何 Tableau 工作表右上角的Show Me按钮,可以访问这个视图:
图 1.15:Show Me
现在让我们看看前述屏幕截图中突出的以下几个方面:
-
A:数据面板中选择的字段
-
B:在视图中部署的字段,即标签
-
C:推荐视图,在Show Me面板中突出显示
-
D:帮助文本,传达创建推荐视图或任何选择的要求,当光标悬停在上面时显示
Show Me中每个未变灰的图标都表示可以通过点击它来创建的可视化。例如,在前面的屏幕截图图 1.15中,Tableau 作者可以选择点击面积图图标,基于选择和部署的字段创建面积图。
Show Me的选项是根据两个标准突出显示的:数据面板中选择的字段和视图中部署的字段。
Show Me可能因以下原因而被有效使用:
-
效率:熟练的 Tableau 作者已经知道如何创建基本的可视化类型。Show Me自动化这些基本类型,因此可以用来更快速地生成结果。
-
灵感:确定有效的方式来可视化数据集可能是一个挑战。Show Me可以通过允许 Tableau 作者快速考虑各种选项来帮助解决这个挑战。
-
教育:一个经验不足的 Tableau 作者可以通过访问Show Me来更好地理解各种可视化是如何创建的。通过阅读显示在Show Me底部的帮助文本,并相应地改变标签位置,可以学到很多东西:
图 1.16:Show Me
这三个原因展示了Show Me在工作表创建中的强大功能;然而,要小心不要将其作为依赖工具。如果你在没有理解每种可视化如何创建的情况下点击各种选项,你不仅是在缩短教育过程,还可能会生成你无法理解的结果,从而无法向利益相关者解释。
一旦你对结果感到满意,并且确信所选的可视化足够突出你的数据叙事,你的工作表就可以进入下一轮开发。我们已经查看了一些基本的可视化创建和配置技巧,现在让我们看看如何将多个工作表分组到一个仪表板中。
数据故事讲述是通过图表等可视化方式,利用数据创建引人入胜的故事的艺术。它将数据分析的力量与讲故事技巧相结合,以一种既吸引人又易于理解的方式传达复杂信息。
创建仪表板
如本节前述,仪表板包含一个或多个工作表,但仪表板远不止是静态的展示。它们是 Tableau 互动性的核心部分。在本节中,我们将通过工作表填充仪表板,并为互动性部署操作。
让我们开始构建一个仪表板。
构建仪表板
以下是构建仪表板的步骤:
-
在本章的工作簿中,导航到构建仪表板标签。
-
在图 1.17左侧的仪表板面板中,按列出的顺序双击以下每个工作表,将它们添加到仪表板面板中:学科计数、与会者、奖牌、奖牌形状:
![图形用户界面,图表自动生成的描述图 1.17:创建仪表板 1. 在仪表板的右下角,点击空白区域(如图 1.18所示的箭头位置)以选择一个容器。容器是一个自动调整大小、以适应彼此在仪表板上并排或上下排列的工作表集合:
图 1.18:删除容器
-
点击空白区域后,您应该能看到一个蓝色边框围绕着过滤器和图例。这表示垂直容器已被选中。选择垂直容器的手柄并点击X来删除它。
-
选中的容器也可以拖动到仪表板上的其他位置,替换现有的工作表或共享空间。请注意图 1.19中的灰色阴影,表示选中的位置。选择并按住手柄拖动与会者工作表,并将其放到学科计数工作表上,以交换这两个工作表的位置:
图 1.19:移动工作表
当您将元素(如工作表和容器)拖放到仪表板时,Tableau 提供的灰色阴影会帮助您清晰地了解元素将被放置的位置。在将元素放到仪表板上时,请慢慢观察,避免意外结果。
-
请注意左下角仪表板旁边的浮动和平铺按钮,以及下拉菜单中的手柄。如果选择浮动而非平铺,您的工作表将不再自动调整,而是“浮动”在仪表板上。这是一种自由排列工作表的方式,功能强大,尤其在与透明背景结合时。请注意,浮动也可以通过从仪表板上每个工作表右侧的更多选项下拉菜单中选择来实现:
图 1.20:平铺和浮动
-
现在,您可以根据需要格式化仪表板。以下提示可能会有所帮助:
-
通过悬停在每个元素之间的边缘并点击拖动,调整屏幕上元素的大小。拖动容器的边缘来调整每个工作表的大小。
-
使元素浮动,如图 1.18所示。
-
通过将水平和垂直从对象面板拖到仪表板上来创建水平和垂直容器。其他对象,如文本、图片和空白,也可以添加到容器中。
-
通过在顶部面板中选择仪表板,然后选择显示标题来显示仪表板标题。双击标题本身以进行调整:
图 1.21:奥运会仪表板
-
如您所见,您刚刚创建了第一个仪表板。现在,所有工作表都已就位。在接下来的部分中,我们将添加过滤器功能,使仪表板更具互动性和意义。
向仪表板添加交互性
Tableau 的主要优势之一是它为最终用户提供的交互性。仪表板不仅仅是用来查看的;它们是为了互动而设计的。在这个练习中,我们将向之前创建的仪表板添加交互性:
- 在仪表板上选择奖牌工作表,并点击右侧的下拉箭头,打开如图 1.22所示的菜单。从中选择过滤器,然后选择运动:
图 1.22:添加过滤器
- 现在,选择新创建的过滤器运动,再次点击下拉选项箭头,选择多个值(下拉菜单),以及应用于工作表 | 所有使用此数据源的工作表,如图 1.23所示:
图 1.23:过滤器设置
-
最后,通过点击并拖动,将过滤器放置在奖牌工作表上方。
-
要将奖牌的图片用作仪表板面板中其他工作表的过滤器,请点击用作过滤器图标,该图标位于奖牌形状工作表的右上角:
图 1.24:用作过滤器选项
- 或者,导航至仪表板 | 操作…。在对话框中,点击添加操作 | 过滤器,并创建一个过滤器,如下所示:
图 1.25:导航至过滤器
图 1.26:添加过滤器操作
从此以后,您可以开始使用过滤器和操作过滤器了。
在 Tableau 中,过滤器用于根据特定条件子集化底层数据,而操作过滤器允许用户通过点击视觉元素与数据进行互动式过滤。
在第十三章,提高性能,本主题将会更详细地讨论。
完成前面的仪表板练习后,你现在应该能够点击仪表板上的各种对象,以观察交互性。
要学习一些更高级的仪表板技巧,务必查看第十一章,设计仪表板和可视化最佳实践。
总结一下,你已经学会了如何将现有的工作表作为平铺或浮动对象放到仪表板上。你已经通过拖放以及使用容器、过滤器和动作过滤器改变了仪表板的布局。每一项核心活动将在本书中多次出现,因此随时可以返回本章,重复练习步骤!
接下来,你将学习如何将自己的数据连接到 Tableau 并进行操作。
将 Tableau 连接到你的数据
在本文写作时,Tableau 的数据连接菜单包括 90 多种不同的连接类型。实际上,这个数字可能有些保守,因为其中一些类型包含多个选项。例如,其他文件包含 30 多种选项。当然,我们不会详细介绍每种连接类型,但我们会介绍基础内容。所有连接器的官方文档可以在这里找到:help.tableau.com/current/pro/desktop/en-us/exampleconnections_overview.htm
。
在 Tableau Desktop 中新打开一个实例时(文件 | 新建),你会注意到在工作区的左上角有一个连接到数据链接。点击该链接可以让你连接到数据。通过在计算机上的 Tableau 应用程序位置打开新的实例时,系统会立即显示蓝色的连接面板。或者,你可以点击工具栏上的新建数据源图标。
虽然在后续章节中我们会连接到其他数据源,但在这里我们将仅限于连接到 Microsoft Excel 和文本文件。
连接到一个文件
让我们以 Excel 为例,看看如何连接到一个文件:
-
在 Tableau 中,导航至数据 | 新建数据源 | Excel,以连接安装在 Tableau Desktop 中的
Sample - Superstore
数据集(它应该位于你的硬盘上的My Tableau Repository | Data sources目录下)。 -
双击订单工作表。
-
点击新工作表标签,如图 1.27所示:
图 1.27:新工作表
-
通过右键点击并选择重命名,将新创建的标签重命名为
第一个工作表
。 -
将折扣放置在文本货架上的标记卡中。
-
双击利润和销售额:
图 1.28:第一个工作表
你刚刚创建了你的第一个工作表!
如果你想连接到一个 .csv
文件,可以使用 文本文件 选项。在本书的 第十二章,利用高级分析 中,我们还将连接到空间文件。
在本节中,我们学习了如何连接到文件。在接下来的章节中,我们将继续介绍另一种重要的连接类型:Tableau Server。
连接到 Tableau Server
连接到 Tableau Server 可能是需要考虑的最重要的服务器连接类型,因为它通常用于提供比其他方式更好的性能。此外,连接到 Tableau Server 还可以让作者不仅接收数据,还能获得有关如何解读这些数据的信息——例如,某个字段是否应被视为度量值或维度。
我们将在本章稍后的 维度和度量 部分讨论这些术语之间的区别。
以下是连接到 Tableau Server 的步骤:
-
为了完成这个练习,必须有 Tableau Server 实例的访问权限。如果你没有 Tableau Server 的访问权限,可以考虑在本地计算机上安装试用版本。
-
在与本章相关的工作簿中,导航到 连接到 Tableau Server 工作表。
-
右键点击
Superstore
数据源并选择 发布到服务器…:
图 1.29:发布到服务器…
-
登录到 Tableau Server 并按照提示完成数据源的发布。
-
打开一个新的 Tableau Desktop 实例,选择 数据 | 新建数据源 | Tableau Server,然后搜索你刚刚发布并连接的
Superstore
数据集。
完成前两个练习后,让我们讨论一个最相关的点,即 元数据。元数据通常被定义为 关于数据的数据。在前面的例子中,数据源名称、默认聚合和默认数字格式都是多个作者之间一致性的例子。
如果你更改了某个字段名称,并且将数据源发布到 Tableau Server,新的字段名称将会保留,因为 Tableau 会记住对元数据所做的更改。这一点很重要,例如,如果你的公司有关于显示货币时使用小数点的政策;如果所有 Tableau 作者都开始通过指向所有已预定义格式的数据源来构建工作簿,这个政策就能轻松遵守。
在本书后面的章节中,我们将连接到其他服务器类型,比如 Google BigQuery,但所有服务器的处理方式几乎相同且非常直接。如果你还有疑问,可以随时查看help.tableau.com/current/pro/desktop/en-us/exampleconnections_overview.htm
。
现在,我们关于连接的最后一个缺失部分是已保存的数据源。请跟着一起操作。
连接到已保存的数据源
连接到本地计算机上的已保存数据源与连接到发布在 Tableau Server 上的数据源非常相似。与本地数据源相关的元数据定义与 Tableau Server 上保持一致。当然,由于数据源是本地的而非远程的,因此发布过程不同。
让我们通过以下步骤来创建一个本地数据连接,使用一个示例:
-
在本章相关的工作簿中,导航到第一个工作表标签。
-
在数据窗格中,右键单击
Superstore
数据源并选择添加到已保存的数据源。 -
使用弹出的对话框,将数据源保存为
Superstore
,并保存在我的 Tableau 仓库 | 数据源中,该文件夹位于你的硬盘驱动器上。 -
点击屏幕左上角的返回首页图标,观察新保存的数据源:
图 1.30:已保存的数据源
你可以保存一个指向 Tableau Server 上发布的数据源的本地数据源。首先,连接到 Tableau Server 上的已发布数据源。然后,在工作区中右键单击数据源并选择添加到已保存的数据源。现在,你可以直接从启动页面连接到 Tableau Server!
现在我们已经学习了如何连接到文件、Tableau Server 和已保存的数据源,接下来我们将继续深入探讨有关度量名称和度量值的更多细节。
度量名称和度量值
我经常观察到以下情况:一个新的 Tableau 作者创建了一个工作表,并将一个度量拖到文本架上。他们将第二个度量拖到视图中的不同位置,并得到看似完全不可预测的结果。由于在 Microsoft Excel 中轻松实现这一点,作者的体验往往非常沮丧!好消息是,在 Tableau 中也很容易实现这个操作。只是需要一种不同的方法。
度量名称和度量值是 Tableau 中的生成字段。它们并不存在于基础数据中,但在创建许多类型的视图时是必不可少的。根据它们在数据窗格中的位置和名称,可以猜到,度量名称是一个维度,其成员由基础数据集中每个度量的名称组成。度量值包含数据集中每个度量的数值或值。
在本节中,我们将观察这些生成的字段单独使用时的表现,然后观察它们如何优雅地协作以创建视图。让我们通过一个练习来探索这个过程:
-
在本章相关的工作簿中,导航到度量名称/值,并确保选择了
Olympics
数据源。 -
将Measure Values拖到Text架上,观察结果,四个值都被叠加在一起:
图 1.31:Measure Values
- 点击工具栏上的Clear Sheet图标清除工作表:
图 1.32:清除工作表
-
现在,将Measure Names拖到Rows架上,可以观察到视图仅显示No Measure Values。
-
将Measure Values拖到Text架上。注意度量值和关联值的列表,每个值都在相应的行中显示:
图 1.33:Measure Values 列表
或许Measure Names和Measure Values之间的关系可以通过一个类比来解释。想象有几对袜子和一个有分隔的袜子抽屉。第 2 步相当于把袜子丢成一堆。结果是,嗯,杂乱无章。第 4 步就像是一个空的、有分隔的袜子抽屉。分隔已经到位,但袜子在哪里呢?第 5 步则是一个分隔整齐的袜子抽屉,袜子有序地放好。Measure Names
就像袜子抽屉,Measure Values
就像袜子。
彼此独立时,它们并没有太大用处。将它们一起使用时,可以以多种不同的方式应用。
Measure Names和Measure Values快捷方式
Tableau 提供了多种快捷方式,用于快速创建所需的可视化效果。如果你是软件的新手,这些快捷方式的行为可能看起来不直观,但你会逐渐理解它。让我们通过以下练习来探索如何使用快捷方式快速部署Measure Names
和Measure Values
:
-
在与本章相关的工作簿中,导航到MeasureNames/Values ShrtCts工作表。
-
将# Women拖到Marks卡片中的Text:
-
将# Men直接拖到# Women上方,在视图中(Show Me出现):
图 1.34:Show Me 和 Measures
- 观察结果,包括Measure Values架的出现、Measure Names在Rows和Filters架上的部署,以及Measure Values在Text架上的展示:
图 1.35:Measure Values 外观
在这个练习的第 2 步中发生了几件事。在将# Men
数字拖到# Women
数字上方后,Tableau 执行了以下操作:
-
将
Measure Names
部署到Filters架上:- 右键点击打开
Measure Names
过滤器并点击编辑过滤器...。观察到仅# Men
和# Women
被选中。这限制了视图只显示这两个度量。
- 右键点击打开
-
在行架上部署了
Measure Names
:Measure Names
就像是一个分区容器,也就是类比中的袜子抽屉。由于过滤器的作用,显示的只有# Men
和# Women
的行**。
-
显示了Measure Values架:
Measure Values
架有点多余。虽然它清楚地显示了视图中展示的度量,但它本质上是访问过滤器的一种便捷方式。你可以简单地将度量拖进或拖出Measure Values
架来调整过滤器,从而显示或隐藏更多的Measure Values
。你也可以在Measure Values
架中改变度量的顺序,从而改变视图中度量的显示顺序。
-
在文本架上部署了
Measure Values
:Measure Values
只是定义每行将显示的数字——在本例中,显示的是与# Men
和# Women
相关的数字。
如果可视化中有轴,使用快捷方式来部署Measure Names和Measure Values需要将第二个度量放置在第一个度量的轴上方。在图 1.36中,Year 位于列架上,Number of Records 位于行架上。注意,截图是在# Women放置在y轴上时拍摄的:
图 1.36:轴快捷方式
结果工作表可以在图 1.37中看到:
图 1.37:双折线图
前面的部分帮助我们更好地理解了Measure Names和Measure Values。你将在 Tableau 的使用过程中更频繁地遇到这些概念,但既然你已经成功掌握了基础知识,让我们继续学习其他三个对你学习曲线有帮助的概念。
三个基本的 Tableau 概念
掌握 Tableau 的一个重要步骤涉及三个基本概念。在本节中,我们将讨论每个概念:
-
维度和度量
-
行级、汇总级和表级计算
-
连续和离散
我们将首先定义维度和度量。
维度和度量
Tableau 将来自底层数据源的每个字段分类为维度或度量。维度是定性的,或者换句话说,是分类的。度量是定量的,或者是可以聚合的。度量通常是一个数字,但也可以是一个聚合后的非数字字段,如MAX (Date)
。维度通常是文本、布尔值或日期字段,但也可以是数字,如Number of Records
。维度通过将数字切分成不同的部分/类别,赋予数字意义。没有维度的度量大多数是没有意义的。
让我们通过一个例子来更好地理解:
-
在与本章相关的工作簿中,导航至
维度与度量
工作表。 -
将
记录数
拖动到 标记卡 上的 文本 区域。结果大多是没有意义的。度量值是 15,316,但没有通过将度量值按一个或多个维度切片所提供的上下文,就无法理解它的含义:
图 1.38:没有上下文的工作表
- 将 国家 和 年份 放置在 列 货架上,将 记录数 放置在 行 货架上:
图 1.39:维度与度量
如 图 1.39 所示,步骤 3 赋予了意义。将 国家 和 年份 放置在 列 货架上提供了上下文,这为可视化赋予了意义。
行级、聚合级和表级计算
Tableau 中有三种计算级别:行级、聚合级和表级。要理解这三种级别如何运作,了解 Tableau 的处理过程非常重要。我们将通过一个考虑 记录数
和 数量
字段的示例来说明这一点,这些字段来自 Superstore
数据集。
请考虑以下的计算类型、计算字段和查询。将其与常用的 SQL 语言进行对比,可以帮助我们更好地理解如何解读 Tableau 计算。请注意,为了便于此示例,SQL 稍作简化。
让我们更深入地了解三种计算级别,并考虑以下表格中的示例:
计算类型 | Tableau 中的计算字段 | 传递给数据源的查询 |
---|---|---|
行级 | 记录数/数量 |
SELECT 记录数 / 数量 FROM Orders |
聚合级 | [记录数])/SUM(数量) |
SELECT [记录数]), SUM(数量) FROM [Orders] |
表级 | WINDOW_Sum([记录数])/数量)) |
SELECT [记录数]), SUM(数量) FROM [Orders] |
对于行级和聚合级计算,实际上是由数据源引擎完成计算的,因为 Tableau 是一个内存工具。Tableau 仅显示结果。然而,表级计算并非如此。尽管传递给数据源的查询对于表级计算与聚合级计算相同,Tableau 会对返回的结果进行额外的计算。让我们通过一个练习,使用相同的计算字段进一步探索这一点。
让我们看一下以下步骤,并开始我们的练习:
-
在与本章相关的工作簿中,导航至
Row_Agg_Tbl
工作表。 -
通过点击左上角 数据 部分的
样本 - 超市
来连接到Superstore
数据源。
图 1.40:连接到超市数据
-
选择分析 | 创建计算字段以创建以下计算字段。请注意,每个字段必须单独创建;也就是说,在此上下文中无法创建一个包含所有三个计算的单一计算字段:
-
将第一个计算命名为
Lev – Row
并输入以下代码:[Number of Records]/[Quantity]
。 -
接下来,将第二个计算命名为
Lev – Agg
并输入以下代码:SUM ([Number of Records])/SUM (Quantity)
。 -
最后,将第三个计算命名为
Lev – Tab
并输入WINDOW_AVG ([Lev - Agg])
。
-
-
在数据面板中,右键单击您刚刚创建的三个计算字段,选择默认属性 | 数字格式。
-
在弹出的对话框中,选择百分比并点击确定。
-
将订单日期放置到列架上。
-
将度量名称放置到行架上,并将度量值放置到标记卡上的文本上。
-
通过将其拖出度量值架或从度量名称过滤器中删除,排除除Lev - Row、Lev - Agg和Lev - Tab之外的所有值:
图 1.41:计算层级
-
Lev - Agg是聚合级计算。该计算由数据源引擎完成。
[Number of Records]
的总和除以[Quantity]
的总和。计算结果可能对 Tableau 作者有用。 -
Lev - Row是行级计算。该计算由数据源引擎完成。
[Number of Records]
除以[Quantity]
,并且对于每一行底层数据进行计算。结果随后会在所有行中求和。当然,在这种情况下,行级计算并未提供有用的结果;然而,鉴于新手 Tableau 作者可能会错误地创建行级计算,而实际上需要的是聚合级计算,因此此示例仍在此处包含。 -
Lev - Tab是一个表格计算。部分计算由数据源引擎完成,即聚合。Tableau 会根据在工作表中显示的数据的维度和详细级别,对从数据源引擎返回的结果进行额外计算。具体来说,Lev - Agg的结果会被求和,然后除以维度中的成员数。对于之前的示例,这就是:
再次提醒,这些结果在此情况下并不是特别有用,但它们展示了一个初学者 Tableau 作者应该具备的知识。
连续性与离散性
连续性和离散性并不是 Tableau 独有的概念。实际上,它们可以在许多领域中观察到。考虑以下示例:
图 1.42:连续性与离散性
前面的图示展示了两条河流:左河和右河。水在左河中流动。右河由冰块组成。理论上,你能排序右河中的冰块吗?能!那么,有没有办法排序左河中的水呢?换句话说,你能从河底提取水桶,把这些水桶运送到上游,然后将水倒回左河,并且因此说“我已经排序了河中的水”吗?不能。
左河中的 H[2]O 是连续形态,即水。右河中的 H[2]O 是离散形态,即冰。
在考虑了自然界中的连续和离散示例之后,让我们回到 Tableau。以下七个要点可以帮助更清楚地理解 Tableau 中的连续和离散:
-
连续是绿色的。离散是蓝色的:
- 在 数据 面板中选择任何字段,或将任何字段放到架子上,你会注意到它是绿色的或蓝色的。与字段相关的图标也是绿色或蓝色的。
-
连续总是
数字
。离散可以是字符串
。 -
连续和离散并不等同于维度和度量:
-
新的 Tableau 用户常常会将连续和度量混淆,离散和维度混淆。它们并不是同义词。度量可以是离散的或连续的。
-
此外,一个维度,如果它是数字,可能是离散的也可能是连续的。为了证明这一点,在 Tableau 中右键点击任何数字或日期字段,并注意你可以转换它:
图 1.43:在离散和连续之间转换
-
-
离散值可以排序。连续值不能:
- 可排序/不可排序的行为最容易通过日期和类似
Sum(Sales)
的度量来观察,如下所示:![图形用户界面,文本,应用程序,聊天或文本消息]
描述自动生成](https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/ms-tbl-2023/img/B18435_01_44.png)
图 1.44:左:连续(不可排序)。右:离散(可排序)
- 可排序/不可排序的行为最容易通过日期和类似
-
连续色是渐变色。离散色是不同的:
- 以下示例显示了销售作为连续和离散的情况。请注意颜色渲染的不同。屏幕截图的左部分演示了连续结果的渐变效果,右部分展示了离散结果的不同颜色类别:![图表,条形图]
描述自动生成](https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/ms-tbl-2023/img/B18435_01_45.png)
图 1.45:连续的(左)和离散的(右)销售
-
连续的 pills 可以放置在离散的 pills 右侧,但不能放在左侧,因为离散的 pills 定义了聚合级别:
-
当 年份 是离散时,Tableau 作者能够将 地区 放置在 年份 的右侧。
-
当 年份 是连续时,Tableau 作者无法将 地区 放置在 年份 的右侧。
-
-
连续创建坐标轴。离散创建标题:
- 请注意以下截图的右侧部分,订单日期是连续的,且选中了订单日期的年份轴。由于订单日期的年份是轴,整个x-轴都被选中了。然而,在左侧部分,订单日期(年)是离散的,且选中了2014。由于 2014 只是一个标题,它被选中而不是整个x-轴:
图 1.46:连续日期(右)和离散日期(左)
恭喜,您已经掌握了 Tableau 中的三个重要概念:度量与维度、计算级别以及离散与连续值。仅凭这些知识,您就能够创建您的第一个仪表板。我强烈鼓励您这样做;通过这些工具的练习,学习曲线将非常陡峭,您也将迅速通过实践增强信心!这也将帮助您在接下来的章节中跟得上进度。
最后,我们将介绍将仪表板导出到其他设备的基本操作。即使您目前还没有准备好这样做,它也将完成 Tableau Desktop 的基础讲解,并为您提供一个完整的基础框架。接下来,我们可以在后续章节中继续优化每个细节!
导出数据到其他设备
一旦仪表板达到预期效果,开发者可以选择不同的共享方式。上传到 Tableau Server 是最可能的选择。最终用户可能不仅仅使用笔记本查看结果,他们也可能使用平板或手机。
将数据导出到手机
在开发仪表板时,Tableau Creator 可以选择查看设备设计器或设备预览。只要您处于仪表板选项卡中,就可以在此找到它:
图 1.47:设备预览
Tableau 默认设置了手机配置。如果需要,您可以通过点击手机并点击三个点来调整这些默认设置。进入设备设计器模式后,选择一个设备类型选项,您将看到常见型号的选择:
图 1.48:设备类型设置为手机
请注意,您只能使用仪表板中默认布局的工作表。例如,如果您想为平板设备添加默认布局,请进入设备设计器模式,选择平板,并按需调整内容,使您希望在平板上查看的工作表位于设备框架内。满意了吗?那么就将新布局(如图 1.50所示)添加到工作簿中,它会出现在左上角的默认区域下:
图 1.49:添加平板布局
用户现在可以在打开 Tableau Server 上的工作簿时选择所需的设计。
您不仅可以方便地在移动设备上查看您的项目,还可以使用 Tableau Mobile 在路上进行工作!我们将在下一节中详细介绍这一点。
Tableau Mobile
为了支持灵活工作,Tableau 创建了一个应用程序,可以从 App Store 或 Google Play 下载,名为 Tableau Mobile。一旦安装在您的手机和/或平板电脑上,您将有选项将该应用连接到 Tableau Server 或 Tableau Online。继续发布我们在本章创建的仪表板 The Olympics 到这两个实例中的任意一个。如果您对发布有疑问,请参阅 第十四章,探索 Tableau Server 和 Tableau Cloud,以获取进一步的指导。
在您的登录页面底部,点击 探索 查看您刚发布的所有视图。点击 构建仪表板 视图,查看您之前创建的仪表板 The Olympics:
图 1.50:移动仪表板
最棒的部分还未到来。仪表板是完全交互式的,所以尝试下拉筛选器或 奖牌 筛选器。还可以尝试点击一个标记并选择 仅保留。通过点击右上角的工作簿图标,从左侧开始的第一个图标,将显示您创建的所有其他工作表,从而可以在工作表之间进行切换:
图 1.51:表单选择
现在,如果您点击右上角的三个点,将会出现更多选项,例如 还原,提醒,订阅 等等。要了解更多也可以在 Tableau Server 上提供的不同选项,请参阅 第十四章,探索 Tableau Server 和 Tableau Cloud。目前,我们可以得出结论,Tableau Mobile 可以让您轻松地在任何地方查看您喜爱的仪表板。
概要
在本章中,我们介绍了 Tableau 的基础知识。我们从一些基本术语开始,然后看了看如何创建工作表和仪表板的基础知识。我们重点关注默认行为及如何覆盖该行为,并考虑了一些最佳实践。然后,我们审视了度量名称和度量值的基本原则。之后,我们探讨了三个重要的 Tableau 概念:维度和度量;行级、聚合级和表级计算;以及连续和离散的概念。特别重要的是理解,行级和聚合级计算是由数据源引擎计算的,而表级计算由 Tableau 处理。最后,我们看到如何调整您的仪表板以适应其他设备,如手机或平板电脑,并展示了 Tableau Mobile 的操作。
在下一章中,我们将继续探索 Tableau,详细研究数据。我们将考虑如何使用 Tableau 的数据处理引擎 Hyper 进行数据准备,并探索一些有用的数据准备模型和技术。
了解更多关于 Discord
加入本书的 Discord 社区——在这里你可以分享反馈、向作者提问,并了解新版本的发布——请扫描下面的二维码:
第二章:准备你的数据
你有没有问过自己,你的数据是否足够干净,能被分析?很可能,所有与数据打交道的人都有过这样的疑问,这也是本章致力于帮助你准备好数据进行分析的原因,这个过程通常被称为数据清理。
本章的第一部分偏向理论,不包括练习。建议仔细阅读这些信息,因为它为更深入的理解提供了基础。本章后半部分提供了专门关注数据准备的各种练习。
现在,让我们深入探讨这个令人着迷的话题,目标是丰富我们的理解,成为更好的数据管理者。
在本章中,我们将讨论以下主题:
-
理解 Hyper
-
聚焦数据准备
-
调查数据
-
清理杂乱的数据
由于 Tableau Desktop 10.5 已经上市一段时间,你可能已经听说过 Hyper。不管你是否听说过,继续阅读,了解这个功能的基础知识!
理解 Hyper
在本节中,我们将探索 Tableau 的数据处理引擎,以及它如何在企业中实现结构化而富有活力的数据挖掘过程。自 Tableau 10.5 发布以来,我们可以利用 Hyper 这一高性能数据库,让我们能够比以往更快地查询源数据。即使是高级开发人员,也通常对 Hyper 了解不深,因为它并不是日常活动中显而易见的一部分;然而,如果你真想掌握如何为 Tableau 准备数据,这种理解至关重要。
Hyper 最初是 2008 年在慕尼黑大学作为一个研究项目开始的。2016 年,它被 Tableau 收购,并被指定为 Tableau 的专用数据引擎小组,仍然保持其在慕尼黑的总部和员工。最初在 Tableau 10.5 中,Hyper 仅替代了早期的数据处理引擎,用于提取。至今,Hyper 仍然没有涉及实时连接,但 Tableau Prep Builder 现在也使用 Hyper 引擎,并且未来会有更多的使用场景。如tableau.com所述,“Hyper 可以在几秒钟内切片并处理大量数据,你将看到查询速度提高最多 5 倍,提取创建速度提高最多 3 倍。”如果你仍然意犹未尽,始终可以通过 API 调用在你喜欢的编程语言中使用 Hyper:help.tableau.com/current/api/hyper_api/en-us/docs/hyper_api_reference.html
。
那么,是什么让 Hyper 如此快速呢?让我们看看它的工作原理!
Tableau 的数据处理引擎
Hyper 的创始人共享的愿景是创建一个高性能的下一代数据库——一个系统,一个状态,没有妥协,没有延迟。并且它成功了——今天,Hyper 能够同时承担通用数据库用途、数据摄取和分析。
内存价格已呈指数下降。CPU 也是如此;晶体管数量根据摩尔定律增加,而其他特性则停滞不前。内存变便宜了,但处理能力仍需提升。
摩尔定律是英特尔联合创始人戈登·摩尔提出的观察结果:芯片上晶体管的数量每两年翻一番,而成本减半。关于摩尔定律的更多信息可以在 Investopedia 上找到:www.investopedia.com/terms/m/mooreslaw.asp
。
在 Hyper 的实验过程中,创始人测量发现手写的 C 代码比任何现有的数据库引擎都要快,于是他们想到了一个点子:将 Tableau 查询转换为 C 代码,并同时优化它,所有这些操作都在后台进行,用户不会察觉。这种翻译和优化是有成本的;传统的数据库引擎可以立即开始执行代码,而 Tableau 需要先将查询转换为代码,再优化这段代码,然后编译成机器代码,最后才能执行。大问题是,这样做还会更快吗?通过在 Tableau Public 和其他工作簿上的许多测试验证,答案是肯定的!
此外,如果有一个查询预计在不编译成机器代码的情况下执行会更快,Tableau 拥有自己的虚拟机(VM),可以立即执行该查询。与此并行,Hyper 能够利用 99%的可用 CPU 计算能力,而其他并行处理只能利用 29%的 CPU 计算能力。这归功于小块驱动并行化这一独特且创新的技术。
对于那些想了解更多关于小块驱动并行化的人,后来成为 Hyper 引擎基准的论文可以在15721.courses.cs.cmu.edu/spring2016/papers/p743-leis.pdf
找到。
如果你想了解更多关于 Hyper 引擎的信息,我强烈推荐观看以下视频:youtu.be/h2av4CX0k6s
。
Hyper 将传统数据仓库操作的三步进行并行化:
-
事务处理和连续数据摄取(在线事务处理,或OLTP)
-
分析处理(在线分析处理,或OLAP)
-
超越关系型(在线超越关系型处理,或OBRP)
同时执行这些步骤使 Hyper 更加高效和性能更强,这与传统系统不同,传统系统将这三步分开并按顺序执行。
总结来说,Hyper 是一个高度专业化的数据库引擎,它允许我们作为用户从查询中获得最佳结果。如果你还记得,在第一章,回顾基础知识中,我们已经看到,工作表或仪表板上的每一个变化,包括拖放字段、筛选器和计算字段等,都会被转换成一个查询。这些查询基本上是 SQL 类似的;然而,在 Tableau 中,我们将查询引擎称为 VizQL。
VizQL,是 Tableau Desktop 中的另一个隐藏宝藏,负责以图表形式可视化数据,并完全在内存中执行。其优势在于,这里不需要额外的数据库空间。VizQL 在用户将字段放置到货架时生成。然后,VizQL 被转换为 SQL、MDX 或 Tableau 查询语言(TQL)并通过驱动程序传递到后端数据源。
Hyper 要点
这个 Tableau 数据处理引擎的概述展示了与数据接口的灵活方法。了解数据处理引擎可以减少数据准备和数据建模的工作量,从而帮助我们简化整个数据挖掘生命周期。在这一点上,你不需要过多担心数据类型和可以基于数据库字段计算的数据。Tableau 可以为你完成所有这方面的工作。在下一节中,我们将讨论从数据源的角度,你需要考虑的事项。
专注于数据准备
Tableau 可以在多个数据准备阶段有效使用。不幸的是,仅凭一章内容无法深入探讨 Tableau 如何在每个阶段中使用。实际上,这样的深入探讨可能值得写一本书!因此,我们的重点将集中在数据准备阶段,因为这个阶段历史上占据了数据挖掘工作量的 60%。我们的目标是学习如何利用 Tableau 来简化这一过程。
数据调查
Tableau 可以是一个非常有效的工具,用于简单的数据调查。在调查过程中,有时你可能会发现清理数据或基于现有字段填充不完整数据的方法。有时,遗憾的是,拼凑一个完整的数据集所需的拼图碎片并不充足。在这种情况下,Tableau 可以有效地帮助你明确哪些地方存在缺失,这反过来可能会激励组织更完整地填充底层数据。
在这个练习中,我们将探索如何使用 Tableau 快速发现数据集中每个字段的空值百分比。接下来,我们将探索如何从现有字段推断数据以填补空缺。
建立空值
以下是调查数据的步骤:
-
如果你还没有完成,请访问
public.tableau.com/profile/marleen.meier
查找并下载与本章相关的工作簿。 -
转到名为
Surveying
&
Exploring``Data
的工作表,并选择Happiness Report
数据源。 -
将Region和Country拖动到Rows架上。观察到在某些情况下,Region字段对于某些国家具有Null值:
图 2.1:空区域
- 右键点击并编辑名为
Select Field
的参数。注意,数据类型已设置为整数,我们可以看到一个包含数据集中每个字段名称的列表:
图 2.2:编辑参数
-
在数据窗格中,右键点击我们刚创建的参数并选择显示参数控制。
-
创建一个名为
% Populated
的计算字段,并编写以下计算:SUM([Number of Records]) / TOTAL(SUM([Number of Records]))
-
在数据窗格中,右键点击% Populated并选择默认属性 | 数字格式...:
图 2.3:调整默认属性
-
在弹出的对话框中,选择百分比。
-
创建一个名为
Null & Populated
的计算字段,并添加以下代码。注意,完整的 case 语句较长,但也很重复。在需要进行较长但重复计算的情况下,考虑使用 Excel 更快速、准确地编写代码。通过使用 Excel 的
CONCATENATE
函数,您可能节省时间并避免输入错误。在以下代码块中,代码行只表示总数的一部分,但应该足够帮助您生成整个块:
CASE [Select Field] WHEN 1 THEN IF ISNULL ([Country]) THEN 'Null Values' ELSE 'Populated Values' END WHEN 2 THEN IF ISNULL ([Region]) THEN 'Null Values' ELSE 'Populated Values' END WHEN 3 THEN IF ISNULL ([Economy (GDP per Capita)]) THEN 'Null Values' ELSE 'Populated Values' END WHEN 4 THEN IF ISNULL ([Family]) THEN 'Null Values' ELSE 'Populated Values' END WHEN 5 THEN IF ISNULL ([Freedom]) THEN 'Null Values' ELSE 'Populated Values' END WHEN 6 THEN IF ISNULL ([Happiness Rank]) THEN 'Null Values' ELSE 'Populated Values' END WHEN 7 THEN IF ISNULL ([Happiness Score]) THEN 'Null Values' ELSE 'Populated Values' END WHEN 8 THEN IF ISNULL ([Health (Life Expectancy)]) THEN 'Null Values' ELSE 'Populated Values' END WHEN 9 THEN IF ISNULL ([Standard Error]) THEN 'Null Values' ELSE 'Populated Values' END END
-
从Rows架上移除Region和Country。
-
将Null & Populated放置在Rows和Color架上,将% Populated放置在Columns和Label架上:
图 2.4:已填充值
-
如有需要,可以将Null Values的颜色更改为红色,将Populated Values的颜色更改为绿色。可以通过点击Marks卡上的Color并选择编辑颜色来实现。
-
点击工作表右上角的Select Field参数中的箭头,并选择单一值列表。
-
在Select Field参数中选择各种选项,并注意某些字段有较高的空值百分比。例如,在以下图表中,32.98%的记录没有Region值:
图 2.5:比较空值和已填充值
基于这个练习,让我们探索如何使用相同的数据集清理和推断现有数据。
推断数据
本练习将扩展前一练习,通过清理现有数据并从已知信息中填充部分缺失数据来完成。我们将假设我们知道哪个国家属于哪个地区。我们将利用这些知识来修复区域
字段中的错误,并使用 Tableau 填充空白数据:
-
从前一练习结束的地方开始,创建一个名为
区域外推
的计算字段,其中包含以下代码块:CASE [Country] WHEN 'Afghanistan' THEN 'Southern Asia' WHEN 'Albania' THEN 'Central and Eastern Europe' WHEN 'Algeria' THEN 'Middle East and Northern Africa' WHEN 'Angola' THEN 'Sub-Saharan Africa' WHEN 'Argentina' THEN 'Latin America and Caribbean' WHEN 'Armenia' THEN 'Central and Eastern Europe' WHEN 'Australia' THEN 'Australia and New Zealand' WHEN 'Austria' THEN 'Western Europe' //complete the case statement with the remaining fields in the data set END
作为
CASE
语句的替代方案,您可以使用IF
语句,例如:If [Country] = 'Afghanistan' then 'Southern Asia' ELSEIF [Country] = 'Albania' then … END
为了加快长计算字段的繁琐创建过程,您可以将数据下载到 Excel 文件中,并通过连接各个部分来创建计算字段,如下所示:
图 2.6:在 Excel 中编译计算
然后,您可以将它们从 Excel 复制到 Tableau 中。但是,在本练习中,我创建了一个名为
备份
的备用字段,该字段可在与本章相关的 Tableau 工作簿中找到,其中包含区域外推
字段所需的完整计算。您可以随时使用这个备份。解决方案仪表板还包含所有国家。因此,您还可以从该文件复制区域外推
字段。 -
在选择字段参数中添加一个区域外推选项:
图 2.7:将区域外推添加到参数中
-
将以下代码添加到
空值和填充
计算字段中:WHEN 10 THEN IF ISNULL ([Region Extrapolated]) THEN 'Null Values' ELSE 'Populated Values' END
-
注意区域外推字段现在已经完全填充:
图 2.8:完全填充的区域外推字段
现在让我们考虑一下前面练习中的一些具体细节。
让我们看一下以下代码块。
请注意,完整的CASE
语句有几行长。以下是其中的一部分代表性内容:
CASE [% Populated]
WHEN 1 THEN IF ISNULL ([Country]) THEN 'Null Values' ELSE
'Populated Values' END
...
此CASE
语句是一个逐行计算,考虑数据集中的每个字段,并确定哪些行是填充的,哪些不是。例如,在上述代码的代表行中,将评估Country
字段的每一行是否为 null。这是因为计算字段将在现有数据的基础上添加一个新列——仅在 Tableau 中,而不是数据源本身——并且每一行都将获得一个值。这些值可以是 N/A 或 null 值。
下面的代码相当于快速表计算总比例
:
SUM([Number of Records]) / TOTAL(SUM([Number of Records]))
与空值和填充
计算字段一起,它允许我们查看实际填充了多少字段的百分比。
习惯于从头开始编写表计算是个好主意,即使有等效的快速表计算可用。这将帮助您更清楚地理解表计算。
以下CASE
语句是一个示例,说明如何使用一个或多个字段来外推另一个字段的内容:
CASE [Country]
WHEN 'Afghanistan' THEN 'Southern Asia'
... END
例如,数据集中的地区
字段有很大比例的空值,甚至现有的数据也存在错误。根据我们对业务的了解(即哪个国家属于哪个地区),我们能够使用国家
字段填充数据集中的所有区域,并确保信息的准确性。
空值几乎是所有大型真实数据集的一部分。了解每个字段中有多少空值,对于确保提供准确的商业智能至关重要。当最终结果不会受到显著影响时,可能可以容忍一些空值,但空值过多可能会使结果无效。然而,正如本节所示,在某些情况下,可以使用一个或多个字段来推断应输入到数据不足或错误填充字段中的值。
如本节所示,Tableau 使你能够有效地向数据团队传达哪些值缺失,哪些值有误,以及如何进行可能的变通方法,这对整体数据挖掘工作至关重要。接下来,我们将研究一些稍微复杂的数据,这些数据不是以规范的列格式呈现。别担心,Tableau 能够应对这些情况。
清理杂乱数据
美国政府为各种行政流程提供了有用的文档。例如,健康与公共服务部(HSS)提供了 ICD-9 代码列表,即国际疾病分类与相关健康问题分类代码。不幸的是,这些代码并不总是以易于访问的格式提供。
作为一个示例,我们来看一个实际的 HHS 文档,名为 R756OTN,可以在www.cms.gov/Regulations-and-Guidance/Guidance/Transmittals/downloads/R756OTN.pdf
找到。
清理数据
转到本章随附工作簿中的清理数据
工作表,并执行以下步骤:
- 在数据面板中,选择R756OTN 原始数据源:
图 2.9:选择原始文件
- 将诊断拖到行架上,并选择添加所有成员。点击AZ符号对诊断列进行排序。注意到某些行中出现的无效数据:
图 2.10:将诊断添加到行
-
创建一个名为
DX
的计算字段,包含以下代码:SPLIT([Diagnosis], " ", 1)
-
创建一个名为
空值排查
的计算字段,包含以下代码:INT(MID([DX],2,1))
-
在数据面板中,将
空值排查
从度量拖到维度。 -
将诊断、DX和空值排查拖到行架上。观察当诊断字段中的第二个字符不是数字时,返回空值:
图 2.11:在行上排序字段
-
创建一个名为
从 ICD 代码中排除
的计算字段,包含以下代码:ISNULL([Null Hunting])
-
清除所有字段,如 第一章 所示,回顾基础知识,并将 标记 卡设置为 形状。
-
将 Exclude from ICD Codes 放到 颜色 和 形状 区域,然后将 DX 放到 行 区域。观察标记为 True 的行:
图 2.12:排除垃圾数据
-
为了排除垃圾数据(即那些
Exclude from ICD Codes
为True
的行),将Exclude from ICD Codes
放到 筛选器 区域,并取消选择 True。 -
创建一个名为
Diagnosis Text
的计算字段,包含以下代码:REPLACE([Diagnosis],[DX] + "","")
-
将 Diagnosis Text 放到 行 区域,放在 DX 后面。同时,将 Exclude from ICD Codes 从 行 区域和 标记 卡中移除,并将标记类型设置为 自动:
图 2.13:观察清理后的数据
现在我们已经完成了练习,来花点时间回顾一下我们所用的代码:
-
SPLIT
函数在 Tableau 9.0 中引入:SPLIT([Diagnosis], " ", 1)
-
如 Tableau 帮助文档中关于该函数的描述,该函数执行以下操作:
返回由分隔符确定的子字符串,提取字符串开头或结尾的字符。
-
该函数也可以在 数据源 标签中直接调用,通过点击列标题并选择 拆分。要从字符串的末尾提取字符,令函数的最后一个参数(即令牌数)为负值。
-
考虑以下代码,这是我们用于创建
Null Hunting
字段的代码:INT(MID([DX],2,1))
-
MID
函数的使用非常直观,和 Excel 中的对应函数类似。然而,INT
函数的使用在这里可能会让人困惑。将一个字母字符与INT
函数结合使用时,Tableau 会返回Null
。这正好满足了我们的需求,因为我们只需要通过找到空值来识别那些没有以数字开头的行。
-
ISNULL
是一个布尔函数,当值为Null
时,它会返回TRUE
:ISNULL([Null Hunting])
-
在创建
Diagnosis Text
字段时使用了REPLACE
函数:REPLACE([Diagnosis],[DX] + "","")
-
这个计算字段使用
DX
中提取的 ICD-9 代码,去除Diagnosis
字段中相同的代码,从而提供了一个相对干净的描述。注意 相对干净 这一说法。被移除的行最初是与较长描述相关联的,因此包括了换行符。最终结果中增加的行就是我们在本练习中移除的那些。因此,较长的描述在此解决方案中通过replace
计算被截断了。
本次练习的最终输出可以是将数据从 Tableau 导出,作为额外的数据源。这些数据可以供 Tableau 以及其他工具用于未来的报告需求。例如,DX
字段在数据融合中可能会有用。
Tableau 是否提供了更好的方法来解决与前面解决方案相关的数据截断问题?是的!让我们转向下一个练习,考虑正则表达式函数。
提取数据
尽管如前面练习所示,清洗数据中,SPLIT
函数可以用于清洗干净的数据,但正则表达式函数更加强大,扩展了 Tableau 传统的可视化和分析重点,也包括数据清洗能力。
让我们看一个在 Tableau 中需要处理非常混乱数据的例子。我们的目标是提取电话号码。
以下是步骤:
-
如果尚未这样做,请从
public.tableau.com/profile/marleen.meier
下载并在 Tableau 中打开工作簿。 -
选择
提取数据
选项卡。 -
在数据面板中,选择数据串数据源,并将数据串字段拖放到行架上。观察提取电话号码时遇到的挑战:
图 2.14:从混乱数据格式中提取数据
- 通过单击查看数据按钮并复制几行来访问底层数据:
图 2.15:访问底层数据
- 转到
regexpal.com/
并将数据粘贴到标有测试字符串的面板中,即第二个面板:
图 2.16:Regexpal
-
在第一个面板(标有正则表达式)中,输入以下内容:
\([0-9]{3}\)-[0-9]{3}-[0-9]{4}
-
返回 Tableau 并创建一个名为
Phone Number
的计算字段,使用以下代码块。注意计算字段中嵌套的正则表达式:REGEXP_EXTRACT([String of Data (String of Data)],'(\([0-9]{3}\)-[0-9]{3}-[0-9]{4})')
-
将Phone Number放置在行架上,并观察结果:
图 2.17:提取数据的最终视图
现在让我们更详细地考虑前面练习中的一些具体内容:
-
考虑以下代码块:
REGEXP_EXTRACT([String of Data],'()')
-
这里故意排除表达式模式,因为稍后将详细介绍。‘
()
’代码充当表达式模式的占位符。本例中使用的REGEXP_EXTRACT
函数在 Tableau 的帮助文档中描述如下:
返回与正则表达式模式中捕获组匹配的给定字符串的子字符串。
-
请注意,截至撰写本文时,Tableau 文档未说明如何确保函数的模式输入部分正确分隔。为了本例,请确保在模式输入部分周围包含‘
()
’以避免空输出。 -
在一个计算字段中嵌套的
VizQL
查询本身的嵌套可能会影响性能(如果嵌套/聚合的层次过多)。 -
有许多正则表达式网站允许你输入自己的代码并通过提供基于你提供的示例数据的即时反馈来帮助你。
regexpal.com/
只是其中一个网站,随意搜索以找到一个符合你需求的站点! -
现在,考虑一下这个表达式:
\([0-9]{3}\)-[0-9]{3}-[0-9]{4}
在这种情况下,\
表示接下来的字符不应被视为特殊字符,而是字面量字符。在我们的示例中,我们字面上寻找一个左括号。[0-9]
表示我们正在寻找一个或多个数字。或者,考虑使用\d
来获得相同的结果。{3}
表示我们正在寻找连续的三个数字。
与模式开始时的左括号一样,\
字符表示右括号是字面量字符。-
是一个字面量字符,专门用于匹配连字符。其余的表达式模式应根据前面的信息进行解读。
在回顾完这个练习后,你可能会好奇如何仅返回电子邮件地址。根据www.regular-expressions.info/email.html
,符合 RFC 5322 标准的电子邮件地址的正则表达式如下:
(?:[a-z0-9!#$%&'*+/=?^_'{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_'{|}~-
]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-
\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:a-z0-9?\.)+a-z0-9?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-
5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-
\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-
\x7f])+)\])
电子邮件并不总是遵循 RFC 5322 标准,因此可能需要额外的工作来真正清理电子邮件地址数据。
虽然我不会详细解释这段代码,但你可以在www.regular-expressions.info/email.html
阅读相关内容,这个网站是学习正则表达式的一个很好的资源。此外,YouTube 上也有很多有用的正则表达式教程。
这个练习的最终输出可能应该用来增强现有的源数据。数据转储这样的例子不应该出现在数据仓库中;然而,即使是重要且必要的数据,也可能隐藏在这些转储中,Tableau 可以有效地用来提取这些数据。
总结
我们在本章开始时讨论了 Tableau 的数据处理引擎。这展示了 Tableau 在处理数据时的灵活性。了解数据处理引擎非常重要,以确保你的数据挖掘工作能够智能地聚焦。如果不了解,它可能会浪费在与 Tableau 无关的活动上。
接下来,我们集中讨论了数据准备工作。我们考虑使用 Tableau 进行调查并清理数据。由正则表达式函数所代表的数据清理功能特别引人注目,值得进一步研究。
在完成了我们的第一次以数据为中心的讨论后,我们将继续进行第三章,使用 Tableau Prep Builder,并探讨 Tableau 带来的一个新功能。Tableau Prep Builder 是一个专门的数据预处理界面,可以大大减少你在预处理阶段所需的时间。我们将深入了解清理、合并、过滤、连接等功能,以及 Tableau Prep Builder 的其他功能。
在 Discord 上了解更多
要加入本书的 Discord 社区——在这里你可以分享反馈、向作者提问,并了解新版本发布——请扫描下面的二维码:
第三章:使用 Tableau Prep Builder
Tableau Prep Builder 随 Tableau Desktop 2018.1 版本推出,但我们可以用 Tableau Prep Builder(以下简称本章中的 Prep)做些什么呢?该工具的核心目的是数据准备。好消息是,Prep 完全兼容 Tableau Desktop,也兼容 Tableau Server。这意味着你可以通过一键操作在 Prep 中执行数据清理任务。此外,Prep 的可视化程度与其“大哥” Tableau Desktop 一样高,这意味着你可以在完全可视的格式中看到每一步的数据准备过程。
因此,让我们深入了解 图形用户界面(GUI),并惊叹于这个高端产品,它能帮助你快速获得初步的数据洞察,让你能够更快地决定数据集是否值得分析。Prep 将为更顺畅的 Tableau Desktop 使用体验铺平道路。
本章将讨论以下主题:
-
连接数据
-
Prep 图形用户界面
-
数据质量
-
使用 Prep 的其他选项
-
导出数据
为了开始,我们需要加载数据。如何在 Prep 中执行此操作,将在接下来的章节中描述。
连接数据
如果你熟悉 Tableau Desktop,那么 Prep 对你来说就是一个轻松的游戏。其操作和界面非常相似,连接数据时,如果 Prep 提供了连接器,无论是文本文件、数据库还是提取文件,都可以同样操作。乍一看,你可能甚至察觉不到 Prep 和 Tableau Desktop 的界面有何不同,这为你提供了一个方便的优势,即可以立即开始数据准备工作。
开始时,首先打开 Prep,然后点击 + 打开一个文件。接下来会出现如下屏幕:
图 3.1:连接数据
从之前的截图中,我们可以看到你可以在搜索栏中选择你想要连接的数据类型。就像在 Tableau 中一样,Prep 的功能包含了多个数据库。
现在让我们通过一个实际的练习来连接一个数据集。对于这个练习,我们需要以下数据集:www.kaggle.com/airbnb/boston
。请下载 calendar.csv
、listings.csv
和 reviews.csv
。或者,你也可以从本章在 Tableau Public 上的相关仓库下载:github.com/PacktPublishing/Mastering-Tableau-2023-Fourth-Edition/tree/main/Chapter03
。
首先,我们将从 calendar.csv
文件开始。通过与文本文件建立连接,并选择你的 .csv
文件,将其添加到空白的 Prep 画布中。你现在会看到如下屏幕:
图 3.2:输入数据
恭喜你——你刚刚完成了第一个 Prep 连接。在这里,你可以根据需要操作并可视化你的连接数据集!
在接下来的部分中,我将更详细地描述 GUI。
Prep GUI
用户体验是一个重要话题,不仅仅是在构建仪表板时,使用 Tableau 的其他方面时也很重要。Tableau 的一大卖点一直是其易用的 GUI,这也是 Tableau 成为其客户深受喜爱的工具之一的原因之一。
Prep GUI 有两个重要的画布可以查看。数据连接到 Prep 后,工作区将被分成几个部分:
图 3.3:Prep 工作区部分
让我们看看从上面的截图中可以看到什么:
A:连接窗格,显示您在所选位置可用的输入文件。
B:流程窗格,显示您当前的 Prep 流程。这个流程始终从输入步骤开始。
C:输入窗格的设置,提供多个选项以配置您的输入。
D:输入窗格的示例,显示您移动到连接窗格的字段,包括示例值。
在输入窗格(C)中,您可以使用通配符联合(多个文件)功能,从同一目录添加多个文件。同时,您还可以限制 Prep 打印的示例集,以提高性能。在输入窗格示例(D)中,您可以选择和取消选择要导入的字段,并更改它们的数据类型。数据类型选项例如字符串、日期或数字。
第二个 GUI 是配置窗格。一旦选择了所需的输入数据,点击流程窗格中的+并选择添加:清理步骤。此时,配置窗格将显示数据网格:
图 3.4:清理数据
在前面的截图中,配置窗格将数据源中的每一列显示在两个部分中。上部分显示聚合信息。例如,日期(列 2)显示每个日期的行数,以小直方图的形式显示。列可以通过点击列名旁边的排序图标(鼠标悬停在列上时会出现的迷你条形图)来排序,并选择一个项目。例如,选择True,在available(列 3)中。所有相关特性将被高亮显示:
图 3.5:可视化筛选
这使您在开始清理数据之前,就能对数据有一些初步的了解。在以下截图中,每一行的数据都以源数据的形式显示在配置窗格的下部:
图 3.6:数据概览
到目前为止,我们已经看到,在 Prep 中加载数据后,可以通过点击字段或列中的条形图来应用可视化筛选。下方窗格将始终显示所做选择在行级别的数据源。接下来,我们将继续添加更多数据源。
了解 Prep
让我们从一个实际的例子开始:
在 calendar.csv
文件旁边,连接以下文件:
-
listings.csv
-
reviews.csv
现在,将它们拖到流程面板上:
图 3.7:多个表格输入
你能回答以下问题吗?
-
有多少房源在描述中使用了“海滩”这个词?
-
标记为“确切位置”的公寓百分比是多少?
-
哪一天输入了最多的评论?
没有像 Prep 这样的工具,解决这些类型的问题要困难得多。Prep 使我们的数据分析过程更加快速和轻松,这也是我鼓励您花更多时间学习 Prep 和 Tableau Desktop 的原因!
解决方案可以在与本章相关的工作簿中找到,网址如下:public.tableau.com/profile/marleen.meier
。
在这里,作为一个例子,我对日期使用了排序功能,以回答第三个问题:在哪一天输入了最多的评论?
图 3.8:按日期排序
如你所见,排序这个字段后,日期按照输入数量排列,从而使得回答问题变得非常简单:在哪一天输入了最多的评论? 在经过几次点击后,你会发现这一切开始变得很自然,是吗?
你对数据集所做的所有更改都可以在配置文件面板的左侧追溯。但不要忘记为每一步添加一个合适的名称:这将使其他人和你自己更容易理解你的过程。
那么,接下来我们来看看 Prep 的数据质量功能。
数据质量
Prep 提供了许多不同的功能。有时,您可能需要使用多个工具来准备数据集,以便将其调整到所需的形状。其他时候,您可能只需运行一个聚合(一个功能)就可以完成。这真的取决于数据集本身和预期的输出。事实上,Prep 输出数据与您在 Tableau Desktop 可视化中所需数据的相似度越高,VizQL 在 Tableau Desktop 上运行的效率就越高。在 Tableau Desktop 中查询越少,仪表板生成就越快。
对我来说,Prep 最棒的地方在于它能够处理海量数据。有时,我甚至会将它用于那些我不想在 Tableau Desktop 中可视化的数据集,只是为了快速查看,比如包含特定词语的行数、需要的列数、如果我筛选某个特定值,日期范围会发生什么变化等等!在几分钟内,我就能得到一些通过数据库查询或 Excel 函数可能需要更长时间才能获得的见解。我希望到本章结束时,您能将数据准备的时间减少一半(至少)。我们将数据准备的功能分为五个子类别:清洗、合并与连接、聚合、透视和脚本。让我们从清洗数据开始!
清洗数据
我们在Prep GUI部分已经看到过以下画布。要创建清理步骤,用户只需点击输入旁边的+并选择添加:清理步骤。在清理步骤中,可以执行多个操作,例如筛选或创建计算字段。还要注意 Prep 给出的推荐:
图 3.9:推荐
Prep 分析列内容并提出可能适合该数据的更改。例如,listing_url列被识别为网页,因此 Prep 建议将其更改为数据角色 URL。第二个、第三个以及更多在listing_url之后的推荐是删除某些列。这可能是因为这些列没有数据或数据量很少。推荐列表继续。
这个功能非常有用,特别是对于不熟悉的数据集。我的工作方式是查看推荐,检查它们是否有意义,然后执行更改——或者不执行。不要盲目相信这些推荐,但它们能指出你可能忽视的数据问题。
数据通常比较杂乱,包括空值、手动输入的拼写错误、不一致的格式、来自其他系统的变动等等。因此,在进行分析或创建仪表板之前,必须先清理这些数据。此部分将向你展示如何在列级别清理数据。
一旦在清理步骤中选择了某个值,你可以选择仅保留、排除、编辑值或替换为空值:
图 3.10:快速访问
这些更改不会改变数据源本身。Prep 像是一个中间步骤,或者是原始数据源和你的 Tableau Desktop 之间的一个过滤器。排除某个值,使用图 3.10 中看到的选项,只会将其从 Prep 中移除。但是,如果稍后作为 Tableau Desktop 的输入使用,将无法再将该特定值添加回来。这个选项只会保留在 Prep 中。
另一个稍微隐藏的选项是点击列标题旁的省略号(...)(如图 3.11所示),然后选择清理:
图 3.11:更多选项
这个清理功能是基于列的数据类型运作的。在前面的截图中,数据类型是字符串(由Abc图标表示)。对于其他数据类型,该选项将变灰,因为清理仅适用于字符串类型。该选项使你能够使用八种更多的清理功能:
-
转换为大写
-
转换为小写
-
删除字母
-
删除数字
-
删除标点符号
-
去除空格
-
删除多余空格
-
删除所有空格
数据类型可以在每个列标题的上方更改;你会在列名上方找到一个符号,可以通过点击它进行更改,就像在 Tableau Desktop 中一样:
图 3.12:更改数据类型
这在 Prep 错误解释某一列的数据类型时非常有用。错误的数据类型分配会影响您在该列上执行的计算,以及 Tableau Desktop 如何可视化该列。
在接下来的部分中,我们将练习合并多个数据集。您可能想要合并订单数据与运输数据(使用联接),或者将 2020 年的销售数据附加到 2019 年的销售数据集中(使用合并)。要了解如何操作,请继续阅读!
合并与联接
我们现在将联接这三个数据集,以便我们可以一起分析和可视化它们。三个数据集(listings.csv
、reviews.csv
和 calendar.csv
)的特性要求进行联接而非合并。不过,我仍会向您展示合并的步骤,以便您了解何时需要使用它!
添加合并
在 Tableau 中,合并是将数据附加到现有数据集中的操作。想象一下,您有两个 Excel 文件。它们都有完全相同的表头,但一个包含 2019 年的数据,另一个包含 2020 年的数据。如果将 2020 年的数据合并到 2019 年的数据中,您会将 2020 年文件的行附加到 2019 年文件的行下方。执行合并时,两个数据集需要几乎相同的布局/表头。为什么是“几乎”?您将在接下来的练习中看到:
- 开始此练习时,您的 Prep 流程面板应该如下所示:
图 3.13:流程面板
-
通过点击 + 按钮旁边的 listings 数据集来添加清洗步骤。
您可以通过右键点击某个步骤并选择 编辑颜色 来根据您的喜好更改每个步骤的颜色。
-
选择 host_identity_verified 列并过滤 True:
图 3.14:按 True 进行过滤
- 现在,创建一个计算字段,称为
DatasetA_ID
,其中只包含字符串'A'
:
图 3.15:创建计算字段
- 从相同的 listings 数据中创建第二个清洗步骤,这次在 host_identity_verified 列中过滤 True:
图 3.16:按 True 进行过滤
- 创建一个计算字段
DatasetB_ID
,其中只包含字符串'B'
,使用在 图 3.15 中显示的相同过程。右键单击并点击 重命名 来重命名步骤,有助于跟踪所应用的更改。您的流程应该如下所示:
图 3.17:视觉流程
- 您现在已经创建了两个可以通过合并结合的数据集,而不需要更改原始数据。通过选择 Union(在点击 Dataset A 旁边的 + 后)或者将一个步骤拖到另一个步骤上(Dataset B 在 Dataset A 上方,或反之)来合并这两个数据集:
图 3.18:合并
- 通过点击 Union 1 并查看屏幕左下角的输入详情来检查所有字段是否匹配:
图 3.19:视觉检查
-
在前面的截图中,你可以看到左侧是关于联合的信息。自上而下依次是:Inputs及其各自的颜色(这些颜色与流程面板中的颜色相同),Resulting Fields,显示有 2 个不匹配的字段,最后是Mismatched Fields本身:DatasetA_ID和DatasetB_ID。每个不匹配字段旁边的颜色表示我们的DatasetB_ID字段在DatasetA中不存在,而DatasetA_ID字段在DatasetB中不存在。
-
在这种情况下,我们知道即使命名约定不同,这些列也可以被追加。两个字段的更好命名应该是Dataset_ID(你可以回到之前的步骤试试看)。这样,Prep 就不会显示任何不匹配的情况。对于我们这里的操作,我们可以直接将一个字段拖动到另一个字段上方进行合并,从而允许 Prep 将它们视为一个列:
图 3.20:合并
- 你可以看到Resulting Fields现在显示 0 个不匹配项,且两个数据集的颜色已在列标题下方的条形图中显示:
图 3.21:颜色编码
- 通过选择并右键点击联合步骤,将Union 1重命名为listings2,并在你需要时,通过选择并右键点击联合步骤,点击Add Description来添加描述—现在所做的额外工作将有助于你以后进行复制、文档编写和解释。
恭喜,你的第一个联合成功了。我们首先将原始的列表数据集拆分成两个,然后再合并成一个。像我们这样将具有相同布局的数据堆叠在一起,是联合的典型任务。
通配符联合
你也可以选择告诉 Prep 哪些文件需要联合,而不是像我们在前一部分那样将一个数据输入拖动到另一个数据输入上方。通常,部门会有一个共享的位置,用来存储例如名为Jan2023Revenue、Feb2023Revenue、Mar2023Revenue等的 Excel 文件。如果你遇到这种情况,你可以执行以下操作:
-
将 Prep 连接到你想使用的任何一个文件。
-
点击输入数据图标,并选择Tables标签。现在你可以看到,在某些条件下,你可以创建一个联合:
图 3.22:Tables 菜单视图
- 我将在同一目录中选择所有匹配的文件名,这些文件名以()开头,并以2023Revenue.xlsx结尾。如你所见,1 月、2 月和 3 月的文件都会被包含在内,你甚至可以通过使用File和Worksheet筛选器来过滤输入,并在完成时点击Apply*:
图 3.23:过滤联合
这就是通配符联合功能。它真的很强大!试试看,亲自体验一下。
添加连接
现在,我们将继续在相同的流程面板中工作,并重点关注连接。简要回顾一下,连接是横向追加数据。一般来说,联合会增加行数,而连接会改变列数:
- 将listings2拖动到reviews上,直到出现连接选项。
图 3.24:连接
-
选择reviews中的listing_id和listings2中的id作为连接字段。请注意,你可以通过点击连接类型下的维恩图标来更改连接类型:
图 3.25:视觉检查连接
上面的概述告诉我们,所有
68,275
行评论数据集中的数据都与listing2数据集中的一行匹配。然而,我们的listing2数据集中有756
行不匹配。我们的连接结果因此为68,275
行。但很可能并非所有的房源都有评论,因此我们可以合理地假设我们的连接按预期工作。 -
另一个检查方法是将连接更改为完全外连接,然后稍后在 Tableau Desktop 中深入分析数据。要进行完全外连接,只需点击两个圆的外边缘:
图 3.26:全连接
- 如果你想查看即时结果,只需右键点击,例如,连接符号(由维恩图标表示,如下截图所示),然后选择在 Tableau Desktop 中预览,即可在 Tableau Desktop 中查看数据:
图 3.27:预览
- 我们还可以重新命名这一步骤;让我们将连接的名称改为
lis&rev
。
到现在为止,我们已经了解了如何清洗数据,以及如何使用联合和连接。联合部分教会我们如何将数据垂直追加或一个接一个地放在一起。连接部分让我们能够将数据横向合并或并排显示。更具体地说,我们能够将房源信息与其对应的评论结合起来。这样一来,我们不再有两个数据集,而是创建了一个数据集,让我们可以查找某个房源的评论,并在同一行中查看与房源本身相关的所有数据,例如房源类型、卧室数量、是否有海景等等。
接下来,让我们继续进行聚合步骤。
聚合
聚合用于当你想改变数据粒度时。在我们的数据集中,每一行对应一条评论。然而,我们想看看在波士顿做 Airbnb 的房东,如果在这个行业的时间更长,他们的评论是否更多,而那些新近开始的房东评论较少。为了实现这一目标,我们需要按房东开始提供房源的年份来聚合评论数量。host_since字段将为我们提供有用信息,reviewer_id字段也会提供帮助。对于后者,我们将计算留下评论的不同评论者。让我们开始吧!
我们当前的流程面板看起来是这样的:
图 3.28:流程面板
要对评论数量进行聚合,请执行以下步骤:
- 首先,点击lis&rev旁边的+号,选择聚合:
图 3.29:聚合
-
这将打开一个名为聚合 1的窗口。我们的目标是查看每年有多少人对住宿进行了评论,从主持人开始提供房源的年份算起;因此,请执行以下操作。
-
使用附加字段窗格中的搜索字段,如图 3.30左侧所示,通过拖放将host_since字段添加到分组字段中。
-
将reviewer_id添加到聚合字段,同样通过拖放的方式。请注意,默认的聚合方式是SUM,如右侧箭头所示:
图 3.30:聚合字段
-
-
点击聚合字段下的SUM,然后将其更改为计数去重,以改变reviewer_id的聚合方式:
图 3.31:计数去重
- 这将把默认的聚合方式总和(即每条评论都会被计算)更改为计数去重,即计算去重后的评论者 ID 聚合。这将帮助我们专注于有多少不同的评论者留下了评论。这只是一个任意的选择,欢迎尝试其他聚合方式,看看数据如何变化。
通过右键点击流程面板中的聚合步骤,并选择在 Tableau Desktop 中预览,我们来看看 Tableau Desktop 预览:
图 3.32:主机图表
在前面的截图中,我们可以看到每个host_since日期的评论去重计数。当然,在这个特定示例中,如果没有 Prep 的帮助,Tableau Desktop 也可以按host_since日期计算评论数,前提是这些字段是唯一拖入视图中的。但在将数据导入 Tableau Desktop 之前进行聚合的好处是,你需要导入的数据量更少,因此可能会实现更好的性能。如果你想继续在 Prep 或 Tableau Desktop 中分析数据集,现在你可以提出进一步的问题,例如:
-
哪种类型的住宿在住一周而不是住一天时享有最高折扣?
-
住宿大小与月租价格之间有相关性吗?
-
有多少比例的房东有多个房源?
祝你好运,快乐地构建仪表板!
我们将在这里结束这一部分,并回顾一个由仅 9 个数据点组成的图表,这是我们通过按房东开始提供房源的年份聚合了近 64,000 行reviewer_id数据后创建的。图表讲述了一个故事;而 64,000 行单独的数据并没有。这就是为什么始终减少数据量,并尽可能进行聚合是如此重要的原因。在下一部分,我们将讨论另一个重要的功能:透视。
透视
你是否遇到过将字段拖到 Tableau Desktop 行和列架上,但可视化效果并不如预期的情况?很可能是你需要“旋转”数据,或者更准确地说,需要对数据进行 pivot。如果你期望在一个列中出现的数据分布在多行中,而实际数据却出现在多个列中,那就是需要 pivot 的情况。以下例子将展示一个需要 pivot 的场景。
在我们的 pivot 示例中,我们将使用另一个数据集。你可以在 github.com/PacktPublishing/Mastering-Tableau-2023-Fourth-Edition/blob/main/Chapter03/Excel_Pivot.xlsx
找到它。这个数据集非常简单,内容如下:
图 3.33:Excel 输入
它包含了在五个不同的日子里观察到的三种不同颜色,每种颜色被观察了 x 次。这些数据是一个典型的例子,展示了在数据整理时,pivot 操作的作用,因为有多个列具有相同的用途——B、C 和 D 都是观察值。如果你想要可视化这个表格,它可能看起来如下:
图 3.34:Pivot I
但你可能会想,既然颜色方案已经表明了哪种颜色被观察过,是否最好把三条线放在一个图表里?在同一个折线图中为每种颜色绘制一条独立的线?我们来实现这一目标!
首先将 PivotDataSet
连接到 Prep,然后按照以下步骤对数据进行 pivot:
- 从 Prep 中连接到我们刚创建的 Excel 文件,并将 PivotDataSet 添加到流程窗格中,点击输入数据步骤旁边的 +,选择 Pivot。这时会出现一个名为 Pivot 1 的新步骤:
图 3.35:添加 Pivot 步骤
- 在流程窗格中点击 Pivot 1 步骤,图 3.36 会出现在 Prep 窗口的底部。从 步骤 I 显示的 字段 窗格中选择所有三种颜色,并将它们拖到 Pivoted Fields 窗格中,如 步骤 II 所示:
图 3.36:Pivot 步骤
- 现在,查看 Pivot Results 窗格,如前面的截图中 步骤 III 所示,右键点击并选择 重命名,将 Pivot1 Names 重命名为 Colors,将 Pivot1 Values 重命名为 Observations。然后点击 Pivot 1 旁边的 +,嘿,我们现在有了一个干净的表格,名为 Clean 1:
图 3.37:Pivot 结果
- 还记得我们一开始的问题吗?现在我们可以用不同的方式创建折线图,如 图 3.38 所示。请注意,Colors 现在是一个维度,而 Observations 是它自己的字段,之前它们位于每种颜色的列标题下:
图 3.38:Pivot 后的折线图
这是一个简单的透视应用案例,但这里的技巧可以转移到任何其他数据集。Prep 有内置的推荐功能。每当你在某列的右上角看到一个灯泡图标时,检查一下,看看这个推荐是否适合你的需求。
图 3.39:修剪空格
在这种情况下,Tableau 建议我们移除所有的前导和尾随空格,这正是我们需要的!正如这里所示,检查推荐功能总是值得的。
完美;你已经完成了主要的 Prep 功能设置。然而,你可能会想,如果需要进一步的准备该怎么办。没问题,Prep 会帮你解决。脚本功能是 Prep 中最新的添加,也是最强大的功能之一;它几乎是无限制的!继续阅读,探索 Prep 的脚本功能。
脚本
接下来我们将讨论的脚本功能是 Tableau 最近添加的功能之一。我们将接着讨论它,因为像 Python
或 R
这样的编程语言为你提供了无限的灵活性。如果你遇到 Prep 功能的局限,可以使用脚本并编写你自己的代码来实现你想要的功能。
为了使用它,你必须先在 Tableau 外部连接 Python(或 R)。以下步骤基于help.tableau.com/current/prep/en-us/prep_scripts_TabPy.htm
中 Python 的说明,或者help.tableau.com/current/prep/en-us/prep_scripts._R.htm
中 R 的说明。
对于这个练习,我们将使用 Boston Airbnb 数据集,具体来说是 calendar
表格。从 www.kaggle.com/airbnb/boston
下载这个数据集,并连接到 Prep 中的 calendar
表格:
图 3.40:日历数据集
现在,让我们退后一步,将 Python 连接到 Prep:
-
从 python.org 下载并安装
Python
(或从www.r-project.org/
下载并安装R
)。 -
通过在终端或命令行中执行以下命令,下载并安装
TabPy
:pip install tabpy
-
如果使用
R
,可以打开R
并执行:install.packages("Rserve", , "http://rforge.net")
-
通过输入以下命令,在命令行/终端中打开
TabPy
:tabpy
或者,在 R GUI 中,输入:
library(Rserve) Rserve()
-
回到 Prep,点击日历表右侧的 +,并添加一个 Clean Step。
-
添加一个名为 PythonTest 的计算字段(如果你选择使用
R
进行实验,请改用 RTest),并赋值为字符串"Test"
:
图 3.41:PythonTest
-
现在,点击 Clean 1 步骤右侧的 +,并添加 Script。
-
通过选择脚本步骤,底部的设置面板(见图 3.42)将为你提供连接Rserve或TabPy的选项。Rserve是
R
的 Tableau 服务器,而TabPy是 Python 的 Tableau 服务器。 -
选择你的连接类型,选择Rserve或Tableau Python (TabPy) 服务器。然后打开帮助 | 设置和性能 | 管理分析扩展连接。在弹出的窗口中,通过使用localhost和4912 端口(如果使用 R,请选择 Rserve 并使用localhost和6311 端口)将 Prep 连接到
TabPy
,然后点击登录:- 如果使用 SSL 加密的 Rserve 服务器,4912 端口是默认端口。
图 3.42:TabPy 服务器
- 如果使用 SSL 加密的 Rserve 服务器,4912 端口是默认端口。
-
接下来,如果进行 Python 实验,创建一个包含以下代码的
.py
文件,并确保缩进完全一致:图 3.43:.py 文件
或者,创建一个包含以下代码的
.R
文件:Get ChangeString<- add_column( .data, .before = 'Test' .after = 'R') { Return (data.frame ()) }
-
我们刚才创建的脚本是用来更改 Prep 中现有列并将每一行从
Test
重命名为Python
或R
,取决于你选择的语言。 -
我们将继续使用 Python 脚本。回到 Prep,浏览我们刚刚创建的
.py
文件,并将函数名添加到 Prep 界面。我将文件命名为PrepTableau.py
,函数名是ChangeString
,如前一步所定义:
图 3.44:添加一个函数
- 注意到PythonTest列已从Test更改为Python:
图 3.45:PythonTest
我们的小实验成功了!尽管我们使用了一个非常简单的例子,但它证明了脚本功能是有效的,你可以尽情发挥创意,探索脚本可能做的其他事情。示例包括从计算逆正态分布到进行情感分析或聚类的机器学习。
你可能已经注意到,我们在脚本中没有直接导入pandas
,但仍然使用了pandas
的 DataFrame。这是因为pandas
的导入是随TabPy
一起提供的。你可以在打开TabPy
后,在命令行/终端中看到这一点:
图 3.46:在命令行中导入 pandas
如果你想在脚本中使用其他库,可以通过在命令行/终端使用pip install
来安装它们。安装完成后,你只需重新启动TabPy
,就能使用它们。记住,始终先在终端/命令行中打开TabPy
,否则 Prep 无法执行脚本。
在写作时,Prep 尚不支持将脚本作为输入—不过,你可以使用一个虚拟的.csv
文件作为解决方法,并在流程中紧接其后添加脚本。
使用 Prep 的附加选项
本节将讨论一些较小的独立功能,这些功能非常强大且全新。你们中的一些人可能自从 Prep 首次发布以来就已经在使用它。随着每次发布和每个新增用户及反馈的收集,Tableau 能够创建一个功能优先级列表,列出利益相关者——像你我这样的人——真正希望看到的功能。接下来的主题就是其中一些最好的例子。这些功能在初始版本中并不存在,但它们使得产品变得更加优秀、更加有价值、更加完整。现在,你可以保存部分流程并重用它,向外部数据库写回数据,刷新数据集的部分内容,并使用 Tableau 数据管理附加组件安排流程。让我们仔细看看,首先从“插入流程”功能开始。
插入流程
Prep 中的一个选项是将现有的流程添加到你自己的流程中。例如,假设某人已经在 Boston Airbnb 数据集上工作,并且只创建了突出显示步骤的流程:
图 3.47: 保存到文件
你可以通过右键点击并选择保存到文件,如图 3.47所示,保存你希望插入到流程中的步骤。这些步骤可以通过右键点击画布,选择插入流程,然后浏览你的 .tfl
文件来将之前下载的文件插入到流程中:
图 3.48: 插入流程
这个功能非常方便,可以共享工作并重用已经创建的步骤。接下来,我们将探讨另一个功能,它将允许你刷新在 Prep 流程中使用的数据:增量刷新。
增量刷新
Prep 2020.2 引入了增量刷新功能。在完成一个流程并添加输出后,你可以决定是否选择全量刷新或增量刷新,并选择作为指示器的字段。假设你有一个特定疾病每天感染人数的数据集。每天结束时,你希望将来自卫生部门数据库的新数据添加到数据集中。那么,你该怎么办?
通常,你会在添加最新数据点后加载整个数据集,所有数据都会加载。但对于比当天数据点更早的数据,数据不会改变;你之前已经加载过它们。因此,重新加载整个数据集是一种资源浪费。增量刷新只会加载新的数据点,并将其添加到已经建立了多日的数据中。你可以想象这将节省多少时间和精力。相比完全刷新,这是一个更可持续的方式来保持数据的更新。
我们将查看以下工作流中的一个示例。重要的是,输出步骤必须是流程的一部分:
图 3.49: 增量刷新
要添加增量刷新,请按照以下步骤操作:
- 点击数据输入步骤,向下滚动到设置标签,直到看到增量刷新选项。然后,勾选启用增量刷新框:
图 3.50:设置增量刷新
-
在你点击启用增量刷新框后,会出现一个下拉菜单。该下拉菜单包含 Prep 认为在数据刷新时作为指标有用的所有字段。例如,选择日期字段。它是一个完美的字段,因为一旦原始数据源中添加了新的日期,刷新就会开始。
-
Prep 还会要求你选择一个输出字段,该字段将代表输出中的日期列。在我们的例子中,它仍然是日期:
图 3.51:选择输出字段
- 设置完成后,再次点击输出步骤,注意现在你可以通过点击运行流选项旁边的下拉菜单来选择你偏好的刷新类型(全量或增量):
图 3.52:刷新选项
你刚刚学会了如何设置数据刷新——全量刷新和增量刷新。这将帮助你在可持续使用计算资源的同时,确保数据始终是最新的。接下来,我们将介绍另一个值得调查的 Tableau 功能——批量重命名。
批量重命名
这个功能确实节省时间!只需选择你希望重命名的列,右键单击并选择重命名字段。会打开一个新视图,允许你为每个选定的列添加前缀或后缀,或者替换它们中的特定文本:
图 3.53:批量重命名操作
你还可以利用查找文本功能,或自动重命名所有可能在后期阶段加入的新字段,例如,因为 IT 部门向数据集中添加了额外的列。
Tableau Prep Conductor
使用Tableau Prep Conductor,你可以将 Prep 流发布到 Tableau Server,安排它们在特定时间运行,并始终保持数据刷新。该工具包含在 Tableau 数据管理附加组件中,并不随 Tableau Desktop 或 Prep 一起提供。
更多信息,请访问www.tableau.com/products/add-ons/data-management
。
导出数据
最后但同样重要的是,我们可能希望导出数据。我们之前看到,在流面板中右击符号会提供在 Tableau Desktop 中预览数据的选项:
-
如果你希望流按照计划运行或保存到某个位置,最好使用添加 | 输出。
-
完成此操作后,将出现以下屏幕:
图 3.54:保存到文件
-
用户现在可以选择将数据保存到文件中,还可以将其保存为
.hyper
的 Hyper 文件格式,或.xlsx
(Tableau 2021.1 的新功能)格式,或者保存为.csv
文件。 -
另一种选择是将新生成的数据源直接发布到 Tableau Server,并使其他用户可以使用它。选择发布为数据源而不是下拉菜单中的保存为文件。
-
Tableau 2020.3 添加了一个第三个保存 Prep 输出的选项:将结果数据写入外部数据库。如果你想这么做,从下拉菜单中选择数据库表选项。撰写本文时,七个数据库与写回功能兼容,但将根据用户需求添加更多数据库:
图 3.55:保存到外部数据库
自 Tableau 2022.3 版本以来,你还可以将数据写回到 CRM Analytics。为此,你需要一个 Salesforce 账户和相应的许可证。因此,我们不会进一步讨论这个选项,但如果你是 Salesforce Analytics 用户,可以查看这个功能!
本节展示了如何保存我们的工作,尤其是如何保存我们的 Prep 流程输出。对我来说,能够将输出保存到外部数据库是最好的新功能,因为它是将我的输出以结构化和组织化的方式与他人共享的最简单方法。因此,不仅我自己,其他用户也可以使用已准备好的数据,避免了额外的工作。然后,这个流程不仅我可以重复使用,任何人都可以使用。
摘要
我们从介绍 Prep 开始了本章内容。我们查看了 GUI 以及如何将数据连接到其中。之后,我们做了一些关于数据准备的练习。这些可以分为五个部分:数据清洗、联合与连接、聚合、透视和脚本。我们还考虑了一些额外的选项,以提高数据的实用性,包括插入其他流程的步骤和增量刷新。为了总结本章的 Prep 内容,我们查看了数据导出。在这里,我们看到新数据集可以保存为文件或数据提取,可以写回到外部数据库,或者直接推送到 Tableau Server。
就像 Tableau Desktop 一样,Prep 非常易于理解且高度视觉化。颜色、符号和高亮使得我们能够轻松上手这个提取、转换和加载工具,它在操作 Tableau 主界面之前,准备数据时是不可或缺的!
在下一章中,我们将继续探索 Tableau 中的数据。我们将通过查看连接、混合和数据结构来探索如何为 Tableau 准备数据。
在 Discord 上了解更多
要加入本书的 Discord 社区——在这里你可以分享反馈、向作者提问,并了解新版本发布——请扫描下面的二维码:
第四章:学习连接、混合和数据结构
连接 Tableau 到数据通常不仅仅意味着连接到单个数据源中的一个表。你可能需要使用 Tableau 将来自单个数据源的多个表连接起来。为此,我们可以使用连接功能,它会将一个数据集的行与另一个数据集的行合并,如果给定的键值匹配。你还可以连接来自不同数据源的表,或者联合具有相似元数据结构的数据。
有时,你可能需要合并没有共享共同行级键的数据,这意味着如果你像连接操作一样在行级别匹配两个数据集,你会复制数据,因为一个数据集中的行数据比另一个数据集的行数据更加详细(例如,包含城市),而另一个数据集可能包含国家。在这种情况下,你需要混合数据。此功能允许你,例如,在不将城市数据集更改为国家级别的情况下,显示每个国家的城市数量。
此外,你可能会发现有必要对单个数据源创建多个连接,以便从不同角度透视数据。通过操作数据结构,这是可能的,它可以帮助你从不同的角度使用相同的数据集进行数据分析。这样做可能是发现那些使用单一数据结构难以或根本无法解答的问题所必需的。
本章我们将讨论以下主题:
-
关系
-
连接
-
联合
-
混合
-
理解数据结构
在 2020.2 版本中,Tableau 添加了一个功能,允许你在不指定两种方法之一的情况下进行连接或混合。这就是关系功能。我们将在本章开始时解释这一新特性,然后再深入探讨连接、混合等的细节。
关系
尽管本章将主要集中讨论连接、混合以及数据结构的操作,但我们首先从关系的介绍开始:这是自 Tableau 2020.2 版本以来新增的功能,Tableau 社区一直在期待这一功能。它是数据画布中的默认选项;因此,我们将首先研究关系,它属于数据模型的逻辑层,然后再深入探讨在物理层上操作的连接和联合功能。
要详细了解 Tableau 数据模型的物理层和逻辑层,请访问 Tableau 帮助页面:help.tableau.com/current/online/en-us/datasource_datamodel.htm
。
现在,你可以将逻辑层理解为能够更智能地计数。假设有一个包含唯一客户姓名的客户表和一个记录了数百条订单的订单表。在逻辑层中,一个有多个订单的客户姓名(因此在订单表中会有多个订单和客户 ID 行)将被计为一个客户,因为逻辑层非常智能,能够识别客户姓名,而物理层则会将每个订单当作一个客户,因此如果同一客户下了多个订单,物理层会把这个客户计算为多个客户。你只能通过计数不同的值来解决这个问题(但使用逻辑层时不需要这样做)。
在下图中,你可以看到数据源画布,左侧是通过关系组合的两个数据集,右侧是通过 连接 组合的相同数据集。请注意,关系仅在表之间显示一条线(订单、人员 和 退货),而连接则通过两个圆圈表示连接类型:
图 4.1:数据源画布中的关系和连接
一个关键的区别是,数据预览的底部只会显示来自关系中所选表的数据,而在使用连接时会显示所有数据。这是有道理的,因为在关系中,数据的粒度可能会发生变化,具体取决于你在仪表板中使用的字段。然而,连接具有固定的粒度级别,该级别由你选择的连接类型和连接子句定义。
关系是 Tableau Desktop 2020.2 及更高版本的默认设置。然而,如果你仍然希望使用连接功能,你可以将数据集拖入数据源画布,点击下拉箭头,并选择 打开…:
图 4.2:从关系到连接画布
这将以你在 Tableau 2020.2 之前的版本中常见的方式打开数据集,你将能够以旧有方式使用连接,正如我们在 连接 部分中所描述的那样。
在关系中的两个数据集之间的线(基于逻辑层)被称为 面条,因为它看起来像有嚼劲的意大利面 – 好吃!当你将第二个数据源拖入数据源画布时,Tableau 会立即检测到一个关系,但你可以通过点击面条本身,添加更多的键列或删除和调整它们。
图 4.3:关系键
如果你在 Tableau 2020.2 或更高版本中打开旧版仪表板,你会看到已连接的数据将显示为 已迁移。这是故意为之。只需点击已迁移的数据源,Tableau 将从逻辑层切换到物理层,这意味着你将看到基于连接的数据源画布,而不是关系画布。
查看工作表时,您也会注意到一些差异。您会看到,在新的关系布局中,列首先按表名划分,然后按每个数据源中的维度和度量进行拆分,而在连接中,列按维度和度量拆分,并按表名进行划分。
总结关系,新的数据源布局使得合并数据集变得更加容易,您无需事先决定是否要进行连接或合并。习惯了旧版数据源窗格的人可能需要适应新的灵活性,但对于新用户来说,从一开始就更容易处理不同的数据集。尽管如此,我们仍然会接着讲解连接,特别是因为该功能仍然是 Tableau 物理层的一部分。
连接
本书假设读者具备基本的连接知识,特别是内连接、左外连接、右外连接和全外连接。如果您不熟悉连接的基础知识,可以考虑参加 W3Schools 的 SQL 教程,网址为www.w3schools.com/sql/default.asp
。基础知识不难,因此您很快就能掌握。
以下截图展示了三个相关的数据集:
图 4.4:相关数据集
为了更好地理解 Tableau 在连接多个表时对数据的处理方式,我们将探索连接查询。
连接查询
以下截图展示了在图 4.4中的联合数据集:
图 4.5:连接裁剪
上述截图展示了订单和退货表之间的内部连接,通过共同的键订单 ID进行连接。订单和人员表通过共同的键区域连接。
为了更好地理解刚才描述的内容,我们将继续进行一个连接裁剪练习。我们将查看 Tableau 在使用这两个表构建简单视图时生成的 SQL 查询,这将向我们展示在简单的拖放操作下,Tableau 在后台做了什么。
请按照以下步骤操作:
-
从
public.tableau.com/profile/marleen.meier/
下载与本章相关的工作簿。 -
选择连接裁剪工作表,点击示例 - 欧盟超级商店连接数据源。
-
从菜单中选择帮助,然后选择设置与性能,接着选择开始性能记录:
图 4.6:开始性能记录
- 将人员拖到行货架,并将销售放到文本货架上:
图 4.7:拖放操作
-
通过帮助,然后选择设置与性能,最后选择停止性能记录来停止记录。
-
在生成的性能摘要仪表板中,将时间滑块拖动到
0.0000
,并选择两个绿色条形图:执行查询。现在,您会看到 Tableau 生成的两个 SQL 查询:
图 4.8:性能记录
到目前为止,我们已经将 Tableau 连接到我们的数据集,然后创建了一个非常简单的工作表,显示了每个人的销售数量。但为了让 Tableau 显示人名和销售金额,它需要从两个不同的表格中获取数据:订单和人员。图 4.8中的性能记录显示了构建仪表板的每个步骤花费的时间以及发送到数据库的查询。由于我们首先将维度拖入工作表,然后再拖入度量,因此我们看到两个查询。第二个查询结合了两个拖动的字段,因此我们将重点关注后者。让我们详细看看:
"SELECT ""People"".""People"" AS ""People"",
SUM(""Orders"".""Sales"") AS ""sum:Sales:ok""
FROM ""TableauTemp"".""Orders$"" ""Orders""
INNER JOIN ""TableauTemp"".""People$"" ""People"" ON (""Orders"".""Region"" = ""People"".""Region"")
INNER JOIN ""TableauTemp"".""Returns$"" ""Returns"" ON (""Orders"".""Order ID"" = ""Returns"".""Order ID"")
GROUP BY 1"
注意,表格之间生成了内连接。这是 Tableau 连接功能背后的一个视图。
现在技术细节已经讨论完毕,让我们来看看仪表板中的连接。
连接计算
在 Tableau 中,可以基于计算连接两个文件。你可以使用此功能来解决两个数据源之间的不匹配问题。计算连接可以在每个连接的下拉菜单中找到。
请参见以下截图:
图 4.9:创建连接计算...
举个例子,假设一个数据集包含一列名字和另一列姓氏。你想将其连接到一个包含姓名列的第二个数据集,该列包含姓名和姓氏。连接这两个数据集的一种方式是在第一个数据集中创建一个连接计算,如下所示:
[First Name] + ' ' + [Last Name]
现在,选择第二个数据集中姓名这一列,确保你的键匹配!
如果你想了解更多关于计算连接的内容,请查看 Tableau 帮助页面:help.tableau.com/current/pro/desktop/en-us/joining_tables.htm#use-calculations-to-resolve-mismatches-between-fields-in-a-join
。
空间连接
在 Tableau 2018.2 中,空间连接功能被添加了。这意味着你可以连接来自 MapInfo 表格以及 Shape、Esri、KML、TopoJSON 和 GeoJSON 文件的空间字段。你还可以使用 CSV 或 Excel 文件,并通过使用 Tableau 的MAKEPOINT
函数将数据转换为空间数据(见第十二章,利用高级分析)。实际操作中,假设有两个数据集,一个是关于流域位置的,指示了一个空间字段,另一个数据集包含水鸟目击位置,同样是一个空间列。Tableau 允许你将这两个数据集合并,而这在其他情况下非常困难,因为大多数程序不支持空间数据。
要在空间列上连接,你必须从连接下拉菜单中选择相交字段,只有在处理空间数据时才能看到该选项。
有关在 Tableau 中连接空间文件的更多信息,请阅读 Tableau 提供的以下资源:
-
help.tableau.com/current/pro/desktop/zh-cn/maps_spatial_join.htm
-
help.tableau.com/current/pro/desktop/zh-cn/maps_spatial_join.htm
-
help.tableau.com/current/pro/desktop/zh-cn/examples_spatial_files.htm
相较于水平连接,你可能需要垂直连接,也叫做联合。一个典型的联合使用场景是可视化存储在多个文件或表格中的数据,这些数据是随着时间的推移而变化的。你可能有一个每日报告,其中列的结构相同,但每天都作为一个新文件存储在一个按月或按年命名的文件夹里。
合并这些文件比逐一查看它们能提供更多的洞察!你将能够分析趋势、日常或年度变化,或进行年初至今的分析。因此,我们将继续深入讲解 Tableau 中的联合操作。
联合
有时你可能需要分析以相同元数据结构存储在不同文件中的数据——例如,来自多个年份、不同月份或不同国家的销售数据。与其复制粘贴数据,你可以进行联合操作。我们在第三章中已经提到过这个话题,使用 Tableau Prep Builder,但联合基本上就是 Tableau 将新数据行附加到具有相同表头的现有列中。对于接下来的练习,我们将使用 FIFA 数据(来自 PlayStation 游戏,而非世界杯)。这些数据来自 Kaggle(www.kaggle.com/datasets/stefanoleone992/fifa-22-complete-player-dataset?resource=download
),并且以多个 CSV 文件的形式提供;每个 CSV 文件包含一年的数据,并且按性别(男性/女性)进行了划分。
对于我们的分析,我们希望将所有文件合并成一个。因此,我们需要通过以下步骤进行联合操作:
-
从 GitHub 下载 CSV 文件(
github.com/PacktPublishing/Mastering-Tableau-2023-Fourth-Edition/tree/main/Chapter04
)或 Kaggle(www.kaggle.com/datasets/stefanoleone992/fifa-22-complete-player-dataset?resource=download
)。 -
在本章的仪表板中,打开连接数据窗格,并点击文本文件:
图 4.10:文本文件
-
在你的机器上找到下载的 FIFA 数据,并连接到其中一个文件。
-
通过从左侧面板拖放第二个文件到初始文件上,直到出现“联合”字样,表示当数据被放下时,它将用于联合:
图 4.11:联合
- 或者,点击主数据集的箭头,选择转换为联合...:
图 4.12:转换为联合...
- 在以下弹出窗口(图 4.13)中,用户可以通过拖放或使用通配符联合,选择应该包含在联合中的所有数据表,通配符联合会基于命名约定包含某个目录中的所有表——*****代表任意字符。
players*
将包含所有以players
开头的文件。分别,female*
将包含所有以female
开头的文件,*
将包含所有文件:
图 4.13:编辑联合...
联合用于组合相似的数据,并可以将它们按顺序附加在一起。它们通常用于多个数据文件,每个文件有不同的日期戳、不同的区域、不同的经理等。通过使用联合,你希望使数据集更加完整。我们看到 Tableau 允许通过拖放或右键点击初始数据源来创建联合。我们还讨论了将一个或多个其他数据集组合在一起的联合,使用拖放或通配符。图 4.14 展示了一个典型的联合示例:
图 4.14:联合
让我们看看我们需要记住的几个要点:
-
联合通过创建附加行来追加数据。
-
一个联合应该包含具有许多公共列的数据集。
-
联合应该仅用于存储在多个数据源中的结构相同的数据。
-
使用联合时,请注意性能。每增加一个数据集,你将增加 Tableau VizQL 的复杂度。
既然你已经成为联合专家,现在是时候进入 Tableau 提供的下一个功能:合并!合并帮助你结合具有不同粒度的数据集。考虑数据集之间的一对多关系。一个数据集每行都有唯一的键;另一个数据集每个键有多行。为了避免在第一个数据集中重复行,Tableau 提前部署了合并功能,早在关系成为软件包的一部分之前。
合并
关系使得数据合并变得不那么必要,并且可以视为过时功能。但为了完整性和为了支持旧版本的 Tableau(2020.2 以下),我们来看一下以下部分的总结。简而言之,数据合并允许你将多个不同的数据源合并到一个视图中。理解以下四个要点将帮助你掌握数据合并的要点:
-
数据混合通常用于合并来自多个数据源的数据。虽然从 Tableau 10 开始,多个数据源之间可以进行连接,但仍然有一些情况,数据混合是合并两个或更多数据源数据的唯一可行选项。在接下来的部分中,我们将看到一个展示这种情况的实际示例。
-
数据混合需要共享的维度。日期维度通常是混合多个数据源的可行候选项。
-
数据混合先进行聚合,然后匹配。另一方面,连接先进行匹配,然后聚合。
-
数据混合不会启用来自次级数据源的维度。尝试使用次级数据源中的维度会导致视图中显示或 null。此规则有一个例外,我们将在稍后的添加次级维度*部分中讨论。
现在我们已经介绍了关系、连接和并集,我想稍微调整一下你对工作簿内数据结构的关注。你可能已经设置好了完美的连接或并集,开始将字段拖拽到工作簿画布上,使用了筛选器、计算字段,然后却得到了意料之外的结果。Tableau 确实在工作,只是方式你可能不太喜欢。为什么会这样呢?!这里的操作顺序至关重要。了解每个筛选器的应用顺序及其如何影响数据非常重要。因此,接下来要讲的是:操作顺序。
探索操作顺序
数据混合和左连接不是同一回事吗?这是许多新 Tableau 用户经常问的问题。答案当然是否定的,但让我们来探讨一下它们的区别。下面的示例很简单,甚至有些轻松,但确实展示了由于错误的连接导致错误聚合所带来的深远后果。
我们将探讨在 Tableau 中聚合发生的顺序。这将帮助你更有效地使用数据混合和连接。
对于本示例,我们将使用以下数据:
图 4.15:裤子和衬衫销售情况
在这些表格中,列出了两个人:Tanya和Zhang。在一张表中,这两人是销售员维度的成员,在另一张表中,他们是销售助理维度的成员。此外,Tanya和Zhang分别销售了 200 美元的裤子和 100 美元的衬衫。让我们探索 Tableau 可能以新方式连接到这些数据,从而更好地理解连接和数据混合。
当你查看与本练习相关的电子表格时,你会注意到额外的列。这些列将在后续的练习中使用。
请按照以下步骤操作:
-
在与本章相关的工作簿中,右键点击
Pants
数据源,并通过点击查看数据来查看数据。同样的操作也要在Shirts
数据源上进行。 -
右键点击
Join
数据源并选择编辑数据源,观察裤子和衬衫表之间的连接,使用销售员/销售助理作为共同的键:
图 4.16:连接
- 在裤子工作表中,选择裤子数据源,并将销售员放置在行架上,将裤子金额放置在文本架上:
图 4.17:设置工作表
- 在衬衫工作表中,选择衬衫数据源,并将销售助理放置在行架上,将衬衫金额放置在文本架上:
图 4.18:衬衫
- 在连接工作表中,选择连接数据源并将销售员放置在行架上。接下来,双击裤子金额和衬衫金额,将两者都放到视图中:
图 4.19:连接
- 在混合 – 裤子主工作表中,选择裤子数据源,并将销售员放置在行架上,将裤子金额放置在文本架上:
图 4.20:混合裤子
-
保持在同一工作表中,从左侧的数据源面板中选择
衬衫
数据源并双击衬衫金额。如果弹出错误信息,点击确定。 -
从菜单栏选择数据,然后选择编辑混合关系…:
图 4.21:编辑混合关系…
-
在弹出的对话框中,选择
裤子
作为主数据源,选择衬衫
作为次数据源,然后点击自定义单选按钮,如图 4.22所示,然后点击添加…。 -
在左列中选择销售员,在右列中选择销售助理。左列代表来自主数据源的数据,右列代表次数据源中所有可用的数据。
-
移除所有其他链接(如果有的话),然后点击确定。对话框中的结果应该与以下屏幕截图显示的内容相匹配:
图 4.22:混合关系
目前为止我们所做的简要回顾:我们正在使用三个数据源:裤子、衬衫和连接,其中连接包含裤子和衬衫。我们还创建了一个混合,裤子是主数据源,并且通过使用销售员和销售助理作为键将它们连接起来。
-
不要被Blend Relationships的名称混淆。它与逻辑层关系无关。它只是弹出窗口的名称。
回到练习,继续执行以下步骤:
-
在
Blend
–
衬衫
主
工作表中,选择衬衫数据源,并将销售助理放置在行架上,将衬衫金额放置在文本架上:
图 4.23:混合衬衫 – 主
- 在同一个工作簿中,选择
Pants
数据源,确保销售员旁边的链条图标已连接/变红,然后双击Pants Amount将其添加到视图中:
图 4.24: 完成工作表
- 将所有五个工作表放到仪表板上。根据需要进行格式化和排列。现在,让我们在以下截图中比较五个工作表之间的结果:
图 4.25: 比较
在前面的截图中,Join工作表的结果是预期结果的两倍。为什么?因为连接操作首先匹配共同的键(在这个例子中是销售员/销售助理),然后再聚合结果。共同键上找到的匹配越多,问题就越严重。如果在共同键上找到多个匹配,结果将呈指数级增长。两个匹配会导致结果平方,三个匹配会导致结果立方,依此类推。这个指数效应在下面的截图中有图示表示:
图 4.26: 连接
另一方面,数据融合的效率更高,但在融合能够正常工作之前,我们必须编辑数据关系,以便 Tableau 能通过销售员和销售助理字段连接两个数据源。如果这两个字段的名称相同(例如,销售员),Tableau 会自动提供一个选项来使用这些字段进行数据源之间的融合。
Blend Pants – Primary
和Blend Shirts – Primary
工作表的结果是正确的,没有出现指数效应。为什么?因为数据融合首先聚合来自两个数据源的结果,然后在共同的维度上进行匹配。
在这种情况下,使用的是销售员/销售助理,如下图所示:
图 4.27: 融合结果
在本次练习中,我们看到连接操作会改变数据结构,因此在使用连接时要小心,并且要非常清楚哪些列是合适的键。此外,在连接数据之前和之后进行检查也很重要,检查方法可以是简单的行数计数,并确认这是否是预期的结果。
数据融合有优点也有缺点;例如,添加维度并不像想象的那么简单。不过我们将在下一节详细探讨有关次级维度的内容。
添加次级维度
数据融合虽然特别适用于连接不同的数据源,但也有其局限性。需要特别注意的局限性是,数据融合不允许从次级数据源中添加维度。但有一个例外,即有一种方法可以从次级数据源中添加维度。我们接下来将进一步探讨这个问题。
数据源中除了销售员/销售助理和衬衫金额/裤子金额,还有其他字段。在本次练习中,我们将引用这些字段:
-
在与本章关联的工作簿中,选择
添加次级维度
工作表。 -
选择衬衫数据源。
-
在衬衫和裤子数据源之间为物料类型添加关系,按以下步骤进行:
-
选择数据,然后选择编辑关系。
-
确保衬衫是主要数据源,裤子是次级数据源。
-
选择自定义单选按钮。
-
点击添加…。
-
在左列和右列中选择物料类型:
图 4.28:自定义混合关系
- 点击确定返回到视图。
-
-
将物料类型放置在行架上。
-
选择裤子数据源,并确保数据窗格中物料类型旁边的链条图标已激活,同时销售人员旁边的链条图标未激活。如果图标是灰色的、断开的链条链接,则表示未激活;如果是橙色的、连接的链条链接,则表示已激活:
图 4.29:衬衫与裤子
- 将物料类别放置在物料类型之前,并将紧固件放置在物料类型之后,按如下方式操作:
图 4.30:次级维度
物料类别是来自次级数据源的一个维度。数据混合并不启用来自次级数据源的维度。为什么在这种情况下它有效呢?有几个原因:
-
物料类别和物料类型之间存在一对多关系;也就是说,物料类型维度中的每个成员都与物料类别维度中的一个且仅一个成员匹配。
-
视图是基于物料类型进行混合的,而不是物料类别。这很重要,因为物料类型的粒度比物料类别更细。尝试基于物料类别进行混合视图将无法启用物料类型作为次级维度。
-
主要数据源中的每个物料类型维度成员在次级数据源中也存在。
紧固件也是来自次级数据源的一个维度。在图 4.35中,它在某个单元格中显示,这表明紧固件未按预期作为维度工作;也就是说,它没有按预期切分数据,正如第一章中讨论的回顾基础所提到的。显示星号的原因是与羊毛相关的有多个紧固件类型。纽扣和魔术贴显示是因为丙烯酸和聚酯在底层数据中只有一个紧固件*类型。
如果使用混合,确保你的主要目的是合并度量,并且你不需要详细层次的维度。在创建仪表盘之前,了解这一点尤其有用,可以做好相应的准备。你的数据需要额外的预处理(请参考第三章,使用 Tableau Prep Builder),因为无论是连接还是混合都无法提供你期望的数据结构。或者你可以使用脚手架技术,这是一种利用辅助数据源的方法——我们将在下一节讨论此方法。
引入脚手架技术
脚手架技术是一种通过混合引入第二数据源,重新塑造和/或扩展初始数据源的方法。脚手架技术扩展了 Tableau 的功能,以满足可视化和分析需求,这些需求通常非常困难或根本不可能实现。脚手架技术的先驱乔·马科(Joe Mako)曾讲述过他如何利用该技术,通过四个工作表重新创建仪表盘的故事。原始的仪表盘没有使用脚手架技术,必须用 80 个工作表进行艰苦的逐像素对齐。
脚手架技术能够扩展 Tableau 的预测功能。Tableau 的原生预测功能有时因缺乏复杂性而受到批评。脚手架技术可以用来解决这一批评。
以下是步骤:
-
在本章相关的工作簿中,选择
脚手架
工作表并连接到世界指标
数据源。 -
使用 Excel 或文本编辑器创建
记录
数据集。以下两行表格表示记录
数据集的全部内容:
图 4.31:Excel 文件
-
连接 Tableau 到数据集。
-
为了方便,考虑直接使用Ctrl + C从 Excel 复制数据集,然后使用Ctrl + V直接粘贴到 Tableau 中。
-
在 Tableau 中创建一个开始日期参数,设置如以下截图所示。注意截图中的高亮部分,你可以通过这些部分设置所需的显示格式:
图 4.32:显示格式
-
创建另一个名为结束日期的参数,设置与前者相同。
-
在数据面板中,右键点击刚创建的开始日期和结束日期参数,选择显示参数:
图 4.33:显示参数
- 设置所需的开始和结束日期,例如,2000 – 2027:
图 4.34:开始日期和结束日期
-
选择记录数据源,并创建一个名为日期的计算字段,代码如下:
IIF([Records]=1,[Start Date],[End Date])
-
将日期字段放置到行货架上。
-
右键点击日期字段,在行货架上选择显示缺失值。注意,现在所有开始日期和结束日期之间的日期都会显示出来:
图 4.35:显示缺失值
- 创建一个名为选择国家 A的参数,并按照下图所示的设置进行配置。请注意,国家列表是通过从中添加值按钮添加的:
图 4.36:从字段添加
-
创建另一个名为选择国家 B的参数,设置与前述相同。
-
创建一个名为选择国家 A 预测的参数,并按照下图所示的设置进行配置:
图 4.37:编辑参数
-
创建另一个名为选择国家 B 预测的参数,设置与前述参数相同。
-
在数据面板中,右键单击刚刚创建的四个参数(选择国家 A、选择国家 B、选择国家 A 预测和选择国家 B 预测),并选择显示参数:
图 4.38:显示参数
- 确保在世界指标数据源中,日期字段旁边显示有橙色链条图标。这表示该字段被用作链接字段:
图 4.39:链接
-
在世界指标数据集中,创建以下计算字段:
计算字段名称 计算字段代码 国家 A 人口
IIF([Country] = [Select Country A],[Population Total],NULL)
|
国家 B 人口
IIF([Country] = [Select Country B],[Population Total],NULL)
|
-
在记录数据集中,创建以下计算字段:
计算字段名称 计算字段代码 实际/预测
IIF(ISNULL(AVG([World Indicators].[Population Total])),"Forecast","Actual")
|
国家 A 人口
IF [Actual/Forecast] = "Actual" THEN SUM([World Indicators].[Country A Population]) ELSE PREVIOUS_VALUE(0) *[Select Country A Forecast] + PREVIOUS_VALUE(0) END
|
国家 A 同比变化
([Country A Population] - LOOKUP([Country A Population], -1)) / ABS(LOOKUP([Country A Population], -1))
|
国家 B 人口
IF [Actual/Forecast] = "Actual" THEN SUM([World Indicators].[Country B Population]) ELSE PREVIOUS_VALUE(0) *[Select Country B Forecast] + PREVIOUS_VALUE(0) END
|
国家 B 同比变化
([Country B Population] - LOOKUP([Country B Population], -1)) / ABS(LOOKUP([Country B Population], -1))
|
国家 A-B 差异
[Country A Population] - [Country B Population]
|
国家 A-B 百分比差异
[Country A-B Diff]/[Country A Population]
|
-
在数据面板中,右键单击国家 A 同比变化、国家 B 同比变化和国家 A-B 百分比差异,然后选择默认属性 | 数字格式…,将默认数字格式更改为百分比:
图 4.40:默认属性
- 选择记录数据源,将实际/预测、度量值和度量名称字段分别放置在颜色、文本和列架构上:
图 4.41:预测设置
- 调整度量值架构,使得显示的字段与下图所示相同。同时,确保每个字段的计算方式设置为表(向下):
图 4.42:计算方式
到目前为止,我们取得了什么成果?我们创建了一个重复的数据结构,使得即使原始数据集中的数据在一列中,我们也能将两个国家放在两个单独的列中进行比较。这一设置使我们能够提出更高级的问题。
为了证明这一点,让我们问一下,“印度的人口何时会超过中国?” 您可以根据需要设置参数——我选择了 0.45%和 1.20%作为平均年增长率,但请随意选择您认为最适合一个国家的参数。在图 4.48中,您可以看到中国和印度分别以 0.45%和 1.20%的增长率,印度将在 2024 年比中国拥有更多居民。您可以通过查看Country A Population和Country B Population列来观察到这一点。所有橙色表示预测数据,而所有蓝色表示我们数据集中的实际数据:
图 4.43:预测仪表盘
我们显然已经超前了多年;你能使用这个仪表板来计算出 2012 年至 2020 年间中国和印度的实际平均增长率吗?如果告诉你 2020 年中国的人口为 1,439,323,776,印度的人口为 1,380,004,385,那么请在 Tableau Public 上分享你的结果,并标记为#MasteringTableau!
这个练习的关键之一是数据搭建。数据搭建生成不存在于数据源中的数据。World Indicators数据集仅包括 2000 年至 2012 年的日期,显然Records数据集不包含任何日期。通过使用Start Date和End Date参数与计算的Date字段,我们能够生成所需的任何日期集。我们必须混合数据,而不是联接或合并,以保持原始数据源的完整性,并在World Indicators之外创建所有额外的数据。
在将Date字段放置在Rows架上后,选择Show Missing Values后,实际数据搭建发生了。这允许显示Start Date和End Date之间的每一年,即使底层数据中没有匹配的年份。第六章,使用 OData、数据搭建、大数据和 Google BigQuery,将更详细地探讨类似于数据搭建的数据密集化。
让我们更深入地看一些计算字段,以更好地理解这个练习中的预测工作方式:
计算字段:Actual/Forecast
:
IIF(ISNULL(AVG([World Indicators].[Population Total])),"Forecast","Actual")
前述代码确定了是否在World Indicators数据集中存在数据。如果日期在 2012 年之后,则不存在数据,因此返回Forecast
。
计算字段:Country A Population
:
IF [Actual/Forecast] = "Actual" THEN SUM([World Indicators].[Country A Population]) ELSE PREVIOUS_VALUE(0)
*[Select Country A Forecast] + PREVIOUS_VALUE(0) END
如果需要预测以确定数值(即,如果日期在 2012 年之后),则执行此代码的ELSE
部分。PREVIOUS_VALUE
函数返回前一行的数值,并将结果乘以预测值,然后加上前一行。
让我们来看一个示例在下表中:
Previous Row Value (PRV) |
1,000 |
---|---|
Forecast (F) |
0.01 |
PRV * F |
10 |
Current Row Value |
1,010 |
在Country A Population
计算字段中,有一点非常重要:预测非常简单:将前一个人口数乘以给定的预测值,然后求和。无需改变逻辑的整体结构,这段代码可以通过更复杂的预测方法进行修改。
这些练习表明,通过一些其他技巧和方法,数据融合可以在你的数据项目中产生很大的效果。最后,我们将讨论数据结构的一般概念,这样你就能更好地理解为什么 Tableau 这么做,以及如何实现你的可视化目标。
理解数据结构
正确的数据结构并不容易定义。确实,有一些基本规则。例如,长格式的数据通常比宽格式的数据更好。包含大量列的宽格式数据可能难以处理,而相同的数据如果用更少的列和更多的行呈现的长格式,通常会更容易操作。
但这并非总是如此!有些商业问题使用宽格式的数据结构更容易回答。这就是问题的关键。商业问题决定了正确的数据结构。如果一个结构能回答所有问题,那太好了!然而,你的问题可能需要多种数据结构。Tableau 中的透视功能可以帮助你灵活调整数据结构,以回答不同的业务问题。
在开始这个练习之前,确保你理解以下几点:
-
在 Tableau 中进行数据透视的操作仅限于 Excel、文本文件和 Google 表格;否则,您必须使用自定义 SQL 或 Tableau Prep。
-
在 Tableau 中,数据透视被称为数据库术语中的反透视。
作为医院的商业分析师,你正在将 Tableau 连接到病人的每日快照数据。你有两个问题:
-
在任何给定日期,发生了多少事件?例如,某天有多少病人入住?
-
事件之间消耗了多少时间?例如,住院病人的平均住院天数是多少?
为了回答这些问题,请按以下步骤操作:
-
在本章节的启动工作簿中,选择
时间框架
工作表,并在数据窗格中选择Patient_Snapshot数据源。 -
点击标记卡片中的下拉菜单,选择条形图作为图表类型。
-
在数据窗格中右键单击,创建一个名为选择时间框架的参数,并使用以下截图所示的设置:
图 4.44:参数
-
右键单击我们刚创建的参数,选择显示参数。
-
在数据窗格中右键单击,创建一个名为选择时间框架的计算字段,代码如下:
CASE [Select Time Frame] WHEN 1 THEN DATEDIFF('day',[Check-in Date],[Discharge Date]) WHEN 2 THEN DATEDIFF('day',[Surgery Date],[Discharge Date]) WHEN 3 THEN DATEDIFF('day',[Check-in Date],[Surgery Date]) END
-
将以下字段拖到相应的货架上,并按照指示进行定义:
字段名称 货架方向 病人类型 拖动到筛选器货架,并勾选住院病人。 入住日期 拖动到筛选架上并选择日期范围。同时,右键点击结果筛选并选择显示筛选器。 入住日期 右键点击并拖动到列架上,选择MDY。 选择的时间范围 右键点击并拖动到行架上,选择AVG。 选择的时间范围 右键点击并拖动到颜色架上,选择AVG。根据需要设置颜色。 -
完成这些操作后,你的工作表应如下所示:
图 4.45:初始仪表盘
- 右键点击选定时间范围轴并选择编辑轴...,如下图所示。然后,删除标题:
图 4.46:编辑轴...
- 选择工作表 | 显示标题。通过插入参数选择时间范围来编辑标题,如下截图所示:
图 4.47:添加参数
数据结构非常适合本练习的第一部分。你能够迅速创建可视化。唯一的中等难度部分是设置带有关联参数的选定时间范围计算字段。
这使得最终用户可以选择他们希望查看的时间范围:
图 4.48:仪表盘
那么,如果你需要查找每天参与某种事件的人数,会发生什么呢?
由于当前的数据结构是每个患者一行,且每行有多个日期,这个问题使用当前的数据结构回答起来比较困难。在图 4.49中,你可以看到差异:右侧是我们当前的数据结构,左侧是能够更容易按天统计事件的数据结构:
图 4.49:患者数据结构
因此,在本练习的第二部分,我们将尝试通过数据透视来采取不同的方法:
-
在与本章节相关的启动工作簿中,选择
每日期事件
工作表。 -
在数据窗格中,右键点击患者快照数据源并选择复制。
-
重命名重复的事件。
-
右键点击事件数据源并选择编辑数据源...:
图 4.50:编辑数据源...
-
按照以下步骤操作:
-
使用Shift或Ctrl + 点击选择所有五个日期字段。
-
为任何已选择的字段选择下拉选项并选择透视:
图 4.51:数据透视
-
数据透视将会交换行和列,我们将得到一个类似于图 4.49左侧的数据结构。将数据透视后的字段重命名为事件类型和事件日期。
-
选择
每日期事件
工作表,并将以下字段放置到关联的架上并按要求定义:
字段名称 架上的方向 事件日期
右键点击并拖动到行架上,选择MDY 事件类型
放置于事件日期之后的行架上 患者类型
右键点击并选择显示筛选器 记录数
拖动到列架上 - 基于此,您的工作表应该如下所示:
图 4.52:按日期划分的事件
-
原始数据结构并不适合这个练习;然而,在复制数据源并进行数据透视后,通过仅使用三个字段:事件日期、记录数和事件类型,计算每日事件变得相当简单。这是主要的收获。如果你发现自己在创建一个看似简单的商业问题可视化时遇到困难,考虑使用数据透视。
摘要
我们从介绍关系开始这一章节,接着讨论了联接,并且了解了 Tableau 用来生成相应数据的查询。若需要将格式相同的数据从多个表格或数据源合并,联合操作非常有用。
然后,我们回顾了数据混合,清楚地理解了它与联接的区别。我们发现数据混合的主要限制在于不允许使用来自二级数据源的维度;然而,我们也发现这一规则是有例外的。我们还讨论了支架结构,这使得数据混合变得出乎意料的有效。
最后,我们讨论了数据结构,并学习了如何通过数据透视使得困难或不可能的可视化变得简单。完成了第二次以数据为中心的讨论后,在下一章节中,我们将讨论表计算、分区和地址处理。
在 Discord 上了解更多
要加入这个书籍的 Discord 社区——你可以在这里分享反馈、向作者提问,并了解新版本的发布——请扫描下面的二维码:
第五章:介绍表计算
Tableau 中的表计算主题内容丰富而深刻,单独作为一本书的主题也是完全有道理的。探索每个表计算函数可用的不同选项,以及表计算的各种应用方式,既有趣又值得尝试。在你回顾本章中的示例时,毫无疑问,你会遇到一些可以在日常工作中应用的技巧;然而,你可能会困惑为什么有些技巧有效。本章旨在提供一些思考表计算的方法,这些方法将在你掌握这个迷人主题的过程中发挥作用。在此过程中,我们也会考虑一些实际的例子。
在为本章审核的数十篇博客、论坛帖子、会议讲座、文章和白皮书中,Jonathan Drummy 的博客文章(drawingwithnumbers.artisart.org/at-the-level-unlocking-the-mystery-part-1-ordinal-calcs/
),At the Level – Unlocking the Mystery Part 1: Ordinal Calcs,是最清晰且最具洞察力的,帮助我们理解分区和寻址的各种细微差别——表计算的 DNA。在本章中,我们将讨论以下主题:
-
分区和寻址方向
-
有方向和无方向的寻址
-
探索每个独特的表计算函数
-
函数的应用
让我们详细探讨一下这个章节,并从表计算的一般定义开始,并提出两个相关的问题,我们将在本章结束时解答这两个问题。
分区和寻址方向
如第一章《基础回顾》中所讨论的,计算字段可以分为行级、汇总级或表级计算。对于行级和汇总级计算,底层数据源引擎完成大部分(如果不是全部)计算工作,而 Tableau 仅仅负责可视化结果。对于表计算,Tableau 也依赖底层数据源引擎和你机器上可用的内存来执行计算任务;但是,在这些工作完成并返回数据集之后,Tableau 还会进行额外的处理,然后再呈现结果。
让我们来看一下表计算的定义,如下所示:
表计算是对缓存数据集执行的一个函数,该数据集是 Tableau 向数据源查询后生成的结果。
让我们考虑一下前面定义中提到的缓存数据集的几个要点。
这个缓存不仅仅是查询返回的结果。Tableau 可能会调整返回的结果。我们将在第六章《利用 OData、数据密集化、大数据和 Google BigQuery》中考虑这个问题;Tableau 可能会通过数据密集化扩展缓存,但通常是由用户驱动的。从表计算的角度来看,缓存被称为分区。
重要的是要考虑缓存的结构。缓存中的数据集是工作表中使用的表,就像所有表一样,它由行和列组成。这对于表计算尤为重要,因为表计算可能会随着缓存的移动而计算。previous_value()
表计算会在缓存结构发生变化时发生变化,因为它会检索当前值之前的值,而这具有很大的主观性。它是基于日期、值还是字母顺序来确定“先前”的?你需要通过使用地址划分和分区告诉 Tableau 如何构建缓存。
大多数表计算需要考虑缓存结构。这类表计算称为有方向。另外,表计算也可以基于整个缓存进行计算,而不考虑地址划分和分区。例如,表计算total()
会计算总值,而该总值在缓存顺序变化时不会发生变化。另一个例子是size()
、script_
和model
函数。这种类型的表计算被称为无方向。
请注意,在 Tableau 文档中,缓存中的数据集通常被称为分区。本章的结构旨在提供一个简单的框架,以帮助理解表计算。
引入函数部分探讨了每个独特的表计算函数。函数应用部分探讨了表计算如何通过分区和地址划分维度应用到视图中。
有方向和无方向的地址划分
我们将通过列出不同的表计算函数来开始这一部分内容。
Tableau 提供了广泛的表计算函数,但如果我们将考虑范围缩小到表计算函数的唯一组,我们将发现只有 11 个:
表计算 |
---|
LOOKUP |
PREVIOUS VALUE |
RUNNING |
WINDOW |
FIRST |
INDEX |
LAST |
RANK |
SIZE |
TOTAL |
SCRIPT & MODEL |
如地址划分与方向中所述,表计算函数在缓存上运行,因此,如果缓存数据发生变化,根据表计算的类型(有方向或无方向),计算结果可能会发生变化。在接下来的练习中,我们将看到有方向和无方向的表计算函数的实际应用。
让我们更详细地了解有方向和无方向的表计算:
-
访问
public.tableau.com/profile/marleen.meier
以查找并下载与本章相关的工作簿。 -
导航到定向/非定向工作表。
-
按下表所示创建计算字段:
名称 计算 备注 Lookup
LOOKUP(SUM([Sales]),-1)
请注意,计算中包含了 -1
。这指示 Tableau 从前一行获取值。Size
SIZE()
SIZE
函数返回分区中的行数。因此,正如下图所示,大小等于总行数。Window Sum
WINDOW_SUM(SUM([Sales]))
Window
sum
函数(WINDOW_SUM(expression, [start, end]
)可以定向或非定向操作。由于这个示例没有包括[start, end]
选项,它是非定向操作的。Window Sum w/ Start&End
WINDOW_SUM(SUM([Sales]),0,1)
这个窗口函数的示例是定向操作的,正如通过包含 [start, end]
选项可以看出的那样。Running Sum
RUNNING_SUM(SUM([Sales]))
根据其本质, RUNNING
函数是定向操作的,因为它们需要考虑前面的行进行计算。 -
将Category和Ship Mode放置到Rows架上。
-
双击Sales、Lookup, Size、Window Sum、Window Sum w/ Start&End和Running Sum,以填充如下图所示的视图:
图 5.1:表格计算
- 图 5.1中的表格显示,
Size
函数和Window Sum
函数是唯一的两个非定向函数。其他所有函数都根据方向返回一个数值。例如,Lookup
向下移动并打印实际字段之前的值。你可以通过点击任何表格计算字段的三角形并选择编辑表格计算来更改方向。
第一个练习是两个表格计算类别的示例:定向和非定向。现在,我们将逐一考虑表格计算函数。遗憾的是,由于篇幅所限,无法深入探讨所有表格计算;不过,为了获得实际的理解,考虑所有独特的选项组,除了其中一个组,应该足够了。以Script_
开头的四个表格计算,以及六个Model_
函数,将在第十五章,编程语言整合中进行讲解。
尽管我在每个部分的结尾加入了实际场景,但跟随练习侧重于演示表格计算的功能,并考虑每个计算如何与缓存中的数据集(也称为分区)定向或非定向交互。
探索每个独特的表格计算函数
以下练习将分别展示每个表格计算;在每个部分的末尾,您将看到我对实际场景的想法。
查找和总计
以下工作表的目标是显示在 2013 年最后两天内进行购买的客户及其相关的绝对销售额和相对销售额(12 月)。
在下面的表格中,LOOKUP
按方向性进行操作,而TOTAL
是无方向性的。这种行为在结果中容易察觉。请按照以下步骤操作:
-
在与本章相关的工作簿中,导航至查找/总计工作表。
-
将客户名称和订单日期拖到行架上。右键点击订单日期,将其设置为月/日/年离散格式,并选择日和离散。
-
将订单日期放到筛选器架上,选择仅查看 2013 年 12 月,并选择月/年作为日期格式。
-
创建以下计算字段:
名称 计算 查找介入时间
DATEDIFF('day',LOOKUP(Max([Order Date]),0), MAKEDATE(2013,12,31))
% 总销售额
SUM(Sales)/TOTAL(SUM([Sales]))
-
右键点击% 总销售额,选择默认属性 | 数字格式,将数字格式设置为百分比,并保留两位小数。
-
将查找介入时间放到筛选器架上,并选择 0 到 1 的范围。
-
双击销售额和% 总销售额,将这两个字段放到视图中。
-
根据需要设置格式:
图 5.2:总销售额
让我们考虑一下前面的工作表是如何运作的:
-
订单日期的筛选器确保返回给 Tableau 的数据仅包括 2013 年 12 月的数据。
-
% 总销售额
SUM(Sales)/TOTAL(SUM([Sales]))
包括TOTAL(SUM([Sales]))
计算字段,返回整个数据集的总销售额。将SUM([Sales])
除以该总额,返回占总销售额的百分比。 -
查找 介入 时间:
DATEDIFF('day', 'LOOKUP(Max([Order Date]), 0)', 'MAKEDATE(2013,12,31))
将返回一个整数,反映LOOKUP
函数返回的日期与12/31/2013之间的差异。请注意,LOOKUP
函数的偏移量为零。这意味着每行返回与该行相关的日期。这与方向性和无方向性的表格计算不同,后者包括带有-1 偏移量的LOOKUP
函数,这导致视图中的每一行返回与前一行相关的数据。
乍一看,你可能认为可以通过从筛选器架上移除查找中介时间并调整[订单日期]
筛选器,仅显示 12 月的最后两天,来简化此工作簿。然而,如果这样做,% 总销售额将在视图中的所有行中加总为 100%,这将无法满足工作簿的目标。可以将查找中介时间视为不是筛选,而是隐藏 12 月除了最后两天以外的所有日期。这样隐藏数据,确保计算% 总销售额所需的数据仍然存在于缓存/分区的数据集中。
实际场景:我比总计更常用查找。在使用 Tableau 时,两者都非常重要。我们已经看到你用查找来处理变化;你可以将其视为月度利润对比、今天与去年今天的员工人数对比、按星期几的网页点击差异等等。
对于表格计算的总计,每次你想在仪表板上显示某个东西的总数,同时又想保持某种程度的聚合时,都可以使用它。总计的百分比在图 5.2中实际上是一个完美的例子。
前一个值
以下工作表的目标是返回每年的销售额总值并设定明年的销售目标。请注意,提供了两种确定明年销售目标的选项,以展示PREVIOUS_VALUE
与LOOKUP
的不同。此外,请注意PREVIOUS_VALUE
的行为是有方向性的。
让我们来看一下步骤:
-
在本章关联的工作簿中,导航到前一个值工作表。
-
创建以下计算字段:
名称 | 计算 |
---|---|
下一年目标前一个值 |
PREVIOUS_VALUE(SUM([Sales])) * 1.05 |
下一年目标查找 |
LOOKUP(SUM([Sales]),0) * 1.05 |
-
将订单日期放置在行架上。
-
双击销售额和下一年目标前一个值,将每个值放置到视图中。
-
按照需要格式化,或参见下方截图(通过拖动度量值中的堆叠,顺序将在视图中相应更改,如下方截图所示):
图 5.3:明年
让我们考虑一下前面的工作表是如何工作的:
-
下一年目标前一个值:
PREVIOUS_VALUE(SUM([Sales])) * 1.05
应用于此工作表,它从每一行的前一个结果中获取数据并加上 5%。换句话说,目标是每年以 5%的稳定增长率增长。 -
下一年目标查找:
LOOKUP(SUM([Sales]),0) * 1.05
也应用于此工作表;此计算将当前年份的销售额增加 5%。换句话说,明年的目标是比今年高出 5%的销售额。前几年的数据不考虑在内。
为了更好地理解这个练习,请考虑前面截图中与 2014 相关的值。Next Year Goal Prv_Val 通过 2013 Next Year Goal Prv_Val 计算得出;即 $560,577 * 1.05。另一方面,Next Year Goal Lkup 是通过 2014 年的销售额计算得出的;即 $733,947 * 1.05。
现实场景:假设你想要推算一个数据点并从该新值继续推算;为此,你可以使用 Previous_Value。一个例子是定期支付息票的债券。如果你的债券面值为 100,且每半年支付 4% 的息票,你可以使用 Previous_Value 来计算债券的最终价值,就像我们在上一个练习中使用 Next Year Goal Prv_Val 那样。
运行
以下工作表的目标是显示每个月的运行最小值利润、运行平均值利润和运行最大值利润,并与数据集中的 SUM(Profit) 进行比较。
以下示例展示了 Running
函数的方向性行为:
-
在与本章相关的工作簿中,导航到 Running 工作表。
-
创建以下计算字段:
名称 | 计算 |
---|---|
运行最小值 |
RUNNING_MIN(SUM([Profit])) |
运行最大值 |
RUNNING_MAX(SUM([Profit])) |
运行平均值 |
RUNNING_AVG(SUM([Profit])) |
-
将 订单日期 放到 列 货架,并将其设置为 月/年 连续格式。将 度量值 放到 行 货架。
-
从 度量值 货架中删除除 运行最小值、运行最大值、运行平均值 和 利润 外的所有度量实例。
-
将 SUM(Profit) 从 度量值 货架移到 行 货架。右键点击 SUM(Profit) 并选择 双轴。
-
按照需要进行格式设置。
让我们考虑一下前面的工作表是如何工作的:
-
运行最小值:
RUNNING_MIN(SUM([Profit]))
在前面的截图中可见,它将当前的 SUM(Profit) 与截至目前记录的最小 SUM(Profit) 进行比较。如果当前的 SUM(Profit) 小于迄今为止记录的最小 SUM(Profit),则当前的 SUM(Profit) 将替代最小的 SUM(Profit)。 -
运行最大值:
RUNNING_MAX(SUM([Profit]))
的操作方式与 运行最小值 类似,当然它是寻找最大值。 -
运行平均值:
RUNNING_AVG(SUM([Profit]))
根据每个月到当前月的 SUM(Profit) 计算平均值。
现实场景:对于这个表格计算,有很多例子可以参考。考虑年初至今的利润、基于出生人数的人口数据(别忘了减去死亡人数)、当前未解决的支持票数量,等等。
窗口
以下工作表的目标是显示 WINDOW
函数的方向性实例和非方向性实例。
请按照以下步骤操作:
-
在与本章相关的工作簿中,导航到 Window 工作表。
-
创建以下计算字段:
名称 | 计算 |
---|---|
Win Avg Directional |
WINDOW_AVG(SUM([Profit]),-2,0) |
Win Avg Non-Directional |
WINDOW_AVG(SUM([Profit])) |
-
将 订单日期 放置在 列 货架上,并设置为 月/年 连续。将 度量值 放置在 行 货架上。
-
从 度量值 货架上移除所有度量实例,除了 Win Avg Directional、Win Avg Non-Directional 和 利润。
-
从 数据 面板中,将另一个 利润 实例拖到 行 货架上。右键单击 行 货架上的 利润 实例,并选择 快速表格计算 | 移动平均。右键单击 行 货架上的 利润 实例,并选择 双轴。
-
右键单击标记为 利润的移动平均值 的轴,并选择 同步轴。
-
根据需要进行格式化,或按照以下截图所示进行格式化:
图 5.4:窗口
让我们来看看前面的工作表是如何工作的:
-
Win Avg Directional:
Window_AVG(SUM([Profit]),-2,0)
的起始点为 -2,结束点为 0,这意味着 Tableau 会基于当前月及前两个月的SUM([Profit])
计算创建一个点。如果将0
改为2
,则每个点的平均值会计算基于前两个月、当前月和接下来的两个月。双击 行 货架上的 利润 实例以查看底层代码。(这是通过右键单击并选择 快速表格计算 | 移动平均 后更改为表格计算的 利润 实例。)请注意,计算与为 Win Avg Directional 创建的代码相同。然而,如果你右键单击这两个柱子并选择 编辑表格计算,你会发现弹出的对话框不同。与 利润 相关的对话框有更多选项,包括改变前后值的功能。要更改 Win Avg Directional 的前后值,需要调整计算字段。 -
Win Avg Non-Directional:
WINDOW_AVG(SUM([Profit]))
与视图中的水平线相关。注意,它与方向无关,而是通过缓存/分区中所有聚合的 利润 值的平均值生成的单一值,因此无论数据点的顺序如何,它的值都是相同的。
现实场景:为什么要使用窗口平均值?因为你想平滑掉异常值,例如。窗口平均值提供了数据的平稳表示。单一的高点或低点会被去除。如果你分析股价,你会注意到价格在全年可能会有所不同!通过使用窗口平均值,或者更准确地说,使用窗口标准差作为预警指标,你将能够更清楚地看到价格的波动,并且作为投资者可以做出相应的决策。然而,稳步增长或下降会落入移动区间。这是固定区间无法实现的。
首次和最后一次
以下工作表的目标是显示Superstore
数据集中畅销商品的首次和最后一次实例。注意以下示例演示了FIRST
和LAST
函数的方向性行为。
执行以下步骤:
-
在与本章相关的工作簿中,转到首次/最后一次工作表。
-
创建以下计算字段:
名称 | 计算 |
---|---|
首次 |
FIRST() |
最后一次 |
LAST() |
First or Last |
FIRST() = 0 OR LAST() = 0 |
- 将产品名称放到过滤器架上,选择顶部标签,然后选择按销售额的前 1,如下面的截图所示:
图 5.5:顶部过滤器
-
将首次或最后一次放到过滤器架上,并在弹出的对话框中选择真。
-
将产品名称、订单日期和行 ID拖到行架上。
-
将订单日期设置为月/日/年离散型。
-
双击销售额、首次和最后一次,将每个字段放入视图中。
-
右键点击首次、最后一次和首次或最后一次,然后选择计算方式 | 表格(向下)。
-
根据需要进行格式化:
图 5.6:首次和最后一次
让我们考虑一下上面工作表的功能:
-
首次:
FIRST()
从0开始,倒数到缓存中数据集的最后一行。在上面的截图中,注意到佳能 imageCLASS的首次出现是在05/24/13。FIRST()
的范围从0到-4,这表明数据集中共有五次佳能 imageCLASS的实例,或者在窗口缓存中有五次。 -
最后一次:
LAST()
从缓存中的数据集的最后一行开始,倒数到 0。在上面的截图中,注意到佳能 imageCLASS的最后一次出现是在11/18/14。LAST()
的范围从4到0,这表明数据集中共有五次佳能 imageCLASS的实例。 -
首次或最后一次:
FIRST() = 0 OR LAST() = 0
,当放入过滤器架上并设置为真时,将隐藏所有匹配行的实例,除首次和最后一次外。 -
行 ID字段包含在视图中,以确保显示佳能 imageCLASS的第一个和最后一个实例。否则,如果佳能 imageCLASS在第一个或最后一个日期有多个实例,销售数字将反映多个值。对于视图中的每个表格计算,设置计算方式为表格(向下)很重要。计算方式与寻址相同,稍后将在函数应用部分详细讨论。
现实场景:你可以使用此类计算来分析每个季度最后五个订单之间的时间,以查看订单间的时间是增加还是减少。这有助于改进营销或更高效地安排客服时间。
索引
以下工作表的目标是列出美国中拥有超过 50 个邮政编码的州,这些邮政编码在底层数据集中有表示。
注意,以下示例演示了INDEX
函数如何按方向表现,并且可以视为行的计数:
-
在与本章相关的工作簿中,导航到索引工作表。
-
将标记卡片设置为圆形。
-
将州放置在行货架上,将邮政编码放置在详细信息货架上。
-
创建一个名为索引的计算字段,代码为:
INDEX()
。将索引拖到筛选器货架上,并选择值范围筛选器。通过将滑块移动到50的最小值,仅查看大于或等于 50 的值。 -
右键点击索引并选择编辑表格计算。选择特定维度并勾选邮政编码:
图 5.7:索引
- 选择分析 | 堆叠标记 | 关闭,然后进行查看:
图 5.8:最终索引
让我们考虑一下前面工作表的功能:
索引:INDEX()
从 1 计数到n。因此,它按方向表现。在这种情况下,由于分区和寻址设置的原因,索引正在计数邮政编码。(分区和寻址将在函数应用部分详细讨论。)将索引筛选器设置为仅显示大于或等于 50 的值,确保只有那些有 50 个或更多邮政编码的州出现在缓存中的分区/数据集显示中。
现实场景:通常,我将索引与首项和末项互换使用。
排名
以下工作表的目标是展示每个地区的前三大畅销商品。这个示例将演示RANK
如何在缓存中的数据集与方向交互:
-
在与本章相关的工作簿中,导航到排名工作表。
-
将产品名称放置在筛选器货架上,选择顶部选项卡,并按销售总额选择前 3:
图 5.9:筛选器
-
将地区和产品名称放置在行货架上,将销售额放置在列货架上。
-
请注意,每个地区仅显示两项:
图 5.10:查看前两个项目
-
创建一个名为Rank的计算字段,代码为
Rank(SUM(Sales))
。将Rank拖动到Region和Product Name之间的Rows架上。 -
请注意,在将Rank放置到Rows架上的两个标记之间之前,必须将其转换为离散。实现这一目标的一种方法是将Rank放置到Detail架上,右键点击该标记,然后选择Discrete。
-
右键点击Rank,然后选择Compute Using | Product Name。
-
从Filters架上移除Product Name。
-
按住Ctrl键(在 Mac 上按Option键),右键点击并拖动Rank从Rows架上到Filters架上。按住Ctrl键在架间拖动标记会创建该标记的副本。如果不按Ctrl键,当然只是移动标记。在弹出的对话框中,选择1、2和3。
按照需要进行格式化:
图 5.11:排名
让我们来看看前述工作表是如何工作的:
-
如果你按照步骤完成了这个练习,你会发现,在将Region和Product Name放置到Rows架上并设置过滤器显示仅前 3 个产品名称后,结果可视化中每个区域只显示了两个产品。这是因为Product Name的过滤器显示了所有产品中排名前三的产品,但恰好每个区域中总是有两个产品在前三名中。我们实际上想要展示的是每个区域的前 3 个产品,而不是整体的前 3 个产品。为了解决这个问题,我们使用了
Rank
表计算函数。 -
让我们理解它是如何工作的。与其编写
Rank(Sum(Sales))
函数,不如通过右键点击任何架上的Sales实例并选择Quick Table Calculation | Rank,相同的代码会自动生成。请注意,Rank是在每个区域内计算产品名称的。这表明,Rank表计算函数在缓存/分区中的数据集上按方向操作。
实际场景:当我想过滤一个持续变化的视图,并将其分成多个子部分时,我使用Rank——例如,查看每个博客帖子上的最后三条评论。或者当我想显示一段时间内的行为时,例如,过去两年里排名前 10 的产品。这将生成一个排名图。
Size
以下工作表的目标是显示Superstore数据集中所有城市数为五个或更少的州。这个示例将演示如何利用SIZE
在缓存中使用整个分区/数据集,因此它是无方向的。我们还将使用FIRST
表计算函数,它是有方向的,以便清理视图。
请按照以下步骤操作:
-
在与本章相关的工作簿中,导航到Size工作表。
-
将Analysis | Stack Marks设置为Off。
-
创建以下计算字段:
名称 | 计算公式 |
---|---|
Size |
SIZE() |
City Count |
IF FIRST() = 0 THEN [Size] ELSE NULL``END |
-
将State拖到Rows货架,City拖到Detail货架,City Count拖到Text/Label货架,Size拖到Detail货架。
-
右键单击Size过滤器,选择计算方式 | City。将Size从Marks卡片中移至Filters货架。
-
在弹出的对话框中,选择一个最多为5的值:
图 5.12:最多
-
在Marks卡片上,右键单击City Count并选择编辑表格计算。在嵌套计算下,选择City Count。
-
选择计算方式 | 特定维度并勾选City:
图 5.13:特定维度
-
现在再次使用嵌套计算下拉菜单并选择Size。然后,选择计算方式 | 特定维度并勾选City。
-
观察最终视图:
图 5.14:最终工作表
让我们考虑一下前述工作表是如何运作的:
-
Size:
Size()
会生成一个单一的数字,例如,Delaware 的值是 3,它基于缓存中的分区/数据集。该数字可以根据分区和地址设置而改变,但在分区内的移动不会改变该数字。因此,它表现为无方向性。 -
City Count:
IF FIRST() = 0 THEN LOOKUP([Size],0) ELSE NULLEND
字段并非绝对必要。你可以选择直接将Size放置到Text/Label货架上。然而,如果这样做,你会注意到视图中的数字会变得粗体。这是因为这些数字实际上是重复的,并且被叠加在一起。使用FIRST() = 0
使得只显示一组数字。
请注意,前面的练习有一个嵌套计算的选项,这是因为 Size
计算字段在 City Count
计算字段中被引用。
现实场景:Size 可能是最少使用的。我诚实地说,除了用来解释和展示它,我从未真正使用过它。但我看到其他人用Size做的事情是:通过开启总计列视图,Size 可以生成一个非默认的聚合,如标准差。只需使用以下公式:if size()=1 then sum({STDEV([Sales])}) else sum([Sales]) end
。
如果你还想了解更多关于表格计算的内容,以下是一些额外的场景:www.tableau.com/blog/top-10-tableau-table-calculations
。
现在我们已经展示了不同的表格计算,我们将看到如何在分区(范围)和地址(方向)中操作它们。
函数的应用
到目前为止,我们已经解答了两个主要问题中的第一个:函数是什么? 现在我们将继续下一个问题:如何应用这个函数?
让我们通过以下三种选项来理解这个问题,它们都是INDEX
函数的应用:
图 5.15:应用实例
INDEX
函数在这三张截图中都有使用,但每个应用的方式不同。第一和第二张截图都显示1、2、和3,但方向上有所不同。第三张截图的范围从1到9。那么,INDEX
在每个情况下是如何应用的呢?
回答这个问题可能会令人困惑,因为 Tableau 使用了不同的术语。在 Tableau 中,表计算的应用方式可能被称为沿着运行、沿着移动、计算使用,或者分区(范围)和寻址(方向)。为了方便起见,我们将使用分区和寻址这两个术语,这些术语的定义可以参考 Tableau 文档(help.tableau.com/current/pro/desktop/en-us/calculations_tablecalculations.htm
):
定义如何对数据进行分组的维度,即定义计算作用范围的维度,称为分区字段。表计算在每个分区内单独执行。剩下的维度,表计算在其上执行,称为寻址字段,并决定计算的方向。
这基本上意味着分区定义了哪些字段正在使用,例如Segment
。如果你有三个按三个类别划分的分段,你可以分别查看每个组合、一个分段中的所有类别,或者一个类别中的所有分段。你查看的方式就是 Tableau 所称的寻址(addressing)。
如果在视图中使用了表计算,你可以右击它并选择编辑表计算。这样做后,你会看到一个对话框,允许你选择特定的维度。如果一个维度被勾选,它就是寻址的。如果没有勾选,它就是分区的。
见下图中的示例:
图 5.16:寻址与分区
Tableau 提供了许多开箱即用的分区和寻址设置,包括表格(纵向)、表格(横向)、窗格(纵向)和单元格。我们会偶尔提到这些选项,但不会进行详细回顾。这引出了我们的第一个分区和寻址指南:
不要使用 Tableau 提供的开箱即用的分区和寻址设置,包括表格(跨)和窗格(纵向)。强迫自己点击特定维度,并手动定义分区和寻址,这样你才能清楚理解每个表计算是如何应用的。
在上述指南中有几个需要注意的事项:
-
有一个例外,即单元格。无法使用分区和地址在视图中定位单个单元格。相反,需要将计算方式设置为单元格,或者在表格计算对话框中选择单元格。令人惊讶的是,在每个单元格上定位表格计算是有用的。一个示例已在本章节关联的工作簿中的总占比工作表中提供。在那里,它用于展示每个单元格在两个类别之间的 100%。
-
如果为某个表格计算设置了分区和地址,然后向视图中添加维度,通常情况下,Tableau 不会自动调整分区和地址设置;它们是锁定的。然而,在使用表(纵向)、窗格(横向)等时,Tableau 会在向视图中添加维度时自动进行调整。
这引出了我们的下一个指南:
在设置分区和表格计算的地址之前,先将所有需要的维度放置在所需的架位上。
遵循这些指南将有助于确保你始终清楚你的表格计算是如何应用的。起初可能需要更多时间,但最终你会更好地掌控表格计算,进而更快地发展。
构建游乐场
让我们设置一个简单的游乐场环境,以快速而高效地探索分区和地址:
-
在本章节关联的工作簿中,导航至游乐场工作表。
-
将类别放置在行架上,将索引计算放置在标签架上。
-
索引计算仅为
Index()
。点击与索引关联的下拉菜单,并选择编辑表格计算。在弹出的对话框中,点击特定维度。 -
最优地定位屏幕组件。请参阅以下截图,查看一种可能的设置:
图 5.17:构建游乐场
你可以在图 5.17 中看到,我们创建了一个工作表,展示了三类:家具、办公用品和技术。通过将索引字段添加到文本架上,我们具备了使用表格计算的最小要求:一个维度和一个表格计算。现在我们可以改变表格计算中的计算方式,并观察可视化中发生的变化。稍后我们将探索更复杂的示例;然而,始终从简单的开始,逐步提高复杂度,以便完全理解发生了什么。
在接下来的页面中,我们将广泛使用我们的游乐场并根据需要进行修改。然而,为了提高效率,我们需要将重点集中在游乐场和随附的讨论上。讨论将仅限于行和列架上的维度以及文本架上的INDEX
函数。
我们可以探索在不同架上进行的各种功能及它们提供的不同选项。例如,将日期字段放置在页面架上将导致使用TOTAL
函数的表格计算,显示计算所有页面总和的选项。遗憾的是,在一个章节中探索所有可能的细节是不可行的,但如果你对这个话题感兴趣,请随时查看 Tableau 帮助页面,获取更多内容和示例:help.tableau.com/current/pro/desktop/en-us/functions_functions_tablecalculation.htm
。
使用一个维度进行分区和地址映射
让我们利用我们的实验平台,开始通过最简单的例子探索分区和地址映射:
图 5.18:使用 | 类别计算
在这个简单的例子中,选择类别会导致每个类别维度的成员被计数。这表明,选择一个维度进行地址映射决定了计算的方向。在我们的例子中,我们有表格计算 索引,但索引依赖于我们之前所学的分区和地址映射。类别作为行架上的分区。我们将数据分为三类:家具、办公用品和技术。现在,我们也可以说,为了进行表格计算,要使用类别。我们通过在计算方式中选择类别来完成这一操作(图 5.18)。现在,表格计算将应用于这些类别,从而计算出 1、2、3 类别。
如果你选择计算方式 | 单元格,分成三类的分区仍然会保持在视图中——你依然会看到家具、办公用品和技术——但计数将按单元格进行,而不是按整个类别维度进行。因此,索引会先计算 1,然后移动到下一个单元格,计算 1,再到下一个单元格,再次计算 1:
图 5.19:使用 | 单元格计算
现在,让我们考虑使用两个维度来进行分区和地址映射,而不是一个维度。
使用两个维度进行分区和地址映射
在使用两个或更多维度进行分区和地址映射时,提供了两个额外的选项:在级别和每次重启。你可以将这个场景比作统计每个大洲的所有国家。在这个场景中,在级别指的是国家,因为你统计的不是街道或树木,而是国家。重启指的是大洲。完成一个大洲的国家统计后,你将从下一个大洲重新从 1 开始:
图 5.20:两个维度
At the level和每次重启都允许作者从下拉菜单中选择维度。At the level允许作者选择在哪个级别进行增量操作,正如其名称所示,每次重启允许作者选择在哪些维度上进行重启。这里的示例将为你提供理解的背景。
请注意,At the level有一个额外的选项:Deepest。在这种情况下,将At the level设置为Deepest与选择运输方式相同。这引出了我们的下一个指南:
在“At the level”下拉菜单中不需要选择底层维度。它总是与Deepest相同。
为了重新创建此处列出的迭代,你需要对演示环境做一些更改。除了将类别放在行架上,索引放在标签架上外,还需要将运输方式放在行架上。我们不会讨论包含一个或多个维度在列架上的迭代,因为这些可能性中的行为几乎相同。
在考虑和/或复制以下选项时,请注意寻址顺序非常重要。对于示例 3-5,类别排在寻址列表的首位。对于选项 6-8,运输方式排在列表的首位。
在第一个示例中,按如下方式配置分区和寻址设置:
-
分区:类别
-
寻址:运输方式
-
At the level:-
-
每次重启:-
这将产生以下可视化效果:
图 5.21:示例 1
在这里,我们按类别计算运输方式。
在第二个示例中,按如下方式配置分区和寻址设置:
-
分区:运输方式
-
寻址:类别
-
At the level:-
-
每次重启:-
这将产生以下可视化效果:
图 5.22:示例 2
在这个示例中,我们按运输方式计算类别。
在第三个示例中,按如下方式配置分区和寻址设置:
-
分区:-
-
寻址:类别,运输方式
-
At the level:Deepest
-
每次重启:无
这将产生以下可视化效果:
图 5.23:示例 3
这次,我们计算类别和运输方式的组合。
在第四个示例中,按如下方式配置分区和寻址设置:
-
分区:-
-
寻址:类别,运输方式
-
At the level:Deepest
-
每次重启:类别
这将产生以下可视化效果:
图 5.24:示例 4
在这里,我们按类别和运输方式的组合进行计数,并在每个新的类别时重新计数。
在第五个示例中,按如下方式配置分区和寻址设置:
-
分区:-
-
寻址:类别,运输方式
-
At the level:类别
-
每次重启:无
这将产生以下可视化效果:
图 5.25:示例 5
我们在类别级别计算类别和运输方式的组合。由于类别级别在层级结构中高于运输方式,因此我们最终只计算每个类别的一个值。
在第六个示例中,配置分区和寻址设置如下:
-
分区:-
-
寻址:运输方式,类别
-
在级别:最深层
-
每次重启:无
这将产生以下可视化效果:
图 5.26:示例 6
我们在运输方式级别计算运输方式和类别的组合;因此,我们首先计算头等舱和所有与之相关的类别组合,然后是同日配送及其与类别的组合。
在第七个示例中,配置分区和寻址设置如下:
-
分区:-
-
寻址:运输方式,类别
-
在级别:最深层
-
每次重启:运输方式
这将产生以下可视化效果:
图 5.27:示例 7
我们在最深层次计算运输方式和类别的组合,但我们在每次运输方式时都会重启;因此,我们计算头等舱和家具,头等舱和办公用品,然后是头等舱和技术。接下来,我们继续处理同日配送及其组合,并在 1 处重新开始。
在第八个示例中,配置分区和寻址设置如下:
-
分区:-
-
寻址:运输方式,类别
-
在级别:运输方式
-
每次重启:无
这将产生以下可视化效果:
图 5.28:示例 8
我们在运输方式级别计算运输方式和类别的组合。
现在,让我们更详细地考虑一下这里呈现的一些可能性。一些选项是相同的。实际上,在九个选项中,只有四个是独特的。让我们考虑一下示例 1、4 和 8,它们的最终结果是相同的。这是否意味着每个选项都完全相同?选项 1 和选项 4 是相同的。但是,选项 8 略有不同。要理解这一点,请注意选项 8 中表格计算对话框中的描述:
图 5.29:索引
示例 8 中的描述为结果按运输方式、类别计算(见图 5.29)。示例 1 中的描述框中的文本与示例 4 完全相同:结果按运输方式、类别计算,这可以翻译为按类别进行分区并按运输方式进行寻址。此翻译与示例 1 中实际完成的分区/寻址设置完全一致。因此,示例 1 和示例 4 是相同的。但示例 8 的细微差异是否意味着存在实际的区别呢?不!
示例 6 可能一开始会让人感到困惑。为什么会出现奇怪的编号顺序?因为处理维度的顺序与 行 货架上的维度顺序不同。处理顺序是 运输方式, 类别,而 行 货架上的顺序是 类别, 运输方式。只需将 类别 和 运输方式 在 行 货架上的位置反转,并注意数字顺序的变化,这样就能帮助消除任何困惑:
图 5.30: 切换维度
示例 6 有实际用途吗?是的。从时间到时间,可能需要按照不同于货架上列出的顺序处理维度。但通常情况下并不是这样。这引出了我们的下一个指南:
在为表格计算处理多个维度时,处理顺序通常会反映在 行 和/或 列 货架上的维度顺序。
使用三个维度进行分区和处理
让我们为实验添加另一个维度并稍作调整。将 类别 和 地区 放在 行 货架上,将 运输方式 放在 列 货架上。索引 应该保持在 标记 货架的 文本 上。同时,添加两个过滤器。将 地区 过滤为 东部, 南部, 和 西部。将 运输方式 过滤为 头等舱, 二等舱, 和 标准舱。
当分区和处理三个维度时,可能的迭代次数跃升至 57 次;然而,其中只有 14 次是唯一的。以下是这些唯一可能性的列举。
记住,处理意味着在表格计算设置中选择维度,而分区是取消选择维度,正如 图 5.17 所描述的那样。
在第一个示例中,配置分区和处理设置如下:
-
分区: 类别, 地区
-
处理: 运输方式
-
在该级别: -
-
每次重启: -
这将产生以下可视化:
图 5.31: 示例 1
在这里,我们统计每个 地区 和 类别 组合下的不同 运输方式 选项。
在第二个示例中,配置分区和处理设置如下:
-
分区: 类别, 运输方式
-
处理: 地区
-
在该级别: -
-
每次重启: -
这将产生以下可视化:
图 5.32: 示例 2
在这里,我们统计每个 类别 和 运输方式 组合下的不同 地区 选项。
在第三个示例中,配置分区和处理设置如下:
-
分区: 地区, 运输方式
-
处理: 类别
-
在该级别: -
-
每次重启: -
这将产生以下可视化:
图 5.33: 示例 3
在这里,我们统计每个 地区 和 运输方式 组合下的不同 类别 选项。
在第四个示例中,配置分区和寻址设置为:
-
分区:类别
-
寻址:地区,运输方式
-
在层级:最深层
-
每次重启:无
这将生成以下可视化:
图 5.34:示例 4
在这里,我们计算不同类别选项在每个地区和运输方式组合下的数量,直到最深层级。
在第五个示例中,配置分区和寻址设置为:
-
分区:类别
-
寻址:运输方式,地区
-
在层级:最深层
-
每次重启:无
这将生成以下可视化:
图 5.35:示例 5
在这里,我们计算不同类别选项在每个运输方式和地区组合下的数量,直到最深层级。
在第六个示例中,配置分区和寻址设置为:
-
分区:地区
-
寻址:类别,运输方式
-
在层级:最深层
-
每次重启:无
这将生成以下可视化:
图 5.36:示例 6
在这里,我们计算不同地区在每个类别和运输方式组合下的数量,直到最深层级。
在第七个示例中,配置分区和寻址设置为:
-
分区:运输方式
-
寻址:类别,地区
-
在层级:最深层
-
每次重启:无
这将生成以下可视化:
图 5.37:示例 7
在这里,我们计算不同运输方式在每个类别和地区组合下的数量,直到最深层级。
在第八个示例中,配置分区和寻址设置为:
-
分区:运输方式
-
寻址:地区,类别
-
在层级:最深层
-
每次重启:无
这将生成以下可视化:
图 5.38:示例 8
在这里,我们计算不同运输方式在每个地区和类别组合下的数量,直到最深层级。
在第九个示例中,配置分区和寻址设置为:
-
分区:-
-
寻址:类别,运输方式,地区
-
在层级:最深层
-
每次重启:无
这将生成以下可视化:
图 5.39:示例 9
在这里,我们计算类别、运输方式和地区的组合,直到最深层级。
在第十个示例中,配置分区和寻址设置为:
-
分区:-
-
寻址:运输方式,类别,地区
-
在层级:最深层
-
每次重启:无
这将生成以下可视化:
图 5.40:示例 10
在这里,我们计算运输方式、类别和地区的组合,直到最深层级。
在第十一个示例中,配置分区和寻址设置为:
-
分区:-
-
寻址:运输方式、类别、区域
-
在级别:类别
-
每次重新启动:无
这将生成以下可视化效果:
图 5.41:示例 11
在这里,我们统计运输方式、类别和区域的组合,在类别级别。
在第十二个示例中,将分区和寻址设置配置为:
-
分区:-
-
寻址:运输方式、区域、类别
-
在级别:最深
-
每次重新启动:无
这将生成以下可视化效果:
图 5.42:示例 12
在这里,我们统计运输方式、区域和类别的组合,在最深级别。
在第十三个示例中,将分区和寻址设置配置为:
-
分区:-
-
寻址:运输方式、区域、类别
-
在级别:最深
-
每次重新启动:运输方式
这将生成以下可视化效果:
图 5.43:示例 13
在这里,我们统计运输方式、区域和类别的组合,在最深级别。
在第十四个示例中,将分区和寻址设置配置为:
-
分区:-
-
寻址:区域、运输方式、类别
-
在级别:最深
-
每次重新启动:无
这将生成以下可视化效果:
图 5.44:示例 14
我们不会讨论这些可能性中的各种实例。相反,鼓励读者在 Tableau 中重新创建这 14 种可能性,以巩固他们对分区和寻址的理解。更好的是,考虑重新创建所有 57 种可能的迭代,并努力理解 Tableau 是如何生成每个结果的。这个过程可能很繁琐,但最终获得的理解是无价的,它让用户了解 Tableau 在计算时后台做了什么。
指南:提醒
在本章中,我列出了关于分区和寻址的一系列指南。下面是快速提醒的内容:
-
不要使用 Tableau 提供的开箱即用的分区和寻址设置,包括表格(横向)和面板(纵向)。强迫自己点击特定维度,手动定义分区和寻址,以便你能清晰理解每个表计算是如何应用的。
-
在设置表计算的分区和寻址之前,将所有所需的维度放置到所需的架子上*。
-
在级别下拉菜单中,选择最底层维度并非必要。它总是与最深相同。
-
在为表计算寻址多个维度时,寻址的顺序通常会反映出行和/或列架上的维度顺序。
总结
在本章中,我们探讨了表格计算的内部机制。我们首先考虑了表格计算的分区和方向是什么。在接下来的部分中,我们区分了表格计算的定向和非定向寻址,最终引导我们进入编辑表格计算界面,我们将其确定为更改分区和寻址(也叫做范围和方向)的地方。在我们的探讨过程中,我们回顾了除Script_
和Model_
函数外的每一组表格计算函数,这些内容将在第十五章《编程语言集成》中进行更详细的讲解。我们学会了如何通过分区和寻址将这些函数应用于视图,其中分区可以看作是计算的范围,寻址则是计算的方向。
我们已经看过一些示例,比如对不同时间段进行度量比较,例如每周的利润数据,或者将部分与整体进行比较。我们接着考虑了用于股票价格警报的标准差带,以及排名函数来生成波动图。
利用本章所学的分区和寻址知识,在下一章中,我们将继续探讨数据密集化和大数据。
在 Discord 上了解更多
要加入本书的 Discord 社区——在这里你可以分享反馈、向作者提问并了解新版本——请扫描以下二维码:
第六章:利用 OData、数据密集化、大数据和 Google BigQuery
Tableau 新手常遇到的问题并不涉及数据准备、连接、联合、数据混合或数据结构,而是以下几个方面:
-
如何从视图中删除空值日期?
-
为什么表计算会显示底层数据中不存在的数字?
-
Tableau 如何处理大数据?
-
如果我查询数百万行数据,Tableau 仍然能保持良好性能吗?
本章将解答上述所有问题。像往常一样,Tableau 帮助页面也是一个极好的资源。以下是一些有用的链接,可以进一步探索这些话题:
本章将讨论以下主题:
-
使用 OData 连接器
-
数据密集化
-
域补全
-
域填充
-
大数据
-
Google BigQuery
我们将通过介绍 OData 连接器开始本章内容。芝加哥市像其他城市、国家或公共机构一样,提供公开数据。去看看吧,你会惊讶于在线能找到多少数据。在我们的案例中,我们特别幸运,因为芝加哥市使用了 OData,这使得数据分析变得更加容易,因为 Tableau 提供了直接连接到 OData 的功能。让我们开始吧。
使用 OData 连接器
本章的练习可以通过下载与本章关联的工作簿来完成,工作簿可在 public.tableau.com/profile/marleen.meier
获取。接下来的步骤将解释如何通过使用 OData 端点将网络上的数据集直接加载到 Tableau 中——在本例中,数据由芝加哥市提供:
- 访问
data.cityofchicago.org/Public-Safety/Crimes-2001-to-Present/ijzp-q8t2
并选择 更多 图标(由省略号 … 表示),然后点击 通过 OData 访问数据 按钮:
图 6.1:芝加哥数据门户
- 复制 OData 端点 URL 并打开 Tableau Desktop:
图 6.2:OData
- 在 数据源 面板中,搜索
OData
,并选择 OData 选项:
图 6.3:OData 连接器
- 在 服务器 字段中,复制芝加哥犯罪网站的 OData 端点。无需身份验证,点击 登录 开始使用:
图 6.4:服务器名称
- 开始构建你的仪表盘!
现在我们已经设置好了数据连接,可以继续进行我们的第一个关于数据稠密化的实际练习。了解数据稠密化将帮助你在仪表板中看到意外数据输出时进行故障排除,并帮助你正确设置可视化,以便实现目标,而无需进行任何故障排除。
介绍数据稠密化
数据稠密化是 Tableau 中一个基本上没有文档记录的方面,它在许多情况下都非常有用,但在意外遇到时可能会令人困惑。本节将提供有关数据稠密化的信息,目的是消除困惑,并为 Tableau 用户提供足够的知识,以便将这一功能用于他们的优势。数据稠密化,简单来说,就是向视图中添加在基础数据集中不存在的数据点。这个主题一开始可能有些困惑。
如果你想了解更多内容,请查阅以下文章:towardsdatascience.com/data-densification-in-tableau-93c0a6bfcc5f
要开始理解数据稠密化,需要定义四个术语:数据稠密化、稀疏数据、领域补全和领域填充。除了定义之外,每个术语将通过示例进行详细讨论,帮助加深理解:
-
数据稠密化:展示没有相应基础数据的数据点(例如,通过领域补全或领域填充等方式)。
-
稀疏数据:缺少多个数据点的数据集(想象一下瑞士奶酪的样子)。
-
领域补全:使稀疏数据变得稠密—领域补全是一种数据稠密化方法,它使用表格计算来填补缺失的空白,当视图中包含两个或更多维度时,Tableau 中可以使用此方法。
-
领域填充:向稀疏数据集中添加数据点—领域填充是一种数据稠密化方法,可以通过范围堆叠中的显示缺失值功能来实现(例如,日期和区间维度)。
定义现在应该已经清晰了,接下来让我们继续进行实践练习。
领域补全
数据稠密化有两种类型:领域补全和领域填充。领域补全是两者中更为复杂的一种,能够巧妙地解决稀疏数据问题,但也可能会意外出现,并且难以应对。
掌握领域补全需要对维度和度量—离散与连续—以及表格计算中的分区和寻址有深入的理解。如果你需要复习这些主题,请在继续下一个练习之前,回顾一下第一章,基础回顾(关于维度和度量),以及第五章,表格计算简介(关于分区和寻址)。
现在,让我们考虑如何应用领域补全,何时它会有帮助,何时又可能会成为问题。
部署领域完成
领域完成可以通过许多方式激活,甚至有时这些方式令人惊讶且令人困惑。调整货架上药丸的排列、在离散和连续之间切换维度、切换Marks卡片上的视图类型、调整分区、寻址等变动都可能影响领域完成的激活。尽管本书不会覆盖所有激活可能性,但回顾典型的领域完成场景应该会有所帮助。
在交叉表中激活领域完成
以下步骤将引导你完成一个领域完成的示例。
导航到public.tableau.com/profile/marleen.meier
来定位并下载与本章相关的工作簿,或者使用本节中描述的 OData 端点使用 OData 连接器:
-
在启动工作簿中,导航至名为
DC
-
Crosstab
的工作表。请注意,此工作表在解决方案工作簿中不存在。由于独特的用户 OData 连接,我无法使用我的凭据保存此页面。 -
确保分析 | 表格布局 | 显示空行和显示空列都被取消选择。
-
在
Chicago
Crime
数据集中,创建一个名为Index的计算字段,使用代码INDEX()
。 -
添加Location Description过滤器,只查看一些特定地点——例如,所有以
AIRPORT
开头的地点。然后将Location Description放置在Rows货架上。 -
将Date放置在Columns货架上。保持YEAR聚合并将其更改为离散值。请注意,如下图所示,视图的填充较少:
图 6.5:交叉表
- 将Index放置在Detail货架上的Marks卡片中。请注意,在以下截图中,视图现在显示了领域完成——也就是说,视图已完全填充:
图 6.6:交叉表 II
- 右键点击YEAR(Date)并选择连续。请注意,数据密集化被禁用:
图 6.7:交叉表 III
-
将YEAR(Date)重置为离散,然后右键点击Index并选择编辑表计算。
-
在弹出的对话框中,选择特定维度,然后观察以下每个选择的结果:
选择特定维度 | 数据密集化已激活/已禁用 |
---|---|
Location Description |
已激活 |
Year of Date |
已激活 |
Location Description 和 Year of Date |
已禁用 |
无选择 | 已禁用 |
上述练习演示了部署领域完成的以下规则:
给定一个具有离散维度的交叉表,放在Rows和Columns货架上,使用表计算(此处为Index字段),其中至少有一个维度(但不是所有维度)被寻址,将激活领域完成。
上述规则中的一个关键术语可能令人困惑:寻址。分区和寻址在第五章,引入表格计算中已经介绍过,但在这里会再次定义,以确保理解此规则。请参考以下 Tableau 文档内容(help.tableau.com/current/pro/desktop/en-us/calculations_tablecalculations.htm
):
定义如何对计算进行分组的维度,也就是定义其执行范围的数据的维度,称为分区字段。表格计算在每个分区内分别进行。其余维度,表格计算在这些维度上执行,称为寻址字段,并决定计算的方向。
在编辑表格计算时,你可以选择选中/取消选中特定维度。当某个维度被选中时,该维度用于进行表格计算的寻址。当某个维度没有被选中时,该维度用于进行表格计算的分区。下面的表格计算编辑对话框截图演示了位置描述的寻址和日期年份的分区:
图 6.8:表格计算
我们现在将继续探讨在交叉表中激活域补全的剩余步骤:
-
复制前一个练习中的工作表,
DC – 交叉表
。将新工作表命名为DC – 交叉表 II
。 -
右键点击索引并选择计算方式 | 单元格。请注意,视图中的数据稀疏。
-
选择分析 | 表格布局 | 显示空列。现在该视图已完全填充:
图 6.9:交叉表
这个练习展示了部署域补全的以下规则:
-
给定一个视图,其中行和列架上有离散维度(蓝色),选择计算方式 | 单元格将停用域补全。
-
给定一个视图,其中行和列架上有离散维度(蓝色),选择分析 | 表格布局 | 显示空行/列将激活域补全。
将计算方式设置为单元格可能会引发一个问题:其他的计算方式选项,如表格(跨行)和表格(纵向)怎么办?这些选项都是分区和寻址的变体。
通过视图类型激活域补全
我们现在将探讨通过视图类型激活域补全:
-
复制前一个练习中的工作表,
DC – 交叉表 II
。将新工作表命名为DC – 视图类型
。 -
从标记视图卡片中移除索引,并取消选中分析 | 表格布局 | 显示空列。现在该视图中的数据稀疏。
-
将标记类型从自动更改为线。现在视图中填充了更多的标记:
图 6.10:视图类型
- 在标记卡上选择每个视图类型选项,并观察哪些视图类型激活了域完成,哪些没有。
上面的练习说明了部署数据完成的以下规则:
给定一个在行和列架上有离散维度的视图,选择线型、区域和多边形视图类型,激活域完成。
域完成的实用性
域完成在许多情况下非常有用——例如,您无需手动填充缺失的值,或者在需要使用参数时,或者进行说明性分析时。事实上,您可能已经从前面的练习中获得了一些用途,尽管这些练习只是为了演示目的。以下练习展示了如何使用域完成,在一个稀疏分布的视图中显示没有值的单元格为无数据。
标记空值
让我们看看以下步骤,开始本次练习:
-
复制上一个练习的工作表
DC – View Types
,将新工作表命名为DC – Labeling Nulls
。 -
调整重复的工作表,使视图类型设置为文本。同时,确保只有位置描述和年份被部署在视图中。请确保将位置描述保留在过滤器架上,以便显示一些位置。
-
创建一个名为无数据的计算字段,使用以下代码:
IF ISNULL(COUNT([Case Number])) THEN 'No Data' ELSE 'Data' END
-
将区和无数据放在文本架上。请注意,文本
无
数据
没有显示:
图 6.11:标记空值
- 将索引放在详细信息架上。请注意,文本无数据确实显示出来。域完成部分的练习现在已完成,但考虑通过使用形状来使可视化更加吸引人:
图 6.12:标记空值,带有额外的格式设置
我希望这个练习能给你一个关于域完成如何工作的实际示例。实际上,你可以把域完成想象成你在浏览器搜索栏中开始输入的 URL 的自动填充。但如果你想完全去掉它呢?我们将在下一部分讨论这个问题。
移除不需要的域完成
在了解域完成之后,用户将不再在视图中看到不需要的标记时感到困惑。但知道如何从显示中移除这些不需要的标记可能会是一个挑战。以下练习展示了一个不希望出现域完成的场景,以及如何解决这个问题。练习的目标是显示每年报告的犯罪事件,并附带一个过滤器,根据数据可用的年数调整显示的犯罪事件:
-
在与本章相关的工作簿中,导航到
DC – Year Count
工作表。 -
在数据面板中选择
Chicago Crime
数据集。 -
将描述放在过滤器架上,并选择AGG PO HANDS NO/MIN INJURY。
-
将描述和日期放置到行架上,确保YEAR(Date)是离散的,并将Ward放置到文本架上。根据需要进行格式化。请注意2001的缺失值,如下图所示:
图 6.13:年份计数
这不是数据密集化的一个实例,因为数据集中2001有一行记录,尽管该年份的Ward值为空。因此,2001的值是空值。
-
要去除包含空值的字段,请点击与SUM(Ward)相关的下拉菜单,选择筛选。在弹出的对话框中,选择特殊 | 非空值:
图 6.14:筛选非空值
-
创建一个名为
Year
Count
的表格计算,使用以下代码:SIZE()
-
如果在第 3 步中将描述维度放置到筛选器架上,请在接下来的步骤中将其移除。
-
将Year Count的离散实例放置到列架上。请注意,结果数字6411(请注意,您可能会看到不同的数字,因为数据集不断更新)表示视图中的每一列:
图 6.15:年份计数
- 右键点击Year Count,选择计算方式 | 日期。看起来像是第 4 步中讨论的场景再次出现。然而,尽管视图中的问题看起来相同,底层问题却有所不同。Year Count是一个表格计算,并导致了域完成。因此,这一次,即使例如$300 AND UNDER和2001的组合在数据集中不存在,我们仍然会看到每年的一行记录。我们之所以能看到每年,是因为表格计算Year Count:
图 6.16:年份计数域完成
-
右键点击Year Count,选择编辑表格计算。
-
在弹出的对话框中,选择特定维度。确保描述和日期年份都被勾选,并通过拖拽使其按图 6.17所示顺序排列。保持At the level设置为Deepest,并将Restarting every设置为描述。排序顺序可以保持为特定维度,如果勾选显示计算辅助框,您将在可视化中看到黄色高亮,指示与选择相关的数据点:
图 6.17:特定维度
- 如果您有多个Year Count值,请通过将Year Count从列架上移到筛选器架上完成此练习。根据需要进行格式化(这允许您筛选在分区中具有相同行数的维度):
图 6.18:完成年份计数工作表
前述规则中与本练习相关的部分是“在表计算中至少一个维度被寻址(但不是所有维度)时,激活域补全”。在首次部署年份计数(Year Count)时,发生了域补全,这时它是一个表计算。通过改变年份计数的寻址和分区,使得所有维度都被寻址(即没有维度被分区),问题得以解决。
恭喜你,你可以把“学习域补全”从你的“学习清单”上划掉了。如本章介绍所述,接下来要学习的是域填充。你需要了解如何使用域填充,因为它在处理日期和区间时非常有用。
域填充
第二种数据密集化类型被称为域填充。我们现在将讨论如何部署域填充以及它在何时有用。
部署域填充
你可能记得,部署域补全的方式之一是通过分析 | 表格布局 | 显示空行/列。域填充也是如此,如下所示的练习演示了如何开启和关闭域填充:
-
在与本章关联的工作簿中,选择数据 | 新数据源并连接到随 Tableau 一起提供的
样本
超级商店
Excel 工作簿。它位于我的 Tableau 仓库 | 数据源+。 -
在随后的数据源页面实例中,双击订单与退货。这样会在订单 ID字段上创建一个关系。
-
将数据源命名为
超级商店 – 退货
。 -
导航到名为
DP
–
显示
缺失
值
的工作表,并选择刚刚创建的超级商店 –退货
数据源。 -
将运输模式和状态放置在行架上。接下来,将地区放置在筛选器架上并选择西部。最后,将销售总和(SUM(Sales))放置在文本架上。注意,举个例子,怀俄明州只会出现在标准类运输模式下:
图 6.19:显示缺失值
- 选择分析 | 表格布局 | 显示空行:
图 6.20:显示缺失值 II
你可以看到域填充的实际效果。现在,所有在某年或某地区有值的状态都展示出来了,即使它们被地区:西部筛选器过滤过。现在,筛选器仅仅去除了销售额,但是仍然显示所有可能的状态。
有必要指向一个实时数据源,如与 Tableau 一起提供的超级商店实例,因为使用提取数据源在这种情况下无法激活域填充,即使选择了分析 | 表格布局 | 显示空行。一旦你激活了提取数据源,功能就会丧失。
域填充的实用性
在处理有间隙的日期时,领域填充通常非常有用。这样的间隙发生在某些日期有值,而其他日期没有值时。如以下示例所示,Superstore
数据集中并非每天都有退货。由于显示有间隙的日期的可视化可能会引起混淆,因此填补这些间隙可能会有所帮助。
使用领域填充来填补日期间隙
现在我们将尝试填补日期间隙:
-
在与本章相关的工作簿中,导航到名为
DP – 填充日期间隙
的工作表。 -
选择在前一个练习中创建的
Superstore – Returns
数据源。 -
将MDY(订单日期)的离散实例放置在列货架上,并将销售额放置在行货架上。请注意,视图中的每个标记之间的间隔是均匀的,无论日期之间的时间间隔有多长:
图 6.21:填充日期间隙
-
右键点击MDY(订单日期)并选择显示缺失值。
-
在行货架上右键点击SUM(销售额),选择格式。在弹出的格式窗口中,选择面板标签并选择标记:显示默认值:
图 6.22:填充日期间隙 II
请注意,现在标记之间的距离是基于日期之间的时间间隔。所有没有值的日期将显示销售额为零。
领域填充的问题
由于领域填充可以通过 Tableau 中的特定命令(即显示缺失值和显示空行/列)进行切换,因此通常不会造成问题。然而,在某些情况下,领域填充可能会引起困惑,以下示例中涵盖了其中的一种情况。
从领域填充的可视化到交叉表
让我们看看如何从领域填充的可视化中创建交叉表:
-
在与本章相关的工作簿中,导航到名为
DP – 从可视化到交叉表
的工作表。 -
选择
Superstore – Returns
数据源。 -
在数据面板中右键点击折扣,选择创建 | 分箱。在弹出的对话框中,选择0.05作为分箱大小。
-
将新创建的折扣(分箱)维度放置在列货架上。
-
右键点击折扣(分箱),确保选中显示缺失值。
-
右键点击并拖动折扣字段从数据面板到行货架,选择计数作为度量。请注意,有些分箱没有值。例如,如下截图所示,0.35分箱没有相关值:
图 6.23:从可视化到交叉表
- 通过右键点击工作表标签并选择复制为交叉表来复制工作表。请注意,显示缺失值仍然处于激活状态:
图 6.24:从可视化到交叉表 II
- 通过右键点击折扣(分箱)并取消选中显示缺失值来完成练习:
图 6.25:从 Viz 到 Crosstab III
在可视化中使用 Show Missing Values 来显示箱子或日期通常是有帮助的,但在交叉表视图中可能不太有用。尤其是当有许多行或列没有值时,这一点尤为明显。这样会让人难以消化大量数据,而且由于通常与不重要的数据相关联,所以在交叉表中排除缺失值通常是更好的做法——简单地保持更清晰的概览。
在进行预测建模时,数据密集化会出现一种特殊情况。正因如此,我们接下来将讨论这个话题。
预测建模中的数据密集化
除了趋势线和预测(可通过分析面板访问)外,Tableau Desktop 当前支持三种类型的内置预测建模功能。可以通过使用 Python 集成(参见第十五章,编程语言集成)等方式添加更多模型。目前可以选择线性回归、正则化线性回归和高斯过程回归。可以通过在计算字段中使用 Model_Quantile
和 Model_Percentile
函数来调用这些功能。
图 6.26:内置预测函数
在本章随附的解决方案仪表板中的 DP - Show Missing Values Prediction
工作表中,你可以看到 2020 年 10 月的每一天的 Superstore Count(Orders)
及其相应的每日 50% 分位数。
有关内置预测分析和 Model_Quantile
的更多信息,请访问 help.tableau.com/current/pro/desktop/en-us/predictions_overview.htm
。
有些天没有数据显示:
图 6.27:缺失值
但我们可以启用数据密集化来完善视图。
右键单击DAY(Order Date) 在列架上,启用 Show Missing Values。
选择 分析 | 从缺失值推断属性,查看已完成的预测:
图 6.28:数据密集化
我希望数据密集化现在变得更加清晰了。它是一个强大的功能,应该更多地讨论。把这个消息传递出去!数据密集化将增强你的可视化(参见图 6.28),为你插值数据点,甚至可以用于计算——一个不存在的数字会突然出现——这多酷啊!不过,我们的旅程还将继续,接下来我们将讨论的是如何处理大数据。
Tableau 与大数据
可能,大数据的第一个挑战是如何恰当地定义它。这个术语被广泛使用,几乎变得毫无意义。例如,有些人可能会将超过 1,048,576 行的数据称为大数据(这是 Microsoft 365、Excel 2019、Excel 2016、Excel 2013、Excel 2010 和 Excel 2007 的行数限制),而其他人则可能只将多个拍字节范围的数据集称为大数据。维基百科上对大数据的定义(en.wikipedia.org/wiki/Big_data
)如此宽泛,几乎囊括了这两个例子。
诚然,考虑仅仅超过 Excel 行限制的数据为大数据可能有些过于简化;然而,从 Excel 是传统数据处理应用程序的个人角度来看,前述定义是适用的。
讨论大数据时,通常会与并行处理紧密相关。对于 Tableau 和大数据的使用,了解你的 IT 团队为并行处理设置的分区非常重要。举例来说,这些分区可能是年份、月份和日期列。如果你使用这些列作为数据库中的分区,你的 Tableau 仪表盘的性能将比在数据集中查询任意字段时要好得多。所以,首先设置过滤器——最好是分区。然后,基于数据的子集构建你的仪表盘。完成后,加载你需要的数据,再次检查性能。有关性能的更多信息,请参阅第十三章,提升性能。
许多组织选择基于云的解决方案,如 AWS、Azure 或 GCP。在Google Cloud Platform(GCP)中,你将找到 BigQuery,我们将在接下来的练习中使用它。
使用 Google BigQuery 构建可视化
一种大数据解决方案是 Google 的 BigQuery,除此之外,还有来自亚马逊、阿里巴巴、Azure、IBM 等多个供应商的解决方案。在本书的这一部分,我们随机选择了 BigQuery,如果你有 Gmail 账户,可以免费进行测试。其他供应商也提供免费套餐账户。由于我们在使用云平台,你不需要安装任何东西,这使得 Google Cloud 成为本书练习的理想平台。
要使用 Google BigQuery 构建可视化,你需要首先设置对 BigQuery 的访问。以下练习将指引你朝着正确的方向前进。一旦设置好对 BigQuery 的访问,你就可以连接到 BigQuery 的示例数据集。在接下来的练习中,你将构建一个可视化,并保持与 BigQuery 的连接。
假设你有良好的互联网连接,性能可能会超过你在处理类似大小的本地提取数据源时的体验。
让我们看看如何在 Tableau 仪表盘中使用 Google BigQuery:
-
登录你的 Google 账号,访问
cloud.google.com/bigquery/
,并按照提供的说明免费试用 BigQuery。 -
在本章关联的工作簿中,导航到
BigQuery
工作表。 -
按 Ctrl + D 连接数据源。在弹出的窗口中,选择Google BigQuery,并在提示时提供你的 Gmail 登录信息。
-
在数据源页面上,选择你在 GCP 注册时设置的任何账单项目。就我而言,它叫做
BigDataProject
。 -
然后选择
publicdata
项目、samples
数据集和natality
表。这些数据对所有人开放,因此你也应该能看到它。 -
出生率表提供了 1969 年到 2008 年间美国的出生人口统计数据:
图 6.29:BigQuery
-
在数据面板中,双击出生率(计数)。
-
从数据面板中,将月份拖到列货架,并将其设置为离散。
-
右键点击 y 轴,出生率计数,并选择编辑轴。取消选择包括零。
-
按需格式化。此可视化显示了 1969 年到 2008 年间每个月出生的婴儿数量:
图 6.30:BigQuery 可视化
知道大数据引擎是如何分区的字段,在面对性能问题时将大有帮助。例如,如果你的数据按年份分区,始终尝试在过滤器和计算中使用此字段。第十三章,提升性能,包含了更多相关信息。
如你所见,BigQuery 使我们能够快速轻松地可视化包含数百万条记录的数据集。
总结
本章开始时我们讨论了数据密集化,并发现数据密集化有两种类型:领域补全和领域填充。在回顾这两种数据密集化类型时,我们了解了每种类型如何部署、何时有用以及何时可能引发问题。接下来,我们通过一个示例来探讨大数据,展示如何使用 Tableau 连接 Google BigQuery。
在下一章,我们将探讨另一种功能:详细级别计算。尽管表计算仍然是日常使用 Tableau 时的重要部分,但我们将发现如何通过详细级别计算轻松完成以前仅能通过复杂表计算实现的任务。
在 Discord 上了解更多
要加入本书的 Discord 社区——在这里你可以分享反馈、向作者提问并了解新版本——请扫描下面的二维码:
第七章:练习细节级别计算
当我们在 Tableau 中谈论细节级别(LOD)计算时,我们指的是三种表达式:FIXED
、INCLUDE
和 EXCLUDE
。这三种表达式通过提供创建针对特定粒度级别的计算的能力,打开了无限可能性。在旧版本的 Tableau 中,工作表的数据粒度是通过视图中的维度来确定的。如果视图中包含了例如地区、州和邮政编码等维度,但作者想要创建一个城市级别的计算,那么城市维度就必须包含在视图中。此外,视图中没有排除或忽略给定维度的机制。诚然,通常可以通过一些复杂且有时晦涩的表计算、数据混合等方法获得所需结果。幸运的是,LOD 极大地简化了这些使用场景,并且在某些情况下,能够实现之前不可能实现的功能。
在本章中,我们将讨论以下主题:
-
介绍 LOD
-
FIXED
和EXCLUDE
-
INCLUDE
-
使用 LOD 构建实用应用
本章的前几部分更偏向理论,但别担心 —— 你将在使用 LOD 构建实用应用部分以实践的方式探索这些概念。让我们从介绍 LOD 和它的使用方法开始。
介绍 LOD
Tableau 的默认设置是根据视图中存在的维度显示度量。如果你有一个包含 销售
数据的仪表板,并且有像 州
和 城市
这样的维度,假设你将 州
和 销售
数据拖入视图中,那么 销售
数据会按 州
分割,显示每个 州
的 销售
数据。如果你希望进一步将 销售
数据划分成更小的部分,可以添加 城市
字段,结果将是每个 州
下的每个 城市
的 销售
数据。LOD 可以操作这个默认行为。
完成本章后,你将能够按视图中不存在的维度划分或分区度量,并使用视图中少于显示维度的方式展示度量。
为了实现这一点,我们将构建并使用两个操作环境。按照工作要求交付报告可能会导致对一组有限功能的深入了解;也就是说,深入但狭窄的理解。花时间(并证明这些时间的必要性)去探索 Tableau 的某些功能,可能会因为这些功能表面上看似与工作职责没有直接关系而变得困难。操作环境可以通过提供高效的探索途径,帮助克服任何困难和反对。在本章中,我们将专门为 LOD 构建两个操作环境,以帮助通过提供高效的探索和理解途径,使得深入和广泛理解变得更容易。你可以随时回到本章附带的工作簿,测试与 LOD 相关的功能。
FIXED 和 EXCLUDE
我们将构建的第一个工作区将用于探索三种 LOD 函数中的两个:FIXED
和EXCLUDE
。我们将使用一组参数和相关的计算字段来高效地探索这些函数的工作原理。
设置工作簿
本练习的大部分基础工作已经在与本章节相关的工作簿中完成。以下步骤仅要求您打开不同的计算和参数,查看它们是如何设置的,以及为什么这样做有效。在此过程中会给出解释。如果您没有直接访问该工作簿的权限,您应该能够通过参考以下步骤构建一个类似的工作簿。
完成工作表的初始设置,请按照以下步骤操作:
-
访问
public.tableau.com/profile/marleen.meier
来定位并下载与本章节相关的工作簿。 -
打开与本章节相关的工作簿,并导航到
Fixed and Exclude
工作表。该工作表应如下所示:
图 7.1:工作表
-
选择
Superstore
数据源,并通过右键点击选择编辑来检查名为1st Dim的参数:图 7.2:参数 I
名为2nd Dim、3rd Dim和4th Dim的参数与1st Dim相同。
-
请注意,除了Order Date和Ship Date,数据集中的每个维度都包含在值列表中(见图 7.2)。为了本练习的目的,Category、Region、Segment、Ship Mode和Sub-Category尤其重要,因为这些维度的成员较少。具有大量成员的维度在此上下文中较难使用。
-
检查工作簿中包含的选择固定维度、选择排除维度 1和选择排除维度 2参数,并注意我们在值列下定义了多个整数,每个整数将在参数下拉框中作为显示为列中指定的字符串显示。选择固定维度的值和显示为配置如下:
图 7.3:参数 II
- 检查名为1st Dim的计算字段(它位于数据窗格中的Practical: All文件夹下);此计算使用了
1st Dim
参数,并根据选择的参数显示相应的字段。如果用户在1st Dim参数中选择了Category,则值1
将被激活(根据图 7.2中指定的值)。然后,值1
将对应到计算字段1st Dim中的Category字段,如下截图所示:
图 7.4:计算的 1st Dim 字段
-
计算字段2nd Dim、3rd Dim和4th Dim与1st Dim相同,区别在于每个字段引用了对应名称的参数;例如,2nd Dim计算字段使用了
[Parameters].[2nd Dim]
。这些
Case
语句与相关参数结合使用,将允许你从视图中的下拉菜单中选择要查看的维度,如第 5 步所述。 -
检查以下计算字段,它们使你能够选择使用哪些 LOD,从而比较和对比差异和相似性:
图 7.5:Case Fixed
Case Fixed计算表明,如果用户在Choose Fixed Dims参数中选择
1
(显示为1st),1st Dim将被固定——无论仪表板的设置如何。这意味着SUM(Sales)将按照1st Dim进行分区,无论它是否是仪表板的一部分:图 7.6:Case Exclude 1
Case Exclude 1计算表明,如果用户在Choose Excluded Dims 1参数中选择
1
(显示为1st),1st Dim将从视图中的计算中排除。这意味着SUM(Sales)不会按照1st Dim进行分区,即使它是视图的一部分:
图 7.7:Case Exclude 2
Case Exclude 2计算表明,如果用户在Choose Excluded Dims 2参数中选择
1
(显示为1st),1st Dim将从视图中的计算中排除。这意味着SUM(Sales)不会按照1st Dim进行分区,即使它是视图的一部分。 -
现在,右键单击Product Name,并打开上下文过滤器进行检查。在弹出的对话框中,点击Wildcard标签,并注意设置,如下图所示。该过滤器已设置为仅显示以
S
开头的产品名称(Match value不区分大小写):
图 7.8:通配符过滤器
- 单击OK后,右键点击过滤器并选择Add to Context。注意,上下文过滤器会以灰色标示:
图 7.9:灰色上下文过滤器
-
将以下维度放置到Rows架上:1st Dim、2nd Dim、3rd Dim和4th Dim。
-
将Measure Names拖动到Filters架上,选择Sales、Case Fixed、Case Exclude 1和Case Exclude 2。
-
将Measure Values添加到Text,并将Measure Names添加到Columns:
图 7.10:度量值
- 通过右键单击每个参数并选择Show Parameter Control来显示每个参数。按如下顺序排列参数控制:
图 7.11:最终的操作区
通过遵循之前的步骤,我们现在可以构建各种表格来比较不同的 LOD,因为这些参数将允许我们选择不同的维度和包含 Tableau 中 FIXED
和 EXCLUDE
函数的计算字段。接下来,我们将继续使用沙盒环境并解释 LOD 如何改变计算字段。
理解 FIXED
现在沙盒环境已完成,让我们构建场景来更好地理解 FIXED
和 EXCLUDE
函数。我们将从 FIXED
开始。FIXED
LOD 只考虑它所指向的维度。因此,当固定在某个维度时,视图中的所有其他维度(如果有)将被忽略。当 FIXED
LOD 未定义任何维度时,结果将是一个忽略视图中所有维度(如果有)的计算。
让我们跳入练习,亲自查看一下:
-
使用之前描述的工作表,设置如下所示的参数:
图 7.12:第一个例子
通过不同的参数,我们实现了展示每个 Region 和每个 Category 的 SUM(Sales),同时我们还在 Case Fixed 列中固定了 Category 维度的 SUM(Sales) 计算。
-
Case Fixed 列现在显示每个 Category 的总和,并忽略 Region,因为我们告诉计算要固定 2nd Dim(Region),并忽略视图中的维度。
通过比较 Sales 列和 Case Fixed 列,我们可以看到这一效果:
图 7.13:Case Fixed I
-
请自己检查,并计算 Furniture 的值:
10,072 + 14,249 + 4,494 + 18,564 = 47,379。
尽管 Region 在视图中可见,但 Case Fixed 列中的 SUM(Sales) 会忽略 Region,并显示结果,仿佛 Category 维度是视图中的唯一维度。我们改变了数据的粒度。在 Case Fixed 列中,Region 只是用于提供信息,不会影响 SUM(Sales) 的计算。
-
现在,将 Choose Fixed Dims 参数更改为 1st,并注意 Case Fixed 现在显示每个 Region 的总和:
图 7.14:Case Fixed II
-
这一次,我们将 Case Fixed 列中的计算固定为仅考虑 Region,而忽略 Category。请自己检查,并计算 Central 的值:10,072 + 16,340 + 13,995 = 40,406。
将 Choose Fixed Dims 参数更改为 Fixed: Nothing,并注意该金额反映了 SUM(Sales) 的总和:
图 7.15:已固定:无
这一次,我们将计算固定为空,意味着我们忽略视图中的所有维度。请自己检查,并通过求和 Sales 值来做数学计算;总和为 194,776。
正如显而易见的,FIXED
LOD 只考虑它所指向的维度。因此,当固定在 类别 上时,地区 会被忽略。正如演示所示,当固定在 地区 上时,类别 会被忽略。最后,当 选择固定维度 设置为 固定:无 时,未受 产品名称 上的上下文过滤器限制的整个数据集将被显示。
接下来,让我们看一下 Tableau 2021.1 中引入的与 FIXED
LOD 相关的一些新功能。
表格范围的表达式
当使用整个表格作为范围时,编写 FIXED
LOD 表达式的快捷方式是使用如下代码:
{MAX([Order Date])}
如果在 Superstore
数据集上使用此计算,结果将与编写以下内容完全相同:
{FIXED: MAX([Order Date])}
无论你在视图中显示什么,该字段将始终从整个表格中检索最新数据。酷吧?
快速 LOD
Tableau 2021.1 允许我们更快地创建 FIXED
LOD。只需将所需的度量值拖动到维度上方,然后按下 Ctrl(在 macOS 上是 Cmd)。
现在你会看到维度以蓝色高亮显示(参见 地区 在 图 7.16 中)。然后将度量值拖放到那里,一个新的度量字段(在此情况下为 销售(地区))将被创建。
图 7.16:快速 LOD
右键点击 销售(地区),注意到已经创建了一个 FIXED
LOD:
图 7.17:快速 LOD II
如果你使用的是 Tableau 2021.1 或更高版本,可以使用此快捷键来进行 FIXED
LOD 计算。
我们构建的游乐场不仅仅用于 FIXED
,还用于 EXCLUDE
。接下来让我们看一下 EXCLUDE
。
理解 EXCLUDE
让我们开始理解 EXCLUDE
LOD。EXCLUDE
LOD 会排除任何指向的维度。如果你的视图包含 地区 和 类别,并且你在 类别 上编写一个 EXCLUDE
LOD,那么计算中只会考虑 地区。以下示例将更清楚地说明这一点——我们在本练习中的目标是通过使用比视图中更少的维度来计算 SUM(销售)
。我们只想从计算中排除可见的维度,但仍然在仪表板中显示维度值:
- 设置如下截图所示的参数:
图 7.18:固定:无
-
你可以观察到以下结果:
图 7.19:排除 I
案例排除 1 显示每个 类别 和 细分 的总计,并忽略 地区。例如,家具 类别下的 消费者 细分的总额为 $26,738. 该总额会为每个 地区 重复。生成这些结果的相关代码是:
SUM({EXCLUDE [Region] : SUM([Sales])})
-
对参数进行以下更改:
图 7.20:排除 II
任何 LOD 计算都可以与视图中的多个维度一起使用。在这种情况下,案例排除 2 忽略了两个维度:第 1 维度 和 第 2 维度,它们与 地区 和 类别 相关。因此,案例排除 2 的相关代码是:
SUM({EXCLUDE [Region],[Category] : SUM([Sales])})
案例固定 的相关代码是:
SUM({FIXED [Segment]: SUM([Sales])})
案例排除 2 和 案例固定 现在的结果是相同的。这是因为排除前两维度与固定在第三维度是相同的,两个案例中只考虑了第三维度 细分。
你可以在以下截图中观察结果:
图 7.21:排除 II 表
-
对参数做出以下更改:
图 7.22:更改第 4 维度
- 你可以如下观察结果:
图 7.23:排除 III
-
请注意,案例排除 2 和 案例固定 不再有相同的结果。这是因为引入了 运输方式,而 案例排除 2 考虑了 运输方式,而 案例固定 没有。
-
试验其他设置,进一步增强你对
FIXED
和EXCLUDE
LOD 的理解。
EXCLUDE
会导致在 LOD 计算中涉及的任何维度从计算中移除。多个维度可以是 EXCLUDE
LOD 的一部分,常见的使用案例包括将较低层次聚合(视图中的字段)与较高聚合进行直接比较(就像维度从视图中移除一样)。假设你想要可视化不同区域的类别销售情况以及每个区域的总销售额。你可能还想计算某个区域中单个类别与该区域整体之间的差异。难道这不是很酷吗,LOD 可以解决这个看似不可能的场景?希望之前的练习让你更好地理解了 EXCLUDE
LOD。
作为对 FIXED
和 EXCLUDE
练习后的快速过渡,让我们更仔细地了解一下 Tableau 的操作顺序。正如你现在所知,FIXED
和 EXCLUDE
获得相同结果并不总是如此——操作顺序将帮助我们理解为什么。
理解 Tableau 的操作顺序
之前的练习让我们相信,FIXED
和 EXCLUDE
得到相同结果的方法是通过固定未排除的维度,反之亦然。然而,Tableau 执行 FIXED
和 EXCLUDE
LOD 的顺序是不同的,这可能导致意外的结果。为了避免这种情况,我将向你展示使用 FIXED
或 EXCLUDE
LOD 时需要注意的事项。
让我们看看过滤的顺序:
- 按如下方式设置参数:
图 7.24:设置参数
-
观察结果:
图 7.25:相同结果
请注意,正如在之前的练习中所见,案例排除 2 和 案例固定 是相同的。
-
右键点击 产品名称 过滤器,选择 从上下文中移除:
图 7.26:从上下文中移除
- 在以下截图中观察结果:
图 7.27:没有上下文过滤器
- 案例 Exclude 2 和 案例 Fixed 不再相同。案例 Fixed 不再受产品名称筛选器的影响,因为上下文已被移除。
在前一个练习中观察到的 EXCLUDE
和 FIXED
之间的行为差异反映了基础筛选器操作顺序。如图 7.27所示,上下文筛选器会影响 FIXED
、EXCLUDE
和 INCLUDE
计算,因为上下文 筛选器首先应用于数据集,然后是 LOD。然而,维度筛选器只会影响 EXCLUDE
和 INCLUDE
LOD,因为 FIXED
LOD 会首先应用于数据集,然后是维度筛选器,接着是 EXCLUDE
和 INCLUDE
LOD。
请参见下图,这是 Tableau 操作顺序的示意图:
图 7.28:操作顺序
图 7.28 来自 Tableau 的帮助页面,链接如下:help.tableau.com/current/pro/desktop/en-us/order_of_operations.htm
。
本页面还包含更多有关 Tableau 操作顺序的信息。
我们刚才看到,当使用上下文筛选器时,EXCLUDE
和 FIXED
LOD 可能得到相同的数字,而维度筛选器会导致结果不同。这是因为 Tableau 会依次执行不同的请求。如前面的示意图所示,操作顺序为:
-
上下文筛选器
-
FIXED
LOD -
维度筛选器
-
INCLUDE
和EXCLUDE
LOD
了解这一点对于您选择正确的筛选器或 LOD 非常重要。
接下来,我们将使用一个新的练习场地,这次展示 INCLUDE
LOD 如何工作。
INCLUDE
第二个练习场地在使用附带工作簿时已为您大部分设置好(github.com/PacktPublishing/Mastering-Tableau-2023-Fourth-Edition/tree/main/Chapter07
)。不过,我们将为有效探索添加一些计算字段。如果您无法直接访问该工作簿,您应该能够通过参考以下信息构建一个类似的工作簿。
设置工作簿
在接下来的内容中,我们将设置一个工作表,以便练习INCLUDE
LOD:
-
打开与本章相关的工作簿,导航到
探索 Include
工作表。 -
在前面练习中创建的参数和计算字段 1st Dim、2nd Dim、3rd Dim 和 4th Dim 也会在这个工作表中使用。
-
右键点击第 1 维参数并选择复制。
-
将复制的
Choose
重命名为Included Dims
。 -
创建一个新的计算字段,命名为
Case``Include
,并使用以下代码:CASE [Choose Included Dims] WHEN 1 THEN AVG({INCLUDE [Category]: SUM([Sales])}) WHEN 2 THEN AVG({INCLUDE [City]: SUM([Sales])}) WHEN 3 THEN AVG({INCLUDE [Country]: SUM([Sales])}) WHEN 4 THEN AVG({INCLUDE [Customer ID]: SUM([Sales])}) WHEN 5 THEN AVG({INCLUDE [Customer Name]: SUM([Sales])}) WHEN 6 THEN AVG({INCLUDE [Order ID]: SUM([Sales])}) WHEN 7 THEN AVG({INCLUDE [Postal Code]: SUM([Sales])}) WHEN 8 THEN AVG({INCLUDE [Product ID]: SUM([Sales])}) WHEN 9 THEN AVG({INCLUDE [Product Name]: SUM([Sales])}) WHEN 10 THEN AVG({INCLUDE [Region]: SUM([Sales])}) WHEN 11 THEN AVG({INCLUDE [Segment]: SUM([Sales])}) WHEN 12 THEN AVG({INCLUDE [Ship Mode]: SUM([Sales])}) WHEN 13 THEN AVG({INCLUDE [State]: SUM([Sales])}) WHEN 14 THEN AVG({INCLUDE [Sub-Category]: SUM([Sales])}) WHEN 15 THEN 0 END
-
将案例 Include放到细节架上。
-
将以下度量和维度放到相应的架上:
图 7.29:探索 INCLUDE
- 通过右键单击每个参数并选择显示参数控制来显示以下每个参数:
图 7.30:参数
完成初始设置后,我们终于可以开始调查INCLUDE
LOD。
理解 INCLUDE
现在环境已设置完毕,我们来构建一个场景,更好地理解INCLUDE
。现在你大概能想象,如果FIXED
和EXCLUDE
LOD 从计算中移除维度,那么INCLUDE
会添加维度。没错!可能会发生这样的情况,你想在计算中包括一个或多个维度,即使视图中并没有显示它们。下一个例子将利用这个功能,在不显示子类别的情况下展示每个子类别的平均值。之所以这样做,是因为子类别包含大量额外的值,这使得仪表板难以阅读,并且需要更长时间才能得出快速结论。然而,了解每个子类别的平均值仍然是很有意义的,因为子类别的数量可能因区域和其他维度而异,包含它将有助于揭示实际的平均销售额。
让我们来看一下实际操作:
- 按照右侧所示设置参数:
图 7.31:初始布局
- 通过点击分析添加两条参考线,并使用以下设置进行编辑:
图 7.32:参考线设置
- 查看以下截图以查看结果。请注意,两个参考线是相等的:
图 7.33:按区域销售和参考线
- 如果参考线彼此重叠,请编辑格式并将对齐方式设置为顶部。要访问格式设置,请单击视图中的参考线:
图 7.34:格式参考线
- 现在,按此方式设置参数:
图 7.35:格式参考线
- 在 Tableau Desktop 中,您现在应该看到如下内容。与之前一样,两个参考线是相等的:
图 7.36:参考线
-
将选择包含的维度参数更改为类别、运输模式和细分。
-
请注意,在每个设置下,参考线是相等的。这是因为选择包含的维度仅介绍已经在视图中表示的维度。
-
将选择包含的维度参数更改为子类别,以便在预期的位置查看额外的参考线:
图 7.37:显示额外的参考线
Include Dim Avg参考线现在将子类别包括在平均值内,因此与整体平均参考线不同。平均值较小,因为总销售额被分配到比视图中可见的更多点上。将子类别添加到 LOD 后,行数增多,每行的平均值也变小。此外,注意到子类别维度并未在视图中使用。LOD 计算不要求计算字段必须出现在视图中。
总结一下,INCLUDE
LOD 可以以一种方式操作可视化,添加一些在视图中未使用的分区。此外,所有三种 LOD 的命名约定将成为你理解它们的最佳记忆法:Fixed
固定已使用的字段,Include
添加“缺失”的字段,和Exclude
从已存在的计算中删除不需要的字段。
为了获得更多的实操训练,我们将继续进行一些实际应用。
使用 LOD 构建实际应用
本章的第一部分旨在演示 LOD 的工作原理,其余部分将专注于实际应用。具体来说,我们将考虑三个典型挑战,这些挑战之前通过其他 Tableau 功能(如表格计算和数据融合)解决。
本练习将探讨一个问题,该问题出现在将计算总百分比的表格计算与维度过滤器结合使用时。我们将考虑这个问题,并使用 LOD 计算提供解决方案,最后进行与解决方案相关的点评。
使用 LOD FIXED 计算
你是否曾遇到过这样一种情况:你只在视图中显示了总数维度的子集,却又想计算总百分比?别担心,你并不孤单。不过,感谢 LOD(层次化计算),你很快就会学会如何解决这个问题。以下步骤将引导你完成这项练习:
-
打开与本章相关的工作簿,并导航到名为
The Problem
的工作表。 -
选择
2012_World_Pop
数据集。 -
创建一个名为
Percent of Total
的计算字段,使用以下代码:SUM([Population]) / TOTAL(SUM([Population]))
-
右键点击Percent of Total并选择默认属性 | 数字格式 | 百分比。
-
将国家放置在列货架上,将度量名称放置在行货架上,将度量值放置在文本货架上。
-
从度量值货架中移除记录数量。
-
右键点击Percent of Total并设置为使用计算 | 国家。
-
在国家上创建一个过滤器,使其只显示阿富汗:
图 7.38:阿富汗人口
阿富汗显示的总百分比为 100%。显然,这并不代表阿富汗在全球总人口中的百分比。让我们来探讨可能的解决方案——要通过 LOD 解决此问题,请按照练习步骤进行操作:
-
复制名为
问题
的工作表并重命名为解决方案 LOD
。 -
创建一个名为
总百分比 LOD
的计算字段,代码如下:SUM([Population])/SUM({ FIXED : SUM([Population])})
-
将总百分比 LOD放置到度量值货架,并注意显示的百分比为0.43%。如果显示为0,请将数字格式更改为百分比:
图 7.39:总百分比
- 从度量值货架中删除之前创建的总百分比表计算:
图 7.40:总百分比 LOD
如你所见,问题解决了!为了更好地理解后台发生了什么,我们来看看 Tableau 为名为问题
的工作表生成的查询。生成的查询可以通过点击帮助 | 设置与性能 | 开始性能记录来查看。(有关查看 Tableau 生成查询的更多信息,请参阅第十一章,仪表板设计与可视化最佳实践。)
SQL 语句如下:
SELECT
['2012_World_Pop$'].[Country] AS [Country],
SUM(['2012_World_Pop$'].[Population]) AS [SUM:Population:ok]
FROM
[dbo].['2012_World_Pop$'] ['2012_World_Pop$']
WHERE
(['2012_World_Pop$'].[Country] = 'Afghanistan')
GROUP BY
['2012_World_Pop$'].[Country]]
请注意,查询中的WHERE
子句将返回的数据集限制为只有那些国家为阿富汗
的行。这个WHERE
子句是因为将国家放置在筛选器货架上所生成的。通过限制返回的数据,处理要求从 Tableau 转移到底层数据源引擎。换句话说,数据源引擎负责执行查询,因此 Tableau 使用的是较小的数据集。这个设计的理由是,数据源引擎专门设计用于高效查询大数据集,并且通常具备支持此类活动的硬件。此外,限制返回给 Tableau 的数据行数可以减少由于延迟带来的低效问题。
由于 Tableau 尽可能从缓存中工作,低效问题进一步减少。通常,用户可以执行各种操作而无需生成对底层数据源的调用。然而,在前述情况下,如果用户选择了一个不同的国家作为筛选条件,Tableau 将生成一个新的查询到数据源。例如,如果用户与筛选器交互,取消选择阿富汗
并选择阿尔巴尼亚
,则会生成一个带有相应WHERE
子句的新查询。尽管 Tableau 依赖于数据源引擎的逻辑是可以证明的,但在前述例子中提出的问题依然存在。Tableau 作者可以做什么来计算整个数据的百分比,而不受筛选的影响呢?
一种解决方案是创建一个表计算,也可以用作过滤器。不同之处在于,与工作表The Problem
不同,Tableau 生成的查询会返回整个数据集。当表计算用于过滤器时,过滤操作直到底层数据返回后才会发生。换句话说,Tableau 执行过滤操作。这可以保留总百分比的百分比,而不管用户选择查看哪个国家的人口总数。但表计算可能会带来潜在问题,因为返回的数据集可能非常庞大,这可能会导致性能挑战。由于返回大数据集所需的时间增加,可能会遇到延迟,且由于增加的处理责任,Tableau 可能会更慢地执行。
我们提出的解决方案——LOD 计算,能够解决这些挑战。让我们来看看在Solution LOD
工作表中,Percent of Total LOD
计算字段创建的 SQL 查询:
SELECT
[t0].[Country] AS [Country],
[t1].[ measure 0] AS
[TEMP(Calculation_418553293854285824)(2417030171)(0)],
[t0].[TEMP(Calculation_418553293854285824)(616435453)(0)] AS
[TEMP(Calculation_418553293854285824)(616435453)(0)]
FROM
( SELECT
['2012_World_Pop$'].[Country] AS [Country], SUM(['2012_World_Pop$'].[Population])
AS [TEMP(Calculation_418553293854285824)(616435453)(0)]
FROM
[dbo].['2012_World_Pop$'] ['2012_World_Pop$']
WHERE
(['2012_World_Pop$'].[Country]= 'Afghanistan')
GROUP BY
['2012_World_Pop$'].[Country] ) [t0]
CROSS JOIN
( SELECT SUM(['2012_World_Pop$'].[Population]) AS [ measure 0] FROM
[dbo].['2012_World_Pop$'] ['2012_World_Pop$']
GROUP BY () ) [t1]
请注意术语CROSS JOIN
;LOD 计算生成的查询指示底层数据源引擎以一种方式返回数据,允许 Tableau 将一个或多个国家的人口值除以世界总人口,从而返回正确的总百分比。
使用 LOD INCLUDE 计算
接下来,我们将练习INCLUDE
LOD 计算。在本练习中,我们将创建一个工作表,显示以下内容:
-
每个区域的总销售额
-
所有区域的总销售额的平均值
-
每个区域中所有州的总销售额的平均值
使用 LOD 计算来显示这些值非常简单。让我们一起探索。请按照练习步骤操作:
-
选择
Practical Include
工作表。 -
选择
Superstore
数据集。 -
创建一个名为
Per State INCLUDE
的计算字段,使用以下代码:{INCLUDE [State]:SUM([Sales])}
-
将区域拖到列架上,SUM(Sales)拖到行架上,AVG(Per State INCLUDE)拖到详细信息架上。确保将Per State INCLUDE更改为平均值聚合。
-
通过右键单击销售额轴并选择添加参考线来添加两条参考线。使用以下设置:
图 7.41:参考线
- 按照所需的格式完成工作表:
图 7.42:每个区域和州的平均值
如您所见,得益于 LOD,我们可以按区域显示折线图,同时也可以显示整个数据集的图表。这之所以可能,是因为我们在Per State INCLUDE计算中包含了州维度。使用此计算字段创建参考线,可以让 Tableau 显示不仅是每个(可见)区域的平均值,还有每个区域的(不可见)州的平均值。
使用 LOD EXCLUDE 计算
在这个练习中,我们将使用超级市场
数据集创建一个工作表,用于计算每个城市在地区中产生的销售百分比。
按照练习步骤操作:
-
选择
实际排除
工作表。 -
选择
超级市场
数据集。 -
创建以下计算字段:
图 7.43:地区值和每地区 LOD 百分比
-
将地区和城市放置在行架子上。
-
将度量名称放置在列架子上,并将度量值放置在文本架子上。
-
从度量值架子上移除所有度量,除了销售额、地区值和每地区 LOD 百分比。
-
为了让每地区 LOD 百分比以百分比形式显示,必须调整数字格式。只需右键点击数据窗格中的计算,选择默认属性 | 数字格式 | 百分比:
图 7.44:更改数字格式
- 将AGG(每地区 LOD 百分比)放置在过滤器架子上,并调整显示至少
0.1
(即 10%):
图 7.45:百分比过滤器
- 查看当前视图,其中地区和城市位于行架子上:
图 7.46:杰克逊维尔仍然可见
- 现在,将州放置在行架子上,位于地区和城市之间。请注意,杰克逊维尔消失了:
图 7.47:当地区添加到行时,杰克逊维尔消失
这是因为杰克逊维尔位于南部地区的两个州:佛罗里达州和北卡罗来纳州。你可以看到这将每地区 LOD 百分比过滤器替换为城市:杰克逊维尔:
图 7.48:杰克逊维尔存在于两个州之间
我们的地区值计算排除了城市和州,因此每地区 LOD 百分比将计算视图中可见内容的销售总和,然后除以地区值。当视图中仅有地区和城市时,杰克逊维尔的销售总和为44,713(见图 7.48)。将这个数字除以地区值的391,722(见图 7.46),结果超过 10%。但是,随后我们将州添加到视图中,将杰克逊维尔在佛罗里达州的销售总和改为39,133,在北卡罗来纳州的销售总和为5,580(见图 7.50)。这两者在除以地区值的391,722后,结果都没有超过 10%,因此将由于过滤器的作用而从视图中删除。
LOD 是使用 Tableau 时相对高级的话题之一,但它们非常强大,值得花时间去理解。为了获得更多实际的例子,我建议你查看以下网站:www.tableau.com/about/blog/LOD-expressions
。我记得刚开始使用 Tableau 时,我从没想过会需要基于不在视图中的维度来展示数据,或者想要排除某些维度。但事实上,我很多时候都需要这么做,比如,在仪表板上添加距离总行平均值的计算,或者当某个维度有多个最大日期时,只想显示每个最大日期的度量。我比你想象的还要频繁地查阅 LOD 的文档,只能鼓励你也这样做;你读得越多,理解这个概念并自如使用它就会变得越容易。LOD 为你的仪表板带来的灵活性简直令人难以置信。
总结
我们通过探索为什么 LOD(层次级别计算)如此具有影响力,以及它们在 Tableau 中为何如此受到赞誉,开始了本章。接下来,我们构建了两个实验场来探索三种 LOD——FIXED
、EXCLUDE
和INCLUDE
——的工作原理。Tableau 的默认设置是基于视图中可见的维度来进行计算。例如,如果你的视图中有州,销售额将按州展示。如果你添加了城市,销售额将按州和城市进行调整。但是,如果你想修改这种默认逻辑,你可以使用 LOD。它们允许你根据任何维度来计算度量,无论该维度是否在视图中呈现。我们还看到,FIXED
LOD 的优先级高于EXCLUDE
和INCLUDE
LOD,这在 Tableau 的操作顺序中非常重要。记住这一点,以便在仪表板中使用正确的 LOD 和/或过滤器。
在下一章中,我们将关注 Tableau 的视觉部分,探索不同的图表类型以及一些不太常见但非常实用的可视化方法。
在 Discord 上了解更多
要加入本书的 Discord 社区——你可以在这里分享反馈、向作者提问并了解新版本——请扫描下面的二维码:
第八章:超越基础
本章的假设是你已经熟悉诸如条形图、折线图、树图、饼图和面积图等基本图表类型,并且曾经使用 Tableau 构建过多个图表。本章的目的是聚焦于如何改进你可能已经经常使用的可视化类型,同时介绍一些你可能不太熟悉但仍然广泛有用的图表类型。接下来我将介绍 Tableau Exchange,这是一个包含扩展、加速器和连接器的平台,它提供了一些更为独特的图表类型。
也许本章最有用的部分根本不在书中,而是在与本章相关的工作簿中。务必下载该工作簿(链接将在下一节提供),以查看各种各样的可视化类型。
本章将探讨以下可视化类型和主题:
-
改进受欢迎的可视化
-
自定义背景图片
-
Tableau Exchange
-
扩展
-
加速器
-
连接器
-
请记住,仪表盘的内容才是最重要的,但如果你能用更漂亮的设计来呈现相同的内容,那就选择更好的设计吧。确实存在美学偏见和设计驱动的消费。你想要卖出你的产品——让它看起来好看!我希望接下来的几节内容能帮助你找到自己的方向,最终让你成为更好的仪表盘设计师。
改进受欢迎的可视化
最受欢迎的可视化类型之所以受欢迎,是有原因的。基本的条形图和折线图直观、灵活且易于理解,因此在数据可视化中广泛应用。其他一些不那么基础的可视化类型,如子弹图和帕累托图,可能并不是你每天都会使用的,但它们仍然是数据分析师工具箱中的有用补充。尽管这些图表都很好,但它们还有更多潜力。本节将探讨如何调整、扩展,甚至彻底改进一些受欢迎的图表类型。
子弹图
子弹图由 Stephen Few 发明,并在 2006 年通过他的书籍《信息仪表盘设计:数据的有效视觉传达》公开传播。Stephen Few 通过他的书籍和博客www.perceptualedge.com,依然是数据可视化领域的有力声音。子弹图通过将大量信息压缩在小空间内,同时保持吸引力和易读性,来高效直观地传达信息。可以理解的是,它们因而获得了极大的普及,并被广泛应用于许多目的,网络搜索可以看到这一点。接下来的两个练习将介绍子弹图的基本概念以及如何在此基础上加以改进。并不是说我在本章中改进了子弹图!目的是简单地传达这种重要的可视化类型如何在 Tableau 中得到更有效的使用。让我们开始吧。
使用子弹图
以下步骤将教你如何使用子弹图的基本操作:
-
访问
public.tableau.com/profile/marleen.meier
,找到并下载与本章节相关的工作簿。 -
打开名为
子弹图
的工作表并选择CoffeeChain
数据源。 -
将以下字段放置在相应的架上:利润放置在列,市场放置在行,预算利润放置在细节中的标记卡片上。
-
右键点击X轴并选择添加参考线。
-
在编辑参考线、带状图或框选对话框的左上角,选择线条。同时,将范围设置为按单元格,将值设置为SUM(预算利润)并选择平均值,将标签设置为无。点击确定:
图 8.1:参考线
-
我们来添加另一条参考线。这一次,作为替代方法,点击分析面板并将参考线拖到工作表中。(当然,你也可以重复第 4 步的方法。)
-
在对话框中,选择分布并将范围设置为按单元格。将值设置为百分比,并输入90,95,100,将百分比基准设置为SUM(预算利润)。将标签设置为无。点击确定:
图 8.2:百分位数
-
创建一个名为
利润与预算利润比率
的计算字段,使用以下代码:SUM([Profit])/SUM([Budget Profit])
-
创建另一个计算字段,名为
配额达成?
,并使用以下代码:SUM([Profit])>=SUM([Budget Profit])
-
右键点击利润与预算利润比率,选择默认属性 | 数字格式 | 百分比。
-
将利润与预算利润比率放置在标签架上,配额达成?放置在颜色架上:
图 8.3:初步子弹图
回顾至今的结果,你会注意到该可视化图表中有一些重要的方面。例如,参考线和颜色条清晰地标示了配额是否达成。此外,百分比显示了各市场实际利润与预算利润的差距。然而,也存在一些问题需要解决:
-
与南方市场相关的百分比部分被遮挡。
-
由参考分布表示的背景颜色被遮挡。
-
条形图的颜色不直观。橙色被设置为真,表示在这种情况下,达成配额的市场。然而,从心理学角度看,橙色是一个警示色,用来传达问题,因此它更直观地与未达成配额的市场相关。此外,这些颜色在灰度显示时不易区分。
-
图例中的假和真这两个词并不直观。
在接下来的步骤中,我们将解决这些问题,并为你展示可能的解决方案。
子弹图——基础之外
为了解决上一部分图表中的问题,请按照以下步骤操作:
-
继续上一个练习,访问屏幕左侧的数据窗格,右键点击配额完成?,并调整计算如下:
IF SUM([Profit])>=SUM([Budget Profit]) THEN 'Quota Met' ELSE 'Quota Missed' END
-
这个计算会创建字符串
配额完成
,如果利润高于预算利润,或者创建字符串配额未完成
,如果利润没有超过预算利润。这两个字符串可以作为图例,且比之前的真和假更直观。 -
创建一个名为
利润与预算利润较大值
的计算字段,并输入以下代码:IF SUM(Profit)>SUM([Budget Profit]) THEN SUM(Profit) ELSE SUM([Budget Profit]) END
这个计算会显示利润金额,如果它大于预算金额,或者显示预算金额,如果利润较小。这将帮助我们始终显示两者中较大的金额。
-
将利润与预算利润较大值放置到利润之后的列货架上。还可以右键点击该条并选择双轴。
-
右键点击利润与预算利润较大值的轴线,选择同步轴。
-
在标记卡中,选择标有全部的窗格,并将标记类型设置为条形图。
图 8.4:标记卡
-
从颜色货架中移除度量名称。
-
在标记卡中,选择标有AGG(利润与预算利润较大值)的窗格。
-
点击颜色货架并将不透明度设置为0%。
-
在标记卡中,选择标有SUM(利润)的窗格。
-
从标记卡中移除AGG(利润与预算利润比),并注意百分比标签不再被遮挡。
-
点击颜色货架并选择编辑颜色。在弹出的对话框中,完成以下步骤:
-
双击配额完成并将颜色设置为白色。
-
双击配额未完成并将颜色设置为黑色。
-
-
在每个对话框点击确定并返回主屏幕后,再次点击颜色货架,并将边框设置为黑色。
-
点击大小货架,通过将滑块向左拖动来缩小条形图的宽度。
-
右键点击利润轴线,选择编辑参考线。然后将值设置为平均预算利润的 90%、95%、100%:
图 8.5:参考线
- 在同一窗口中,向下滚动到格式化部分,将填充颜色设置为浅灰色。勾选填充以下部分和反转复选框。请注意,背景颜色现在更容易区分:
图 8.6:背景颜色
- 右键点击标有利润与预算利润较大值的轴线,取消选择显示标题。你可能希望做一些额外调整,但我们的结果如下:
图 8.7:改进的子弹图
请注意,前述问题现已得到解决:
-
百分比数字不再被遮挡。
-
由于条形变窄,背景颜色更容易区分。
-
条形图的颜色更加直观。此外,使用黑色、白色和灰色避免了由色盲或灰度打印引起的可读性问题。
-
图例中的False和True已被更具描述性的术语配额已达和配额未达所取代。
完成本节内容后,你将学会如何通过调整来改善你的可视化效果以及选择的图表类型。每当你当前的选择尚未讲述完整故事时,你可以进行这些调整。除此之外,这也是一个卖点。你的用户喜欢漂亮的设计和清晰的仪表盘。通过使用更高级的技术改进你的可视化效果,你将能够提升你的讲故事技巧和营销效果。
在下一节中,我们将继续增加已知可视化的复杂性。这一次,我们将创建饼图和甜甜圈图,并最终将两者结合起来。
饼图和甜甜圈图
饼图在数据可视化圈中通常是不受欢迎的。它们有太多的缺点。例如,饼图在矩形屏幕上并没有很好地利用空间。树状图要适合得多。此外,饼图上合理的切片数量相当有限,最多也许是六到八个。再一次,树状图更优,因为它们可以以更精细的粒度进行切片,同时仍然保持有用。最后,在使用饼图时,可能很难分辨两个大小相似的切片哪个更大。树状图在这一点上也没有更好;然而,如果观众知道树状图的排序是从左上角到右下角,那么这一知识可以用来区分大小差异。当然,条形图完全避免了这个问题,因为眼睛可以轻松区分宽度和高度,但在分辨角度(饼图)和体积(树状图)方面却有困难。
尽管有这些缺点,但由于饼图的普及,饼图可能在未来几年仍会在数据可视化中广泛使用。人们喜欢它们,因为它们与老旧、无聊的条形图不同。用户熟悉饼图,它们无需任何解释,是展示比例的一种方式——只是我个人认为并不是最好的方式。对于悲观的 Tableau 作者来说,最好的做法是笑着接受并忍受它。但对于那些愿意探索并突破前沿边界的人来说,饼图的好用场景是可以被发现的。下面的练习就是这种探索的一个贡献。
地图上的饼图和甜甜圈图
有时,确实有需要(或认为需要)在地图上构建饼图的情况。这个过程并不困难(如你将在下面的练习中看到的那样),但是有一些缺点是无法轻易克服的。我们将在练习之后讨论这些缺点。
以下是步骤:
-
在与本章相关的工作簿中,导航到名为
Pie Map
的工作表并选择Superstore
数据源。 -
在数据窗格中,双击州以创建美国地图。
-
将销售额放置到颜色架上。单击颜色架并将调色板更改为灰色:
图 8.8:编辑颜色
- 按住Ctrl(Windows)或Command(Mac),同时拖动纬度(生成)的副本到行架上,创建两行,每行显示一张地图:
图 8.9:纬度
- 在标记卡中,您会注意到现在有三个窗格:全部、纬度(生成)和纬度(生成)(2)。单击纬度(生成)(2)并将标记类型设置为饼图:
图 8.10:标记卡窗格
-
将类别放置到颜色架上,将销售额放置到大小架上。
-
为完成可视化操作,右键单击纬度(生成)在行架上的第二个实例,并选择双轴:
图 8.11:饼图地图
您能在可视化中看到问题吗?应该很快就能看到两个问题:
-
首先,较小的饼图很难看清。单击大小图例的下拉菜单并选择编辑大小可能部分解决这个问题,但如罗德岛等较小州的饼图仍然会有问题。
-
其次,许多州即使销售金额差异较大,背景仍然是相同的浅灰色。
以下方法将解决这些问题,同时添加额外的功能。
饼图与甜甜圈图——超越基础
以下是创建具有饼图和甜甜圈图的瓦片网格地图的步骤。通过结合不同的方法,我们将能够在不让视图过载的情况下一次性显示更多信息:
-
在与本章相关的工作簿中,导航到名为
Altered Pie Map
的工作表并选择Superstore
数据源。 -
创建以下计算字段:
名称 代码 类别州销售额
{FIXED State, Category: SUM(Sales)}
|
州最大值
{FIXED State : MAX([Category State Sales])}
|
每个州的最佳销售类别
MAX(If [State Max] = [Category State Sales] then Category END)
|
-
我们需要那前两个细节级别(LOD)计算和最后一个计算来显示每个类别的销售额,同时显示每个州的最佳销售类别。
-
在标记卡中,将标记类型设置为饼图。
-
在数据窗格中,选择州数据源。
-
单击数据窗格中州旁的链条图标,将州用作混合字段:
图 8.12:链接维度
-
将列拖动到列架,将行拖动到行架。
-
从Superstore数据源中,将类别放置到颜色架上,将销售额放置到角度架上。
-
将州放置在标记卡中的详情上。
-
点击大小架并根据需要调整大小。
-
此时,你应该能看到由饼图组成的大致美国地图。接下来,我们将通过将饼图变成甜甜圈图来进一步增强图形:
图 8.13:地图
-
返回到州数据源,在行架中再放置一个行实例。
-
在标记卡中,选择行 (2),并将视图类型更改为圆形。
-
从超市数据集中,将每个州的畅销类别放置到颜色架中:
图 8.14:地图 II
-
将销售额放置到标签架中。右键点击你刚刚放置在标签架中的销售额实例,并选择格式。在格式窗口中进行以下调整:
- 将数字格式设置为货币(自定义),小数位数为0,并将显示单位设置为千(K):
图 8.15:格式调整
- 将对齐方式设置为居中,如下图所示,以便数字位于圆圈的正中:
图 8.16:对齐方式
-
在行架中,右键点击第二个行实例,选择双轴。
-
右键点击某个行坐标轴实例,选择同步坐标轴。
-
在标记卡的行 (2) 实例中,确保大小大于行实例的大小,以便将饼图显示为外环。
-
在行 (2) 和行实例的标记卡中,点击颜色架并选择编辑颜色。根据需要调整颜色设置,使得覆盖圆圈(甜甜圈的空心部分)的颜色能够与底下的颜色区分开来,同时仍然能识别出哪种类别卖得最好。我选择了以下设置:
图 8.17:颜色选择
-
同样,在颜色架中,将边框设置为所需颜色。我使用的是白色。我还将标签的颜色设置为白色。
-
右键点击每个坐标轴,取消选择显示标题。选择格式 | 线条,并将网格线设置为无。根据需要进行其他格式调整:
图 8.18:平铺网格图
- 将数字格式设置为货币(自定义),小数位数为0,并将显示单位设置为千(K):
初看之下,这种可视化可能显得有些奇特。它被称为平铺网格图,尽管它在数据可视化领域相对较新,但已经开始在诸如 NPR 等媒体平台上得到应用。在合适的场合下,平铺网格图可以带来一些优势。让我们考虑一下前面练习中给我们带来的几个优势。
首先,网格布局结合对数销售额计算字段立即创建了一个显而易见的美国地图,同时确保各种饼图的大小从最大到最小变化适度。因此,每个饼图的每一块切片都能够合理地展示;例如,哥伦比亚特区的销售额与加利福尼亚州的销售额一样容易被看到。
其次,最终用户可以通过内圆的颜色(即甜甜圈的空洞)清楚地看到每个州的畅销类别。这是通过 LOD 计算实现的。感谢 LOD,我们能够将畅销类别与其他两个类别区分开来。由于这三类都位于同一列,因此需要使用 LOD 计算。有关 LOD 计算的更多细节,请参阅第七章,深入了解细节级别计算。结果是一个信息密集型的可视化,它以实用、直观的方式使用饼图。
本节展示了从不同角度在同一可视化中展示数据的一些更具创意的方法。接下来,我们将继续讨论另一种高级可视化——帕累托图。
帕累托图
在 19 世纪末,一位意大利经济学家维尔弗雷多·帕累托观察到,意大利 80%的土地由 20%的人拥有。环顾四周,他发现这个数学现象出现在许多意想不到的地方。例如,他注意到他花园里 80%的豌豆是从 20%的豌豆荚里生产出来的。因此,80/20 法则已进入流行语境。你可以利用这一原则通过强调最关键的元素或焦点来创建清晰的视觉层次结构。你也可以将其作为优先排序的工具——你的 20%最重要的任务、数据集和数据质量问题是什么?先处理这些。通过优先排序,你可以集中注意力,确保有效的沟通。但这一切需要一本完整的书来讲解。让我们先专注于如何在 Tableau 中可视化 80/20 现象。在以下练习中,我们将讨论如何构建基本的帕累托图,然后如何扩展该图使其更有用。
使用帕累托图
当然,并非所有数据集都会遵循 80/20 法则。因此,以下练习考虑了一个社区银行的贷款数据,其中 80%的贷款余额并不由 20%的客户持有。然而,帕累托图仍然可以是一个非常有用的分析工具。
请按照以下步骤操作:
-
在与本章相关的工作簿中,导航到名为
Pareto - Basic
的工作表,并选择Bank data source
。 -
在数据面板中,将账户号更改为维度。将账户号放置在列架上,将当前贷款余额放置在行架上。
-
点击适应下拉菜单并选择整个视图。
-
右键点击账户号字段,并选择排序。将排序依据设置为字段,排序顺序设置为降序,字段名称设置为当前贷款余额,聚合方式设置为求和:
图 8.19:排序
- 右键点击SUM(当前贷款余额) Δ,位于行架上,然后选择添加表计算。选择如下截图所示的设置:
图 8.20:表计算 I
-
将账户号实例拖动到详细信息架上。
-
点击颜色架,并将边框设置为无。
-
右键点击位于列架上的账户号实例,并选择度量 | 计数(唯一)。注意,单条垂直线会显示:
图 8.21:帕累托显示单个垂直线
- 再次右键点击位于列架上的CNTD(账户号)实例,并选择添加表格计算。按以下截图配置设置:
图 8.22:表格计算 II
-
点击屏幕左上角的分析选项卡,并执行以下两个步骤:
-
将常量线拖动到表格 | SUM(当前贷款余额) Δ
-
在弹出的对话框中,选择常量并将值设置为0.8,如下截图所示:
图 8.23:常量线
-
-
重复前面的步骤,但有以下不同:
-
将常量线拖动到表格 | CNTD(账户号)
-
在弹出的对话框中,选择常量并将值设置为0.2
-
-
将当前贷款余额拖动到行架上。将其放置在行架上当前的SUM(当前贷款余额) Δ右侧。注意,轴受一个余额比其他贷款大得多的单笔贷款的影响:
图 8.24:帕累托基本
-
右键点击当前贷款余额轴并选择编辑轴。在弹出的对话框中,将刻度设置为对数,然后关闭窗口。这解决了单笔大额贷款影响轴的问题,从而使得其他贷款的视图变得模糊。
-
在标记卡中,选择第二个SUM(当前贷款余额) Δ实例,并将标记类型设置为条形图:
图 8.25:选择条形图
-
右键点击SUM(当前贷款余额) Δ在行架上的位置,并选择双轴。
-
右键点击% 总计运行中的当前贷款余额轴并选择将标记卡移到前面。根据需要更改颜色、工具提示和格式:
图 8.26:帕累托图
该可视化图表有一些值得注意的积极方面。首先,最终用户可以通过观察图表的两个部分及坐标轴上的数值,迅速获得初步理解。例如,左侧的y轴显示了每笔当前贷款相对于总贷款余额的百分比,以累计和的方式呈现,最终达到 100%。右侧的y轴则显示相同贷款的金额。x轴则展示了独特的账户 ID 或编号。我们可以看到,在这个例子中,20%的账户持有几乎 60%的贷款,约 50%的账户持有 80%的贷款。这些是红色线和两条参考线的交点。此外,最终用户可以将光标悬停在曲线的任何部分,查看相应的提示框。
然而,这个可视化图表还有提升空间。例如,给两条参考线添加参数,重新措辞坐标轴标签以减少冗长,是增加附加值的快速方法。因此,在下一个练习中,我们将看看是否能够在当前的可视化基础上进行一些扩展。
帕累托图表 - 超越基础
在前一个练习中,我们需要更加仔细地查看,以便找出每个账户占有多少贷款。接下来的步骤将向我们展示如何创建一个参数,帮助我们找出交点:
-
复制前一个练习中的工作表,并将复制的工作表命名为帕累托 - 改进版。
-
通过选择参考线并将其拖出工作表,移除两条参考线。
-
将SUM(当前贷款余额) Δ(表格计算)从行架拖动到数据面板。当提示时,将该字段命名为余额的累计百分比。
-
创建并显示一个参数,设置如下。该参数允许我们设置 0 到 100%之间的任意值,并且我们能够在帕累托可视化图中看到该区域的颜色:
图 8.27:编辑参数
-
右键单击新创建的参数,选择显示参数。
-
创建以下计算字段:
名称 代码 贷款的累计百分比
RUNNING_SUM(COUNTD([Account #]) / TOTAL(COUNTD([Account #])))
|
帕累托分割
IF [Running % of Balance] < [% of Balance] THEN "Makes up X% of Balance" ELSE "Makes up rest of Balance" END
|
帕累托分割(标签)
IF LOOKUP([Pareto Split], -1) != LOOKUP([Pareto Split], 0) THEN MID(STR([Running % of Loans] * 100), 1, 5) + "% of loans make up " +MID(STR([% of Balance] * 100), 1, 5) +"% of balance" END
|
-
对帕累托图表上选定区域的着色配置需要额外的关注;因此,我们创建了三个计算。通过这些计算,我们可以更改可视化图的部分颜色,并添加一些解释文本和标签。
-
选择Marks卡片中的全部部分。
-
将帕累托分割拖动到详细信息架上。点击Marks卡片中帕累托分割右侧下拉菜单,选择颜色:
图 8.28:帕累托分割到颜色
-
选择Marks卡片中的余额的累计百分比 Δ部分,将标记类型设置为线。
-
将Pareto Split (label)拖动到标签架上。请注意,预期的标签没有显示:
图 8.29:没有标签的帕累托图
-
为了解决这个问题,首先点击标签架,并选择允许标签与其他标记重叠。
-
然后,右键点击Pareto Split (label),在标记卡片上选择按账号#计算。现在你会看到标签:
图 8.30:带标签的帕累托图
-
点击屏幕左上角的分析选项卡,执行以下两个步骤:
-
将参考线拖动到表格 | Δ余额的运行百分比:
图 8.31:参考线
-
在弹出的对话框中,从值下拉菜单中选择余额百分比,并将标签设置为无:
图 8.32:参考线 II
- 根据需要更改颜色、工具提示和格式:
图 8.33:改进后的帕累托图
-
如你在截图中看到的,最终用户现在有一个单一的参数滑块(位于右上角),它可以移动图表上的水平参考线。当最终用户移动参考线时,文本会更新,显示贷款和余额百分比。颜色也会更新,随着用户调整参数,垂直显示正在考虑的贷款百分比。我们通过创建计算字段Pareto Split
和Pareto Split (Label)
,在视图数据和参数的结合下进行计算,从而实现了这一点。
下一节将讨论一个非常强大且仍然很少使用的功能,它将使你的仪表板提升到一个新的水平!想象一下,在 Tableau 中查看街景,房屋上方悬停时,你将能够看到租赁/购买价格、面积以及可能的其他特征。你还无法想象在 Tableau 中如何实现这一点?好吧,继续阅读!在下一节中,我们将讨论各种地图、图像,甚至像国际象棋和飞镖这样的游戏示例。
自定义背景图像
Tableau 中的自定义背景图像开启了一个充满潜力的世界。想象一下,能够可视化任何空间的能力。这个可能性涵盖了体育、医疗保健、工程、建筑、室内设计等诸多领域。尽管有如此丰富的潜力,我认为 Tableau 中的背景图像仍然未被充分利用。为什么?部分原因是生成可以与背景图像一起使用的数据集的难度。
就像之前讨论的瓦片网格地图一样,背景图像需要网格布局来定位 x 和 y 坐标。在接下来的部分,我们将介绍如何使用 Tableau 创建一个可以叠加在图像上的网格,立即识别与 x 和 y 坐标相关的位置,并相对较快地生成可以供 Tableau 用于可视化的数据集。
创建自定义多边形
Tableau 本身提供的地理区域多边形包括国家、州/省、县和邮政编码。这意味着,举例来说,可以轻松为世界各国创建填充地图。只需复制一份国家列表并粘贴到 Tableau 中。接着,在 Tableau 中将视图类型设置为填充地图,并将国家列表放置在详细信息架上。Tableau 会自动为每个国家绘制多边形。
此外,可能会出现特殊的映射需求,需要为通常不在地图上显示的区域绘制多边形。例如,一个组织可能会定义销售区域,这些区域的边界不符合常规地图的标准。最后,可能会有自定义图像的映射需求。Tableau 用户可以将篮球场或足球场的图片导入到 Tableau 中,并绘制多边形来表示场地的特定部分。对于这些 Tableau 没有原生提供多边形的情况,必须创建自定义多边形,才能为每个示例创建填充地图。
绘制 Null Island 周围的方形区域
在本节中,我们将从基础开始,绘制一个简单的方形,围绕位于本初子午线和赤道交点的神秘 Null Island。
我们将进入一个更复杂的示例,涉及为德克萨斯州的每个城市绘制多边形。Tableau 提供了一个选项,允许作者在默认位置显示数据,用于处理未知位置。选择此选项后,Tableau 会将所有未知位置的纬度和经度设置为 0(零),从而在世界地图上创建一个位于非洲西海岸 1600 公里处的符号。Tableau 开发者亲切地称这个区域为 Null Island。
Null Island 甚至有自己的 YouTube 视频:youtu.be/bjvIpI-1w84
。
在这个练习中,我们将围绕 Null Island 绘制一个方形区域:
- 在 Excel 中重新创建以下数据集:
A | B | C | |
---|---|---|---|
1 | 点 | 纬度 | 经度 |
2 | 0 | -1 | -1 |
3 | 1 | -1 | 1 |
4 | 2 | 1 | 1 |
5 | 3 | 1 | -1 |
6 | 4 | -1 | -1 |
- 将数据集复制并粘贴到 Tableau 中。这样,一个名为
Clipboard_...
的新数据源将会出现:
图 8.34:Null Island 坐标
-
从工作表中删除所有字段。
-
将 点 转换为维度。这可以通过右键点击 点 并选择 转换为维度,或者将其拖动到 数据 面板中的维度部分来完成。
-
双击 纬度 和 经度。顺序不重要;Tableau 会自动将 经度 放到 列 货架上,将 纬度 放到 行 货架上。
-
选择 地图 | 背景地图 | 街道。你可能需要稍微缩小一下视图,才能看到陆地边界:
图 8.35:定位空岛
- 将视图类型更改为 线条,并将 点 拖动到 路径 货架上。你应该能看到以下结果:
图 8.36:定位空岛 II
-
返回你的 Excel 文件,交换包含第 1 点和第 2 点数据的行,然后再次将数据复制到 Tableau 中。
-
跟随 步骤 2–7 并观察结果图像:
图 8.37:错误的标绘空岛
这个有趣但错误的图像是由于点的顺序不正确所致。作为经验法则,在确定点的顺序时,选择一个如果你要在纸上物理绘制多边形时会合适的顺序。如果你不能按给定的点顺序在纸上绘制出所需的多边形,那么 Tableau 也做不到。
你可能会发现,在 Tableau 中完成这个练习相对简单。挑战在于确保数据正确,特别是多边形的点。一个有用(且免费的)工具,可以用来生成多边形数据,位于 powertoolsfortableau.com/tools/drawing-tool
。这是由 InterWorks 创建的许多工具之一,旨在帮助解决常见的 Tableau 挑战。
我们接下来将使用它来展示我们图书馆中哪些书籍是可用的,哪些是不可用的。
使用多边形创建一个互动书架
我自己不太擅长绘画,但我一直很喜欢在 Tableau Public 上看到的那些精美的多边形背景,形状各异,能够让 Tableau 与它们互动,按某个度量来上色,或者将某个动作链接到特定区域。比如你知道吗,五大洲的形状可以被重新塑造,做成一只鸡的形状?嗯,Niccolo Cirone 就是用多边形做了一个 Tableau 仪表盘:www.theinformationlab.co.uk/2016/06/01/polygons-people-polygon-ize-image-tableau/
。
你也想制作炫酷的仪表板,但你的绘图技能平平,就像我一样吗?别担心!这一部分将为你提供实现这一目标的工具。InterWorks 开发了一款类似按数字绘画的工具——这款应用非常适合构建多边形,而无需自己进行过多的绘制。你可以在这里找到它:cbistudio.interworks.com
。你需要做的就是找到一张图片,上传到工具中,并开始沿着线条绘制。
对于这个练习,我在互联网上搜索了一张书架的图片。你也可以做同样的事情,找到一张图片用于本次练习,或者下载我使用的这张图片,点击这里下载:github.com/PacktPublishing/Mastering-Tableau-2023-Fourth-Edition/Chapter08/bookshelf.png
:
- 打开 InterWorks 提供的免费绘图工具,选择图片选项:
图 8.38:CBI Studio
-
上传你的图片,并在我正在创建部分选择多边形。
-
现在从一本书的边缘开始点击。一个橙色的点会出现。然后移动到同一本书的下一个边缘,再次点击。书的这条边缘上会绘制一条线,坐标会自动显示在右侧列表中:
图 8.39:绘图工具
- 书籍的最后一个点应该位于第一个点的顶部(第一个点比其他点大)。再次点击第一个点将完成第一个多边形,完成的多边形会显示为绿色:
图 8.40:完成多边形
-
你在其他地方设置的下一个点会获得一个不同的形状 ID,因此 Tableau 后续可以将其区分为一个不同的形状。记住,要沿着书的外边缘移动,并避免交叉线条。
-
当你完成书籍轮廓的绘制后,下载数据为
.csv
格式,并保存该文件,用作 Tableau 的数据源。我是这么做的,另外,我还添加了名称和可用两列。你可以看到,此外,还有唯一的形状 ID、点 ID(即你点击屏幕的顺序)以及作为位置表示的 x 和 y:
图 8.41:Excel
- 接下来,在 Tableau 中加载数据,将X放在列上,将Y放在行上。你能认出书架了吗?我这次练习只用了四本书,因此并非所有书都显示出来:
图 8.42:书店
- 在将图像添加到 Tableau 之前,我们需要获取 Tableau 设置所需的最外层点的坐标。只需回到绘图工具并测量边缘。记录下四个边的X和Y坐标。它们可能不完全是角落位置,但以下值大致可以转换为高度 =
400
和宽度 =648
:
图 8.43:绘图工具
- 回到 Tableau,点击地图 | 背景图像,并选择书店.... 在弹出的窗口中,定义名称并上传你在绘图工具中使用的图像。同时填写X和Y字段的坐标,以表示图像的边缘:
图 8.44:编辑背景图像
- 点击选项并选择始终显示完整图像。然后关闭此窗口:
图 8.45:编辑背景图像选项
- 现在,你的图像应该出现在工作表上,书籍周围有匹配的点:
图 8.46:带点的书架
- 要创建一个围绕线条而不是点的效果,将标记类型更改为线条,并将形状 ID放置在详细信息上,将点 ID放置在路径上:
图 8.47:带线条的书架
-
要创建一个多边形,将标记类型更改为多边形,并将颜色架上的不透明度设置为0%。
-
此外,在将书名和可用性这两个字段放置到详细信息架上后,你还可以添加一个带有书名和可用性的工具提示:
图 8.48:编辑工具提示
- 如果你将鼠标悬停在书籍上,你可以看到书名和可用性:
图 8.49:使用工具提示
多边形最棒的地方在于它们填充了整个区域。在这个例子中,无论你将鼠标悬停在哪里或点击哪里,书籍的完整背面都会被覆盖,因为我们绘制的是一个区域,而不是一个点或某个默认形状。这带来了无尽的选择;想象一下,一个大型图书馆,每本书都是一个多边形,你可以将实时数据连接到多边形数据集,随时获取任何书籍的可用性。除了书籍,你还可以绘制任何东西。我在 Tableau 中最常见的是平面图、超市货架、办公室布局、分割成部分的形状……多边形真的是让你在数据可视化中尽情发挥创造力。
如果你手头没有图像,而你又想绘制一些非常具体的内容到你的仪表板中,可以使用付费或免费的软件,如 Adobe Illustrator Draw、Sketch、Sketsa SVG Editor、Boxy SVG、Gravit Designer、Vecteezy Editor、Vectr、Method Draw、Inkpad、iDesign、Affinity Designer、macSVG、Chartist.js、Plain Pattern、Inkscape 等等。
在继续之前,让我们将仪表板再推进一步:
-
右键点击名称 | 别名...
-
按照这里所示的方式更改书籍并点击确定:
图 8.50:选择另一本书
-
移除
书店
工作表的X和Y轴。 -
打开一个仪表板标签并命名为书店:
图 8.51:URL
-
将
The Bookstore
工作表拖到仪表板的上半部分,将网页对象拖到下半部分。在 URL 弹出框中输入:en.wikipedia.org/wiki/
。 -
选择网页对象并点击箭头;选择添加 URL 操作…
图 8.52:添加 URL 操作…
- 在操作窗口中,通过从箭头下拉框中选择此字段,添加名称到 URL:
图 8.53:描述过滤器
- 点击确定,然后选择不同的书籍,查看仪表板中的 Wikipedia 条目变化:
图 8.54:Wikipedia
我相信你现在有很多想法想用多边形做些什么。或许你想分析一盘棋局?我们接下来就做这个!
在 Tableau 中分析棋局
在这个练习中,我们将使用 Inkscape。但与其在某个工具中绘制某物,将其转换为多边形,并加载到 Tableau 中,我们将在 Tableau 中创建 SVG 文件的代码,加载到 Inkscape 中查看是否成功,然后将其转换为多边形,再将转换后的版本带有 x 和 y 坐标的数据加载回 Tableau,用于分析一盘棋局。通过自己创建 SVG 文件,你将能够识别 Tableau 所需的X和Y坐标,因此你将始终能够转换 SVG 文件。
在 Tableau 中创建 SVG 文件
在本节中,我们将使用 Tableau 生成构建 SVG 文件所需的 XML,这个文件可以用开源的矢量图形工具 Inkscape 打开,Inkscape 是免费的。请访问 inkscape.org 下载最新版本。我们还需要 Chessboard.png
图像,图像可以在 Packt 的 GitHub 页面找到:github.com/PacktPublishing/Mastering-Tableau-2023-Fourth-Edition/Chapter08/Chessboard.png
。请也下载此文件。
通常,多边形在非线性图形中显示出更强大的作用。然而,在此案例中,我们的棋盘是一个很好的示例,因为我们将自己创建 Tableau 使用的位置——创建一个正方形比创建一个复杂形状更容易,因为我们可以使用增量。请注意,以下示例中使用了一个包含 10 行 10 列的网格,这当然会生成一个 100 个单元格的网格。在 Inkscape 中,这个网格的表现是令人满意的。然而,如果需要更大的单元格数量,可能需要像 Adobe Illustrator 这样的专业图形工具。
创建网格
以下练习具有多个目的。第一个目的是展示如何使用 Tableau 创建网格。本章提供了再次使用数据搭建框架的机会,数据搭建框架在第四章《学习连接、混合与数据结构》中有所讨论。不同之处在于,在那一章中,使用了日期来进行框架搭建,而在以下部分中,则使用了分箱(bins)。此外,本练习需要进行许多表计算,这些计算有助于巩固在第五章《介绍表计算》中学到的知识。最后,本练习利用了数据密集化,这在第六章《利用 OData、数据密集化、大数据和 Google BigQuery》中有讨论。
要开始操作,请执行以下步骤:
-
打开一个新的 Tableau 工作簿,并将第一个工作表命名为Header。
-
使用 Excel 或文本编辑器创建一个记录数据集。以下的两行数据表表示记录数据集的完整内容:
图 8.55:Excel
-
将 Tableau 连接到记录数据集:
-
为了方便起见,可以考虑使用Ctrl + C 复制数据集,并使用 Ctrl + V 直接粘贴到 Tableau 中。
-
Tableau 很可能将记录视为度量。将记录拖到数据窗格的维度部分。
-
-
创建两个参数。一个命名为
Overall Pixel Count
,另一个命名为Rows Down/Columns Across
。两个参数的设置如下:-
数据类型:整数
-
允许值:所有
-
-
显示两个参数。将Rows Down/Columns Across 设置为
10
,并将Overall Pixel Count 设置为1,000
:
图 8.56:显示参数
-
创建一个名为
Concatenate Header
的计算字段,并使用以下代码:'<?xml version="1.0" encoding="utf-8"?><svg version="1.1" id="Squares" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 ' + STR( [Overall Pixel Count] ) + " " + STR([Overall Pixel Count])+ '" style="enable-background:new 0 0 '+ STR([Overall Pixel Count]) + ' ' + STR([Overall Pixel Count]) + ';" xml:space="preserve"> <style type="text/css"> .st0{fill:none;stroke:#000000;stroke-miterlimit:10;} </style>'
请注意,在计算字段对话框中输入换行符可能会导致从 Tableau 中提取结果时出现困难。换句话说,删除所有换行符。
-
现在,我们已经创建了一个框架或模板,它将帮助我们创建多个位置,以便在 Tableau 中绘制网格。
-
将新创建的计算字段放置在文本架上。
-
在工具栏中选择适应整个视图来查看结果;你可以看到参数填充了STR([Overall Pixel Count]) 来自 Concatenate Header:
图 8.57:Concatenate Header
-
创建一个新工作表,命名为位置代码。
-
创建以下计算字段:
Name Code Rows Down/Columns Across
[Parameters].[Rows Down/Columns Across]
|
Which Column?
LAST()+1
|
Which Row?
INDEX()
|
Grid Size
[Overall Pixel Count]/LOOKUP([Which Column?],FIRST())
|
X
[Overall Pixel Count] - ([Grid Size] * ([Which Row?]))
|
Y
[Overall Pixel Count] - ([Grid Size] * ([Which Column?]-1))
|
Count
If [Records] = 1 THEN 1 ELSE [Rows Down/Columns Across] END
|
Decicount
If [Records] = 1 THEN 1 ELSE [Rows Down/Columns Across] END
|
Location Codes
Index()
|
Concatenate Locations
'<text transform="matrix(1 0 0 1 ' + STR([X]) + " " + STR([Y]) +')">' + STR( [Location Codes] ) + '</text>'
|
-
创建的计算字段将在接下来的步骤中用于创建一个值表,类似于我们在绘图工具中生成的值表。只不过现在我们将自己完成这一步,并使用 SVG 代码代替经度和纬度值。
-
右键点击Count并选择创建 | 分箱。在弹出的对话框中,将分箱大小设置为1:
图 8.58: 计数区间
- 右键点击十进制计数并选择创建 | 区间。在弹出的对话框中,将区间大小设置为1:
图 8.59: 计数区间 II
-
将计数(区间)、十进制计数(区间)、位置代码、X和Y放置在行架上。确保按照列出的顺序放置这些字段。
-
如果你的字段是绿色的(表示连续),右键点击每个字段并将其设置为离散。然后:
图 8.60: 位置代码工作表
-
将连接位置放置在文本架上。
-
右键点击刚刚放置在文本架上的连接位置实例并选择编辑表格计算。
-
在弹出的对话框顶部,可以看到有四个选项在嵌套计算下:网格大小、哪个列?、哪个行?和位置代码。为每个选项设置使用计算定义如下:
-
嵌套计算: 网格大小 > 使用计算: 表格(向下)
-
嵌套计算: 哪个列? > 使用计算:特定维度: 十进制计数(区间) > 将此维度移至顶部
-
嵌套计算: 哪个行? > 使用计算:特定维度: 计数(区间) > 将此维度移至顶部
-
嵌套计算: 位置代码 > 使用计算: 表格(向下)
-
-
在工具栏中选择适应宽度以查看结果;你可以看到多个行已经被创建。这些行稍后将用于绘制网格:
图 8.61: 适应宽度
-
现在,创建一个名为Lines的新工作表。
-
创建以下计算字段:
名称 使用计算设置 H Then V
Index()
|
HLine
Last()
|
VLine
Index()-1
|
X1
IF [H Then V] = 1 THEN 0 ELSE [Overall Pixel Count] - ([Grid Size] * ([VLine])) END
|
Y1
IF [H Then V] = 2 THEN 0 ELSE [Overall Pixel Count] - ([Grid Size] * ([VLine])) END
|
X2
IF [H Then V] = 1 THEN [Overall Pixel Count] ELSE [Overall Pixel Count] - ([Grid Size] * ([VLine])) END
|
Y2
IF [H Then V] = 2 THEN [Overall Pixel Count] ELSE [Overall Pixel Count] - ([Grid Size] * ([VLine])) END
|
-
接下来,将以下字段按顺序放置在行架上:计数(区间)、十进制计数(区间)、H Then V、HLine、VLine、网格大小、哪个列?、X1, Y1、X2和Y2。请注意,每个字段应设置为离散型。
-
右键点击计数(区间)和十进制计数(区间),并设置每个字段为显示缺失值。
-
右键点击行架上剩余的每个字段并选择编辑表格计算。根据下表设置每个字段的使用计算定义:
名称 | 嵌套计算 | 使用设置进行计算 |
---|---|---|
H Then V |
N/A |
Count (bin)
|
HLine |
N/A |
---|
Count (bin)
|
VLine |
N/A |
---|
Decicount (bin)
|
网格大小 |
网格大小 |
---|
Table (Down)
|
网格大小 |
哪个列? |
---|
Decicount (bin)
|
X1, Y1, X2, Y2 |
H Then V |
---|
Count (bin)
|
X1, Y1, X2, Y2 |
网格大小 |
---|
Count (bin)
|
X1, Y1, X2, Y2 |
选择列? |
---|
Count (bin)
|
X1, Y1, X2, Y2 |
VLine |
---|
Decicount (bin)
|
- 请注意,一些字段包含嵌套表计算。在这种情况下,表计算对话框的顶部将包含一个额外的选项,名为嵌套计算:
图 8.62:嵌套计算
-
X1、X2、Y1和Y2需要为四个嵌套计算进行配置。首先打开X1的表格计算,然后从嵌套计算下拉菜单中选择H Then V,并将计算方式设置为计数(分箱)。然后,在同一窗口中,从下拉菜单中选择网格大小,并输入相应的计算方式设置。设置好所有四个下拉菜单后,继续进行X2并做相同的设置。
-
过滤H Then V以仅显示1和2。
-
创建一个名为
Concatenate Lines
的计算字段,代码如下:'<line class="st0" x1="' + STR([X1]) + '" y1="' + STR([Y1]) + '" x2="' + STR( [X2] ) + '" y2="' + STR([Y2]) + '"/>'
-
此计算将通过包括X1、X2、Y1和Y2字段创建一个新字符串。通过这样做,我们将一行代码乘以所需的行数,每行包含一个特定的X1、X2、Y1和Y2组合。
-
将Concatenate Lines放置在文本货架上。您的工作表应如下所示:
图 8.63:连接行
-
导出刚刚创建的三个工作表的代码。
从三个工作表导出代码可能会比较棘手,因为 Tableau 可能会尝试为字符串值输入额外的引号。我发现以下方法效果最好:
-
在计数(分箱)行中选择1。
-
按Ctrl + A(Mac 上为Command + A)选择工作表的所有内容。
-
将光标悬停在视图中选定的文本上,停留片刻,直到工具提示命令按钮出现。
-
在工具提示的右侧选择查看数据图标。
-
在结果的查看数据对话框中,选择导出所有。
-
使用与每个工作表相同的名称保存 CSV 文件;例如,从
Header
工作表导出的数据将命名为Header.csv
。 -
对其余工作表Header和Location Codes重复这些步骤。
-
-
打开您最喜欢的文本编辑器实例,并将其保存为
Grid and LocationCodes.svg
。 -
从先前导出并保存的
Header.csv
中复制数据,并将其粘贴到Grid and LocationCodes.svg
中。确保不要包含标题信息;仅包括 XML 代码。例如,在下图中,不要复制第 1 行,只复制第 2 行:
图 8.64:Excel
- 使用 Excel,从
Location.csv
中复制所需数据,并将其粘贴到Grid and LocationCodes.svg
中。所需的数据仅包括标记为Concatenate Locations
的列。不要包括其他列或标题。仅包括 XML 代码。例如,在下图中,我们只复制F列:
图 8.65:Excel II
-
使用 Excel,将所需的数据从
Lines.csv
复制并粘贴到Grid and LocationCodes.svg
中。同样,所需的数据仅包括标有Concatenate Lines
的列。不要包括其他列或标题,仅包含 XML 代码。 -
最后,完成 SVG 文件,输入
</svg>
结束标签。完整的代码已经为您提供,位于生成的 SVG 代码标签中:
图 8.66:完整代码
- 现在,在 Inkscape 中打开 SVG 文件 (
inkscape.org/
) 并观察网格:
图 8.67:Inkscape II
如果由于某种原因您的代码没有创建网格,或者您想使用我创建的版本,您可以在以下 GitHub 页面找到 SVG 文件及其他所有数据集:github.com/PacktPublishing/Mastering-Tableau-2023-Fourth-Edition/blob/main/Chapter08/GridandLocationCodes.svg
。
在下一个练习中,我们将展示如何在 Tableau 中使用网格作为多边形数据源。
使用网格生成数据集
熟练的国际象棋选手大约在 40 步内完成一盘棋。在国际象棋比赛中,每局比赛的数据通常都会被捕获,这为数据可视化提供了机会。在本练习中,我们将使用一局棋的数据显示每个棋盘格子的占用频率:
-
在与本章关联的工作簿中,导航到名为
棋盘
的工作表。 -
如果您还没有下载
Chessboard.png
图片,可以从本书的 GitHub 仓库下载。 -
打开上一个练习中创建的 SVG 文件,在 Inkscape 中查看。
如果您没有完成之前的练习,您可以从本章关联的解决方案工作簿中复制位于仪表板上的 XML 代码,标题为生成的 SVG 代码。将该代码粘贴到文本编辑器中并以 SVG 扩展名保存,然后用 Inkscape 打开该文件。
-
在Inkscape中,按Ctrl + A(Mac 上为Command + A)选择全部。使用Ctrl + G(Mac 上为Command + G)将选区分组。
-
在Inkscape菜单中,选择图层 | 图层和对象。快捷键为Shift + Ctrl + L(Mac 上为Shift + Command + L)。
-
在屏幕右侧显示的图层面板中,按+图标创建一个图层。将该图层命名为
棋盘
。然后,创建另一个名为网格
的图层:
图 8.68:图层
-
单击视图中的任何一行或数字。右键单击该行或数字,并选择移动到图层。选择网格图层。
-
选择文件 | 导入并选择
Chessboard.png
图片。
图 8.69:图像导入
- 确保将图像放置在棋盘图层上,以免遮挡位置代码编号。将棋盘图像放置在使位置代码81正好位于棋盘左上角的方格上。由于棋盘只有 64 个方格,它无法覆盖网格所提供的全部 100 个方格:
图 8.70:棋盘
此时,您可以根据每个位置的占用频率生成数据集。例如,您可能会注意到在一场棋局中,第 81 号位置被占用 40 次,这可能意味着玩家从未移动过那个车。然而,在另一场棋局中,该位置可能只被占用 10 次,这可能表明玩家在游戏早期进行了易位。叠加棋局和方格文件的目的是为了识别哪个方格属于棋盘上的哪个区域。
可视化一场棋局
在本练习中,我们将查看从一场棋局生成的数据集,并学习如何根据之前的练习结果进行可视化。以下是步骤:
-
在本章相关的工作簿中,导航到名为
Chessboard
的工作表,并选择Chessboard
数据源。为了继续执行下一步骤,您需要下载与本章相关的资源文件。为此,只需点击以下链接访问本书的 GitHub 仓库:
github.com/PacktPublishing/Mastering-Tableau-2023-Fourth-Edition/tree/main/Chapter08
。 -
右键点击
Chessboard
数据源,选择编辑数据源以查看数据集。 -
在询问数据文件在哪里?的对话框中,定位到本章相关的
Chessboard.xlsx
文件。 -
名为棋盘网格的表格包含每个位置代码及与之关联的X和Y坐标。这个数据集来自本章前面创建的位置代码工作表。名为占用的方格的表格包含位置代码和占用的移动次数字段。棋盘网格和占用的方格通过位置代码进行左连接:
图 8.71:连接
-
在
Chessboard
工作表中,选择地图 | 背景图片 | 棋盘。 -
在结果对话框中,点击添加图像以添加背景图片。
-
如下所示填写编辑背景图片对话框:
图 8.72:棋盘背景图
- 将X、Y(两者作为维度)和位置代码字段分别放置在列、行和详细信息架上,将占用的移动次数字段放置在颜色架上,并选择标记类型为密度:
图 8.73: 国际象棋棋盘背景图 II
-
右击X轴和Y轴,并将两者设置为固定,设置固定起始值为0,固定结束值为875。
-
编辑Y轴并设置为反向。不要反转X轴。
这个最后一步之所以执行,是因为数据已经被结构化,以便反映X和Y坐标设置,这也是大多数图形工具中的默认设置。在这些工具中,左上角是X和Y都等于0的地方。
-
根据需要调整颜色、大小、形状等:
图 8.74: 国际象棋棋盘
在截图中,圆圈越亮,表示这个空间在某个回合中被占用的频率越高。圆圈越暗,表示它被占用的频率越低。将鼠标悬停在某个区域时,会显示该区域的占用次数。
总结一下,我们首先通过创建一个 SVG 文件开始。我们通过按照 SVG 文件标准创建三种不同类型的代码:Header
、Location Codes
和Lines
。然后我们将这三段代码复制到文本编辑器中并保存为 SVG 文件。接着,我们下载了 Inkscape 应用程序并打开了这个 SVG 文件,以查看我们工作的结果——一个 10x10 的方格区域。
我们将一个国际象棋棋盘的图像添加到 Inkscape 中,并对其进行了对齐。现在,我们可以看到每个棋盘上的方格编号与哪些棋盘区域相关联。就像书架示例一样,必须识别形状 ID,也就是棋盘区域 ID。根据棋盘区域 ID,我们能够生成第二个数据集,其中包含每个区域被占用的步数。通过将Board Grid
数据集与Occupied Moves
数据集连接,我们获得了一个使用案例。我们将一个国际象棋棋盘的背景图像添加到 Tableau 中,并在其上绘制了方格,根据这些方格在国际象棋游戏中被占用的次数,进行了上色和大小调整。当然,这些数字是每场游戏特有的,但通过收集多场比赛的数据,我们可以直观地分析国际象棋策略,甚至可能判断谁是更好的玩家。如果你喜欢国际象棋,随时可以试试,比较每场游戏的不同可视化结果,或者看看你是否总是得出相同的模式,看看这是否也适用于你的对手。
说到游戏,在下一个练习中,我们将可视化一个飞镖板。这个练习将比国际象棋的练习更短。请跟随步骤,了解更多关于多边形的知识。
在背景图像上创建多边形
在可视化的特定点上使用形状对于前面的练习来说是足够的,但有时使用多边形来勾画形状可能更有利。在这一部分中,我们将使用多边形在背景图像上进行操作,与书籍中的做法不同,我们将填充这些区域,以便不再需要背景图像(至少不需要那么多了)。
以下是所需的步骤:
-
在与本章相关的工作簿中,导航到名为
Dashboard - Polygon
的工作表,并选择Dartboard_W_Polygon
数据源。如果你在完成之前的练习时还没有这样做,下载 GitHub 上提供的图片。将其解压到你选择的目录中。
-
选择地图 | 背景图片 | Dartboard - Polygon。在背景图片对话框中,选择添加图片。按照下图填写对话框:
图 8.75:飞镖板背景图像
- 创建一个具有以下配置的参数:
图 8.76:参数
-
这个参数将用于在玩家 1:Matthew和玩家 2:David之间切换,或者显示两者的飞镖击中情况。
-
通过右键点击数据窗格底部创建的参数,并选择显示参数控制,来显示之前创建的参数。
-
创建一个名为
Total Hits
的计算字段,代码如下:[David]+[Matthew]
-
然后,创建一个名为
Case
的计算字段,代码如下:CASE [Select Player] WHEN 1 THEN SUM([Matthew]) WHEN 2 THEN SUM([David]) WHEN 3 THEN SUM([Total Hits]) END
-
将标记卡片设置为多边形。
-
检查数据窗格,确保点和形状都是维度(蓝色)。其他字段是度量:
图 8.77:维度和度量
- 将X、Y、点、形状和案例字段放置在相应的架子上:
图 8.78:飞镖板多边形
-
右键点击每个轴并将范围设置为0到650。
-
点击颜色架子并选择编辑颜色。根据需要调整颜色。以下截图展示了一种可能的选择:
图 8.79:自定义分歧
你的最终工作表应如下所示:
图 8.80:最终飞镖板多边形
最终仪表板展示了一个不同颜色的飞镖板。灰色表示该区域在游戏中没有被击中,而颜色越红,表示该区域被击中的频率越高。通过使用该参数,你可以比较 Matthew 和 David 的得分,或者像前面的截图那样显示总击中次数。
你可能注意到,在本练习中多边形的弯曲部分并不完全完美。例如,看看围绕靶心的三环和双环区域;你会看到这些区域并不是 100% 平滑的。这只是使用 Tableau 中笛卡尔网格上的点的本质。也就是说,Tableau 基于网格结构,因此我们绘制的每一条曲线仍然是许多小线段连接网格布局上的点。点越多,点与点之间的线越短,绘制的曲线就越平滑。但如果你跟着书架练习做的话,你会看到,要做到这一点需要付出很多努力。尽管如此,我认为多边形绝对值得一试。这里我们使用了一些有趣的练习,虽然它们可能不会直接对你的日常工作产生价值,但想象一下你在其他程序中设计的一个完美无瑕的着陆页。通过使用多边形,你可以让设计元素变得可点击和互动。
接下来的主题与本章的其他部分略有不同。你听说过 Tableau Exchange 吗?Tableau Exchange 是 Tableau 世界中新加入的一个版本,结合了三种产品:扩展、加速器和连接器。感兴趣吗?请继续阅读下一节!
Tableau Exchange
要访问 Tableau Exchange,请访问此网站:exchange.tableau.com
。
图 8.81:Tableau Exchange
加速器和扩展可以从 Tableau Server 和/或 Tableau Desktop 内部访问。让我们深入了解 Tableau Exchange,看看它能提供什么!
Tableau 扩展
扩展是最早的产品,可以从 Tableau 仪表板上的对象窗格中访问。基本上,扩展允许您直接在 Tableau 中使用第三方工具。某些精选的扩展可在 extensiongallery.tableau.com
获取,并且这个列表还在不断增长。
请注意,Tableau 不提供对扩展的支持或保证/安全措施。这些 API 由外部方构建,因此应当视为第三方工具。如果您打算在工作中使用这些扩展,请先与 IT 安全团队确认。
我们来看看来自 Infotopics 的一个例子——一个 Sankey 图表扩展。
使用扩展
在关联的工作簿中,创建一个名为 展示更多
的新工作表,并选择 Coffee Chain
数据集。现在,通过将 类型 添加到 列,将 产品类型 添加到 行,并将 利润 添加到 文本 货架上,重新创建以下工作表布局:
图 8.82:展示更多
我们想在这个工作表中使用 Sankey 图表,它是一种流向图,显示基于流线的大小,某个度量和维度如何流入另一个维度。在此案例中,我们想知道常规类型产品的利润中,来自咖啡、浓缩咖啡、草本茶或茶的部分,以及与无咖啡因类型相关的利润。
假设你已经知道如何使用计算字段构建 Sankey 图表,但这非常耗时。相反,有一个扩展功能可以帮助你完成此任务。以下是使用此扩展功能的步骤,它最终能节省我们在构建 Sankey 图表时所花的时间:
-
在关联的工作簿中,打开一个仪表板标签并命名为
Show me More DB
。 -
将Show me More DB表单拖到仪表板上。现在也将扩展功能对象拖到仪表板上:
图 8.83:扩展功能
- 从 Tableau 2021.1 开始,你将看到以下弹出窗口:
图 8.84:扩展功能库
- 在扩展功能库中搜索Show Me More 2.0扩展。点击它并在下一个屏幕上选择添加到仪表板:
图 8.85:查看更多 2
- 然后,选择开始使用并选择Sankey 图表可视化:
图 8.86:查看更多 II
- 选择 Sankey 图表后,按照以下方式配置变量。如图 8.87中部分显示的那样,还有许多其他选项;你可以随意进行测试:
图 8.87:Sankey 图表设置
- 点击确定按钮,瞧!你就得到了 Sankey 图表:
图 8.88:Sankey 图表
除了这个 Sankey 图表,我强烈建议你查看扩展功能库。这里有许多不同用途的扩展;有些是免费的,有些需要付费,但你也可以自己构建。这绝对值得一看!下一节将专门介绍一个特殊的扩展功能——它是 Tableau 2021.1 版本中最为宣传的新功能,爱因斯坦发现。
加速器
此功能工作在更基础的层面:如何设计、构建和组合一个仪表板。加速器是来自不同领域、具有不同重点的预定义仪表板。目前,已有超过 100 个加速器,支持多种语言,面向不同部门、行业和企业应用。你可以通过点击 Tableau Desktop 欢迎页面或 Tableau Server 上的链接,使用一个加速器仪表板,而不是从头开始:
图 8.89:Tableau 欢迎页面
在图 8.89中,左侧的两个仪表板总是会出现在 Tableau Desktop 的登录页面上,你已经熟悉这些了:Superstore
和 World Indicators
数据集。它们旁边,你可以看到一个带耳机的两个人图标。这就是我加载的第三个加速器仪表板。看看右上方的红框,你可以看到一个名为More Accelerators的超链接;点击它。
假设你想使用金融交易数据和加速器仪表板来启动你的项目。搜索trading:
图 8.90:搜索加速器
通过点击Trading by Tableau仪表板,将会打开一个新的 Tableau 工作簿——其中包含一个完整的交易仪表板,更棒的是,它具有数据映射功能,这意味着你可以在不破坏仪表板布局和预设功能的情况下,替换当前数据为不同的数据。每个加速器仪表板中的描述都包含了数据映射可能或不可能的信息。
当你打开新的仪表板时,你会看到以下弹出窗口:
图 8.91:数据映射器
点击Get Started,将你想要的数据集连接到加速器仪表板。
你可以使用这个数据集作为测试:www.kaggle.com/datasets/georgezakharov/historical-data-on-the-trading-of-cryptocurrencies
。
图 8.92:数据映射器 II
加载完成后,你可以开始逐一映射字段:
图 8.93:数据映射
重要的是要知道,你不必映射所有字段;然而,如果工作簿中的可视化使用了未映射的列,那么这些实例将显示为空值。
映射完成后,你的仪表板已准备好使用!检查一下所有内容是否符合预期,你的工作就完成了!
很棒吧?省时多了;我真的很喜欢 Tableau 中的这个新功能。
连接器
Tableau Exchange 提供的最后一个部分是连接器。在这里,你可以找到连接到 Tableau Desktop 中Connect面板中没有列出的数据库的连接器。
总结一下,Tableau Exchange 是一个平台,你可以在这里找到各种工具来增强数据分析并快速得出有意义的见解。它提供了 Tableau 加速器,这些是由专家创建的预构建仪表板,扩展功能提供了 Tableau 本身没有的功能,还有连接器,可以让你连接到默认面板中没有列出的数据库。一个真正的、免费的市场,帮助你快速启动 Tableau 的成功。
爱因斯坦发现
我们在前一节讨论了 Tableau 交换功能;然而,还有一个同样超出基础功能的特点也值得关注。但在继续之前,先说一下背景故事。2019 年 8 月,Tableau 被 Salesforce 收购。可能大多数人都知道 Salesforce,甚至在使用它,但对于其他读者来说,Salesforce 是一个云原生的客户关系管理(CRM)工具。除此之外,公司还开发了一个分析模块,允许 Salesforce 用户分析来自 CRM 系统和其他数据源的数据。
将 Salesforce 与 Tableau 连接在 Salesforce 收购之前就已经可以实现,但在 Tableau 2021.1 中的新变化是,Salesforce 的分析功能可以作为扩展和计算字段集成到 Tableau 中。Tableau 社区对此功能非常兴奋,因为它具备了内置的机器学习能力和实时预测功能。这个软件功能被称为 Einstein Discovery。
要使用 Einstein Discovery,你需要一个 Salesforce 许可证,特别是 Salesforce 的分析许可证。许可证的详细信息可以在此查看:www.salesforce.com/editions-pricing/crm-analytics/
。
现在,为了让你了解 Einstein Discovery 能为你做什么,我将带你走过一个假想的用例。在供应链数据仪表板上,你发现运输时间可以改进,但你不知道哪些因素导致了延迟。在这种情况下,你可能决定使用 Einstein Discovery 来进行分析。
首先,你将扩展对象拖到仪表板上,就像我们之前做的Show me More扩展一样。然后选择Einstein Discovery项,此时将打开一个浏览器窗口,要求你登录到 Salesforce。登录后,你可以选择在 Tableau 仪表板上使用的模型。模型(例如,机器学习模型)必须提前在 Salesforce 中准备好。然后,Einstein Discovery 将成为你仪表板的一部分,你的工作表将显示 Salesforce 后台运行的模型输出。在我们的示例中,模型将更容易找到仪表板上与交货时间预测最相关的变量,并推荐你可以采取的行动,以改善发货时间。
你可以在youtu.be/dMWuy6mVE_o
观看描述的用例视频和另一个用例的视频。
或者,你可以在计算字段中直接调用 Salesforce 模型。其工作原理请参见此处:help.tableau.com/current/pro/desktop/en-us/einstein_discovery_predictions.htm
。
如果你想尝试这些新功能,如果你还没有 Salesforce 许可证,仍然有一种方法可以测试新的 Einstein 功能。虽然设置过程较长,但如果你确实想尝试,请查看这个视频以获得帮助:youtu.be/ZReSwXK0reo
。
这些是 Tableau 2021.1 中量身定制的新爱因斯坦功能的基石。详细讨论 Salesforce 平台的功能不在本书的范围之内,但如果你已经部署了 Salesforce,我肯定推荐你设置连接并测试运行一些模型。即使你不使用 Salesforce,许可可能会随时间发生变化,所以希望我们很快就能运行这些模型。暂时不用担心,我们将在第十五章,集成编程语言中讨论机器学习模型的集成。
摘要
我们通过考虑如何调整流行的可视化类型开始了本章。具体来说,我们微调了子弹图,考虑了在映射中使用饼图的完全不同方法,最后调整了帕累托图。接下来,我们将注意力转向了自定义背景图像,我们考虑了如何使用 XML 构建网格以生成 SVG 文件,从而加速为背景图像生成的数据。然后,我们通过在背景图像上构建多边形来完成本章,并快速进入了 Tableau Exchange 的世界。我们讨论了加速器、扩展和连接器,还讨论了 Salesforce 出售的一个独立产品——Einstein Discovery。
本书中无法覆盖所有选项,但由于你现在已经是复制的专家,我为你添加了更多包含其他可视化效果的工作表到解决方案工作簿中,供你玩耍。你会发现包含条形图、堆积条形图、分歧堆积条形图、交叉表、高亮表、离散高亮表、趋势线、面积图、火花图、组合图、双轴图、直方图、箱线图、散点图、填充地图、符号地图、树形图、树条形图、甘特图、KPI 图表、漏斗图、抖动分布、日历图、撞击图、坡度图、水流图、目标图以及条形嵌条图等工作表。务必确保使用最适合你的数据并能为你讲述的故事增值的图表。如果你仍然需要一些帮助来决定合适的可视化技术,我建议你查看 Tableau Public 上发布的以下仪表盘:public.tableau.com/en-us/gallery/visual-vocabulary
。此仪表盘旨在帮助你根据数据类型选择合适的可视化图表。
在下一章中,我们将重点讨论地图功能,了解如何在不离开界面的情况下扩展 Tableau 的原生地图功能,以及如何结合其他技术来扩展 Tableau 的地图功能。
在 Discord 上了解更多
要加入本书的 Discord 社区——在这里你可以分享反馈、向作者提问并了解新版本发布——请扫描下面的二维码:
第九章:使用地图
当我为首次使用 Tableau 的人们举办 Tableau 课程和工作坊时,我发现展示映射功能总是大受欢迎,有时会引发一阵阵赞叹和惊讶。许多人曾多次告诉我,Tableau 的映射功能是他们开始关注并认真考虑 Tableau 产品的关键因素。Tableau 开箱即用的映射功能既强大又灵活。你可能会惊讶于在不离开用户界面的情况下能完成多少任务。但这些开箱即用的功能只是冰山一角。通过正确的指导(我将在本章中提供),你可以超越原生的映射功能,探索那些能大大提升工作簿功能和美学的技巧。
在本章中,我们将讨论以下主题:
-
在不离开 Tableau 的情况下扩展 Tableau 的映射功能
-
创建自定义多边形
-
热力图
-
双轴和地图分层
-
扩展 Tableau 的映射功能与其他技术
-
更换地图
-
自定义地理编码
Tableau 的默认映射功能是一个重要的卖点。无论是城市、地区、国家还是其他地理位置,只需将其放入 Tableau 工作表中,就会生成一张漂亮的地图;如果将像销售这样的度量放到颜色架上,地图的颜色就会根据销售数据发生变化。在接下来的部分,我们将更进一步,通过 Tableau 提供的一些不太明显的功能,来增强这个能力,比如在地图上测量距离和在背景中绘制附加数据(例如天气数据)。
在不离开 Tableau 的情况下扩展 Tableau 的映射功能
在我们的日常生活中,地图可以帮助更好地理解周围的世界。例如,地图通常在网站、电视或印刷媒体中用于展示人口统计信息。在这种情况下,映射需求是静态的,因为即时目标并不需要移动。有些企业只有静态映射需求——例如,零售连锁可能会创建一个可视化图表,其中包括地图,以便更好地理解某个地区的销售业绩。在这种情况下,地点之间的移动不是直接需求。
然而,通常需要使用地图来从 A 点导航到 B 点。这类映射需求更为复杂,因为它不仅包括静态需求(例如,附近有什么餐馆?),还必须提供额外信息,如路线和距离(例如,如何去那个餐馆?)。这些动态映射需求假设需要移动才能满足需求。许多企业需要了解路线和里程,也就是如何从 A 点到 B 点以及涉及的距离。这些动态映射需求可能会有所不同,但大多数需求至少有两个共同点:路线和距离。
在接下来的练习中,我们将考虑澳大利亚的航班路线和相关距离。具体来说,我们将介绍如何从 Tableau 中提取经纬度数据,并结合三角学计算各个点之间的里程。在此过程中,我们将使用数据混合、表计算、地图以及细节级别(LOD)计算,进行一个涉及许多高级功能的综合练习。
请按照以下步骤操作:
-
访问
public.tableau.com/profile/marleen.meier
以查找并下载与本章节相关的工作簿。 -
打开工作簿并转到
Map
工作表。 -
在数据窗格中选择Transit Data,双击City,然后将City从详细信息更改为标签,在标记卡片中。
-
在以下截图中,请注意,麦凯和布里斯班是唯一显示的城市。这个问题取决于你的国家设置,但以下是可能遇到的一个示例。如果你看到了这个问题,请点击右下角的14 个未知:
图 9.1:澳大利亚
注意:如果你在美国,佛罗里达州的墨尔本将会显示。如果你在其他国家,可能会得到不同的结果。
-
选择编辑位置...:
图 9.2:编辑位置…
-
将Country/Region更改为固定 | 澳大利亚:
图 9.3:选择澳大利亚
澳大利亚现在已显示在地图上:
图 9.4:澳大利亚
-
转到
Miles
工作表,将Trip ID和City字段放置到行架上,将Latitude (generated)和Longitude (generated)放置到文本架上,如下图所示:图 9.5:距离
你的屏幕应该看起来像前面的截图。请注意,交叉表非常凌乱。理想情况下,Latitude和Longitude应显示在单独的列中。不幸的是,我们不能这样做,因为尽管它们列在数据窗格的度量部分下,Tableau 并没有将它们视为度量。为了完成练习,我们需要能够从另一个数据源中获取纬度和经度坐标。
-
要做到这一点,首先点击
Map
工作表标签。 -
右键点击可视化并选择查看数据。通过选择每个单元格并点击复制,将结果对话框中摘要标签页的所有数据复制。
-
关闭对话框并按Ctrl + V(Mac 上为Command + V)在 Tableau 中创建一个新的数据集。将生成的数据集(现在名为
Clipboard_[时间戳]
)重命名为Lat
Long
。同时,将工作表命名为Lat``Long
。 -
在
Lat Long
工作表中,将Latitude
(generated)
和Longitude (generated)
重命名为Lat
和Long
。 -
返回到
Miles
工作表,在Transit Data
数据源中创建两个计算字段:一个名为LAT
,包含代码AVG([Lat Long].[Lat])
,另一个名为LONG
,包含代码AVG([Lat Long].[Long])
。 -
从Marks卡上的Text中移除Latitude (generated)和Longitude (generated)。
-
将Measure Names放到Columns架和Filter架上,并选择Lat和Long。同时,将Measure Values放到Text架上。现在,我们可以将纬度和经度视为真正的度量值。
-
创建另外两个计算字段,一个名为
Lookup Lat
,包含代码Lookup(Lat,-1)
,另一个名为Lookup Long
,包含代码Lookup(Long, -1)
。将这两个新创建的计算字段放到Measure Values架上。 -
创建一个名为
Great Circle Distance Formula
的计算字段,包含以下代码:3959 * ACOS ( SIN(RADIANS([Lat])) * SIN(RADIANS([Lookup Lat]))+ COS(RADIANS([Lat])) * COS(RADIANS([Lookup Lat])) * COS(RADIANS([Lookup Long]) - RADIANS([Long])) )
对于公里数,将
3959
更改为6378
。这个数字表示地球的半径,需要将其从英里更新为公里。 -
将新创建的计算字段Great Circle Distance Formula放到Measure Values架上。
-
更改Great Circle Distance Formula的计算方式,使其使用City进行计算,方法是点击字段本身并选择Compute Using: City。
-
相应地调整以下计算:
名称 | 代码 |
---|---|
Lookup Lat |
IFNULL(LOOKUP(Lat,-1), LOOKUP(Lat,1))
|
Lookup Long |
---|
IFNULL(LOOKUP(Long,-1), LOOKUP(Long,1))
|
-
选择
Map
工作表并将Marks类型设置为Line。 -
将Trip ID放到Detail架上。
-
将City拖到Marks卡视图的底部。
-
将Great Circle Distance Formula字段放到Tooltip架上。再次检查它是否仍然设置为Compute Using: City:
![图表
自动生成的描述
图 9.6:澳大利亚距离
-
创建另外两个计算字段,一个名为
Source City
,包含以下代码:{ FIXED [Trip ID]:MIN(IF [Dest/Orig]='Source' THEN City END)}
第二个计算字段应命名为
Destination City
,并包含以下代码:{ FIXED [Trip ID]:MIN(IF [Dest/Orig]='Destination' THEN City END)}
-
使用新创建的计算字段按需格式化。特别注意,在以下截图中,Source City位于Color架上,而Destination City则用于Tooltip架:
![图表自动生成的描述图 9.7:航班总结我们所做的事情,首先,我们将一个数据集添加到 Tableau 中。然后,我们需要从工作簿中复制每个城市的纬度和经度,以创建第二个数据源,我们随后将其作为混合数据源来查找纬度和经度值。通过使用 LOD 计算,我们可以识别源城市和目的城市,最后,利用所谓的大圆公式,我们能够测量城市之间的距离。可视化中每种颜色代表一个起始城市;例如,所有绿色线条表示从珀斯到其他城市的距离。通过将鼠标悬停在某条线段上,可以显示源城市和目的城市,以及以英里(或公里)为单位的距离。如果你想分析运输路线或任何两个点之间的距离,现在你已经知道如何在 Tableau 中可视化这种数据。
图 9.8:美国航班起飞延误
在 图 9.8 中,你可以看到另一个相似的可视化,这绝对值得一看(试着复制它!):www.tableau.com/solutions/workbook/big-data-more-common-now-ever
。
在下一节中,我们将讨论如何利用地图和多边形的结合,进一步扩展我们的 Tableau 工具箱。
创建自定义多边形
Tableau 原生提供多种地理区域的多边形,包括全球机场代码、城市、国家、地区、领土、州、省以及一些邮政编码和二级行政区(县级等效):美国区号、核心统计区域(CBSAs)、大都市统计区域(MSAs)、国会选区和邮政编码。这意味着,例如,可以轻松地为世界各国创建填充地图。只需复制世界各国的列表(Ctrl + C),然后在 Tableau Desktop 中将该列表粘贴(Ctrl + V),同时将鼠标定位在一个空白工作表上。一个新的数据源将添加到右上方的 数据 部分。接下来,将 Tableau 中的 视图 类型设置为 填充地图,并将国家列表放到 详细信息 区域。Tableau 会自动为每个数据点绘制多边形:
图 9.9:原生多边形
对于某些地理类型,Tableau 不会自动提供多边形。这些类型包括电话区号。对于这些地理类型,Tableau 会绘制符号地图,而不是填充地图,如下所示:
图 9.10:填充地图失败
即使选择了填充地图 标记 类型,Tableau 也无法填充地图,因为这些区域的轮廓对 Tableau 来说是未知的。此外,可能会出现需要为通常不包含在地图上的区域绘制多边形的特殊映射需求。例如,一个组织可能会定义不遵循常规地图边界的销售区域。或者,Tableau 作者可能会将篮球场或足球场的图像导入 Tableau,并绘制多边形来表示场地的特定部分。另一种替代方案是,我们在 第八章《超越基础》中更详细地讨论过的,可以是为商店中的书架制作地图。
除了自己绘制多边形外,还有一些文件类型支持绘制多边形。.shp
就是其中一种。在接下来的练习中,我们将使用这样的文件并为德克萨斯州创建多边形。
德克萨斯州的多边形
通过处理上述 .shp
文件类型的示例,Tableau 可以创建多边形。让我们尝试一下,并在德克萨斯州的地图上以多边形的形式展示德克萨斯州的人口:
-
打开 德克萨斯州交通部 页面:
gis-txdot.opendata.arcgis.com/datasets/txdot-city-boundaries/explore?location=30.990445%2C-100.168292%2C6.68
。 -
使用 下载 下拉菜单下载 Shapefile:
图 9.11:德克萨斯州数据
在你的
downloads
目录中,你应该可以看到多个文件:图 9.12:德克萨斯州城市边界
如果你在文本编辑器中打开
.shp
文件,你会看到以下内容:图 9.13:文本编辑器中的
.shp
-
幸运的是,Tableau 本身具备读取
.shp
文件的能力。在本章相关的工作簿中,导航到City
Limits
工作表并选择 数据 | 新建数据源 | 文本文件。 -
导航到你的
downloads
目录或保存德克萨斯州 shapefile 的路径,并选择.shp
文件:
图 9.14:加载空间文件
- 在下一个截图中,你可以看到 Tableau 如何读取
.shp
文件,以及它如何创建一个名为 Geometry 的附加字段,表示我们正在查看文件中的多边形和多重多边形:
图 9.15:几何图形
- 打开一个新工作表并将 Geometry 拖动到空白画布上:
图 9.16:添加几何图形
- 看!Tableau 立刻在德克萨斯州的区域周围创建了多边形:
图 9.17:德克萨斯州多边形
-
可以通过 地图 | 背景地图 | 深色 来调整格式。
-
将 City Nm 字段放在 详细信息 上,Pop2010 放在 颜色 上,位于 标记 卡片中。(图 9.17 中使用的颜色是 温度渐变。)
-
你的工作表应如下所示:
图 9.18:德克萨斯州城市边界
如您所见,现在我们有了一张漂亮的深色地图,地图上有多边形。这些多边形定义了每个城市名称(使用字段City Nm)所对应的区域,这些数据由德克萨斯州政府发布。通过将 2010 年的人口数据(使用字段Pop2010)放置在颜色架上,我们还可以看到,红色多边形所在的区域在 2010 年人口最多,而深绿色区域人口最少。
您可能不喜欢多边形,或者您可能在想,像 .shp
这样的空间文件是否只能使用多边形。幸运的是,答案是我们可以改变地图,无论它是否是空间文件。我非常喜欢使用热力图来显示地理密度,所以我们将在接下来的部分使用它们。
热力图
我想与您分享一个功能,它是在早期的 Tableau 版本中加入的,已经证明在处理地理数据时非常有用。这个功能是标记类型密度,通过它您可以创建热力图。这个新功能不仅限于地图,您也可以用它来创建任何其他类型的图表。然而,它对于密集数据特别高效,在这些数据中很难轻易发现模式。
以下步骤将演示如何创建热力图的示例:
-
打开与本章相关的工作簿中的
Citylimits
选项卡。如果您没有完成之前的练习,请从本章的解决方案工作簿中打开Citylimits
选项卡。 -
复制工作表,并将其命名为
City Limits (2)
。 -
将标记卡片的类型设置为密度:
图 9.19:德克萨斯州城市密度
-
点击颜色在标记卡片中,选择您喜欢的任何颜色。我选择了密度金色深色。
-
通过拖动滑块向左减少大小,直到您喜欢地图上圆圈的大小为止:
图 9.20:热力图
热力图可以显示空间集中度,特别适合处理非常密集的数据集。在前面的图中,您可以看到城市周边的区域和多边形结构丢失了;然而,我们依然能看到人口密集的区域,并且每个城市的大小相同,使得小型和大型地理位置的比较变得更加容易。同时,我们也证明了不需要使用空间文件就可以与多边形一起使用。
在 Tableau 2020.4 版本中,新增了一个功能:地图层。它是什么以及如何使用,我们将在下一部分中介绍。
双轴与地图分层
您可能还记得,在之前的章节中,我们多次使用了双轴。在地图中同样可以实现双轴可视化,而且更好的是,自 Tableau 2020.4 版本以来,地图可以进行分层。我们只需添加另一个相同结构的层(在这种情况下是地图),并且每个层可以显示不同的数据。
我们将探讨两个练习,第一个是关于使用双轴,第二个是关于添加地图层。
使用双轴
让我们开始吧:
- 首先,我们需要一个数据集。我自己在 Excel 中创建了一个数据集;你可以随意创建你自己的,或者复制以下截图中的内容,或者从本书的 GitHub 仓库下载文件(
github.com/PacktPublishing/Mastering-Tableau-2023-Fourth-Edition/blob/main/Chapter09/Freight.xlsx
)。将文件命名为freight
:
图 9.21:Excel
-
将新的数据集连接到 Tableau,并打开一个名为
Dual-axis map
的新工作表。 -
双击原产国,接下来会显示如下地图:
图 9.22:双轴地图
- 将Marks卡片类型更改为填充地图,并将货物拖到颜色架上:
图 9.23:双轴地图 II
- 在列架上点击经度,按下Ctrl(在 Mac 上按Command),同时将字段移动到右侧。你应该已经复制了第二个经度字段到列架上:
图 9.24:复制经度
- 你还可以看到Marks卡片现在保持了两个层,外加一个额外的All层,就像条形图的双轴一样:
图 9.25:Marks 卡片
- 在底部层中,将货物替换为原产地,并将其添加到颜色架上,看看第二张地图现在如何显示代表城市的彩色点:
图 9.26:双轴地图
- 点击列架右侧的经度字段,并选择双轴。
你创建了你的第一个分层地图!每个国家的颜色表示其运输的货物类型。点表示火车、船舶、飞机或卡车运输的城市:
图 9.27:双轴地图
完成第一个基本练习后,我们将进入更复杂的练习,使用新的地图层叠功能。
添加地图层
我们希望通过从起点到目的地城市的线条来可视化运输路线。我们还想显示交货时间以及货物的重量。我们将继续使用之前的freight
数据集,只需要做一些调整:
freight
数据集没有经度或纬度,这对于某些 Tableau 空间计算字段至关重要,例如我们后面需要的MAKEPOINT
。打开谷歌地图,输入数据集中的一个城市,例如Lisbon
。在网址中,你将能够找到经度和纬度:
图 9.28:谷歌地图
- 复制这些内容并将其添加到一个单独的 Excel 表格中,如下图所示,并将其命名为
latlong
:
图 9.29:Excel
- 我们需要使用新的 Excel 表格,因为我们还需要为目的地创建一个空间字段。由于一些城市既是源城市也是目的城市,我们将创建两个内部连接;每次,最初的
货运
(freight
)Excel 表格将与新创建的经纬度
(latlong
)Excel 表格连接(如果你从 GitHub 下载了数据,latlong
表格位于Freight.xlsx
的第二个标签中):
图 9.30:连接
- 唯一的区别在于,第一个连接是基于源(Origin)和城市(City),第二个连接是基于目的地(Destination)和城市(City)。通过双击名称来重命名经纬度(latlong)数据源,以避免混淆:
图 9.31:连接 II
-
打开一个新的工作簿并命名为
4 层地图
(4-layer map
)。创建一个名为线路
(Line
)的计算字段,代码如下:MAKELINE(MAKEPOINT([Lat (Origin)], [Long (Origin)]), MAKEPOINT([Lat (Destination)], [Long (Destination)]))
-
Tableau 的描述显示,要根据空间位置创建一个点,Tableau 需要经度和纬度或坐标。
图 9.32:MAKEPOINT
-
创建一个名为
交货天数
(Days to delivery
)的计算字段,代码如下:[Delivered]-[Ordered]
-
双击城市(City)来自源文件(Origin),地图将会显示,但你将遇到12 个未知(12 unknown)。点击错误信息然后选择编辑位置...(Edit Locations…):
图 9.33:未知城市
- 你会看到,Tableau 默认使用英国(United Kingdom)(你的可能不同)作为查找每个城市的默认国家,但由于我们的数据集中包含了欧洲各地的城市,Tableau 无法成功识别。你应该使用字段中选择(From field)选项,选择源国家(Origin Country)。现在这个字段将会作为每个城市在我们数据中的国家:
图 9.34:源国家(Origin Country)
- Tableau 会自动将源国家(Origin Country)添加到详细信息(Detail)货架,并且现在可以正确显示城市。你也可以通过直接将源国家(Origin Country)放到详细信息(Detail)货架来实现上一步:
图 9.35:源城市
-
由于我们的目标之一是画出源(Origin)和目的地(Destination)城市之间的连线,因此将目的地(Destination)也加进去是有意义的,对吗?双击目的地(Destination)将其添加到可视化中。
-
现在我们在视图中有了所有的源(Origin)和目的地(Destination)城市,但由于它们都在同一图层上,我们无法区分它们。因此,将刚刚添加的目的地(Destination)字段从详细信息(Detail)货架拖动到视图的左上角,直到出现添加标记图层(Add a Marks Layer)标志:
图 9.36:货运 II
- 现在你会看到,标记卡片显示了两个层:
图 9.37:标记
-
双击名称将
Destination
层重命名为Destination
Country
。 -
通过将线条拖动到添加标记层上,再将交货天数添加到颜色中,添加另一个层并命名为
线条
,从标记卡片下拉菜单中选择自动类型:
图 9.38:标记层
- 通过将城市拖动到添加标记层上,再命名为
City (2)
,并将目的地国家添加到详情中。从标记卡片下拉菜单中选择自动类型:
图 9.39:标记层
- 最后,返回到目的地国家层,将目的地国家更改为详情,并将重量放置在颜色上。从标记卡片下拉菜单中选择地图:
图 9.40:标记层
- 通过拖放以下顺序对层进行排序:线条、城市、城市 (2)、和目的地国家。你的工作表现在应该如下所示:
图 9.41:地图
-
为了使可视化更容易解读,将起点放到筛选器架上,并仅选择几个你挑选的起点。
-
为了区分起点和目的地,打开城市和城市 (2)地图层,并将城市和城市(目的地)分别从详情更改为形状。为起点选择一种形状,为目的地选择另一种形状,例如,使用实心圆表示起点,交叉表示目的地。你还可以通过点击颜色架来为形状上色:
图 9.42:最终分层地图
现在,让我们来看看我们创建了什么。我们可以看到,货物正从每个圆圈城市运输到交叉城市。两个城市通过一条从黄色到红色的线连接。黄色调越多表示运输越快,而红色调越多则表示运输时间较长。目的地国家的颜色从绿松石色到深蓝色的色域变化。颜色越深,表示运输的重量越大。我们可以轻松发现,意大利接收了最重的运输,来自伊斯坦布尔并在 6 天内送达。最慢的运输是从布达佩斯到华沙,历时 26 天。
希望这个练习能向你展示分层地图的好处。每一层都可以通过独特的方式使用颜色、形状、大小、标签及其他标记,为你的分析开辟新的路径。在接下来的部分,我们将更进一步,使用外部技术在 Tableau 中制作地图。
扩展 Tableau 地图功能与其他技术
接下来,我们将考虑如何利用其他工具扩展 Tableau 的地图功能。Tableau 的开发者小心翼翼地创建了一个易于扩展的地图接口。某些扩展性区域,例如连接到Web 地图服务(WMS)服务器,可以直接从界面上使用;我们接下来将探索这一部分。
使用 WMS 的自定义地图
将自定义地图带入 Tableau 的最简单方法是直接通过桌面。我们需要一个格式正确的 URL,指向 WMS 服务器。Tableau 桌面可以连接支持 WMS 1.0.0、1.1.0 或 1.1.1 标准的任何 WMS 服务器。
找到这类 URL 的好地方是directory.spatineo.com
,它提供了大量不同地图服务的信息。
以下练习灵感来源于 Jeffrey A. Shaffer 的文章在 Tableau 中用不到 1 分钟构建天气雷达,可以通过此链接访问:www.dataplusscience.com/TableauWeatherRadar.html
。不过,我们将使用不同的地图,数据源是NASA 地球观测数据(neo.gsfc.nasa.gov/
)。在这个练习中,我们将看到,通过在数据集下方绘制附加数据(作为背景图像),你能够做出更好的商业决策。例如,如果你的销售数据受良好(或不良)天气的影响,或者你的生产面临附近野火的威胁,你将能够在一个 Tableau 仪表板中看到所有这些信息:
-
打开与本章相关的工作簿,并通过桌面导航到
WMS Server
工作表。 -
选择
Superstore
数据源。 -
将州/省放在详细信息架上。
-
复制
neo.gsfc.nasa.gov/wms/wms
URL,然后在 Tableau 中,导航至地图 | 背景地图 | 添加 WMS 地图。粘贴 URL 并点击确定:
图 9.43:添加 WMS 地图
-
在标记卡片中,将视图类型设置为地图。
-
点击颜色架以开启边框,将颜色设置为白色,并将不透明度设置为0%:
图 9.44:活跃火灾地图
- 你现在可以看到过去一个月的活跃火灾情况。但是,点击地图|背景图层,更多的选项将会出现。查看屏幕左侧,选择你感兴趣的其他信息领域;比如平均陆地表面温度怎么样?
图 9.45:陆地表面温度地图
- 或者云覆盖率(在选择新地图之前,别忘了先取消选择当前地图):
图 9.46:云覆盖率地图
这个功能将为你提供无尽的方式来分析与地理位置相关的数据。假设你拥有一家在线商店。你可以检查特定产品在特定区域的销售情况,例如,雨区的雨伞和热区的防晒产品。然后,你可以继续分析市场是否已经饱和,或者在这些地区投资营销是否有意义。或者,也许你想把库存转移到那些因天气变化而预期销售更高的地区。随时在 Tableau Public 上分享你的发现,并确保使用标签#MasteringTableau。
在我们继续之前,这里有一个关于切片和缩放的说明。由于高分辨率的地图可能有多个千兆字节,要求你下载整个地图来缩放到某个小区域是不可行的。切片解决了这个问题,通过启用多个缩放级别。缩放级别 0 会生成一个单一的切片(通常是 256 x 256 像素的 PNG 图像),显示整个地图。随着缩放级别的增加,地图切片的数量呈指数增长。同时,显示的地图区域相对变小;也就是说,随着缩放级别的增加,显示的整个地图区域变小,而填充显示的切片总数保持不变。这有助于控制在任何给定时刻下载的数据量。
接下来,我们将探索 Mapbox。
探索 Mapbox
Mapbox 提供自定义地图,并与 Tableau 原生集成。要了解如何构建自己的自定义地图,可以访问其网站:www.mapbox.com/
。从 Tableau 2019.3 开始,多个 Mapbox 样式默认即可使用:
图 9.47:背景地图
此外,Mapbox 本身提供了一个扩展的地图服务,并配有一个网络应用程序,允许用户自定义地图。这个自定义功能涵盖了字体、颜色、背景图像等方面。Mapbox 提供基本的免费服务,但当然,更多的地图和更大的带宽需求将需要升级并支付相应费用。
这个练习将向你展示如何连接到Mapbox:
-
访问
www.mapbox.com
并创建一个账户。 -
完成注册并登录到Mapbox后,点击Studio链接:
图 9.48: Mapbox
-
点击新建样式并开始创建地图。我选择了单色 | 深色 | 自定义单色。
-
Mapbox 编辑器应该会打开。根据您的需求调整地图:
图 9.49: Mapbox 集成
- 完成后点击右上角的分享。选择第三方 | Tableau并复制 URL:
图 9.50: Mapbox 集成
-
在本章关联的工作簿中,导航到
Mapbox Classic
工作表,选择地图 | 背景地图 | 添加 Mapbox 地图。 -
添加一个样式名称(我使用了
MasteringTableau
)并复制 URL。点击确定。 -
选择
Superstore
数据源,双击State,通过地图 | 背景地图 | MasteringTableau路径选择MasteringTableau地图样式:
图 9.51: 背景地图
如您所见,Tableau 利用我们之前在 Mapbox 中创建的地图。太好了!这意味着您可以根据自己的喜好自定义地图。
如何创建自定义地图及您需要了解的关于 Mapbox 的所有内容,请参阅此处:docs.mapbox.com/studio-manual/guides/
。
切换地图
现在我们将创建一个仪表板,允许最终用户在我们刚刚讨论的各种地图之间进行选择。用于这个练习的技术被称为工作表切换。然而,对这一技术的更深入探讨将在第十一章中呈现,标题为仪表板设计与可视化最佳实践。
让我们来看一下必要的步骤:
- 在本章关联的工作簿中,导航到
MapSwap
工作表。双击State。将标记卡视图设置为地图,点击颜色,将不透明度设置为0%,最后,将边框设置为自动:
图 9.52: 颜色
- 复制MapSwap工作表两次:
图 9.53: 复制 MapSwap 工作表
-
选择MapSwap工作表,并导航到地图 | 背景地图 | 常规。
-
选择MapSwap (2)工作表,并导航到地图 | 背景地图 | 深色。
-
选择MapSwap (3)工作表,并导航到地图 | 背景地图 | 卫星。
-
创建一个名为Show Sheet的参数,如下所示:
图 9.54: 参数
-
右键点击数据窗格中的参数,选择显示参数 控制。
-
创建一个名为
Show Sheet Filter
的计算字段,如下所示:[Show Sheet]
-
选择
MapSwap
工作表,并将显示工作表筛选器放置在筛选器架上。选择从列表中选择和正常:
说明自动生成](https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/ms-tbl-2023/img/B18435_09_55.png)
图 9.55:工作表筛选器
- 选择
MapSwap (2)
工作表,并将显示工作表筛选器放置在筛选器架上。这次选择自定义值列表并输入Dark
:
图 9.56:自定义值列表
-
在
MapSwap (3)
表上重复之前的步骤,并输入Satellite
代替Dark
。 -
创建一个仪表板并命名为
db_MapSwap
。将一个垂直容器放置在仪表板上。 -
将所有三个MapSwap表放置在垂直容器中并隐藏它们的标题。
-
选择不同的地图样式并查看你的地图如何变化:
图 9.57:交换地图
你可能在自己的计算机上,或者像 YouTube、PyCharm 等 IDE 的网站上看到过类似的暗色/亮色或昼夜背景功能。使用MapSwap功能,你现在可以在 Tableau 仪表板上为用户提供相同的便利。
自定义地理编码
在我们结束这一章之前,我想分享一个几周前在 LinkedIn 上看到的小技巧。描述以下练习的帖子来自于德国教授和 2018 年Iron Viz冠军 Klaus Schulte。
他分享了他通过使用自定义地理编码构建了一个网格地图。让我们尝试复制它!
从某个地方下载六边形地图数据,或者自己创建。对于本练习,你可以使用我在 Tableau Public 或 GitHub 上的六边形地图数据:github.com/PacktPublishing/Mastering-Tableau-2023-Fourth-Edition/blob/main/Chapter09/hexmap.xlsx
。如果你想自己创建,请查看第八章中的多边形练习,超越基础知识。你可以像我们创建书本多边形一样创建该文件:
-
将
hexmap
文件放置在你的 Tableau 仓库的Mapsources
文件夹中。 -
将 Tableau 桌面版连接到默认的
Superstore
数据。 -
双击州/省:
图 9.58:正常地图
-
在数据窗格中点击州/省并选择地理角色 | Hexmap.xlsx。
-
点击地图 | 背景图层并将洗涤(%)设置为
100%
。 -
结果将如下所示:
图 9.59:XX(将变为图 9.59)
那么为什么要进行这些努力呢?因为网格地图均匀分布各州,如果没有它,你就无法区分相邻的州,并且会错过一些远距离的州:
图 9.60:如果没有网格地图
感谢 Klaus 提供这个很棒的建议!顺便提一下,六边形地图不仅适用于美国,还可以试试欧洲、非洲、南美洲,或者亚太地区(APAC)!每当你处理不同尺寸的变化时,网格地图非常有用。
总结
在本章中,我们探讨了如何在不离开界面的情况下扩展 Tableau 的映射功能,包括捕捉 Tableau 生成的纬度和经度数据,并了解如何在 Google 上查找这些数据。我们基于.shp
文件为德克萨斯州创建了多边形和热力图,以及一个包含双地图轴的仪表板和另一个具有 4 个地图层的仪表板。接下来,我们探索了使用其他技术扩展 Tableau 映射的不同方法。我们连接到了一个 WMS 服务器,然后探索了 Mapbox 的功能,最后进入了多边形的世界。
在下一章中,我们将探讨如何使用 Tableau 进行演示。具体来说,我们将了解如何从 Tableau 中提取最佳图片,如何有效高效地将 Tableau 与 PowerPoint 结合使用,以及如何直接使用 Tableau 进行演示,而不依赖第三方工具。
在 Discord 上了解更多
要加入本书的 Discord 社区——在这里你可以分享反馈、向作者提问并了解新版本的发布——请扫描下面的二维码:
第十章:使用 Tableau 进行演示
所有 Tableau 作者本质上都是讲故事的人。分析数据不仅仅是解谜;它是寻找一个能够产生影响的故事。主题可以从 Airbnb 到寨卡病毒不等,可能既让人愉快地转移注意力,也可能改变生活,但它们都有一个共同的目的:讲述一个故事。本章旨在帮助你丰富工具箱,提供使用 Tableau 制作引人入胜、愉悦且有影响力的演示的想法和方法。
本章将探讨以下以演示为中心的主题:
-
从 Tableau 中获取最佳图像
-
从 Tableau 到 PowerPoint
-
将 Tableau 嵌入 PowerPoint
-
Tableau 动画效果
-
演示的故事点和仪表盘
-
演示资源
从 Tableau 中获取最佳图像
在本节中,我们将回顾从 Tableau 导出图像到其他应用程序的选项,并讨论每种方法的优缺点。我们将首先介绍各种截图工具,接着讨论 Tableau 中的直接截图方法。
也许在 Tableau 中捕捉图像最简单的方法就是使用屏幕截图工具。以下是一些不会让你破费的截图工具:
-
Grab 是 macOS 系统自带的屏幕截图工具,位于 应用程序 下的 实用工具 文件夹中。你也可以通过以下快捷键访问它:Shift + Command + 3 截取全屏截图,Shift + Command + 4 截取部分截图,Shift + Command + 5 截取定时截图。
-
Snipping Tool 是 Windows 系统默认安装的屏幕截图工具,功能非常简单,操作便捷,效果也很不错。
-
Greenshot 是一款开源的屏幕截图工具,拥有许多功能。访问
getgreenshot.org/
下载应用并了解更多信息。 -
Microsoft Office OneNote 包含屏幕截图功能。如果你已安装 OneNote,只需按 Windows + S 激活截图功能,或者按 Windows + N 然后按 S 键来激活截图。
一般经验法则:截取比需要的更大的截图,因为捕捉更多的像素会提高图像质量。然后你可以缩小尺寸,使其适应目的,保持更多像素在较小的表面上。(对于非常小的物体,可以暂时提高显示器的分辨率,以便每平方厘米获得更多像素。)
现在我们已经介绍了图像捕捉工具,让我们来看看 Tableau 自带的原生功能。
Tableau 的原生导出功能
屏幕捕捉工具的一个缺点是它们仅限于光栅图像。光栅图像通常足以用于文档或 PowerPoint 演示,但如果放大则容易出现像素化问题。而矢量图像在放大时不会出现像素化,因此能够提供更清晰的图像质量。Tableau 本身包括了光栅和矢量导出选项。以下列表将讨论这些选项。
Tableau 可以以三种格式导出图像,路径为 工作表 | 导出 | 图像:
-
SVG 是目前 Tableau 提供的唯一矢量图像格式。使用这种格式可以避免在放大时出现像素化问题。如果你的图像包含大量细节和纹理,SVG 格式可能不太适用,因为它是基于点和路径而不是单个像素。
-
JPEG 是一种光栅图像格式,非常适合高分辨率的图像,例如照片,但对于低色彩图像(如 Tableau 中常用的图像)效果不佳。从 Tableau 中以 JPEG 格式导出图像后,放大查看。请注意,白色区域(特别是文本周围的白色区域)可能包含杂散的像素,这些被称为伪影或噪点。虽然这些像素在不放大的情况下是不可见的,但导出的图像整体效果可能会显得模糊。因此,从 Tableau 导出 JPEG 格式几乎没有必要。
-
与 JPEG 图像一样,PNG 图像也是光栅图像。PNG 格式的优点是,它既适用于高色彩图像(如照片),也适用于低色彩图像(如 Tableau 中常见的图像)。从 Tableau 中以 PNG 格式导出图像并放大查看时,尽管会出现像素化,但白色区域仅包含白色。与 JPEG 图像不同,PNG 图像不会出现伪影或噪点。在使用光栅图像时,PNG 应该被视为首选格式。
-
BMP 是一种光栅图像格式,外观相当不错,但它是未压缩的,因此可能导致图像文件过大。如今,BMP 格式被认为是过时的,通常应该避免使用。
我建议你尝试所有四种格式。幸运的是,Tableau 还为我们提供了一个原生功能,允许我们以矢量图像的形式导出 PDF,以及直接导出到 PowerPoint。在下一部分,我们将详细了解 PowerPoint 导出功能及其一些变体。
从 Tableau 到 PowerPoint
PowerPoint 是无处不在的。虽然有人认为像 Prezi 这样的演示工具更为优秀,但对于许多组织(可能是绝大多数组织)来说,PowerPoint 仍然是首选软件。
Prezi 是一款基于网页的工具。通常,你不会看到传统的幻灯片,而是一个互动式的动态演示。在线提供了各种模板,既有免费的,也有付费的。你可以在这里查看:www.prezi.com。
因此,有效地将 Tableau 和 PowerPoint 整合起来至关重要。你可以直接将仪表板导出到 PowerPoint。你可以在文件 | 导出为 PowerPoint...下找到这个选项:
图 10.1:导出为 PowerPoint…
在做出此选择后,你将被询问是否要导出当前视图或工作簿中的部分工作表:
图 10.2:导出 PowerPoint
尝试这两种选项,查看原生 Tableau 导出功能在 PowerPoint 中的效果。如果你想多花点功夫,还可以通过另一种方式创建 Tableau 的 PowerPoint 实现。这些替代方案可能为你带来额外的价值。接下来的练习将探讨各种实现方法及其带来的附加价值。
创建模板
对于这个以 PowerPoint 为中心的练习,你将创建一个将在未来练习中使用的模板。模板将包含常见的 PowerPoint 元素,如页眉和页脚。模板的大小为 1200 x 900,符合 PowerPoint 演示文稿通常使用的 4:3 屏幕比例。当然,如果你的公司使用其他屏幕比例,你也可以随时调整!让我们看一下接下来的步骤:
-
访问
public.tableau.com/profile/marleen.meier
以查找并下载本章相关的工作簿。 -
创建一个新工作表并选择
Superstore
数据集。 -
将工作表命名为
Header
。 -
将销售额放到标记卡中的颜色架上。
-
单击标记卡中的颜色,点击编辑颜色...,然后选择灰色调色板,并将不透明度设置为
50%
:
图 10.3:不透明度
-
复制
Header
工作表,并将副本命名为Footer1
。 -
单击标记卡中的颜色,点击编辑颜色...,然后选择蓝色调色板:
图 10.4:颜色调色板
-
复制
Footer1
工作表,并将副本命名为Footer2
。 -
单击标记卡中的颜色,点击编辑颜色...,然后选择灰色调色板,并将不透明度设置为
50%
。 -
创建一个名为
Template
的新仪表板。 -
在仪表板面板中,将大小设置为自定义大小(1200 x 700):
图 10.5:仪表板的自定义大小
-
通过仪表板 | 显示标题来显示仪表板标题。
-
双击标题。在弹出的对话框中,如果需要,可以将文本左对齐。
-
在仪表板面板中,确保选中了平铺。这样,你可以确保单个工作表保持原位,不会相互重叠:
图 10.6:平铺
- 从仪表盘面板中,拖动空白对象到仪表盘的左侧。小心确保它从仪表盘顶部延伸到底部,如下图所示:
图 10.7:添加空白空间
- 对仪表盘的右侧、中间和底部重复以上步骤。创建底部边距时,请确保将对象放置到从仪表盘的最右边延伸到最左边。最终布局应包含四个容器,并在顶部左对齐标题,如下所示:
图 10.8:布局
- 调整空白对象的大小以创建适当的边距。可以通过拖动每个空白对象的内边缘(即面向中心的边缘)尽可能向右、左或下方移动来完成:
图 10.9:增大大小
-
通过选择容器并将底部边线向下拖动,如图 10.9所示,再次大致加倍底部边距。
-
在仪表盘面板的对象部分,点击浮动。
-
将头部、页脚 1和页脚 2资源拖动到仪表盘上。放置位置无关紧要;我们稍后会对工作表进行对齐。如果出现销售图例,请删除它。
-
右键点击每个资源的标题,并选择隐藏标题。
-
在布局面板中,为每个工作表输入以下值:
图 10.10:改变位置
- 通过点击工具栏中标准旁边的适应下拉菜单并选择完整视图,将每个工作表设置为完整视图:
图 10.11:改变视图
- 结果应该是标题下方有一条横跨仪表盘 80%的线,以及两条横跨整个仪表盘的底部条形图:
图 10.12:布局
-
点击位于模板标题下方的容器。
-
如果你还没有做过,下载与本章相关的资源。工作簿中提供了下载链接。
-
在对象面板下选择浮动:
图 10.13:浮动
- 从仪表盘面板的对象部分将图像对象拖动到仪表盘上。当提示时,选择本章提供的
tableau-logo.png
图像:
图 10.14:添加图像
-
选择适应图像和居中图像选项,然后点击确定。
-
通过布局面板调整图像位置,方法如下:
图 10.15:定位徽标
你的 PowerPoint 模板现在已经准备好使用:
图 10.16:模板
对于你现在将拍摄的每个截图,周围的设计始终保持一致。这样做,你的演示文稿看起来会更具吸引力,观众很快就能通过设计识别出你的作品。像这样的模板还能帮助你遵循公司设计指南。额外的提示是,确保使用匹配的颜色来设计页眉、页脚和图表!
接下来,我们将通过一些示例来查看模板的使用。
为打印创建仪表板
本练习将利用之前创建的模板,并结合一个仪表板,从而使其适合打印和/或展示。提供了基本说明,但具体细节留给个人偏好:
-
右键点击之前练习中创建的名为
Template
的标签,创建模板,然后选择复制。 -
将复制的仪表板重命名为
Superstore Loss Leaders
。 -
使用工作表
HexMap
和Loss Leaders States
填充Superstore Loss Leaders仪表板。(这两个工作表是我根据Superstore
数据集制作的,显示了六边形地图上的利润率以及一个列出底部 20 个利润州的列表,用于识别需要更多工作的地方。)按需排列。以下给出了一个示例布局:
图 10.17:仪表板和模板
模板上的仪表板看起来不错,不是吗?它立刻显得更有趣,更适合展示。不过,你是不是在想,为什么我们选择使用这个特定的布局?好吧,允许我解释一下:如果你想在打印版本中展示一个 Tableau 仪表板,或者你必须将仪表板导出到 PowerPoint 中,记住一个重要的点:所有交互性都会丢失。
Tableau 的一个亮点和最大卖点——交互性——在二维打印中无法实现。但显然,你不想重新创建那些已经存在于 Tableau 服务器上的图表,实际上你也不需要。只要确保观众能够理解可视化内容,即使无法点击某个字段或悬停查看更多信息:
-
提示 1:图 10.17中的仪表板已调整为与模板的颜色匹配,看起来好像两者是一起设计的。
-
提示 2:使用了六边形地图(hex map)而非 Tableau 自带的默认地图。原因是,当以实际比例打印时,东海岸的小州会消失,而阿拉斯加和夏威夷距离太远,通常也无法适应地图。六边形地图为每个州分配了相同的空间,因此即使打印出来,用户也可以看到阿拉斯加和罗德岛的情况。
-
提示 3:颜色表明俄亥俄州和科罗拉多州的利润率特别差,但观众可能想了解更多。这时表格就派上用场了。利润率是利润除以销售额,表格显示了这两个数字,观众可以更好地了解当前情况,你也可以避免他们提问。
-
提示 4:为了避免打印时出现滚动条,我只选择了底部的 20 个州。如果主题是亏损引导者,那么你很可能不需要展示所有表现好的州。
希望这个例子能为你准备打印仪表板提供一些思路!如果打印频繁发生,我建议你将其作为页面添加到 Tableau Server 上的交互式仪表板中,这样如果有人要求,你就可以随时准备好。如果你有兴趣复制六边形地图,请查看 第八章,超越基础,或者查看以下文章:www.tableau.com/about/blog/2017/1/viz-whiz-hex-tile-maps-64713
。
接下来,我们将查看另一个例子,这次是一个每周 PowerPoint 演示文稿的自动化。
半自动化 PowerPoint 演示文稿
之前的练习(创建模板 和 为打印创建仪表板)演示了生成 PowerPoint 演示文稿模板的两种方法,并给出了如何调整仪表板以便打印和/或用于 PowerPoint 演示文稿的一些技巧。然而,通常情况下,你的 Tableau 仪表板不是静态的,数据在下一次需要时会发生变化。当然,你可以导出一个带有更新数据的新 PowerPoint 文件,但你可能还有其他幻灯片不想丢失。以下步骤将帮助你半自动化更新 PowerPoint 演示文稿的过程:
-
打开之前创建的名为
Superstore Loss Leaders
的仪表板。 -
点击 仪表板 | 导出图片…:
图 10.18:导出图片…
-
点击 确定,在弹出的对话框中选择将图片保存为
SuperstoreLossLeaders.png
。 -
打开 PowerPoint 演示文稿。打开一张幻灯片。
-
选择 插入 功能区,选择 图片 | 来自文件的图片…:
图 10.19:将图片插入 PowerPoint
-
导航到你刚刚导出的 PNG 图片。
-
在 插入 对话框中,选择 插入 旁边的下拉选择器,Windows 系统选择 插入并链接,或者 Mac 系统选择 选项 | 链接到文件 | 插入。请注意,这一步很重要,因为它将允许图片轻松更换,如下所示:
图 10.20:链接到文件
-
将 PowerPoint 演示文稿保存为
AutoUpdate.pptx
。 -
关闭 PowerPoint。在 Tableau 中,修改仪表板;例如,从表格中删除一个州。
-
通过 Dashboard | Export Image… 替换之前导出的
SuperstoreLossLeaders.png
图片。 -
打开
AutoUpdate.pptx
并注意到仪表板的新图片显示出来。
在我教授 Tableau 课程时,我经常遇到一种情况,就是有些人每周或每月负责提供 PowerPoint 演示文稿。这些演示文稿包含已更新的图表和图形,但整体布局保持不变。上一节中提到的技巧可以让这个过程变得更加高效。虽然 Tableau Desktop 只允许作者一次更新一张图片,但 Tableau Server 可以配置为同时导出多张图片,从而使整个过程更加高效。关于从 Tableau Server 导出图片的内容,请参见 第十四章,探索 Tableau Server 和 Tableau Cloud。
如果我们能在幻灯片中直接展示我们的网页浏览器、Tableau Server,包括所有的交互性,那岂不是更好?下一节将介绍这个话题,并分享一些实现这一目标的思路。
将 Tableau 嵌入 PowerPoint
直接将 Tableau 嵌入 PowerPoint 演示文稿是可行的,或者更准确地说,是通过嵌入一个网页浏览器,通过它可以访问 Tableau Server。有多种方法可以实现这一目标,包括 Web Viewer 应用、一个名为 LiveWeb 的第三方插件以及 VBA 代码。
Web Viewer 应用可以在 appsource.microsoft.com/en-us/product/office/WA104295828?tab=Overview
获取。虽然它在 Tableau Public 中表现良好,但默认的 Tableau Server 设置不允许通过 Web Viewer 访问。不过,你的 Tableau Server 管理员可以帮助更改这些设置。LiveWeb(可以在 skp.mvps.org/liveweb.htm
获取)也能正常工作,但需要额外安装。你必须从提供的 URL 下载安装文件并启动 PowerPoint。然后你可以向 PowerPoint 功能区添加一个插件,该插件可以让你添加一个 Tableau Server 的 URL,并直接显示在 Tableau 中。详细说明可以在该网站上找到。
将 Tableau 嵌入 Google 幻灯片
Google 幻灯片是另一个广泛使用的演示工具,由于其基于网页的特性,使用起来非常方便。就像在 PowerPoint 中一样,你可以插入图片、音频和视频,但遗憾的是,无法插入网页或 Tableau 仪表板。
在写这篇文章时,我也没有找到任何解决方法。然而,如果你不想在不同应用之间切换,可以将 Google 幻灯片嵌入 Tableau,也就是反过来。这至少能把工具数量减少到一个!
让我们试试看:
你确实需要一个 Google 帐号才能执行此操作。
-
打开 Google 幻灯片,
docs.google.com/presentation
,然后点击 Blank 打开一个新的演示文稿。输入类似如下内容:
图 10.21:Google Slides
-
填充第二页:
图 10.22:测试幻灯片
-
点击File | Share | Publish to web。
-
将下拉菜单中的Auto-advance slides更改为每分钟。然后点击Publish:
图 10.23:发布到网页
-
复制现在出现的网址。
-
在你的 Tableau 工作簿中打开一个新的仪表板页面。
-
将Web Page对象拖到仪表板上:
图 10.24:网页
- 粘贴你之前从 Google Slides 复制的网址,并删除高亮部分
&delayms=60000
:
图 10.25:网址
- 现在你应该可以在 Tableau 中看到你的演示文稿了!幻灯片控制按钮可以在左下角找到:
图 10.26:Tableau 中的幻灯片
在这一部分,你已经学会了如何将 Google 幻灯片嵌入到 Tableau 仪表板中,从而只使用一个工具,而无需在两个工具之间切换。接下来,我们将讨论如何为 Tableau 带来动画,从而支持你的数据叙事。
为 Tableau 添加动画
在演示中加入动画对于吸引观众非常有效。Hans Rosling 在他著名的 YouTube 视频200 Countries, 200 Years, 4 Minutes(youtu.be/jbkSRLYSojo
)中做得非常出色。在这个视频中,Rosling 通过数据可视化跟踪了财富和预期寿命的变化。他将数据可视化与富有洞察力的评论以及对信息的热情结合,使得 Rosling 的视频成为任何想通过数据制作吸引人演示的人必看的内容。
动画易于实现,并且可以通过 Tableau Reader 和 Tableau Server(自 2020.1 版本起)使用。到目前为止,我只遇到一个缺点:上传到 Tableau Server 的带动画的工作表只能提供单一速度级别,而 Tableau Desktop 则显示三种速度。不过,这不应该阻止你使用这个功能。
以下练习跟踪了 1991 年到 2015 年间 ACT 考试的分数。完成此练习可以学习如何在 Tableau 中创建动画,并了解美国标准化测试结果是否随时间有所改善。
执行以下步骤:
-
打开与本章节相关的工作簿,进入名为
ACT 1991–2015
的工作表。 -
选择
ACT
数据源。 -
重命名工作表为
ACT scores
。 -
将Year放置到Columns架上,Score Value放置到Rows架上,Score Type放置到Color卡片中。
-
右键点击Score Value轴并选择Edit Axis...。在弹出的对话框中,取消选择Include zero。
-
将Year放置到Pages架上。你的视图应该如下所示:
图 10.27:ACT scores – 1991
- 在工作表中出现的 当前页面 面板中,勾选 显示历史记录。点击箭头打开下拉菜单,并根据下图对齐所有参数:
图 10.28:对齐参数
-
在 标记 面板中,点击下拉菜单,将视图类型从 自动 更改为 圆形。
-
再次点击 显示历史记录 下拉菜单,注意现在 显示 选项和 轨迹 选项都可用。在 显示 下,选择 两者。
-
点击 格式 下拉菜单中的 轨迹,然后选择虚线选项:
图 10.29:虚线
-
简要延伸一下在 Tableau 中创建虚线的主题,如果你想了解如何创建多条不同类型虚线,请查看
boraberan.wordpress.com/2015/11/22/quick-tip-creating-your-own-dashed-line-styles-in-tableau/
,在这里,Bora Beran 提出了使用计算字段插入空值来实现不同线条效果的方法。自 Tableau 2023.2 版本以来,虚线和点线已可用于基本的折线图。
-
现在,点击播放按钮,看看 Tableau 如何逐年显示,每次显示一个年份:
图 10.30:动画
尽管此功能对于深入分析并不是一个好的应用案例,但它在可视化时间变化时很有帮助,例如,在做演示时,或者进行其他形式的讲故事。我最近使用它来展示产品集群如何随时间变化,得出的结论是集群不应保持静态。我接着继续寻找早期识别集群变化的方法,以便相应地调整定价和营销策略。
总结一下,使用 Tableau 中的 页面 功能可以实现动画。我希望你能找到许多此功能的应用场景。接下来,我们将以不同的方式使用动画功能,向你展示如何导出多个图像。
使用动画导出多个图像
有至少两个原因可能需要从时间轴中导出多个图像。首先,从分析角度来看,查看每个时间快照的单独图像可能是有利的;例如,每个月的每一天都有一张单独的图像。其次,可能需要在 Tableau 之外创建动画,或许是在 PowerPoint 中。
接下来的两个练习 使用动画导出多个图像 和 在 Tableau 中使用动画创建 PowerPoint 动画 涵盖了这两种场景:
请注意,以下步骤假设前面的练习已完成。
- 打开与本章相关的工作簿,并导航到名为
ACT scores
的工作表:
图 10.31:ACT 成绩最终
- 选择 文件 | 页面设置...。在弹出的对话框底部的 页面架 下,选择 显示所有页面:
图 10.32:显示所有页面
-
选择文件 | 打印为 PDF。Mac 用户应选择文件 | 打印。
-
在弹出的对话框中,将范围设置为活动表。同时,将页面方向设置为横向。
-
点击确定并将 PDF 保存为
Animation.pdf
到您选择的目录。 -
访问
www.pdftoppt.com/
。上传Animation.pdf
并将其转换为 PowerPoint 格式。转换后几分钟内会发送一封电子邮件。 -
通过电子邮件提供的链接下载文件,并在 PowerPoint 中打开。
-
在 PowerPoint 中,选择文件 | 另存为。在另存为类型下拉菜单中,选择*.png:
图 10.33:Animation.png
- 当提示时,选择导出所有幻灯片:
图 10.34:所有幻灯片
-
保存 PowerPoint 演示文稿。请注意,当 PowerPoint 保存完成时,会显示一个对话框,说明演示文稿中的每张幻灯片都已作为单独的文件保存。
-
按需打开并检查已保存的 PNG 文件:
图 10.35:最后一张幻灯片为.png
通过执行所有前述步骤,您应该已经能够一次保存多个图像。希望这能为您节省时间,尽管这种情况可能不会太频繁发生,但了解这个选项对您有益。
使用 Tableau 中的动画来创建 PowerPoint 中的动画
本练习将向您展示如何使用我们在前一个练习中保存的大量图像来创建动画。因此,我们将使用之前创建的文件在 PowerPoint 中制作动画:
-
在前一练习中下载的 PowerPoint 演示文稿可以通过
www.pdftoppt.com/
访问。 -
在视图功能区,选择幻灯片浏览器,位于演示文稿视图组下。
-
选择 PowerPoint 演示文稿中的所有幻灯片,除了最后一张。
-
在过渡功能区的计时组中,设置幻灯片在 0.1 秒后自动切换:
图 10.36:推进幻灯片
- 按F5键查看动画效果。
这不是很酷吗?您可以看到一个类似于在 Tableau 中看到的模拟效果!为了进一步改善 PowerPoint 中的动画,请考虑以下附加步骤:
-
将初始 PDF 上传到
pdfresizer.com/crop
,并根据需要裁剪大小。 -
如果 PowerPoint 中的动画太慢,很可能是因为所有文本和绘图元素都被保持了。例如,背景网格由单独的线条组成。渲染所有文本和绘图元素非常耗费资源。可以考虑使用在使用动画导出多张图片练习中创建的 PNG 图片来创建一个单独的 PowerPoint 演示。这样可以让动画运行更快、更流畅。
希望本节内容能给你一些关于如何提升 PowerPoint 演示效果的灵感。通过使用这些新掌握的技巧,或许你甚至不再需要使用 Prezi。然而,本章若不提到故事点这一功能,就不完整了。如果你完全不想使用 PowerPoint,故事点将是一个很有帮助的功能。
用于演示的故事点和仪表板
故事点是 Tableau 对 PowerPoint 的回应。因此,二者在基本结构上有相似之处。PowerPoint 演示提供了一种线性沟通方式,Tableau 的故事点也同样如此。PowerPoint 演示提供的幻灯片,每一张都像是一块空白画布,为用户提供无限的可能性来传达想法。Tableau 中的故事为此目的提供了故事点。
尽管二者在基本结构上有相似之处,但需要理解的是,Tableau 故事点和 PowerPoint 演示通常并不扮演相同的角色。每种方式各有优缺点,因此应考虑一个优缺点列表。
我们可以通过下表查看 PowerPoint 和 Tableau 故事点的优缺点:
PowerPoint | Tableau 故事点 |
---|---|
优点 | 缺点 |
创建起来快速且简单 | 难以基于底层数据变化进行自动化更新 |
可以轻松适配不同分辨率 | 难以创建允许跳出线性思维的演示 |
那么,在做演示时,如何在使用 PowerPoint 和 Tableau 之间做出选择呢?也许以下列表会有所帮助:
何时使用 PowerPoint | 何时使用 Tableau 故事点 |
---|---|
演示过程中,观众几乎没有机会提供即时反馈 | 演示过程中,观众可能提供即时反馈,并可能提出探索性问题 |
一次性演示,包含清晰划分的要点 | 基于底层数据变化进行更新的可重复使用演示 |
演示时,无法提前知道显示器分辨率大小 | 演示时,显示器分辨率大小已知或可以假定 |
创建和使用故事点的基础是简单的,而且在写作时,除了基础知识外,并没有更多内容。由于本书的重点是更高级的 Tableau 思想和概念,因此不会在这里讨论这些基础内容。如果你需要快速了解故事点的基础知识,我推荐阅读以下页面:help.tableau.com/current/pro/desktop/en-us/stories.htm
。
我喜欢使用故事点,尤其是在我的观众面前打开自己的 Tableau 并能够跟随自己的操作时。这是一种让人们更深入理解的好方法,因为它允许你展示比静态截图更复杂的信息。如果你想提高整体的演示技巧,请继续阅读下一部分。
演示资源
在 Tableau 中有效地使用故事点可能更多是一个艺术层面的考虑,而非技术层面的。虽然本书试图始终考虑数据可视化的最佳实践,并鼓励设计吸引人且用户友好的工作表和仪表板,但有效的演示技巧讨论超出了本书的范围。
如果你想提高创建有效演示的能力,可以考虑以下资源:
-
Tableau 故事点:通过实例学习是非常宝贵的。在 Tableau 上可以找到一些很好的故事点示例。如果你想学习其中最引人入胜的一个,可以访问
help.tableau.com/current/pro/desktop/en-us/story_example.htm
。 -
TEDx 演讲:TEDx 演讲非常适合学习,甚至可以在通勤或离开桌子时听。我推荐的一个视频是 Phil Waknell 的《惊人演示的三大魔法元素》
www.youtube.com/watch?v=yoD8RMq2OkU
。 -
博客:关于 Tableau 故事点与优秀演示方法结合的有趣文章之一可以在这里找到:
www.artofvisualization.com/blog/10-secrets-perfect-tableau-story
。
尽管这些演示技巧超出了本章的范围,但我希望前面提到的资源能给你带来启发。
总结
我们从探索各种屏幕截图工具以及 Tableau 的本地导出功能开始了本章的内容。接着,我们将注意力转向了 PowerPoint,在这里我们探讨了如何从 Tableau 工作簿创建 PowerPoint 演示文稿的各种方法,甚至探讨了如何将 Tableau 的实时实例嵌入 PowerPoint 中。然后,我们考虑了 Tableau 动画的使用。最后,我们探讨了如何利用故事点和仪表板进行演示。在第十一章,仪表板设计与可视化最佳实践中,我们将专注于仪表板设计,在这里我们将突破常规仪表板的界限,但仍然不会偏离实际应用。
在 Discord 上了解更多
要加入本书的 Discord 社区——在这里你可以分享反馈、向作者提问,并了解新版本——请扫描下面的二维码:
第十一章:设计仪表板和可视化的最佳实践
现在,我们将深入探讨数据可视化的基本原则和最佳实践,特别关注仪表板设计。通过探索如何以视觉上引人注目且富有信息的方式呈现数据,你将获得知识并学习技巧,帮助你创建具有影响力的仪表板,进而有效传达洞察,推动决策,并吸引你的观众。本章受到数据可视化领域几位大师的影响:《功能艺术》——Alberto Cairo 著,《信息仪表板设计》——Stephen Few 著,《仪表板大全》——Steve Wexley、Jeffrey Shaffer 和 Andy Cotgraeve 著,《设计的通用原则》——William Lidwell、Kritina Holden 和 Jill Butler 著,《数据故事》——Nancy Duarte 著,以及《定量信息的可视化展示》——Edward Tufte 著。
在本章中,我们将涵盖以下主题:
-
可视化设计理论
-
格式化规则
-
颜色规则
-
可视化类型规则
-
保持可视化简洁
-
仪表板设计
-
仪表板最佳实践
-
额外内容
现在我们已经定义了本章的主题,接下来让我们深入探讨设计理论,这将为你提供可以应用于你将要构建的每一个仪表板的规则。
可视化设计理论
你的可视化思维过程应始终从设计的基本元素开始,从最低级别做起。换句话说,我们将从仪表板上显示的工作表开始讨论,并确保这些工作表设计得当。
因此,我们的讨论将从考虑可视化设计原则开始,例如以下集合,灵感来自于设计的 7 个原则:www.turing.com/kb/what-are-the-7-principles-of-design-detailed-breakdown
:
-
强调最重要的内容
-
放大重要数据点
-
对齐和平衡元素,合理使用颜色、大小和纹理
-
使用对比突出元素或分组
-
限制颜色或字体的使用至三种,以增强品牌识别度并保持控制
-
使用对人类用户友好的比例,如黄金分割
-
使用户的视线沿 Z 字形移动
-
使用线条作为基准或阈值
-
使用空白区域进行组织和结构化
因此,在接下来的部分,格式化规则,我们将考虑各种规则,同时牢记一旦你熟悉了基础,规则可以被打破以实现特定目的。
格式化规则
以下格式化规则涵盖了字体、线条和带状图。字体当然是显而易见的格式化考虑因素。然而,线条和带状图可能不是你通常会使用的元素,但在 Tableau 中,线条和带状图绝对需要考虑。这表明数据可视化与图形设计密切相关,在这里线条和带状图的作用远大于例如 Excel 中的作用,而格式化考虑的内容也远不止文本布局。
保持字体选择简洁
通常建议在仪表板上使用一种或两种字体。更多字体可能会创建一个混乱的环境,影响可读性。
为标题选择的字体应粗壮且清晰,而正文的字体应易于阅读。在 Tableau 中,选择适当的字体非常简单:选择Format | Font来显示Format Font窗口,以查看并选择你喜欢的字体。
Tableau 的字体总是适用的,如 Tableau Bold、Tableau Book、Tableau Medium、Tableau Light 等。对于特殊场合,我喜欢使用 Corbel 或者尝试新字体。
按照可见性顺序使用线条
我们通常按以下顺序安排线条的可见性:趋势线、图表线、参考线、下降线和网格线。例如,趋势线的可见性应大于参考线的可见性。通常通过增加线条粗细来增强可见性,但也可以通过颜色饱和度或选择点线或虚线而非实线来增强可见性。让我们按照可见性递减的顺序来看一下每种线条类型:
-
趋势线:如果存在趋势线,它通常是图表上最显眼的线条。趋势线通过Analytics窗格显示,并可以通过Format | Lines进行调整:
- 使用案例:一个数据点多且随着时间波动较大的时间序列。使用趋势线来显示整体方向(随时间的增加/减少),从而让用户更容易处理信息。
-
图表线条:图表线条(例如,时间序列图中的线条)不应太粗,以免遮挡数据的波动。尽管通过使用Pages架构,可以将图表线条显示为点线或虚线,但通常不建议这样做,因为它可能会影响可见性。图表线条的粗细可以通过点击Size架构中的Marks remove bold区域进行调整:
- 使用案例:这是折线图的实际线条。
-
参考线:通常不如趋势线常见,可以通过Format | Reference lines进行格式化:
- 使用案例:一条直线用于显示,例如,一个在仪表板视图中至少在一个维度上是静态的阈值。
-
虚线:不常用。要部署虚线,请右键单击视图中的空白部分,选择视图 | 显示虚线。接下来,单击视图中的某个点以显示虚线。要格式化虚线,请选择格式 | 虚线。只有在可视化中使用了至少一个坐标轴时,虚线才会生效:
- 使用场景:标记从图表上的某一点到坐标轴的线。这有助于您识别与该数据点相关的特定值。
-
零线:这些有时也被称为基准线,仅在视图中包含零或负值,或正值接近零时显示。通过格式 | 线条格式化零线:
- 使用场景:如果您对默认的零线不满意,可以格式化它。它有助于区分正值开始和负值结束的位置(反之亦然)。
-
网格线:这些应该是视图中最柔和的线条,也可以完全不显示。通过格式 | 线条格式化网格线:
- 使用场景:网格线有助于眼睛识别远离坐标轴的数据点值。使用它们可以帮助用户更好地理解可视化中的数值。
使用三到五个一组的带状图
由高表格文本或横向条形图组成的可视化应将维度成员分成三到五组。
请按照步骤操作,体验在 Tableau 中高效使用带状图:
-
请访问
public.tableau.com/profile/marleen.meier
以查找并下载与本章相关的工作簿。 -
导航到
带状图
工作表。 -
选择
Superstore
数据源,并将产品名称放置到行架上。 -
双击折扣、利润、数量和销售额。请注意,完成此步骤后,Tableau 会默认对每隔一行进行带状格式化。对于短表格,这种默认格式化没有问题,但对于高表格来说,可能会显得过于繁琐,并且在处理大数据集时可能会导致性能问题。
-
导航到格式 | 阴影,并在行带状图下设置带状大小,使每个带状图包含三到五行文本。务必为面板和标题设置适当的颜色:
图 11.1:格式化阴影
三到五个一组的带状图规则受 Dona W. Wong 的影响,在她的著作《华尔街日报信息图形指南》中,她建议使用细线将长表格或条形图分隔成三到五组,帮助读者横向阅读。
颜色规则
讨论印刷为黑白的书籍中的颜色规则似乎有些讽刺(要下载彩色图像,请看这里:packt.link/TybKH
)。当然,如果您在电子设备上阅读此书,则情况可能并非如此。然而,即使在单色设置中,讨论颜色也是相关的。例如,仅使用黑色文字传达的信息与使用灰色变化相比是完全不同的。以下是有助于确保您在各种环境中有效使用颜色的颜色规则列表。
保持颜色简单和有限
遵循基本色调,并仅提供少量(也许三到五种)色调变化。在他的书《功能艺术:信息图形和可视化导论》中,Alberto Cairo 提供了为什么这一点很重要的见解:
我们视觉工作记忆的有限能力有助于解释为什么在地图和图表上识别不同现象时不宜使用超过四五种颜色或象形图案。
尊重颜色的心理影响
每个地区都有一种无处不在的颜色词汇,它已经成为了第二天性。红色通常用于表达爱情或危险;在某些亚洲国家,它还可以代表财富,并且在婚礼礼服中很常见。绿色可以代表幸运,在墨西哥,绿色代表独立。绿色交通信号灯告诉我们前进,而红色告诉我们停止。同样,仪表板上的颜色通常具有特定目的。红色和橙色通常与负面表现相关联,而蓝色和绿色则与正面表现相关联。颜色的反常使用可能会引起混淆,因此请注意颜色的使用及您的观众及其解读。
考虑色盲友好
一次快速的 Google 搜索告诉我,“全球大约有 3 亿色盲人口。大约 12 名男性和 200 名女性中就有 1 人患有色盲。”因此,在您的职业生涯中很可能会有色盲或色觉缺陷的观众。色盲通常表现为无法区分红色和绿色,或蓝色和黄色。红/绿和蓝/黄在色轮的对立面上。
因此,这些颜色组合给色盲人士带来的挑战可以很容易地通过 Photoshop 等图像编辑软件重新创建。如果您不是色盲,将使用这些颜色组合的图像转换为灰度并进行观察。对于 8.0%的男性和 0.5%的女性而言,色盲问题立即显而易见!或者,使用以下网站上传您仪表板的图像,并体验您的用户可能如何看待所使用的颜色:www.color-blindness.com/coblis-color-blindness-simulator/
。
谨慎使用纯色
以下练习得到的颜色应该是非常鲜艳的红色、绿色和蓝色。根据显示器的不同,你甚至可能发现直视这些颜色有些困难。这些被称为纯色,应该谨慎使用,或许只用来突出特别重要的项目或者例如违反的阈值警报。
请按照以下步骤进行:
-
打开与本章相关联的工作簿,并导航到
纯色
工作表。 -
选择
超级商店
数据源,并将类别放置在行架和颜色架上。 -
将适合设置为整个视图。
-
点击颜色架并选择编辑颜色...。
-
在编辑颜色对话框中,依次选择家具、办公用品和技术,分别选择蓝色、绿色和红色:
图 11.2:颜色
亲自体验看这些纯色时,选择三种其他不那么鲜艳的颜色进行比较。过于鲜艳的颜色会使你的眼睛很累并且难以集中注意力。然而,颜色过于相似也很难区分。找到良好的平衡是关键。
选择颜色变化而不是符号变化
对用户来说,解读不同的符号需要比区分颜色更多的心理能量。因此,应该优先使用颜色变化而不是符号变化。
请看以下散点图的例子,以查看符号变化:
图 11.3:符号变化
观察颜色变化:
图 11.4:颜色变化
总结颜色规则时,请保持你的颜色调色板简单,并注意你所在地区和文化中颜色的含义。此外,请考虑你的观众可能存在色盲;工具可以帮助你明智选择颜色,而 Tableau 也提供色盲色板。过多的鲜艳颜色会让观众难以专注于重要的项目。最后,不要在一个视图中使用太多形状;而是用颜色来区分不同的类别。
可视化类型规则
此部分需要一本独立的书籍,并与许多其他学科如叙事、沟通和说服力相关联;因此,我们不会在这里花时间详细列出可视化类型的规则,而是强调一些经常讨论的规则。我们将考虑保持简单形状与复杂形状的对比,以及饼图的有效使用。
保持形状简单
太多的形状细节会妨碍理解。这是因为形状细节会将用户的注意力从数据上移开。考虑以下使用两种不同购物车图像的练习。
让我们看一下以下的练习步骤:
-
打开与本章相关的工作簿,并导航到
简单购物车
工作表。请注意,数据可视化图是一个散点图,展示了按总销售额和利润排序的前十名子类别。 -
导航到
My Tableau
库中的Shapes
目录。在我的计算机中,路径是C:\Users\Marleen Meier\Documents\My Tableau Repository\Shapes
。在你的电脑上找到相应的 Tableau 库并打开Shapes
目录。 -
在
Shapes
目录内,创建一个名为My Shapes
的文件夹。 -
在工作表的评论区参考提供的链接,下载本章相关资源。在下载的材料中,找到名为
Shopping_Cart
和Shopping_Cart_3D
的图像,然后将这些图像复制到My Shapes
目录中。 -
在 Tableau 中,访问
简单购物车
工作表。 -
点击形状货架,然后选择更多形状。
-
在编辑形状对话框中,点击重新加载形状按钮:
图 11.5:重新加载形状
-
选择My Shapes调色板并将形状设置为
Shopping_Cart
。 -
关闭对话框后,点击大小货架并按需调整。同时,可以根据需要调整其他可视化元素。
-
导航到
3D 购物车
工作表,然后重复步骤 6-9。不同之处在于,使用Shopping_Cart_3D
代替Shopping_Cart
。请查看以下屏幕截图,比较简单和 3D 购物车:
图 11.6:2D 与 3D
比较这两种可视化图。哪种购物车更具吸引力?可能你选择的是具有 3D 效果的购物车。那么,为什么不选择更具吸引力的图像呢?让可视化图更具吸引力只是一种次要考虑。主要目标是尽可能清晰高效地展示数据。简单的形状比复杂的形状更容易被快速直观地理解。此外,3D 图像的可爱效果很快会消失。
谨慎使用饼图
Edward Tufte 在他的著作《定量信息的可视化展示》中对饼图提出了尖锐的批评,认为表格总是比饼图更好,因为我们人类无法正确解读饼图的视觉维度。
目前数据可视化界的情绪大多支持 Tufte 的批评。然而,可能也有一些例外情况——也就是说,在某些情况下,饼图是最优的。考虑以下可视化图:
图 11.7:比较可视化图
哪种可视化图最能展示 A 占整体的 25%?显然是饼图!因此,或许更公平的做法是将饼图称为有限的,并且应该谨慎使用,而不是认为它们本身就不理想。
构建可视化往往是一种平衡行为。遇到来自书籍、博客、顾问,甚至是组织内部相互矛盾的方向并不罕见。有的人可能坚持使用每一像素空间,而另一些人则倡导简约和留白。有人建议采用引导式方法,而另一些人则推荐构建开放式仪表板,让最终用户自行发现路径。
前卫的类型可能渴望复杂的可视化,而更加保守的人则倾向于遵循传统。让我们探讨一些更常见的竞争性需求,并提出折衷方案。
使仪表板既简洁又强大
奥卡姆剃刀法则表明,任何问题的最简单解决方案可能是正确的。然而,有时即使是最简单的解决方案也可能相当复杂。这没关系!在 Tableau 仪表板中,复杂性不必被排斥。但对一些基本指南的清晰理解可以帮助作者明智地平衡简化需求与强大功能需求之间的折衷:
-
更频繁的数据更新要求更简洁的设计:一些 Tableau 仪表板可能接近实时。可能会使用第三方技术强制通过 Tableau Server 展示的浏览器每隔几分钟刷新一次,以确保显示最新数据。在这种情况下,设计应该非常简洁。最终用户必须能够立即看到所有相关数据,并且不应该将该仪表板用于深入分析。相反,一个每月更新的仪表板可以支持较高的复杂性,因此可以用于深度探索。
-
更高的最终用户专业知识支持更复杂的仪表板设计:了解你的用户。如果他们需要简洁、一目了然的可视化,那么保持仪表板简洁。如果他们喜欢深入分析,那么就根据需要设计。
-
较小的观众群体需要更精确的设计:如果只有少数人监控某个仪表板,可能需要高度定制化的设计。在这种情况下,规范可能会非常详细,复杂且难以执行和维护。这是因为小范围的用户群体有些期待,这些期待可能并非 Tableau 中容易实现的。
-
屏幕分辨率和可视化复杂性成正比:使用低分辨率设备的用户需要与仪表板简单互动。因此,这样仪表板的设计通常会相对简单。相反,高分辨率设备则支持更大的复杂性。
-
离屏幕的距离越远,仪表板元素越大:如果仪表板是为会议室观看而设计的,那么仪表板上的元素可能需要较大,以满足远离屏幕的人群的观看需求。因此,仪表板可能相对简单。相反,主要在最终用户桌面上查看的仪表板则可以更为复杂。
虽然这些要点都涉及简洁与复杂的对比,但不要把简单等同于容易。一个简单且设计精美的仪表盘可能比复杂的仪表盘更难制作。
正如史蒂夫·乔布斯所说,简单可能比复杂更难;然而,简单可以移山。
以良好的方式呈现密集的信息
通常,一张折线图最多应该有四到五条线。然而,有时你可能希望展示更多的线。通过展示多条线并让最终用户根据需要突出显示,可以达到一种折衷。下图显示了从 2000 年到 2012 年间,各国的互联网使用百分比。用户可以选择一个国家,选中的国家会改变颜色,并与其他国家进行比较。
我们可以在以下截图中看到这个例子:
图 11.8:多条线图
使用折线图与多条线图时,重点不应是比较一条线与其他某一特定线的表现,而是观察一条线在众多其他线中的表现。
讲述一个故事
在她的书《数据故事》中,南希·杜阿尔特详细解释了多种讲述数据故事的技巧,其中许多技巧与之前讨论的可视化设计理论有重叠。接下来,我们将聚焦于一些新的、专门针对故事讲述的方面:
探索数据点,深入钻研更低层级的聚合。使用工具提示中的可视化(请参见本章的《最大化仪表盘文档》部分)以及操作(请参见本章的《仪表盘最佳实践》部分)是一个很好的方法。
关联你的数据;例如,如果距离、大小、时间或速度难以理解,可以将其转化为人们熟知的事物。或者,“如果太阳和足球一样大,而月亮和……一样大,那么它们之间的距离就会是从这里到 x。”或者,举个很具体的例子,别直接显示糖分的毫克数,而是以糖块的数量表示,或者与推荐的每日摄入量进行对比。
使用修辞手法引导读者通过你对故事的看法,包括情感词汇、修辞性问题和感叹词。
如果你的数据与人类有所关联——而这通常是这样的——就要将其“人性化”。与人交谈,了解问题;然后你可以将定性信息添加到你的仪表盘中。要注意不要做假设。
你会意识到,讲故事并不像人们想的那么简单:
“几乎所有的东西都可以被计数和衡量。通过数据寻宝并发现黄金机会的每一刻都是令人兴奋的[…]. 在你职业生涯的旅程中,愿你掌握数据的科学,也掌握沟通数据的艺术。”
南希·杜阿尔特 – 《数据故事》
你可以选择通过指导性仪表板设计讲述故事(即一个引导观众的仪表板),或者选择构建一个允许发现多个故事的仪表板。你的选择将根据给定的数据集和受众而有所不同。如果你选择创建一个故事发现的平台,确保采用 Grimwade 在 Alberto Cairo 的《功能性艺术:信息图表与可视化导论》一书中建议的纽约时报方法:“提供提示、指引和良好的文档,帮助最终用户成功地与您想要讲述的故事互动,或成功地发现他们自己的故事”。
最大化仪表板上的文档内容
在讲述故事部分,我们考虑了提供提示、指引和良好文档的建议,但存在一个问题。这些内容会占用空间。仪表板空间是宝贵的。通常,Tableau 作者会被要求将更多的内容挤进仪表板,因此,他们寻找减少空间占用的方法。以下是一些建议,旨在最大化仪表板上的文档内容,同时尽量减少对屏幕空间的影响:
-
为清晰沟通制作标题:标题是必要的。不仅仅是仪表板和仪表板上的工作表的标题,还包括图例、过滤器和其他对象的标题。这些标题可以用于有效且高效的文档编写。例如,过滤器的标题不应仅为市场,而应改为选择一个市场。注意这是一个命令句。用户被告知要执行某个操作,这是一条有用的提示。为标题添加几个词通常不会占用太多仪表板空间。
-
使用副标题传达指令:副标题会占用一些额外的空间,但不需要占用太多。在标题下方的小号斜体字体是用户自然会寻找指导的明显位置。考虑一个例子:红色代表损失。这个简短的句子可以作为副标题,从而可能消除图例的需求,实际上节省了空间。
-
使用直观的图标:考虑从一个仪表板导航到另一个仪表板的使用场景。当然,你可以将某个操作与一些超链接文本关联,文本中声明该操作会导航到另一个仪表板。但是,当一个操作可以与一个小而不起眼的箭头(例如 PowerPoint 中本地使用的箭头)关联时,这似乎不必要,这样同样可以传达相同的意思。
-
将更为详细的文档存储在与帮助图标相关联的工具提示中:应用程序右上角的小问号很常见。目前,我正在 Word 中编写这一章节,Word 也有这样的问号。在 Tableau 仪表板中,常常使用灯泡图标来实现相同的功能。这清楚地传达了需要额外帮助时该去哪里。如下所示的练习中,创建这个非常简单。
按照以下步骤创建一个信息丰富的工具提示来帮助用户:
-
打开与本章相关的工作簿,并导航到
Help
工作表。 -
将鼠标悬停在工作表上的灯泡图标上,注意出现的文本:
图 11.9:Lorem ipsum
请注意,前述截图中的Lorem ipsum...文本通常由网页设计师使用,网页设计师从排版工人那里借用此文本,排版工人使用这段拉丁文本作为占位符已有数百年历史。访问www.loremipsum.io了解更多信息。
该工作表中的文本是通过工作表 | 工具提示部署的。此工作表可以巧妙地放置在仪表板上(例如,右上角),以提供非常详细的文档,同时对空间影响最小。
可视化类型
另一个重要的规则集是:对于不同的数据类型,应该使用什么可视化类型!这里列举几个例子:
-
使用脊柱图表示偏差数据
-
使用散点图或热图表示相关性
-
使用折线图或地震图表示时间序列
-
使用条形图、棒棒糖图或坡度图表示排名
-
使用直方图或箱型图表示分布
-
使用树状图、网格图或瀑布图表示部分与整体的数据关系
-
使用条形图、雷达图或子弹图来反映量级
-
使用流图、点密度图或热图表示空间数据
-
使用桑基图、瀑布图或网络图表示流动
这个清单远不完整;如果你想获取更多关于这个主题的信息,我强烈推荐查看 Andy Kriebel 创建的Visual Vocabulary,该作品灵感来自《金融时报》(ft-interactive.github.io/visual-vocabulary/
),可以在 Tableau Public 上找到:public.tableau.com/profile/andy.kriebel#!/vizhome/VisualVocabulary/VisualVocabulary
。每个类别包含多个合适的可视化类型;你可以点击某个类别查看详情:
图 11.10:视觉词汇
例如,这里是分布类别的详细页面:
图 11.11:视觉词汇 – 分布
选择一个与图表数据相匹配的可视化类型是创建优秀仪表板的第一步。将这项工作作为优先事项,投入时间去研究这个主题;它是大多数项目中的一个关键决策。
保持可视化简洁
有些人厌倦了不断看到相同的图表类型。这会导致类似“我们能否给仪表板增加一些变化?”的要求。通常,应该抵制这种情绪。正如本章开头所说,仅仅为了追求变化而引入不同的可视化类型是适得其反的。然而,也有一些时候,使用较少见的可视化类型可能比使用更流行的类型更为合适。那么,何时是这种时候呢?
在以下情况下使用较少见的图表类型:
-
该图表用于吸引最终用户的注意力。
-
图表类型能更有效地展示数据。
有时候,一种不太常见的图表类型可以有效地吸引最终用户的注意力,以达到某个目标,比如幽默、突出一个关键点,或者让可视化更具记忆点。一个这样的例子可以在 Tableau 404 错误页面上找到。请访问www.tableau.com/asdf
,观察一个被塞满的气泡图中的大脚怪。请注意,这个页面会不时变化,因此你可能会看到埃尔维斯、外星人或其他可视化内容。
第二点的一个例子是使用树图代替饼图。这两者都是非笛卡尔图表类型(没有行或列字段的可视化),用于展示整体的一部分。饼图是两者中更常见的,但树图通常能更好地呈现数据。至少有三个原因:
-
树图可以表示更多的数据点。
-
树图的矩形结构更有效地适配显示器空间。
-
与树图的分段大小相比,饼图的切片大小更难区分。
有时候,使用不太常见的可视化类型可能会引发抱怨:我喜欢饼图。给我一个饼图! 在这种情况下,可能可以进行折衷。稍后在本章中,我们将讨论工作表交换。正如你将会学到的,工作表交换可以让最终用户决定查看哪种可视化类型。最终,如果无法达成折衷,并且负责发放你工资的人要求使用一个不太理想的图表类型……那么,我建议你按他们的要求去做!
仪表盘设计
现在我们已经完成了可视化理论的讨论,让我们转向仪表盘设计。我们将从一个问题开始:什么是仪表盘?这个问题很难回答;然而,在许多组织中,日常对话中的使用表明人们对仪表盘有一个明确的概念。此外,搜索引擎的结果提供了大量的定义。但这些定义可能会有显著不同,甚至是自相矛盾的。
为什么定义一个仪表盘如此困难?部分原因在于数据可视化整体以及仪表盘设计特别是作为一个新兴领域,它融合了许多其他学科。这些学科包括统计分析、图形和网页设计、计算机科学,甚至新闻学。一个包含这么多组成部分的新兴领域是一个不断变化的目标,因此很难给出明确的定义。
就我们的目的而言,我们将从 Stephen Few 在 2004 年首次出现在《Intelligent Enterprise》杂志上的定义开始。他指出,仪表盘是我们需要查看的关键统计数据的可视化展示,所有这些数据都集中在一个屏幕上,以便可以在一个地方查看这些信息。然后,我们将扩展并调整这个定义,以适应 Tableau 仪表盘的需求。
尽管这个定义不错,Tableau 的定义更加广泛。例如,Tableau 仪表板可能只包含在一个屏幕上,但可以设计(而且非常有效地设计)需要滚动才能查看的内容。更重要的是,Tableau 仪表板通常是互动的,这为探索、分析和设计提供了广泛的选择。因此,让我们尝试一种以 Tableau 为中心的仪表板定义:
Tableau 仪表板是一种显示,包含一个或多个数据可视化,旨在使用户快速查看度量标准。此显示可以提供交互元素,如过滤、突出显示和深入探索功能,以进行进一步的探索和分析。
仪表板布局
仪表板的布局之所以重要,与杂志折页或网页布局的重要性相同。将正确的信息放在正确的位置有助于观众快速高效地获取信息并得出结论。
为了体会这一事实,请考虑上次在糟糕构建的网页中寻找重要信息时的情形。你的时间本可以更好地用于实际应用那些重要信息!
黄金分割布局
你可能听说过斐波那契数列或黄金分割。由于你可能已经好几年没上数学课了,简短的提醒可能会有所帮助。
斐波那契数列是一系列的数字,其中每个数字都是前两个数字的和,例如,1, 1, 2, 3, 5, 8, 13, 21。
当矩形的最长边与最短边的比率约为 1.618 时,就实现了黄金矩形。这个比率被称为黄金分割。数学上,黄金分割表示如下:
当将斐波那契数列的每个数字除以前一个数字时,你可以看到与黄金分割之间的关系;例如,考虑以下序列:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34
这导致以下情况:
现在,让我们考虑使用黄金分割的仪表板布局。这里展示的布局是由矩形构成的,每个矩形的长度或高度都是下一个的 1.618 倍。展示了螺旋(称为黄金螺旋),以演示矩形的顺序:
图 11.12:黄金分割(https://www.pixpa.com/blog/golden-ratio)
斐波那契数列/黄金矩形/黄金比例在大自然和历史中无处不在。许多贝壳和花朵都与斐波那契数列紧密相关。吉萨的大金字塔似乎是在考虑黄金比例的情况下建造的。菲迪亚斯可能使用了黄金比例来设计雅典帕台农神庙的雕像。事实上,帕台农神庙本身就是按照黄金矩形的比例设计的。即使最近的研究表明黄金比例无法精确到小数点,然而大自然和艺术仍然非常接近其背后的数学原理。
那么,前面图示中的黄金比例是否代表理想的仪表板布局?也许更恰当的说法是,这张图代表了一种可以接受的仪表板布局。理想的布局并不是在抽象中找到的,而是在应用中找到的。仪表板布局有时可能接近黄金比例,但正如我们所看到的,其他仪表板布局在不同的场景中可能更为合适。
这里展示的仪表板(该仪表板也可以在本章附带的 Tableau 工作簿中找到)使用了黄金矩形:
图 11.13:黄金矩形
请注意,这个例子并没有尝试通过越来越小的矩形来遵循黄金比例。存在实际的限制。
黄金矩形布局特别适用于引导观众从粗到细的粒度。在这个例子中,仪表板的左侧部分展示了最粗的粒度——17 个子类别。接下来是地图。最后,散点图展示了最细的粒度。创建遵循这一路径的操作将为最终用户提供自然的交互体验。例如,最终用户可能首先点击表格,然后点击宾夕法尼亚州的状态,以观察散点图中的异常值。
四分布局
四分布局将仪表板分成四个大致相等的象限。它实现起来很简单。在一个空白的仪表板上,直接在仪表板窗格中双击四个工作表。结果是一个四分布局,尽管可能需要做一些小调整,以适应图例、过滤器和参数。要查看四分布局,请参考图 11.7中的示意图。
小型多重布局
小型多重布局在单个仪表板上显示多个视图。像四分布局一样,小型多重布局可以通过在仪表板窗格中双击每个所需的工作表来简单实现。
小型多重布局在查看重复使用相同可视化类型的信息时非常有用。此外,一致的主题也很重要;例如,以下截图展示了美国各州的利润表现主题。尝试使用多个可视化类型和多个主题来创建小型多重布局,可能会显得杂乱无章,且难以交互:
图 11.14:小型多重布局
有些布局本质上是主题的变种。例如,一个布局展示三个视图,其中一个视图在仪表板上占据了其他两个视图两倍的空间,这可能本质上是四分之一布局的变种。其他布局则难以简单分类,且是特定仪表板的独特设计。不管怎样,希望这些内容能为你未来设计仪表板时提供一些思路。
我们在讨论妥协时已经提到过下一部分——工作表切换,这对于妥协是一个非常好的功能。如果你的利益相关者要求你构建某些你知道可能不太好或不符合最佳可视化实践的东西,你始终可以添加工作表切换,这样既能让利益相关者满意,又能为其他用户提供一个替代方案。我们将在下一部分进行工作表切换练习。
利用工作表切换
工作表选择,通常称为工作表切换,允许 Tableau 作者隐藏和显示可视化内容,以及将工作表从仪表板上移入或移出。
这些技术已经以创造性的方式使用,并取得了非常令人印象深刻的结果。例如,Tableau Zen Master Joshua Milligan 使用工作表选择创建了包括井字游戏和二十一点在内的各种游戏。就我们的目的而言,我们将继续使用工作表选择来帮助创建符合我们讨论的设计原则的仪表板。
在 谨慎使用饼图 部分,我们讨论了饼图和树状图,并指出树状图是一种更好的可视化方式。然而,人们通常更习惯使用饼图。作为妥协,在第一个练习中,我们将回顾一个示例,允许最终用户选择是查看饼图还是树状图。
请按照以下步骤操作:
-
打开与本章相关的工作簿,并导航到
Population Pie
工作表。 -
选择
World Indicators
数据源并注意计算字段,名为Blank
。该代码由单引号组成,中间有一个空格。 -
将 Blank 放到 Columns 架上。
-
在视图中,通过 Ctrl + A 或拖动框选整个饼图来选择所有的饼块。非笛卡尔可视化类型(例如,没有字段放在行或列架上的可视化类型)需要此步骤才能使工作表切换功能生效。否则,当将工作表放置到仪表板上的垂直容器中时,工作表将无法正确拉伸以填充容器的宽度。
-
右键点击任意饼块,选择 注释 | 标记。
-
在弹出的对话框中,删除除
<Country>
外的所有文本:
图 11.15:注释
-
根据需要定位和格式化注释。请注意,在饼图部署到仪表板上后,可能需要进行额外的调整。
-
创建一个名为
Select Chart Type
的参数,并设置以下选项:
图 11.16:参数
-
创建一个名为
工作表切换
的计算字段,包含以下代码:[Select Chart Type]
-
将工作表切换放到过滤器架上,并在弹出的对话框中选择饼图。
-
右键点击选择图表类型并选择显示参数控制以显示该参数。
-
导航到
人口树
工作表。 -
将空白放到列架上。
-
将工作表切换放到过滤器架上,并在弹出的对话框中选择树形图。
-
如果树形图没有显示为选择项,请确保选择图表类型参数已切换为树形图,然后点击确定:
图 11.17:过滤器
-
创建一个新的仪表板,命名为
拉丁美洲人口
。 -
在仪表板窗格中,双击垂直以在仪表板上放置一个垂直容器。
-
在仪表板窗格中,双击人口树和人口饼图,将它们添加到视图中。
-
右键点击人口 树和人口饼图的标题,然后为两个标题选择隐藏标题。
-
将人口地图和人口变化放到仪表板上,然后根据需要定位它们:
图 11.18:仪表板
-
按住 Shift 键并拖动选择 图表类型参数,浮动控件;根据需要定位它。
-
删除所有图例和快速过滤器。格式化、文档化并根据需要定位所有仪表板元素。用户现在可以决定是否查看树形图或饼图。
以下是带树形图的仪表板示例:
图 11.19:带树形图的仪表板
以下是带有饼图的显示:
图 11.20:饼图
如果某些用户偏好某种可视化方式,您可以使用工作表切换功能。接下来,我们将创建一个可以在仪表板上隐藏的过滤菜单。在最大化仪表板文档部分中提到,仪表板空间非常宝贵。因此,在第二个练习中,创建可折叠菜单,我们将回顾一个示例,使用工作表选择功能允许最终用户显示或隐藏过滤器,从而更有效地利用屏幕空间。
创建一个可折叠菜单
请按照以下步骤学习如何将可折叠过滤菜单添加到您的仪表板:
-
复制我们在前一个练习中创建的仪表板并将其重命名为
可折叠菜单
。如果您没有完成前面的练习,可以使用本章提供的解决方案工作簿中的仪表板。 -
选择仪表板上的任何工作表并点击箭头;选择显示国家和仅年份的过滤器。
图 11.21:过滤器
- 这两个筛选器将被放置在仪表板右侧的容器中。双击其中一个筛选器顶部中间的两条水平线,以选择容器。周围的线条将变为蓝色。选择添加显示/隐藏按钮:
图 11.22:添加显示/隐藏按钮
- 请注意,X符号出现在筛选器旁边。在演示模式下,这个按钮现在可以用来最小化筛选器:
图 11.23:国家
在本节中,我们了解到,通过使用容器和筛选器,Tableau 可以在容器内自动调整所选工作表的大小。这个功能可以让它看起来像是可以切换工作表。然而,Tableau 基本上只是最小化一个工作表并最大化另一个工作表,尽管这对用户眼睛不可见。真聪明,不是吗?
完成这个练习后,你可能会想,好的,筛选器在仪表板上没有显示,但它们仍然在旁边可见。虽然在 Tableau Desktop 中这是正确的,但如果你将工作簿上传到 Tableau Server 实例,你会注意到当点击菜单图标时,筛选器会出现和消失,而不会显示在旁边。
可折叠菜单是一个非常好的附加功能,有助于简化仪表板。如果你阅读过本书的上一版(第三版),你可能还记得,当时要让可折叠菜单正常工作是一个繁琐的过程——更多的是一种变通方法,而非一个功能。现在,通过添加显示/隐藏按钮,这变得非常简单。用户可以专注于数据,仅在需要时使用筛选器。
仪表板最佳实践
可视化最佳实践不仅仅限于视觉特性;动作、筛选器和数据组织同样重要。本节将提到 Tableau 提供的一些功能。它们中的每一项都能帮助你改善用户体验或跟踪你所构建的内容——因为有时在处理多个不同工作表时,你可能会迷失方向。
我们将首先讨论六种不同类型的动作,然后是下载和导航对象,接着是使用功能,最后是项目层级。这些都能提升仪表板构建体验。让我们开始吧!
动作
我们之前隐含地讨论过几次这个问题,但现在让我们明确看看通过使用动作,我们可以在可视化和仪表板设计中实现什么。动作起作用的地方是,当你希望用户通过点击或悬停在可视化数据上进行跳转时。如果你有大量数据需要展示,而不想将所有内容放在同一仪表板上,这会非常有用。你也不应该这么做,因为这样会分散注意力,且如果是层级数据,动作是实现 drill-down 技术的完美方式。
以下章节将解释你可以在 Tableau 中使用的所有不同动作,以增加交互性,支持简洁而有效的仪表盘设计。
筛选动作
在此示例中,我们将使用筛选动作显示最初隐藏的数据。通过这样做,我们确保一次只展示较小的数据块,用户可以深入查看任何感兴趣的内容。请按照以下步骤操作:
-
请打开工作表
按州统计的数量
:图 11.24:地图
你可以在前面的截图中看到,每个州表示一个特定产品的销量。但如果能通过点击某个州看到更多详细信息,那该多好?为了实现这一目标,我们需要设置动作。
-
首先,我们需要第二个工作表,作为我们在动作中使用的目标。请打开工作表
按州按类别统计的利润
:图 11.25:表格
你可以在前面的截图中看到,展示了每个州、每个类别以及相应的利润。
-
现在,返回到工作表
按州统计的数量
,启用一个动作,提示用户跳转到按州按类别统计的利润
工作表,并在用户点击的州上进行筛选。 -
在
按州统计的数量
工作表中,选择工作表 | 动作;接下来将显示以下窗口。点击添加动作按钮并选择筛选...:
图 11.26:筛选动作
- 在下一个窗口中,添加一个名为映射到表(数量到利润)的筛选动作,并复制设置,如截图所示。然后,点击确定:
图 11.27:筛选动作参数
- 如果你现在点击工作表
按州统计的数量
(源工作表)中的某个州,Tableau 会在目标工作表中查找该州并进行筛选。以下是点击德克萨斯州后的示例:
图 11.28:筛选后的表格
本节讨论的筛选动作可以用来简化你的仪表盘设计。遵循设计原则往往意味着“少即是多”,如果你有很多数据点要展示,使用钻取或筛选动作可以帮助你实现这一目标。先展示高级数据,然后通过筛选动作展示更详细的数据层。你还可以在标题下方为用户添加一句话,例如点击某个州以查看更详细的信息。
高亮显示动作
其他选项,例如高亮操作,对于同一页面上的工作表更为有用,因为它仅会高亮显示相关字段。您可以在同一个仪表板上展示所有数据,但高亮操作使用户更容易找到相关数据点。按照以下步骤操作:
- 请打开仪表板
Qty & Profit
,该仪表板结合了我们之前使用的两个工作表:
图 11.29:仪表板
- 点击仪表板 | 操作,这次,复制以下高亮操作的参数:
图 11.30:高亮操作
- 上述参数意味着,在
Qty
&
Profit
仪表板上,我们的数据源工作表将是Quantity
by
State
,并通过悬停,目标工作表上的相应数据将被高亮显示。在此情况下,唯一的公共数据是State(州),因此高亮操作将仅考虑State。结果如下所示:
图 11.31:高亮操作仪表板
通过在地图上悬停在亚利桑那州,右侧表格中的相同州将被高亮显示。如您所见,实现高亮过滤器可以帮助用户更快地找到相关数据点。与导航操作相比,该过滤器应在同一页面上的工作表中使用,并作为视觉帮助来查找数值。
URL 操作
下一个操作是 URL 操作。这个操作允许您在仪表板中点击数据点时打开一个 URL。按照以下步骤进行操作:
-
转到
Quantity by State
工作表并打开工作表 | 操作。 -
删除所有可见的操作。
-
现在,选择添加操作并选择跳转到 URL...。复制所有参数,如下所示,然后点击维基百科 URL 旁边的箭头。您的数据源中的字段将会显示,您可以向 URL 添加一个字段,该字段将根据仪表板自动返回一个值。选择State(州):
图 11.32:URL 操作
- 点击数量按州工作表中地图上的一个州,查看维基百科如何打开相应的网页。
URL 操作非常有用,当您想向用户展示网站上可用的附加信息时,可以使用它。您还可以使用纬度和经度值打开 Google 地图,或者将 URL 操作链接到公司内部网站,提供法规或票务系统等信息。
导航操作
下一个操作通常与按钮结合使用,以提供更具互动性的体验。您将不再通过点击标签从一个页面跳转到另一个页面,而是添加按钮并进行操作,直接跳转到特定工作表:
-
进入
Qty & Profit
仪表板,创建一个名为String
的计算字段,代码为"Go back to […]"
。稍后这将作为我们的按钮。 -
打开一个新的工作表并命名为
Button
。 -
将计算字段String通过拖放详细信息和标签放置到其中。
-
从标记卡片下拉菜单中选择形状,并选择你选择的任何形状(和颜色)。
-
隐藏标题并禁用工具提示。
-
点击标签并选择底部居中对齐。结果将如下所示:
图 11.33:按钮
- 返回到
Qty & Profit
仪表板,选择浮动,然后将Button
工作表拖动到仪表板上——例如,放在左下角:
图 11.34:仪表板上的按钮
- 点击仪表板 | 操作并复制以下参数:
图 11.35:前往工作表操作
- 点击确定并点击
Qty & Profit
仪表板上的Button
工作表。
它现在将带你返回到Latin
American
Population
仪表板!如今,由于发布了一个特定的导航对象,这个操作使用得较少,但为了完整性,了解它还是很有用的。
参数操作
接下来的步骤是参数操作。它用于通过点击仪表板上的数据点来改变参数,而不是使用参数控制。按照以下步骤操作:
- 将
Categories
工作表放置到Qty & Profit
仪表板上——例如,放在右上角:
图 11.36:参数操作
- 点击仪表板 | 操作并复制以下参数:
图 11.37:参数操作设置
-
创建一个名为
Cat Param
的计算字段,代码如下:If [Parameter Action] = [Category] Then [Category] Else "" END
-
将Cat Param放置到
Profit by State by Category
工作表的过滤器架上,选择空值并启用排除,如下所示,然后点击确定:
图 11.38:类别过滤器
- 如果你现在将鼠标悬停在顶部的任何类别上,以下表格将相应调整:
图 11.39:类别过滤仪表板
设置操作
我们将讨论的最后一个操作是集合操作。集合将你的数据分为两类,In或Out。如果你根据以下列表创建一个名为动物的集合:[cat, tree, dog, leopard, house, car],你会将 cat、dog 和 leopard 标记为In,将 tree、house 和 car 标记为Out。然后你可以将这个集合作为仪表板上的新字段。按照以下步骤操作:
- 转到
Qty & Profit
仪表板并选择西部州加利福尼亚、俄勒冈和华盛顿。注意,弹出窗口显示了右上角的两个圆圈。使用这个图标是创建集合的一种方式;点击它:
图 11.40:集合操作
-
以下窗口将打开;点击确定:
图 11.41:集合
在数据窗格中,已经创建了一个新的字段——名为
West Coast
的集合。 -
通过如下方式更改
Profit by State by Category
工作表,查看它如何工作:从行中移除State,并添加West Coast(你可以从筛选架中移除Cat Param,也可以保留它,两者都有效):图 11.42:设置字段状态
Out带中的利润考虑了所有州,除了
加利福尼亚
、俄勒冈
和华盛顿
,而In带则显示这些三个州相对的数字。 -
返回
Qty & Profit
仪表板并选择仪表板 | 操作,将以下参数复制到集合操作中:
图 11.43:集合操作参数
- 如果你现在点击任意一个或多个状态,所有选中的状态都会成为集合的In组。因此,利润数字将显示你所选择的状态与其他状态之间的利润差异,如下所示:
图 11.44:集合操作仪表板
- 你还可以通过点击并选择编辑别名…来重命名In和Out值:
图 11.45:编辑别名…
以上是六个 Tableau 操作;通过筛选和高亮操作,你可以让用户通过下钻更容易地找到更详细的信息。跳转到工作表和跳转到 URL操作可以看作是互动按钮,会将用户重定向到额外的信息,无论是网站还是其他工作表。最后,更改参数和更改 集合操作可以用于调整预定义的单一或多个值,从而让用户从不同的角度与数据进行交互和分析。
下载
除了动作,用户体验中的另一个组成部分是内置的下载按钮。将此类按钮添加到仪表板中,可以让用户在喜欢的情况下与他人共享图像或截图,或者用于文档编制或演示。添加按钮非常简单,只需按照以下步骤操作:
- 打开仪表板
Golden Rectangle
,选择左下角的浮动,然后将下载拖到右上角:
图 11.46:下载按钮
- 在演示模式下,点击(Alt + 点击用于非演示模式)新添加的按钮;一个打印为 PDF的弹出窗口将出现:
图 11.47:打印为 PDF
- 点击确定,然后你就可以从桌面打开仪表板的 PDF 文件。
就这样!只需一步,你就可以让很多喜欢打印的用户非常高兴。
Tableau 工作簿以及 Tableau 仪表板可能会变得非常复杂,具体取决于用于创建它们的工作表数量。幸运的是,Tableau 提供了像项目层级和使用于这样的组织功能来帮助我们。
项目层级
正如我们在创建可折叠菜单部分中简要提到的,如果你打开拉丁美洲人口
仪表板,你会注意到项目层级位于布局窗格的左下角。通过点击Tiled旁边的箭头,你将能够看到仪表板的所有不同部分以及每个容器中使用的工作表。你还可以发现容器中的容器以及布局的结构:
图 11.48:扩展的项目层级
尝试在项目层级中保持逻辑顺序。这将使你以后更容易对仪表板进行更改。你选择的逻辑完全取决于你;我常用的一个方法是从高层到更详细,从最重要到最不重要,或者从空间较大的工作表到较小的工作表。关于如何保持仪表板简洁的一篇好文章可以在这里找到:www.thedataschool.co.uk/joe-beaven/layout-containers-how-to-get-your-item-hierarchy-under-control
。
使用于
使用于功能会显示某个工作表在哪些仪表板中被使用。只需右键点击工作表并选择使用于:
图 11.49:使用于
这个功能特别有用,如果你想对工作表进行更改。在执行之前,你可以检查哪些仪表板会受到影响,这样破坏现有仪表板的风险将大大降低。
额外内容
当我第一次开始使用 Tableau 时,我非常喜欢并且现在仍然是 Makeover Monday 的忠实粉丝(www.makeovermonday.co.uk
)。Makeover Monday 是由 Eva Murray 和 Andy Kriebel 主办的一个项目。每个星期一,Tableau 社区(你)会获得一个数据集和一个可视化,并被要求改进它。这些数据集可能来自报纸或网站等地方。参与者将分析数据集,构建仪表板,并通过 Twitter 发布改进后的版本,使用标签 #makeovermonday。如果你将社区的作品与原始作品进行比较,你一定会学会看出哪些仪表板效果最好,哪些设计最符合你的喜好,从而你可以慢慢培养自己的风格,特别是在参与其中时。
Makeover Monday 第一年学到的经验总结成了同名的书籍。在 2022 年,Makeover Monday 暂时休整,但现在以稍有不同的形式回归,由 Andy 单独领导。值得一试。以下是一些示例和我对它们为什么有效的解释;你将会看到我们在本章中讨论的规则(我会将其放在括号中):
第一个例子发布在 The Guardian,显示了 2020 年 1 月英国出口商品的减少。
数据链接:data.world/makeovermonday/2021w13
。
图 11.50:英国出口
什么有效?
使用折线图(规则:保持可视化简单)来展示时间序列数据是个好主意。我还喜欢线条是红色的(规则:颜色的心理学意义),因为这个可视化展示的是负面信息,出口急剧下降。Y 轴表示这些变化的货币价值,给我作为用户一个关于绝对损失的概念。
现在让我们看看 Makeover Monday 的人们都做出了什么:
Kimberly Furdell 创建了图表 图 11.51,在继续阅读之前,问问自己,和原始可视化相比有什么不同,哪一个你更喜欢,为什么?
可视化链接:public.tableau.com/app/profile/kimberly.furdell/viz/UKexportstoEU_16172321299550/Dashboard1
。
图 11.51:脱欧后出口
为什么它更有效
这篇文章中讲的故事出现在《卫报》,讲述了 2021 年 1 月相比 2020 年 1 月,出口下降了 40%。原始可视化中并没有明确说明这一数字与去年相关,而 Kimberly 在她的可视化中提供了足够的信息,你无需阅读完整的文章就能理解(规则:最大化仪表盘文档化)。为了进一步支持故事线,Kimberly 在更改图表方面做得非常出色。
这个可视化效果更好,因为Y轴显示的是百分比。现在,你可以清楚地看到 2021 年 1 月的下降比 2020 年的下降更为严重,后者由于绝对值的特性,看起来与原始图表相似。通过增加更多年的时间序列数据,强调了这些变化已经超出了过去几年的范围。她的仪表盘上的灰色线条代表了不同的出口类别,因此,用面积图表示总值,用线图表示细节(规则:呈现密集信息时,谨慎使用纯色)是个很好的主意。表示这一时期事件的参考线使得故事更加完整(规则:讲述一个故事)。最后,用户想知道哪一类别对剧烈的出口下降贡献最大时,可以从下拉菜单中选择第二个视图,横向条形图(设计:工作表切换)。
接下来,我们将看看另一个 Makeover Monday 挑战以及两个如何做得更好的例子。
这一次,我们关注的是不同知名连锁咖啡中的咖啡因含量。文章和数据最初发布于 www.which.co.uk。
挑战链接:data.world/makeovermonday/2023w9
。
在这里你可以看到原始的可视化,我个人认为它还不错:
图 11.52:咖啡
什么有效?
咖啡杯的图像很不错;无需查看表格或阅读标题,你就能知道这个可视化是关于咖啡的。它会吸引你的注意力。颜色使用有限,但背景不是我最喜欢的;蓝色引人注目,但与主题无关,且略显沉重。表格却很有效;它让你可以轻松比较不同品牌的饮品和同一饮品在不同品牌之间的差异(规则:保持简单且稳健)。
显示咖啡因含量和毫升数几乎是过多的信息,可以更好地进行标准化。不过,让我们看看 Tableau 社区有什么想法。
这个第一个例子,图 11.53,是由 Will Sutton 发布的。他创造了一个故事,每一页都是朝着改进版本的步骤。真是个好主意!
图 11.53:标注
为什么它效果更好
它之所以效果更好,部分原因可以从横向条形图旁边看到;数字被放置到了情境中(规则:讲故事)。除此之外,Will 将表格改成了一个非常简单的条形图;他专注于一种饮品,并通过深红色标出最高的健康风险,即浓缩咖啡(规则:让仪表板简单且强大,简单的颜色)。他带领用户走过一个故事,而原始表格则留下了很多上下文和未知问题的空间。
但我会展示一个重新设计的版本,包含所有咖啡链和所有饮品;下一个是由 Gabriela Comanescu 制作的。
图 11.54:咖啡因
为什么它效果更好
Gabriela 采用了原始帖子的主题,使用咖啡作为图像来吸引用户的注意。然而,她使用的是一张真实的咖啡豆图片作为可视化的背景,而不是插图。她的颜色选择非常简单;字体保持在接近白色的颜色,几乎可以看作是咖啡上面的牛奶(规则:简单的颜色)。但我最喜欢的是她将数据标准化。对于所有饮品,她展示的是每 100 毫升中的咖啡因含量(毫克)。这样每种饮品都可以进行比较,因此,将它们绘制成圆形条形图是很有意义的。用户几秒钟内就能看到每种饮品的最高咖啡因含量,并且能够相互比较。使用圆形条形图非常聪明,因为它看起来像是在搅拌咖啡(规则:让仪表板简单且强大,展示密集信息,以及颜色的心理暗示)。
这就是我对 Makeover Monday 的看法,希望到现在为止,你也已经成为它的粉丝。如果你有一天推特发布了你自己版本的任何数据集,请使用标签 #MasteringTableau,这样我和本书的读者可以查看你的作品。
最后但同样重要的是,我强烈推荐的另一个网站是 Visual Capitalist (www.visualcapitalist.com
)。它的仪表板设计得非常完美,你真的应该尝试并从中学习。
总结
我们从考虑可视化设计理论开始本章内容。我们讨论了格式化规则、颜色规则以及关于哪些可视化类型应该使用,哪些应该避免使用的规则。我们还探讨了当最终用户表达出相互矛盾的设计目标时,如何进行妥协。接着,我们讨论了仪表盘设计原则,涵盖了三种流行的布局:黄金矩形、四分之一布局和小多个布局。
随后,我们探讨了如何使用工作表选择技巧来支持良好的设计。具体来说,我们研究了如何让最终用户选择查看哪种可视化类型,以及如何隐藏和显示过滤器,以便更好地利用屏幕空间。接下来,我们讨论了为提供更好的用户体验而设计的操作和下载按钮,此外还包括项目层次结构和Used In功能,这对于组织仪表盘非常有帮助。这反过来将有助于改进布局设计。最后,为了将我们学到的所有内容结合起来,我们分析了三个 Makeover Monday 仪表盘,并解释了为什么这些设计符合之前讨论的规则。
在下一章中,我们将重点关注使用案例。从数据集到产品将是本章的主题,我们将通过地理空间数据等进行实践。你在前几章中获得的知识将非常有用!
在 Discord 上了解更多
要加入本书的 Discord 社区——在这里你可以分享反馈、向作者提问,并了解新版本——请扫描下方的二维码:
第十二章:利用高级分析
本章重点介绍高级自助分析。自助分析可以看作是一种商业智能形式,企业中的人员被鼓励自己在数据集上执行查询,而不是将查询请求提交到 IT 团队的待办事项中。然后,可以进行查询分析,这将有助于产生更多的洞察力和数据驱动的决策。那么,如果这是你第一次做自助分析,你如何开始创建有用的自助仪表板呢?你如何从一个数据集到一个产品呢?你是否曾问自己,其他人是如何开始做仪表板的,如何清理数据,以及如何设计仪表板的?如果是这样,那么本章正是为你准备的!我想和你分享三个使用案例,它们以思维列车的方式写成,目的是让你了解我是如何工作的。请注意,这仅仅是我的个人经验;有很多不同的方法可以实现你的目标。
我们将覆盖以下主题:
-
可视化世界指数相关性
-
使用芝加哥交通违规数据进行地理空间分析
-
使用距离度量扩展地理空间分析
现在我们已经进行了介绍,可以开始处理第一个使用案例。
可视化世界指数相关性
想象一下,你正在处理世界指数数据集,而你的直属经理给你以下任务:
为我创建一个仪表板,能够轻松地显示所有相关的世界指数及其分布。我需要它在明天早上之前完成。
现在,在继续阅读之前,花几分钟时间思考一下你将如何处理这个任务。数据集包含 67 列不同的指数,比如出生登记、排放值、进出口和森林面积,分为 188 行,每一行代表一个国家。
写下你计划的步骤,打开与本章相关的工作簿,来自public.tableau.com/profile/marleen.meier
,并按照你的步骤执行;为自己设定时间,以便更好地掌握在使用 Tableau 时的时间估算。这样,你可以确保按时交付,并在被问及需要多长时间构建某个仪表板时,能够管理预期。
绘制散点图
现在,我将展示我可能想象的解决这个任务的一种方式:
-
首先,我在 Tableau Prep Builder 中打开
world-indices
文件,以便更详细地了解数据集本身;这将帮助我描述数据,并且能够发现明显的数据缺陷,比如空值、重复条目等:图 12.1:Tableau Prep Builder
对于这个数据集,我实际上没有在 Prep Builder 中发现任何明显的数据质量问题,也没有进一步准备数据的需求。每个国家有 1 行数据——你可以在ID列中看到均匀分布的条形图——并且每个国家有 65 列不同的指标。由于不需要数据准备,我决定直接使用 Tableau Desktop。于是,我关闭了 Tableau Prep Builder 并打开了 Tableau Desktop。
-
我的下一个想法是,如何一次性可视化所有的相关性,同时又不至于信息过载?我有 65 个不同的列,这意味着有 4,225 种可能的组合。不,我决定显示所有内容是行不通的。这个任务非常通用,因此我决定采用两参数的方法,这样最终用户就可以选择各自的指标组合。我开始草拟仪表板的外观,并设计出以下内容:
图 12.2:草图
-
为了执行我的计划,我首先创建了两个参数,命名为X-Axis和Y-Axis,它们将用于定义各自的X轴和Y轴。
-
我将两个参数都定义为字符串类型,并将剪贴板中的所有字段名粘贴到这两个参数中。为此,我在 Excel 中打开输入文件,将标题行转置为一列,然后按Ctrl + C。现在可以通过从剪贴板粘贴选项将数据粘贴到参数中。这节省了时间并且减少了出错的可能:
图 12.3:粘贴到参数
- 我还希望参数能在仪表板上显示出来,因此我选择了显示参数:
图 12.4:显示参数
- 如果你现在测试参数,什么也不会发生。我们需要一个计算字段,定义当从参数中做出选择时,Tableau 会选择相应的字段。我创建了以下计算字段来实现这一点(该字段已包含在
Starter
和Solution
工作簿中,便于你使用):
图 12.5:计算字段
-
现在我们将对Y-Axis参数执行相同的操作。
为了更快速地创建Y-Axis的计算字段,将X-Axis的计算字段复制粘贴到 Excel 中,并用
[Parameters].[Y-Axis]
替换[Parameters].[X-Axis]
。 -
将X-Axis计算字段拖到列上,将Y-Axis拖到行上。同时,将ID字段放到详细信息架上。
-
为了查看 Tableau 的相关性分析,将趋势线拖到工作表上:
图 12.6:趋势线
-
带有趋势线的工作表如下所示。当你将鼠标悬停在趋势线上时,你将看到该线的方程式、R 平方值以及P 值:
图 12.7:趋势线值
Y 轴方程意味着,对于每个X轴上的点,Y轴的值将增加 17.9717,从X轴的 0 点和Y轴的-4.33685 点开始。因此,整体而言,Y项的增加速度比(同样增加的)X项快。R 平方值解释了趋势线所解释的方差比例(80.81%),最后,P 值解释了模型的显著性。P 值小于 0.05 被认为是显著的,这意味着数据随机符合趋势线的概率为 5%。前面图中的趋势线P 值小于 0.01%。因此,我们可以安全地假设这两个变量之间存在真实的关系。
-
要查看更多系数,右键点击线条并选择描述趋势线…:
图 12.8:描述趋势线…
以下窗口将会出现:
图 12.9:趋势线信息
-
另外,你可以选择描述趋势模型…选项,你将看到以下内容:
图 12.10:趋势模型信息
如果你想了解更多关于解释趋势线的内容,可以阅读以下文章:
onlinehelp.tableau.com/current/pro/desktop/en-us/trendlines_add.htm
。 -
我有点分心于网格线,所以我决定通过右键点击屏幕并选择格式…来去除它们:
图 12.11:格式化
- 我在格式窗口中选择第五个选项——网格线,并将网格线值设置为无:
图 12.12:移除网格线
-
我还将Marks从自动更改为圆形并将颜色更改为黑色。
-
现在,我认为在散点图上显示每个点代表的国家会很有帮助,因此我将ID字段从详细信息更改为标签,但是这看起来有些混乱:
图 12.13:ID 转文本
- 我点击撤销箭头,并通过右键点击ID并选择显示高亮功能来添加高亮功能。现在,最终用户可以搜索某个国家,并且该点将在散点图中被高亮显示:
图 12.14:显示高亮
-
我还希望当悬停在任何点上时,国家名称能清晰地以红色显示,我通过在编辑工具提示中将ID颜色更改为红色并增加字体大小来实现:
图 12.15:工具提示
结果如下所示:
图 12.16:悬停在某个点上
-
我已经添加了趋势线,现在我想在视图中显示Pearson R,也叫R 平方值,这样用户就知道两个指标是否相关;然而,无法设置描述趋势线或描述趋势模型选项为始终显示。因此,我将自己在新字段中计算该值;我使用
CORR()
函数来做到这一点:
图 12.17: Pearson R
-
但我想显示一些文本,指示两个变量是否相关,而不是显示值本身,因为我希望让仪表板更加清晰。因此,我创建了另一个名为
是否相关
的计算字段,代码如下:IF [Pearson R] > 0.7 then 'The two variables <' + [Parameters].[X-Axis]+ '> and <'+ [Parameters].[Y-Axis]+ '> have a very strong positive correlation of: ' + STR([Pearson R]) ELSEIF [Pearson R] < 0.7 and [Pearson R] > 0.4 then 'The two variables <' + [Parameters].[X-Axis] + '> and <'+ [Parameters].[Y-Axis]+ '> have a strong positive correlation of: ' + STR([Pearson R]) ELSEIF [Pearson R] < 0.4 and [Pearson R] > 0.2 then 'The two variables <' + [Parameters].[X-Axis] + '> and <'+ [Parameters].[Y-Axis]+ '> have a moderate positive correlation of: ' + STR([Pearson R]) ELSEIF [Pearson R] <0.2 and [Pearson R] > -0.2 then 'The two variables <' + [Parameters].[X-Axis] + '> and <'+ [Parameters].[Y-Axis]+ '> have no or a weak correlation of:' + STR([Pearson R]) ELSEIF [Pearson R] < -0.2 and [Pearson R] >-0.4 then 'The two variables <' + [Parameters].[X-Axis] + '> and <'+ [Parameters].[Y-Axis]+ '> have a moderate negative correlation of: '+ STR([Pearson R]) ELSEIF [Pearson R] < -0.4 and [Pearson R] > -0.7 then 'The two variables <' + [Parameters].[X-Axis] + '> and <'+ [Parameters].[Y-Axis]+ '> have a strong negative correlation of: ' + STR([Pearson R]) ELSEIF [Pearson R] < -0.7 THEN 'The two variables <' + [Parameters].[X-Axis] + '> and <'+ [Parameters].[Y-Axis]+ '> have a very strong negative correlation of: ' + STR([Pearson R]) END
-
完成这一步后,我创建了一个新工作表并将是否相关放到文本架上。该工作表看起来非常简单,如下所示:
图 12.18: 文本相关性
- 我右击标题并选择隐藏标题。
最后,几乎所有内容都准备好了,可以根据本节开头的草图构建仪表板。只缺少每个轴的分布。
添加坐标轴分布
我们已经开始了,但现在我想将x轴和y轴的分布图添加到散点图旁边。我按照以下步骤进行:
-
我从x轴开始,打开另一个工作表,并将X 轴拖到行中。接着,我点击刚刚添加的绿色药丸 X 轴并选择度量 | 计数。现在,在数据窗格中右击X 轴并选择创建 | 区间...。在弹出窗口中,点击确定。最后,我将新的维度X 轴(区间)拖到列中。
-
关闭编辑坐标轴 [X 轴]窗口后,我右击X 轴并取消选择显示标题,以不再显示标题。
-
我继续在另一个新的工作表中使用Y 轴,并将Y 轴拖到列中。接着,我通过点击它并选择度量 | 计数来更改列中的Y 轴。现在,在数据窗格中右击Y 轴并选择创建 | 区间...。在弹出窗口中,点击确定。
图 12.19: 区间
-
最后,我将新的维度Y 轴(区间)拖到行中。
-
我在标记卡中将颜色更改为灰色,并在页面顶部选择整个视图。
-
y轴的分布应该与散点图对齐;因此,我点击Y 轴(区间) | 排序 | 降序。接着,我右击Y 轴并取消选择显示标题,以不再显示标题。
-
为了将所有内容结合在一起,我打开一个仪表板页面并命名为
分布
,然后将散点图
工作表放在页面底部,将相关性
工作表放在仪表板画布顶部。 -
我将分布工作表添加到散点图的相关位置(
Y 轴
到y轴,X 轴
到x轴)。 -
我还在左下角添加了一个空白,以使分布与散点图的边缘对齐:
图 12.20:添加空白
最终的布局如下所示:
图 12.21:最终布局
-
我想赋予分布更多的意义,并添加一个动作,使其能够在两个分布图中突出显示国家。我这样做是为了让用户能够看到某个国家在某个指标的所有国家范围中的位置,因为有时在散点图中很难看到。另一方面,散点图可以用来获得更多关于两个指标之间关系的见解。对于高亮动作,我需要将参数设置如下:
图 12.22:高亮
- 为了使高亮功能在X 轴和Y 轴的工作表中生效,请在两个工作表中的Detail栏中添加ID。
图 12.23:添加 ID
现在,看看下面的截图:
图 12.24:相关性
我在X 轴上选择了Public health expenditure percentage of GDP 2013
,在Y 轴上选择了Mean years of schooling – Years
。我必须通过右键点击数据面板中的X 轴桶,选择| 编辑 | 建议桶大小 | 确定来调整X 轴桶的大小。我看到这两个衡量标准之间的总体相关性是正相关的,相关系数为 0.359。但通过悬停在点上,现在可以调查哪些国家对这种相关性有影响。对于靠近趋势线的国家,相关系数更接近实际因素。例如,位于右上角的美国,其x轴(健康支出)值为 16.8,y轴(受教育年限)值为 12.76。如果将 12.76 乘以 0.359(相关系数),得到 4.581,这几乎正好是 12.76 与 16.8 之间的差距。现在,如果你搜索塞拉利昂(右下方),你会看到x和y值分别为 11.4 和 2.9。在这里,将相关系数相乘并不能很好地解释这种关系。这一点可以在散点图中清楚地看到,因为塞拉利昂远离趋势线。我非常喜欢这个仪表板,因为它简化了变量之间的关系,可以帮助新手和高级用户理解数据。
添加相关矩阵
在点击仪表板并测试功能后,我意识到很难记住我已经尝试过哪些组合,并且我希望能够筛选出高度相关的组合。为了解决这个问题,我想在这个工作簿中添加一个新的仪表板:一个包含所有组合的相关矩阵,并用颜色编码,同时提供筛选选项:
- 首先,我回到数据源选项卡,再次添加相同的数据集,但使用一个新的名称:
World Indices Correlation Matrix
。我甚至添加了两次,因为我需要将每个指标与其他所有指标进行关联:
图 12.25:世界指标相关矩阵
- 使用的关键字段是ID:
图 12.26:ID 作为关键字段
- 然后,我需要对两个表进行透视,因为我需要一个列来显示所有指标名称,另一个列显示所有值,而不是每个指标对应一列。我选择除ID外的所有字段,并使用透视:
图 12.27:透视
- 这样就得到了三列。我将Pivot Field Values重命名为Value Index A,将Pivot Field Names重命名为Index A:
图 12.28:重命名列
-
现在我再次对第二个表格进行操作,并将列重命名为Index B和Value Index B。
-
我打开一个新的工作表,将Index B放置在列上,将Index A放置在行上。我创建一个名为Pearson R的计算字段,代码为
CORR([Value Index B], [Value Index A])
,并将其放置在过滤器、颜色和文本中。右键点击Pearson R字段,选择显示过滤器:图 12.29:相关矩阵
颜色可以根据个人喜好调整;我选择了从红色到黑色的五色渐变,表示红色字段为负相关,黑色字段为正相关。
-
我打开一个新的仪表板标签,并将工作表放置其中。尝试调整过滤器,使其仅显示高度相关的范围 0.89–0.99,这样就能更小的数据集来操作:
图 12.30:过滤器相关矩阵
本节帮助我们创建了所有可能组合的热力图,我们通过颜色编码相关值并添加了过滤器来聚焦于感兴趣的点。在前面的截图中,你可以看到高度相关的指标。
完成仪表板
为了避免混淆,我想向用户解释皮尔逊 R过滤器,并完成仪表板:
- 我开始将文本字段
Pearson R ranges explained
添加到仪表板。如果有更多时间,我可以将其做成像X 轴和Y 轴字段那样的下拉参数:
图 12.31:添加关于 Pearson R 的文本
-
为了完成所有操作,需要三个步骤。首先,需要两个参数操作,以便通过点击相关矩阵来更改X 轴和Y 轴参数的值,第一个操作应该按如下方式进行定制:
图 12.32:参数操作 1
上述截图中的操作将会把X 轴参数改为Index A中的值。
-
现在,我按如下方式编辑第二个参数操作:
图 12.33:参数操作 2
上述图中的操作将会把Y 轴参数改为Index B中的值。
-
最后,我添加了一个名为GoToScatterplot的Sheet Navigation操作,允许用户在选择指数组合后更改仪表板:
图 12.34:Sheet Navigation 操作
前面的操作将显示一个菜单以转到趋势线仪表板。
-
用户现在可以选择一个值并点击它。在背景中,X 轴和Y 轴参数将调整为与该字段相关的两个指标。例如,对于平均学年和人类发展指数,会显示一个超链接:
图 12.35:菜单
- 用户将被重定向到带有现在已预过滤的趋势线和相同两个指标的仪表板:平均学年和人类发展指数:
图 12.36:过滤可视化
从中可以看出,选择的两个指数正相关性为 89.9%。我们还可以看到x轴和y轴上每个指数的分布。
这是一个冗长的练习,但我想向你展示我完整的思维过程,并看看仪表板的创建。如果有更多时间,我肯定会添加更多见解,例如:
-
对每个指数添加解释。
-
对相关性添加更详细的解释。
-
添加 p 值或其他系数到分析中,并相应地更改文本。
不要忘记收集反馈并与利益相关者核对你是否在正确的方向上。有些人会使用草图,然后制作草稿,再次征求反馈,直到产品最终确定。我倾向于向利益相关者提问,以更好地理解他们的需求,并让他们指导我完成用 Tableau 仪表板替换或更改的过程。然后,我会呈现完整版本或中间版本,具体取决于复杂性和时间安排。你应该避免花费数小时或数天在不符合利益相关者期望的事物上。
现在,让我们看一个第二个更短的用例,它包含地理空间数据。
芝加哥交通违规的地理空间分析
这是星期三早上;你的经理走进你的办公室,想要检查芝加哥去年的红灯违规情况。他们询问你是否可以为此目的制作一个仪表板。特别是,你被要求突出显示违规最多发生的地点,并查看近几年芝加哥交通信号违规的总体趋势。你被提供了两个数据集,一个带有摄像机位置,另一个带有违规信息,并被告知需要在下一个小时内完成仪表板。你会怎么做?
在继续阅读之前,请考虑如何解决这个问题。花五分钟,思考你将采取的步骤,并草绘一个仪表板设计。
以下是我如何操作的概述:
-
在 Tableau Prep Builder 中打开数据集。
-
连接这两个数据集。
-
如有需要,清理数据。
-
在 Tableau 中打开输出。
-
如果可能,使用地图来可视化相机的位置。
-
添加每个相机的违规次数。
-
确定是否存在按月趋势。
接下来是我设计仪表盘的粗略草图:
图 12.37:草图
接下来是我将要执行的逐步描述。相应的 Tableau 仪表盘可以从 Tableau Public 下载,Tableau Prep Builder 文件可以从 GitHub 获得(github.com/PacktPublishing/Mastering-Tableau-2023-Fourth-Edition/tree/main/Chapter12
),数据集本身可以在这里公开获取:data.cityofchicago.org/Transportation/Red-Light-Camera-Violations/spqx-js37
。
准备数据
在将两个文件加载到 Tableau Prep Builder 中后,我发现通过LONGITUDE和LATITUDE连接无法得到任何结果,因为几乎所有记录都是不匹配的:
图 12.38:连接 I
我尝试另一种方法:在交集上进行连接。这再次导致0个连接的行,但这次我知道原因了。在一个数据集中,INTERSECTION值是由短横线(-)分隔的,而在另一个数据集中是AND;此外,一个使用大写字母,另一个没有:
图 12.39:连接 II
我可以添加一个清理步骤,将所有字母转换为大写,并将交叉口拆分成两部分。我可以在-以及AND上执行自定义拆分...:
图 12.40:数据准备
然后,我注意到交叉口的顺序不同;例如,Ashland-71st
和71ST AND ASHLAND
。我可能会考虑重新构建数据集并创建一个循环,将两个街道按字母顺序排列在两个拆分中,但现在我没有时间做这个。
另一种解决方案是先将 split 1 和 split 1 以及 split 2 和 split 2 连接起来。接着,在第二次连接中,我可以将 split 1 和 split 2 以及 split 2 和 split 1 连接。之后,我可以将两个连接的结果合并并创建输出文件(或者直接将 Prep Builder 数据集加载到 Tableau Desktop 中)。通过这种方法,我仍然不会包括所有数据,但我将会有从 444,000 行中筛选出的 380,000 行数据。这应该足以获得一个大致的模式。如果我还有时间,我可以继续映射剩余的不匹配项。
然而,我最终决定完全放弃位置数据集,仅使用违规数据集,因为我意识到我只会错过那些尚未发生违规行为的位置。违规行为的发生地点已经足够。如果你需要确定交通信号灯控制是否失效,你必须使用两个数据集。
构建交叉口的地图
我继续在 Tableau 中打开违规数据集:
- 经度和纬度值没有自动识别,所以我必须点击数据类型图标将两者都更改为Number (decimal):
图 12.41:更改数据类型
-
然后,我通过点击字段上的下拉箭头(如前图所示)并选择Convert to Measure,将Longitude和Latitude字段更改为Measure。
-
现在我可以再次点击数据类型图标,并将两个字段更改为Latitude和Longitude:
图 12.42:更改地理角色
- 将Longitude拖放到Columns,Latitude拖放到Rows,并将Intersection放到Text货架上,我可视化了红灯位置——至少是曾经发生过违规的位置:
图 12.43:芝加哥的交叉点
-
工作表的名称将是
Intersection
,由于我正在查看违规情况,我将Marks卡片中的颜色更改为红色。最后,我不需要看到交叉点名称,所以我将Intersection从Text更改为Detail。 -
接下来,我更喜欢地图显示一些细节,所以我使用Background Layers…选择了更多的选项:
图 12.44:背景图层…
选择要在地图上显示的所有图层:
图 12.45:芝加哥地图
Tableau 的另一个好功能是,你可以向视图添加Data Layer。你可以在前面截图的左下角看到该选项。
-
我使用人口普查区的人口层,希望它能为我提供一些关于密集人口区域是否发生更多或更少违规行为的详细信息:
图 12.46:数据层
在下面的截图中,你可以看到它的样子——请注意,红色越深,区域的人口密度越高:
图 12.47:交叉点可视化
-
我将MONTH(Violation Date)添加到Pages;这样,我的老板可以调整月份,查看违规数量何时何地变化:
图 12.48:页面
- 当然,我需要添加Violations字段以使Pages正常工作。我决定使用 Tableau 的Density功能,并以红色为颜色:
图 12.49:密度可视化
添加相应的热力图工作表
点击Pages播放按钮后,我注意到某些月份有模式。我想更仔细地观察,所以我打开了一个新的工作表:
-
我将新工作表命名为Heatmap,并将MONTH(Violation Date)放到Columns,YEAR(Violation Date)放到Rows。然后,我将Violations拖放到Color货架上,并选择红金色得到以下结果:
图 12.50:热力图
夏季肯定有更多的红灯违规行为,2016 年和 2020 年显示了最多的违规行为。
-
最后,我添加了一个名为
Trend?
的新工作表。我将MONTH(Violation Date)拖动并放到Columns架上。Violations字段应放在Rows上。我确保这两个度量都是连续型(绿色)。在Analytics面板中,我将线性趋势线拖到工作表上。接下来,我将预测拖到视图中:
图 12.51:折线图
在前面的图中,你可以看到红灯违章的整体趋势在多年间略有上升。预测显示,夏季出现更多红灯违章的季节性特征可能会持续到 2021 年。
欢迎在 2021 年底查看 Tableau 的预测模型表现如何!芝加哥市的数据集会不断更新。
完成仪表板
时间差不多了,我正在将这三个工作表放到一个仪表板上,命名为红灯违章,并稍作格式调整;它的样子如下:
图 12.52:最终仪表板
你可以在 Tableau Public 上找到与本章相关的 Tableau 工作簿中的最终仪表板,地址是:public.tableau.com/profile/marleen.meier/
。
仪表板可以改进吗?是的,永远可以改进。但在这个第一次迭代之后,我的老板可以告诉我是否需要调整,我会进行调整。我确信我可以花更多时间改进它,但大多数时候,仪表板制作更重要的是快速交付。而且,完整的生产模型与临时问题或一次性练习是不同的,特别是当你以敏捷方式工作,将工作分割为交付物,获取反馈并继续改进时。
扩展地理空间分析与距离度量
我们的最后一个用例也是针对相同的芝加哥交通数据集进行的地理空间分析,但这次我们将添加另一个组件。我们打算租一个新地方,但要求该地方周围的半径X范围内没有超过n个交叉路口,而且海军码头距离最多为y英里。变量n、x和y应该是互动的,以便我们可以进行更改并拥有非常灵活的仪表板体验。关于这个任务,问题如下:
-
我们如何将芝加哥的任何一个位置添加到我们的数据集中?目前它只显示交叉路口和违章数据。
-
我们如何生成n、x和y这三个变量?
-
我们如何在地图上的任意点添加半径指示器?
-
我们如何衡量两个变量点之间的距离?
以下步骤将解答这些问题:
-
返回与本章相关的工作簿。
-
右键点击名为Intersection的工作表,点击复制。
-
将新的工作表重命名为
Rental
。 -
从页面中移除月份(违章日期),从颜色架中移除违章次数的总和,并从标题中删除红色文本(子标题),使工作表看起来像这样:
图 12.53:交叉点
-
将标记类型更改为地图。
-
点击地图 | 地图图层,将数据图层更改为无数据图层:
图 12.54:地图层
-
将违章日期放到筛选器架上,并选择年份2020。
-
将违章次数拖到颜色架上,并选择红色配色方案:
图 12.55:编辑颜色
现在,我们面前有一张芝加哥的地图,其中每个点代表 2020 年发生违章的交叉口。点的颜色越深,表示该交叉口登记的违章次数越多。
将测量点添加到地图上
接下来,我们需要添加一个功能,允许我们在地图上设置一个标记并从那里开始测量。可以通过创建经度和纬度参数,并在计算字段中使用它们来实现:
- 创建以下参数,
纬度
和经度
:
图 12.56:参数
-
右键点击每个参数并选择显示参数。
-
创建一个名为
地址手动输入
的计算字段:MAKEPOINT([Lat], [Long])
-
将地址手动输入拖到地图上,放置在添加标记层弹出窗口上方:
图 12.57:添加一个图层
-
将新图层的标记类型更改为地图。
-
完成这些步骤后,我们就得到了一个带有交叉点的地图,显示了颜色编码的违章次数,并且有一个点可以通过使用
纬度
和经度
参数来更改。用户可以使用例如 Google Maps 来找到纬度和经度;只需在 Google Maps 上选择一个代表出租房位置的点:
图 12.58:Google Maps
- 纬度和经度将在 URL 中以及页面底部显示。将它们输入到
纬度
和经度
参数中,相同的点将出现在我们的 Tableau 地图上:
图 12.59:纬度和经度
添加距离线
在接下来的步骤中,我们将添加一个半径和一条从海军码头开始的距离线:
-
创建一个名为
英里半径
的参数,并将当前值设置为1.1
。 -
右键点击
英里半径
参数并选择显示参数。 -
创建一个名为
缓冲区
的计算字段,用作我们围绕地址手动输入点的半径:BUFFER([Address manual],[Radius in miles], 'miles')
-
将缓冲区字段拖到地图上,就像我们之前将地址手动输入字段拖到添加标记层弹出窗口上一样。
-
将此新层的标记类型更改为地图。
-
点击颜色,将不透明度更改为50%,并选择灰色:
图 12.60:带有半径的地图
海军码头的坐标显示在以下图中的 URL 中(41.8859088,-87.6064094):
图 12.61:海军码头
-
创建如下计算字段:
MAKEPOINT(41.892133, -87.604045)
-
将Navy Pier字段拖放到顶部的添加标记层弹出窗口上的地图上。
-
将标记类型更改为地图。
-
为了连接Navy Pier和我们的地址手动点并测量距离,请创建另一个名为
Line
的计算字段:MAKELINE([Address manual], [Navy Pier])
-
要测量两者之间的距离,请使用以下代码创建一个
Distance
字段:DISTANCE([Address manual], [Navy Pier], 'miles')
-
将Line字段放置在顶部的添加标记层弹出窗口上的地图上。
-
将新图层中的标记类型更改为地图。
-
将Distance放置在标签架上,将测量值更改为平均值,然后单击标签以添加文本
miles
:
图 12.62:编辑标签
我们的仪表板现在如下所示:
图 12.63:最终仪表板
这使其完整。 半径清楚地显示了某一距离内有多少个交点; 悬停在点上可以看到交点违规的数量。 从 Navy Pier 到我们当前位置的地址手动告诉我们这两个点相距多远。
回答我们一开始的问题:
-
如何将芝加哥的任何给定位置添加到我们的数据集中? 目前仅显示交点和违规。 通过在计算字段中使用
Makepoint()
函数。 -
如何制作 n、x 和 y 变量? 通过使用参数。
-
如何在地图上的任意给定点添加半径? 通过使用
Buffer()
函数。 -
如何测量两个可变点之间的距离? 通过使用
Distance()
函数;通过添加MakeLine()
函数,将绘制一条线。
此用例可以重新创建为某一区域内的超市数量、学校、公共交通点等。 保持创造性,随时将您的仪表板上传到 Tableau Public,并不要忘记添加#MasteringTableau标签!
如果您经常使用空间数据,我还建议您查看这些链接:
概要
在本章中,我们探索了自助式高级分析的迷人世界。我们首先理解了自助式分析作为一种商业智能形式的概念,它使个人能够直接查询数据集并获取有价值的见解。在我们的旅程中,我们发现了三个引人入胜的应用案例,展示了自助式分析的强大力量。我们揭示了世界指数之间复杂的相关性,深入理解了全球市场动态。接着,我们进入了芝加哥交通违规领域,运用地理空间分析揭示了潜在的模式和改进的领域。最后,我们扩展了地理空间分析,利用距离度量来确定基于关键变量的住房位置的最佳半径。
在这些不同的场景中,有一个关键的教训始终贯穿其中:当开始一个自助式分析项目时,结构化的方法至关重要。通过精心规划工作、熟悉数据、运用描述性统计,并根据中期结果调整计划,我们为成功铺平了道路。
还要记住,仪表板永远不会真正完成:你总是可以修改内容;你的受众可能会改变;利益相关者的需求也可能不同。交付一个具有基本功能的可用可视化,并在收到反馈后继续改进。根据你的待办事项或其他情况,最小可行产品可能正是你所需要的。
在我们结束本章时,我敦促你反思所获得的见解,并考虑如何将这些原则应用于你自己的自助式分析工作。记住,尽管我的经验可以作为指导,但有许多不同的路径可以帮助你实现目标。拥抱自助式分析的力量,用数据赋能自己,并在寻求数据驱动决策的过程中,开启无限的可能性。同时,给你的 IT 团队一些休息时间,让他们专注于那些超出你范围的更复杂的实施工作。
下一章将专注于提高性能。随着数据量的不断增加,性能至关重要,它可能意味着成功与失败之间的差距。
在 Discord 上了解更多
要加入本书的 Discord 社区——你可以在这里分享反馈、向作者提问并了解新版本——请扫描下面的二维码:
第十三章:提升性能
一旦人们熟悉了 Tableau 的功能,他们很快就会遇到另一种类型的问题:性能。你们可能都曾经在屏幕上盯着 加载数据 或 执行查询 的字样发呆。但别担心,我们有办法!如果设计得当,Tableau 仪表盘即使处理大量数据也能表现得非常好。
本章将涵盖性能的各个方面,旨在让你掌握技术,创建加载快速、响应灵敏的工作簿。
在本章中,我们将讨论以下主题:
-
理解性能记录仪表盘
-
硬件和即时技术
-
连接数据源
-
使用提取数据
-
明智地使用过滤器
-
高效计算
-
提升性能的其他方法
正如你所看到的,我们需要覆盖许多与性能提升相关的主题。因此,让我们不要浪费任何时间,直接进入正题。我们的第一个话题将是性能记录,这是你在遇到性能下降时应首先查看的内容,因为它能帮助你找出所有缓慢的根源。
理解性能记录仪表盘
Tableau 包含一个性能记录功能,作为安装包的一部分,它以名为 PerformanceRecording.twb
的仪表盘形式提供。该仪表盘为 Tableau 作者提供了一个简单的方法,用于理解和排查性能问题。以下的练习和讨论将回顾性能记录仪表盘的各个方面,包括如何生成它、如何利用它来提升性能,以及它是如何构建的。
执行以下步骤:
-
导航到
public.tableau.com/profile/marleen.meier
查找并下载与本章相关的工作簿。 -
导航到
事件类型
工作表。 -
选择 帮助 | 设置与性能 | 开始性能记录。
-
在 Windows 上按 F5 或在 macOS 上按 Command + R 刷新视图。
-
选择 帮助 | 设置与性能 | 停止性能记录。这时会打开一个新的仪表盘:
图 13.1:性能摘要
需要关注的四个主要部分:
A) 性能摘要 显示了仪表盘执行所有步骤所需的时间,这些步骤发生在 步骤 3(开始性能记录)和 步骤 5(停止性能记录)之间。可以使用滑块进行筛选。
B) 时间线 显示了每个步骤发生的时间及其持续时长。
C) 这些步骤也通过颜色编码,可以在 事件 条形图中找到。
D) 查询 仅在点击(B)或(C)中的任何事件时显示详细信息。
让我们继续进行接下来的步骤:
-
将 事件 时间线滑块拖动到(A)的最左侧以显示所有事件。
-
在按时间排序的事件(C)中,点击任何标记为执行查询的绿色条。注意,查询部分现在已显示属于高亮条的 VizQL: |
图 13.2:事件 |
- 要查看完整的查询,导航到查询工作表并将视图设置为整个视图(在查询中,Tableau 指的是 VizQL 查询)。请注意,尤其长的查询可能未被完全记录。为了查看这样的查询的每一行,请参考位于我的 Tableau 存储库中的日志文件。 |
前面的步骤旨在为你提供初步了解性能记录仪表板的用途。我通常用它来检查某个查询是否比其他查询花费了明显更长的时间。然后,我查看查询标签,检查哪个部分受到了影响,通过查看所使用的字段,尝试进行更改,然后再次运行性能仪表板,看看变化如何。现在,让我们来看一些更详细的信息。 |
如果你从性能记录仪表板访问事件工作表,你将看到不同的事件。接下来,我们将更详细地讨论这些事件及其对性能的影响: |
事件类型 | 性能考虑因素 |
---|---|
连接数据源 | 连接数据源时的性能差可能表明网络延迟、数据库问题,甚至是驱动程序过时。 |
生成提取 | 在提取之前聚合数据并隐藏未使用的列可以提高性能,因为这将分别减少总列数和行数。 |
编译查询 | 编译查询性能问题可能表明数据库存在问题。 |
执行查询 | 如果查询花费时间过长,你可以通过过滤不需要的数据或隐藏不使用的字段来提高性能。有关更多信息,请参考本章的明智使用过滤器部分。 |
排序数据 | 与排序问题相关的性能问题可能表明视图中标记过多。此排序问题也可能由依赖视图中数据排序的表计算引起。 |
地理编码 | 地理编码性能问题可能表明视图中标记过多、互联网延迟、硬件问题或显卡性能差。 |
混合数据 | 混合数据的性能可以通过减少基础数据量或使用过滤来提高。 |
计算表计算 | 由于表计算通常是在本地执行的,复杂的计算可能会给终端用户的计算机带来负担。 |
计算总数 | 计算总数的性能可以通过减少基础数据量或使用过滤来提高。 |
计算布局 | 计算布局性能问题可能表明仪表板中有太多工作表或元素,如图片。 |
在本概述之后,你可以随时回顾,我们将更深入地研究当启用性能记录时会发生什么。请注意,以下内容假设作者正在使用 Tableau Desktop,而不是 Tableau Server。在第十四章,探索 Tableau Server 和 Tableau Cloud中,我们将介绍 Tableau Server 上的性能记录。
在记录性能时,Tableau 会在My Tableau Repository\Logs
中初步创建一个名为performance_[timestamp].tab
的文件。此外,还会在 Tableau 程序目录中创建一个名为PerformanceRecording_new.twb
的文件,例如C:\Program Files\Tableau\Tableau.[version]\Performance
。一旦停止录制,该文件会自动打开,从而让作者查看结果。
我们刚刚了解了如何记录性能指标并使用随 Tableau Desktop 和 Tableau Server(如果管理员启用)提供的仪表板。在接下来的章节中,我们将一步步指导你如何优化整体性能的不同选项。
硬件和即时技术
虽然 Tableau Desktop 对硬件要求不高,但公司中的桌面电脑或笔记本往往配置不足,尤其是对于那些所谓的业务用户而言,他们的日常工作不需要编程工具或大量的处理能力。
因此,在本节中,我们将讨论技术要求。根据www.tableau.com,最新的技术要求如下:
Windows | Microsoft Windows 8/8.1, Windows 10 (x64), Windows 11 |
---|---|
2 GB 内存 | |
至少 1.5 GB 的可用硬盘空间 | |
CPU 必须支持 SSE4.2 和 POPCNT 指令集 | |
Mac | macOS Catalina 10.15,macOS Big Sur 11.4+,macOS Monterey 12.6+(适用于 Tableau 2022.3+),以及 macOS Ventura(适用于 Tableau 2022.3+) |
英特尔处理器或使用 Rosetta 的 Apple Silicon 处理器 | |
至少 1.5 GB 的可用硬盘空间 |
现在我们已经理清了基础内容,接下来让我们看看一个可能会无意间拖慢你性能的功能以及如何解决它。我们第一个即刻使用的技巧叫做自动更新。
可以通过工具栏上的图标、工作表 | 自动更新,或者使用快捷键F10(在 Windows 上)或Option + Command + 0(在 Mac 上)来访问自动更新。自动更新为作者提供了暂停/恢复工作表和/或筛选器的自动更新的选项,如果你想多次更改布局而不希望每次更改后 Tableau 都重新加载(因为每次加载意味着会发送新的查询到底层数据源并进行处理,这会消耗处理能力),这个功能会非常有用。你可以简单地暂停更新,进行更改,然后一次性执行更新。
以下练习展示了这一过程是如何工作的:
-
打开与本章关联的工作簿,并导航到
Auto Updates
工作表。 -
在数据窗格中,选择
超市
数据集。 -
将状态字段放置在行架上。
-
通过工具栏取消选择自动更新工作表:
图 13.3:自动更新工作表
-
将城市字段放置在状态字段右侧的行架上。请注意,视图并未更新。
-
通过工具栏启用自动更新工作表,视图现在会更新。
-
右键点击状态字段在行架上,选择显示过滤器。
-
右键点击城市字段在行架上,选择显示过滤器。
-
在城市过滤器上,点击下拉菜单并选择多选值(列表)以及仅相关值:
图 13.4:仅相关值
-
取消选择自动更新过滤器,如图 13.3所示。
-
在状态过滤器中,仅选择阿拉巴马州。请注意,城市过滤器没有更新。
-
通过工具栏启用自动更新过滤器,此时城市过滤器会更新。
自动更新非常有用。作者可以暂停自动更新,进行多次修改,然后再恢复自动更新,从而间接节省时间并提高性能。
作为旁注,像仅相关值或上下文中的所有值等级联过滤器,在使用暂停按钮或自动更新时可能无法填充,因为它们依赖于先传递查询。
执行更新功能
位于暂停/恢复自动更新选项右侧的执行更新图标是用来执行一次刷新,而用户可以保持禁用的自动更新功能。以下简短示例应该有助于说明此选项:
-
复制名为
自动更新
的上一份工作表,并将副本命名为执行更新
。 -
通过点击暂停自动更新图标,暂停所有更新。
-
在状态过滤器中随机选择几个州。
-
如图 13.5所示,点击执行更新图标并选择更新过滤器或更新工作表。运行更新的快捷键是 Windows 的F9,macOS 上的快捷键是Shift + Command + 0:
图 13.5:执行更新
- 在状态过滤器中,随机选择几个州。请注意,自动更新仍然处于暂停状态。
重申一下,执行更新允许 Tableau 作者在保持自动更新暂停的情况下间歇性地刷新视图。我们刚刚讨论的这两个更新功能将通过在加载数据之前做多次更改,避免等待刷新数据,从而使你作为仪表盘开发者的工作变得更轻松,但如果你想从根本上解决性能问题,你还需要更多的工具。以下部分将介绍提取功能,这对于加速计算和渲染非常有效。
小型提取
尽管提取数据将在使用提取数据一节中进行更详细的讨论,但在进行创作时提到提取数据似乎是合适的,因为它与性能考虑密切相关。即使在最优条件下,处理大数据源也可能很慢。如果在创作时不需要持续访问整个数据集,可以考虑创建一个小型本地提取。尽可能多地完成工作簿的创作,然后,当所有底层数据确实需要时,再指向原始数据源。
以下步骤展示了该技术的简要示例:
-
在本章附带的工作簿中,导航到
Small Local Extract
工作表。 -
选择数据 | 新建数据源,然后选择所需的数据源。这个练习假设使用
Superstore.xls
,它是随着 Tableau 一起安装的,但你可以选择任何你喜欢的数据集。 -
将任意字段拖到文本货架上。在我的例子中,我使用了
Number
of
Records
,这是一个只包含数字 1 的计算字段。 -
右键点击数据源(对我来说是
Superstore
),然后选择提取数据...:
图 13.6:提取数据
- 在提取数据...对话框的底部,选择Top,你的数据源,然后选择1000。在下图中,选择了Orders,这是超级商店连接的两个部分之一:
图 13.7:前几行
-
点击提取按钮,注意记录数现在显示为
1000
行。 -
在数据窗格中,右键点击Superstore,取消选择使用提取。请注意,记录数已恢复到原始值。
通过创建一个小的本地提取,Tableau 作者缓解了两个性能瓶颈:网络延迟和数据集大小。
本节介绍了如何临时减少数据集并选择不离开 Tableau 界面就能恢复到原始大小的选项。这是加快仪表板构建过程并避免长时间等待的好方法。在下一节中,我们将讨论如何连接数据源,以实现最佳性能。
连接数据源
Tableau 的一个优点是你可以通过多种方式轻松连接到许多不同的数据源。正如本书前面提到的,Tableau 定义了许多连接器,以便与各种数据源接口。此外,这种灵活性不仅限于连接单个表格或文件。
尽管 Tableau 可以轻松连接到各种数据源,但必须强调的是,Tableau 不是一个提取、转换和加载(ETL)工具。如果生成有用结果需要复杂的连接和数据混合,建议在 Tableau 外部进行 ETL 工作,例如在 Tableau Prep Builder 中(有关此服务的更多信息,请参见第三章,使用 Tableau Prep Builder)。ETL 工作理想情况下将带来更好的数据建模,从而在 Tableau 中实现更轻松的创作和更快的性能。
Tableau 连接数据的四种方式如下:
-
Tableau 可以连接到单个表。这是理想的,因为它提供了最全面的功能和最简单的故障排除,同时使 Tableau 能够发送最简单的查询,从而实现最佳性能。然而,连接到单个表并不总是可能的,尽管这是理想的,但也不合理要求这么严格的限制。数据源与报告工具之间的关系是不断变化的。一个在数据连接方式上不灵活的报告工具,可能不会成功,无论最终结果多么优雅美观。
-
第二种选择是关系,这是一个更新且更灵活的方式来结合两个或多个数据集。详细程度将在每个工作表中定义,而不是在数据源选项卡中定义,这使得此功能非常强大。
-
Tableau 连接数据的第三种方式是通过连接。一个表可能无法提供所有必要的数据,但通过连接两个或多个表,所有需要的数据都可以访问。随着连接的复杂性增加,性能可能会受到影响,故障排除也可能变得困难。幸运的是,Tableau 可以假设引用完整性,从而即使在复杂的连接中也能高效工作。更多信息可以在这里找到:
help.tableau.com/current/pro/desktop/en-us/joins_xbd_perf.htm
。 -
最后,Tableau 可以利用数据混合。只要混合的数据源中不超过一个是大型的,并且用于混合的维度成员相对较少,数据混合通常表现得非常出色。
在可能的情况下,应该选择关系而不是连接,选择连接而不是混合。当混合多个大型数据源时,性能可能会受到严重影响。当在高基数维度上进行混合时,问题会更加复杂。此外,数据混合会限制某些功能,例如使用来自二级数据源的维度、行级计算或 LOD 表达式的能力。
然而,也有例外,下面讨论了其中两个:
-
首先,当两个表之间没有共享的公共键时,数据混合是有优势的(通常也是必要的)。
-
其次,在某些情况下,交叉连接将无法使用,需要进行数据混合。例如,当你处理两个具有不同粒度且无法建立关系的数据集时,或当交叉数据库连接不可用时(例如,针对数据立方体或仅限提取连接),或者当你处理大型数据集时,混合数据可以提高性能。
更多信息请访问:help.tableau.com/current/pro/desktop/en-us/multiple_connections.htm
。
因此,作为指导原则,如果存在连接选项,通常应避免使用数据混合。
第四章,关于连接、混合和数据结构的学习,提供了关于连接和混合的详细信息。对于本章而言,连接和混合的讨论将限于性能考虑。
高效处理大型数据源
本节将介绍一些数据库调优的基础知识,以及如何高效地处理大型数据源。由于本主题更多关注数据源而非 Tableau,因此不包含练习。
如果你正在连接大型数据源并且遇到性能问题,与数据库管理员(DBA)的对话可能会有所帮助。
清晰的沟通结合少量的数据库工作可以显著提高性能。对话中应包括数据库调优要点,如显式定义主键和外键、将列定义为not null以及索引。每个要点将在此讨论。
定义主键和外键
主键和外键对于连接表格至关重要。主键由表中的一列或多列组成,主键应该对每一行都是唯一的。连接时使用非唯一的行级键可能会导致错误的结果,正如在第四章,关于连接、混合和数据结构的学习中所探讨的那样。在数据库中显式定义主键有助于确保每个键值都是唯一的:
图 13.8:数据库键
外键由表中的一列或多列组成,唯一标识另一个表中的行。这种唯一标识是因为表中的外键引用了另一个表中的主键。显式定义外键可以使 Tableau 跳过许多完整性检查,从而提高性能。
将列定义为 NOT NULL
Tableau 已发布多篇关于性能提升技巧和建议的白皮书(help.tableau.com/current/pro/desktop/en-us/performance_tips.htm
),其中指出程序员和 Tableau Desktop 都不喜欢 NULL
数据。如果可能,定义每一列时使用显式的 NOT NULL
。
实际上,数据库管理员就何时定义列为NOT NULL
进行辩论;然而,有两点是明确的:
-
主键或外键应该定义为
NOT NULL
。这是显而易见的,因为主键和外键按定义必须是唯一的。 -
此外,任何需要索引的列都应该定义为
NOT NULL
,因为否则索引可能无法使用。
索引将在下一节中更详细地讨论。
索引
让我们考虑关于索引的以下两个问题:
-
什么是索引?
-
应该对哪些内容进行索引?
我们的两个问题中的第一个可能很容易由数据库管理员(DBA)回答,但对于普通的 Tableau 作者来说,可能是未知领域。因此,为了澄清,索引是数据库表中选定列的副本,这些副本已经过优化,可以高效地进行搜索。由于这些复制的列包含指向原始列的指针,因此可以通过它们快速找到给定的行并返回所需的数据。
一个简单的例子可能会有所帮助。根据波音公司,787 梦想客机大约有 230 万个部件。假设有一个表格列出了所有这些部件的Part_Name列。你的任务是搜索这个列中以“fuse”字符串开头的每个部件。在没有索引的列上,这将需要检查数据库中每一行的数据。这样的搜索可能会非常慢。幸运的是,可以使用索引来减少搜索的行数,从而加快过程。一种用于索引的结构化数据是 B 树。B 树数据结构是有序的。因此,当使用 B 树数据结构来访问索引搜索所有以fuse开头的部件时,就不必考虑每一行。数据库可以直接跳到fs并快速返回所需的行。
现在让我们继续讨论第二个关于索引的问题。应该对哪些内容进行索引?这个问题可以简洁地回答:理想情况下,所有用于连接或筛选的列都应该在数据源中建立索引。
尽管在 Tableau 中创建更高效连接的基本性能考虑因素(例如,在左连接足够时避免外连接)是存在的,但连接性能主要在 Tableau 外部决定。因此,通常更重要的是对用于连接的列进行索引,而不是用于筛选的列。
为了继续我们关于操作数据源的讨论,下一节将介绍如何使用 Tableau 通过提取来创建汇总数据集。
使用提取数据
本节将讨论什么是 Tableau 数据提取,以及如何高效构建提取。我的一位同事最近与一家相对较小的手机服务提供商进行了咨询。尽管该公司规模较小,但每天的呼叫量可能超过 1,000,000 次。公司管理层坚持要求能够与 Tableau 工作簿中的单个呼叫的详细可视化进行交互。工作簿的性能显然成为了一个问题。如此低级别的详细信息是否必要?减少细节并使工作簿更迅速是否可能带来更好的商业决策?
为了平衡业务需求与实际性能要求,企业通常需要确定哪些层级的细节对于报告真正有帮助。通常情况下,详细的粒度并非必要。当情况是这样时,摘要表可能提供足够的业务洞察,并且能提高性能。在手机服务提供商的案例中,每日的通话量快照可能已经足够了。即使是每小时的快照,也会大大减少表的大小并提高 Tableau 的性能。
为了满足这一常见的业务需求,提取是由 Tableau Desktop 创建的专有压缩数据源。自发布以来,提取的文件扩展名已从 .tde
更改为 .hyper
格式。因此,新的格式使用了 Hyper 引擎,Hyper 引擎在第一章,回顾基础知识中已讨论过。提取可以本地存储,并由 Tableau 访问以渲染可视化。
考虑以下几点,使得提取文件成为提高性能的优秀选择:
-
提取可以在汇总级别上快速生成。
-
提取是一个列式存储,记录的是列的顺序。
-
关系型数据库通常使用行存储方法存储数据。
在以下示例中,请注意,行存储非常适合返回单独的行,而列存储则更适合返回汇总数据。
这是一个示例表:
表 | |||
---|---|---|---|
乐器 | 存储 | 价格 | |
行 1 | 塞尔梅小号 | 北部 | $3,500 |
行 2 | 康奈尔法式圆号 | 东部 | $4,500 |
行 3 | 盖岑长号 | 南部 | $2,500 |
行 4 | 米拉丰大号 | 西部 | $9,000 |
这里是一个数据库中的行存储表:
行 1 | 塞尔梅小号 |
---|---|
北部 | |
$3,500 | |
行 2 | 康奈尔法式圆号 |
东部 | |
$4,500 | |
行 3 | 盖岑长号 |
南部 | |
$2,500 | |
行 4 | 米拉丰大号 |
西部 | |
$9,000 |
这里是一个数据库中的列存储表:
乐器 | 塞尔梅小号 |
---|---|
康奈尔法式圆号 | |
盖岑长号 | |
米拉丰大号 | |
存储 | 北部 |
东部 | |
南部 | |
西部 | |
价格 | $3,500 |
$4,500 | |
$2,500 | |
$9,000 |
我希望您能看到,在列存储表中,每n行的某个属性构成了第一行。例如,Instrument
的第一行、Store
的第一行和Price
的第一行都与一个条目相关,而在行存储表中,属于同一个条目的所有行是连续的。
总结本节学习的内容,提取文件利用压缩技术来减少文件大小,同时保持性能,并利用 RAM 和硬盘空间以达到最佳性能。而使用与数据库的实时连接时,以上两者都无法实现——因此,当数据库无法提供良好性能时,提取文件可以提升仪表板的性能。
构建提取文件
本节将从性能角度讨论提取文件。提取文件的其他方面,如调度和增量刷新,将不在这里讨论,但您可以在此处找到更多信息:help.tableau.com/current/pro/desktop/en-us/extracting_refresh.htm
。
正如我们在小型提取部分中讨论的那样,提取文件是通过数据 | [数据源] | 提取数据创建的。从结果对话框中,我们可以执行以下操作:
-
根据需要过滤提取文件:有时,需要一个精确反映数据源的提取文件,但通常,过滤掉不同的字段仍然可以填充提取文件所需的数据,同时缩小大小并提高性能。要添加过滤器,只需点击添加...,即可访问与工作表中使用的过滤器对话框相同的对话框。
-
聚合到视图中表示的粒度级别:聚合不仅减少文件大小,还可以从安全性角度提供帮助。如果没有聚合,提取文件将使用行级数据构建。因此,Tableau 作者应注意,如果在构建提取时没有选择聚合,任何敏感的行级数据都可以被访问:
图 13.9:聚合
- 减少行数:如在小型提取部分所示,减少行数可以让作者创建一个小的、本地的提取文件以便快速构建工作簿,然后可以访问原始数据源进行完整分析:
图 13.10:减少行数
- 隐藏所有未使用的字段:此选项会排除工作簿中未使用的所有列。这样可以显著减少提取文件的大小并提高性能:
图 13.11:隐藏字段
通过采取这四个度量,您的性能应该会立即改善。欢迎使用性能记录工具亲自测试,并创建同一数据源的不同提取。接下来将讨论如何使用聚合和性能记录操作。
聚合
以下练习将使用来自单一数据源的两个聚合数据,一个是州级别的,另一个是城市级别的。这些聚合数据源将用于创建两个工作表。这些工作表将与第三个包含行级信息的工作表一起放置到仪表板上。最后,将创建筛选器操作将这三个工作表联系起来。该练习的目的是演示如何将小规模的数据提取与更大的数据集结合使用,从而创建更高效的仪表板:
-
打开与本章关联的工作簿并转到
State Agg
工作表。 -
在数据窗格中,选择
State Agg
数据源。 -
使用州创建填充地图,将州放到详细信息架上,并从标记卡中选择填充地图。
-
右键单击
State Agg
数据源并选择提取数据。 -
请注意,Tableau 会显示一个错误,说明它无法找到引用的文件。您可以指向与 Tableau 一起提供的
Superstore
实例,或者使用通过 GitHub 链接提供的实例:github.com/PacktPublishing/Mastering-Tableau-2023-Fourth-Edition/tree/main
。 -
连接到数据源后,Tableau 会显示提取数据对话框。在对话框中,选择聚合可见维度的数据和所有行。点击隐藏所有未使用字段按钮,然后点击提取:
图 13.12:提取数据
请注意,结果提取仅包含州。还要注意,数据已被聚合,因此没有底层数据可用。
-
转到
City Agg
工作表。 -
在数据窗格中,选择
City Agg
数据源。请注意,这个数据源已经被提取,因此只包含州、城市和销售。还要注意,数据已经过聚合,因此没有底层数据可用。 -
将城市放到行架上,销售放到文本架上,州放到详细信息架上。即使州在视图中没有显示,也不要忘记包括它。必须使用它,以便在练习结束时创建的仪表板能正确工作。
-
转到
Row Detail
工作表并选择Superstore
数据集。 -
创建一个交叉表视图,显示客户名称、订单 ID、行 ID、利润和销售。创建这个视图的一种快速方法是双击每个字段。
-
转到
Agg Dash
仪表板并将三个工作表中的每一个放到仪表板上。 -
在Superstore和City Agg数据源之间创建City和State的混合关系:
图 13.13:混合
- 通过仪表板 | 操作 | 添加操作 | 筛选创建以下操作:
图 13.14:添加城市到详细信息操作
- 通过仪表板 | 操作 | 添加操作 | 筛选创建以下操作:
图 13.15:添加州到城市操作
-
创建这两个操作后,在仪表板中点击State字段。
-
然后,点击City字段。
-
点击
City Agg
工作表的空白部分以排除Row Detail上的所有值。 -
点击
State Agg
工作表的空白部分以排除City Agg上的所有值。 -
根据需要格式化仪表板:
图 13.16:仪表板上的操作
完成本练习后,请注意,生成的仪表板在以下几个方面具有良好的性能:
-
当用户第一次打开仪表板时,只有State Agg显示。这有两个原因使得性能较好。首先,打开仪表板时只显示一个工作表,而不是所有工作表,可以减少初始查询次数并减少渲染。其次,访问小的提取数据比访问较大的数据源更快。
-
由于
City Agg
工作表也在访问一个小的提取数据,当用户点击一个州时,City Agg工作表会迅速显示出来。 -
当用户点击City时,会向数据源发送一个仅包含该城市信息的请求。拉取的数据量相对较小,因此即使是较大的数据集,性能也应该很好。
除了使用汇总提取数据外,良好的性能实践还应该考虑到这一点。仪表板中没有快速筛选器。通常情况下,在仪表板上使用快速筛选器是没有必要的。如果仪表板上的工作表可以用于筛选,那么这些工作表实际上可以起到双重作用。也就是说,工作表不仅能提供有价值的分析,同时还能作为其他工作表的筛选器。这比使用快速筛选器有性能上的优势,因为添加快速筛选器会导致向底层数据源发送额外的查询。
在前面的仪表板中,每个工作表都引用了不同的数据源。因此,你可能会问,如何在不同的数据源之间让操作筛选器正常工作?答案可以在筛选操作对话框中找到。如图 13.14和图 13.15所示,所有字段都被视为目标筛选器。Tableau 会简单地匹配每个数据源中相同名称的字段。提取数据可以进一步优化,以获得更好的性能结果。我们将在下一节中详细介绍这一点。
优化提取数据
优化通过在可能的情况下物化计算字段来加速性能。这意味着 Tableau 会为计算字段生成提取中的值,从而可以查找这些值,而不是每次都计算。如果你使用表计算,Tableau 将必须每次都计算这些值,改变视图时也不例外。
请注意,并非所有计算字段都被物化。未物化的字段包括表计算、可变或不稳定的函数,如 NOW()
和 TODAY()
,以及使用参数的计算字段。
当首次创建提取时,它会自动进行优化。换句话说,计算字段会在可能的情况下自动物化。然而,随着时间的推移,计算字段可能会被更改,导致提取丢失物化字段。此时,请打开 数据 | [数据源] | 提取,并点击 立即计算,以重新生成物化字段:
图 13.17:计算计算
如果提取设置为在 Tableau Server 上刷新,则每次刷新时提取都会自动优化。
最后,如果你在仪表板中使用了参数,请检查是否能消除这些参数,并改用计算来提高性能。如果某些计算无法整体物化,请将可以物化的部分放入一个计算字段,将无法物化的部分放入另一个计算字段。如果某些计算可以在提取创建过程中计算出来,性能也会得到提升。
使用提取的优势已详细讨论过,现在让我们继续探讨如何最大限度地利用筛选器。
明智地使用筛选器
筛选器通常可以提高 Tableau 的性能。例如,当使用维度筛选器只查看西部地区时,会向底层数据源发送查询,只返回该地区的信息。通过减少返回的数据量,性能得到了提升。这是因为更少的数据意味着减少了网络带宽负载、减少了数据库处理需求以及减少了本地计算机的处理需求。
筛选器也可能对 Tableau 性能产生负面影响。例如,使用 仅相关值 会导致向底层数据源发送额外的查询,从而减慢响应时间。此外,从高基数维度创建快速筛选器也可能会损害性能。
Tableau 的筛选器按照特定顺序执行,因此在使用时需要记住这一点。下面的流程图,以及一个链接到一个小时的演示,可能会帮助你更全面地理解这一概念:help.tableau.com/current/pro/desktop/en-us/order_of_operations.htm
:
图 13.18:筛选操作顺序
本节其余部分按照操作顺序逐步介绍。到最后,你将了解在不同情况下应该使用哪些过滤器,从而为你的仪表板实现最佳性能。
提取过滤器
提取过滤器从提取的数据源中删除数据。简单来说,就是数据不存在。因此,通过减少数据的总体量,性能得到了提升。由于提取的数据使用了 Tableau 的专有列式数据集,性能也可能得到进一步提升。
此外,提取数据源总是被扁平化,这相比于通过连接数据集使用连接操作的方式,在性能上具有优势。要创建提取过滤器,首先选择数据 | [数据源] | 提取数据。在弹出的对话框中,选择添加过滤器。
数据源过滤器
数据源过滤器在整个工作簿中应用。例如,如果你创建一个数据源过滤器,移除国家维度中所有成员,除了美国,那么在工作簿中的所有工作表中,国家维度将仅包含美国。
数据源过滤器以与维度和度量过滤器相同的方式提高性能;即数据源过滤器使 Tableau 向底层数据源生成查询,从而限制返回的数据量。返回的数据越少,通常处理和渲染速度越快。数据源过滤器的另一个优点是易于创建。例如,如果 Tableau 的作者事先知道整个工作簿将以美国为中心,创建数据源过滤器就能避免在工作簿中使用该数据源的每个工作表上都应用维度过滤器。
还需要注意的是,数据源过滤器在处理流程中发生得相当早。所有计算(包括使用固定 LOD 表达式的计算,在触发维度和度量过滤器之前进行渲染)都遵守数据源过滤器的规则。
要创建数据源过滤器,请点击位于Tableau Desktop左下角的数据源标签。然后,点击页面右上角的添加链接:
图 13.19:添加过滤器
上下文过滤器
创建上下文过滤器的方法很简单,只需右键点击过滤器架上的一个字段,然后选择添加到上下文:
图 13.20:上下文过滤器
维度和度量过滤器是独立的。每个过滤器独立地查询数据源并返回结果。而上下文过滤器则会迫使维度和度量过滤器依赖于它。在某些情况下,这种行为是有帮助的(甚至是必要的),以获得正确的答案。例如,如果 Tableau 作者访问Superstore 数据集并使用一个关于产品名称的过滤器来返回某一类别中的前 10 大畅销产品名称,那么必须将类别定义为上下文过滤器。否则,产品名称过滤器将返回总前 10 名。因此,上下文过滤器能提高性能。
维度和度量过滤器
维度和度量过滤器可以提高性能。由于维度过滤器或度量过滤器都会导致 Tableau 向底层数据源生成查询,从而限制返回的数据,因此性能得以提升。简单来说,返回的数据集越小,性能越好。
然而,维度和度量过滤器也可能会降低性能。由于 Tableau 不仅需要生成查询来显示可视化图表,还需要生成查询来显示过滤器,因此显示的过滤器越多,性能越慢。此外,显示在高基数维度上的过滤器会抑制性能。(拥有许多成员的维度被称为高基数维度。)考虑一个示例,假设有一个过滤器显示数据集中的每个客户。由于必须查找并返回底层数据集中的每个客户,之后 Tableau 还需要渲染并显示这些客户在过滤器中,性能可能会较慢。
当在视图中使用两个或更多维度或度量过滤器时,可以使用相关过滤器来限制显示的选择。例如,如果视图包含城市和邮政编码过滤器,后者可能设置为仅显示相关值:
图 13.21:仅显示相关值
这对最终用户有利,因为它调整显示的邮政编码数量,仅反映与第一个过滤器中选择的城市相关的邮政编码。然而,使用相对过滤器会导致向数据源发送额外的查询,从而可能会降低性能。
表格计算过滤器
使用表计算作为过滤器并没有与维度或度量过滤器相同的性能增强。如上所述,维度和度量过滤器减少了返回的数据集,而表计算过滤器则不会。在 Tableau 的处理流程中,表计算在从数据源返回数据之后才会渲染。这意味着表计算无法用于生成限制返回数据的查询。换句话说,表计算过滤器导致所有与给定维度或度量相关的数据都会返回,之后 Tableau 在返回的数据集上执行过滤器。
要演示这一点,请执行以下步骤:
-
打开与本章关联的工作簿,并导航到
Late Filter
工作表。 -
在Data窗格中,选择
Superstore
数据源。 -
创建一个名为
Cust Name Tbl Calc
的计算字段,并使用以下代码:LOOKUP( MAX( [Customer Name] ),0 )
-
将Customer Name放置在Rows架上。
-
将Cust Name Tbl Calc放置在Filters架上,并限制仅显示Aaron Bergman。
-
将Sales放置在Text架上。
-
右键单击Sales,然后选择Quick Table Calculation | Rank。
在这个练习中,客户列表整体返回到 Tableau,之后 Tableau 部署过滤器。基本上,仅使用Cust Name Tbl Calc作为过滤器仅隐藏底层数据。这很有用,因为Aaron Bergman返回的排名是正确的。仅对Customer Name进行过滤将返回Aaron Bergman的排名为1。不幸的是,正确的结果会带来性能损失。运行此练习的性能记录器将显示,表计算对性能产生了负面影响。
幸运的是,随着 LOD 计算的出现,通常不需要将表计算作为过滤器使用。LOD 是独立于当前视图包含或排除数据的计算字段。有关更多信息,请参阅第五章,介绍表计算。
使用动作而不是过滤器
另一种提高性能的方法可能是使用动作而不是过滤器。您可以开发一个仪表板,首先显示高级概述,仅在用户选择后才进入详细信息。其机制与我们在聚合部分展示的机制类似;但是,聚合是在每个工作表而不是数据源本身上进行的。通过在高级概述中选择一个标记,将触发一个动作。用户可以深入了解详情,但详细级别只会逐步增加。因此,一次加载的数据量较少。
有关此主题的非常精彩的演示可以在youtu.be/veLlZ1btoms
找到。如果你对了解更多关于热-温-冷方法感兴趣,可以阅读这篇文章:gemshare.org/2019/08/16/hot-warm-cold-data-architecture-best-practices/
。
接下来的主题我们将讨论计算。我们如何以最有效且高性能的方式编写计算?
高效的计算
计算的构建方式可能不同,但却能实现相同的结果。例如,看看以下示例,它展示了如何用更简单的代码替代IF
语句:
情景 I | 情景 II |
---|---|
创建一个计算字段,使用以下代码:IF SUM(Profit) > 0 THEN 'Profitable' ELSE 'Unprofitable' END 将计算字段放置到颜色架上。 |
创建一个计算字段,使用以下代码:SUM(Profit) > 0 将计算字段放置到颜色架上。右键点击结果图例中的True和False,并将它们重命名为Profitable和Unprofitable。 |
既然这两种情景都会返回所需结果,那么应该使用哪一个呢?决定因素是性能。本节将探讨在创建计算字段时如何最大化性能,应该做什么以及避免做什么。
优先考虑代码值
使用布尔值或数字的计算比使用日期的计算性能更好。使用日期的计算又比使用字符串的计算性能更好。这不仅仅适用于 Tableau,在计算机科学中也是如此。
根据这些信息,前表中列出的情景 II比情景 I性能更好。情景 I会导致 Tableau 创建一个查询,要求数据源引擎处理报告盈利能力的字符串,而情景 II则仅发送 1 和 0 来确定盈利能力。情景 II的第三步(即将True和False别名为Profitable和Unprofitable)只是一个标签更改,发生在从数据源返回汇总数据集之后,这对 Tableau 来说既快速又简单。
细节级别计算或表计算
在某些情况下,细节级别(LOD)计算可能比表计算更快,反之亦然。如果不确定,可以尝试两者,看看哪种性能更好。当然,你也可以运行性能记录。如果它们不是真正需要的,那就都不要使用。请参阅下图,了解何时选择哪种计算类型:
图 13.22:选择计算类型
这张图以及关于选择计算类型的更多建议,可以通过以下链接访问:www.tableau.com/about/blog/2016/4/guide-choosing-right-calculation-your-question-53667
。
提高性能的其他方法
总结本章内容,让我们考虑一些提高性能的其他可能性。
避免让仪表盘过于拥挤
通常,最终用户希望在仪表盘上一次性看到所有信息。虽然这可能被认为是有益的,但往往并非如此。考虑在仪表盘上加入一个大型交叉表。浏览大量详细信息是否会增加仪表盘的分析价值?也许答案是“否”。此外,仪表盘上的信息过多可能会掩盖重要的洞察力。委婉地主张简洁的仪表盘可能会带来更好的决策和更佳的性能。
修复仪表盘大小
仪表盘可以设置为精确大小或范围或自动。精确大小会带来更快的性能,因为一旦 Tableau 服务器为某个最终用户渲染了一个视图,该渲染会保存在缓存中,并可以被下一个访问该仪表盘的用户复用。而自动和范围则会导致 Tableau 服务器尝试确定每个最终用户使用的分辨率大小,并相应地渲染仪表盘。这意味着 Tableau 服务器不会使用缓存中存储的仪表盘实例来为下一个最终用户提供服务,这反过来会影响性能。
使用 Tableau Prep Builder
之前已经提到过,但仍然非常相关,因此我会重复一遍:如果需要复杂的连接和复杂的数据混合才能生成有用的结果,那么建议在 Tableau 之外执行 ETL 工作,例如,在 Tableau Prep Builder 中(有关此服务的更多信息,请参见第三章,使用 Tableau Prep Builder)。ETL 工作理想情况下会导致更好的数据建模、汇总数据,或者包含额外列的数据,这些列本来需要在 Tableau Desktop 中创建,因此使用 Prep Builder 会使得 Tableau 的创作更简单,性能更快。
设置期望值
如果最终用户期望接近即时的性能,那么,当然,任何低于此期望的表现都会令人失望。提前解释复杂、注重细节的仪表盘可能无法达到高性能,至少可以从两方面有所帮助。首先,解释可能存在的性能问题后,可能达成妥协,创建一个不那么复杂但仍能传递有价值信息的仪表盘。其次,如果仪表盘的复杂性和注重细节是绝对必要的,至少已经提醒了最终用户,在使用时可能需要耐心等待。
工作簿优化器
最后,对于那些懒人——或者可以说是“高效”的人,Tableau 不久前发布了一个非常棒的功能:工作簿优化器。它根据一套规则检查你的工作簿,并会返回三种类型的类别:需要采取行动、需要审核和已通过。因此,它使用广为人知的 RAG(红-黄-绿)或交通灯系统为你完成性能检查。
在撰写本文时,规则包括:计算长度、使用多个数据源进行计算、仪表板大小不固定、筛选器使用条件逻辑、筛选器使用“仅相关值”、实时数据连接、数据源中的多个连接、嵌套计算、非物化计算、数据源数量、筛选器数量、布局容器数量、LOD 计算数量、仪表板中的视图数量、工作簿工作表数量、未使用的数据源、未使用的字段、数据混合、日期计算和分组。我相信,未来会有更多的规则出现,且创建高性能仪表板将变得越来越容易。你可以通过选择服务器 | 运行优化器来访问工作簿优化器功能:
图 13.23:运行优化器
你将能够按类别深入分析,查看哪些地方需要改进。对于大多数规则,仍然需要一些人工干预,但对于某些规则,只需点击一个按钮即可解决,就像在图 13.24中所示。请注意规则下方的图标——扳手图标表示 Tableau 可以为你自动修复。
图 13.24:未使用的字段
对于每条规则,Tableau 还提供了一个了解更多的超链接,点击后将跳转到 Tableau 帮助页面,提供进一步的解释。
图 13.25:数据源数量
这个功能是不是很棒?!从现在开始,务必记得使用运行优化器按钮!
总结
我们从本章的性能记录仪表板讨论开始。这一点非常重要,因为许多后续的练习都利用性能记录仪表板来检查底层查询。接下来,我们讨论了硬件和实时技术,目的是传达良好的 Tableau 性能所需的硬件考虑因素,并在缺乏理想硬件的情况下,使用技术手段从任何计算机中榨取出最佳性能。
接下来,我们讨论了如何与数据源一起工作,包括连接、融合和高效操作数据源。随后,我们讨论了如何尽可能高效地生成和使用提取文件。通过这三部分内容,我们聚焦于数据源,学习了最佳实践以及在处理远程数据集或提取文件时应避免的错误。接下来的部分则探讨了不同类型的过滤器和计算对性能的影响。最后,我们探讨了其他性能因素,进一步讨论了仪表盘性能以及如何设定期望。
在下一章中,我们将关注 Tableau Server。Tableau Server 是一个内容丰富的话题,值得单独成书,因此我们将只从 Tableau Desktop 作者的角度来简要探讨 Tableau Server。
在 Discord 上了解更多信息
要加入本书的 Discord 社区——你可以在这里分享反馈、向作者提问并了解新版本——请扫描下面的二维码:
第十四章:探索 Tableau Server 和 Tableau Cloud
Tableau Server 和 Tableau Cloud 是用于共享、分发和协作处理在 Tableau Desktop 和/或 Tableau Public 中创建的内容的在线解决方案。它的优势包括提供一个环境,让最终用户可以安全地查看、探索和刷新实时或计划中的数据可视化。Tableau Server 和 Tableau Cloud 之间的主要区别在于,Tableau Server 需要您自己进行维护,而 Tableau Cloud 完全由 Tableau 托管,并由 Amazon Web Services 基础设施进行备份。为了便于阅读,我们将两者统称为 Tableau Server。
本章的范围仅限于 Tableau Desktop 用户与 Tableau Server 的互动。诸如安装和升级、身份验证与访问、安全配置以及命令行工具等主题,与 Tableau Desktop 用户与 Tableau Server 的互动无关,因此不包括在本章内容中。然而,帮助文档非常完善。此外,您还可以观看一些来自 Tableau 软件公司关于 Tableau Server 的视频(例如,www.youtube.com/c/tableausoftware/search?query=Tableau%20Server
)。如果您对本章中提到的任何主题或其他 Tableau Server 相关问题有疑问,请务必访问在线帮助网站:www.tableau.com/support/help
。
本章将探讨以下主题:
-
将数据源发布到 Tableau Server
-
网页创作
-
在 Tableau Server 上维护工作簿
-
更多 Tableau Server 设置和功能
Tableau Server 是将您公司 Tableau 采用提升到新层次的绝佳方式。您最关心的问题可能是,如何将 Tableau Desktop 上的仪表板迁移到 Server?这正是我们在第一部分将要向您展示的内容。
将数据源发布到 Tableau Server
所以,您购买了 Tableau Desktop,成为了一名专业的仪表板开发者,现在您希望与同事分享您的作品。他们是否都需要拥有 Tableau Desktop 的许可和安装才能查看您的可视化内容?幸运的是,答案是:不需要!分享 Tableau 仪表板的最佳方式是通过 Tableau Server。这样,您的同事只需要拥有 Tableau Server 查看许可,这比开发者许可便宜得多,他们就可以完全互动地使用您上传到 Server 的仪表板。关于 Tableau Server 许可模型中不同角色的详细描述,请参见:help.tableau.com/current/server/en-us/license_manage.htm
。
本章假设读者可以访问 Tableau Server,并拥有足够的权限来发布数据源和在 Web 编辑环境中编辑。如果你没有访问 Tableau Server 的权限,但希望完成本章中的练习,可以考虑下载试用版,截至写作时,试用版提供两周的完整功能。
那么,如何将仪表板从桌面上传到服务器呢?让我们来看一下以下步骤,看看如何将数据源发布到 Tableau Server:
-
访问
public.tableau.com/profile/marleen.meier
以查找并下载与本章相关的工作簿。 -
导航到
Publish
工作表。 -
确保数据源是
My Superstore
。 -
如果你还没有这样做,点击 服务器 | 登录…,登录到你的 Tableau Server 实例:
图 14.1:服务器—登录…
-
在 数据 面板中,选择
My Superstore
数据源。 -
选择 服务器 | 发布数据源 | My Superstore:
图 14.2:服务器—发布数据源
- 在弹出的对话框中,输入你所需的设置。
如果你的 Tableau Server 上有不同的项目,你可以选择将数据源发布到哪个项目。你还可以更改名称,或者添加描述,这在你有大量不同数据源时特别有用,能帮助用户寻找他们需要的那个数据源。通过添加标签,你将添加一个元数据层,允许 Tableau Server 用户根据标签搜索特定的数据源。你还可以更改权限。你的设置可能是不同用户属于不同的组,因此你可以选择哪些组被授予哪些权限。最后,你可以立即上传包含数据源的工作簿,使得两者都能在 Tableau Server 上使用。
Tableau 文件类型
我们将继续讨论 Tableau Server,考虑各种 Tableau 文件类型。虽然这似乎是一个意外的延续位置,但随着你阅读下去,你会发现对文件类型的清晰理解为 Tableau Desktop 作者提供了与 Tableau Server 高效互动的基础知识。
前面讨论过的与理解如何与 Tableau Server 互动相关的文件类型会被详细探讨。与理解 Tableau Server 无关的文件类型会被简要提及。有些文件类型(例如与许可证激活相关的文件类型)不会被考虑。
Tableau 数据源
现在让我们来看一下 Tableau 中可用的各种数据源。请查看以下 Tableau 数据文件:
-
文件格式类型:XML。
-
它包含的内容:元数据。
-
它为什么有用:
.tds
文件非常重要,因为它允许 Tableau 作者定义默认格式和聚合、计算字段、数据类型、字段类型等。此外,.tds
文件可以发布到 Tableau Server,从而使其他作者在该环境中可以访问它。这有效地将.tds
文件变成了一本工作手册,确保了组织内的一致性。这个重要特性将在 Tableau Server 架构 部分中进行更深入的探讨。 -
如何生成:可以通过右键点击 数据 面板中的数据源并选择 添加到已保存的数据源...,然后在弹出的对话框中选择 Tableau 数据源 来生成
.tds
文件。也可以通过 服务器 | 发布数据源 | [数据源] 在发布到 Tableau Server 时生成.tds
文件。发布数据源到 Tableau Server 部分展示了如何发布.tds
文件和.tdsx
文件。 -
如何访问它:
.tds
文件类型通常可以在两个地方访问。首先,它可以存储在我的 Tableau 仓库 | 数据源中。当存储在此目录时,.tds
文件将在 开始 页面左侧的 已保存数据源 部分显示。第二个常见的存储.tds
文件的位置是 Tableau Server。导航到 数据 | 新建数据源 并选择 Tableau 服务器,允许 Tableau 作者指向已发布到 Tableau Server 的.tds
和.tdsx
文件。
Tableau 打包数据源
查看以下 Tableau 数据文件详细信息:
-
文件格式类型:压缩。
-
它包含什么:元数据和数据提取。
-
它为什么有用:
.tdsx
文件非常有用,因为它可以用于访问元数据和数据。Tableau 作者可以将位于 Tableau Server 上的.tdsx
文件作为数据源进行访问,从而消除了工作簿直接连接到外部数据源的需要。已发布的.tdsx
文件可以设置为定期更新,从而确保从底层数据源进行定期更新。 -
如何生成:可以通过右键点击 数据 面板中的数据源并选择 添加到已保存的数据源...,然后在弹出的对话框中选择 Tableau 打包数据源 来生成
.tdsx
文件。像.tds
文件一样,.tdsx
文件也可以通过 服务器 | 发布数据源 | [数据源] 在发布到 Tableau Server 时生成。有关更多详细信息,请参见下一部分练习。 -
如何访问它:
.tdsx
文件的访问方式与.tds
文件相同。首先,它可以存储在 我的 Tableau 仓库 | 数据源 中。当存储在该目录中时,.tdsx
文件将在 开始页面 左侧的 已保存的数据源 部分显示。.tdsx
文件的第二个常见存储位置是 Tableau Server。选择 数据 | 新建数据源 并选择 Tableau Server,可以让 Tableau 作者指向已发布到某个 Tableau Server 实例的.tds
和.tdsx
文件。
Tableau 工作簿
除了数据源,我们还有 Tableau 工作簿。查看以下 Tableau 数据文件详细信息:
-
文件格式类型:XML。
-
它包含什么:元数据和模式。模式定义了工作簿中的可视化。请注意,在此上下文中,模式指的是定义工作簿可视组件的 XML,包括工作表上显示的可视化以及仪表板和故事的布局。
-
它为什么有用:
.twb
文件类型是 Tableau 作者最常用的文件类型。它是创建指向实时数据集的可视化所必需的。因此,实时解决方案将使用此文件类型。 -
如何生成它:
.twb
文件通过 文件 | 另存为 创建,然后在弹出的对话框中选择.twb
文件类型。 -
如何访问它:
.twb
文件可以通过 Tableau Desktop 打开,或者通过指向 Tableau Server 实例的浏览器访问。由于.twb
文件是 XML 格式的,它可以通过文本编辑器打开、查看和更新。
Tableau 打包工作簿
查看以下 Tableau 数据文件详细信息:
-
文件格式类型:压缩。
-
它包含什么:元数据、模式,以及可选的一个或多个数据提取。
-
它为什么有用:
.twbx
文件类型是使用 Tableau Reader 时必需的。它在访问 Tableau Server 不直接连接的数据源时(如平面文件、Microsoft Excel 和 Access 文件)也可以有效使用。接下来将讨论.twbx
文件的缺点。 -
如何生成它:
.twbx
文件通过 文件 | 另存为 创建,然后在弹出的对话框中选择.twbx
文件类型。 -
如何访问它:
.twbx
文件可以通过 Tableau Desktop 打开,或者通过指向 Tableau Server 实例的浏览器访问。由于.twbx
文件是一个压缩文件,它也可以通过压缩工具(如 WinZip 或 7-Zip)解压缩。
其他文件类型
你应该熟悉的其余文件类型与 Tableau Server 并没有特别的关联,因此这里只会简要讨论。Tableau Desktop 提取文件与 Tableau Server 版本之间可能存在兼容性问题。有关兼容性场景的完整列表,请访问help.tableau.com/current/desktopdeploy/en-us/desktop_deploy_compatibility.htm
。
让我们看一下以下其他文件类型:
-
Tableau 数据提取:
.hyper
文件可以通过以下方式生成:如果.twb
文件在 Tableau Desktop 中打开,可以通过右键点击数据窗格中的数据源并选择提取数据来创建.hyper
文件。选择所需的选项后,Tableau 将提供一个对话框,供作者将文件保存到指定位置。提取的文件可以用来创建数据源的本地快照,从而提供更快的创作体验。这个本地快照也是可移植的,因此可以离线使用。 -
Tableau 书签:
.tbm
文件可以通过窗口 | 书签 | 创建书签来生成。它对于在多个工作簿之间复制工作表以及在多个工作簿之间共享格式非常有用。 -
Tableau 地图源:在第九章,与地图一起工作中,我们讨论了 Mapbox 和 WMS 的使用;如果你想保存这些仪表板,可以将其保存为
.tms
格式。 -
Tableau 偏好设置源:
.tps
文件可以用来创建自定义的颜色调色板。当一个组织希望在 Tableau 工作簿中使用其自有颜色方案时,这非常有用。Tableau 使用的.tps
文件称为Preferences.tps
,并位于My Tableau Repository
中。由于它是 XML 格式,因此可以通过文本编辑器进行修改。Matt Francis 发布了一篇有用的博客,地址为wannabedatarockstar.blogspot.com/
,清晰地讲解了如何调整这个文件。你也可以参考 Tableau 的帮助页面。
现在我们已经讨论了不同的文件类型,让我们来谈谈网页创作。
网页创作
在你将仪表板发布到 Tableau Server 后,如何编辑它呢?Tableau 提供了两种选项。在第一种选项中,你和所有有权限访问并下载该仪表板的人都可以下载它,在 Tableau Desktop 中编辑,并用新的上传文件覆盖 Tableau Server 上的最新版本。另一种选项是在服务器上实时编辑仪表板。这个功能叫做Web 创作。Web 创作是 Tableau Server 的一个功能,提供了一个类似于 Tableau Desktop 的创作界面。最初,Web 创作界面功能有限,但每个版本都会增加更多的功能。因此,Tableau Server 的 Web 创作环境和 Tableau Desktop 之间的能力差距已经缩小。Web 创作环境提供了强大的功能,能够创建和应用表计算,并支持创建仪表板。
截至目前,Tableau Server 的 Web 创作环境中仍然缺少一些功能,但以下链接会给你一个概述,比较 Tableau Desktop 和 Tableau Server Web 创作功能:help.tableau.com/current/pro/desktop/en-us/server_desktop_web_edit_differences.htm
。
接下来,通过两个非常简短的练习,演示如何访问 Tableau Server 中的创作环境。请记住,Tableau Server 管理员需要为用户授予相应的权限才能执行此操作。
使用 Web 创作编辑现有工作簿
让我们按照以下步骤,在 Tableau Server 上编辑现有的工作簿:
-
登录到 Tableau Server 实例。
-
选择我们在将数据源发布到 Tableau Server部分上传的
My Superstore
数据源。 -
选择新建,工作簿,以便基于发布的数据源创建工作簿:
图 14.3:已发布数据源
-
将类别拖到列,将利润拖到行。
-
现在点击文件 | 另存为…,在弹出的窗口中为工作簿选择一个名称(我将其命名为
Test
),然后点击发布:
图 14.4:发布工作簿
- 如果你现在回到 Tableau Server 的默认文件夹,你会看到一个额外的工作簿,名为Test,它与My Superstore发布的数据源并排:
图 14.5:工作簿视图
- 如果你想继续编辑
Test
工作簿,只需在 Tableau Server 上打开它,并选择编辑按钮:
图 14.6:Web 创作
这就是最简单的方式了。
到目前为止,我们已经发布了一个数据集,在 Tableau Server 上基于该数据集创建了一个工作簿,也许你已经编辑了这个工作簿。如果还没有,别担心,我们将在接下来的练习中进行编辑。
理解 Tableau Server 的 Web 创作环境
让我们执行以下步骤,以了解 Tableau Server Web 创作环境:
- 打开与本章相关联的工作簿,并注意到
Sales & Quota
工作表:
图 14.7:Web 创作 II
- 通过点击 服务器 | 发布工作簿 将工作表发布到 Tableau Server 实例。在出现的窗口中,将工作簿重命名为
Sales & Quota
,并确保只上传 Sales & Quota 工作表:
图 14.8:发布工作簿
- 将会弹出以下对话框:
图 14.9:发布工作簿 II
- 通过点击 Sales & Quota 发布视图,打开 Tableau Server 上的工作表,然后点击 编辑 进入 Web 创作:
图 14.10:访问 Web 创作
-
从这里,你应该会看到一个类似于你在 Tableau Desktop 中使用的界面。这就是 Web 创作的全部内容——你可以在线使用大部分 Tableau Desktop 的功能,而且只要你的工作簿已经发布到 Tableau Server,就不需要打开 Tableau Desktop。来试试吧!
-
你可能首先会注意到,尽管我们没有发布
Cover
或Publish
工作表,但它在 Web 创作视图中是可见的。你可以右键点击其中一个工作表,通过选择 发布,将其使 Tableau Server 上无法访问 Web 创作的用户可访问:
图 14.11:Web 创作
- 接下来,在
Sales & Quota
标签上,按住 Ctrl(Windows)或 Command(macOS)键,然后拖动 Quota Met? 字段到 行 货架上:
图 14.12:Web 创作 II
-
你将看到在视图中出现了叉号和勾号。这表明我们不仅可以使用颜色来指示是否达到了配额,还可以使用这个简单的计算字段在视图中添加标记:
IF SUM([Sales]) >= [Quota] THEN "
" ELSE "
" END
。尽管如此,你可以随意尝试在 Tableau Desktop 中轻松处理的其他操作,包括以下内容:-
创建计算字段
-
添加过滤器
-
调整工具提示
-
创建新工作表
-
创建仪表板
-
编辑完成后,尝试点击右上角的叉号。你会看到你的更改在仪表板中不可见。再次点击 编辑 进入 Web 创作模式,瞧!Quota Met? 仍然显示在 行 货架上。根据你的服务器设置,Tableau 会自动保存,但你必须使用 发布 按钮才能让更改对服务器上的查看者可见。
在 Tableau Server 上维护工作簿
我们已经讨论了仪表板编辑选项和自动保存,但还没有讨论如何跟踪更改,并确保在生成新信息的过程中不会丢失重要数据。本节将提供关于如何在 Tableau Server 上维护工作簿的帮助,首先从修订历史开始。
修订历史
作为 Tableau 仪表板开发者或 Tableau Server 管理员,您希望确保用户始终查看正确的数据。但有时会发生这种情况:您编辑了一个仪表板,编辑后仪表板显示错误信息。一位用户打电话给您,要求立即恢复旧的仪表板。您该怎么办?使用修订历史!
Tableau Server 配备了修订历史,确保每个工作簿和数据源的过去 25 个版本都可以恢复。此设置可以由 Tableau Server 管理员启用或禁用。在 Tableau Desktop 中,如果您尝试上传一个与先前上传文件同名的工作簿或数据源,Tableau Desktop 会显示类似工作簿名称已被使用的警告:
图 14.13:覆盖数据源
发布将覆盖现有的数据源。如果继续上传,版本控制将被激活,文件的先前版本将作为修订版保持可访问。要访问 Tableau Server 中单个工作簿和数据源的修订历史,只需选择任何上传的数据源或工作簿,并点击右下角的三个点。在弹出窗口中,选择修订历史...:
图 14.14:修订历史...
这将打开一个对话框,您可以选择恢复哪个先前的版本:
图 14.15:修订历史 II
修订历史非常有用!我希望你不必经常使用它们,但拥有这个选项总是好的。许多组织接下来的问题是,如何确保用户只能看到他们应该看到的内容,而不是 Tableau Server 上发布的所有内容?一种解决方案是用户过滤器。我们接下来将讨论这个话题!
用户过滤器
学生们经常问我类似以下的问题:我有负责不同区域的销售经理。对于销售经理来说,重要的是他们只能看到自己的指标;也就是说,不能看到其他销售经理的指标。为了实现这一点,我需要为每个销售经理创建单独的工作簿吗?
幸运的是,答案是否定的。Tableau 提供了用户过滤器,允许 Tableau 作者确保每位销售经理只看到他们有权限查看的信息。为了演示这一点,请按照以下步骤操作:
- 这个练习需要在 Tableau Server 上至少有一个用户。因此,请通过点击用户 | 添加用户来创建至少一个额外的用户。我使用了我自己拥有的第二个电子邮件地址来进行操作:
图 14.16:添加用户
-
作为可选步骤,您可以更改账户的显示名称。要更改账户的显示名称,请登录到
www.tableau.com/
,点击用户 | 编辑账户,并对姓名字段进行所需的更改。 -
作为第二个可选步骤,您可以将用户组分配给过滤器,而不是单个用户。为此,您可以创建不同的组,如下所示:
图 14.17:添加组
- 然后,您可以通过选择一个用户并在操作下选择组成员资格...,将 Tableau 服务器实例上的用户分为中部、东部、南部和西部区域:
图 14.18:添加组 II
-
现在,访问与本章相关的工作簿,并导航到
视图级用户过滤器
工作表。注意,视图是一个美国的字段地图,州位于详细信息架上,区域位于颜色架上,销售额位于标签架上。 -
通过服务器 | 从 Tableau Desktop 登录,登录到 Tableau 服务器的一个实例。
-
选择服务器 | 创建用户过滤器 | 区域...(仅可通过 Tableau Desktop 访问):
图 14.19:创建用户过滤器
- 在弹出的用户过滤器对话框中,您现在可以将单个用户或组分配给一个区域。将用户过滤器命名为
销售区域
,然后点击确定:
图 14.20:用户过滤器
- 注意,销售区域现在已被添加到数据窗格的集合部分:
图 14.21:设置已添加
-
将销售区域放置到过滤器架上。
-
在状态栏的右侧部分,点击下拉菜单访问用户过滤器:
图 14.22:在过滤器之间切换
- 选择不同的组或用户,注意显示的结果会根据图 14.20中的设置变化。
一旦工作簿发布到 Tableau 服务器,访问工作簿的用户将只能看到过滤器允许的内容。这也可以应用于数据源级别的已保存数据源。
需要注意的一点是,与简单地将维度过滤器添加到过滤器架上不同,您可能希望考虑将销售区域添加到数据源过滤器中。这一点非常重要,因为任何拥有网页创作权限的用户都可以轻松地从过滤器架上移除一个过滤器。在本练习的情况下,用户将能够查看所有区域的指标。然而,数据源过滤器无法通过网页创作环境删除,因此更加安全。此外,数据源过滤器是跨工作簿的,这进一步确保了数据的安全性。然而,如果您没有启用网页创作功能,过滤器架仍能发挥其作用。
关于过滤器和 Tableau 操作顺序的更多细节,请查阅第十三章,性能提升。
更多 Tableau Server 设置和功能
一旦仪表板已发布,用户可以设置警报、认证数据源、订阅、向仪表板添加评论等,具体取决于他们的权限。本节将介绍两个不同位置的不同功能:一个是在工作表上,另一个是在视图上。除此之外,Tableau Server 还有更多功能,尤其是面向站点管理员的设置——这些内容不幸地超出了本书的范围。
工作表级别的功能
我所说的工作表级别的功能,是指在选择一个项目和特定工作表后,您可以使用的设置,像这样:
图 14.23:Tableau Server
在此级别,我们看到八个不同的选项卡,我们将在接下来的几页中讨论这些内容。
视图:视图显示所有已发布的工作簿中的工作表或仪表板的缩略图。当将工作簿上传到 Tableau Server 时,您可以选择所有应在此处显示的视图:
图 14.24:发布工作簿
通过点击视图旁边的三个点,将显示更多选项,如以下屏幕截图所示:
图 14.25:选项
不同的选项是显而易见的:您可以编辑视图(也称为网页创作,我们在本章前面已经讨论过),还可以与其他用户共享视图,Tableau 会向您共享视图的用户发送一封包含图片和超链接的电子邮件。您还可以添加标签,帮助其他用户找到该视图,查看哪些用户或组有权限打开该视图,以及查看谁已经查看了该视图,最后,您还可以删除它。哪些选项会显示取决于 Tableau Server 的配置,您的管理员可以启用或禁用不同的功能,以便显示,或者它们可能会变灰。
数据源:下一个选项卡是数据源。它将为您提供创建此工作簿所使用的数据源概览:
图 14.26:数据源
您将能够看到使用了哪些类型的数据源;例如,通过点击每个源旁边的三个点,您将再次能够查看更多设置,这取决于您 Tableau Server 的设置:
图 14.27:数据源 II
连接度量:接下来是连接度量。这是一个相对较新的功能。要查看度量,首先必须在视图中设置它们。我们将在本节的第二部分讨论这个功能,基本上,它允许你选择来自不同仪表板和视图的部分数据点,并将这些数据点作为度量来监控你的数据。度量使用视图中的特定数据标记。因此,你可能需要调整视图,以显示你想要使用的那个标记。
例如,如果你有一个展示过去一年每日利润的仪表板,但你的度量应只显示最新的利润数据点,你将需要创建一个新的视图,以便在度量中使用明确的最新利润数据点,即使数据已经是初始视图的一部分。然而,一个很大的优势是,你不需要连接不同的数据源,因为在不同工作簿中已设置的连接会被利用。
关于度量的更多细节可以在这里找到:www.tableau.com/about/blog/2020/5/introducing-metrics-headlines-your-data
。
提取刷新:使用提取作为数据源时,你可以在上传工作簿到 Tableau Server 时,或者在发布工作簿后,定义一个刷新计划。不同的计划可以由你的服务器管理员设置。例如,如果你将提取刷新设置为每天早上 7 点运行,那么 Tableau Server 将在早上 7 点访问数据源(可能是 SQL 数据库),加载数据,然后你将在 Tableau 仪表板中看到最新的数据。根据数据量和数据源类型,使用提取的性能通常优于实时连接,但请注意,仪表板中的数据将始终保持为最新的提取数据。
订阅:订阅可以在视图级别设置;我们将在下一节讨论这一点。但在工作簿级别,你将能够看到与某个工作簿相关的所有激活的订阅。
数据血缘:数据血缘是 Tableau Server 上的一个相对较新的功能。它仅通过数据管理附加组件提供,需额外付费,并将显示数据源的依赖关系。
想了解更多关于数据血缘的信息,请访问help.tableau.com/current/server/en-us/dm_lineage.htm
。
使用情况:使用情况标签可以让你了解有多少人查看了你的仪表板,以及有多少其他用户将你的仪表板添加为收藏。
使用情况数据也可以从 Tableau 数据库中访问,因此可以用于进一步的分析。
最后,请注意工作簿页面上的三个点,它们包含更多选项以及我们之前看到的选项:
图 14.28:选项
再次提醒,你能够使用哪些功能取决于 Tableau Server 管理员给你设置的权限。
当选择基于发布的数据源时,可用的选项看起来会略有不同,就像我们在本章开始时发布到 Tableau Server 的 My Superstore
数据源:
图 14.29:选项 II
大多数项目都不言自明,但我想特别提一下质量警告,这是在数据管理附加组件中额外收费提供的功能。这个功能将允许你在使用数据或任何基于该数据的工作簿时,提醒每个用户要特别小心。
根据设置,Tableau Server 会显示各种类型的警告,如 已弃用、陈旧数据、维护中 和 敏感数据,这些都可以从下拉菜单中选择。
你还可以决定是否仅在数据源上显示类型,或在相关工作簿上也显示。以下是仅在数据源上显示的示例:
图 14.30:数据质量警告
这里是警告在工作簿级别的一个示例:
图 14.31:数据质量警告 II
即使在打开视图时:
图 14.32:数据质量警告 III
这是一个非常强大的功能,展示了每个版本发布后 Tableau 如何日益成熟。数据质量是许多数据策略的核心,也是所有分析的基础。Tableau Server 已经适应了这一点,并为你提供了将随着数据策略和质量措施一起发展的功能。
询问数据:在继续视图级别之前,最后一个项目是询问数据,该功能仅适用于 Tableau Server。要访问 询问数据,选择一个已发布的数据源并点击第一个标签。现在有趣的部分开始了,Tableau Server 会根据自然语言处理(NLP)帮助你构建可视化:
图 14.33:询问数据
在左侧,你可以看到所有可用的字段,而在中间,你可以创建一个所谓的镜头。镜头可以是用户特定的或小组特定的,其目的是帮助用户更容易地提出正确的问题,从而使用自然语言处理(NLP)从数据源中提取正确的信息。因此,它是一种更结构化和受管控的 NLP 方法。你甚至会看到更多的提示弹出:
图 14.34:询问数据 II
但回到创建镜头的部分。首先,选择你希望提供给用户的字段:
图 14.35:选择字段
提交你的设置,看看右侧的数据窗格发生了什么变化——现在它限制得多了:
图 14.36:数据
现在,你的用户可以开始询问类似以下内容的信息:
图 14.37 Ask Data III
你可以看到我输入了每年利润
,然后 Tableau 提供了四个不同的选项供我选择。我选择了第三个并点击了箭头按钮。看看现在发生了什么:
图 14.38:Ask Data 图表
Tableau Server 创建了一个视图。你还可以为数据集中的每个条目添加同义词,并尝试 Tableau 为你提供的众多建议之一。
图 14.39:字段详情
图 14.40:Ask Data 绘图
Ask Data有多酷?在我看来,这个功能特别强大,因为即使 Tableau 非常直观,很多人并不像你那样精通数据。提供高质量的数据集并将其发布到 Tableau Server,将使更多人能够数据驱动并自行进行快速分析。这将帮助你专注于更复杂的仪表盘,而临时问题则可以通过此功能来解答。
Tableau 提供了更多自助式的洞察功能;请参阅第十三章,提升性能,了解更多细节。
视图级别的功能
我们已经覆盖了工作簿级别的所有设置,现在我们将更仔细地看看一个较低级别的设置,即视图。视图大致如下,红框中的设置是本节内容的重点:
图 14.41:视图级别功能
数据详情:数据详情选项卡将显示与视图中使用的数据源相关的更多信息。此功能是通过数据管理附加组件提供的,需额外付费。右侧弹出窗口有三个不同的部分:此工作表的视图、数据源和使用中的字段:
图 14.42:数据详情
在上一节中,你将有机会单独打开每个字段。如果是计算字段,计算结果将显示;如果是来自原始数据源的字段,则会显示数据类型和描述(如果添加了描述):
图 14.43:数据详情 II
编辑:你已经知道这个功能了。编辑让你进入 Tableau Server 上的网页创作环境。
视图:视图选项卡允许您添加一个不同于默认视图的视图并保存。下次打开仪表板时,您可以通过点击该选项卡选择创建的视图,保存的设置将一次性应用。您的视图可能包含例如特定的筛选器选择、与默认视图不同的参数选择,或者是对您最重要的集合。这样,您无需每次打开视图时都更改筛选器、参数和集合,可以直接使用视图选项卡:
图 14.44:自定义视图
数据指南是仪表板中数据的总结。无需多言,应该很明了吧?
图 14.45:自定义视图
观看包含订阅、度量和警报:
图 14.46:自定义视图
警报:在撰写本文时,警报仅能设置在连续的数值轴上。然而,Tableau 论坛中正在讨论一些想法,旨在增加警报设置的灵活性。
在 Tableau Ideas 论坛中,用户可以写下他们对未来版本的想法,社区可以对此进行投票。获得高投票的想法有可能很快被采纳。您可以在此找到该论坛:community.tableau.com/community/ideas
。
点击警报按钮,右侧将显示以下文本:
图 14.47:警报
选择数值轴(例如销售额)后,将弹出一个新窗口,可以在其中输入条件和阈值。同时,还可以指定阈值检查的频率:
图 14.48:警报 II
如果设置了警报,当阈值被突破时,所有在该警报中指定的用户和团队将收到一封电子邮件。电子邮件将包含一张静态图像和一个指向 Tableau Server 上交互式版本的链接。
度量:如前所述,这是一个相对较新的功能。要创建度量,选择任何视图中的一个标记并点击度量选项卡。右侧将会打开如下屏幕:
图 14.49:度量
度量功能与 Tableau Mobile 紧密集成,因此可以用来向任何人展示关键绩效指标,无论他们身在何处。点击创建后,可以从已保存的项目中访问度量视图。
订阅:订阅用于频繁的电子邮件更新。它们的工作方式类似于警报;个人或团队可以订阅,届时将按预定时间收到包含相关仪表板概览的电子邮件。该时间表可以由管理员预先设置,例如,每天早上 7 点。
分享:点击分享,会弹出一个窗口,允许您与 Tableau 服务器上已知的任何人分享视图的 URL 链接。该人将收到一封带有链接的电子邮件。确保该用户可以访问项目,否则他们将无法打开该视图:
图 14.50:分享视图
下载:Tableau 服务器还提供下载功能。根据管理员进行的配置,您可以选择不同格式进行下载:
图 14.51:下载
备注:最后但同样重要的是,您可以对视图进行评论——无论是原始的还是编辑后的,两者都可以。要这样做,请单击右上角的备注按钮:
图 14.52:评论
您可以在评论中提到同事的名字 @colleaguesname
,他们将收到一封包含您评论的电子邮件。还可以向评论中添加截图。
摘要
我们从查看 Tableau 服务器设置开始了这一章,我们了解到修订历史功能可以在意外覆盖文件时提供安全保障。我们探讨了 Tableau 服务器 Web 创作环境的部分,将该环境与 Tableau Desktop 进行了比较。本节的主要目的是建立一个知识库,以确定哪些人员应该拥有 Tableau Desktop 许可证,以及哪些人应该足够使用 Tableau 服务器的 Web 创作能力。
然后我们讨论了用户筛选器。用户筛选器使 Tableau 作者能够确保用户只能访问其有权限的数据。最后,我们看了一些方便的功能,如警报、订阅、评论等。
在下一章中,我们将从 Tableau 世界分支出来,考虑如何将其与 R 和 Python 集成。了解编程集成的知识将帮助 Tableau 作者完成超出 Tableau 能力范围的分析任务,同时仍然使用 Tableau 来可视化结果。
在 Discord 上了解更多
要加入此书的 Discord 社区——在那里您可以分享反馈,向作者提问,并了解新版本发布信息——请扫描下方的 QR 码:
第十五章:集成编程语言
在经历了 14 章关于 Tableau 功能和练习的学习之后,我们还缺少什么?没错,那个能开启全新机会的大功能:编程集成!如果你需要的功能是 Tableau 计算字段本身没有覆盖的,而且你知道如何编写代码,你可以依赖编程集成。具体来说,支持两种语言:R 和 Python。
想象以下场景:你处理的是一个金融数据集,并且希望在 Tableau 仪表板上添加一个期权定价公式。你查找公式时,发现自己有所有必需的变量,比如行使价格、股票价格和波动率,但你还需要一个概率密度函数,而这个在 Tableau 中找不到。在这种情况下,你可以利用编程集成,在 R 或 Python 中运行计算并返回输出——是不是很棒?现在再想象第二个场景:你正在做一个情感分析项目。你可以在 Tableau 之外的 Python 中计算情感分析,然后将输出作为模型的输入,但如果你能在 Tableau 中完成这一切岂不更好?当然可以,使用编程工具集成就能实现这一点。
在本章中,我们将涵盖以下内容:
-
集成编程语言
-
R 安装与集成
-
实现 R 功能
-
Python 安装与集成
-
实现 Python 功能
集成编程语言
集成如何增强 Tableau 功能?这是通过计算字段实现的。Tableau 动态地与 Rserve 或 TabPy 接口,传递值并接收结果。而 Tableau Prep Builder 也有 R 和 Python 集成功能,正如我们在第三章《使用 Tableau Prep Builder》中看到的那样!所以,让我们不浪费时间,直接开始吧。
基本的 Tableau 与 R 及 Tableau 与 Python 集成非常简单:视图通过计算字段显示数据,借助这些计算字段,Tableau 将数据分别推送到 Rserve 或 TabPy,然后通过表格计算获取结果:
图 15.1:Tableau 外部服务
无论是在 Tableau Desktop 上查看工作簿,还是通过 Tableau Server,若你希望运行 R 和 Python 计算,必须确保 Rserve 或 TabPy 可访问。
为了更好地理解集成过程,我们也来看一下 Tableau/R 工作流的示例。以下图中的术语,可能是你不熟悉的,会在本章中逐步解释:
图 15.2:Tableau/R 工作流
上面的截图同样适用于 Python。我们先从 R 开始,因为它是第一个可用的集成方式。
R 安装与集成
为了充分理解 Tableau 与 R 如何协同工作,重要的是要掌握宏观的概念。为了便于理解,我们将在本节中概述一些高层次的概念和信息,然后再深入计算字段和 R 脚本的细节。
安装 R 通常不难,但它不仅仅是双击可执行文件那么简单。要成功将 Tableau 与 R 连接,您需要确保权限设置正确,并且各种组件——一些是必需的,一些只是附加的——都已正确实现。我们将涵盖基础内容,回顾一些安装过程中常见的挑战,并提供故障排除指南。
执行以下步骤来安装 R:
-
访问
www.r-project.org/
下载 R,点击 download R 超链接,并选择一个 CRAN 镜像。请注意,R 在 Linux 或 Unix 环境下表现最佳;然而,为了学习 R 并开始使用 Tableau/R 功能完成本章的练习,安装 Windows 版本就足够了。 -
通过双击下载的可执行文件安装 R。
-
打开 R。
安装 R 时可能会遇到各种问题。例如,您可能会因为 R 工作目录的权限不足而遇到问题。当尝试安装 R 包时,这个问题可能会首先显现。为了解决这个问题,您可以使用 getwd()
函数确定 R 的工作目录。接下来,可以通过 setwd()
更改工作目录,或者在操作系统层面——无论您更倾向于哪个方法——为工作目录设置适当的读取和执行权限。
问题还可能由于安全系统和端口配置问题而出现。默认情况下,Tableau 将通过端口 6311
连接到 Rserve。或者,您可以在 Tableau 中指定不同的端口来连接 R。
www.r-project.org/
上的文档提供了有关解决各种安装问题的详细信息。
虽然不是必须的,但 RStudio Desktop 提供的用户界面比默认安装的 R GUI 更好。RStudio 包含一个控制台,提供智能代码补全(即 IntelliSense)、一个工作区浏览器,可以方便地访问文件、包和帮助文档,一个数据查看器等等,所有这些都在一个统一的环境中:
图 15.3:RStudio
RStudio 的开源版本适用于许多使用场景。您可以通过 posit.co/download/rstudio-desktop/
下载该应用程序。只需根据个人喜好选择 Desktop 版或 R GUI 版。
打开 R:
图 15.4:R GUI
要与 Tableau 建立连接,您需要启动 Rserve。技术上,Rserve 是一个独立的包;然而,它默认与 R 一起安装:
-
为确保安装了 Rserve 包,在 R 中输入以下命令:
rownames(installed.packages())
-
应该列出几个包,包括 RServe。如果由于某种原因 Rserve 包没有随您的 R 实例一起安装,您可以通过以下命令进行安装:
install.packages("Rserve")
-
要启动
Rserve
,请输入library(Rserve); Rserve()
。
分号(;
)表示 R 中一行新代码的开始:
图 15.5:Rserve 初始化
现在你已经成功安装了 R 并启动了 Rserve,接下来可以将 Tableau 连接到 R。在 Tableau 中,选择帮助 | 设置与性能 | 管理分析扩展连接…:
图 15.6:分析扩展
管理分析扩展连接屏幕将会打开;选择RServe。以下截图中的默认设置适用于大多数本地安装:
图 15.7:分析扩展连接
尽管将 Tableau 与 R 集成并不需要与 R 界面进行任何交互,但你可能希望在将代码嵌入 Tableau 之前,在 GUI(如 R GUI 或 RStudio)中试用你的 R 代码。这将使你能够利用 R 语言相关的有用附加功能,如帮助、示例和为 R 量身定制的示例数据集。请注意,Tableau 中的计算字段编辑器仅作为 R 代码的传递工具,并不提供任何支持。
实现 R 功能
既然我们已经成功将 Tableau 与 R 连接,接下来让我们在 Tableau 中编写一些代码来调用 R。在 Tableau 中,打开计算字段编辑器。注意以SCRIPT_
开头的函数类,如以下截图所示:
图 15.8:SCRIPT_ 函数
SCRIPT_
函数由 Tableau 用于调用 R。函数名表示返回结果的数据类型;SCRIPT_REAL
返回浮动值,SCRIPT_BOOL
返回真或假值,依此类推。
SCRIPT_
函数的语法在下图中表示:
图 15.9:R 脚本语法
上面的示例代码计算了平均利润,但我们将在接下来的章节中探讨更多示例。首先,通过使用 R 集成功能再现 Tableau 功能,从而证明 R 工作正常。
在 R 中再现原生 Tableau 功能
在我们的第一个练习中,我们将使用 Tableau 中的AVG
、MEDIAN
和STDEV
函数,并将结果与 R 中的mean
、median
和sd
函数进行比较。这将帮助你练习SCRIPT_
函数,开始理解 R 语法,并比较 Tableau 生成的结果与 R 生成的结果。
执行以下步骤:
-
访问
public.tableau.com/profile/marleen.meier/
来定位并下载与本章相关的工作簿。 -
导航到
median | mean | sd
工作表。 -
选择
Superstore
数据源。 -
创建以下 Tableau 中心的计算:
-
Tab Avg
:WINDOW_AVG(SUM(Sales))
-
Tab Median
:WINDOW_MEDIAN(SUM(Sales))
-
Tab Stdev
:WINDOW_STDEV(SUM(Sales))
-
-
将 Region 维度放到 行架上,并将 Sales 放到 文本架上。
-
双击 Tab Avg、Tab Median 和 Tab Stdev。它们将出现在 度量值架上:
图 15.10:测试 R
-
确保 R 已按照 R 安装与集成 部分的说明安装、连接并运行。
-
如果你还没有安装
Rserve
包,可以在 R 界面中输入install.packages("Rserve")
来安装Rserve
包。 -
接下来,在 R 界面中输入
library(Rserve); Rserve()
。你可能会看到以下错误:Fatal error: you must specify '--save', '--no-save' or '--vanilla'
在这种情况下,输入
Rserve(args = "--no-save")
。R 要求你在会话结束时选择保存、不保存或其他组合(默认)。我个人偏好选择不保存,但其他两种选项也可以。 -
按照 R 安装与集成 部分的说明,将 R 连接到 Tableau。完成此操作后,返回 Tableau 并点击 测试连接 按钮,检查是否连接成功:
图 15.11:测试 R 连接
-
点击 确定 关闭窗口。
-
在 Tableau 中创建以下以 R 为中心的计算。注意,R 函数(如
mean
)区分大小写:-
R
-
mean
:SCRIPT_INT("mean(.arg1)", SUM(Sales))
-
R
-
median
:SCRIPT_REAL ("median(.arg1)", SUM(Sales))
-
R
-
sd
:SCRIPT_INT("sd(.arg1)", SUM(Sales))
-
-
将每个 R 计算字段放到 度量值架上,并将它们排列在一起,使得相同类型的计算并排,但 Tableau 和 R 计算交替出现;例如,Tab Avg 然后是 R – mean,接着是 Tab Median,再是 R – median,依此类推。由于
SCRIPT_
函数被分类为表格计算(稍后会详细讲解),确保每个 R 计算字段和 Tableau 计算字段都使用 Compute Using 设置为 Table (Down):
图 15.12:Tableau 与 R 输出对比
- 注意,Tableau 和 R 函数显示的结果是相同的。
注意,INT
在中位数计算中已被替换为 REAL
,这表明,正如名称所示,SCRIPT_REAL
使用浮动值,而 SCRIPT_INT
使用整数。以中位数为例,SCRIPT_INT
函数会导致四舍五入的差异——试试看,自己验证一下!
这是我们第一次进行 R 集成练习——很简单吧?这次练习的主要目的是向你展示 R 计算的工作原理,因此我们比较了三种相同的计算,每种计算都由 Tableau 和 R 计算。换句话说,就是复制 Tableau 的功能以验证 R 集成是否按预期工作。下一次练习将是我们不能通过 Tableau 内建功能完成的(截至撰写本文时)。我们将进行一个涉及两个以上变量的回归分析。
使用 R 进行回归计算
简而言之,回归分析是一种估算变量关系的技术。回归分析有几种类型,其中最常用的是线性回归。如以下截图所示,线性回归估算出最适合数据的线,并且是 Tableau 中的内置功能。
您只需要在Rows和Columns上放置两个度量,并且还需要一个维度来划分视图中的点。然后,转到Analysis并将Trend Line拖到屏幕上,选择Linear:
图 15.13:散点图
请注意,这张截图来自 Tableau。您可以通过点击与本章相关的工作簿中的Scatterplot工作表来访问它。这是一个简单的散点图,已启用趋势线。在 Tableau 中,趋势线默认为线性,但也包括对数、指数和多项式选项,这些都是回归分析的示例。通过在使用趋势线的可视化中访问Worksheet | Export | Data,您可以生成一个带有预测值和残差的Access数据库。但是这是一个繁琐的过程,不能为更强大的线性回归应用提供一个稳健的动态解决方案。使用 R 语言可以提供更多的灵活性。
线性回归可以使用单个或多个变量。单变量方程适合学习,但在实际应用中通常需要多变量方程。以下练习包含了多变量方程。我们本次练习的目标是确定线性回归模型如何拟合COUNT(Quantity)
、SUM(Sales)
和AVG(Discount)
这几个变量:
-
转到
Regression
工作表。 -
选择
Superstore
数据源。 -
通过将Profit放置在Columns架上,将State放置在Rows架上,并通过将State放置在Filters架上来过滤Profit的Top 10,构建基本布局:
图 15.14:筛选前 10 名
-
创建一个名为
Profit_Expected
的计算字段,使用以下代码:SCRIPT_REAL(" x <- lm(.arg1 ~ .arg2 + .arg3 + .arg4) x$fitted", SUM(Profit), COUNT(Quantity), SUM(Sales), AVG(Discount) )
该功能的详细信息将在稍后解释。
-
创建一个名为
% Diff
的计算字段,用于计算SUM
(Profit
)和Profit_Expected
之间的百分比差异:SUM(Profit)/Profit_Expected - 1
-
创建一个名为
Profit_Expected (residuals)
的计算字段,返回SUM
(Profit
)和Profit_Expected
之间的美元差异:SCRIPT_REAL(" x <- lm(.arg1 ~ .arg2 + .arg3 + .arg4) x$residuals", SUM(Profit),COUNT(Quantity), SUM(Sales), AVG(Discount))
-
将Profit_Expected放置在Columns架上,紧挨着Profit。然后,点击任意一个并启用双轴。
-
右键单击一个轴并选择同步轴。
-
在Marks卡片的SUM(Profit)部分,将
% Diff
移到Color架上。选择红黑渐变色板,并将Stepped Color的Steps设置为2
。这样,所有正值将显示为黑色,所有负值将显示为红色。确保选择Bar作为视图类型。
图 15.15:颜色编码
-
从菜单中选择 Analysis | Stack Marks | Off。
-
在 Marks 卡片上的 Profit_Expected 部分,将 Profit_Expected (residuals)、% Diff 和 Profit_Expected 移动到 Label 货架上。确保选择 Gantt Bar 作为视图类型。
-
仔细检查所有的表格计算(由三角形符号表示:Profit_Expected (residuals)、% Diff 和 Profit_Expected)是否使用 State 进行计算:
图 15.16:计算使用
- 点击 Label,然后在 Text 部分的三个点上点击并编辑标签,按照自己的喜好调整:
图 15.17:预期利润
根据需要调整 Bar 和 Gantt Bar 的大小,并观察结果:
图 15.18:回归分析
图 15.18 中的可视化显示了实际利润、预期利润和两者之间差异的比较。这个计算在零售市场尤其有用,但在任何公司的财务规划中也同样重要。
现在我们已经完成了练习,让我们花一点时间考虑一下我们在这个练习中使用的一些代码:
SCRIPT_REAL |
这个 Tableau 函数调用 R 引擎并返回一个浮动值。 |
---|---|
"x <- lm(.arg1 ~ .arg2 +.arg3+.arg4); x$residuals" |
这是一个 R 表达式,包含一个变量、一个函数和一个参数,然后返回预测值。 |
x <- |
这是一个变量,用于后续 R 函数的填充。 |
lm(.arg1 ~ .arg2 + .arg3 +.arg4) |
这个 R 函数用于拟合线性模型。它可以根据参数提供的变量返回回归分析。括号中的内容被称为参数,用于拟合模型。具体而言,响应值在波浪符号(~ )的左侧,模型在右侧。因此,这是一个多变量线性回归,其中 .arg1 = SUM(Profit) 、.arg2 = COUNT(Quantity) 、.arg3 = SUM(Sales) 和 .arg4 = AVG(Discount) 。用英文描述,参数可以读作 SUM(Profit) ,它被建模为 COUNT(Quantity) 、SUM(Sales) 和 AVG(Discount) 的组合项。 |
x$fitted |
lm 函数返回许多值作为其模型对象的一部分,包括系数、残差、秩和拟合值。x$fitted 引用的是作为传递数据到模型结果的拟合值。 |
", SUM(Profit), COUNT(Quantity), SUM(Sales) , AVG(Discount)) |
这些是用于填充 .arg# 变量的参数。请注意,双引号(" ) 表示传递给 R 的代码的结束,而逗号(, )表示 Tableau 函数的第二部分,也就是表达式。 |
成功实现回归之后,我们将探讨一种不同的统计方法,通常用于区分数据集中的子集,称为聚类。
使用 R 在 Tableau 中进行聚类
聚类用于从较大的数据集中选择具有相似特征的成员组成的小子集。例如,考虑一个市场营销场景。你有一个庞大的客户群,计划向他们发送广告材料;然而,成本限制使你无法向每个客户发送材料。对数据集进行聚类将返回具有相似特征的客户组。然后,你可以调查这些结果并选择一个目标群体。
主要的聚类方法包括层次聚类和 k-均值聚类。层次聚类更为彻底,因此时间消耗也更多。它生成一系列模型,从 1(包含所有数据点)到 n(每个数据点是一个独立模型)。k-均值聚类是一种更快的方法,用户或其他函数定义聚类的数量。例如,用户可以选择从包含一千个成员的数据集中创建四个聚类。
Tableau 包含聚类功能。你可以在 分析 标签下找到此功能。Tableau 中的聚类实现基于四个支柱:
-
严谨的方法论
-
可重复的结果
-
快速处理时间
-
易于使用
一定要查看更多细节(help.tableau.com/current/pro/desktop/en-us/clustering.htm
)以及随附解决方案工作簿中的 聚类(Tableau 原生) 标签。
Tableau 开发团队有多种方式可以处理聚类。例如,R 提供了许多不同的聚类包,采用不同的方法。Tableau 作者可能有充分的理由选择这些不同的方法。例如,使用 Tableau 原生聚类功能时,聚类结果始终相同。但并不一定非得如此。通过使用 R 进行聚类,底层数据和视图可能保持不变,但每次刷新时聚类结果可能不同,因为该函数会在看到整个数据集之前停留在最佳结果(局部最小值)处。使用所谓的局部最小值与全局最小值之间的性能权衡已经被证明是值得的。但根据数字的顺序,局部最小值每次运行函数时可能会有所不同。如果你正在寻找标记可能在不同聚类之间切换的边缘情况,这可能对你有利。以下示例探讨了这种情况。
本次练习的目标是基于出生率和婴儿死亡率将世界各国分为四个聚类:
-
导航到
Cluster (R)
工作表。 -
选择
World Indicators
数据源(此数据集随 Tableau 一起提供,可以在 已保存的数据源 下找到)。 -
通过将 婴儿死亡率 放置在 列 区域,出生率 放置在 行 区域,国家/地区 放置在 详细信息 区域来构建初始视图。
右键点击每个轴并选择Logarithmic,取消选中Include Zero。这将使数据点更加均匀地分布,并有助于使可视化效果更加美观且易于阅读:
图 15.19:聚类
-
创建一个名为
Cluster
的计算字段,代码如下:SCRIPT_INT(" m <- cbind(.arg1, .arg2); kmeans(m,4,nstart=5)$cluster", AVG( [Life Expectancy Female] ), AVG([Life Expectancy Male]))
这段代码的详细解释将在本练习结束时进行。
将你刚刚创建的Cluster字段拖动到Detail和Color架上。请注意,Rserve 引擎会抛出一个错误:
图 15.20:错误处理
这是因为底层数据集中存在空值。例如,数据中没有Puerto Rico的Infant Mortality Rate。
如果你在其他度量中遇到此错误,解决方案是相同的。
为了纠正错误,将Infant Mortality Rate字段拖动到Filters架上。在Filter对话框中,选择如下值以去除所有小于
0.01
的值:图 15.21:过滤器
-
确保将Cluster设置为Discrete并将Compute Using | Country/Region设置为避免另一个错误:error in k-means (m, 4, nstart = 5): more cluster centers than distinct data points。
-
结果视图应如下图所示:
图 15.22:聚类
- 按下F5并观察每次刷新时聚类的变化。
现在我们已经完成了练习,花点时间回顾一下我们看到的一些代码:
SCRIPT_REAL |
这个 Tableau 函数调用 R 引擎并返回一个浮动值。 |
---|---|
"m <- cbind(.arg1, .arg2); kmeans(m,4,nstart=1)$cluster" |
这是包含一个变量、一个函数和一个参数的 R 表达式,然后返回聚类结果。 |
m <- |
这是一个变量,后续的 R 函数将填充该变量。 |
cbind |
这个 R 函数将以下.arg# 变量合并为列。 |
(.arg1, .arg2) |
括号中的变量被称为参数。每个变量包含向量信息。具体来说,.arg1 = AVG( [Infant Mortality Rate] ) 和.arg2 = AVG([Birth Rate]) 。 |
kmeans(m,4,nstart=1)$cluster" |
kmeans 声明了聚类方法。m 包含由cbind 参数创建的向量。4 是指定的聚类数量。nstart 声明了随机集的数量。 |
", AVG( [Infant Mortality Rate] ), AVG([Birth Rate])) |
这些是用于填充.arg# 变量的参数。请注意,双引号(" )标志着传递给 R 的代码的结束,而逗号(, )标志着 Tableau 函数的第二部分,即表达式。 |
我们达成了什么目标?我们成功地根据寿命预期将数据集中的国家分为四个子组。我们在散点图中展示了基于两个度量:婴儿死亡率和出生率的聚类结果。通过这种方式,我们可以间接地同时分析四个度量,在本例中为婴儿死亡率、出生率、国家/地区和寿命预期。R 的聚类基于k-均值方法,这与 Tableau 默认的聚类方法不同,可以调整为在 R 中执行的任何方法。
接下来,我们将探索分位数的世界。
引入分位数
分位数通常被认为与四分位数同义,但它们并不相同。分位数是将一组值均匀分割的集合。四分位数是分位数的一种类型—比如五分位数、三分位数和十分位数也是如此。为了理解分位数如何均匀地划分值的分布,想象一下将一组数据乘以 1/4、2/4、3/4、4/4,你就得到了 4 个四分位数。为了得到五分位数,你将数据乘以 1/5、2/5、3/5、4/5、5/5,以此类推。
Tableau 允许你通过右键点击一个坐标轴并选择添加参考线 | 分布 | 计算 | 分位数来查看分位数:
图 15.23:三分位数
但是你也可以将分位数的数量改为 4、5 或其他任何数字,以创建四分位数、五分位数等。通过这种方式访问的分位数功能相当有限。主要是因为参考线不会生成可以放置到架上的度量。这限制了可视化选项。通过 R 生成分位数可以大大扩展这些选项。
本次练习的目标是通过 R 创建n个分位数,按销售额查看客户分布。我们将通过创建限制数据集成员数的参数来进一步扩展练习,限制在给定的百分位数范围内。最后,我们将通过添加抖动来微调可视化效果。
让我们来看一下接下来的步骤:
-
转到
Quantiles
工作表。 -
选择
Superstore
数据源。 -
将视图类型更改为形状,在标记卡片上。
-
将销售额拖动到行架上,将客户姓名拖动到详细信息架上,将地区拖动到颜色架上:
图 15.24:分位数
- 创建并显示一个名为
Number of quantiles
的参数,设置如下:
图 15.25:分位数参数
-
右键点击已创建的参数并选择显示参数。
-
创建一个名为
Quantiles
的计算字段,并使用以下代码:SCRIPT_REAL(" x <- .arg1; y <- .arg2[1]; m <- c(1:y)/y; n <- length(x); z <- c(1:n); for (i in c(1:n)) z[i] <- 0; for (j in c(1:y)) for (i in c(1:n)) z[i] <- if (x[i] <= quantile(x,m)[j] && z[i] == 0 ) j else z[i]; z;" , SUM(Sales), [Number of quantiles])
这段代码的详细解释将在本练习结束时给出。
-
右键点击新创建的计算字段
Quantiles
并选择转换为离散。 -
创建并显示两个参数,选择百分位数下限范围和选择百分位数上限范围。对这两个参数使用以下设置:
图 15.26:百分位数参数
-
右键点击新创建的两个参数,并选择显示参数。
-
创建一个名为
Percentile
的计算字段,使用以下代码:RANK_PERCENTILE(SUM([Sales])) < [Select Percentile Top Range] AND RANK_PERCENTILE(SUM([Sales])) > [Select Percentile Bottom Range]
-
将分位数拖到列架上,并将计算方式设置为客户名称。
-
将百分位数拖到过滤器架上,点击确定,然后将计算方式设置为客户名称。再次打开过滤器并选择True值。
那么,回顾一下我们到目前为止做的工作。我们绘制了每个地区的销售值,然后添加了一个 R 脚本,将销售点云分成分位数。我们还创建了一个参数,让我们可以选择在视图中显示多少个分位数,因为我们了解到,分位数不一定非得是四分位数,它们也可以是三分位数、五分位数,甚至更多。
接下来我们将看到这个视图的实际效果,并且我们会加入抖动效果。
-
你可能希望添加以下这些额外的步骤来进一步增强可视化效果。为了使用抖动效果,创建一个索引计算字段
Index()
,并将该字段放置到列架上。将计算方式设置为客户名称。确保取消选择显示标题,以免索引显示在视图中。 -
右键点击每个坐标轴并选择对数,然后取消选择包含零。你应该会在屏幕上看到如下效果:
图 15.27:分位数仪表板
在前面的图中,我们可以看到我们决定显示四个分位数(利用分位数数量参数),因此这些被称为四分位数。通过将Index()
函数添加到列上,我们能够将这些分位数划分为四个部分。从这个仪表板得出的一个结论是,在这四个分位数中,西部地区的销售额最高,而南部地区的销售额最低。然而,中央和南部地区在第三分位数中非常接近。基于这些信息,我们可以进一步分析这些地区发生了什么,以及为什么中央地区的销售额在这一分位数中相比其他地区有所下降。
现在我们已经完成了练习,先花一点时间回顾一下我们在这个练习中看到的一些代码:
SCRIPT_REAL |
这个 Tableau 函数调用 R 引擎并返回一个浮动值。 |
---|---|
x <- .arg1; |
x 是我们将要创建分位数的变量。这里的变量是[销售] 。 |
y <- .arg2[1]; |
这个变量设置分位数的数量。[1] 强制设置为单一数字,而不是向量。 |
m <- c(1:y)/y; |
m 将概率均匀分布在1:y 之间。 |
n <- length(x); |
这设置了循环的大小。循环的相关内容将在下文讨论。 |
z <- c(1:n); for (i in c(1:n)) z[i] = 0; |
z 设置了初始响应向量,将所有元素初始化为 0。 |
for (j in c(1:y)) for (i in c(1:n)) z[i] = if (x[i] <= quantile(x,m)[j] && z[i] == 0 ) j else z[i]; |
对于每个分位数,我们遍历 z 向量,对于每个条目,我们测试 x 的值是否小于该分位数的上限。如果 x 已经被设置,我们就保持不变。否则,z[i] 就是该分位数(j )。 |
在本练习中,你看到通过使用 R,像聚类这样的 Tableau 默认功能可以得到扩展,这将为仪表板用户提供更多的自由,去回答在使用仪表板过程中出现的新问题,因为他们将能够例如修改参数并看到可视化的变化。现在我们已经了解了一些可能的 R 用例,是时候讨论一些值得关注的内容,即使用编程集成与 Tableau 结合时的性能挑战。
性能挑战
R 脚本是表计算。像所有表计算一样,这意味着你只能使用视图中存在的字段。另外,正确设置分区和定位也很重要,否则你可能会得到意外的结果。
在引入分位数部分中,你可能注意到,当使用 分位数数量 参数设置的分位数数量增多时,结果显示的时间会更长。这是因为 R 在 分位数 计算字段中对每个分位数运行一次循环。例如,如果 分位数数量 参数设置为 1,则循环仅运行一次。如果设置为 2,则运行两次,依此类推。经验法则是,R 代码每次只对每个分区执行一次。分区越多,性能就越慢。因此,在使用 R 代码时,尽可能减少分区的数量。
这部分是本章中的 R 代码。希望你喜欢这个部分,并且它能为你提供灵感,去构思出你自己的想法,扩展我们迄今为止分享的功能。接下来,我们将继续探讨另一种非常著名的编程语言:Python。幸运的是,Tableau 也与 Python 有集成层。
Python 安装与集成
Python 是一种解释型编程语言,以其可读性著称。首次发布是在 1991 年,距今已有相当一段时间(比大多数人猜测的要久),由 Guido van Rossum 开发。TabPy 是一个外部服务,允许你将 Python 与 Tableau 连接——类似于 Rserve。通过使用 TabPy,你可以将 Tableau 仪表板中的字段解析到 Python 中,执行计算,并将结果作为新计算的字段发送回 Tableau。或者,你还可以在计算字段中调用你在 Python 中实现的函数。关于 TabPy 的更详细文章可以在此处找到:tableaumagic.com/tableau-and-python-an-introduction
。
安装 Python 通常不难,但它涉及的内容不止是双击一个可执行文件。为了成功将 Tableau 与 Python 连接,你可能需要安装一些库,并在命令行中执行一些指令。接下来的段落将引导你完成这个过程。
安装 Python 的最简单方法是执行以下步骤:
-
下载 Anaconda 并选择 Python 3.10 版本:
www.anaconda.com
。其他任何 Python 解释器也可以使用。要将 Python 和 Tableau 集成,需要一些额外的步骤:
-
打开 Anaconda 中的 Jupyter Notebook 并输入:
!pip install tabpy
或者,在你的 Python 目录中,执行以下命令:
pip install tabpy
-
通过命令行或终端(Mac)导航到
TabPy
的安装目录,并在命令行或终端界面中输入tabpy
:
图 15.28:启动 TabPy
-
现在你已连接到
tabpy
服务器,该服务器必须在运行 Tableau 和 Python 时保持打开状态。 -
如果你遇到 TabPy 的其他问题,例如版本不兼容,快速的 Google 搜索能帮你解决大部分问题。
-
打开 Tableau,选择帮助 | 设置和性能 | 管理分析扩展连接,选择
localhost
作为服务器,并输入9004
作为端口:
图 15.29:分析扩展连接
-
正如你在前面的截图中看到的,如果你有任何安全问题或需要进行更大规模的企业推广,可以设置用户名、密码和 SSL。
-
点击测试连接,你应该会看到以下弹出窗口:
图 15.30:测试分析扩展
关于如何使 TabPy 正常运行的完整文档,请访问 github.com/tableau/TabPy
。如果你不想或不能在你的计算机上安装 TabPy,Tableau 还提供了一个 Docker 容器,可以安装 TabPy 的最新版本。你可以在这里找到更多信息:hub.docker.com/r/emhemh/tabpy/
。
实现 Python 功能
就像 R 一样,TabPy 在 Tableau 中使用SCRIPT_
函数。在接下来的部分中,我们将实践使用 TabPy,并查看多个使用案例。使用 TabPy 的 Tableau 计算与 R 非常相似。对于 TabPy,重要的是在计算字段中添加return
语句,并注意参数是用下划线而非点表示的:
图 15.31:Python TabPy 语法
这将在接下来的练习中表现出来;我们将首先研究随机数生成器。
随机数和正态随机数
许多计算可以通过计算字段轻松访问,其他则通过表格计算访问——还有一些隐藏的函数。隐藏的原因是这些函数尚未(完全)得到支持或测试;因此,使用时需小心。例如,如果你尝试查找Random
函数,你是无法找到的。但你仍然可以使用Random()
函数,如下所示:
图 15.32:随机数
另一种选择是使用 TabPy 获取Random
函数。我们将查看随机数以及具有变量mu
和sigma
的正态随机数。这将使我们能够从分布中抽取随机数,这是一种在统计学、定量建模等领域中常用的方法,用于模拟、再现或计算概率;mu
和 sigma
是定义分布的均值和标准差。
生成随机数
执行以下步骤,创建一个具有特定底层分布的随机变量点云,分布由均值和标准差定义:
-
创建一个包含一个
Index
列和从 1 到 1,000 的行的 Excel 表格。这是为了拥有一个初始数据集,包含我们想用于随机数生成器的行数。 -
保存文件并将 Tableau 连接到此 Excel 表格。你应该能看到一个名为Index的导入度量(就像你 Excel 文件中的标题一样)。
-
按照Python 安装与集成的说明将 Tableau 连接到 Python。
-
创建一个名为
Random
的计算字段,内容应如下所示:SCRIPT_REAL(" from numpy import random as rd return rd.random(_arg1[0]).tolist()", SIZE() )
-
将Index拖动到行,将Random拖动到列。
-
在 分析 标签页中禁用汇总度量。
图 15.33:随机数可视化
在上面的截图中,你可以看到 1,000 个随机数据点。让我们考虑在本练习中用于生成此可视化的一些代码:
SCRIPT_REAL |
这个 Tableau 函数调用 Python 引擎并返回一个浮动值。 |
---|---|
"from numpy import random as rd |
在这部分代码中,我们需要 Python 库numpy ,并且从该库中需要random 模块,我们将其以较短的名称rd 加载。 |
return |
此命令仅用于返回一个值。 |
rd.random(_arg1[0]).tolist()" |
在这一步,我们调用之前导入的rd 模块。从rd 模块中,我们调用random 函数。_arg1[0] 是为了给定某个值来激活该函数。最后,我们通过添加.tolist() 将所有检索到的值放入一个值的列表中。 |
SIZE() |
这是将替代_arg1 的值,_arg1 是random 函数所需的。我们使用SIZE() 来满足这个需求,因为它将返回分区中的行数,足以从该函数中获取一个随机数。 |
我们得到正好 1,000 个数字,因为我们的初始 Excel 表格有 1,000 行。通过使用计算字段,你可以向数据框中添加列,但不能添加行。因此,我们需要一个数据源来提供数据架构。在下一部分中,我们将学习如何指定从正态分布中抽取的随机数。
随机正态
现在,让我们重现一个正态分布的随机变量。这种技术通常用于统计建模中来计算概率。随机正态值可以用来替代或补充你已经收集的观测值。一旦我们学会如何使用正态分布,你也可以扩展这个知识并在 Tableau 中创建其他分布:
-
重用上一个练习中的工作簿。
-
创建一个
Random Normal
计算字段:SCRIPT_REAL(" from numpy import random as rd mu, sigma = 0, 1 return (rd.normal(mu, sigma, _arg1[0])).tolist() ", SIZE() )
-
将Random Normal放在列上,Index放在行上。
-
在分析标签中禁用聚合度量。
-
选择标记类型为圆形。你现在可以看到一个包含 1,000 个数据点的图表,这些数据点是正态分布的:
图 15.34:正态分布可视化
为了给用户更多的灵活性,你还可以向视图中添加与 Python 集成互动的参数。例如,创建以下两个参数:
图 15.35:sigma 和 mu 参数
然后,创建一个名为Random Normal Param
的计算字段,如下所示:
SCRIPT_REAL("
from numpy import random as rd
mu, sigma = _arg2, _arg3
return (rd.normal(mu, sigma, _arg1[0])).tolist()
",
SIZE(), [mu], [sigma]
)
向视图中添加参数控制,以便用户可以决定他们想要传递给 Python 的变量:
图 15.36:最终的正态分布工作表
与我们之前的正态分布可视化相比,你可以在前面的截图中看到,通过将 mu
参数改为 10,我们将均值改为 10,从而可以将整个点云向任何方向移动。通过在 Tableau 中使用随机数,你可以例如可视化一个蒙特卡罗模拟,这在许多现实生活中的应用中都非常有用,因为它能够模拟可能的概率结果,从而帮助相关方理解风险和不确定性的影响。
关于如何在 Tableau 中计算蒙特卡罗模拟的更多信息,请点击这里:jacksontwo.com/exploring-python-tableau
,此外,关于蒙特卡罗的更多内容可以在这里找到:www.ibm.com/topics/monte-carlo-simulation
。
在继续之前,我们再次考虑一下本次练习中使用的一些关键代码行:
SCRIPT_REAL |
这个 Tableau 函数调用 Python 引擎并返回一个浮动值。 |
---|---|
"from numpy import random as rd |
这一部分代码中,我们需要 Python 库 numpy ,并从该库中导入 random 模块,我们将使用简短的名字 rd 来加载它。 |
mu, sigma = _arg2,_arg3 |
这一部分定义了我们将使用 _arg2 和 _arg3 来引用 mu 和 sigma 。 |
return |
这个命令只是为了返回一个值。 |
rd.normal(mu, sigma, _arg1[0])).tolist() |
在这一步中,我们调用了之前导入的 rd 模块。从 rd 模块中,我们获取了 random 函数。_arg1[0] 是需要提供给函数以激活它的某个值。可选值为 mu 和 sigma ,这次我们将使用这两个值。最后,通过添加 .tolist() ,我们将获取到的所有值放入一个列表中。 |
SIZE(), [mu], [sigma] |
这是替换 _arg1 、_arg2 和 _arg3 的值。与之前一样,我们使用 SIZE() 来激活函数。可选值 mu 和 sigma 将指向我们之前创建的参数。 |
完成前两个与 TabPy 相关的练习后,我们学习了如何在 Tableau 中使用随机数。接下来,我们将随机数改为从正态分布中抽取的随机数,并向仪表板中添加参数,使得用户可以更改正态分布的mu
和sigma
。当然,你也可以将 TabPy 中的函数更改为其他分布。
下一个主题较为高级。我们将使用 TabPy 执行对 2003 到 2021 年报纸头条的情感分析。
计算情感分析
除了机器学习和人工智能,另一个日益被使用的术语是自然语言处理(NLP)。这是机器理解单词及其含义的过程。情感分析属于这一类别;该技术有不同的变种,其中之一是测量极性,即说话者是持有积极还是消极的意见。应用场景包括评论、推文、留言、情节、歌词等数据集。让我们来看看!
这个练习基于 Brit Cava 的想法,他使用了来自前 100 首歌曲歌词的 Makeover Monday 数据,尝试了 Tableau 与 Python 的集成。你可以在这里找到博客文章:www.tableau.com/about/blog/2016/12/using-python-sentiment-analysis-tableau-63606
。让我们用这个包含一百万条新闻标题的澳大利亚广播公司数据集来再现它:www.kaggle.com/datasets/therohk/million-headlines
。
-
在与该章节相关的工作簿中,导航到
Sentiment
Analysis
标签页。 -
连接到
Headlines
数据源。 -
将 Tableau 连接到 Python。
-
创建一个
Sentiment Score
计算字段。格式化内容,比如缩进文本,非常重要:SCRIPT_REAL(" from nltk.sentiment import SentimentIntensityAnalyzer text = _arg1 scores = [] sid = SentimentIntensityAnalyzer() for word in text: ss = sid.polarity_scores(word) scores.append(ss['compound']) return scores " ,ATTR([headline_text]))
-
创建一个
Color Coding
计算字段:IIF ([Sentiment Scores] >= 0, 'Positivity', 'Negativity')
-
将publish_date放置在行架上,并且将MONTH(publish_date)放置在同一架上。
-
将Sentiment Score放置在列架上。
-
将Color Coding添加到颜色架上,将headline_text添加到详情架上。最后,从分析窗格中拖动一条平均线到视图中(每个单元格):
图 15.37:情感得分
根据需要限制数据,考虑到你电脑的性能。我展示的是 2019-2021 年的数据,仅选取了 1 月、2 月、11 月和 12 月,用于比较年初和年末之间的差异:
图 15.38:工作表
到目前为止,我们已经加载了数据集,并创建了一个 Python 计算,使用了一个预训练的情感分析器来判断标题是负面还是正面。在前面的图中,我们将所有内容结合在一起,你可以看到在 2021 年的每个月中,负面新闻占据主导地位,2 月最糟糕(平均得分为-10.45),而 12 月则是最正面的(平均得分为-0.14)。接下来,我们将继续检查新闻报道的最常见话题。
要了解在 ABC 新闻中最常讨论的主题,我们必须计算使用的单词。也许在 Tableau 中有方法可以通过将headline_text字段分割成每个单词、透视并计数,但这无疑是一个繁琐的过程。而且,市面上有足够的库可以去除像停用词这样的内容,并将单词还原为其核心形式,例如,horse = horses。因此,我们将部署另一个模型。请按照以下步骤进行:
- 创建一个
开始
参数。这个参数稍后会帮助我们定义我们想要查询的时间段:
图 15.39:开始
- 还需要创建一个
结束
参数:
图 15.40:结束
- 在 Tableau 工作簿中新建一个名为
most common words
的标签页,显示两个参数。
图 15.41:工作表
-
接下来,你需要在你选择的 Python IDE 中编写代码(例如,Jupyter Notebook)。现在,复制以下代码。解释将在本节末尾给出(不要忘了将这一行
df = pd.read_csv('abcnews-date-text.csv')
中的路径更改为你文件的准确位置):from tabpy.tabpy_tools.client import Client client = Client('http://localhost:9004/') def common_words(_arg1, _arg2): #load all required libraries import pandas as pd import nltk from nltk.corpus import stopwords from nltk.tokenize import word_tokenize from nltk.probability import FreqDist from nltk.sentiment import SentimentIntensityAnalyzer df = pd.read_csv('abcnews-date-text.csv') df['publish_date'] = pd.to_datetime(df['publish_date'], format='%Y%m%d') #convert the Tableau input date to a readable format _arg1 = pd.to_datetime(_arg1, format='%Y-%m-%d')[0] _arg2 = pd.to_datetime(_arg2, format='%Y-%m-%d')[0] df = df.set_index('publish_date') #empty lists to be filled scores = [] filtered_sentence = [] # Select the rows between two dates in_range_df = df[df.index.isin(pd.date_range(_arg1, _arg2))] #loading english stop words stop_words = set(stopwords.words('english')) text = in_range_df['headline_text'] #most used words for row in range(0, len(in_range_df)): text = in_range_df['headline_text'][row] word_tokens = word_tokenize(text) for w in word_tokens: if w not in stop_words: filtered_sentence.append(w) #calculate the frequency of each word fdist = FreqDist(filtered_sentence) #extract the N most common words most_common_words = fdist.most_common(3) return str(most_common_words) client.deploy('common_words', common_words,'Retrieves the most common words', override = True)
由于缩进尤为重要,下面是它应该如何显示的截图;你还可以看到,我指定了
abcnews
文件的位置为 ‘/Users/marleenmeier/Downloads/abcnews-date-text.csv
’,因为我的文件就在这个位置:图 15.42:代码
-
现在运行 Python 脚本。
-
返回 Tableau 仪表板中的 most common words 标签页,创建以下计算字段
common words
:MODEL_EXTENSION_STR("common_words", "_arg1, _arg2", [Start], [End])
你也可以像我们在前一个练习中那样使用
SCRIPT_STR
函数,但对于已部署的 TabPy 模型,Tableau 提供了更简便的MODEL_EXTENSION
函数语法。 -
将 常见词 拖到 行 里,查看你的第一个结果;在 2014 年 1 月至 2015 年 12 月期间,new 一词在 ABC 新闻的标题中出现了 4,909 次,police 出现了 4,307 次,man 出现了 4,171 次。你看到前 3 个词,因为代码中指定了这些,我们稍后会查看这个代码。不过,你可以将其更改为任何数字!
-
调整 开始 和 结束 日期,看看会发生什么!这里有两个例子;还可以看到词频本身,2020 年排名第一的单词 (coronavirus,出现了 8,383 次) 的使用频率是 2014 至 2015 年间排名第一的单词 (new,出现了 4,909 次) 的两倍:
图 15.43:单词 II
图 15.44:单词 III
如果你想继续工作,可以将前 N 个作为模型输入参数,并且如果你只想查看某一特定情感的前 N 个,还可以加入情感评分。
在这个练习中,我们展示了 Tableau 可以分析文本数据的情感,这是我们以前没有见过的。为了实现这一点,我们需要将 Tableau 与 Python 连接,使用外部服务 TabPy 就可以做到。Python 可以使用如 nltk.sentiment
这样的库——我们在本例中使用的就是这个库。该包的详细描述可以在这里找到:www.nltk.org/api/nltk.sentiment.html
。还有许多其他情感分析的库,但 nltk
是用于演示和学习的常用库,大家可以尝试其他库!
让我们解密一些在这个练习中加入的新代码实例: |
SCRIPT_REAL |
这个 Tableau 函数调用 Python 引擎并返回一个浮动值。 |
---|---|
from nltk.sentiment import SentimentIntensityAnalyzer |
在这一部分的代码中,我们需要使用 Python 库nltk ,并从该库中导入sentiment 模块,加载SentimentIntensityAnalyzer 函数。 |
scores = []``text = _arg1``sid = SentimentIntensityAnalyzer()``ss = sid.polarity_scores(word) |
这部分定义了我们的_arg1 将被称为text ,scores 是一个空列表(稍后在代码中填充),sid 表示SentimentIntensityAnalyzer 函数,最后,ss 是每个单词的分数参考。 |
scores.append(ss['compound']) |
在这一步,我们将使用极性分数填充空的scores 表格。 |
return scores |
在这里,我们将返回现在已填充的scores 表格作为输出传递给 Tableau。 |
ATTR([Dialog]) |
我们的_arg1 被指定为 Tableau 工作簿中的字段Dialog 。 |
from tabpy.tabpy_tools.client import Client``client = Client('http://localhost:9004/') |
在这一部分的代码中,我们将 Tableau 连接到 Python 实例。 |
import pandas as pd``import nltk``from nltk.corpus import stopwords``from nltk.tokenize import word_tokenize``from nltk.probability import FreqDist``from nltk.sentiment import SentimentIntensityAnalyzer |
这里我们加载了所有需要的库。 |
df = pd.read_csv('abcnews-date-text.csv')``df['publish_date'] = pd.to_datetime(df['publish_date'], format='%Y%m%d') |
接下来,我们读取abcnews 文件。 |
_arg1 = pd.to_datetime(_arg1, format='%Y-%m-%d')[0]``_arg2 = pd.to_datetime(_arg2, format='%Y-%m-%d')[0]``df = df.set_index('publish_date') |
接着,我们必须将输入转换为我们的模型可以读取的格式。 |
scores = []``filtered_sentence = [] |
这部分是为了创建两个列表,我们将在for 循环中填充它们。 |
in_range_df = df[df.index.isin(pd.date_range(_arg1, _arg2))] |
现在我们将过滤数据,确保它位于我们的起始日期和结束日期之间。 |
stop_words = set(stopwords.words('english'))``text = in_range_df['headline_text'] |
幸运的是,英语停用词是现成的;我们在这一步加载它们。 |
for row in range(0, len(in_range_df)):``text = in_range_df['headline_text'][row]``word_tokens = word_tokenize(text)``for w in word_tokens:``if w not in stop_words: filtered_sentence.append(w) |
在这一部分的代码中,我们将剩余的标题转换为令牌,这是计算频率所需的,最后,非停用词的单词将被存储在filtered_sentence 列表中。 |
fdist = FreqDist(filtered_sentence) |
利用我们在开始时加载的库,我们现在可以获取每个单词的频率。 |
most_common_words = fdist.most_common(3)``return str(most_common_words) |
既然我们已经获得了频率,现在我们可以加载最常用的单词。 |
client.deploy('common_words', common_words,'Retrieves the most common words', override = True) |
最后,我们将部署模型,这样就可以从 Tableau Desktop 中调用它。 |
我们现在已经看到了嵌入的 Python 代码;你可以创建一个计算字段,并使用数据集中的字段作为输入。但如果你想使用一个包含多行代码和多个变量的大型模型,或者是对模型进行预先训练呢?这会超出 TabPy 的能力吗?不会!因为除了嵌入的代码外,我们还可以在 Tableau 之外编写 Python 脚本。
使用 TabPy 部署模型
有时,你的脚本可能会太长,无法在计算字段中使用,或者你需要对一个不同的数据集或扩展的数据集进行预先训练,而不是你在 Tableau 中拥有的数据集。在这种情况下,我们可以以稍微不同的方式使用 TabPy。你可以在 Tableau 之外编写模型——使用 Python 并将其部署到 Tableau,从而可以在桌面端调用它。
在接下来的示例中,我们将构建一个推荐系统,该系统预测一个 Pima 女性在输入 7 个参数(年龄、BMI、怀孕次数、血压、血糖、胰岛素和皮肤厚度)时患糖尿病的可能性。该数据集来源于 J.W. Smith, J.E. Everhart, W.C. Dickson, W.C. Knowler, 和 R.S. Johannes 1988 年的研究,相关链接如下:www.ncbi.nlm.nih.gov/pmc/articles/PMC2245318/
。
我们将从 Jupyter Notebook 或你喜欢的集成开发环境(IDE)中的代码开始。请按照以下步骤操作:
-
我们通过导入
tabpy
客户端来开始代码,这是建立 Python-Tableau 连接所需的:from tabpy.tabpy_tools.client import Client client = Client('http://localhost:9004/')
-
接下来,我们导入所有需要的库和数据。确保将数据集名称替换为文件位置的完整路径(例如,
H:/Documents/Diabetes.csv
而不是Diabetes.csv
):import numpy as np import pandas as pd from sklearn import ensemble from sklearn.model_selection import train_test_split df = pd.read_csv("Diabetes.csv", sep = ',') df = df[['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI', 'Age', 'Outcome']]
-
现在,我们将数据集分成四个部分;两个测试数据集将帮助我们检查模型的准确性,另外两个训练数据集用于训练模型:
X_train, X_test, y_train, y_test = train_test_split(df.drop(['Outcome'], axis = 'columns'),df['Outcome'], test_size = 0.2)
-
如果你对这段代码背后的更多细节和数学原理感兴趣,请查看
scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html
。 -
接下来,我们将从
sklearn
加载GradientBoosting
模型并拟合我们的数据;然后,我们可以立即可视化分数,这可以解释为我们的模型正确预测的总百分比:gb = ensemble.GradientBoostingClassifier() gb.fit(X_train, y_train) gbscore = gb.score(X_test, y_test) print('gradient boost: ' + str(round(gbscore*100,2)))
-
这是 Jupyter 中的完整代码:
图 15.45:Python 脚本
总结第一阶段,我们的模型在 72.08%的情况下正确预测了是否患有糖尿病。这是一个相当不错的结果。为了进一步改进它,我们可以增加更多数据(行数方面),扩展输入变量(列数方面),或者创建新的特征,比如变量之间的比率(通过这种方式可以突出隐藏的信息)。但目前,我们可以继续使用这个模型,因为最终我们希望预测一个人患糖尿病的概率。接下来让我们切换到 Tableau:
-
本次练习我们不需要数据集,因为所有的数据都存储在 Jupyter Notebook 中。在 Tableau 中,您可以随机选择一个数据集,因为我们不会使用它。在一个新的 Tableau 工作表中,命名为
Diabetes
,创建以下七个参数:
图 15.46:年龄和血压参数
图 15.47:BMI 和胰岛素参数
图 15.48:皮肤厚度和血糖参数
图 15.49:怀孕次数参数
- 创建所有七个参数后,选择它们并点击显示参数:
图 15.50:显示参数
-
现在请返回 Jupyter 并执行最后两段缺失的代码,这些代码将创建一个调用我们模型的函数:
def diabetes_predictor(_arg1, _arg2, _arg3, _arg4, _arg5,_arg6,_arg7): import pandas as pd row = {'Pregnancies': _arg1, 'Glucose': _arg2, 'BloodPressure': _arg3, 'SkinThickness': _arg4, 'Insulin': _arg5, 'BMI':_arg6, 'Age': _arg7} test_data = pd.DataFrame(data = row,index=[0]) predprob_diabetes = gb.predict_proba(test_data) return [probability[1] for probability in predprob_diabetes]
-
最后,部署函数到 TabPy 的代码如下:
client.deploy('diabetes_predictor', diabetes_predictor,'Predicts the chances of a Pima female having diabetes', override = True)
-
在 Jupyter 中,这看起来如下:
图 15.51:部署函数
-
要检查您的模型是否已经部署,请在浏览器中输入
https://localhost:9004/endpoints
。这将列出所有已部署到您机器上 TabPy 的模型:图 15.52:部署函数
返回 Tableau 并再次检查与 TabPy 的连接是否仍然处于活动状态。
-
创建一个名为
糖尿病预测器
的计算字段,如下所示:SCRIPT_REAL(" return tabpy.query('diabetes_predictor',_arg1,_arg2,_arg3,_arg4,_arg5,_arg6, _arg7)['response']", [Pregnancies], [Glucose], [BloodPressure], [SkinThickness], [Insulin], [BMI],[Age] )
这里可以看到,由于我们所有的编码都是在 Python 中完成的,我们只需要告诉 Tableau 返回一个名为
diabetes_predictor
的 TabPy 查询,然后将所有的 n 变量引用添加到函数所需的变量中,最后在末尾添加['response']
。或者,由于部署在 TabPy 上的模型还支持
MODEL_EXTENSION_BOOL
、MODEL_EXTENSION_INT
、MODEL_EXTENSION_REAL
和MODEL_EXTENSION_STR
函数,您也可以使用以下代码:MODEL_EXTENSION_REAL("diabetes_predictor", "_arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7", [Pregnancies], [Glucose], [BloodPressure], [SkinThickness], [Insulin], [BMI],[Age] )
第二段代码较短且更直观,不过两者都可以正常工作!
-
现在,将字段糖尿病预测器放到文本架构中,并观察结果:
图 15.53:交互式 TabPy 糖尿病工作表
通过左右滑动参数,你会看到糖尿病的可能性发生变化。计算字段通过 TabPy 将参数的数据发送到 Python,在那里你的数据会被拟合到模型中。结果会被发送回来,你可以看到它。当然,你可以围绕它构建一个完整的仪表板。可以在 Tableau 网站找到示例:www.tableau.com/about/blog/2017/1/building-advanced-analytics-applications-tabpy-64916
。
如果你想了解更多关于 Python 语言本身的信息,一个好的资源是:www.w3schools.com/python/default.asp
。这个网页会一步步地引导你了解 Python 语法。但 Tableau 让这一切更加简单,因为一套函数已经为你写好。
预部署的 TabPy 函数
并非每个人都喜欢在 Tableau 之外进行编程,这也是 Tableau 推出一套广泛使用、预部署的函数供你开箱即用的原因。你仍然需要执行一行代码,仅此而已!但是在 Python 中你只需要做这些。可用的函数包括 ANOVA、T 检验、情感分析和 PCA,Tableau 也曾多次提到,可能会有更多的函数即将推出。你可以在这里找到文档:tableau.github.io/TabPy/docs/tabpy-tools.html
。
但让我们一步步走过这些步骤:
- 在你的 Jupyter Notebook 中,执行
tabpy-deploy-models
并查看是否安装了四个函数:
图 15.54:部署 TabPy 默认模型
-
你可以通过在浏览器中输入
http://localhost:9004/endpoints
来进行二次确认,你应该能看到所有已部署的模型。就是这样;在 Tableau 中调用计算字段中的函数现在变得像下面这样简单(以调用
ttest
函数为例):tabpy.query('ttest', _arg1, _arg2)['response']
-
我挑战你将 TabPy 默认部署模型的情感得分与我们创建的模型进行比较:它们有区别吗?如果有,区别在哪里?
从 Python 中,你可以直接连接到,例如:
-
DataRobot (
www.tableau.com/solutions/datarobot
) -
Dataiku (
www.dataiku.com/partners/tableau/
) -
MATLAB (
www.mathworks.com/products/reference-architectures/tableau.html
)
这些都是付费的第三方工具,有助于简化您的数据分析工作。如果您能将 R 和 Python 连接到其他外部工具,还可以通过 Rserve 和 TabPy 分别将这些功能带回 Tableau。如果您对这种连接感兴趣,或者想刷新部署函数的相关内容,可以查看这个视频——youtu.be/0BN_Y2CxdYY
——在视频中,Tableau 前高级分析产品经理 Nathan Mannheimer 也解释了我们讨论的所有内容。
您在编程集成方面的个人目标是什么?如果您有很棒的想法,欢迎与 Tableau 社区分享。
提升您的 R 和 Python 技能
有些人可能会觉得使用代码很有压力,正在寻找一种更简单的学习方式,在使用 R 或 Python 之前先入门。在网站 www.geeksforgeeks.org 上,您可以了解这两种语言,并在网站上进行编程练习,无需安装任何工具。
爱因斯坦发现
如果您是 Salesforce 用户并购买了 Einstein Discovery 许可证,您可以使用另一个现成的模型集。AI 驱动的模型随 Einstein Discovery 提供,并可以与 Tableau 工作流集成。您可以利用这个组合为您的 Salesforce 数据生成强大的洞察。例如,您可以根据 Salesforce 中的数据预测销售额,并将其直接加载到 Tableau 中,然后在您熟悉的 Tableau Server 实例上共享这些洞察,从而将所有仪表板集中在一个地方。由于 Salesforce 和 Tableau 都是 Salesforce 套件的一部分,我想提一下这一点;不过,它仍然是另一种需要额外许可证的软件,因此我决定不深入探讨其使用(事实上,凭借本章所学,您可以以零额外成本复制大部分功能)。如果您有兴趣深入了解,我建议您访问 tableau.com 上以下页面及子页面:www.tableau.com/products/einstein-discovery
。
总结
本章仅仅触及了与 R 和 Python 相关选项的皮毛。完成本章后,您应该能够从 Tableau 连接到 Python 和 R,并识别和编写这两种编程语言在 Tableau 中的基本语法。最重要的是,您现在已经足够熟练,能够利用 R 和 Python 函数的强大功能,从简单的均值计算到回归分析,再到实现自己的机器学习模型。尽管我们讨论了安装、集成和工作流程,以及一些更常见的函数和使用案例,但还有很多内容值得探索。事实上,Tableau 的编程集成的可能性在商业智能领域依然是一个大多数人未曾涉足的领域。
数据可视化领域的勇者们正在不断推动边界,但仍有许多工作需要完成。对于那些希望提升职业发展的读者,掌握这两个工具包的专业知识将带来巨大的优势。而且,更多的内容即将推出!
在 2023 年的 Tableau 大会期间,公司传递了一个明确的信号,Tableau 将继续发展其高级分析和人工智能能力。新宣布的产品,如 Tableau GPT 和 Tableau Pulse,让我迫不及待地期待即将到来的惊艳功能。在这里查看你可以期待的内容摘要:www.tableau.com/blog/data-innovations-tableau-conference-2023
。
虽然下一章不幸是本书的最后一章,但我们仍有时间探索另一个热门话题。除了高级分析,数据治理是一个日益重要的领域。法规和不断增加的数据安全风险迫使公司更加重视结构良好的指导方针和质量检查。在第十六章,开发数据治理实践中,我们将向你介绍 Tableau 的另一面。
在 Discord 上了解更多
要加入本书的 Discord 社区——在这里你可以分享反馈、向作者提问,并了解新版本发布——请扫描下面的二维码:
第十六章:开发数据治理实践
这一章节与其他章节略有不同。我们将不讨论在 Tableau 仪表板或 Tableau Server 中使用的某个功能,而是讨论与 Tableau 中数据治理相关的数据能力——谁可以访问哪些数据,谁查看了哪些仪表板及其频率,仪表板的数据组件是什么,数据的来源在哪里等等。
我们将讨论以下主题:
-
什么是数据治理?
-
数据治理原则
-
Tableau 中的数据治理
-
跟随示例
近年来,尤其是过去 20 年,数据治理的重要性日益增加,表明这一领域的成熟度不断提升。早期,数据治理通常是 IT 部门的单一任务,并且多局限于数据目录管理;而如今,数据治理已成为许多人共同承担的任务。随着公司存储的数据量增多,招聘的分析师增多,数据使用量增大,所需的规则和指南也越来越多。如今,企业因缺乏适当的数据治理而被罚款,巨大的数据安全漏洞和数据泄露事件越来越频繁地登上头条。因此,许多机构,如欧盟,已通过数据保护法律和法规,将数据治理作为其中的一个主要支柱。例如,欧盟的 GDPR 和加州的 CCPA。
即使你主要关心的是构建仪表板和分享数据洞察,数据保护依然是公司各部门共同的责任,未来也会愈发成为一项集体努力。理解政策和法规、了解如何使用数据治理工具并负责任地行动,对你来说也是必要的。因此,我将这一章专门献给数据治理以及 Tableau 在这一领域提供的所有内置功能。让我们开始吧!
什么是数据治理?
数据治理涉及根据法规和行业标准生成和实施与数据相关的政策。其主要目标是确保信息的有效性、可访问性和安全性。强化的数据治理可以改善数据分析,确保分析师可以放心依赖的数据来源可靠,已经过验证,并经过严格的数据质量评估等多项措施。
在 www.tableau.com 网站上,你可以找到一份白皮书,介绍了 Tableau 用户如何进行数据管理,包括数据治理:www.tableau.com/learn/whitepapers/tableau-data-management
。
如果你更喜欢视频形式,你可以通过以下链接查看演示:www.tableau.com/products/data-management#content-446367
。
白皮书和视频都讨论了这个设置:
![一张包含文字、截图、图表、计划的图片]
描述自动生成](https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/ms-tbl-2023/img/B18435_16_01.png)
图 16.1:Tableau 数据管理
通常,数据治理包括确保数据质量、解决数据安全和隐私问题、制定数据政策和标准、指定数据管理员、遵守法规以及记录数据资产等关键方面。
那么,为什么数据治理如此重要? 强有力的数据治理能够提高数据质量,降低数据管理成本,并增强数据访问。它增强了数据合规性的可信度,从而促进更好的决策、提高运营效率并减少风险。Tableau 可以作为数据治理框架内数据可视化和分析的有价值工具,同时遵守经过验证的政策和指南。
数据治理原则
如果你计划从事数据治理工作,你应该知道数据治理原则通常是整个工作的核心。为了说明这一点,让我们以 GDPR(gdpr-info.eu/
)中列出的七个原则为例,探讨如何有效地利用 Tableau 来执行这些原则:
-
合法性、公平性和透明性
-
目的限制
-
数据最小化
-
准确性
-
存储限制
-
完整性和机密性
-
问责制
合法性、公平性和透明性
这要求为提供商品或服务而收集的个人信息必须合法且公平地获得,并且需告知个人其使用目的。此外,个人信息仅可在获得个人明确同意的情况下收集,并且必须保留该同意的记录。
目的限制
个人信息应仅为特定且合法的目的收集,除非获得明确同意,否则不得用于不同或不兼容的目的。
数据最小化
个人信息的处理应仅限于履行既定目的所必需的范围。
准确性
个人信息必须准确收集,并通过定期更新来维护,以减少对个人的风险,任何不准确的信息应及时纠正或删除。
存储限制
个人信息应仅在履行处理目的所需的时间内保留,除非出于科学、档案保存或公共利益的目的,否则可以存储更长时间。
完整性和机密性
GDPR 中的完整性要求保持准确和可靠的个人数据,同时机密性要求保护个人数据不被未经授权访问和披露,确保隐私权得到维护。
问责制
对于成功的数据治理方法,问责制至关重要,因为它提供了方向性和有效性;建立由所有部门代表组成的数据治理委员会,包括高层管理人员,是确保跨组织责任以及数据流程和政策的制定与执行的关键。接下来我们将了解 Tableau 如何帮助我们遵守这些原则。
Tableau 中的数据治理
Tableau 提供了一系列功能和能力,帮助支持组织内的数据治理工作,作为一个配套工具,与数据治理原则保持一致。
以下许多功能仅在购买 Tableau Server 的数据管理附加组件时可用(www.tableau.com/products/data-management
)。请在阅读本章节时注意这一点。
数据源连接
Tableau 的数据源连接使得组织能够通过连接到各种数据源来建立集中式数据治理,促进了一种可信且精心管理的数据管理方式。
数据源连接使得遵循 GDPR 中完整性与机密性原则变得更加容易,因为数据被安全存储,且可以控制访问。
数据访问控制
Tableau 使管理员能够管理用户对数据源和仪表板的访问,实施用户和群组权限,确保只有授权的个人才能访问和操作特定的数据资产。
数据访问控制使得遵循 GDPR 中完整性与机密性原则变得更加容易,因为可以集中管理访问,从而限制不当访问。
数据安全
Tableau 提供了如数据加密、单点登录(SSO)认证和与身份管理系统的集成等安全功能,通过执行政策和保护敏感信息来增强数据安全性。
数据安全使得遵循 GDPR 中完整性与机密性原则变得更加容易,因为安全漏洞及由此导致的非法访问敏感数据将受到限制。
元数据管理
Tableau 帮助创建和管理元数据,提供有价值的上下文信息,如数据定义、描述和来源细节。这一能力通过增强对数据资产的理解与控制,支持数据治理工作。
元数据管理使得遵循 GDPR 中准确性原则变得更加容易,因为元数据的变化可以轻松被检测到。
数据认证
Tableau 使用户能够认证并推广可信的数据源和仪表板,标志着数据已通过质量保证,可以依赖于此进行分析和决策。该认证过程确保用户可以访问到可靠且受管控的数据资产。
数据认证使得遵循 GDPR 中准确性原则变得更加容易,因为所有用户都可以信任经过认证的数据,这些数据会被监控其准确性和时效性。
版本控制
Tableau 提供版本控制功能,使组织能够追踪对仪表板和数据源所做的更改,促进数据治理,通过提供对修改的可见性并便于审计跟踪过程。
版本控制使得遵循 GDPR 中合法性、公平性和透明性原则变得更加容易,因为它具备审计跟踪功能。
监控与审计
Tableau 的监控和审计功能使管理员能够追踪用户活动、访问模式和数据使用情况,帮助识别潜在的合规问题,并确保遵守数据治理政策。
监控与审计使得遵循 GDPR 中合法性、公平性和透明性原则变得更加容易,因为它帮助我们遵守规则和法规。
协作与文档管理
Tableau 通过提供评论、注释和文档附件等功能,支持协作与文档管理,使用户能够直接在 Tableau 环境内记录和讨论数据资产、定义和治理相关信息。
协作与文档管理使得遵循 GDPR 中问责制原则变得更加容易,因为评论和注释是可见的,并且可以在用户之间共享。
虽然 Tableau 提供了数据治理功能,但对于组织来说,拥有一个全面的数据治理策略和框架是至关重要的,这一框架应超越 Tableau 平台。Tableau 的功能可以增强并与更广泛的数据治理计划保持一致,但它们应该纳入一个全面的治理计划中,以最大化效果。
跟随实例
在本章的最后部分,你可以亲自尝试一些数据治理功能;随时可以在你的 Tableau Server 版本中跟随操作。
认证数据源
认证数据源是指通过验证数据源的质量、准确性和合规性,将其指定为受信任且可靠的资产。这一认证过程建立了信任,确保数据质量,支持合规性,促进一致性,加强数据治理,提升决策制定,促进数据发现,并由组织内的数据治理团队或专家进行。
你可以通过以下步骤在 Tableau 中认证一个数据源:
-
打开 Tableau Server。
-
打开数据源。
-
点击数据源名称旁的三个点。
-
选择编辑认证...:
图 16.2:认证
- 你现在可以输入一条消息,告知数据源用户认证的理由或类似内容。你输入的内容取决于公司内部达成的政策。点击保存。
图 16.3:认证消息
- 在数据源所有者和日期旁边,您将看到一个指示,表明该数据源已认证:
图 16.4:已认证
认证的数据源有助于决策,使分析师和业务用户对所使用的数据更加自信,从而得出更精确的见解、做出更明智的决策并改善业务结果。
数据质量警告
数据质量警告是一些通知,突出显示数据集质量中潜在的问题或异常,这些问题可能由数据不完整或缺失、不一致、异常值、数据完整性问题、验证失败或过时信息引起。这些警告提示需要进一步调查和数据清理,以确保正确的分析和决策,强调了解决数据质量问题对获得可靠见解的重要性。
您可以按照以下步骤设置数据质量警告:
-
打开 Tableau 服务器。
-
打开数据源。
-
点击数据源名称旁边的三个点。
-
选择质量警告,然后选择质量警告 …或提取刷新监控 …。
-
数据质量警告弹出窗口将如下所示:
图 16.5:数据质量警告
- 在此,从下拉菜单中选择五个标签中的一个选择标签:
图 16.6:选择标签
- 提取刷新监控弹出窗口看起来非常相似,不过没有下拉菜单:
图 16.7:提取刷新监控
- 在这两种情况下,数据源概览页面上将显示警告指示器:
图 16.8:警告
- 如果调度提取失败,您还可以检查调度概览页面:
图 16.9:调度
数据质量警告作为指示,表明数据可能需要在用于分析、报告或决策之前进行进一步调查或清理。它们有助于发现潜在的数据问题,这些问题可能会影响分析结果的准确性、可靠性和有效性。解决数据质量警告通常涉及数据清理、错误修正,并确保数据符合所需的质量标准。
需要注意的是,数据质量警告应当及时处理,因为它们可能会影响从数据中得出的见解的可靠性和有效性。解决数据质量问题并保持高质量的数据,对于做出明智的决策并从数据分析中得出准确结论至关重要。
Tableau 血缘
数据血统很重要,因为它建立了对数据的信任,帮助数据质量管理和问题解决,促进影响分析,支持合规性检查,加强数据治理和管理实践,帮助故障排除和调试,并实现成功的数据和系统集成。数据血统提供了透明度、理解力和对数据流的控制,促进了数据治理和决策过程的改进。
要查看血统,你可以打开任何类型的概览页面、数据源、准备流程、工作表、工作簿等,在 Tableau Server 上查看血统标签:
图 16.10:Tableau 血统
右侧面板为你提供了与各自血统相关的所有详细信息。从这里,你可以点击任何一个给定的组件并被重定向到该组件。
图 16.11:详细的血统
从表格视图中,你甚至可以查看某一列的使用情况;首先,转到一个表格:
图 16.12:上游表格
然后,点击任何一个列。观察右侧面板显示该列City在数据库和表格中使用,但没有在其他地方使用:
图 16.13:列血统
总体而言,数据血统提供了对数据流的透明度、理解力和控制力。它支持数据质量管理、合规性工作和决策过程。通过记录数据的血统,组织可以改善其数据治理实践,提高数据可信度,并减轻与数据管理和分析相关的风险。
数据详情
Tableau 中的数据详情帮助你和你的用户理解已发布仪表板中的数据。要访问它,在任何给定的仪表板上,点击左上角的数据详情,并观察右侧弹出的详细信息:
图 16.14:Tableau 数据详情
几秒钟内,数据详情让你查看随时间变化的视图、数据源和使用中的字段。
数据指南
数据指南,如数据字典或数据参考指南,是一种文档资源,提供关于数据元素的结构、内容和含义的详细信息。它对于数据理解、一致性、集成、质量评估、治理、协作、培训和文档化都非常重要。数据指南增强了数据管理实践,促进了数据素养,并支持组织内有效的数据利用。
要探索数据指南,请在 Tableau 服务器上打开仪表板,并点击蓝色顶部栏右侧的数据指南按钮:
图 16.15:数据指南
通过选择视图中的一个标记,数据指南会自动填充有关数据点和使用的筛选器的详细信息,还会提供解释。你已经在本书前几章的解释数据中了解了这一功能,但数据指南使得标记的解释和探索变得前所未有的简单。
这里有一个清晰的示例,展示了 Tableau 如何弥合单一数据点与完整数据集平均值之间的差距:
图 16.16:说明
通过点击一个箭头,更多信息将显示出来:
图 16.17:文本说明
你甚至可以生成证明这个观点的图表:
图 16.18:贡献维度
数据指南还允许你为用户添加描述和资源:
图 16.19:描述
这是关于 Tableau 数据治理领域的最后一个示例。这是一个庞大的话题,远远超出了 Tableau 的范畴,因此我们只是在表面上探讨了 GDPR——众多数据法规之一、Tableau 中的数据治理功能,最后还介绍了一些实际应用。这个话题确实值得一本书来详细阐述,但我希望在此简要提及,并共同承担这一责任,因为即使是你作为一个 Tableau 开发人员,也有责任并可以为保护我们的数据做出贡献。希望这一章节能够给你提供足够的思考,让你在开发精彩的仪表板时更加关注数据治理。
现在,我们已经走到了书的最后部分,回顾我们的旅程,从将数据加载到 Tableau、创建第一个可视化图表、执行第一个函数开始。接下来,我们通过熟悉细节层次和表格计算,学习了 Tableau Prep Builder、Tableau 服务器以及一般的可视化最佳实践,最后进入高级分析和利用 Tableau 编程工具集成的强大功能。
这让我只剩下一个问题:你的下一个 Tableau 项目是什么?欢迎在 Tableau Public 上分享,并别忘了添加标签#MasteringTableau。我要祝贺大家参与并投入到这个学习过程中!无论你有更多问题、意见或反馈,随时可以联系我或 Tableau 社区。我祝愿你在个人的 Tableau 职业生涯中取得巨大成功。
祝你使用 Tableau 愉快!
在 Discord 上了解更多
要加入本书的 Discord 社区——你可以在这里分享反馈、向作者提问、了解新版本——请扫描下面的二维码: