Tableau-2020-学习指南-全-
Tableau 2020 学习指南(全)
原文:
annas-archive.org/md5/ae37fae7c02607c3183636011e94115a译者:飞龙
前言
当 Tableau 首次推出时,它标志着一种与繁琐报告和无休止的数据整合项目的剧烈范式转变,这些项目常常在相关决策应该做出后很久才得出结果。Tableau 颠覆了与数据进行可视化交互的传统方式。它让人们轻松、直观(甚至有趣!)地与数据进行交互,通过每次操作即时获得可视化反馈,能够提出问题并自然地发现洞见。结果是一个日益壮大的 #datafam,这个社区因 Tableau 的简便性、优美性以及它让数据工作变得有趣的能力而喜爱它!
Tableau 持续扩展和发展,方式使得数据的查看和理解变得更加简便且强大。诸如 Tableau 数据模型、集合和参数操作、日益增长的地理空间支持、动画以及新的仪表板对象等新功能扩展了可能性,使得从数据中获取和分享洞见比以往任何时候都更容易。
Tableau Prep 的持续进化为数据准备和清洗带来了与 Tableau Desktop 在数据可视化方面相同的直观即时反馈,极大地扩展了 Tableau 的分析平台。本书的各章节将涵盖这些新功能(以及更多内容)!
我们将通过理解 Tableau 背后的基本范式来审视它,结合实际案例来分析它的工作原理与动机。然后,我们将在这一坚实的理解基础上继续深入,让你掌握应对最棘手数据挑战所需的工具和技能!
本书适合谁阅读
本书适合任何需要查看和理解数据的人!从业务用户到硬核数据分析师,再到首席执行官,每个人都需要具备提出和回答数据问题的能力。拥有一定的数据背景肯定会有帮助,但你不需要精通脚本、SQL 或数据库结构。
无论你是刚接触 Tableau,还是已经使用了几个月甚至几年,通过本书,你将获得扎实的 Tableau 理解基础,并掌握构建向高级掌握过渡所需的工具和技能。
本书内容
第一章,初识 Tableau,介绍了 Tableau 的基本原理。我们将通过多个例子进行循序渐进的讲解,介绍从界面、连接数据,到构建你的第一个可视化和仪表板的所有内容。本章将为你打下坚实的术语和概念基础,这些术语和概念将在全书中使用。
第二章,在 Tableau 中连接数据,通过几个实际的例子,本章讲解了连接数据所涉及的基础概念。它包括了不同类型的连接、文件类型、基于云和本地的数据库,以及如何处理元数据。
第三章,超越基本可视化,基于第一章中讲解的基本可视化原理,探讨了变化和扩展的可能性。你将学习在何时以及如何使用多种可视化技术来分析和传达数据。
第四章,用计算和参数开启冒险之旅,介绍了计算和参数,概述了主要类型的计算,并通过详细的行级和聚合计算示例加以讲解。它结合了概念知识与实际示例,并以性能考虑作为结尾。
第五章,利用细节级别计算,深入探讨细节级别表达式及其在解决复杂数据问题中的应用。该章节不仅提供概述,还详细讲解了FIXED、INCLUDE和EXCLUDE等变体的示例。
第六章,深入了解表格计算,为你提供一个坚实的基础,帮助你理解并使用表格计算来解决各种数据挑战。内容涵盖了作用域和方向、地址和分区等概念,并通过多个深入的实际示例进行讲解。
第七章,制作既美观又实用的可视化,讲解如何扩展和修改 Tableau 默认应用于可视化的格式,定制字体、颜色、线条、阴影、注释和工具提示等选项,以有效地传达数据故事。
第八章,使用仪表板讲述数据故事,基于第一章中介绍的概念,并在后续章节中进行了扩展,展示了几种不同类型的仪表板的实际应用,帮助你深入理解仪表板是什么、如何构建一个并使其具备互动功能,以及如何利用它讲述引人入胜的数据故事。
第九章,可视化分析——趋势、聚类、分布和预测,介绍了 Tableau 内置的可视化和统计分析功能,并通过实际示例展示如何以及何时利用这些功能。内容包括添加和修改趋势模型、利用聚类功能、使用和修改预测模型以及可视化数据分布。你不仅会了解如何使用统计模型,还会评估其准确性。
第十章,高级可视化,建立在已有的可视化和技巧的基础上,展示如何使用 Tableau 创建任何类型的可视化。多个示例展示了各种高级可视化技术,包括碰撞图、马里梅科图和动画可视化。
第十一章,动态仪表板,通过展示多种技巧,帮助你提升仪表板技能,展示如何在仪表板上显示、隐藏和交换内容。最终的结果是一个真正动态的用户体验,增强你传达数据的能力。
第十二章,探索地图和高级地理空间功能,展示了关于地图和地理空间可视化的一切,从地图基础知识到地理空间函数、自定义领域和在自定义背景图像上绘制数据。
第十三章,理解 Tableau 数据模型、连接和混合,探索了在 Tableau 中关联数据的主要方式,包括 Tableau 2020.2 版本引入的新数据模型功能。通过实际示例和详细描述,您将了解逻辑和物理层之间的区别,以及如何利用关系、连接和混合来实现出色的分析结果。
第十四章,将混乱数据结构化以在 Tableau 中有效工作,承认现实世界中的数据有时是一团糟,并为理解良好结构化数据和处理结构不良数据的工具组提供了基础。
第十五章,使用 Tableau Prep 驯服数据,探讨了 Tableau Prep Builder 工具,包括整体范式和特定功能。您将通过一个扩展的实际示例了解如何利用 Tableau Prep 的出色能力来清理和结构化数据。
第十六章,分享您的数据故事,通过研究分享您的故事的多种选项来结束本书。从打印到共享交互式仪表盘再到输出 PDF 和图像——您将准备好与最需要的人分享您数据中包含的故事。
要充分利用本书内容
本书不假设特定的数据库知识,但熟悉数据本身的基本知识肯定会有所帮助。我们将首先介绍基础原则,虽然可能会诱惑您跳过第一章,请不要这样做!我们将奠定一个术语基础,并探索将在本书其余部分中使用的范式。
您可以使用 Tableau Desktop 和 Tableau Prep Builder(在第十五章,使用 Tableau Prep 驯服数据中)跟随本书中的许多示例。
大多数示例可以在几乎任何最新版本的 Tableau 上完成,但要充分探索新的数据模型功能,您需要 Tableau 2020.2 或更高版本。
您可以使用这些链接从 Tableau 下载并安装最新版本:
Tableau Desktop:www.tableau.com/products/desktop/download
Tableau Prep Builder:www.tableau.com/products/prep/download
请咨询 Tableau 代表获取具体的许可信息。在大多数情况下,如果您当前没有许可证,您可以安装每个产品的 14 天试用版本。
根据您的许可条款,Tableau 通常允许您在两台计算机上使用许可证。这意味着您可能在办公室安装了 Tableau(可能是旧版本),但也可以在家里安装最新版本。请检查您的许可协议,并联系 Tableau 代表以核实您的具体情况。
下载示例代码文件
您可以从您的账户下载本书的示例代码文件,网址为www.packtpub.com。如果您在其他地方购买了本书,您可以访问www.packtpub.com/support并注册,以便直接通过邮件接收文件。
按照以下步骤下载代码文件:
-
在
www.packtpub.com登录或注册。 -
选择支持标签。
-
点击代码下载与勘误。
-
在搜索框中输入书籍名称,并按照屏幕上的指示操作。
文件下载后,请确保使用最新版本的工具解压或提取文件夹:
-
WinRAR / 7-Zip for Windows
-
Zipeg / iZip / UnRarX for Mac
-
7-Zip / PeaZip for Linux
本书的代码包也托管在 GitHub 上,地址为github.com/PacktPublishing/Learning-Tableau-2020。我们还有来自丰富书籍和视频目录的其他代码包,您可以在github.com/PacktPublishing/查看。快来看看吧!
下载彩色图像
我们还提供了一份 PDF 文件,其中包含本书中使用的截图/图示的彩色图像。您可以在此下载:static.packt-cdn.com/downloads/9781800200364_ColorImages.pdf。
使用的约定
本书中使用了多种文本约定。
CodeInText:表示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟网址、用户输入和 Twitter 用户名。例如:“连接到 Hospital Visits.xlsx 并生成提取。”
代码块设置如下:
IF LEFT([Room], 1) = "1"
THEN "First Floor"
ELSEIF LEFT([Room], 1) = "2"
THEN "Second Floor"
END
粗体:表示新术语、重要词汇或您在屏幕上看到的文字,例如在菜单或对话框中,文本中也会以这种方式出现。例如:“从分析菜单中选择表格布局 | 高级。”
警告或重要说明通常以这种形式显示。
提示和技巧通常以这种方式显示。
联系我们
我们始终欢迎读者的反馈。
一般反馈:发送电子邮件至 feedback@packtpub.com,并在邮件主题中提及书名。如果您对本书的任何方面有疑问,请通过 questions@packtpub.com 给我们发送电子邮件。
勘误:尽管我们已尽最大努力确保内容的准确性,但错误难免。如果您发现本书中的错误,我们将非常感激您能向我们报告。请访问 www.packtpub.com/submit-errata,选择您的书籍,点击勘误提交表格链接并填写相关细节。
盗版:如果您在互联网上发现任何我们作品的非法副本,无论形式如何,我们将非常感激您提供相关位置或网站名称。请通过 copyright@packtpub.com 联系我们,并提供链接。
如果您有兴趣成为作者:如果您在某个领域有专业知识,并且有兴趣撰写或为书籍贡献内容,请访问 authors.packtpub.com。
评论
请留下评论。阅读并使用本书后,为什么不在您购买书籍的站点上留下评论呢?潜在读者可以看到并参考您的公正意见来做出购买决策,我们在 Packt 可以了解您对我们产品的看法,我们的作者也可以看到您对其书籍的反馈。谢谢!
欲了解更多关于 Packt 的信息,请访问 packtpub.com。
第一章:启航 Tableau
Tableau 是一个非常棒的平台,用于查看、理解并基于数据做出关键决策!使用它,你将能够进行令人惊叹的数据发现、分析和讲故事。你将通过一个为自然且无缝的思维与工作流程设计的界面,以可视化方式完成这些任务和目标。
你无需编写复杂的脚本或查询就能利用 Tableau 的强大功能。相反,你将在一个视觉化环境中与数据交互,所有拖放的内容都会被转化为必要的查询,并随后以可视化方式展示。你将实时工作,因此你可以立即看到结果,快速获得答案,并能够通过多种方式迭代可视化数据,找到关键的见解或讲述故事的一部分。
本章介绍了 Tableau 的基本原理。我们将通过一系列示例,带你了解如何连接数据、通过可视化探索和分析数据,并最终将所有内容整合到一个完全互动的仪表板中。这些概念将在后续章节中得到更深入的阐述。然而,不要跳过本章,因为它介绍了包括以下内容在内的关键术语和概念:
-
连接数据
-
构建可视化的基础
-
创建条形图
-
创建折线图
-
创建地理数据可视化
-
使用“Show Me”功能
-
将所有内容整合到仪表板中
让我们从如何将 Tableau 连接到数据开始。
连接数据
Tableau 能够连接到存储在各种文件和数据库中的数据。这包括平面文件,如 Excel 文档、空间文件和文本文件;关系型数据库,如 SQL Server 和 Oracle;基于云的数据源,如 Snowflake 和 Amazon Redshift;以及在线分析处理(OLAP)数据源,如 Microsoft SQL Server 分析服务。除了极少数例外,无论使用哪种数据源,分析过程和创建可视化的步骤基本相同。
本书将更详细地介绍数据连接及相关主题。例如,我们将涵盖以下内容:
-
在第二章,在 Tableau 中连接数据,连接多种不同类型的数据源。
-
在第十三章,理解 Tableau 数据模型、连接与混合中,使用连接、混合和对象模型连接。
-
理解适用的数据结构以及如何在第十四章,使混乱数据在 Tableau 中有效工作中处理杂乱数据。
-
利用 Tableau Prep 的强大功能和灵活性来清洗和整理数据,以便在第十五章,使用 Tableau Prep 整理数据中进行更深入的分析。
在本章中,我们将连接到一个文本文件,该文件来自 Tableau 附带的示例数据集之一:Superstore.csv。Superstore是一个虚构的零售连锁店,向美国各地的客户销售各种产品,文件包含每个订单的每个项目的记录,详细信息包括客户、地点、商品、销售额和收入。
请使用提供的Superstore.csv数据文件,而不是 Tableau 的示例数据,因为它们之间的差异会导致结果发生变化。
第一章工作簿已与代码文件包一同提供,并已与文件建立了连接;然而,在本示例中,我们将逐步演示如何在新工作簿中创建连接:
-
打开 Tableau。您应该看到主页,左侧是连接选项列表,如果适用,中心显示最近编辑的工作簿的缩略图,底部是示例工作簿。
-
在连接和到文件下,点击文本文件。
-
在打开对话框中,导航到
\Learning Tableau\Chapter 01目录并选择Superstore.csv文件。
现在,您将看到数据连接屏幕,该屏幕允许您以可视化方式创建与数据源的连接。我们将在第二章的连接数据部分详细介绍该屏幕的功能,标题为Tableau 中的数据连接。现在,Tableau 已经添加并预览了文件以进行连接:

图 1.1:数据连接屏幕允许您建立与数据的连接
对于此连接,不需要其他配置,因此只需点击底部的Sheet 1标签,开始可视化数据!现在,您应该能看到 Tableau 的主要工作区,它看起来像这样:

图 1.2:Tableau 主要界面的元素,按下面的描述编号
我们将在全书中使用特定术语来引用界面元素,所以请花点时间熟悉前面截图中编号的各个组件所使用的术语:
-
菜单包含各种菜单项,用于执行广泛的功能。
-
工具栏提供常见功能,如撤销、重做、保存、添加数据源等。
-
数据窗格在选中数据标签时处于活动状态,并列出所选数据源的所有表和字段。分析窗格在选中分析标签时处于活动状态,提供可视化分析的补充选项。
-
各种货架,如页面、列、行和筛选器,用于将字段从数据窗格拖放到这些区域。Marks卡片包含其他货架,如颜色、大小、文本、详细信息和工具提示。Tableau 将根据您拖放到货架上的字段来可视化数据。
数据窗格中的数据字段可以添加到视图中。已被拖到架子上的字段称为视图中的字段或活动字段,因为它们在 Tableau 绘制可视化时起着积极作用。
-
画布或视图是 Tableau 绘制数据可视化的地方。除了将字段拖到架子上,您还可以将字段直接拖到视图上。标题位于画布顶部。默认情况下,标题显示工作表的名称,但可以编辑或隐藏。
-
Show Me是一个功能,允许您根据感兴趣的数据字段快速浏览各种类型的可视化。我们将在本章的最后部分查看Show Me。
-
窗口底部的标签为您提供了编辑数据源的选项,并可以在不同的工作表、仪表板或故事之间导航和添加任意数量的项。通常,任何标签(无论是工作表、仪表板还是故事)都被泛称为工作表。
Tableau 工作簿是由数据源、工作表、仪表板和故事集合组成的。所有这些内容都会保存为一个单一的 Tableau 工作簿文件(.twb或.twbx)。工作簿组织为多种类型的标签集合:
-
工作表是一个单一的数据可视化,如条形图或折线图。由于“工作表”也是任何标签的通用术语,我们通常将工作表称为视图,因为它只是数据的一个视图。
-
仪表板是任何数量的相关视图和其他元素(如文本或图像)组合在一起,作为一个整体呈现,以向观众传达信息。仪表板通常设计为互动式。
-
故事是由仪表板或单一视图组成的集合,它们已被安排成以数据讲述一个叙事。故事也可能是互动式的。
在屏幕底部,您会注意到一些其他项。当您工作时,左下角的状态栏将显示关于视图、选择和用户的重要信息和详细信息。右下角的各种控件允许您在工作表、仪表板和故事之间导航,并通过显示影片条查看标签,或切换到工作簿中所有工作表的交互式缩略图显示。
现在您已连接到文本文件中的数据,我们将探索一些为数据可视化打基础的示例,并进一步构建一些基础的可视化类型。为此,请执行以下操作:
-
从菜单中选择文件 | 退出。
-
当系统提示保存更改时,选择否。
-
从
\learning Tableau\Chapter 01目录中,打开文件Chapter 01 Starter.twbx。此文件包含一个与Superstore数据文件的连接,并旨在帮助您完成本章的示例。
每章的文件包含一个Starter工作簿,允许你根据本书中的示例进行操作。如果你希望查看完整示例,可以打开该章的Complete工作簿。
连接到数据后,你已经准备好开始可视化和分析数据。随着你开始这样做,你将扮演零售连锁店分析师的角色。你将向数据提问,构建可视化来回答这些问题,并最终设计一个仪表板来分享结果。让我们从为理解 Tableau 如何可视化数据奠定基础开始。
构建可视化的基础
当你首次连接到如 Superstore 文件这样的数据源时,Tableau 会显示数据连接和数据窗格中的字段。你可以将字段从数据窗格拖到画布区域,或者拖到各个货架上,例如行、列、颜色或大小。正如我们将看到的,字段的放置将导致数据的不同编码,这取决于字段的类型。
度量和维度
数据源中的字段在数据窗格中可见,并且分为度量和维度。在旧版本的 Tableau 中,它们是数据窗格中的两个独立部分。在新版本中,每个表将会有通过一条线分隔的度量和维度:

图 1.3:每个表(该数据源仅有一个)上方列出了维度,线下列出了度量
度量和维度之间的区别是使用 Tableau 时需要理解的一个基本概念:
-
度量是需要聚合的值。例如,它们可以是求和、平均、计数,或者是最小值或最大值。
-
维度是决定度量聚合详细程度的值。你可以将它们看作是将度量切分或将度量归类的工具。视图中使用的维度组合定义了视图的基本细节层次。
作为一个示例(你可以在Chapter 01 Starter工作簿的度量和维度表中查看),考虑使用来自 Superstore 连接的 Region 和 Sales 字段创建的视图:

图 1.4:一个条形图,展示了度量和维度的使用
Sales字段在此视图中作为度量使用。具体来说,它是按总和进行聚合的。当你在视图中使用字段作为度量时,聚合类型(例如,SUM、MIN、MAX 和 AVG)将显示在活动字段上。注意,在上述示例中,行上的活动字段清楚地表示了Sales的总和聚合:SUM(Sales)。
Region字段是一个维度,每条数据记录都有四个值之一:中部,东部,南部或西部。当该字段作为视图中的一个维度使用时,它会切分度量。因此,视图显示了每个区域销售总额,而不是整体销售总额。
离散和连续字段
另一个重要的区别是字段是被用作离散还是连续。字段是离散还是连续决定了 Tableau 如何根据其在视图中的使用位置对其进行可视化。Tableau 将为字段的默认值(数据窗格中图标的颜色)和在视图中的使用方式(架子上活动字段的颜色)提供视觉指示。离散字段,如前面示例中的Region,是蓝色的。连续字段,如Sales,是绿色的。
在本书印刷版的屏幕截图中,您应该能够区分离散(蓝色)和连续(绿色)字段之间的轻微色差,但请在使用 Tableau 时特别注意界面。您还可以从 Packt Publishing 下载颜色图像包,网址为https://static.packt-cdn.com/downloads/9781800200364_ColorImages.pdf。
离散字段
离散(蓝色)字段的值显示为彼此明显且分开。离散值可以重新排序,仍然有意义。例如,您可以轻松地重新排列Region的值为东部,南部,西部和中部,而不是图 1.4中的默认顺序。
当在行或列架子上使用离散字段时,该字段定义了标题。在这里,离散字段Region定义了列标题:

图 1.5:列上的离散字段定义了列标题
在这里,它定义了行标题:

图 1.6:行上的离散字段定义了行标题
当用于颜色时,离散字段定义了一个离散的颜色调色板,其中每种颜色与字段的一个不同值对齐:

图 1.7:颜色上的离散字段定义了一个离散的颜色调色板
连续字段
连续(绿色)字段的值从第一个到最后一个连续流动。数字和日期字段通常(尽管不总是)在视图中用作连续字段。这些字段的值具有一种顺序,改变它们几乎没有意义。
当在行或列上使用时,连续字段定义了一个轴:

图 1.8:列(或行)上的连续字段定义了一个轴
当用于颜色时,连续字段定义了一个渐变:

图 1.9:颜色上的连续字段定义了一个渐变颜色调色板
非常重要的一点是,连续和离散是与度量和维度不同的概念。虽然大多数维度默认是离散的,大多数度量默认是连续的,但在视图中,也可以将任何度量作为离散字段,某些维度作为连续字段,如下所示:

图 1.10:度量和维度可以是离散的或连续的
要更改字段的默认设置,请右键单击数据窗格中的字段,然后选择转换为离散或转换为连续。
要更改字段在视图中的使用方式,请右键单击视图中的字段,然后选择离散或连续。另外,你可以在数据窗格中将字段从维度和度量之间拖放。
一般来说,你可以将不同类型字段之间的差异理解为:
-
选择维度和度量之间的区别告诉 Tableau 如何切分或聚合 数据。
-
选择离散和连续之间的区别告诉 Tableau 如何展示 数据,通过标题或轴,并定义单独的颜色或渐变。
在本书中的示例操作过程中,注意你在创建可视化时使用的字段,无论是维度还是度量,或者它们是离散的还是连续的。尝试将视图中的字段从连续转换为离散,反之亦然,以便理解在可视化中这些差异。我们将在将注意力转向数据可视化时,将这种理解付诸实践。
数据可视化
与数据源建立新的连接是探索和发现的邀请!有时,你可能会带着非常明确的问题和对你期望发现的内容有清晰的预期来面对数据。其他时候,你可能带着一般性的问题,几乎不知道自己会发现什么。Tableau 的可视化分析功能使你能够快速且反复地探索数据,提出新的问题,并进行新的发现。
以下可视化示例展示了一些最基础的可视化类型。当你进行这些示例时,请记住,目标不仅仅是学习如何创建某个特定的图表。实际上,这些示例旨在帮助你思考如何向数据提问,并通过反复的可视化过程获得答案。Tableau 旨在让这一过程直观、快速且透明。
比记住创建特定图表类型的步骤更重要的是理解如何以及为什么使用 Tableau 创建图表,并能够在提出新问题时调整你的可视化以获得新的见解。
条形图
条形图以视觉方式表示数据,使得跨不同类别比较值变得容易。条形的长度是你理解数据的主要方式。你还可以通过颜色、大小、堆叠和顺序来传达额外的属性和值。
在 Tableau 中创建条形图非常简单。只需将你希望查看的度量值拖放到行或列架上,并将定义类别的维度拖放到对面的行或列架上。
作为Superstore的分析师,你已经准备好开始一个以销售(特别是销售额)为重点的发现过程。在跟随示例的过程中,逐步操作Chapter 01 Starter工作簿中的工作表。Chapter 01 Complete工作簿包含完整的示例,随时可以对照你的结果:
-
点击按部门销售标签页查看该工作表。
-
将数据窗格中度量值下的
Sales字段拖放到列架上。现在,你将得到一个条形图,表示数据源中所有数据的销售总额。 -
将数据窗格中维度下的
Department字段拖放到行架上。这会对数据进行切片,生成三条条形图,每条条形图的长度对应于各个部门的销售总额:![]()
图 1.11:完成前述步骤后,按部门销售的视图应如下所示
现在你有了一个横向条形图。这使得比较各个部门的销售额变得简单。标记类型下拉菜单在标记卡上设置为自动,表示 Tableau 已判断条形图是基于你所放置字段的最佳可视化方式。作为维度,Department对数据进行切片。由于它是离散的,它为数据中的每个部门定义了行标题。作为度量,Sales字段被聚合。由于它是连续的,它定义了一个坐标轴。条形图的标记类型使得每个部门的条形从0绘制到该部门销售总额的值。
通常,Tableau 会为视图中每一组维度值的组合绘制一个标记(例如条形图、圆形或方形)。在这个简单的情况下,Tableau 为每个Department的维度值(Furniture、Office Supplies和Technology)绘制一个单独的条形图。标记的类型可以通过标记卡上的下拉菜单进行查看和更改。在视图的左下角状态栏中,可以看到绘制的标记数量。
Tableau 使用不同的方式绘制不同的标记;例如,柱状图从 0(或者如果是堆叠柱状图,则从前一个柱子的末端)沿着轴绘制。圆圈和其他形状则根据定义轴的字段值的位置绘制。花点时间从 标记 卡片的下拉菜单中选择不同的标记类型进行实验。深入理解 Tableau 如何绘制不同标记类型将有助于你掌握这个工具。
深入分析的柱状图迭代
使用前面的柱状图,你可以轻松看到 技术 部门的总销售额比 家具 或 办公用品 部门都要多。如果你想进一步了解各部门在不同地区的销售金额,可以按照这两个步骤进行操作:
-
转到 二级柱状图 工作表,你会发现一个与你之前创建的视图完全相同的初始视图。
-
将
Region字段从 数据 面板中的 维度 拖到 行 货架,并将其放置在已显示的Department字段左侧。
现在,你应该看到一个看起来像这样的视图:

图 1.12:当你完成前面的步骤时,二级柱状图视图应该是这样的
你仍然有一个水平柱状图,但现在你已经将 Region 引入作为另一个维度,它改变了视图中的细节级别,并进一步切割了销售总和。通过将 Region 放在 Department 之前,你可以轻松比较给定地区内每个部门的销售额。
现在你开始有了一些发现。例如,技术 部门在每个地区的销售量都是最多的,除了 东部,在那里 家具 的销售量更高。办公用品 在任何地区的销售量都不是最高的。
考虑使用相同字段但排列方式不同的另一种视图:
-
转到 堆叠柱状图 工作表,你会发现一个与你原始柱状图相同的视图。
-
将
Region字段从 行 货架拖到 颜色 货架上:![]()
图 1.13:堆叠柱状图的视图应该是这样的
现在,你有了一个 堆叠柱状图,而不是一个 并排柱状图。每个柱段根据 Region 字段的颜色编码。此外,颜色图例已添加到工作区。你没有改变视图中的细节级别,因此销售额仍然是按每个 Region 和 Department 的组合汇总的:
视图详细级别是使用 Tableau 时的一个关键概念。在大多数基本可视化中,视图中所有维度值的组合定义了该视图的最低详细级别。所有度量值将根据最低详细级别进行汇总或切片。在大多数简单视图中,标记的数量(在左下角状态栏中显示)对应于维度值的唯一组合数量。也就是说,每一个维度值组合都会对应一个标记。
-
如果
Department是唯一用作维度的字段,你将获得部门级别的视图,视图中的所有度量值将按部门进行汇总。 -
如果
Region是唯一用作维度的字段,你将获得地区级别的视图,视图中的所有度量值将按地区进行汇总。 -
如果在视图中同时使用
Department和Region作为维度,你将获得部门和地区级别的视图。所有度量值将根据部门和地区的唯一组合进行汇总,并且每个部门和地区的组合都会有一个标记。
堆叠条形图在你想理解部分与整体关系时非常有用。现在可以更容易地看到每个部门在各个地区的销售额占总销售额的比例。然而,对于大多数地区,跨部门比较销售额非常困难。例如,你能轻松看出哪个部门在东部地区的销售额最高吗?这很困难,因为除了西部地区之外,条形图的每个部分都有不同的起始位置。
现在花些时间在条形图上进行实验,看看你能创建哪些变化:
-
导航到条形图(实验)工作表。
-
尝试将
Region字段从颜色拖动到标记卡上的其他不同货架,例如大小、标签和细节。观察到,在每种情况下,条形图仍然保持堆叠,但会根据Region字段定义的视觉编码重新绘制。 -
使用工具栏上的交换按钮来交换行和列的字段。这样,你可以非常轻松地将横向条形图转换为纵向条形图(反之亦然):
![]()
图 1.14:交换行和列按钮
-
将数据面板中的度量部分的
Sales字段拖动到标记卡上的Region字段上以替换它。如果需要,将Sales字段拖动到颜色,并注意颜色图例是连续字段的渐变。 -
通过将其他字段拖动到不同的货架上进一步实验。注意你每一步操作时 Tableau 的表现。
-
从文件菜单中,选择保存。
如果你的操作系统、机器或 Tableau 意外停止,那么自动保存功能应该可以保护你的工作。下次打开 Tableau 时,你将被提示恢复任何未手动保存的先前打开的工作簿。不过,你仍然应该养成经常保存工作的习惯,并且保持适当的备份。
随着你继续探索各种迭代,你将对可视化数据的灵活性产生信心。
折线图
折线图将可视化中相关的标记连接起来,以显示这些标记之间的移动或关系。标记的位置以及连接它们的线条是传达数据的主要方式。此外,你还可以使用大小和颜色来传达更多信息。
最常见的折线图类型是时间序列。时间序列显示了值随时间的变化。在 Tableau 中创建一个时间序列只需要一个日期和一个度量。
使用你刚保存的Chapter 01 Starter工作簿继续分析 Superstore 销售:
-
导航到按时间销售工作表。
-
将
Sales字段从度量拖动到行。这会给你一个单一的垂直条,表示数据源中所有销售的总和。 -
要将其转化为时间序列,你必须引入一个日期。将
订单日期字段从左侧数据面板中的维度拖动并放入列。Tableau 有一个内置的日期层级,默认的年份层级已经为你创建了一个连接四年的折线图。你可以清楚地看到销售额逐年增长:![]()
图 1.15:创建最终折线图的一个中间步骤;显示了按年份的销售总和
-
在列上的
YEAR(订单日期)字段使用下拉菜单(或右键单击该字段),将日期字段更改为季度。你可能会注意到下拉菜单中列出了两次季度。我们将在第三章:超越基础可视化的日期与时间可视化部分中探讨日期部分、值和层级的各种选项。现在,选择第二个选项:![]()
图 1.16:在下拉菜单中选择第二个季度选项。
请注意,当查看按季度销售时,周期性模式非常明显:

图 1.17:你的最终视图显示了过去几年每个季度的销售情况。
让我们考虑一些折线图的变体,它们可以让你提出和解答更深入的问题。
深入分析的折线图迭代
现在,你正在查看整体的时间销售情况。让我们进行一些稍微深入的分析:
-
导航到按时间销售(重叠的线条)工作表,在这里你将看到与刚刚创建的视图相同的视图。
-
将
区域字段从维度区域拖到颜色区域。现在每个地区都有一条折线,每条线的颜色不同,并且图例显示了每个颜色代表哪个地区。与条形图类似,向颜色区域添加维度会将标记分开。然而,与条形图中的分段堆叠不同,折线图的线条并没有堆叠。相反,这些线条按照每个地区和季度的销售总和的确切值绘制。这使得比较变得既简单又准确。有趣的是,可以观察到每个地区的周期性模式:![]()
图 1.18:此折线图展示了按季度的销售总额,不同地区使用不同颜色的线条。
只有四个地区时,保持线条区分相对容易。但是,如果维度有更多的不同值怎么办?让我们在以下示例中考虑这种情况:
-
转到按时间销售(多行)工作表,你会发现一个与刚才创建的视图完全相同的视图。
-
将
类别字段从维度区域拖动并直接放到标记卡上的区域字段上。这会用类别替代区域字段。现在你有了 17 条重叠的线条。通常,你会希望避免超过两到三条重叠线条。但是,你也可以考虑使用颜色或大小来展示一个在其他线条背景下重要的线条。同时,请注意,点击颜色图例中的一个项目将突出显示视图中关联的线条。高亮显示是突出单个项目并将其与其他项目进行比较的有效方法。 -
将
类别字段从颜色区域拖动到行区域。现在你会看到每个类别的折线图。你现在可以在不出现过多重叠的情况下比较每个产品的趋势,同时仍然能够比较不同时间段的趋势和模式。这是一个火花线可视化的开始,更多内容将在第十章,高级可视化中详细展开:![]()
图 1.19:你的最终视图应该是每个类别的折线图系列。
每个
类别的线条变化使你能够注意到趋势的变化、极值和变化率。
地理可视化
在 Tableau 中,内置的地理数据库会识别诸如国家、州、城市、机场、国会选区或邮政编码等字段的地理角色。即使你的数据不包含纬度和经度值,你也可以仅使用地理字段在地图上绘制位置。如果你的数据确实包含纬度和经度字段,你也可以使用这些字段,而不是生成的值。
Tableau 会根据字段名称和数据中的部分值自动分配地理角色给某些字段。你可以通过右键点击数据窗格中的字段,并使用地理角色选项来分配或重新分配地理角色。这也是查看可用的内置地理角色的好方法。
地理可视化在你需要了解事件发生的地点以及数据中是否存在空间关系时非常有价值。Tableau 提供了几种类型的地理可视化:
-
填充地图
-
符号地图
-
密度地图
此外,Tableau 可以读取来自某些数据库的空间文件和几何形状,并呈现空间对象、多边形等。我们将在第十二章,探索地图和高级地理空间功能中详细了解这些及其他地理空间功能。现在,我们将考虑一些地理可视化的基础原则。
填充地图
填充地图用于填充区域,例如国家、州或邮政编码,以显示位置。填充区域的颜色可以用来传达诸如平均销售额或人口等指标,以及诸如地区等维度。这些地图也被称为分区地图。
假设你想了解超市的销售情况,并查看是否存在任何地理模式。
注意:如果你的区域设置不是美国,你可能需要使用编辑位置选项将国家设置为美国。
你可以采用如下方法:
-
转到按州销售工作表。
-
双击数据窗格中的
州字段。Tableau 会自动使用纬度(生成)、经度(生成)和州字段创建地理可视化。 -
从数据窗格中拖动
销售字段并将其放置到标记卡上的颜色架上。根据你使用的字段和架子,Tableau 已将自动标记类型更改为地图:![]()
图 1.20:显示每个州销售总额的填充地图
填充地图将每个州填充为一种颜色,以表示该州销售总额的相对大小。现在在视图中可见的颜色图例显示了值的范围,并指出销售最少的州的总销售额为3,543,而销售最多的州的总销售额为1,090,616。
当你查看底部状态栏中显示的标记数量时,你会看到它是49。仔细检查后会发现,这些标记包括了 48 个州和华盛顿特区;夏威夷和阿拉斯加没有显示。Tableau 只有在数据中存在并且没有被过滤器排除的情况下,才会绘制地理标记,例如填充州。
请注意,地图确实显示了加拿大、墨西哥和其他不包含在数据中的位置。这些位置是从在线地图服务中检索的背景图像的一部分。然后,州的标记会绘制在背景图像之上。我们将在第十二章的映射技术部分中查看如何自定义地图,甚至使用其他地图服务。
填充地图在互动仪表板中效果很好,并且具有相当的美学价值。然而,某些类型的分析在填充地图上非常困难。与其他可视化类型不同,后者可以使用大小来传达数据的各个方面,填充地理区域的大小仅与地理面积有关,这可能使比较变得困难。例如,哪个州的销售额最高?你可能会认为是德克萨斯州或加利福尼亚州,因为较大的区域会影响你的感知,但你是否会猜到马萨诸塞州呢?一些地点可能足够小,以至于和更大的区域相比,它们甚至不会显示出来。使用填充地图时要小心,并考虑在仪表板上与其他可视化结合使用,以便更清晰地传达信息。
符号地图
在符号地图中,地图上的标记不是作为填充区域绘制的;而是作为形状或符号放置在特定的地理位置。大小、颜色和形状也可以用来编码额外的维度和度量。
按照以下步骤继续分析超级商店的销售数据:
-
转到邮政编码销售表。
-
双击维度下的
Postal Code。Tableau 会自动将Postal Code添加到标记卡的详细信息中,并将Longitude (generated)和Latitude (generated)添加到列和行中。默认情况下,标记类型设置为圆形,每个邮政编码会在正确的经纬度上绘制一个圆形标记。 -
将
Sales从度量拖到标记卡上的大小架上。这将根据每个邮政编码的销售总额来调整每个圆形的大小。 -
将
Profit从度量拖到标记卡上的颜色架上。这将根据利润的总和为标记着色。现在,你可以同时看到利润和销售的地理位置。这非常有用,因为你将看到一些销售额高但利润低的位置,这可能需要采取措施。
在进行一些精细调整大小和颜色后,最终视图应该是这样的:

图 1.21:一张符号地图,显示每个邮政编码的利润总和(用颜色编码)和销售总额(用大小编码)。
有时候,你可能需要调整符号地图上的标记,使其更加可见。以下是一些选项:
-
如果标记重叠,请点击颜色货架,并将透明度设置为50%到75%之间。此外,添加一个深色边框。这会使标记更突出,你通常可以更好地分辨重叠的标记。
-
如果标记太小,请点击大小货架并调整滑块。你还可以双击大小图例并编辑 Tableau 如何分配大小的详细信息。
-
如果标记过于模糊,双击颜色图例并编辑 Tableau 如何分配颜色的详细信息。尤其当你使用定义颜色渐变的连续字段时,这非常有用。
调整大小并使用阶梯颜色和使用完整的颜色范围的组合,如此处所示,产生了此示例的结果:

图 1.22:编辑颜色对话框包含更改步骤数、反转、使用完整颜色范围、包括总计以及调整范围和中心点的高级选项
与填充地图不同,符号地图允许你使用大小来可视化编码数据的某些方面。符号地图还允许更高的精度。实际上,如果你的数据中有经纬度信息,你可以非常精确地将标记绘制到街道地址级别的详细信息。这种可视化类型还允许你映射没有明确边界的地点。
有时,当你手动在标记卡片下拉菜单中选择地图时,会收到一条错误信息,指示在当前视图的详细程度下不支持填充地图。在这种情况下,Tableau 正在渲染一个没有内置形状的地理位置。
除了填充地图不可用的情况外,你需要决定哪种类型最能满足你的需求。在后续章节中,我们还将考虑将填充地图和符号地图结合在一个视图中的可能性。
密度图
密度图显示了地理区域内数值的分布和集中度。标记不再是单独的点或符号,而是融合在一起,显示出高密度区域的强度。你可以控制颜色、大小和强度。
假设你想了解订单的地理分布。你可以按照以下步骤创建一个密度图:
-
导航到订单密度工作表。
-
双击数据窗格中的
邮政编码字段。与之前一样,Tableau 会自动使用纬度(生成)、经度(生成)和州字段创建符号地图地理可视化。 -
使用标记卡片上的下拉菜单,将标记类型更改为密度。单独的圆点现在会融合在一起,显示出浓度:
![]()
图 1.23:显示按邮政编码聚集的密度图
尝试使用颜色和大小选项进行实验。例如,点击颜色时,会显示一些特定于密度标记类型的选项:

图 1.24:调整颜色、强度、不透明度和效果选项以显示密度标记
有几种颜色调色板可供选择,这些调色板非常适合密度标记(默认的颜色调色板适用于浅色背景,但也有其他调色板适用于深色背景)。强度滑块允许你根据密度来调整标记的强度。不透明度滑块让你决定标记的透明度。
这个密度地图显示了东海岸订单的高密度集中。你有时会看到仅反映人口密度的模式。在这种情况下,分析可能不会特别有意义。在这种情况下,东海岸的集中度与西海岸的低密度形成鲜明对比,令人感兴趣。
使用Show Me
Show Me是 Tableau 的一个强大组件,它将选定和激活的字段安排到所需的可视化类型中。Show Me工具栏显示不同类型可视化的小缩略图,允许你通过单击创建可视化。根据你在数据面板中选择的字段以及已显示的字段,Show Me将启用可能的可视化并突出显示推荐的可视化类型。
通过执行以下步骤来探索Show Me的功能:
-
导航到Show Me工作表。
-
如果Show Me面板没有展开,请点击工具栏右上角的Show Me按钮以展开面板。
-
按住Ctrl键,同时点击数据面板中的
邮政编码、州和利润字段以选择这些字段。选中这些字段后,Show Me应如下所示:![]()
图 1.25:Show Me界面
注意到Show Me窗口启用了某些可视化类型,如文本表、热力图、符号地图、填充地图和条形图。这些是根据视图中已显示的字段以及在数据面板中选择的字段可能生成的可视化类型。Show Me会突出显示推荐的可视化类型,并在你悬停在每个可视化类型上时,提供所需字段的描述。例如,符号地图需要一个地理维度和 0 到 2 个度量。
其他可视化类型被灰显,如折线图、区域图和直方图。如果当前视图中选择的字段无法生成这些类型的可视化,Show Me将不允许创建它们。将鼠标悬停在灰显的折线图选项上,它会显示折线图需要一个或多个度量(你已选择),但还需要一个日期字段(你没有选择)。
Tableau 会绘制带有日期以外字段的折线图。Show Me 为你提供了通常被认为是可视化的良好实践选项。然而,也可能有时候你知道使用折线图会更好地展示你的数据。理解 Tableau 是如何根据字段和架构渲染可视化,而不是总是依赖 Show Me,将让你在可视化上有更大的灵活性,并且当 Show Me 无法提供你想要的确切结果时,你可以重新排列数据。与此同时,你需要培养对良好可视化实践的意识。
Show Me 可以作为一个强大的工具,让你快速在不同的可视化类型之间迭代,以便从数据中寻找洞察。但作为数据探索者、分析师和讲述者,你应该将 Show Me 看作一个提供建议的有用指南。你可能知道,某种可视化类型能比 Show Me 提供的建议更有效地回答你的问题。你也可能已经有了一个可视化类型的计划,这个类型会作为仪表板的一部分工作,但 Show Me 中并没有包括它。
当你能有效地使用 Show Me 但同样能够舒适地在没有它的情况下构建可视化时,你就已经在学习和掌握 Tableau 的道路上迈出了坚实的一步。Show Me 是快速迭代可视化的强大工具,当你在寻找洞察和提出新问题时,它非常有用。它也适合从一个标准可视化开始,再进行进一步定制。它是一个出色的教学和学习工具。
然而,要小心不要将其当作一种依赖工具,而不了解可视化是如何从数据中构建出来的。花时间评估为什么某些可视化是可行的,而某些则不可行。在选择某种可视化类型时,暂停一下,查看使用了哪些字段和架构。
通过点击各种可视化类型,尝试使用 Show Me 结束这个示例,寻找根据可视化类型可能显得更为明显或不太明显的数据洞察。圆形视图和箱线图展示了每个州邮政编码的分布情况。条形图则很容易揭示多个具有负利润的邮政编码。
现在你已经熟悉了如何创建数据的单个视图,我们来将注意力集中到将它们整合到一个仪表板中。
将所有内容整合到一个仪表板中
通常,你需要多个可视化来传达数据的完整故事。在这些情况下,Tableau 使得你可以轻松地将多个可视化组合在一个仪表板上。在 Tableau 中,仪表板是由视图、筛选器、参数、图片和其他对象组成的集合,这些元素共同作用,以传达数据故事。仪表板通常是互动式的,允许最终用户探索数据的不同方面。
仪表板服务于多种目的,可以根据不同的受众进行定制。考虑以下可能的仪表板:
-
一个利润和销售的概览视图,让高管可以快速了解公司的当前状态
-
一个交互式仪表板,允许销售经理深入销售区域以识别威胁或机会
-
一个仪表板,允许医生跟踪患者的再入院情况、诊断和手术,从而做出更好的患者护理决策
-
一个仪表板,允许房地产公司高管识别趋势并为各种公寓综合体做出决策
-
一个交互式仪表板,供贷款官员根据按信用评级和地理位置细分的投资组合做出贷款决策
针对不同受众和高级技术的注意事项将在第八章,通过仪表板讲述数据故事中详细介绍。
仪表板界面
当你创建一个新的仪表板时,界面与设计单一视图时略有不同。我们将在简要浏览界面后开始设计你的第一个仪表板。你可以导航到Superstore Sales工作表并快速查看。
仪表板窗口由多个关键组件组成。使用这些对象的技巧将在第八章,通过仪表板讲述数据故事中详细介绍。现在,先集中熟悉可用的选项。你会注意到,左侧的侧边栏已被仪表板特定的内容替代:

图 1.26:仪表板的侧边栏
左侧的侧边栏包含两个标签:
-
一个仪表板标签,用于调整尺寸选项并向仪表板添加工作表和对象。
-
一个布局标签,用于调整仪表板上各种对象的布局。
仪表板窗格包含基于目标设备的预览选项,并有多个部分:
-
一个尺寸部分,用于仪表板的尺寸选项。
-
一个工作表部分,包含所有可以放置在仪表板上的工作表(视图)。
-
一个对象部分,包含可以添加到仪表板的额外对象。
你可以通过拖放方式向仪表板添加工作表和对象。当你拖动视图时,轻灰色的阴影将显示工作表被放置在仪表板中的位置。你也可以双击任何工作表,它将被自动添加。
除了添加工作表外,还可以向仪表板添加以下对象:
-
水平和垂直布局容器将让你对布局进行更精细的控制。
-
文本允许你添加文本标签和标题。
-
可以添加图像甚至嵌入网页内容。
-
一个空白对象允许你在仪表板中保留空白空间,或者可以作为占位符,直到设计更多内容。
-
一个导航对象允许用户在仪表板之间进行导航。
-
一个导出按钮允许最终用户将仪表板导出为 PowerPoint、PDF 或图片。
-
扩展功能让你能够添加你或第三方开发的控件和对象,用于与仪表板交互并提供扩展功能。
使用切换按钮,你可以选择是否将新对象添加为平铺或浮动。平铺对象会紧贴其他平铺对象或布局容器,按平铺布局排列。浮动对象则会浮动在仪表板上,层叠显示。
当工作表首次添加到仪表板时,工作表视图中可见的任何图例、筛选器或参数将会添加到仪表板中。如果你希望稍后再添加它们,选择仪表板中的工作表,然后点击右上角的小下拉箭头。几乎每个对象都有下拉箭头,提供了许多选项来微调对象的外观和控制行为。
注意仪表板上选定对象的各种控件:

图 1.27:选择仪表板上的对象时,各种控件和 UI 元素将变得可见。
你可以使用边框调整仪表板上对象的大小。抓取器(标注在图 1.27中)允许你在对象放置后移动它。我们将在后续考虑其他选项。
构建你的仪表板
了解了界面概览后,你现在可以按照以下步骤开始构建仪表板:
-
导航到超级商店销售表格。你应该能看到一个空白的仪表板。
-
依次双击左侧仪表板部分列出的每个表格:按部门销售、按时间销售、和按邮政编码销售。注意,双击对象会将其添加到仪表板布局中。
-
通过在侧边栏左下角勾选显示仪表板标题来为仪表板添加标题。
-
在仪表板中选择按部门销售表格,并点击下拉箭头显示菜单。
-
选择适应 | 整个视图。适应选项描述了可视化应如何填充任何可用空间。
使用各种适应选项时请小心。如果你使用的是大小未固定的仪表板,或者你的视图根据交互动态改变显示项的数量,那么曾经看起来不错的布局可能就不再那么适配视图了。
-
点击选择销售大小图例。使用X选项将该图例从仪表板中移除:
![]()
图 1.28:点击图例选择它,然后点击 X 将其从仪表板中移除。
-
点击选择利润颜色图例。使用抓取器将其拖动并放置到地图下方。
-
对于每个视图(按部门销售、按邮政编码销售和按时间销售),通过点击视图中的空白区域来选择该视图。然后,点击用作筛选器选项,将该视图设置为仪表盘的交互式筛选器:
![]()
图 1.29:点击“用作筛选器”按钮,将视图用作仪表盘中的筛选器
你的仪表盘应该是这样的:
![]()
图 1.30:由三个视图组成的最终仪表盘
-
花点时间与仪表盘互动。点击各种标记,例如条形、州和折线的点。注意,每次选择都会筛选仪表盘中的其余内容。点击已选标记将取消选择并清除筛选器。另外,注意在多个视图中选择标记会使筛选器一起工作。例如,在按部门销售中选择家具的条形图,并在按时间销售中选择2019 年第四季度,你将能看到所有在 2019 年第四季度有家具销售的邮政编码。
恭喜你!你现在已经创建了一个允许你进行交互式分析的仪表盘!
作为超级商店连锁的分析师,你的可视化帮助你探索和分析数据。你创建的仪表盘可以与管理层成员共享,并可以作为帮助他们看到和理解数据、做出更好决策的工具。当经理选择家具部门时,立刻可以明显看出,某些地区的销售额很高,但利润却很低。这可能会导致决策,例如改变营销策略或为该地区重新聚焦销售目标。很可能,这需要进一步分析,以确定最佳的行动方案。在这种情况下,Tableau 将帮助你继续发现、分析和讲述数据的循环。
总结
Tableau 的可视化环境允许快速和迭代的过程,帮助你通过视觉方式探索和分析数据。你已经迈出了了解如何使用平台的第一步。你连接了数据,并通过一些关键的可视化类型,如条形图、折线图和地理可视化,来探索和分析数据。在这个过程中,你专注于学习技巧,并理解了关键概念,如度量和维度、离散和连续字段之间的区别。最后,你将所有元素整合在一起,创建了一个完整的仪表盘,使最终用户能够理解你的分析并做出自己的发现。
在下一章中,我们将探索 Tableau 如何与数据互动。你将接触到基本概念和如何连接各种数据源的实际示例。结合你刚刚学到的构建可视化的关键概念,你将为进一步深入的可视化、分析和讲述完全交互式的数据故事做好充分准备。
第二章:连接到 Tableau 中的数据
Tableau 提供了连接几乎所有数据源的能力。它通过一种独特的范式来实现这一点,该范式利用了现有数据库引擎的强大功能和效率,或者提取数据到本地。我们将在第十三章《理解 Tableau 数据模型、连接和联接》中详细探讨连接、混合、联合以及全新的对象模型。在本章中,我们将重点介绍 Tableau 如何连接并处理数据的基本概念。我们将涵盖以下主题:
-
Tableau 范式
-
连接到数据
-
管理数据源元数据
-
使用提取代替实时连接
-
过滤数据
我们将从理解 Tableau 如何处理数据的基本范式开始。
Tableau 范式
在 Tableau 中处理数据的独特和令人兴奋的体验,正是 VizQL(可视化查询语言)的结果。
VizQL 是作为斯坦福大学的研究项目开发的,专注于人类如何自然地感知世界的方式,以及如何将这种感知应用到数据可视化中。我们自然地感知大小、形状、空间位置和颜色的差异。VizQL 使 Tableau 能够将你在可视化环境中拖放数据字段的操作,转换成定义数据如何编码这些视觉元素的查询语言。你无需阅读、编写或调试 VizQL。当你将字段拖放到定义大小、颜色、形状和空间位置的各个架构上时,Tableau 会在后台生成 VizQL。这使得你可以专注于可视化数据,而不是编写代码!
VizQL 的一个好处是它提供了一种通用的方式来描述视图中各个字段的排列如何定义与数据相关的查询。这个通用的基准可以被转换成多种 SQL、MDX 和 Tableau 查询语言(TQL,用于提取的数据)的变种。Tableau 会自动将 VizQL 转换为由源数据引擎执行的本地查询。
在最简单的形式下,Tableau 处理数据的范式如下图所示:

图 2.1:Tableau 处理数据的基本范式
让我们通过一个实际示例来看看这一范式是如何工作的。
一个简单的示例
打开位于 \Learning Tableau\Chapter 02 目录下的 Chapter 02 Starter.twbx 工作簿,并导航到 Tableau Paradigm 表单。该视图是通过将 Region 维度拖放到 Columns,并将 Sales 度量拖放到 Rows 创建的。以下是截图:

图 2.2:此条形图是一个查询的结果,返回了四行聚合数据
视图由两个字段定义。区域是唯一的维度,意味着它定义了视图的细节级别,并切分度量,这样每个区域就会有一条条形图。销售额作为度量,通过在每个区域内求和每笔销售来聚合。(另请注意,区域是离散的,导致生成列 标题,而销售额是连续的,导致生成 轴。)
以本示例为例(尽管该原理适用于任何数据源),假设您通过实时连接到 SQL Server 数据库,其中 Superstore 数据存储在一张表中。当您首次创建上面的截图时,Tableau 会生成一个 VizQL 脚本,这个脚本会被翻译为 SQL 脚本并发送到 SQL Server。SQL Server 数据库引擎评估查询并返回聚合结果到 Tableau,之后这些结果会以可视化形式呈现。
整个过程在 Tableau 的范式中看起来像下图所示:

图 2.3:Tableau 使用类似这样的范式生成了前面图片中的条形图
SQL Server 中可能有数百、数千甚至数百万行销售数据。然而,当 SQL Server 处理查询时,它返回的是汇总结果。在这种情况下,SQL Server 只返回四行汇总数据到 Tableau——每个区域一行。
有时,数据库管理员可能需要找出针对某个特定数据库正在执行的脚本,以便调试性能问题或确定更高效的索引或数据结构。许多数据库提供了分析工具或记录查询的执行。此外,您还可以在位于 My Tableau Repository\Logs 目录中的日志文件中找到 Tableau 生成的 SQL 或 MDX 查询。
您还可以使用 Tableau 内置的 性能记录器 来定位已执行的查询。在顶部菜单中选择 帮助 | 设置和性能 | 开始性能记录,然后与视图交互,最后在菜单中停止记录。Tableau 将打开一个仪表板,允许您查看在记录会话期间执行的任务、性能和查询。
要查看 Tableau 用于绘制视图的汇总数据,按 Ctrl + A 选择所有条形图,然后右键点击其中一条,选择 查看数据。

图 2.4:使用查看数据工具提示选项查看标记的摘要或基础数据
这将显示一个 查看数据 窗口:

图 2.5:摘要选项卡显示 Tableau 用于渲染视图中每个标记的汇总数据
查看数据屏幕允许你观察视图中的数据。汇总标签显示了用于渲染视图的汇总级别数据。这里的销售额是每个地区的销售总和。当你点击完整数据(之前称为基础数据)标签时,Tableau 将查询数据源,检索所有构成汇总记录的记录。在这种情况下,基础记录有9,426条,如下图右下角状态栏所示:

图 2.6:完整数据标签显示了数据库中的行级数据
Tableau 不需要9,426条记录来绘制视图,并且直到点击完整数据数据标签时才会向数据源请求这些记录。
数据库引擎经过优化,可以对数据执行聚合操作。通常,这些数据库引擎也位于强大的服务器上。Tableau 利用底层数据源的优化和计算能力。通过这种方式,Tableau 可以以相对较少的本地数据处理来可视化大量数据集。
此外,只有在你进行需要新查询或视图刷新的更改时,Tableau 才会查询数据源。否则,它将使用存储在本地缓存中的汇总结果,如下所示:

图 2.7:第一次渲染时,给定的一组字段会直接查询数据源。后续的渲染会查询缓存,即使相同的字段在视图中被重新排列。
在前面的示例中,查询以地区作为维度和销售额的总和作为度量,仅会对数据源发出一次请求。当返回的四行汇总结果时,它们会被存储在缓存中。初次渲染之后,如果你将地区移动到另一个视觉编码架,比如颜色,或将销售额移动到另一个视觉编码架,比如大小,那么 Tableau 会从缓存中获取汇总的行并重新渲染视图。
你可以通过按下F5键,或从数据菜单中选择数据源并选择刷新,强制 Tableau 跳过缓存并从数据源刷新数据。每当你希望视图反映来自实时数据源的最新更改时,都可以这样做。
如果你向视图中引入了没有缓存结果的新字段,Tableau 会向数据源发出新的查询,检索汇总结果,并将这些结果添加到缓存中。
连接到数据
Tableau 几乎可以可视化任何数据!几乎每个新的 Tableau 版本都会添加新的原生连接器。Tableau 还在不断为基于云的数据添加原生连接器。Web 数据连接器允许你为任何想要检索的在线数据编写连接器。Tableau Hyper API 允许你通过编程方式读取和写入数据提取,从而让你访问任何来源的数据并将其写入 Tableau 原生格式。此外,对于没有内置连接的数据库,Tableau 允许你使用通用 ODBC 连接。
你可能在同一个工作簿中有多个数据源。每个数据源将在左侧边栏的 数据 选项卡下显示。
尽管这些术语经常交替使用,但做出区分是有帮助的。连接严格来说是指与单一位置数据的连接,例如同一数据库中的表,或同一目录结构中的相同类型的文件。数据源可以包含多个可以联合在一起的连接,比如 SQL Server 中的表与 Snowflake 数据库中的表联合,再与 Excel 表联合。你可以这么理解:一个 Tableau 工作簿可能包含一个或多个数据源,而每个数据源可能包含一个或多个连接。本书中我们会保持这个区分。
本节将重点介绍一些连接到各种数据源的实际示例。无法覆盖所有可能的连接类型,但我们将介绍几个具有代表性的例子。你可能没有权限访问以下示例中的某些数据源。如果无法跟随每个示例,也无需担心,重点是观察它们之间的差异。
连接到文件中的数据
文件数据包括所有存储在文件中的数据源。文件数据源包括以下类型:
-
提取文件:一个
.hyper或.tde文件,包含从原始数据源提取的数据。 -
Microsoft Access:一个
.mdb或.accdb数据库文件,在 Access 中创建。 -
Microsoft Excel:在 Excel 中创建的
.xls、.xlsx或.xlsm电子表格。多个 Excel 表格或子表格可以通过单一连接进行合并或联合。 -
文本文件:一个分隔符文本文件,最常见的是
.txt、.csv或.tab。多个文本文件可以在单一目录中通过连接合并或联合在一起。 -
本地数据立方体文件:一个
.cub文件,包含多维数据。这些文件通常从 OLAP 数据库中导出。 -
Adobe PDF:一个
.pdf文件,可能包含 Tableau 可解析的表格数据。 -
空间文件:支持多种空间格式,如
.kml、.shp、.tab、.mif、空间 JSON 和 ESRI 数据库文件。这些格式包含可以被 Tableau 渲染的空间对象。 -
统计文件:由统计工具生成的
.sav、.sas7bdat、.rda或.rdata文件,例如 SAS 或 R。 -
JSON 文件:一个包含 JSON 格式数据的
.json文件。
除了前面提到的连接方式,你还可以连接到 Tableau 文件,以导入你在其他 Tableau 工作簿中保存的连接(.twb或.twbx)。连接将被导入,且更改仅会影响当前工作簿。
按照这个示例查看连接到 Excel 文件的方式:
-
在
Chapter 02 Starter.twbx工作簿中,导航至连接到 Excel工作表。 -
从菜单中选择数据 | 新建数据源,然后从可能的连接列表中选择Microsoft Excel。
-
在开放的对话框中,从
\Learning Tableau\Chapter 02目录打开Superstore.xlsx文件。Tableau 将打开数据源界面。你应该能在左侧看到 Excel 文档中的两个工作表。 -
双击订单工作表,然后双击退货工作表。Tableau 会弹出编辑关系对话框。我们将在第十三章《理解 Tableau 数据模型、连接和合并》中详细介绍关系。现在,关闭对话框以接受默认设置。
你的数据源界面应该与以下截图类似:

图 2.8:包含两个对象(订单和退货)的数据源界面
花些时间熟悉数据源界面的操作,该界面具有以下功能(在前面的截图中已编号):
-
工具栏:工具栏包含一些常用的控件,包括撤销、重做和保存。它还包括刷新当前数据源的选项。
-
连接:当前数据源中的所有连接。点击添加以向当前数据源添加新的连接。这使你可以跨不同连接类型联合数据。每个连接会用颜色标识,以便区分数据来自哪个连接。
-
工作表(或表格):列出给定连接的所有数据表。这包括 Excel 的工作表、子表和命名区域;关系型数据库的表、视图和存储过程;以及其他与连接相关的选项,例如新建联合或自定义 SQL。
-
数据源名称:这是当前选择的数据源的名称。你可以使用数据库图标旁的下拉箭头选择其他数据源。点击数据源的名称可以进行编辑。
-
对象/数据模型画布:将左侧的表单和表格拖动到此区域,以使其成为连接的一部分。你可以通过拖放或双击它们来添加额外的表格。每个表格将作为对象添加到对象模型中。你还可以将表格添加为联合,或双击对象以编辑底层表格和连接。我们将在第十三章中详细讲解这些内容,理解 Tableau 数据模型、连接和混合。现在,只需注意,订单和退货是通过订单 ID 关联在一起的。
-
实时 或 提取 选项:对于许多数据源,你可以选择使用实时连接或提取连接。我们将在本章后面详细介绍这些内容。
-
数据源 筛选器:你可以为数据源添加筛选器。筛选器将在数据源级别应用,因此会影响工作簿中使用该数据源的所有视图。
-
预览窗格选项:这些选项允许你指定是否希望查看数据预览或元数据列表,并且可以选择如何预览数据(例如,别名值、显示隐藏字段、以及希望预览多少行数据)。
-
预览窗格/元数据视图:根据你在选项中的选择,这个区域要么显示数据预览,要么显示所有字段及其附加的元数据。请注意,这些视图为你提供了广泛的选项,例如更改数据类型、隐藏或重命名字段以及应用各种数据转换功能。我们将在本章以及后续章节中探讨其中的一些选项。
一旦你创建并配置了数据源,就可以点击任何表单开始使用它。
完成此练习的步骤如下:
-
点击数据源名称编辑文本,并将数据源重命名为
Orders and Returns。 -
导航到连接到 Excel 表单,并使用
Orders and Returns数据源,创建一个显示退货数量按退货原因分类的时间序列。你的视图应如下图所示:![]()
图 2.9:按退货原因分类的退货数量
如果你需要随时编辑连接,请从菜单中选择数据,找到你的连接,然后选择编辑数据源...。或者,你可以右键单击左侧边栏中的任何数据源,并选择编辑数据源...,或者点击左下角的数据源选项卡。你可以通过点击 Tableau Desktop 左下角的数据源选项卡随时访问数据源界面。
连接到服务器上的数据
数据库服务器,如 SQL Server、Snowflake、Vertica 和 Oracle,将数据托管在一台或多台服务器上,并使用强大的数据库引擎根据客户端应用程序的查询存储、汇总、排序和提供数据。Tableau 可以利用这些服务器的功能来提取数据进行可视化和分析。或者,数据可以从这些源中提取并存储在提取文件中。
作为连接到服务器数据源的示例,我们将演示如何连接到 SQL Server。如果您有访问基于服务器的数据源的权限,您可能希望创建一个新的数据源并探索其详细信息。然而,这个特定的示例没有包含在本章的工作簿中。
一旦选择了 Microsoft SQL Server 连接,界面会显示一些初步配置选项,如下所示:

图 2.10:Microsoft SQL Server 的连接编辑器
连接到 SQL Server 需要 服务器 名称以及身份验证信息。
数据库管理员可以配置 SQL Server 使用 Windows 身份验证 或 SQL Server 用户名和密码。通过 SQL Server,您还可以选择允许读取未提交的数据。这可能会提高性能,但如果数据在 Tableau 查询时同时被插入、更新或删除,可能会导致不可预测的结果。此外,您可以通过左下角的 初始 SQL... 链接指定在连接时运行的 SQL。
为了保持高标准的安全性,Tableau 不会将密码作为数据源连接的一部分进行保存。这意味着,如果您使用实时连接与他人共享工作簿,他们需要有访问数据的凭据。这也意味着,当您首次打开工作簿时,对于任何需要密码的连接,您需要重新输入密码。
一旦点击橙色的 登录 按钮,您将看到一个与您之前看到的 Excel 连接界面非常相似的界面。主要的区别在于左侧,您有一个选择 数据库 的选项,如下图所示:

图 2.11:一旦连接到数据库,Tableau 将显示表、视图和存储过程作为添加到对象模型的选项
一旦选择了数据库,您将看到以下内容:
-
表格:此处显示选定数据库中的任何数据表或视图。
-
新建自定义 SQL:您可以编写自己的自定义 SQL 脚本并将其作为表添加。您可以像其他任何表或视图一样联接这些表。
-
新建联合:您可以将数据库中的表联合在一起。Tableau 会根据名称和数据类型匹配字段,并根据需要额外合并字段。
-
存储过程:您可以使用返回数据表的存储过程。您将有机会为存储过程参数设置值,或使用或创建一个 Tableau 参数来传递值。
配置完连接后,点击任意工作表的标签页以开始可视化数据。
使用提取
使用提取的数据源将有一个独特的图标,表示数据已从原始数据源提取到提取中,如以下截图所示:

图 2.12:数据源旁边的图标指示其是否已提取
前面数据窗格中的第一个数据连接已被提取,而第二个则没有。在创建提取后,您可以选择是否使用该提取。右键点击数据源(或从菜单中选择数据,然后选择数据源),您将看到以下菜单选项:

图 2.13:数据窗格中数据连接的上下文菜单,提取选项标注编号
让我们更详细地介绍它们:
-
刷新:数据源下的刷新选项仅告知 Tableau 刷新本地数据缓存。对于实时数据源,这将重新查询底层数据。对于已提取的数据源,将清除缓存并要求使用提取,但此刷新选项不会更新提取中的数据。如果要更新提取,请使用提取子菜单中的刷新选项(参见此列表中的编号 4)。
-
提取数据...:此选项将从数据源创建一个新的提取(如果已有提取,则会替换原提取)。
-
使用提取:如果某个数据源有提取,此选项将被启用。取消选中此选项将告诉 Tableau 使用实时连接,而非提取。提取不会被删除,您可以随时通过勾选此选项再次使用它。如果原始数据源对当前工作簿不可用,Tableau 将询问数据源的存放位置。
-
刷新:此刷新选项将使用原始数据源的数据刷新提取。它不会优化由于您进行的某些更改(例如隐藏字段或创建新的计算)而产生的提取。
-
从文件追加数据... 或 从数据源追加数据...:这些选项允许您将其他文件或数据源追加到现有提取中,前提是它们与原始数据源具有完全相同的数据结构。这将向现有提取中添加行;不会添加新的列。
-
立即计算计算字段:此操作将根据自初次创建提取以来您所做的更改,重新结构化提取,以提高其效率。某些计算字段可能会被物化(即,计算一次,以便可以存储计算结果值),新隐藏的列或删除的计算将从提取中移除。
-
删除:这将删除提取的定义,选择性地删除提取文件,并恢复与原始数据源的实时连接。
-
历史记录:这允许你查看提取和刷新历史。
-
属性:这使你能够查看提取的属性,例如位置、底层数据源、筛选器和行限制。
接下来我们来考虑使用提取的性能影响。
连接到云端数据
某些数据连接是连接到托管在云端的数据。这些包括Amazon RDS、Google BigQuery、Microsoft SQL Azure、Snowflake、Salesforce、Google Sheets等。详细介绍每种连接超出了本书的范围,但作为一个云数据源的示例,我们将考虑连接到 Google Sheets。
Google Sheets 允许用户在线创建和维护数据表格。表格可以由多个不同的用户共享和协作。在这里,我们将演示如何连接到一个通过链接共享的表格。
为了跟随这个示例,你需要一个免费的 Google 帐户。使用你的凭据,按以下步骤操作:
-
点击工具栏上的添加新数据源按钮,如下所示:
![]()
图 2.14:添加数据按钮
-
从可能的数据源列表中选择Google Sheets。你可以使用搜索框快速缩小列表范围。
-
在下一屏幕上,登录你的 Google 帐户并允许 Tableau Desktop 获得适当的权限。然后,你将看到所有 Google Sheets 的列表,并可以预览和搜索,如下图所示:
![]()
图 2.15:你可以选择任何你有权限查看的 Google Sheet,或者你可以输入共享表格的 URL。
-
将以下 URL 输入到搜索框中(为了方便,它已包含在
Chapter 02 Starter工作簿的连接到 Google Sheets标签页中,可以复制粘贴):docs.google.com/spreadsheets/d/1fWMGkPt0o7sdbW50tG4QLSZDwkjNO9X0mCkw-LKYu1A/edit?usp=sharing,然后点击搜索按钮: -
在列表中选择结果中的
Superstore表格,然后点击连接按钮。你现在应该能看到数据源屏幕。 -
点击数据源名称,将其重命名为
Superstore (Google Sheets):![]()
图 2.16:重命名数据源
-
在本示例中,将连接选项从Live切换为Extract。当连接到你自己的 Google Sheets 数据时,你可以选择Live或Extract:
![]()
图 2.17:在 Live 和 Extract 之间切换,编辑提取选项,并添加筛选器
-
点击连接到 Google 表格选项卡。系统会提示你选择保存提取文件的位置。接受默认名称,并将其保存在
Learning Tableau\Chapter 02目录下(如果需要,选择是来覆盖现有文件)。数据应在几秒钟内完成提取。 -
创建按州划分的利润填充地图,利润定义颜色和标签:
![]()
图 2.18:填充地图演示了连接到云端数据源的能力
如果你所在的位置在美国之外,你可能需要更改 Tableau 的区域设置,以便正确显示地图中的州。使用菜单并选择文件 | 工作簿区域设置 | 更多,然后选择英语(美国)。
现在我们已经看过了几个连接数据的具体示例,让我们来看一些快捷方式以及如何管理我们的数据源。
连接数据的快捷方式
你可以非常快速地进行某些连接。以下选项将帮助你更快速地开始分析:
-
从剪贴板粘贴数据。如果你从系统剪贴板复制了数据(例如,电子表格、网页上的表格或文本文件),你可以将数据直接粘贴到 Tableau 中。可以使用Ctrl + V,或者从菜单中选择数据 | 粘贴数据。数据将作为文件存储,当你保存工作簿时,会提示数据的位置。
-
从菜单中选择文件 | 打开。这将允许你打开 Tableau 支持的任何数据文件,如文本文件、Excel 文件、Access 文件(macOS 上不可用)、空间文件、统计文件、JSON 甚至离线立方体(
.cub)文件。 -
从 Windows 资源管理器或 Finder 拖放文件到 Tableau 工作区。任何有效的基于文件的数据源都可以拖放到 Tableau 工作区,甚至可以拖放到桌面或任务栏上的 Tableau 快捷方式。
-
复制现有的数据源。你可以通过右键单击并选择复制来复制现有的数据源。
这些快捷方式提供了一种快速分析所需数据的方法。接下来,让我们集中精力管理数据源。
管理数据源元数据
Tableau 中的数据源存储有关连接的信息。除了连接本身(例如,数据库服务器名称、数据库和/或文件名),数据源还包含有关所有可用字段的信息(例如字段名称、数据类型、默认格式、注释和别名)。通常,这些关于数据的数据被称为元数据。
在数据面板中右键单击字段,弹出菜单会显示元数据选项。部分选项将在后面的练习中演示;其他选项将在本书中详细解释。以下是通过右键单击可以使用的一些选项:
-
重命名字段
-
隐藏字段
-
更改非日期维度值的别名
-
创建计算字段、分组、集合、区间或参数
-
拆分字段
-
更改日期或数字字段的默认使用方式,选择离散或连续
-
将字段重新定义为维度或度量
-
更改字段的数据类型
-
为字段分配地理角色
-
更改字段在可视化中显示的默认设置,例如默认颜色和形状、数字或日期格式、排序顺序(对于维度)或聚合类型(对于度量)
-
为字段添加默认注释(当在数据面板中将鼠标悬停在字段上时,注释将作为工具提示显示,或者当从菜单中选择描述...时,注释会作为描述的一部分显示)
-
在层次结构中添加或移除字段
与字段的可视化显示相关的元数据选项,例如默认排序顺序或默认数字格式,定义了字段的整体默认值。然而,你可以通过右键点击货架上的活动字段并选择所需选项,在任何单独的视图中覆盖这些默认值。
要查看这个效果,可以使用在连接到 Google 表格视图中创建的按州分类的利润填充地图视图。如果你没有创建此视图,可以使用订单与退货数据源,尽管结果视图会略有不同。打开填充地图后,按照以下步骤操作:
-
右键点击数据面板中的利润字段,并选择默认属性 | 数字格式...。弹出的对话框会提供多种数字格式选项。
-
将数字格式设置为货币(自定义),并将
0小数位数和显示单位设置为千(K)。点击确定后,你应该会注意到地图上的标签已更新,包括货币符号:![]()
图 2.19:编辑字段的默认数字格式
-
再次右键点击利润字段并选择默认属性 | 颜色...。弹出的对话框将提供一个选项,让你选择并自定义利润字段的默认颜色编码。可以尝试不同的色板和设置。每次点击应用按钮时,可视化都会更新。
发散色板(从一种颜色渐变到另一种颜色的色板)对于像利润这样的字段尤其有效,因为它可以具有负值和正值。默认的0中心可以让你轻松地通过显示的颜色分辨哪些值是正数,哪些值是负数。

图 2.20:自定义颜色
由于你在数据源级别设置了字段的默认格式,因此你创建的任何使用利润的视图都将包含你指定的默认格式。
在你的可视化中考虑使用色盲安全色。橙色和蓝色通常被认为是红色和绿色的色盲安全替代色。Tableau 还包含了一个离散的色盲安全色板。此外,考虑调整颜色的强度,使用标签或不同的可视化方式,以使你的可视化更具可访问性。
使用提取代替实时连接
几乎所有数据源都允许选择实时连接或提取数据。少数基于云的数据源要求必须进行提取。相反,OLAP 数据源无法提取,必须使用实时连接。
提取扩展了 Tableau 操作数据的方式。请参考以下示意图:

图 2.21:原始数据源的数据被提取到一个自包含的数据快照中
使用实时连接时,Tableau 会直接向数据源发出查询(如果可能,也会使用缓存中的数据)。当你提取数据时,Tableau 会从原始数据源中拉取部分或全部数据并将其存储在提取文件中。在 10.5 版本之前,Tableau 使用的是 Tableau 数据提取(.tde)文件。从 10.5 版本开始,Tableau 使用 Hyper 提取(.hyper)文件,并会在更新旧工作簿时将 .tde 文件转换为 .hyper 文件。
Tableau 操作数据的基本模式并没有改变,但你会注意到 Tableau 现在是从提取中查询并获取结果。可以重新从源中获取数据以刷新提取。因此,每个提取都是数据源在最新刷新时的快照。提取的优势在于它具有便携性且非常高效。
创建提取
提取可以通过多种方式创建,如下所示:
-
在 数据源 页面上选择 提取,如图所示。点击 编辑... 链接将允许你配置提取:
![]()
图 2.22:选择“实时”或“提取”作为连接方式,并通过点击“编辑”配置提取选项。
-
从 数据 菜单中选择数据源,或右键点击数据窗格中的数据源并选择 提取数据。你将有机会为提取设置配置选项,以下截图演示了此过程:
![]()
图 2.23:提取数据… 选项
-
开发者可以使用 Tableau Hyper API 创建提取。此 API 允许你使用 Python、Java、C++ 或 C#/.NET 编程语言以编程方式读取和写入 Hyper 提取文件。该方法的具体细节超出了本书的范围,但 Tableau 官方网站上有相关文档可供参考:
help.tableau.com/current/api/hyper_api/en-us/index.html。 -
一些工具,如
Alteryx或Tableau Prep,可以输出 Tableau 提取。
你将有多种选项来配置提取。要编辑这些选项,选择 提取,然后在 数据源 页面上选择 编辑...,或从 数据 窗格中的连接右键菜单选择 提取数据...。在配置提取时,你将被提示选择某些选项,如下所示:

图 2.24:提取数据对话框提供了许多配置提取的选项
在配置提取时,你有很大的控制权。以下是各种选项,以及你的选择对性能和灵活性的影响:
-
根据你创建的数据源和对象模型,你可以在逻辑表和物理表之间进行选择。我们将在第十三章中探讨相关细节,了解 Tableau 数据模型、连接和混合。
-
你可以选择性地添加提取过滤器,将提取限制为原始源的一个子集。在此示例中,只有Region为Central或South且Category为Office Machines的记录将被包含在提取中。
-
你可以通过勾选框来对提取进行聚合。这意味着数据将汇总到可见维度的级别,并且可以选择汇总到指定的日期级别,如年份或月份。
可见字段是指在数据窗格中显示的字段。你可以通过右键单击字段并选择隐藏,将字段从数据源屏幕或数据窗格中隐藏。如果该字段在工作簿中的任何视图中使用,则此选项将被禁用。
隐藏字段无法在视图中使用。隐藏字段在创建或优化提取之前是不会包含在提取中的。
在前面的示例中,如果只有Region和Category维度可见,生成的提取将仅包含两行数据(Central和South各一行)。此外,任何度量都会在Region/Category级别上进行聚合,并会根据Extract过滤器进行处理。例如,Sales将汇总为Central/Office Machines和South/Office Machines的销售总和。所有度量都会根据其默认的聚合方式进行汇总。
你可以通过包含所有行或数据集中前 n 行的抽样来调整提取中的行数。如果选择所有行,你可以指示进行增量刷新。如果源数据逐步添加记录,并且你有一个可以可靠识别新记录的字段,例如身份列或日期字段,那么增量提取可以让你将这些记录添加到提取中,而无需重新创建整个提取。在前面的示例中,任何Row ID高于上次提取刷新最大值的新行,都将包含在下一个增量刷新中。
增量刷新是处理随着时间增长的大量数据的一个好方法。然而,使用增量刷新时需要小心,因为增量刷新仅会基于你指定的字段添加新的数据行。你将无法获得对现有行的更改,也不会删除源中已删除的行。如果增量字段的值小于现有提取中的最大值,你也会错过任何新行。
现在我们已经考虑了如何创建和配置提取数据,接下来我们来看看如何使用它们。
性能
Tableau 中有两种类型的提取数据:
-
Tableau 数据提取(
.tde文件):在 Tableau 10.5 版本之前,这些是唯一可用的提取数据类型。 -
Hyper(
.hyper文件)在 Tableau 10.5 或更高版本中可用。
根据规模和数据量,.hyper和.tde提取数据通常比大多数传统的实时数据库连接更快。通常情况下,Tableau 默认会创建 Hyper 提取数据。除非你使用的是旧版本的 Tableau,否则没有太多理由使用旧版的 .tde。Tableau 提取数据的卓越性能基于几个因素,包括以下几点:
-
Hyper 提取数据结合了 OLTP 和 OLAP 模型,且引擎会自动确定最佳查询方式。Tableau 数据提取采用列式存储,查询效率非常高。
-
提取数据是以结构化的方式存储的,因此可以快速加载到内存中,无需额外的处理,并且在内存和磁盘存储之间传输数据,因此大小不受可用内存的限制,但内存会被高效使用以提高性能。
-
许多计算字段在提取数据中被物化。存储在提取数据中的预计算值通常比每次执行查询时都进行计算要读取得更快。Hyper 提取数据进一步扩展了这一点,通过物化更多的聚合结果来提升性能。
你可以选择使用提取数据来提高性能,超越传统数据库。为了最大化你的性能提升,考虑采取以下措施:
-
在创建提取数据之前,隐藏未使用的字段。如果你已经创建了所有需要的可视化,可以点击隐藏未使用的字段按钮,在提取对话框中隐藏所有未在任何视图或计算中使用的字段。
-
如果可能,使用来自原始数据源的子集。例如,如果你有过去 10 年的历史数据,但只需要过去两年的数据进行分析,那么可以通过
Date字段来筛选提取的数据。 -
在创建或编辑计算字段,或者删除或隐藏字段后,优化提取数据。
-
将提取的数据存储在固态硬盘上。
尽管性能是考虑使用提取数据的一个主要原因,但还有其他因素需要考虑,接下来我们将讨论这些因素。
便携性与安全性
假设你的数据存储在仅限公司内部网络访问的数据库服务器上。通常情况下,你必须在现场或通过 VPN 才能访问这些数据。即使是云端数据源,也需要网络连接。通过提取数据,你可以将数据带走,并在离线时进行工作。
提取文件包含从源中提取的数据。当你保存工作簿时,可以将其保存为 Tableau 工作簿(.twb)文件或 Tableau 打包工作簿(.twbx)文件。我们来看看它们的区别:
-
Tableau 工作簿(
.twb)包含所有连接、字段、可视化和仪表板的定义,但不包含任何数据或外部文件,如图片。Tableau 工作簿可以在 Tableau Desktop 中编辑并发布到 Tableau Server。 -
Tableau 打包工作簿(
.twbx)包含.twb文件中的所有内容,但还包括提取和外部文件,这些文件与工作簿一起打包在一个文件中。使用提取的打包工作簿可以在 Tableau Desktop、Tableau Reader 中打开,并发布到 Tableau Public 或 Tableau Online。
打包工作簿文件(.twbx)实际上只是一个压缩的 .zip 文件。如果你将扩展名从 .twbx 更改为 .zip,你可以像访问其他 .zip 文件一样访问其内容。
使用提取时需要注意一些安全性考虑。首先,任何限制根据所使用的凭证访问哪些数据的安全层,在创建提取后将不再有效。提取不需要用户名或密码,任何人都可以读取提取中的所有数据。其次,提取文件(.hyper 或 .tde)或包含提取的打包工作簿(.twbx)中的可见(非隐藏)字段数据,即使这些数据未在可视化中显示,也可以访问。务必小心限制对包含敏感或专有数据的提取或打包工作簿的访问。
何时使用提取
在决定是否使用提取时,你应考虑各种因素。在某些情况下,你没有选择(例如,OLAP 需要实时连接,一些基于云的数据源需要提取)。在其他情况下,你需要评估你的选择。
通常,在以下情况下使用提取:
-
你需要比实时连接提供更好的性能。
-
你需要使数据具有可移植性。
-
你需要使用数据库数据引擎不支持的函数(例如,
MEDIAN在与 SQL Server 的实时连接中不受支持)。 -
你想要共享打包工作簿。尤其是在你希望与使用免费版 Tableau Reader 的人共享打包工作簿时,因为 Tableau Reader 只能读取包含数据提取的打包工作簿。
通常,当你有以下任何使用案例时,不要使用提取:
-
你有敏感数据,某些用户不应访问这些数据,或者你无法控制谁能够访问提取的数据。不过,你可以在创建提取之前隐藏敏感字段,在这种情况下,它们将不再是提取的一部分。
-
你需要根据登录凭证管理安全性。(不过,如果你使用 Tableau Server,你仍然可以使用 Tableau Server 上托管的提取连接,并通过登录进行安全保护。我们将在第十六章“共享你的数据故事”中讨论如何使用 Tableau Server 分享你的工作)。
-
你需要看到源数据的变化实时更新。
-
数据量过大导致生成提取文件所需的时间不现实。可以在合理时间内提取的记录数量将取决于字段的数据类型、字段的数量、数据源的速度和网络带宽等因素。Hyper 引擎通常比旧的
.tde文件构建.hyper提取文件要快得多。
了解如何创建、管理和使用提取文件(以及何时不使用它们)后,我们将重点关注在 Tableau 中筛选数据的各种方法。
筛选数据
通常,你会希望在 Tableau 中筛选数据,以便对数据的子集进行分析、缩小焦点或深入探讨细节。Tableau 提供了多种筛选数据的方式。
如果你希望将分析范围限制为数据的一个子集,你可以使用以下技术之一在数据源中筛选数据:
-
数据源筛选器在所有其他筛选器之前应用,并且当你想将分析限制为数据的一个子集时非常有用。这些筛选器在任何其他筛选器之前应用。
-
提取筛选器限制存储在提取文件中的数据(
.tde或.hyper)。如果在提取数据时存在数据源筛选器,它们通常会转换为提取筛选器。 -
自定义 SQL 筛选器可以通过使用带有 Tableau 参数的
WHERE子句的实时连接实现。我们将在第四章《与计算和参数的冒险之旅》中详细讨论参数。
此外,你还可以使用以下技术之一对一个或多个视图应用筛选器:
-
从数据面板将字段拖动到筛选器架上。
-
在视图中选择一个或多个标记或标题,然后选择仅保留或排除,如下所示:

图 2.25:根据标记选择,你可以仅保留匹配的值或排除这些值。
-
右键点击数据面板或视图中的任何字段,并选择显示筛选器。筛选器将显示为控件(例如下拉列表和复选框),以便视图或仪表板的最终用户能够更改筛选器。
-
使用操作筛选器。我们将在仪表板的上下文中进一步探讨筛选器和操作筛选器。
每个选项都会将一个或多个字段添加到视图的筛选器架上。当你将字段拖到筛选器架上时,系统会提示你定义筛选器的选项。筛选器选项的差异最明显的表现是字段是离散的还是连续的。字段是作为维度筛选还是作为度量筛选,会极大地影响筛选器的应用方式及其结果。
筛选离散(蓝色)字段
当你使用离散字段进行筛选时,系统会提供选择保留或排除单个值的选项。例如,当你将离散的部门维度拖到筛选器架上时,Tableau 会提供以下选项:

图 2.26:筛选离散字段时会显示包括或排除单个值的选项
筛选器选项包括常规、通配符、条件和顶部标签。您的筛选器可以包括来自每个标签的选项。常规标签中的摘要部分将显示所有已选择的选项:
-
常规标签允许您从列表中选择项目(如果维度包含大量值并且加载时间较长,您可以使用自定义列表手动添加项目)。您可以使用排除选项排除选定的项目。
-
通配符标签允许您匹配包含、以某值开头、以某值结尾或完全匹配给定值的字符串值。
-
条件标签允许您根据其他字段的聚合结果指定条件(例如,保留任何部门,其销售总额超过 1,000,000 美元)。此外,您可以编写自定义计算来形成复杂的条件。我们将在第四章《与计算和参数一起开始冒险》和第六章《深入探讨表格计算》中详细讲解计算。
-
顶部标签允许您将筛选器限制为仅显示顶部或底部项目。例如,您可能决定仅保留销售总额前五的项目。
离散度量(除使用表格计算的计算字段外)无法添加到筛选器架上。如果字段包含日期或数值,您可以在筛选之前将其转换为连续字段。其他数据类型需要创建计算字段,将您希望筛选的值转换为连续的数值。
接下来我们来看看如何筛选连续的过滤器。
筛选连续(绿色)字段
如果您将连续维度拖放到筛选器架上,您将获得不同的选项集。通常,系统会首先提示您如何筛选字段,如下所示:

图 2.27:对于数值,您通常会看到作为筛选器一部分的聚合选项
这里的选项分为两大类:
-
所有值:筛选器将基于字段的每个单独值,逐行筛选。例如,一个所有值筛选器,仅保留销售额超过 100 美元的记录,将评估每一条底层数据记录,仅保留销售额超过 100 美元的单个销售记录。
-
聚合:筛选器将基于指定的聚合(例如,总和、平均值、最小值、最大值、标准差和方差),并且聚合将在视图的细节层次上执行。例如,在类别级别的视图上保持销售总和超过 100,000 美元的筛选器将仅保留销售总额至少为 100,000 美元的类别。
一旦您做出选择(或如果该选择不适用于所选字段),您将获得另一个界面来设置实际的筛选器,如下所示:

图 2.28:销售额(作为 SUM)的筛选选项
在这里,你会看到基于范围进行筛选的连续值选项,可以选择开始、结束或两者。特殊选项卡提供了显示所有值、NULL值或非NULL值的选项。
从用户界面的角度来看,筛选选项最显著的区别在于字段是离散的还是连续的。然而,你应始终考虑是否将字段用作维度过滤器或测量过滤器,以便了解根据操作顺序得到的结果是什么,操作顺序将在附录中讨论。
-
维度过滤器将过滤详细数据行。例如,筛选出“中央地区”将删除该地区的所有数据行。你将看不到该地区的任何州,并且汇总结果,如
SUM(Sales),将不包括该地区的任何数据。 -
测量过滤器将在由视图中包含的维度定义的详细级别上过滤汇总数据行。例如,如果你筛选只包含
SUM(Sales)大于 100,000 美元的记录,并且视图中包括Region和Month,那么最终的视图将只包含Region在给定月份销售额超过 100,000 美元的值。
除了筛选离散和连续字段外,你还会注意到在筛选日期时有一些不同的选项,我们接下来将讨论。
筛选日期
我们将在第三章,超越基础可视化的可视化日期和时间部分,详细了解 Tableau 处理日期的特殊方式。现在,请考虑将订单日期字段拖到筛选器架上的选项,如下所示:

图 2.29:日期字段的初始筛选选项
这里的选项包括以下内容:
-
相对日期:此选项允许你根据特定日期筛选,例如保留今天起的最后三周,或从 1 月 1 日起的最后六个月。
-
日期范围:此选项允许你根据开始日期、结束日期或两者来筛选日期范围。
-
日期部分:此选项允许你根据日期的离散部分进行筛选,例如年份、月份、日期,或部分的组合,如月/年。根据你的选择,你将获得不同的筛选选项,并且可以选择默认使用数据中的最新值。
-
单独的日期:此选项允许你根据数据中日期字段的每个单独值进行筛选。
-
计数或计数(唯一):此选项允许你根据数据中日期值的计数或唯一计数进行筛选。
根据你的选择,你将获得更多的筛选选项。
其他筛选选项
在筛选时,你还需要注意以下选项:
-
你可以通过右键单击字段并选择显示过滤器,为几乎任何字段显示过滤器控件。控件的类型取决于字段的类型,是否是离散的或连续的,并且可以通过使用过滤器控件右上角的小下拉箭头进行自定义。
-
过滤器可以添加到上下文中。上下文在附录中有详细描述,我们将通过本书中的多个示例了解其重要性。现在,只需注意此选项。此选项可通过过滤器控件的下拉菜单或过滤器架上的字段访问。
-
过滤器可以设置为显示数据库中的所有值、上下文中的所有值、层级中的所有值,或仅显示基于其他过滤器相关的值。这些选项可通过过滤器控件的下拉菜单或过滤器架上的字段访问。
-
使用 Tableau Server 时,你可以定义用户过滤器,通过基于用户凭证过滤来提供行级安全性。
-
默认情况下,放置在过滤器架上的任何字段定义一个特定于当前视图的过滤器。然而,你可以通过使用过滤器架上字段的菜单来指定范围。选择应用于,然后选择以下选项之一:
-
所有相关数据源:所有数据源将根据指定的值进行过滤。字段的关系与数据混合相同(即,默认按名称和类型匹配,或通过数据 | 编辑关系...菜单选项进行自定义)。所有使用任何相关数据源的视图将受到过滤器的影响。此选项有时被称为跨数据源过滤。
-
当前数据源:该字段的数据源将被过滤。任何使用该数据源的视图将受到过滤器的影响。
-
选定工作表:任何选定的工作表,只要使用该字段的数据源,都将受到过滤器的影响。
-
当前工作表:只有当前视图将受到过滤器的影响。
-
在本书中,我们将看到许多过滤数据的实际示例,其中许多示例将利用这些选项。
总结
本章涵盖了 Tableau 如何与数据协作的关键概念。虽然你通常不会关注 Tableau 生成的查询来查询底层数据引擎,但对 Tableau 的基本概念有一个深入的理解,将极大地帮助你在分析数据时的工作。
我们查看了多个不同数据源的连接示例,考虑了使用数据提取的优点和潜在缺点,思考了如何管理元数据,并考虑了过滤数据的选项。
在 Tableau 中处理数据是你所有工作中的基础。理解如何连接各种数据源、何时使用提取数据,以及如何自定义元数据,将是你开始更深层次分析和更复杂可视化时的关键,例如在第三章《超越基础可视化》中讲解的内容。
第三章:超越基础可视化
现在,你已经准备好开始创建更高级的可视化了!高级不一定意味着困难,因为 Tableau 使得许多可视化容易创建。高级也不一定意味着复杂。目标是传达数据,而不是用不必要的复杂性来掩盖它。
相反,这些可视化之所以是高级的,是因为你需要理解它们何时使用,为什么它们有用,以及如何利用 Tableau 的功能来创建它们。此外,我们将要查看的许多示例会介绍一些高级技巧,例如计算,以扩展基础可视化的实用性。许多这些技巧将在未来的章节中得到充分发展,所以现在不必担心试图吸收每个细节。
本章中的大多数示例都是设计成你可以跟随操作的。然而,别只是死记一套操作步骤。相反,花时间理解将不同类型的字段放到不同的架子上时,如何改变标题、轴和标记的呈现方式。尝试并偶尔偏离操作说明,看看还能实现什么其他的效果。你总是可以使用 Tableau 的返回按钮,再次查看示例!
在本章中,可视化将分为以下几个主要类别:
-
比较
-
日期和时间
-
将数据的部分与整体相关联
-
分布
-
多轴
你可能已经注意到前面列表中缺少空间位置或地理类别。地图功能在第一章,使用 Tableau 起步中介绍,我们将在第十二章,探索地图和高级地理空间功能中讨论一些高级的地理功能。
你可以通过使用 Chapter 03 Starter.twbx 工作簿来重建本章中的示例,或者从头开始,使用空白工作簿并连接位于 Learning Tableau/Chapter 03 文件夹中的 Hospital Visits.csv 文件。完成的示例可以在 Chapter 03 Complete.twbx 工作簿中找到。
我们将从评估哪些类型的可视化适用于定量比较开始。
比较数值
通常,你会想要比较不同类别中测量值之间的差异。你可能会问以下问题:
-
每个商店服务了多少客户?
-
每个风电场生产了多少能量?
-
每个医生看了多少病人?
在每个案例中,你都在尝试进行比较(无论是在商店、风电场还是医生之间),比较某些定量测量(客户数量、兆瓦电力、病人数量)。
让我们来看看一些可视化示例,这些示例有助于回答这类问题。
条形图
这是一个简单的条形图,类似于我们在第一章,使用 Tableau 起步中创建的图表:

图 3.1:显示按部门患者就诊次数的条形图
这个条形图使得在医院各个部门之间比较患者就诊次数变得容易。作为一个维度,部门根据每个不同数值(如急诊、重症监护室或心脏科)对数据进行切片。它为这些数值创建了一个标题,因为它是离散的(蓝色)。作为一个度量,患者就诊次数给出了每个部门的患者就诊总数。因为它是一个连续的(绿色)字段,它定义了一个轴,条形被渲染以可视化数值。
请注意,条形图按照患者就诊次数总和最高的部门在顶部,最低的在底部进行排序。对条形图进行排序通常会为分析增加很多价值,因为它使得比较和查看排名顺序变得更容易。例如,很容易看出微生物学部门比营养学部门有更多的患者就诊次数。如果图表没有排序,这可能不会那么明显。
您可以按以下方式对视图进行排序:
-
单击工具栏上的排序图标之一:这将导致根据定义轴的度量自动排序。导致新顺序的数据或筛选的更改将反映在视图中:
![]()
图 3.2:工具栏排序图标
-
单击轴上的排序图标:当您悬停在轴上时,选项图标将变得可见,并在启用排序时保持在原位。这也将导致自动排序:
![]()
图 3.3:轴排序图标
-
使用活动维度字段上的下拉菜单,选择排序以查看和编辑排序选项。您还可以选择清除排序以删除任何排序:
![]()
图 3.4:使用下拉菜单进行排序
-
使用行的字段标签上的下拉菜单,选择所需的排序选项:
![]()
图 3.5:按字段标签排序
-
拖放行标题以手动重新排列它们。这将导致一个不会随数据刷新而更新的手动排序。
所有这些排序方法都是特定于视图的,并将覆盖您在元数据中定义的任何默认排序。
条形图变体
一个基本的条形图可以通过多种方式扩展以实现各种目标。考虑以下变体:
-
使用子弹图表显示朝向目标、指标或阈值的进展
-
条中条图表以显示朝向目标的进展或比较类别内两个特定值
-
突出显示感兴趣的类别
子弹图表
子弹图(有时也称为子弹图表)是一种非常好的方式,可以直观地将一个度量值与目标、标准或阈值进行比较。条形表示度量值,而线表示目标。Tableau 还默认使用阴影表示到目标或阈值的60%和80%距离。该线和阴影是参考线,可以进行调整(我们将在未来的章节中详细探讨如何调整)。

图 3.6:子弹图的各个部分
在这个场景中,我们将考虑医院在收入目标方面的运营情况。医院管理部门为 2019 年设定了以下收入目标,现在希望了解每个部门的实际表现:

图 3.7:部门目标以电子表格形式存储,如下所示
患者访问和收入数据包含在Hospital Visits.csv中,收入目标则在Hospital Goals.csv中。这两个数据连接在Data Model中相关联,在Starter和Complete工作簿中都有。我们将在第十三章,理解 Tableau 数据模型、连接和混合中深入探讨数据模型。目前,只需使用Hospital Visits & Revenue数据源来完成本章中的示例。
我们将使用Chapter 3工作簿来构建子弹图,其中包含Hospital Visits和Hospital Goals电子表格数据源。我们将利用这两个数据源来可视化实际与目标服务分钟数之间的关系,按照以下步骤进行:
-
转到Average Minutes to Service (Bullet Chart)工作表。
-
创建一个按Department的总Revenue的基本条形图。
-
按Department从高到低排序。
-
按Year筛选Date of Admit,仅保留
2019年的数据。此时,你的视图应如下所示:![]()
图 3.8:创建子弹图的中间步骤
-
在Data面板中,选择
Hospital Goals.csv表中的Goal字段。 -
打开Show Me并选择子弹图。此时,Tableau 会使用视图中已有的字段以及你在数据面板中选择的
Goal字段来创建子弹图。
当你使用Show Me创建子弹图时,有时可能会发现 Tableau 使用的字段顺序与你预期的相反(错误的度量值定义了轴和条形图,另一个定义了参考线)。如果发生这种情况,只需右键单击轴并选择Swap Reference Line Fields:

图 3.9:交换参考线字段选项
完整的子弹图应该如下所示:

图 3.10:完整的子弹图
完成的子弹图使我们能够看到哪些部门达成了目标,哪些部门落后了。接下来,让我们考虑如何进一步突出显示这一点。
标出阈值
对于子弹图,视觉上标出未达到或未超过阈值的条形可能很有帮助。我们将在下一章深入探讨计算方法,但目前你可以按照以下步骤完成此示例:
-
在数据窗格中使用下拉箭头,选择创建计算字段...:
![]()
图 3.11:创建计算字段
-
使用以下代码命名计算字段
目标达成?:SUM([Revenue]) >= SUM([Goal]) -
点击确定,然后将新创建的
目标达成?字段从数据窗格拖到颜色上。
当某个部门的收入值大于目标值时,计算返回true,否则返回false。将计算字段放到颜色上后,便可以很容易地看到哪些部门已经达成了 2019 年的目标:

图 3.12:已达到目标的部门在此子弹图中以高亮显示
颜色是吸引视觉注意力的最强方法之一。使用颜色时要有意图。决定你是否想突出显示良好的表现或差的表现。
条形图中的条形图
显示每个类别中两个值之间关系的另一种可能方式是条形图中的条形图。与子弹图一样,条形图中的条形图可以显示朝向目标的进展。它还可以用来比较任意两个值。例如,你可能会将收入与目标进行比较,或者将当前年份的收入与前一年进行比较:

图 3.13:条形图中的条形图
要创建此视图,请在同一个工作簿中继续并按以下步骤操作:
-
导航到年比年收入(条形图中的条形图)工作表。
-
将收入拖放到视图中的横轴上(这与将其拖放到列架上的结果相同)。
-
将部门类型拖到行上。
-
将入院日期拖放到颜色上。我们将在下一节详细讨论日期,但你会注意到,Tableau 使用日期的年份来生成一个堆叠条形图,结果如下所示:
![]()
图 3.14:创建条形图中的条形图的中间步骤
-
对于条形图中的条形图,我们不希望标记被堆叠。要关闭堆叠,可以使用主菜单选择分析 | 堆叠标记 | 关闭。
-
现在所有条形段的起点都为
0,某些条形可能完全遮盖其他条形。为了看到每个条形,我们需要调整另一个视觉元素。在这种情况下,按住Ctrl键,同时将当前位于颜色上的入院日期的年份(YEAR(Date of Admit))字段从标记卡片拖到大小上。在将字段从一个架子移动到另一个架子时,按住Ctrl键可以创建该字段的副本。
完成前一步后,应该会出现一个大小图例。条形的大小将基于年份调整,我们将能够看到所有可用的段,即使它们重叠。
-
我们希望2019位于前面,2018位于背景中,因此请将2019拖放到大小图例中,重新排列值,使得2018排在2019之后:

图 3.15:您可以拖放图例中的项目来重新排序它们
- 双击颜色图例以编辑颜色,使2019更加突出。使用较深的橙色或蓝色来表示2019,并为2018选择浅灰色,这样效果很好(尽管您可能会找到其他您更喜欢的颜色组合!)。
此时,您的视图应该像本节开始时在图 3.13中展示的条形图那样。您可能希望通过以下方式进一步增强可视化效果:
-
为条形图添加边框。通过点击颜色货架并使用边框选项来实现。
-
调整大小范围,以减少大极值和小极值之间的差距。通过双击大小图例(或使用箭头下拉菜单并选择编辑)来完成此操作。
-
调整视图的大小。通过将鼠标悬停在画布上,直到鼠标指针变为大小调整光标,然后单击并拖动来调整视图的大小,来完成此操作。您还可能需要调整视图如何填充空间。使用工具栏上的下拉菜单并尝试不同选项:
![]()
图 3.16:此下拉菜单确定当前视图的大小
-
隐藏大小图例。您可能会决定,大小图例对于这个特定视图没有增加任何价值,因为大小只是用来显示重叠条形图。要隐藏任何图例,请使用图例上的下拉箭头并选择隐藏卡片:
![]()
图 3.17:图例的隐藏卡片选项
条形图中的条形图为您提供了另一种比较值的方式。接下来,我们将考虑一种变体,允许我们突出显示感兴趣的区域。
高亮显示感兴趣的类别
假设您在医院的主要职责之一是监控ICU和新生儿科部门的患者就诊次数。您不一定关心其他部门的细节,但您确实希望跟踪这两个部门与其他部门的比较。您可能会设计如下内容:

图 3.18:通过颜色高亮显示的两条条形图
现在,随着数据随时间刷新,您将能够立即看到您关注的两个部门与其他部门的比较。要创建此视图,请按以下步骤操作:
-
转到ICU 和新生儿科工作表。
-
将部门放置在行上,患者就诊次数放置在列上。将条形图按降序排序。
-
点击视图中ICU的条形图,同时按住Ctrl键,点击新生儿科的条形图。
-
将光标悬停在所选条形图之一上几秒钟,然后从出现的菜单中单击创建组按钮(看起来像一个图钉):
![]()
图 3.19:在 Ctrl + 单击两个条形图后,使用图钉图标将它们分组
这将创建一个组,结果是在左侧数据窗格中命名为部门(组)的新维度。Tableau 会自动将此字段分配给颜色。
Tableau 中的临时组非常强大。您可以在视图中创建组(就像之前所做的那样),也可以通过使用数据窗格中维度的菜单并选择创建 | 组来创建组。您可以像使用任何其他维度一样使用它们。
-
仅为这两个部门的条形图添加标签,右键单击每个条形图并选择标记标签 | 始终显示。标记的标签将始终显示,即使为视图关闭其他标签或标签重叠标记或其他标签。
颜色将继续使监控变得容易。标签只会显示您选择的两个部门,并会随着数据的变化而更新。
现在我们已经考虑了条形图如何用于比较值,并且已经演示了几个变体的示例,让我们将注意力转向可视化日期和时间。
可视化日期和时间
在您的分析中,您经常会想要了解某事发生的时间。您会问类似以下的问题:
-
我们何时获得了最多的新客户?
-
利润是上升还是下降的趋势?
-
一天中哪个时间段的呼叫量最高?
-
我们在销售中看到了什么样的季节性趋势?
幸运的是,Tableau 使得这种视觉发现和分析变得容易。在本节中,我们将看看 Tableau 如何处理日期以及您可能可视化时间的各种方式。
日期部分、日期值和确切日期
当您连接到平面文件、关系型或抽取数据源时,Tableau 为任何日期字段提供了强大的内置日期层次结构。
Cube/OLAP 连接不允许 Tableau 层次结构。您需要确保所有您需要的日期层次结构和日期值在立方体中定义。
要查看此操作,请继续使用第三章工作簿,导航到内置日期层次结构工作表,并通过将患者访问次数拖放到行和入院日期拖放到列来创建一个类似于所示的视图。在列上的YEAR(入院日期)字段将有一个加号指示器,如下所示:

图 3.20:表示日期层次结构中年份部分的字段
当您悬停在标题上时,还会看到加号或减号指示器,如下所示:

图 3.21:可用于展开层次结构的列标题上的加号图标
单击它后,层次结构会通过在列的YEAR(入院日期)右侧添加QUARTER(入院日期)来展开,并且视图会扩展到层次结构的新级别:

图 3.22:显示了扩展的层级,包括年份和季度。
入院日期(YEAR(Date of Admit))字段现在有一个负号指示器,允许你将层级折叠回年份级别。季度字段也有一个加号,表示你可以进一步展开层级。从年份开始,层级如下:年份 | 季度 | 月份 | 日期。当字段是日期和时间时,你还可以进一步深入到小时 | 分钟 | 秒。层级中的任何部分都可以在视图中移动或完全移除。
层级由日期部分构成,这是日期字段的三种使用方式之一。当你右键点击视图中的日期字段或使用下拉菜单时,你将看到多个日期选项,如下所示:

图 3.23:活动日期字段上的下拉菜单展示了 Tableau 中日期的各个方面。
菜单中明显显示出三种主要的日期类型,尽管没有明确标注:
-
日期部分:此字段表示日期的特定部分,如季度或月份。日期的部分单独使用,并不参考日期的其他部分。这意味着,1980 年 11 月 8 日,当作为月份日期部分使用时,视图中只是11 月。视图中选择的11 月表示数据集中所有的 11 月,而患者就诊次数则是 2018 年和 2019 年的总和:
![]()
图 3.24:此视图使用月份作为日期部分。患者就诊次数是按月份统计的总数,而不考虑年份。
-
日期值:此字段表示日期值,但会根据你选择的级别进行汇总或截断。例如,如果你选择月份作为日期值,那么 2019 年 11 月 8 日会被截断为月份和年份,变成2019 年 11 月。你会注意到,2018 年 11 月和2019 年 11 月在标题中各自有不同的值,并且有不同的条形图:
![]()
图 3.25:此视图使用月份作为日期值。患者就诊次数是按月份统计的总数,考虑了年份。
-
确切日期:此字段表示数据中的确切日期值(如果适用,包括时间)。这意味着 1980 年 11 月 8 日凌晨 2:01 与 1980 年 11 月 8 日下午 3:08 是不同的。
需要注意的是,几乎所有这些选项都可以作为离散或连续字段使用。日期部分默认是离散的。日期值和确切日期默认是连续的。然而,你可以根据需要在离散和连续之间切换,以便在可视化中提供灵活性。
例如,要创建参考线,必须有一个轴(需要一个连续字段)。此外,Tableau 只会在行或列标题的最低级别连接线条。使用连续的日期值,而不是多个离散的日期部分,可以让你跨越多个年份、季度和月份连接线条。
作为快捷方式,你可以右键点击并将日期字段拖入视图中,这样在视图绘制之前会出现一个选项菜单,供你选择日期字段如何使用。
接下来,我们来考虑一些不同的日期和时间可视化方法。
日期和时间可视化的变体
使用各种日期部分和数值,并且甚至可以将它们组合使用,给你在创建独特而有用的可视化效果时提供了极大的灵活性。
例如,使用月份日期部分作为列,使用年份日期部分作为颜色,可以创建一个时间序列,使逐年比较变得非常简单。年份日期部分已经被复制到标签中,以便为线条添加标签:

图 3.26:逐月比较两年的数据
这种视图便于进行逐年比较。
点击标记卡片上的任何架,都会弹出一个选项菜单。这里,点击了标签,并调整了标签设置,使其仅在每条线的末尾显示。
以下热力图是使用不同架上的日期部分来实现有用分析的另一个示例。这种可视化方法在观察不同时间段的模式时非常有用,比如一天中的小时,或一个月中的周数。在这里,我们看到按月份和日期划分的患者入院数量:

图 3.27:显示按天和月份划分的患者访问强度的热力图
视图中没有包括年份,因此这是对所有数据中年份的分析,并帮助我们查看是否存在任何季节性模式或热点。我们可能会注意到与流行病、医生的排班或保险福利时机相关的模式。也许二月患者入院的强度增加与流感季节相对应。
请注意,将一个连续字段放置到颜色架上,导致 Tableau 完全填充了行和列的每个交点,并且使用了编码患者访问总数的颜色阴影。点击颜色架可以为我们提供一些微调选项,包括为标记添加边框的选项。在此视图中,已添加黑色边框,以帮助区分每个单元格。
甘特图
甘特图对于理解任何有持续时间的事件序列非常有用,尤其是当这些事件之间存在某种关系时。从视觉上来看,它们对于确定某些事件是否重叠、是否有依赖关系,或者是否比其他事件花费更多或更少的时间非常有帮助。
举个例子(未包含在工作簿中),以下甘特图展示了一系列在应用程序启动时运行的过程。其中一些过程并行运行,而有些则显然依赖于其他过程。甘特图清晰地展示了这些依赖关系:

图 3.28:显示每个过程开始时间及每个过程持续时间的甘特图
甘特图使用甘特标记类型,在标记卡的下拉菜单中选择。甘特条形图的起点由行上定义轴的字段的值确定。甘特条形图的长度由大小卡上的字段确定,正值向右延伸,负值向左延伸。
在医院中,你可能希望查看每个患者 2019 年到急诊科的就诊情况,并了解每次就诊持续了多久,是否有患者回到医院,和每次就诊之间的间隔时间。以下步骤给出了如何创建这样一个甘特图的示例:
-
将科室放在筛选器上,并仅保留急诊科。
-
将入院日期放在筛选器上,选择年份作为筛选选项,并仅保留2019。
-
将入院日期放在列上,作为连续的精确日期或天值(不是日部分)。注意,Tableau 自动默认的标记类型是甘特条形图:
![]()
图 3.29:在这种情况下,甘特条形图是自动的标记类型。
-
将医生和患者姓名放在行上。结果是为每个患者按医生分组显示一行。甘特条形图代表了患者住院的情况。
在大多数情况下,我们还希望在视图中添加一个唯一标识符,例如患者 ID,以确保那些恰巧同名的患者在可视化中能被区分开来。虽然在这个数据集中没有这个必要,因为所有的姓名都是唯一的,但在处理你自己的数据时,这可能至关重要。
-
甘特条形图的长度是通过将一个持续时间字段放在大小架上来设置的。这个数据集中没有这样的字段。但是,我们有出院日期,并可以创建一个计算字段来表示持续时间。我们将在下一章详细介绍计算。现在,从菜单中选择分析,然后点击创建计算字段...。将字段命名为住院天数,并输入以下代码:
DATEDIFF('day', [Date of Admit], [Date of Discharge]) -
新创建的计算字段会出现在数据面板的度量下。将该字段拖动到大小架上。现在你有了一个甘特图,显示了患者的入院时间以及每次就诊持续的时间。
考虑对患者姓名维度进行排序。例如,按字段排序,并选择入院日期作为最小值,这样你可以看到最早入院的患者排在顶部,而后来入院的患者排在底部。排序基于患者的最早(最小)入院日期,即使患者多次入院也是如此。排序是查看甘特图中模式的一个非常有用的技巧。
你的最终视图应该类似于以下内容:

图 3.30:最终的甘特图,展示了每个患者的入院时间、住院时长以及是否曾经再入院。
这种类型的图表在观察实体随时间变化的模式和关系时非常有用。
当在日期轴上绘制时,定义甘特图条形图长度的字段需要以天为单位。如果你想要可视化以小时或秒为单位的事件持续时间,避免使用DATEDIFF的day参数,因为它计算的是整天,无法准确反映小时和秒的细节。
相反,计算小时或秒之间的差异,然后再转换回天数。以下代码计算开始日期和结束日期之间的秒数,然后除以 86,400,将结果转换为天数,包括天数的分数部分:DATEDIFF('second', [Start Date], [End Date]) / 86400。
在充分理解 Tableau 如何处理日期和时间后,我们考虑了一些不同的可视化选项。接下来我们将重点关注如何可视化部分与整体之间的关系。
将数据的部分与整体相关联
在探索和分析数据时,你通常希望了解各个部分如何加总为整体。例如,你会问以下问题:
-
每种电力生产方式(风能、太阳能、煤炭和核能)对总能源生产的贡献是多少?
-
每个州的总利润占比是多少?
-
每个文件、子目录和目录在我的硬盘上占用了多少空间?
这些问题询问的是部分(生产方式、州、文件/目录)与整体(总能源、全国销售和硬盘)之间的关系。有几种类型的可视化和变体可以帮助你进行分析。
现在我们来看一些可视化示例,帮助我们思考如何展示部分与整体之间的关系。
堆叠条形图
我们在第一章《与 Tableau 一起起飞》中看过堆叠条形图,其中提到一个显著的缺点:很难跨类别比较数值。除了最左边(或最底部)的条形图外,其他条形图段有不同的起始点,因此它们的长度更难以比较。这并不意味着堆叠条形图绝对不能使用,但应谨慎使用,以确保沟通的清晰度。
在这里,我们使用堆积条形图来可视化整体组成。我们更关心的是查看组成某一类别的各部分,而不是在类别之间进行视觉比较。
例如,在医院里,我们可能想知道每种部门类型内的患者群体情况。也许每位患者在入院时都被分配了一个风险档案。
我们可以像这样,使用堆积条形图来可视化按风险档案分类的访问数量:

图 3.31:显示每个部门患者总数以及低风险和高风险患者细分的堆积条形图
这为每种部门类型的访问情况提供了一个不错的视图。我们可以看出,更多的人访问一般科室,而且专科和实验室的高风险患者数量差不多。重症监护接诊的高风险患者较少,整体患者数量也较少。但这只是部分情况。
考虑一个堆积条形图,它没有给出绝对值,而是为每种部门类型给出百分比:

图 3.32:显示每个部门内高风险和低风险患者相对数量的堆积条形图
比较之前的两个堆积条形图。几乎 50%的重症监护患者被认为是高风险的,这一点在两个图表中都很明显。然而,第二个图表使这一点一目了然。
两个图表中的数据没有变化,但第二个图表中的条形表示每种部门类型占总数的百分比。你无法再比较绝对值,但比较每种部门类型的相对细分变得更加容易。尽管重症监护的患者较少,但其中的高风险患者比例明显较高。
让我们考虑如何在 Tableau 中创建前述图表,甚至将它们合并为一个可视化图表。我们将使用一个快速的表格计算方法。关于表格计算,我们将在第六章,《深入表格计算》一章中详细讨论。在这里,只需按照以下步骤操作:
-
通过将部门类型放到行上,患者访问数量放到列上,患者风险档案放到颜色上,来创建一个堆积条形图。现在你将得到一个单一的堆积条形图。
-
将条形图按降序排列。
-
通过按住Ctrl键并将患者访问数量字段拖动到列上,立即放置在当前字段右侧,来复制列上的患者访问数量字段。或者,你也可以从数据面板将字段拖放到列上。此时,你将有两个患者访问数量轴,从而实际上复制了堆积条形图:
![]()
图 3.33:创建堆积条形图的一个中间步骤
-
使用第二个患者访问次数字段的下拉菜单,选择快速表格计算 | 占总数的百分比。这个表格计算对数据源返回的值进行二次计算,以计算占总数的百分比。在这里,你需要进一步指定如何计算这个总数。
-
使用相同的下拉菜单,选择计算依据 | 患者风险档案。这会告诉 Tableau 根据给定科室计算每个患者风险档案的百分比。这意味着每个科室的值加起来将为 100%。
-
通过点击顶部工具栏上的T按钮来开启标签显示。这样会为每个标记打开默认的标签:
![]()
图 3.34:此工具栏选项可以切换标签的显示与隐藏
按照前面的步骤操作后,你完成的堆叠条形图应如下所示:

图 3.35:包含绝对值和相对值的最终堆叠条形图视图
在同一个视图中同时使用绝对值和百分比,可以揭示一些可能仅通过其中一种图表无法显示的重要方面和细节。
树图
树图使用一系列嵌套的矩形来显示部分与整体的关系,特别是在层级关系中。树图在你拥有具有高基数(即大量不同值)的层级和维度时特别有用。
这里是一个树图的示例,展示了患者在医院中花费的天数。最大的矩形区域显示的是科室类型。在这些区域内,是科室和患者:

图 3.36:展示科室类型/科室/医生/患者的部分与整体关系的树图
要创建树图,你只需要将一个度量放到大小货架上,将一个维度放到详细信息货架上。你可以将其他维度添加到详细信息级别,以增加视图的细节。Tableau 会添加不同厚度的边框来分隔由多个维度创建的详细信息级别。请注意,在上面的视图中,你可以轻松看到科室类型的划分,然后是科室、医生,最后是单个患者。你可以通过点击颜色货架来调整最低级别的边框。
Marks 卡片上维度的顺序定义了树图如何分组矩形。此外,你可以将维度添加到行或列中,将树图切割成多个树图。最终的结果实际上是一个树图的条形图:

图 3.37:将一个维度添加到行中,实际上已经将树图变成了一个条形图
上述树状图不仅展示了能够拥有多行(或多列)树状图的能力,还展示了将多个字段放置在 颜色 货架上的技巧。这只能使用离散字段来实现。你可以通过按住 Shift 键同时将第二个字段拖动到颜色上,从而分配两种或更多颜色。或者,你可以点击 Marks 卡片上每个字段左侧的图标或空白处,来更改该字段使用的货架:

图 3.38:点击 Marks 卡片中字段旁边的图标,可以更改使用的货架类型
树状图、结合气泡图、词云图及其他一些图表类型,通常被称为 非笛卡尔 图表类型。这意味着它们在绘制时没有 x 或 y 轴,甚至不需要行或列标题。要创建这些图表类型,可以按照以下步骤操作:
-
确保在行或列中不使用连续字段。
-
使用任何字段作为 大小 的度量。
-
根据所需的图表类型更改标记类型:树状图使用正方形,气泡图使用圆形,词云使用文本(并在 标签 上放置所需字段)。
面积图
你可以把线形图的下方区域填充起来。如果有多条线,那么就把这些填充的区域堆叠在一起。这就是你可能会想象面积图的样子。
实际上,在 Tableau 中,你可能会发现很容易创建一张线形图,就像你之前做过的那样,然后将 Marks 卡片上的标记类型更改为 面积。任何放置在 颜色、标签 或 详细信息 货架上的维度都会创建堆叠在一起的面积块。大小 货架不适用于面积图。
作为示例,考虑以下按医院分支区分的患者就诊情况随时间变化的可视化:

图 3.39:按医院分支区分的患者就诊情况随时间变化的面积图
每一条带状区域代表不同的医院分支位置。在许多方面,这种视图是美观的,并且确实突出了数据中的一些模式。然而,它也存在与堆叠条形图相同的缺点。只有底部的带状区域(南区)可以通过轴上的数值进行读取。
其他带状区域被堆叠在上面,比较变得非常困难。例如,每年二月左右明显出现一个峰值。但这个峰值出现在每个分支吗?还是下方的某一带区域将上方的区域推高了?哪个带状区域的峰值最显著?
现在,考虑以下视图:

图 3.40:一个显示百分比而非绝对值的面积图
该视图使用了快速表计算,类似于堆叠条形图的例子。与第一个图表不同,现在无法看到尖峰。然而,显而易见的是,2019 年 2 月左右,东部分支(中间带状区域)看到的患者百分比急剧增加,并且该分支持续到年底仍然看到了大量患者。
通过选择不同的图表类型,理解数据故事中强调(或隐藏)的方面非常重要。你甚至可以在Chapter 3工作簿中实验,将第一个区域图更改为折线图。你可能会注意到,折线图能展示出尖峰,并能清晰地看到每个分支的患者访问数量的绝对增加与减少。每种图表类型都为数据故事贡献了某种特定的视角。
你可以通过更改Marks卡片上维度的排序顺序来定义区域堆叠的顺序。此外,你还可以通过在Color Legend中拖拽和放置它们,进一步调整顺序。
饼图
饼图还可以用来显示部分与整体的关系。要在 Tableau 中创建饼图,请将标记类型更改为饼图。这将为你提供一个角度货架,你可以用来编码度量。你放置在Marks卡片上的任何维度(通常是在Color货架上)都会定义饼图的切片:

图 3.41:展示按分支划分的总收入的饼图
请注意,前面的饼图使用收入的总和来定义每个切片的角度;总和越高,切片越宽。医院分支维度在切分度量并定义饼图的切片。这个视图还展示了将多个字段放置在Label货架上的功能。第二个SUM(Revenue)字段是你之前看到的总表计算的百分比。这使你可以看到收入的绝对值,以及它在整体中的百分比。
饼图在切片较少时表现较好。在大多数情况下,切片超过两到三个后就变得难以观察和理解。此外,作为一种良好的实践,按定义切片的维度进行排序。在前面的示例中,医院分支维度是通过按收入的SUM降序排序来设置的。此操作通过下拉菜单选项完成。这会导致切片按从大到小的顺序排列,使任何查看图表的人都能轻松地看到哪些切片较大,即使它们的大小和角度几乎相同。
在掌握了可视化部分与整体关系的一些技巧后,我们继续讨论如何可视化分布情况。
可视化分布
通常,单纯理解总数、和、甚至部分与整体的拆分只能提供整体情况的一部分。大多数时候,你会想要了解单个项目在所有相似项目的分布中的位置。
你可能会问以下问题:
-
每个顾客在我们的商店消费多少,这与其他顾客相比如何?
-
我们大多数病人住院多久?哪些病人超过了正常范围?
-
机器中的部件的平均寿命是多少?哪些部件的寿命超过平均值?是否有任何部件的寿命极长或极短?
-
学生的测试成绩是高于还是低于及格线?
这些问题有共同之处。在每种情况下,你都希望了解个体(顾客、病人、部件、学生)与群体的关系。在每种情况下,你可能有相对较多的个体。从数据角度看,你有一个维度(顾客、病人、部件、学生),代表着一个相对较大的人群,并且有一些度量(消费金额、住院时长、寿命、考试成绩)你希望进行比较。使用以下一种或多种可视化方式可能是一个不错的选择。
圆形图
圆形图是可视化分布的一种方式。考虑以下视图,它展示了每位医生在相同科室类型中,患者住院平均天数的比较:

图 3.42:显示每个科室类型中每位医生平均住院时间的圆形图
在这里,你可以看到哪些医生的病人平均住院时间更长或更短。还值得注意的是,某些类型的科室相比其他科室有更长的平均住院时间。这是有道理的,因为不同类型的科室有不同需求的病人。可能不令人惊讶的是,重症监护病人的住院时间通常较长。某些科室可能有不同的目标或要求。能够在同一类型的科室内评估医生,使得比较变得更加有意义。
要创建上述圆形图,你需要将字段放置在显示的货架上,然后只需将标记类型从自动(即条形图)更改为圆形。科室类型定义行,而每个圆形都绘制在医生级别上,后者位于标记卡片的细节级别。最后,若要添加平均线,只需切换到左侧窗格的分析标签并将平均线拖到视图中,特别是将其放在单元格选项上:

图 3.43:你可以通过从“分析”标签拖动到视图中,添加参考线及更多内容
你也可以点击结果中的某条平均线,并选择编辑以找到微调选项,例如标签。
抖动
当使用类似圆形图或其他类似类型的可视化时,你通常会看到标记重叠,这可能会导致部分真实情况被掩盖。你是否能仅凭眼力,确定重症监护中的医生中,哪些是高于平均水平的?哪些是低于平均水平的?或者是否可能有两个或更多的圆形完全重叠?一种减少这种情况的方法是点击颜色货架,为每个圆形添加一些透明度和边框。另一种方法是使用一种叫做抖动的技术。
抖动是数据可视化中一种常见的技术,它通过向可视化中添加一些故意的噪声来避免重叠,而不破坏所传达信息的完整性。Alan Eldridge 和 Steve Wexler 是 Tableau 中抖动技术的先驱之一。
各种抖动技术,如使用Index()或Random()函数,可以通过在 Tableau 论坛上搜索抖动,或者使用搜索引擎搜索Tableau 抖动找到。
这里使用了一种方法,通过Index()函数进行计算,并在Doctor字段上作为一个连续字段添加到行上。由于INDEX()是连续的(绿色),它定义了一个轴并使圆形标记垂直展开。现在,你可以更清楚地看到每个单独的标记,并更有信心认为重叠并未掩盖数据的真实图像:

图 3.44:这里 INDEX()已作为连续字段添加到行(表计算是沿着 Doctor 字段计算的)
在前面的视图中,由Index字段创建的垂直轴被隐藏。你可以通过使用定义该轴或标题的字段的下拉菜单并取消勾选显示标题来隐藏一个轴或标题。或者,你也可以右键单击视图中的任何轴或标题,选择相同的选项。
你可以在许多涉及绘制可能重叠的固定点的可视化中使用抖动技术,例如点图和散点图。接下来,我们将介绍另一种有用的分布可视化技术:箱型图和须状图。
箱型图和须状图
箱型图和须状图(有时简称为箱型图)为分布提供了额外的统计学背景。要理解箱型图和须状图,请参考以下图示:

图 3.45:箱型图和须状图的解释
这里,箱型图已被添加到圆形图中。箱子通过中位数被分割,这意味着一半的值位于中位数之上,另一半位于中位数之下。箱子还表示下四分位数和上四分位数,每个包含四分之一的值。箱子的跨度构成了四分位距(IQR)。须状线延伸至 1.5 倍的 IQR 值(或数据的最大范围)。任何超出须状线的标记都被视为离群值。
要添加箱线图,请使用左侧边栏的分析标签,将箱线图拖动到视图中。将其应用于我们在图 3.42中考虑的圆形图表,会得到以下图表:

图 3.46:应用于先前圆形图表的箱线图
箱线图帮助我们查看并比较中位数、数据范围、值的集中度以及任何异常值。你可以通过点击或右键单击箱线图的箱体或须,选择编辑来编辑箱线图。这将显示多个选项,包括如何绘制须线、是否仅显示异常值以及其他格式化选项。
直方图
显示分布的另一种方法是使用直方图。直方图看起来类似于条形图,但条形显示的是某个值的发生次数。例如,标准化测试的审计员在寻找成绩篡改的证据时,可能会构建一个学生考试成绩的直方图。通常,分布可能如下所示(未包含在工作簿中):

图 3.47:考试成绩的直方图
测试成绩显示在x轴上,每个条形的高度表示获得该分数的学生人数。典型的分布通常具有可识别的钟形曲线。在这种情况下,一些学生表现不佳,而另一些学生表现非常好,但大多数学生的成绩在中间。
如果审计员看到像这样的结果,怎么办?

图 3.48:一个没有典型钟形曲线的直方图,提出了一些问题
显然有些问题。也许评分员将一些成绩接近及格的学生的分数提高到了刚刚及格的水平。也有可能这反映了主观评分中的偏差,而非明显的篡改。我们不应该急于下结论,但这种模式不正常,值得进一步调查。直方图在发现此类异常情况时非常有用。
现在我们已经看到了直方图的一个例子,让我们把注意力转回到医院数据,并进行一个例子操作。如果你想要可视化开始病人治疗所需的时间,以便观察不同患者群体的模式,你可以从空白视图开始,并按照以下步骤进行:
-
点击选择数据面板中度量下的服务分钟数字段。
-
如有需要,展开Show Me并选择直方图。
选择直方图后,Tableau 通过创建一个新的维度服务分钟数(分箱)来构建图表,该维度用于视图中,并与服务分钟数的COUNT一起呈现视图:

图 3.49:显示按服务分钟数分布的患者的直方图
箱子是度量值的范围,可以作为维度来切片数据。你可以将箱子看作是桶。例如,你可能会按 0-5%、5-10% 等查看考试成绩,或者按 0-10、10-20 等查看人们的年龄。你可以在创建时设置箱子的大小或范围,并在任何时候进行编辑。Tableau 还会基于一个算法,查看数据中存在的值,自动建议箱子的大小。Tableau 会为所有箱子使用统一的大小。
对于此视图,Tableau 自动将箱子的大小设置为 3.47 分钟,这个大小并不直观。你可以通过右键点击或使用数据面板中 服务等待分钟数(箱子) 字段的下拉菜单,选择 编辑,来尝试不同的值。结果窗口会提供一些信息,并允许你调整箱子的大小:

图 3.50:编辑数据箱的选项
这里举个例子,这是同一个直方图,每个箱子的大小为 2 分钟:

图 3.51:箱子大小为 2 的直方图
你可以看到曲线,其峰值出现在略低于 20 分钟处,然后逐渐下降,少数患者的等待时间长达 40 分钟。你可能会进行进一步的分析,例如查看基于患者风险档案,等待时间在大多数患者中的变化情况,如下图所示:

图 3.52:患者风险档案生成两行直方图,显示大多数高风险患者得到更快的护理(正如我们所期望的那样)
你可以通过右键点击一个数字字段并选择 创建 | 箱子 来创建新的箱子。你也可以通过选择箱子字段的 编辑 选项来编辑箱子的大小。
你还需要考虑想要为每个箱子计数什么,并将其放在 行 上。当你使用 Show Me 时,Tableau 将 服务等待分钟数 的 COUNT 放在了 行 上,这仅是对每个值不为空的记录进行计数。在这种情况下,这等同于对患者访问次数的计数,因为数据集中每条记录对应一次访问。然而,如果你想要计算唯一患者的数量,你可能考虑用 COUNTD([患者 ID]) 替换视图中的字段。
就像日期一样,当视图中的箱子字段为离散时,下拉菜单中会有一个 显示缺失值 的选项。如果你使用离散的箱子字段,你可能希望使用此选项,以避免扭曲可视化并识别哪些值在数据中未出现。
我们已经看到了如何使用圆形图、直方图和箱型图来可视化分布。现在让我们将注意力转向使用多个轴来比较不同的度量。
可视化多个轴以比较不同的度量
通常,你需要使用多个轴来比较不同的度量,了解相关性,或在不同的细节级别上分析相同的度量。在这些情况下,你将使用具有多个轴的可视化。
散点图
散点图是理解两个度量之间关系的基本可视化类型。当你有以下类似问题时,可以考虑使用散点图:
-
我在营销上花费多少,真的对销售有影响吗?
-
每度加热/制冷会导致多少电力消耗的增加?
-
学习时间与考试成绩之间有相关性吗?
这些问题旨在理解两个度量之间的相关性(如果有的话)。散点图帮助你理解这些关系,并识别任何异常值。
考虑以下散点图,它用于寻找部门总收入与患者就诊次数之间的关系:

图 3.53:显示收入与患者就诊次数之间相关性的散点图
部门维度位于文本上,并定义了视图的详细级别。视图中的每个标记代表该部门的总收入和总患者就诊次数。
正如你所预期的,大多数部门在患者数量较多时收入较高。神经科和心脏科尽管患者量较少,但收入较高,表现突出。
寻找利用大小和颜色在散点图中编码附加数据的方法。例如,我们可以将部门类型添加到颜色中,看看相同类型的部门是否显示出相似的相关性。我们还可以将大小编码为平均住院天数,看看较高的收入是否也可以通过住院时间较长的患者来解释。
让我们考虑其他几种使用多个坐标轴的图表类型。
双轴图和组合图
Tableau 中的一个非常重要的功能是使用双轴的能力。散点图使用两个坐标轴,分别是X轴和Y轴。你还会在堆叠条形图示例中观察到,当多个连续的(绿色)字段彼此相邻放置在行或列上时,会出现多个并排的坐标轴。而双轴则意味着视图使用两个相对的坐标轴,共享一个面板。
这是一个使用销售和利润的双轴示例(不包含在工作簿中):

图 3.54:一个双轴图表,指示哪个字段定义了哪个坐标轴
视图有几个关键特征,具体如下:
-
销售和利润字段位于行,表示它们通过共享一个平坦的侧面具有双轴。
-
销售和利润定义的轴位于视图的对立面。同时,请注意,它们并未同步,这在许多情况下可能会导致数据的扭曲展示。如果利润如此接近总销售额,那该有多好!但事实并非如此。要同步轴,请右键点击右侧轴并选择同步轴。如果该选项为灰色,可能是因为其中一个值是整数类型,另一个是小数类型。你可以通过右键点击数据窗格中的字段并选择更改数据类型 | 数字(整数) 或 数字(小数) 来更改其中一个字段的数据类型。
-
标记卡片现在是一个类似手风琴的控制界面,包含所有部分,以及销售和利润部分。你可以使用它来定制所有度量的标记,或专门定制销售或利润的标记。
要创建双轴,拖动并将两个连续(绿色)字段放置在行或列架旁边,然后使用第二个字段上的下拉菜单,选择双轴。或者,你也可以将第二个字段拖放到画布上,放置在现有轴的对面。
双轴可以与任何定义轴的连续字段一起使用。这包括数字字段、日期字段以及定义地理可视化的纬度或经度字段。对于纬度或经度,只需复制其中一个字段,并将其紧挨着自己放在行或列架上。然后,使用下拉菜单选择双轴。
组合图扩展了双轴的使用,叠加了不同的标记类型。这是可能的,因为标记卡片会提供编辑所有标记的选项,或为每个单独的轴定制标记。
当两个或更多连续字段并排放置在行或列架上时,可以使用多种标记类型。
作为组合图的一个例子,考虑以下可视化:

图 3.55:一种组合图,显示每个分支的就诊数为折线图,所有就诊数为柱状图。
这张图表结合了柱状图和折线图,展示了随时间变化的患者就诊总数(柱状图)以及按医院分支划分的患者就诊数(折线图)。这种可视化方式在提供额外上下文信息时非常有效。
关于该视图,有几个要点需要注意:
-
颜色架上的字段列出为多个字段,并且在标记卡片上为灰色。这表示在每个标记轴上,颜色使用了不同的字段。
-
该视图展示了在同一视图中混合不同细节层次的能力。柱状图是以最高级别绘制的(每月的患者就诊数),而折线图则以较低的级别绘制(每个分支的每月患者就诊数)。
-
该视图展示了在同一维度上多次使用相同字段(患者访问,在本例中)的方法(在此示例中,使用的是行)。
-
第二个坐标轴(右侧的患者访问字段)隐藏了标题,以去除视图中的冗余信息。你可以通过取消勾选视图中字段的显示标题选项,或右键点击你希望隐藏的坐标轴或标题来完成此操作。
双轴和组合图表为混合标记类型和细节层次提供了广泛的可能性,非常有助于生成独特的洞察力。在本书的其余部分中,我们将看到更多这些图表的示例。务必尝试这一功能,释放你的想象力,探索它能实现的所有可能性。
总结
在本章中我们已经涵盖了很多内容!你现在应该能够很好地理解何时使用某些类型的可视化。你提出的数据问题通常会引导你选择某种类型的视图。你已经探索了如何创建这些不同类型的视图,并学会了如何通过多种高级技术扩展基本的可视化方式,例如计算字段、抖动、多个标记类型和双轴。与此同时,我们还介绍了在 Tableau 中日期的相关细节。
希望本章中使用计算字段的示例能激发你进一步学习如何创建计算字段的兴趣。在 Tableau 中创建计算字段的能力为扩展数据分析、计算结果、定制可视化和创建丰富的用户交互性开辟了无限可能。接下来的两章,我们将深入探讨计算字段的使用,了解它们的工作原理以及它们能做出哪些令人惊叹的事情。
第四章:从计算和参数开始一次冒险
我们已经看到,通过简单地连接数据并拖放字段,在 Tableau 中可以进行令人惊叹的发现、分析和数据故事讲述。现在,我们将开始一次计算的冒险之旅。
计算极大地扩展了 Tableau 中分析、设计和交互性的可能性。在本章中,我们将看到计算如何在各种方式中得到应用。我们将看到计算如何用来解决数据中的常见问题,如何通过添加新的维度和度量来扩展数据,以及如何在交互性方面提供更多灵活性。
同时,虽然计算提供了难以置信的力量和灵活性,但它们也带来了复杂性和精细度。在你阅读本章时,尽量理解 Tableau 中计算工作原理背后的关键概念。像往常一样,跟随示例操作,但也可以自由探索和实验。目标不仅仅是得到一份可以复制的计算列表,而是理解如何利用计算来解决问题,并为你的可视化和仪表板添加创意功能。
本章的前半部分重点是打下基础,而后半部分则提供了相当多的实用示例。我们将在这里学习的主题如下:
-
四种主要计算类型概述
-
创建和编辑计算
-
行级计算示例
-
聚合计算示例
-
参数
-
实用示例
-
性能考虑
我们将从介绍 Tableau 中计算的类型开始,然后深入一些示例。
计算介绍
计算通常在 Tableau 中被称为计算字段,因为在大多数情况下,当你创建一个计算时,它会显示为数据面板中的新度量或维度。计算由包含函数、操作以及对其他字段、参数、常量、分组或集合的引用的代码组成。这个代码会返回一个值。有时,这个结果是按数据行级别计算的,有时则是在聚合级别上完成。接下来,我们将讨论 Tableau 的主要计算类型之间的区别。
四种主要计算类型
理解 Tableau 中计算的最基本方式是将其分为四种主要类型:
-
行级计算:这些计算是针对每一行底层数据执行的。
-
聚合计算:这些计算是在聚合级别上执行的,聚合级别通常由视图中使用的维度定义。
-
细节级别计算:这些特殊的计算是按指定的细节级别进行的聚合,结果可在行级别上获得。
-
表计算:这些计算是在由数据源返回到 Tableau 的聚合数据表上执行的。
理解并识别四种主要的计算类型将使你能够充分利用 Tableau 中计算的强大功能和潜力。
在本章中,我们将详细了解 Tableau 中四种主要计算类型中的两种:行级计算和聚合计算。剩下的两种类型将在第五章,利用细节级别计算,以及第六章,深入探讨表格计算中讨论。
在思考如何使用计算解决问题时,始终考虑你可能需要的计算类型。在本章及接下来的两章中,会有一些提示帮助你思考为什么使用某种类型的计算。
现在我们已经了解了 Tableau 中主要的计算类型,接下来我们将看到如何创建和编辑这些计算。
创建和编辑计算
在 Tableau 中创建计算字段有多种方法:
-
从菜单中选择分析 | 创建计算字段...。
-
使用数据面板中维度旁边的下拉菜单:
![]()
图 4.1:创建计算字段… 选项
-
右键单击数据面板中的空白区域,选择创建计算字段...。
-
使用数据面板中的字段、集合或参数的下拉菜单,选择创建 | 计算字段...。计算将以你选择的字段为参考开始。
-
双击行、列或度量值架上的空白区域,或在标记卡上的空白区域创建临时计算(尽管这不会显示完整的计算编辑器)。
-
当你创建计算字段时,它将成为当前选中的数据源的一部分。你可以通过使用下拉菜单选择编辑...来编辑数据面板中现有的计算字段。
创建和编辑计算的界面如下所示:

图 4.2:创建和编辑计算界面
此窗口有几个关键特性:
-
计算字段名称:在此处输入计算字段的名称。创建后,计算字段将作为数据面板中的一个字段显示,字段名称为你在此文本框中输入的名称。
-
代码编辑器:在此文本区域输入代码以执行计算。编辑器包括自动完成已识别的字段和函数功能。此外,你可以将字段和文本片段拖放到代码编辑器和数据面板之间。
-
编辑器底部的指示器将提醒你代码中的错误。此外,如果计算被用于视图或其他计算字段,你将看到一个下拉指示器,允许你查看依赖关系。点击应用按钮以将更改应用到整个工作簿,同时保持计算编辑器打开。确定按钮将保存代码更改并关闭编辑器。如果你希望放弃所做的更改,点击右上角的X按钮取消更改。
-
函数列表包含了你在代码中可以使用的所有函数。许多函数将在本章的示例中使用或讨论。Tableau 按照函数的总体用途将其分组:
-
数字:数学函数,例如四舍五入、绝对值、三角函数、平方根和指数。
-
字符串:用于字符串操作的函数,例如获取子字符串、在字符串中查找匹配项、替换字符串中的部分内容,以及将字符串值转换为大写或小写。
-
日期:用于处理日期的函数,例如查找两个日期之间的差异、向日期添加间隔、获取当前日期以及将非标准格式的字符串转换为日期。
-
类型转换:用于将字段从一种类型转换为另一种类型的函数,例如将字符串转换为整数,将整数转换为浮动小数,或将字符串转换为日期。我们将在下一部分介绍主要的 Tableau 数据类型。
-
逻辑:决策函数,例如
ifthenelse逻辑或case语句。 -
聚合:用于聚合的函数,例如求和、获取最小值或最大值,或计算标准差或方差。
-
透传(仅在与某些数据库(如 SQL Server)建立实时连接时可用):这些函数允许你将原始 SQL 代码传递给底层数据库,并以行级或聚合级别检索返回的值。
-
用户:用于获取用户名并检查当前用户是否为某个组成员的函数。这些函数通常与逻辑函数结合使用,用于定制用户体验或在发布到 Tableau Server 或 Tableau Online 时实施基于用户的安全性。
-
表计算:这些函数与其他函数不同,它们在从数据源返回聚合数据并渲染视图之前进行操作,操作的是返回后的数据。
-
空间:这些函数允许你使用空间数据进行计算。
-
-
在列表中选择一个函数或点击字段、参数或代码中的函数时,右侧会显示关于选择的详细信息。这在你需要嵌套其他计算字段、查看特定计算字段的代码,或者想理解某个函数的语法时非常有用。
在对界面有较好理解的基础上,接下来我们简要看一下计算的基础概念。
数据类型
计算概念的基础是数据类型,它们描述了字段、参数存储的或函数返回的数据信息类型。Tableau 区分了六种数据类型:
-
数字(小数):这些是包含小数点后位数的数值。例如
0.02、100.377或3.14159都是小数值。 -
数字(整数):这些是没有小数部分的整数或整数值。例如
5、157和1,455,982都是整数。 -
日期和时间:这些是带有时间的日期。例如
1980 年 11 月 8 日 12:04:33 PM是日期和时间类型。 -
日期:这些是没有时间的日期。例如
1979 年 7 月 17 日是日期类型。 -
字符串:这些是字符的序列。字符串可以由字母字符、数字字符、符号或特殊字符组成,甚至可以是空的(空字符串)。例如
Hello World、password123和%$@*!都是字符串。在代码中,字符串将被单引号或双引号包围。 -
布尔值:这是一个真假值。
TRUE、FALSE以及表达式1=1(结果为真)和1=2(结果为假)都属于布尔类型。 -
空间:描述位置、线条或形状与空间区域相关的复杂值。
Tableau 中的每个字段都有这些数据类型之一,Tableau 中的每个函数都会返回这些数据类型之一。有些函数需要输入匹配某些数据类型,如果你尝试传入错误的类型,会收到错误提示。
一些类型可以转换为其他类型。例如,使用上面提到的一些类型转换函数,你可以将字符串"2.81"转换为小数值2.81。你也可以将这个小数值转换为整数,但在这种情况下,你会丢失小数点后面的位数,转换后的整数会变成2。
数据类型不同于显示的格式。例如,你可以选择将小数格式化为百分比(例如,0.2可以显示为20%)、货币格式(例如,144.56可以格式化为$144.56),甚至可以格式化为没有小数的数字(例如,2.81会被四舍五入为3)。
在我们继续之前,请注意字段和函数的数据类型。
额外的函数和运算符
Tableau 支持众多函数和操作符。除了计算屏幕上列出的函数外,Tableau 还支持以下操作符、关键字和语法约定:
| 操作符 / 关键字 | 描述 |
|---|---|
| AND | 逻辑与,用于判断两个布尔值(true/false)或语句之间的关系 |
| OR | 逻辑或,用于判断两个布尔值或语句之间的关系 |
| NOT | 逻辑非,用于否定布尔值或语句 |
| = 或 == | 逻辑等于,用于测试两个语句或值的相等性(在 Tableau 的语法中,单等号或双等号等效) |
| + | 数值或日期值的加法,或字符串的连接 |
| - | 数值或日期值的减法 |
| * | 数值的乘法 |
| / | 数值除法 |
| ^ | 对数值进行幂运算 |
| ( ) | 用括号定义运算顺序或括起函数参数 |
| [ ] | 方括号用于括起字段名称 |
| 大括号用于括起详细程度计算 | |
| // | 双斜杠表示开始注释 |
在进行计算时,单词形式的字段名称可以选择性地用括号括起来。包含空格、特殊字符或来自二级数据源的字段名称必须用括号括起来。
你将在接下来的几章中看到这些操作符和函数,因此要熟悉它们的用法。现在,让我们考虑将引导我们完成一些实际示例的数据。
示例数据
在开始一些示例之前,让我们考虑一个示例数据集,该数据集将在本章的示例中使用。它简单且小巧,意味着我们可以轻松看到计算是如何进行的。
该数据集作为 Vacation Rentals.csv 包含在本书资源的 \Learning Tableau\Chapter 04 目录中,并且也作为名为 Vacation Rentals 的数据源包含在 Chapter 4 工作簿中:
| 出租物业 | 名字 | 姓氏 | 开始日期 | 结束日期 | 折扣 | 租金 | 每晚税费 |
|---|---|---|---|---|---|---|---|
| 112-阿斯伯里环礁 | 玛丽 | 斯莱索尔 | 12 月 2 日 | 12 月 9 日 | 150 | 1,500 | 15 |
| 112-阿斯伯里环礁 | 艾米 | 卡迈克尔 | 12 月 9 日 | 12 月 15 日 | 0 | 1,500 | 15 |
| 155-海滩微风 | 查尔斯 | 瑞里 | 12 月 2 日 | 12 月 9 日 | 260 | 1,300 | 10 |
| 155-海滩微风 | 德怀特 | 彭特科斯特 | 12 月 16 日 | 12 月 23 日 | 280 | 1,400 | 10 |
| 207-海滩微风 | 路易斯 | 查弗 | 12 月 9 日 | 12 月 23 日 | 280 | 2,800 | 10 |
| 207-海滩微风 | 约翰 | 瓦尔沃德 | 12 月 2 日 | 12 月 9 日 | 60 | 1,500 | 10 |
该数据集描述了几处度假租赁物业、租客、租赁期的开始和结束日期、折扣、租金和每晚税费。我们将在本章的后续部分中使用它,展示一些计算的示例。让我们从行级计算开始。
行级计算
在本节中,我们将通过几个行级计算示例。你可以在Complete工作簿中找到完成的计算,但你可能更喜欢从Starter工作簿开始。我们不一定会为每个示例创建可视化,但在完成这些示例时,可以尝试自己构建一些可视化。
简单示例
我们将从一个非常简单的示例开始,然后逐步增加复杂性。在第四章工作簿中,创建一个名为全名的新计算字段,代码如下:
[First] + " " + [Last]
这段代码将First和Last字符串连接,中间用一个空格。你的计算编辑器应该看起来像下面这样:

图 4.3:在编辑器中创建全名计算
点击确定后,你应该会注意到数据面板中出现一个新的全名字段。该字段的值是按数据行计算的。也就是说,每行数据包含租户的全名。
更复杂的示例
请注意,租赁物业字段包含诸如112-Asbury Atoll或207-Beach Breeze之类的值。假设假期租赁数据中的租赁单元命名规范为通过破折号分隔房间编号和建筑物名称。例如,名为207-Beach Breeze的单元是 Beach Breeze 建筑的 207 号房间。
用以下代码命名第一个房间:
SPLIT([Rental Property], "-", 1)
然后,创建另一个名为建筑物的计算字段,代码如下:
SPLIT([Rental Property], "-", 2)
这两个函数都使用了Split()函数,它将一个字符串拆分成多个值并保留其中一个值。该函数需要三个参数:字符串、分隔符(一个字符或一组字符,用于分隔值),以及标记编号(拆分后要保留的值,即第一个、第二个、第三个,以此类推)。使用-(破折号)作为分隔符,房间是第一个值,建筑物是第二个值。
使用这两个计算字段,创建一个每栋楼及每个房间的租金柱状图,如下所示:

图 4.4:使用你的计算字段构建视图
建筑物和房间字段在数据面板中显示为维度。计算出的维度可以像其他任何维度一样使用。它们可以切片数据,定义详细级别,并对度量值进行分组。
行级计算在行级别计算,但你可以选择对结果进行聚合。例如,你可以聚合结果,找到最高的房间编号(MAX),或者统计不同的建筑物数量(COUNTD)。事实上,如果行级计算的结果是数字类型,Tableau 通常会默认将结果字段作为度量值。但正如我们所看到的,你可以将行级字段作为维度或度量值在视图中使用。
注意,Tableau 在数据面板中为字段图标添加了一个小等号,表示它们是计算字段:

图 4.5:小等号(=)表示该字段是一个计算字段
两个计算字段的代码会对每一行数据执行,并返回行级别的值。我们可以通过检查源数据来验证代码是否按行级别操作。只需点击维度旁边的查看数据图标,就可以看到行级别的详细信息(它位于前面截图中的放大镜图标旁边)。在这里,可以清楚地看到建筑和单元的新字段及其行级别的值:

图 4.6:查看底层数据,显示计算是按数据行进行的
Tableau 提供了拆分字段的快捷方式。您可以在数据窗格中的字段上使用下拉菜单,选择转换 | 拆分或转换 | 自定义拆分(如果您有非标准分隔符)。结果是类似于您之前创建的计算字段,但在确定数据类型时加入了一些额外的逻辑。转换功能,如拆分,也可用于数据源屏幕上的预览或元数据视图中的字段。
扩展示例
我们将进一步扩展这个例子,并假设您知道房间的楼层由其编号表示。房间号 100 到 199 在第一层,200 到 299 在第二层。您希望将这些信息用于分析。
我们有可能将此属性添加到源数据中,但有时这可能不是一个选项,或者不可行。您可能没有权限更改源数据,或者源数据可能是每天自动生成的电子表格,任何更改都会被覆盖。
相反,您可以在 Tableau 中创建一个行级别的计算来扩展数据。为此,创建一个名为 Floor 的计算字段,使用以下代码:
IF LEFT([Room], 1) = "1"
THEN "First Floor"
ELSEIF LEFT([Room], 1) = "2"
THEN "Second Floor"
END
这段代码使用了 LEFT() 函数来返回房间号的最左侧字符。因此,112 返回的结果是 1;207 返回的结果是 2。IF THEN END 逻辑允许我们根据哪个情况为真来分配结果(第一层 或 第二层)。请注意,您在计算中使用了 Room 字段,而该字段本身是另一个计算字段。
在另一个计算中引用已计算字段,称为嵌套。使用其他已计算字段的计算被称为嵌套计算。理论上,您可以使用任意多级的嵌套,但如果使用过多的嵌套层级,可能会让逻辑变得难以理清。
为数据变动做好规划
在编写计算时,请考虑您的计算是否涵盖了当前数据中未出现的变动。
在 Tableau 中编写计算时,您可以问自己一些很好的问题:如果数据发生变化,会发生什么? 该计算能处理意外或无效的值吗? 我考虑到了所有的情况吗?
例如,前面的楼层计算只适用于所有房间都是 100 级或 200 级房间的情况。如果存在一个位于三楼的房间 306,或者一个位于八楼的房间 822,该怎么办?
为了考虑更多情况,我们可以将计算简化为以下内容:
LEFT([Room], 1)
这段代码仅返回房间号的最左侧字符。对于306,我们得到3;对于822,我们得到8。但是,如果房间号为十楼的 1056,或者十六楼的 1617 呢?我们需要考虑其他选项,例如:
MID([Room], 0, LEN([Room]) - 2)
尽管这更为复杂,字符串函数会返回一个子字符串,该子字符串从字符串的开头开始,并在倒数第二个字符之前结束。这将为1025返回10,为1856返回18。
我们现在已经考虑了一些行级计算的例子。接下来,让我们讨论 Tableau 中的另一个主要计算类型:汇总级别计算。
汇总计算
我们已经在 Tableau 中考虑了如sum、min和max等聚合方法。通常,你会将字段作为简单的聚合添加到视图中。但有时,你需要在更复杂的计算中使用聚合方法。
例如,你可能会好奇探索租金折扣的百分比。在数据中没有这样一个字段。因为该值会根据视图中的详细程度变化(例如,单个单元的折扣百分比会与每层楼或每栋建筑的折扣百分比不同),所以它不能真正存储在源数据中。相反,它必须作为汇总计算,并随着详细程度的变化而重新计算。
让我们创建一个名为Discount %的计算,并使用以下代码:
SUM([Discount]) / SUM([Rent])
这段代码表示Discount的总和应该除以Rent的总和。这意味着所有的Discount值将被加总,所有的Rent值也将被加总。只有在计算完总和后,才会进行除法运算。
一旦你创建了计算,你会注意到 Tableau 在数据窗格中将新字段视为度量值。默认情况下,Tableau 会将任何具有数字结果的计算视为度量值,但如果需要,你也可以将行级计算转换为维度。不过,在这种情况下,你甚至无法将新字段重新定义为维度。原因是 Tableau 会将每个汇总计算视为度量值,无论返回的数据类型是什么。这是因为汇总计算依赖于维度来定义执行计算时的详细级别。因此,汇总计算本身不能是维度。
由于你的计算值是百分比,你可能还希望将格式定义为百分比。为此,右键单击Discount %字段,选择默认属性 | 数字格式,然后选择百分比。如果需要,你可以调整显示的小数位数。
现在,创建几个视图,看看计算如何根据视图的细节层级返回不同的结果。首先,我们将创建一个视图来查看每个单独的租赁周期:
-
将建筑、房间、全名、开始和结束放置在行上。
-
在数据窗格中,在度量值下,双击以下每个字段:租金、折扣和折扣百分比。Tableau 会使用度量名称和度量值将这些度量值放入视图中。
-
调整度量值架上的字段顺序,使其顺序为租金、折扣和折扣百分比:
![]()
图 4.7:展示了在建筑、房间、全名、开始和结束层级上计算的折扣百分比
你可以看到每个租赁周期的折扣百分比。然而,注意当你删除所有字段,只保留建筑和房间时,值会发生变化:

图 4.8:展示了在建筑和房间层级上计算的折扣百分比
为什么值会发生变化?因为聚合依赖于定义视图细节层级的维度。在第一个案例中,建筑和房间、全名、开始和结束定义了视图的细节层级。因此,计算将每个租赁周期的租金总和与每个租赁周期的折扣总和相加,然后进行除法运算。在第二个案例中,建筑和房间重新定义了细节层级。因此,计算将每个建筑和房间的所有价格以及每个建筑和房间的所有折扣加起来,然后进行除法运算。
你可能已经注意到,当你双击每个度量时,它以特殊的方式添加到视图窗格中。度量名称和度量值是每个数据连接中都会出现的特殊字段(位于数据窗格的底部)。它们作为占位符,用于在视图中共享相同空间的多个度量值。
在你刚创建的视图中,例如,三个度量值都共享视图窗格的空间。度量值在文本上显示,表示在度量值架上所有度量值的值都应作为文本显示。度量名称字段在列上为每个度量创建了一列,每列的值为该度量的名称。
注意,如果你查看整个数据集而不按任何维度切片,值会再次发生变化,正如预期的那样:

图 4.9:展示了在最高可能层级(整个数据集)上计算的折扣百分比
要让 Tableau 实现度量名称 / 度量值的一个简单方法是记住,当您希望在视图中使用两个或更多度量值时,它们会被使用。因此,如果您想在窗格中使用两个或更多度量值,请先拖动第一个到窗格,然后再拖动第二个。如果您想在同一轴上使用两个或更多度量值,请先将第一个拖动到轴上,然后在同一位置拖放第二个。
现在您对行级和聚合计算有了基本理解,让我们考虑为什么这种区别很重要。
为什么行级与聚合差异很重要
假设您创建了以下代码的Discount % (row level)计算:
[Discount]/[Rent]
代码与您之前创建的聚合计算不同,该计算具有以下代码:
SUM([Discount])/SUM([Rent])
这里展示了结果上的戏剧性差异:

图 4.10:展示了按行级值和聚合计算的折扣%。
结果有这样的差异是为什么?这是计算执行方式的结果。
请注意,Discount % (row level)显示在度量值架上为SUM。这是因为计算是行级计算,因此它会逐行计算,然后在确定所有行级值后作为度量聚合。您看到的54.00%值实际上是在底层数据的每条记录中计算的百分比之和。
实际上,行级计算和最终聚合是这样执行的:

图 4.11:如果每个折扣%结果首先在行级计算,然后聚合,结果就是错误的。
对比聚合计算的执行方式。请注意,在视图中度量值架上列出的聚合在活动字段中为AGG,而不是SUM。这表明您已在计算中定义了聚合。Tableau 不会进一步聚合结果。聚合计算的执行方式如下:

图 4.12:如果分子和分母首先进行聚合,那么折扣%计算是正确的。
理解行级和聚合计算之间的差异非常重要,以确保您得到预期和所需的结果。通常情况下,当您确定要将值用作维度,或者行级值的聚合将有意义时,请使用行级计算。如果必须在其他操作之前执行聚合,请使用聚合计算。
在编写 Tableau 计算时遇到的最常见错误消息之一是Cannot mix aggregate and non-aggregate arguments with this function。当您遇到此消息时,请检查您的代码,确保您没有不正确地混合使用行级字段和计算与聚合字段和计算。例如,您不能像[Discount] / SUM([Rent])这样组合使用。
这种行级值(折扣)和聚合(租金的SUM)的混合是无效的。
在行级计算和聚合计算之间的区别已经明确之后,让我们稍作休息,讨论一下参数,然后再继续构建其他示例。
参数
在继续处理一些行级计算和聚合计算的其他示例之前,我们稍微偏离一下,检查一下参数,因为它们可以在计算中以惊人的方式使用。
Tableau 中的参数是一个占位符,用于表示单个全局值,如数字、日期或字符串。参数可以显示为控件(例如滑块、下拉列表或文本框)供仪表板或视图的最终用户使用,让他们能够更改参数的当前值。你甚至可以通过操作来改变参数值,正如你将在第八章“使用仪表板讲述数据故事”中看到的那样。
参数的值是全局的,因此如果值发生变化,工作簿中所有引用该参数的视图和计算都会使用新值。参数提供了另一种向仪表板和可视化的最终用户提供丰富交互性的方法。
参数可以用来允许与视图或仪表板交互的任何人动态地做很多事情,包括以下操作:
-
更改计算结果
-
更改箱子的大小
-
更改 top n 过滤器或 top n 集合中顶部或底部项目的数量
-
设置参考线或带状区域的值
-
更改箱子的大小
-
将值传递给用于数据源中的自定义 SQL 语句
其中一些选项我们将在后续章节中讨论。
由于参数可以用于计算,并且计算字段可以用来定义可视化的任何方面(从过滤器到颜色再到行和列),因此参数值的变化可能会带来显著的结果。我们将在接下来的章节中看到一些例子。
创建参数
创建参数类似于创建计算字段。
在 Tableau 中有多种方法来创建参数:
-
使用数据面板中维度旁边的下拉菜单并选择创建参数。
-
右键单击数据面板中的空白区域并选择创建参数。
-
使用数据面板中已有字段、集合或参数的下拉菜单,并选择创建 | 参数...。
在最后一种情况下,Tableau 将根据字段的域(不同的值)创建一个具有潜在值列表的参数。对于数据面板中默认离散(蓝色)的字段,Tableau 会创建一个包含与字段离散值匹配的值列表的参数。对于数据面板中默认连续(绿色)的字段,Tableau 会创建一个参数,其中的范围设置为数据中字段的最小值和最大值。
当你首次创建参数(或后续编辑现有参数)时,Tableau 会显示一个类似这样的界面:

图 4.13:创建参数界面,下面是对应的描述
该界面包含以下功能:
-
名称将作为参数控件的默认标题显示,并且也将是计算中的参考。您还可以添加注释来描述参数的用途。
-
数据类型定义了参数值允许的数据类型。选项包括整数、浮动点数(浮动小数)、字符串、布尔值、日期或带时间的日期。
-
当前值定义了参数的初始默认值。更改此屏幕上的值或在显示参数控件的仪表板或可视化中更改此值将更改当前值。
-
工作簿打开时的值允许您根据计算结果在工作簿打开时更改参数的默认值。
-
显示格式定义了值将如何显示。例如,您可能希望将整数值显示为金额,将小数显示为百分比,或以特定格式显示日期。
-
允许的值选项使我们能够限制允许的值的范围。允许的值有三种选项:
-
全部允许用户输入与参数的数据类型匹配的任何内容。
-
列表允许我们定义一个值的列表,用户必须从中选择一个选项。该列表可以手动输入、从剪贴板粘贴或从相同数据类型的维度加载。
-
范围允许我们定义可能的值范围,包括可选的上限和下限,以及步长。此设置也可以从字段或另一个参数中获取。
-
-
在前面截图的示例中,由于我们选择了列表作为允许的值,我们可以输入可能的值列表。在此示例中,已输入了三个项目的列表。请注意,值必须与数据类型匹配,但显示值可以是任何字符串值。您可以拖放列表中的值以重新排序列表。如果选择了范围,屏幕将显示设置最小值、最大值和步长的选项。
-
特别针对列表,有几个附加选项用于填充列表:
-
固定:您可以手动输入值、从剪贴板粘贴,或从数据中的现有字段值中设置它们。无论如何,列表将是静态的,即使数据更新,列表也不会更改。
-
当工作簿打开时允许您指定一个字段,该字段将根据工作簿首次打开时该字段的可用值动态更新列表。
-
单击确定以保存参数的更改,或单击取消以还原。
创建参数时,它会出现在数据面板的参数部分。参数的下拉菜单会显示一个选项,显示参数控件,该选项将参数控件添加到视图中。参数控件右上角的小下拉箭头会显示一个菜单,用于自定义参数控件的外观和行为。下面是我们之前创建的参数,作为单一值列表的参数控件:

图 4.14:作为单选按钮列表显示的参数控件
该控件可以在任何工作表或仪表板上显示,允许最终用户选择一个单一值。当值更改时,任何使用该参数的计算、过滤器、集合或分箱都会重新评估,所有受影响的视图也会被重新绘制。
接下来,我们将考虑一些在计算中使用参数的实际示例。
计算和参数的实际示例
让我们关注一些关于行级和聚合计算的实际示例。目标是学习并理解一些计算所能实现的功能。在你开始分析和可视化之旅时,你可以在这些示例的基础上继续深入。
查找计算帮助和建议的好地方是 Tableau 官方论坛,community.tableau.com/s/explore-forums。
修复数据问题
通常,数据并不完全干净。也就是说,它存在一些问题,必须在进行有意义的分析之前加以修正。例如,日期可能格式不正确,或者字段中可能包含需要分离成多个字段的数字值和字符代码的混合。计算字段通常可以用来修复这些问题。
我们将考虑使用 Tableau Prep——一个旨在整理和清理数据的工具——在第十四章,将混乱的数据结构化以便在 Tableau 中良好工作。Tableau Prep 的计算语法几乎相同,因此本章中的许多示例也可以应用于此上下文。在 Tableau Desktop 或 Tableau Prep 中处理数据问题的能力,将对你大有帮助。
我们将继续使用 Vacation Rentals 数据。你可能还记得,开始和结束日期类似于以下内容:
| 开始 | 结束 |
|---|---|
| 12 月 2 日 | 12 月 9 日 |
| 12 月 9 日 | 12 月 15 日 |
| 12 月 16 日 | 12 月 23 日 |
如果没有年份,Tableau 不会将 Start 或 End 字段识别为日期。相反,Tableau 会将它们识别为字符串。你可能会尝试使用数据面板中字段的下拉菜单将数据类型更改为日期,但没有年份,Tableau 几乎肯定会解析错误,或者至少会不完全解析。这是我们需要使用计算来修复问题的情况。
假设在这种情况下,你确定年份应始终为 2020,你可能会创建名为 Start Date 和 End Date 的计算字段。
以下是获取开始日期的代码:
DATE([Start] + ", 2020")
这是获取结束日期的代码:
DATE([End] + ", 2020")
这些计算字段的作用是将月份和日期与年份拼接起来,然后使用 DATE() 函数将字符串转换为日期值。实际上,Tableau 将识别结果字段为日期(具备日期字段的所有功能,比如内置层次结构)。在 Tableau 中快速检查,可以看到预期的结果:

图 4.15:修正后的日期显示在字符串版本旁边。所有字段都是行上的离散维度(这些日期是精确日期)。
我们不仅能够修复数据中的问题,还能通过计算扩展数据和分析。接下来,我们将讨论这个问题。
扩展数据
通常,数据中会有一些你希望包含的维度或度量,但它们在源数据中并不存在。很多时候,你可以通过计算字段扩展数据集。我们已经讨论过一个示例,即创建一个字段来表示客人的全名,而我们原本只有名字和姓氏字段。
另一项可能解锁真正有趣分析的数据是每次租赁的时长。我们有开始和结束日期,但没有这两者之间的时间长度。幸运的是,这个计算非常简单。
创建一个名为 Nights Rented 的计算字段,使用以下代码:
DATEDIFF('day', [Start Date], [End Date])
Tableau 采用智能代码补全功能。当你在代码编辑器中输入时,它会提供函数和字段名称的建议。按下 Tab 键会根据当前的建议自动完成你正在输入的内容。
图 4.16:智能代码补全功能将在你输入时建议可能的字段名称和函数。
DATEDIFF() 函数接受一个日期部分描述、一个开始日期和一个结束日期,并返回两个日期之间差异的数值。现在我们有了一个新的度量值,这是之前没有的。我们可以在可视化中使用这个新的度量值,例如以下租赁的甘特图:

图 4.17:计算字段使我们能够创建甘特图
在继续使用 Tableau 的过程中,你将会发现有很多方法可以通过计算扩展数据。这将使你能够进行一些令人惊叹的分析和可视化。接下来,我们将考虑一些示例。
提升用户体验、分析和可视化效果
计算和参数可以大大提升用户体验、分析效果以及可视化效果。
假设我们希望给度假公寓经理提供一些假设分析的能力。每年,她在 12 月提供一个免费夜晚。她希望能够看到哪些租客会收到免费夜晚,这取决于她选择哪个夜晚。
要实现这一点,请按照以下步骤操作:
-
如果你还没有做,创建一个与之前显示的类似的甘特图(按照截图中的字段放置)。
-
创建一个名为免费夜晚的参数,数据类型为日期,起始值为
12/12/2020。这将允许经理设置和调整促销月的起始日期。通过从数据窗格中的免费夜晚参数的下拉菜单中选择显示参数控制来显示参数控制。 -
现在,向视图中添加一条参考线以显示免费夜晚。方法是切换到左侧边栏中的分析标签,拖动参考线到视图中,并将其放置在表格上:
![]()
图 4.18:通过切换到分析窗格并将参考线拖到画布上来添加参考线
-
在结果对话框中,将线值设置为免费夜晚。你可能希望将标签设置为无,或者选择自定义并显示
免费夜晚的文本。你也可以调整线条的格式:![]()
图 4.19:使用编辑参考线对话框调整格式、标签和工具提示
-
创建一个名为获取免费夜晚的计算字段,该字段返回
true或false值,取决于免费夜晚是否在租赁期内:[Free Night] >= [Start Date] AND [Free Night] <= [End Date] -
将此新计算字段放置在颜色货架上。
我们现在有一个视图,允许公寓经理更改日期并查看动态变化的视图,这使得哪个租户会落在给定的促销期内变得非常明显。通过更改免费夜晚参数的值来进行实验,看看视图如何更新:

图 4.20:参考线将会移动,每次更改“免费夜晚”参数值时,受影响的个体会重新计算。
上述视图显示了提议的免费夜晚(以虚线表示),并突出了哪些租赁期会获得免费夜晚。随着公寓经理调整免费夜晚参数的值,线条和颜色会发生变化。
除了扩展分析、可视化和用户体验外,您还可以使用计算来添加所需的业务逻辑。接下来我们将考虑这一点。
满足业务需求
有时,数据与您的组织需求不完全匹配。例如,数据中的度量可能不是做出关键业务决策所需的确切指标,或者维度值可能需要根据某些规则进行分组。虽然这种业务逻辑通常会在与 Tableau 连接之前对数据进行转换或建模时应用,但你可能会遇到需要即时实现业务逻辑的情况。
在这个例子中,假设度量租金只是基本租金,不包括折扣或税费。这些是数据中的单独字段。如果你需要分析总收入,你需要进行计算。这个计算可能类似于这样:
[Rent] - [Discount] + ([Tax per Night] * [Nights Rented])
这个公式取基础的Rent,减去Discount,然后加上每晚税乘以租赁夜数。括号有助于提高可读性,但并不是必需的,因为乘法运算符*的优先级高于加法运算符+,因此会先进行计算。
到目前为止,我们创建了扩展数据源的计算字段。有时你只需要一个快速的计算来帮助单个视图。我们将以这些快速的临时计算作为结尾。
临时计算
临时计算允许你在单个视图中将计算字段添加到架上,而无需将字段添加到数据面板。
假设你有一个简单的视图,显示每位客人的收入,像这样:

图 4.21:每个个人住宿所产生的收入
如果你想快速突出显示支付少于$1,500 的租户呢?一种选择是创建一个临时计算。为此,只需双击列、行或度量值卡片的空白区域,或标记架上的空白区域,然后开始输入计算的代码。在这个例子中,我们在标记架的空白区域双击了:

图 4.22:在标记卡上创建临时计算
在这里,我们输入了一个代码,如果Rent的总和小于$1,500,则返回True,否则返回False。按Enter键或点击文本框外部,将显示一个新的临时字段,可以将其拖放到视图中的任何位置。在这里,我们将其移动到颜色架上:

图 4.23:在颜色上使用临时计算
临时字段仅在视图中可用,不会出现在数据面板中。你可以双击该字段来编辑代码。
将临时字段拖放到数据面板中,会将其转变为常规的计算字段,这些字段将可用于使用该数据源的其他视图。
经过一些实际示例的展示后,最后我们考虑一些确保在使用计算时保持良好性能的方法。
性能考虑
当你处理一个小数据集和高效的数据库时,你通常不会注意到计算效率低下。在更大的数据集上,计算效率可能会开始影响视图渲染的速度。
这里有一些提示,可以帮助你使计算尽可能高效:
-
布尔和数字计算比字符串计算要快得多。如果可能,避免字符串操作,使用别名或格式化来提供用户友好的标签。例如,别写如下代码:
IF [value] == 1THEN "Yes" ELSE "No" END。相反,只需写[value] == 1,然后编辑字段的别名,将True设置为Yes,将False设置为No。 -
寻找提高计算效率的方法。如果你发现自己在编写一个包含大量条件的长
IF ELSEIF语句,看看是否有一两个条件可以先检查,以排除其他所有条件的检查。例如,考虑简化以下代码://This is potentially less efficient... IF [Type] = "Dog" AND [Age] < 1 THEN "Puppy" ELSEIF [Type] = "Cat" AND [Age] < 1 THEN "Kitten" END //...than this code: IF [Age] < 1 THEN IF [Type] = "Dog" THEN "Puppy" ELSEIF [Type] = "Cat" THEN "Kitten" END END注意,在年龄小于
1的记录中,不需要对类型进行检查。这可能是数据集中非常大的一部分记录。 -
行级计算必须对每一行数据进行执行。尽量减少行级计算的复杂性。然而,如果无法做到这一点或无法解决性能问题,可以考虑最终的选项。
-
当你创建数据提取时,某些行级计算会被物化。这意味着在创建提取时,计算会执行一次,结果会存储在提取中。这样,数据引擎就不必反复执行计算。相反,值将直接从提取中读取。使用任何用户函数、参数或
TODAY()或NOW()的计算将不会在提取中物化,因为其值会根据当前用户、参数选择和系统时间发生变化。Tableau 的优化器还会判断某些计算是否更有效地在内存中执行,而不是读取存储的值。
当你使用提取物来物化行级计算时,只有在提取时创建的计算会被物化。如果你在创建提取之后编辑了计算字段或创建了新的计算字段,你将需要优化提取(使用数据源上的下拉菜单,或从数据菜单中选择并点击提取 | 优化或提取 | 立即计算计算字段)。
在继续进行计算时,特别注意那些出现性能问题的情况,并考虑是否可以优化计算以获得更好的结果。
总结
计算在 Tableau 中开启了令人惊叹的可能性。你不再局限于源数据中的字段。通过计算,你可以通过添加新的维度和度量来扩展数据,修复错误或格式不正确的数据,并通过参数让用户输入数据,提升可视化效果。
使用计算字段的关键在于理解 Tableau 中四种主要的计算类型。行级计算对每一行源数据执行。这些计算字段可以作为维度使用,也可以作为度量进行聚合。聚合计算在视图中定义的维度的详细级别上执行。当你必须首先聚合计算的组成部分,然后再执行其他操作时,这些计算尤其有用,甚至是必需的。
在下一章中,我们将探讨四种主要计算类型中的第三种:细节层次计算。这将极大地提升你处理数据和解决各种有趣问题的能力。
第五章:利用详细程度计算
在考虑了逐行计算和聚合计算后,接下来我们将关注四种主要计算类型中的第三种:详细程度计算。
详细程度计算(有时称为 LOD 计算 或 LOD 表达式)允许你在指定的详细程度上执行聚合,这个详细程度可能与视图中定义的不同。你可以利用这个功能进行各种分析,这些分析在其他情况下可能会非常困难。
本章将涵盖以下内容:
-
详细程度概述
-
详细程度计算语法及其变体
-
FIXED详细程度计算示例 -
INCLUDE详细程度计算示例 -
EXCLUDE详细程度计算示例
详细程度概述
详细程度是什么意思?这取决于术语的使用上下文。在 Tableau 中,我们将区分几种不同的详细程度,每种程度都至关重要,必须理解它们才能正确地分析数据:
-
数据详细程度:有时被称为数据的 粒度,这是由数据集中的一条记录定义的详细程度。当你能够阐明一条记录代表什么时(例如,“每条记录代表一个订单”或“每个客户有一条记录”),那么你就对数据的详细程度有了很好的理解。逐行计算在这一层次操作。
-
视图详细程度:我们之前讨论过,作为视图中维度的字段组合定义了视图的详细程度。通常,在视图中,Tableau 会为视图中所有维度的每个唯一值组合绘制一个标记(例如条形图或圆形)。例如,如果视图中的两个维度是 客户 和 年份,则 Tableau 会为数据中每个存在的 客户/年份 组合绘制一个标记(前提是没有被筛选器排除)。聚合计算在这一层次操作。
-
计算的详细程度:这是由计算定义的一个单独的详细程度。正如我们所看到的,你可以使用任意数量的维度来定义详细程度。详细程度计算用于定义这个层次。
考虑以下数据集,每条记录对应一个客户,数据详细程度为每个客户一条记录:
| 客户 | 州 | 会员日期 | 会员等级 | 订单数 |
|---|---|---|---|---|
| Neil | Kansas | 2009-05-05 | Silver | 1 |
| Jeane | Kansas | 2012-03-17 | Gold | 5 |
| George | Oklahoma | 2016-02-01 | Gold | 10 |
| Wilma | Texas | 2018-09-17 | Silver | 4 |
在这种情况下,每条记录定义了一个唯一的客户。如果我们执行逐行计算,例如使用 DATEDIFF('year', [Membership Date], TODAY()) 来确定每个客户成为会员的年数,那么结果将按记录计算。
现在考虑一个由数据创建的视图,该视图的 视图级别详细程度 是州:

图 5.1:州的视图级别详细程度
作为视图中唯一的维度,State 定义了视图的详细程度。每个州有一个标记,计算和用作聚合的字段,例如 SUM(Orders),将按州执行。
基于这一特定观点,我们可能希望通过提出额外的问题来增强我们的理解,例如以下问题:
-
哪个客户是视图中每个州的第一个成员?
-
各州的订单数量与所有州的平均订单数量相比如何?
-
哪个会员级别在各州的订单数量最高或最低?
在每种情况下,问题涉及的详细程度不同于视图(每个州的最小会员日期与每个客户的比较、所有订单的平均数与各州订单的比较,以及每个州每个会员级别的最小或最大订单数)。在某些情况下,构建一个新的视图来回答这些问题可能是有意义的。但有时我们希望补充现有视图或在同一视图中比较不同的详细程度。详细程度计算提供了解决方案!
详细程度计算
在进入使用详细程度计算的实际示例之前,让我们先花一点时间理解详细程度计算的语法和类型。
详细程度语法
详细程度计算遵循以下基本语法模式:
{FIXED|INCLUDE|EXCLUDE [Dim 1],[Dim 2] : AGG([Field])}
前面声明的定义如下:
-
FIXED、INCLUDE和EXCLUDE是指示详细程度计算类型的关键字。我们将在接下来的章节中考虑这些差异。 -
Dim 1、Dim 2(以及所需的其他维度)是以逗号分隔的维度字段列表,定义了执行计算时的详细程度。 -
AGG是你希望执行的聚合函数(例如SUM、AVG、MIN和MAX)。 -
Field是将根据你选择的聚合方法进行聚合的值。
详细程度类型
Tableau 中使用三种类型的详细程度计算:FIXED、INCLUDE 和 EXCLUDE。
FIXED
Fixed 详细程度表达式在代码中指定的维度列表定义的详细程度下工作,而不考虑视图中包含的维度。例如,以下代码返回各州的平均订单数量,无论视图中包含其他哪些维度:
{FIXED [State] : AVG([Orders])}
你可以根据需要包括任意多的维度,或者完全不包括任何维度。以下代码表示对数据源中整个数据集的平均订单数进行的固定计算:
{FIXED : AVG([Orders])}
或者,你也可以用以下方式编写计算,结果相同:
{AVG([Orders])}
没有指定维度的固定详细程度表达式有时被称为表格范围的固定详细程度表达式,因为在计算中定义的聚合将适用于整个表格。
INCLUDE
包含详细程度表达式会在视图中由维度确定的详细程度层级上进行聚合,同时包括代码中列出的维度。例如,以下代码计算的是在视图中由维度定义的详细程度层级上的平均订单数,但即使Membership Level不在视图中,依然包括Membership Level这一维度:
{INCLUDE [Membership Level] : AVG([Orders])}
EXCLUDE
排除详细程度表达式会在由视图中的维度决定的详细程度层级上进行聚合,排除代码中列出的任何维度。例如,以下代码计算的是在视图中定义的详细程度层级上的平均订单数,但不包括Customer维度,即使Customer在视图中存在:
{EXCLUDE [Customer] : AVG([Orders])}
详细程度差异的示意图
在分析数据时,你可能常常会想,数据片段是如何与整体情况相关联的。例如,你可能会想,视图中每个州的订单数量是如何与总体平均订单数相关的。一种快速且简单的方式是通过从分析标签中拖放,向视图中添加一个平均线,操作如下:

图 5.2:向视图添加平均线
你最终会得到如下的平均线:

图 5.3:总体平均值报告为 6.66667。这是每个州的平均值
但是,6.66667真的是总体的平均订单数吗?事实证明,并不是。它实际上是每个州的订单数量之和的平均值:(6 + 10 + 4) / 3。很多时候,那条平均线(即每个州的订单总数的平均值)正是我们在使用聚合数据时希望对比的内容。
但是有时候,我们可能希望计算真实的总体平均值。为了获得整个数据集中的平均订单数,我们可以考虑创建一个名为Overall Average Number of Orders的计算,并使用类似下面的固定详细程度计算:
{FIXED : AVG([Orders])}
将该计算字段添加到标记卡的详细信息部分,并将参考线编辑为使用该字段,给我们带来了不同的结果:

图 5.4:每位客户的真实总体平均订单数是 5
你会回忆起原始数据集有四条记录,快速检查可以验证这个结果:
(1 + 5 + 10 + 4) / 4 = 5
现在我们已经研究了详细程度计算如何带来实际差异;接下来让我们看一些实际的例子。
固定详细程度计算的示例
当我们将注意力转向一些关于细节级别计算的实际示例时,我们将使用Chapter 05 Loans数据集,该数据集包含在Chapter 05工作簿中。真实的数据集包含更多的记录,但这里是它所包含的某些数据示例:
| 日期 | 投资组合 | 贷款类型 | 余额 | 开盘日期 | 成员姓名 | 信用评分 | 年龄 | 州 |
|---|---|---|---|---|---|---|---|---|
| 3/1/2020 | 汽车贷款 | 新车贷款 | 15987 | 9/29/2018 | Samuel | 678 | 37 | 加利福尼亚州 |
| 7/1/2020 | 抵押贷款 | 第一抵押贷款 | 96364 | 8/7/2013 | Lloyd | 768 | 62 | 俄亥俄州 |
| 3/1/2020 | 抵押贷款 | 房屋净值信贷(HELOC) | 15123 | 4/2/2013 | Inez | 751 | 66 | 伊利诺伊州 |
| 3/1/2020 | 抵押贷款 | 第一抵押贷款 | 418635 | 9/30/2015 | Patrick | 766 | 60 | 俄亥俄州 |
| 5/1/2020 | 汽车贷款 | 二手车贷款 | 1151 | 10/22/2018 | Eric | 660 | 44 | 宾夕法尼亚州 |
| … | … | … | … | … | … | … | … | … |
| … | … | … | … | … | … | … | … | … |
数据集代表银行、信用合作社或类似金融机构中成员的贷款历史数据。每条记录是贷款的月度快照,包含快照日期以及描述贷款的字段(投资组合,贷款类型,余额,和开盘日期)和描述成员的字段(姓名,信用评分,年龄,和州)。
与前几章一样,目标是理解关键概念和一些关键模式。以下仅是细节级别计算所呈现的所有可能性中的几个示例。
某个成员是否曾经处于风险中?
假设分行管理层已确定,任何曾经有过信用评分低于 550 的成员都被视为处于风险中,并有资格获得特别帮助。考虑以下三位个体的历史记录:

图 5.5:三位信用评分低于 550 的个体,信用评分低于阈值的部分通过箭头标出
每个月,都会记录新的历史快照。贷款余额通常会随着成员的信用评分变化。一些成员从未处于风险中。第一个成员 Vicki,她的最低信用评分为 699,且从未处于风险中。然而,Charles 和 Thomas 在历史中都有信用评分低于阈值的时段(在前述截图中以箭头标出)。
一个简单的行级计算,例如[Credit Score] < 550,可以识别每条记录,其中信用评分的月度快照显示存在风险。但那些信用评分在阈值上下波动的成员,其记录会交替为TRUE或FALSE。
我们希望给定成员的每一条记录如果任何记录低于阈值,则为TRUE,如果没有记录低于阈值,则为FALSE。
一种解决方案是使用一个细节级别计算,我们将其命名为Member Ever at Risk?,其代码如下:
{FIXED [Member ID] : MIN([Credit Score])} < 550
该计算确定了每个成员的最低信用分数,并将其与 550 的风险阈值进行比较。对于给定成员的每一条记录,结果是相同的,如下所示:

图 5.6:给定成员的所有记录中,Member Ever at Risk? 字段的值为 True 或 False
请注意,每条记录都包含相关成员的计算结果。这说明了固定细节层级计算的一个关键概念:虽然计算是在定义的细节层级上进行的聚合,但结果是在行级别上的。也就是说,TRUE 或 FALSE 的值是在成员级别计算的,但这些结果作为行级别的值对于该成员的每条记录都是可用的。
这为各种分析可能性提供了支持,例如:
-
仅过滤出处于风险中的成员,同时保留其历史的所有记录。如果你改为基于个人信用评分进行过滤,那么你将丧失那些信用评分高于阈值的历史记录。那些记录可能对你的分析至关重要。
-
正确统计成员是否处于风险中,并避免在历史波动的情况下将同一成员同时计入两种情况。
-
比较不同细节层级下处于风险中和不处于风险中的成员。例如,这个视图展示了按投资组合分类的处于风险中和不处于风险中的成员数量:
![]()
图 5.7:我们可以通过一些交互展示有多少比例的成员曾经处于风险中
固定细节层级计算是上下文敏感的。也就是说,它们在某个上下文中进行操作,这个上下文要么是 1) 整个数据集,要么是 2) 由上下文过滤器定义的(即选择了下拉菜单中的添加到上下文选项的过滤器)。在这个例子中,这意味着如果不使用上下文过滤器,每个成员的计算值将不会发生变化。以 Thomas 为例,即使你应用了仅保留 2020 年 3 月之后的日期的普通过滤器,他仍然会被认为处于风险中。因为固定细节层级计算会跨整个数据集进行工作,并在 1 月和 2 月找到处于风险中的值。如果你将这种过滤器添加到上下文中,结果可能会发生变化。理解固定细节层级计算的这种行为有助于分析,但如果没有理解,也可能导致意外的行为。
这是通过细节层级计算简化的分析类型的一个示例。我们还能做更多的事情,接下来会看到另一个示例!
给定成员的最新余额
许多数据集包含一系列事件或交易历史。你可能会提出如下问题:
-
患者第一次去医院时常见的诊断是什么?
-
网络中每台计算机的最后一次报告状态是什么?
-
每个客户在他们的最后一笔订单上花费了多少?
-
本周的第一笔交易与最后一笔交易相比,赚了多少?
这些问题不仅仅是在问最早或最新的事件发生了什么。简单的MIN或MAX日期聚合就能提供答案。但这些问题的复杂性在于,除了要求最早或最新日期的详细信息外,还要求关于这些日期发生的更多内容。对于这类问题,详细级别计算提供了一种得出答案的方式。
请考虑以下三位成员的数据,这些数据包含在Chapter 05 Loans数据集中:

图 5.8:贷款数据集中三位选定成员的数据
每个成员都有每个贷款的余额历史。然而,每个贷款的最新历史日期是不同的。凯利的最新余额是七月,约瑟夫的最新余额是八月。杰拉尔德有两个贷款:第一个的最新余额是七月,第二个是九月。
如果你只想识别代表成员最新已知余额的记录怎么办?你可以考虑使用一个固定的详细级别计算,名为Latest Date per Member/Loan,代码如下:
{FIXED [Member ID],[Loan Number] : MAX([Date])} = [Date]
这决定了每个成员每个贷款的最大日期,并将结果与每行的日期进行比较,匹配时返回TRUE,否则返回FALSE。
在前面的计算中,使用了两个维度来定义详细级别,因为一个成员可能有多个贷款。如果你为每个贷款拥有唯一标识符,你也可以使用该标识符作为定义详细级别的单一维度。为了准确利用详细级别计算,你需要对数据有充分的理解。
你可以在这里查看计算结果:

图 5.9:每个贷款每个人的最新日期通过计算的True值表示
如果你想要确定每个贷款的第一条记录,你只需将代码中的MAX改为MIN。你可以将详细级别计算的行级TRUE / FALSE结果作为过滤器,只保留最新的记录,或作为其他计算的一部分来完成分析,比如比较、起始余额和结束余额。
该计算展示的技术有许多应用场景。在数据逐步传入的情况下,你可以识别出最新的记录。在记录重复的情况下,你可以过滤掉,只保留第一条或最后一条记录。你可以识别客户的首次或最后一次购买。你还可以将历史余额与原始余额进行比较,等等!
我们刚刚看到如何利用固定详细级别计算来回答一些复杂的问题。接下来,我们将继续查看包含详细级别表达式。
包含详细级别表达式的示例
包含详细层次计算在你需要在低于(更详细的)视图层次进行某些计算时非常有用。让我们来看一个例子。
每个成员的平均贷款数
有些成员只有一笔贷款,有些则有两笔、三笔,甚至可能更多。如果我们想按州查看每个成员平均有多少笔贷款,该如何进行呢?让我们考虑一下该如何操作。
我们从一个视图层次为州的工作表开始:

图 5.10:示例的起点—按州填充的地图
可视化每个州的平均信用评分或平均余额是相对简单的。但如果我们想要可视化每个州每个成员的平均贷款数量呢?虽然有多种方法可以解决这种问题,但我们将在此考虑使用以下名为每个成员的贷款数量的详细层次表达式:
{INCLUDE [Member ID] : COUNTD([Loan Number])}
这段代码返回了一个独特的贷款数量统计,统计的细节层次包括成员 ID 以及定义视图层次的所有维度(在此案例中是州)。当我们将计算添加到视图时,我们需要决定如何进行聚合。在此案例中,我们想要每个成员的平均贷款数量,因此我们将在字段的下拉菜单中选择度量 | 平均值,这将揭示一个有趣的地理模式:

图 5.11:使用包含详细层次计算创建颜色渐变,以显示每个成员的平均贷款数
在你思考包含详细层次计算如何工作的同时,你可能想要在此层次构建一个交叉表:

图 5.12:交叉表有助于说明如何将贷款的独特统计数用作平均值的基础
州,在行上的第一个维度,来自视图层次。成员 ID已被包含在交叉表中,以模拟包含在详细层次表达式中的维度。COUNTD(Loan Number)给出了每个成员的贷款数。将所有州内成员的值求平均,得到该州的平均数。快速检查北达科他州,我们得到每个成员平均 1.2 笔贷款,这与地图可视化完全一致。
在这种情况下,包含详细层次表达式为我们提供了一个有用的解决方案。虽然有其他的替代方法,但在考虑如何解决类似问题时,思考这些方法是非常有帮助的。我们接下来将考虑这些方法。
替代方法
值得注意的是,上面的数据集实际上允许你使用MAX([Loan Number]),而不是COUNTD([Loan Number]),因为贷款数会根据每个成员有多少笔贷款而递增。最大值与该成员的贷款数是相同的。在一个显著大的数据集中,MAX计算的性能会更好。
解决此问题还有一些其他方法,例如计算。例如,您可以编写以下代码:
COUNTD(STR([Member ID]) + "_" + STR([Loan Number]))
/
COUNTD([Member ID])
此代码计算贷款的唯一计数,并将其除以成员的唯一计数。为了计算贷款的唯一数量,代码通过将成员 ID 和贷款编号的字符串连接起来创建唯一键。
聚合计算的替代方法具有在视图的任何详细级别上都能工作的优势。您可能会发现详细级别计算或聚合计算更容易理解,您需要决定哪种方法能帮助您更好地保持思维流畅,在处理当前问题时更加得心应手。
另一种方法是使用固定的详细级别表达式,例如:
{FIXED [State],[Member ID] : COUNTD([Loan Number])}
此计算与包含表达式产生相同的详细级别,并使用相同的贷款编号的唯一计数。结果发现,在此数据集中,每个成员只属于一个州,因此州不一定需要包含在固定的详细级别表达式中。然而,如果您想改变详细级别,您需要调整计算,而使用包含表达式时,只需向视图中添加或删除维度即可。
在考虑了包含示例和一些替代方法后,让我们将注意力转向排除详细级别计算的示例。
排除详细级别计算的示例
排除详细级别计算在您希望在比视图详细级别更高(较少详细)的级别上执行某些计算时非常有用。以下示例将演示我们如何利用此功能。
每种贷款类型的平均信用评分
在此示例中,我们将回答以下问题:给定贷款类型的平均信用评分如何与整个投资组合的总体平均信用评分进行比较?
请看以下视图,其中显示了每种贷款类型的平均信用评分(其中贷款类型按投资组合分组):

图 5.13:此交叉表显示每种贷款类型的平均信用评分
如果我们想将每种贷款类型的平均信用评分与整个投资组合的总体平均信用评分进行比较怎么办?我们可以通过如下所示的排除详细级别计算来实现这一点:
{EXCLUDE [Loan Type] : AVG([Credit Score])}
这将贷款类型从详细级别中移除,平均值仅在投资组合级别计算。这为我们提供了如下结果:

图 5.14:排除详细级别表达式删除了贷款类型,因此平均值仅在投资组合级别计算
你会注意到,排除贷款类型的平均值会为每个贷款类型重复。这是预期中的结果,因为整体平均值是在投资组合级别,而不受贷款类型的影响。按现有方式,这也许不是最有用的视图。但我们可以稍微扩展计算,以便给出整体投资组合平均值与每个贷款类型的平均值之间的差异。代码如下所示:
AVG([Credit Score]) - AVG([Average Credit Score Excluding Loan Type])
这个计算会在视图的详细级别(贷款类型和投资组合)上取平均值,并减去投资组合级别的平均值,从而给出每个贷款类型的平均值与整个投资组合平均值之间的差异。我们可以重新排列视图,像这样直观地查看结果:

图 5.15:最终视图显示了贷款类型平均信用评分与整体投资组合平均值之间的差异
排除详细级别表达式使我们能够分析视图级别的详细信息与更高层次详细信息之间的差异。
总结
详细级别表达式极大扩展了你在计算中能做到的事情。你现在拥有了一个在不同详细级别处理数据的工具集。通过固定详细级别计算,你可以识别出系列中的第一个或最后一个事件,或者判断某个条件在整个数据子集中的状态。通过包含表达式,你可以在较低的详细级别进行工作,然后在视图中汇总这些结果。通过排除表达式,你可以在更高的详细级别进行工作,极大地扩展了分析的可能性。
在下一章中,我们将探讨最后一种主要的计算类型:表格计算。这些计算在解决问题的能力上是最强大的,它们为深入分析开辟了难以置信的可能性。实际上,它们从非常简单到极其复杂不等。
第六章:深入探讨表格计算
表格计算是 Tableau 中最强大的功能之一。它们能实现那些通过其他方式无法完成的解决方案(除非编写自定义应用程序或复杂的自定义 SQL 脚本!)。这些功能包括以下内容:
-
它们使得即使数据结构不佳,依然能快速得出结果,而无需等待有人修复数据源中的数据。
-
它们使得可以在结果表的各行之间比较并对聚合值进行计算。
-
它们为分析、创造性地解决问题、突出洞察或改善用户体验打开了令人难以置信的可能性。
表格计算的复杂度各异,从非常容易创建(只需几次点击)到极其复杂(例如,需要理解定位、分区和数据密集化等概念)。在本章中,我们将从简单的开始,逐步深入复杂的内容。目标是为创建和使用表格计算奠定坚实的基础,理解它们的工作原理,并查看一些使用示例。我们将探讨以下内容:
-
表格计算概览
-
快速表格计算
-
范围和方向
-
定位和分区
-
自定义表格计算
-
实际示例
本章中的示例将使用我们在第一章中使用的 Superstore 示例数据。要跟随示例操作,请使用 Chapter 06 Starter.twbx 工作簿。
表格计算概览
表格计算与 Tableau 中的所有其他计算不同。行级、聚合计算和 LOD 表达式(我们在前几章中探讨过)是在查询数据源的过程中执行的。如果你检查 Tableau 发送到数据源的查询,你会发现计算的代码已转换为数据源使用的任何 SQL 实现。
另一方面,表格计算是在初始查询后执行的。这里有一个图表,展示了在 Tableau 缓存中如何存储聚合结果:

图 6.1:表格计算在 Tableau 的聚合数据缓存中计算
表格计算是在 Tableau 缓存中的聚合数据表上执行的,数据可视化渲染之前进行。如我们所见,这对于多个原因很重要,包括以下几点:
-
聚合:表格计算作用于聚合数据。在表格计算中,无法引用字段而不将其作为聚合字段来引用。
-
筛选:常规筛选器将在表格计算之前应用。这意味着表格计算仅会应用于从数据源返回到缓存的数据。你需要避免筛选掉任何对表格计算至关重要的数据。
-
表格计算过滤(有时称为延迟过滤):作为过滤器使用的表格计算将在数据源返回聚合结果后应用。顺序很重要:行级和聚合级过滤器首先应用,聚合数据返回到缓存中,然后应用表格计算作为过滤器,从而有效地将数据从视图中隐藏。这允许一些创造性的方式来解决某些类型的问题,我们将在本章后面的示例中讨论这些问题。
-
性能:如果你正在使用与企业数据库服务器的实时连接,则行级和聚合级计算将利用企业级硬件。表格计算是在缓存中执行的,这意味着它们将在运行 Tableau 的机器上执行。如果你的表格计算是在十几行甚至数百行的聚合数据上运行,或者你预计会发布到强大的 Tableau 服务器上,那么你可能不需要担心性能问题。然而,如果你在本地机器上返回数十万行的聚合数据,那么你需要考虑表格计算的性能。同时,也有一些情况,表格计算可以用来避免在数据源处执行昂贵的过滤或计算。
了解了表格计算的概述后,我们来看看一些创建表格计算的选项。
创建和编辑表格计算
在 Tableau 中,有几种创建表格计算的方法,包括:
-
在视图中,使用任何作为数值聚合的活动字段,选择快速表格计算,然后选择所需的计算类型。
-
在视图中,使用任何作为数值聚合的活动字段,选择添加表格计算,然后选择计算类型,并调整任何所需的设置。
-
创建一个计算字段,并使用一个或多个表格计算函数来编写你自己的自定义表格计算。
前两个选项创建一个快速表格计算,可以通过字段上的下拉菜单编辑或删除,选择编辑表格计算... 或 清除表格计算。第三个选项创建一个计算字段,可以像编辑或删除其他计算字段一样进行编辑或删除。
在视图中的架子上使用表格计算的字段,或者使用表格计算函数的计算字段,将会显示增量符号图标(
),如下所示。
without a table calculation:

图 6.2:未应用表格计算的活动字段
以下是应用了表格计算的活动字段:

图 6.3:应用了表格计算的活动字段包括增量符号
本章中的大多数示例将使用文本表/交叉制表报告,因为这些最接近缓存中的实际聚合表。这样可以更容易地看到表格计算的工作方式。
表格计算可用于任何类型的可视化。然而,在构建使用表格计算的视图时,特别是更复杂的视图时,请尝试在行架上使用具有所有维度的表格,然后在维度的右侧作为离散值添加表格计算。一旦您的所有表格计算按预期工作,您可以重新排列视图中的字段,以获得适当的可视化效果。
现在我们将从创建表格计算的概念转移到一些示例。
快速表格计算
快速表格计算是预定义的可应用于视图中用作度量的字段的表格计算。这些计算包括常见且有用的计算,如Running Total、Difference、Percent Difference、Percent of Total、Rank、Percentile、Moving Average、YTD Total(年度总计)、Compound Growth Rate、Year over Year Growth和YTD Growth。您可以在视图中用作度量的字段的下拉列表中找到适用的选项,如下图所示:

图 6.4:使用下拉菜单,您可以从视图中的聚合字段快速创建表格计算。
考虑以下使用示例Superstore Sales数据的示例:

图 6.5:第一个 SUM(Sales)字段是普通聚合。第二个已应用了 Running Total 快速表格计算的 SUM(Sales)字段。
在此处,显示了随时间变化的销售额。销售额已放置在行架上两次,并且第二个SUM(Sales)字段已应用了running total快速表格计算。使用快速表格计算意味着不需要编写任何代码。
您可以通过双击视图中的表格计算字段来查看快速表格计算使用的代码。这将其转换为临时计算。您还可以将应用了快速表格计算的活动字段拖动到数据窗格中,这将其转换为可以在其他视图中重复使用的计算字段。
以下表格演示了一些快速表格计算:

图 6.6:第一列中的销售额简单是 SUM(Sales)。另外三列显示应用的各种表格计算(Running Sum、Difference、Rank)。
尽管创建快速表格计算非常容易,但理解一些基本概念是至关重要的。接下来我们将详细查看这些概念,首先从相对和固定表格计算之间的区别开始。
相对与固定
不久我们将详细查看细节,但首先重要的是理解表格计算可能以以下两种方式之一计算:
-
相对:表计算将相对于表的布局进行计算。它们可能在表格中横向或纵向移动。重新排列维度以改变表格的方式会改变表计算的结果。正如我们将看到的,相对表计算的关键是范围和方向。当你设置表计算为使用相对计算时,即使重新排列视图,它也会继续使用相同的相对范围和方向。(这里的术语与 UI 中某些快速表计算中出现的相对于不同。)
-
固定:表计算将使用一个或多个维度进行计算。重新排列视图中的这些维度不会改变表计算的结果。在这种情况下,范围和方向保持固定于一个或多个维度,无论它们在视图中如何移动。当我们讨论固定表计算时,我们将重点讨论分区和地址的概念。
你可以在用户界面中看到这些概念。以下是表计算编辑器,当你从表计算字段的菜单中选择编辑表计算时会出现:

图 6.7:编辑表计算 UI 展示了相对和固定表计算之间的差异
我们将更详细地探讨这些选项和术语,但现在请注意,相关选项用于指定相对于行和列计算的表计算,以及固定计算到视图中某些维度的表计算选项。
接下来,我们将讨论范围和方向,这描述了相对表计算的操作方式。
范围和方向
范围和方向是描述表计算如何相对于表格计算的术语。具体来说,范围和方向指以下内容:
-
范围:范围定义了给定表计算可以引用其他值的边界。
-
方向:方向定义了表计算在范围内的移动方式。
你已经看过表计算的计算方式表格(横向)(图 6.5中的销售额随时间的累计总和)和表格(纵向)(图 6.6中)。在这些情况下,范围是整个表格,方向是横向或纵向。例如,运行总和计算横向遍历整个表格,逐步加上从左到右的后续值。
要为表计算定义范围和方向,使用视图中字段的下拉菜单并选择计算方式。你将获得一个选项列表,具体取决于维度在视图中的位置,这些选项会略有不同。列表中的第一个选项允许你相对于表格定义范围和方向。在单元格选项之后,你将看到视图中存在的维度列表。我们将在下一节中查看这些维度。
相对于表格的作用域和方向选项如下:
-
作用域选项:表格,窗格,单元格
-
方向选项:纵向,横向,先纵向后横向,先横向后纵向
为了理解这些选项,请参考以下示例:

图 6.8:视图中表格、窗格和单元格的区别
在表格计算的作用域方面,Tableau 做出了以下区分:
-
表格是整个汇总数据集。
-
窗格是整个表格的一个较小部分。严格来说,它由表格的倒数第二级定义;也就是说,行和/或列架上的倒数第二个维度定义了窗格。在前面的图像中,可以看到年份在行和区域在列的交点定义了窗格(视图中高亮显示了八个窗格中的一个)。
-
单元格由表格的最低级别定义。在这个视图中,一个区域内的一个部门与一个年份内的一个季度交点形成一个单元格(视图中高亮显示了 96 个单元格中的一个)。
前面截图中被界定的区域由作用域定义。作用域(以及我们将看到的,分区)定义了数据中的窗口,这些窗口包含了各种表格计算。窗口函数,特别是WINDOW_SUM(),在这些窗口的作用域内工作。
使用作用域和方向
为了了解作用域和方向是如何协同工作的,让我们通过一些例子来演示。我们将从创建自定义表格计算开始。创建一个名为Index的新计算字段,代码为Index()。
Index()是一个表格计算函数,它从1开始,并在给定的方向和作用域内递增。Index()有许多实际应用,但我们在这里使用它,因为很容易看到它在给定作用域和方向下的移动。
创建如图 6.8所示的表格,年份(订单日期)和季度(订单日期)放在行上,区域和部门放在列上。不要将销售额放入视图中,而是将新创建的Index字段添加到文本架上。然后,使用Index字段上的下拉菜单,选择计算方式,以切换不同的作用域和方向组合。在以下示例中,我们只保留了东部和西部区域以及2015年和2016年:
-
表格(横向):这是 Tableau 在表格中有列时的默认设置。请注意,以下内容中Index是如何在整个表格中横向递增的:
![]()
图 6.9:表格(横向)
-
表格(纵向):使用
table (down)时,Index在整个表格中按纵向递增:![]()
图 6.10:表格(纵向)
-
表格(先横向后纵向):这使得Index先横向递增,然后向下递增,再继续横向递增,整个表格都按此方式重复:
![]()
图 6.11:表(先横向再纵向)
-
面板(横向):这定义了索引的边界,并使其横向递增,直到到达面板边界,此时索引会重新开始:
![]()
图 6.12:面板(横向)
-
面板(纵向):这定义了索引的边界,并使其纵向递增,直到到达面板边界,此时索引会重新开始:
![]()
图 6.13:面板(纵向)
-
面板(先横向再纵向):这使得索引在面板内横向递增,并继续纵向递增。面板在这里定义了边界:
![]()
图 6.14:面板(先横向再纵向)
你可以将作用域和方向与任何表计算一起使用。考虑一下如何使用相同的移动和边界计算运行总计或百分比差异。继续尝试不同的选项,直到你熟悉作用域和方向的工作原理。
作用域和方向相对于表格操作,因此你可以重新排列字段,计算仍然会在你定义的相同作用域和方向下进行。例如,你可以将订单日期年份与部门交换,仍然可以根据你定义的作用域和方向查看索引的计算结果。
接下来,我们将查看与固定在某些维度上的表计算对应的概念。
寻址和分区
寻址和分区与作用域和方向非常相似,但通常用来描述如何根据视图中某些字段的绝对引用计算表计算。使用寻址和分区时,你定义视图中哪些维度用于寻址(方向),而其他维度则用于分区(作用域)。
使用寻址和分区可以提供更精细的控制,因为你的表计算不再依赖于表格布局,你有更多的选项来微调计算的作用域、方向和顺序。
要开始理解这个是如何工作的,我们先来看一个简单的例子。在前面的视图中,从索引字段的下拉菜单中选择编辑表计算。在弹出的对话框中,在特定维度下勾选部门。
选择部门的结果如下:

图 6.15:设置表计算为使用特定维度进行计算,使用了寻址和分区
你会注意到,Tableau 正在沿着(在)选中的维度部门计算索引。换句话说,你已使用部门进行寻址,因此每个新的部门都会增加索引。视图中所有其他未选中的维度隐式用于分区;也就是说,它们定义了索引功能必须重新开始的作用域或边界。正如我们在作用域中看到的,这些边界有时被称为窗口。
上述视图看起来与如果你将索引设置为基于面板(横向)进行计算时相同。但是,它们有一个重大区别。当你使用面板(横向)时,索引总是沿着面板计算,即使你重新排列视图中的维度,移除某些维度或添加新的维度,索引仍然会按面板进行计算。
但是,当你使用某一维度进行地址计算时,表格计算将始终基于该维度进行计算。移除该维度将导致表格计算无法正常工作(字段会变成红色并显示感叹号),此时你需要通过下拉菜单编辑表格计算以调整设置。如果你在视图中重新排列维度,索引将继续沿着部门维度进行计算。
例如,点击工具栏中的交换行和列按钮后的结果如下:

图 6.16:交换行和列不会改变该表格计算的计算方式,因为它是固定在维度上的,而不是表格布局上
请注意,尽管表格的整体方向发生了变化,索引仍然继续沿着部门进行计算。为了完成接下来的示例,我们将撤销行和列的交换,恢复表格的原始方向。
使用地址和分区
让我们再看几个添加额外维度后会发生的例子。例如,如果你勾选了订单日期的季度,你将看到 Tableau 突出显示一个由地区和订单日期的年份定义的分区,索引将按订单日期的季度和部门的地址字段递增:

图 6.17:添加维度改变了表格计算的行为。一个结果分区被突出显示
如果你选择部门和订单日期的年份作为索引的地址,你将看到一个由地区和季度定义的单一分区,如下所示:

图 6.18:更改已选维度改变了表格计算的行为。一个结果分区被突出显示
你会注意到,在此视图中,索引会根据季度和地区分区内的年份和部门的每种组合递增。
以下是在使用地址和分区时需要考虑的其他事项:
-
你可以指定排序顺序。例如,如果你希望索引根据销售总额的值递增,你可以使用表格计算编辑器底部的下拉列表来定义自定义排序。
-
在编辑表格计算对话框中的在级别选项允许您指定执行表格计算的级别。大多数情况下,您将将其保持在最深层(这与将其设置为最底层维度相同),但偶尔,如果需要避免某些维度定义分区,但需要在更高层次应用表格计算,您可能希望将其设置为不同的级别。您还可以通过在特定维度的复选框列表中拖放来重新排序维度。
-
每次重启... 选项实际上会使选定字段以及该选定字段上方所有维度成为分区的一部分,但允许您保持对排序的微调。
-
维度是唯一可以用于寻址的字段类型;然而,离散(蓝色)度量可以用于划分表格计算。要启用此功能,请使用字段上的下拉菜单并取消选中在表格计算中忽略。
花些时间实验各种选项,并熟悉寻址和分区的工作方式。接下来,我们将看看如何编写我们自己的自定义表格计算。
自定义表格计算
在我们开始一些实际示例之前,先简要讨论一下如何编写自己的表格计算,而不是使用快速表格计算。您可以通过创建一个新计算,并在函数下拉列表中选择表格计算来查看可用的表格计算函数列表。
对于每个示例,我们将设置计算方式 | 类别。这意味着部门将作为分区。
您可以将表格计算分解为几个类别。以下表格计算可以像其他函数一样组合甚至嵌套。
元表格函数
这些是提供有关分区和寻址信息的函数。这些函数还包括索引、第一个、最后和大小:
-
索引给出在分区内寻址时的增量。
-
第一个给出分区中第一行的偏移量,因此每个分区中的第一行为0,下一行为-1,接下来是-2,以此类推。
-
最后给出分区中最后一行的偏移量,因此每个分区中的最后一行为0,倒数第二行为1,接下来是2,以此类推。
-
大小给出分区的大小。
以下图片展示了各种函数:

图 6.19:元表格计算
索引、第一个和最后都受到范围/分区和方向/寻址的影响,而大小将在分区的每个地址上给出相同的结果,无论指定了什么方向。
查找和前一个值
这两个函数中的第一个允许你引用其他行中的值,而第二个允许你将值向前传递。从以下截图可以看出,方向对这两个函数非常重要:

图 6.20:查找和 Previous_Value 函数(尽管 Previous_Value 包含下面描述的额外逻辑)
这两种计算都是通过类别来定位的(因此部门是分区)。
这里,我们使用了代码 Lookup(ATTR([Category]), -1),它查找当前行上偏移 -1 的类别值。每个分区中的第一行会得到 NULL 结果(因为它之前没有行)。
对于 Previous_Value,我们使用了以下代码:
Previous_Value("") + "," + ATTR([Category])
请注意,在每个分区的第一行中,没有前一个值,因此 Previous_Value() 仅返回我们指定的默认值:空字符串。然后它与逗号和该行的类别拼接,得到值 书柜。
在第二行中,书柜是前一个值,它与逗号及该行的类别一起拼接,得出值 书柜, 椅子与椅垫,然后这个值成为下一行的前一个值。这个模式在整个分区中继续进行,然后在由部门 办公用品 定义的分区中重新开始。
运行函数
这些函数沿方向/定位运行,包括 Running_Avg()、Running_Count()、Running_Sum()、Running_Min() 和 Running_Max(),如下所示:

图 6.21:运行函数
请注意,Running_Sum(SUM[Sales])) 会继续将销售总和加到每个分区行的累计总和中。Running_Min(SUM[Sales])) 在遍历分区中的各行时,会保持遇到的最小销售总和。
窗口函数
这些函数一次性操作整个分区的所有行,基本上是对聚合结果进行聚合。它们包括 Window_Sum、Window_Avg、Window_Max 和 Window_Min 等,如下截图所示:

图 6.22:窗口函数示例
Window_Sum(SUM([Sales]) 对整个窗口内的销售额求和(在此情况下,为部门内所有类别的销售额)。Window_Max(SUM([Sales]) 返回窗口内销售额的最大总和。
你可以向窗口函数传递可选参数,以进一步限制窗口的范围。窗口始终最多限制在分区内。
排名函数
这些函数提供了基于聚合值的多种排名方式。排名有多种变体,允许你决定如何处理并列项以及排名的密集程度,如下截图所示:

图 6.23:排名函数示例
Rank(SUM([Sales]))计算返回部门内各类别销售额总和的排名。
脚本函数
这些函数允许与 R 分析平台或 Python 集成,任一平台都可以包含从高级统计到预测建模的简单或复杂脚本。深入探讨所有可能的功能超出了本书的范围,但文档和示例可以在 Tableau 的官网和 Tableau 社区的各种成员处轻松获取。
比如,Bora Beran 有一篇很棒的帖子:www.tableau.com/about/blog/2016/11/leverage-power-python-tableau-tabpy-62077
Total 函数
Total函数值得单独列出,因为它的功能与其他函数略有不同。与在缓存中的聚合表上工作的其他函数不同,Total会重新查询构成给定分区的所有源数据行。在大多数情况下,这将产生与窗口函数相同的结果。
例如,Total(SUM([Sales]))给出的结果与Window_Sum(SUM([Sales]))相同,但Total(AVG([Sales]))可能会与Window_AVG(SUM([Sales]))给出的结果不同,因为Total给出的是真实的底层行的平均值,而Window函数给出的则是各个和的平均值。
在本节中,我们已经了解了许多表计算函数。这些函数将为你提供解决各种实际问题和回答许多问题的构建模块。从排名到年度比较,你现在已经有了成功的基础。接下来,我们将进入一些实际示例。
实际例子
在了解了表计算的一些基本概念之后,我们来看一些实际的例子。我们将举几个例子,尽管表计算的实际应用几乎是无穷无尽的。你可以做从累计和分析年度增长到查看各类别之间的百分比差异等等。
年度增长
你可能经常需要比较年度数据。我们的客户基础在过去一年增长了多少?每个季度的销售额与去年同季度的销售额相比如何?这些问题可以通过同比增长来回答。
Tableau 将同比增长作为快速表计算的一个选项。举个例子,这是一个展示按季度划分的销售额视图,并展示与去年同季度销售额的百分比差异:

图 6.24:销售的同比增长
第二个 Sum(Sales) 字段应用了 年度增长 快速表格计算(并且 标记 类型已更改为条形图)。您会注意到右下角有 >4 个空值 的指示符,这提醒您至少有四个空值(因为没有 2016 年可以与 2017 年的季度进行比较,所以这很合理)。
如果您过滤掉了 2017 年,空值将出现在 2018 年,因为表格计算只能在缓存中存在的汇总数据上操作。任何应用于数据的常规过滤器都在源头上应用,排除的数据永远不会进入缓存。
尽管像这个示例一样构建视图非常简单,但请小心,因为 Tableau 假设视图中的每一年都有相同数量的季度。例如,如果 2017 年的 Q1 数据不存在或被过滤掉,那么结果视图可能不会完全符合您的预期。例如,考虑以下情况:

图 6.25:年度销售增长——但如果第一年缺少 Q1,则无法正常工作
这里的问题是,Tableau 使用 年份 和 季度 作为寻址,并且在 订单日期年份 的 At the Level 值上计算快速表格计算。这在假设所有季度都存在的情况下有效。然而,在这里,2018 年的第一季度被匹配到了 2017 年的第一季度,而实际是 Q2。为了解决这个问题,您需要编辑表格计算,仅使用 年份 作为寻址。然后,季度 成为分区,比较将会在正确的季度之间进行。
另一个需要考虑的问题是:如果您不想在视图中显示 2017 年该怎么办?将其过滤掉会导致 2018 年出现问题。在这种情况下,我们将在本节后面介绍 表格计算过滤 或 延迟过滤。另一种删除 2017 年但仍然保留其数据值的方法是右键点击视图中的 2017 年标题,并选择 隐藏。
隐藏是一个特殊命令,它可以防止 Tableau 渲染数据,即使数据存在于缓存中。如果您在隐藏之后决定重新显示 2017 年,可以使用 订单日期年份 字段的菜单,选择 显示隐藏数据。或者,您可以使用菜单选择 分析 | 显示隐藏数据。
您可能还希望在视图中隐藏空值指示符。您可以通过右键点击指示符并选择 隐藏指示符 来实现。点击指示符后,将显示过滤数据或将其作为默认值(通常为 0)的选项。
年度增长(或任何周期与另一个周期的比较)是一个常见的分析问题,表格计算可以帮助您回答这个问题。接下来,我们来看一个表格计算实际应用的例子。
动态标题与总计
你可能已经注意到每个视图中显示的标题。还有一些标题说明,除非你特别打开它们,否则是不会显示的(要打开这些标题说明,请从菜单中选择工作表 | 显示标题说明)。
默认情况下,标题显示的是工作表名称,标题说明被隐藏,但你可以显示并修改它们。有时,你可能希望显示一些总计,以帮助最终用户理解广泛的背景或立即掌握数据的规模。
例如,下面是一个视图,允许用户选择一个或多个Region,然后查看每个Region中各州的Sales:

图 6.26:两个区域的各州销售情况
显示随着用户选择不同区域而变化的状态数可能会很有用。你可能首先想到对State进行聚合,比如使用Count Distinct。然而,如果你尝试在标题中显示这个聚合值,你会始终看到值为1。为什么?因为视图的详细级别是State,每个州的独立状态数是1!
但是,有些表格计算选项可以让你进一步聚合聚合值。或者,你可能会考虑根据窗口的大小来确定表格中的值的数量。实际上,这里有几种可能性:
-
获取总的不同计数:
TOTAL(COUNTD([State])) -
获取窗口内的总和:
WINDOW_SUM(SUM(1)) -
获取窗口大小:
SIZE()
你可能记得,窗口是由范围或分区确定的边界所定义的。无论我们选择哪种方式,我们都希望将窗口定义为整个表格。使用Table (down)的相对计算或使用所有维度的固定计算都可以实现这一目标。这里是一个展示动态标题和标题说明中三种选项的视图:

图 6.27:可以使用各种表格计算来实现标题中的总计
这个示例说明了你如何使用各种表格计算在更高的细节层次上工作,特别是计数视图中所有的状态。这项技术将帮助你在使用 Tableau 时解决各种分析问题。现在,让我们转向另一种可以解决许多问题的技术。
表格计算过滤(延迟过滤)
假设你构建了一个视图,允许你查看每个部门的总销售额百分比。你已经对Sales字段使用了快速表格计算,得到了总销售额的百分比。你还使用了Department作为过滤器。但这会带来一个问题。
由于表格计算是在聚合数据返回到缓存后执行的,因此部门的过滤器已经在数据源中进行了评估,聚合行不包括任何被过滤器排除的部门。因此,总百分比始终会加起来为 100%;也就是说,这是过滤后总数的百分比,如下截图所示:

图 6.28:当“办公用品”被过滤掉时,百分比表格计算将其余部门的百分比加总为 100%
如果你想看到所有部门的总销售百分比,即使你想排除某些部门的显示,怎么办?一种选择是使用表格计算作为过滤器。
你可能会创建一个名为部门(表格计算过滤器)的计算字段,代码为LOOKUP(ATTR([Department]), 0)。Lookup()函数使其成为表格计算,而ATTR()将部门视为聚合(本节末尾将提供更多解释)。第二个参数0告诉查找函数不要向前或向后查找。因此,计算返回所有部门的值,但作为表格计算结果。
当你将表格计算放置在过滤器架上,而不是部门维度时,过滤器不会在源头上应用。相反,所有的汇总数据仍然保存在缓存中,而表格计算过滤器仅仅是隐藏了视图中的数据。其他表格计算,例如总计百分比,仍然会在缓存中的所有数据上进行操作。在这种情况下,即使表格计算过滤器隐藏了一个或多个数据,如下图所示,仍然允许计算所有部门的总百分比:

图 6.29:当使用表格计算过滤器时,缓存中所有的汇总数据都可用于计算所有部门的总销售百分比
你可能注意到了ATTR函数的使用。记住,表格计算需要聚合的参数。ATTR(即属性的缩写)是一种特殊的聚合,当某个字段在给定的详细级别上只有一个值时,它返回该字段的值,如果该字段有多个值,则返回*。
为了理解这一点,可以尝试在视图中同时使用部门和类别作为行。在视图中激活字段的下拉菜单,将类别更改为属性。由于每个部门都有多个类别,它将显示为*。然后,撤销操作并将部门更改为属性。由于每个类别只有一个部门,它将显示部门名称。
在这个例子中,我们已经看到如何有效地使用表格计算作为过滤器,当我们需要其他表格计算在缓存中的所有数据上操作时。
总结
在本章中,我们已经覆盖了许多与表格计算相关的概念。你现在已经具备了使用简单快速表格计算的基础,并能够利用高级表格计算的强大功能。我们讨论了作用域和方向的概念,这些概念适用于相对于视图的行列布局操作的表格计算。我们还考虑了与地址和分区相关的概念,这些概念适用于计算固定在某些维度上的表格计算。
我们所讨论的实际例子仅仅触及了可能实现的一部分,但应该能让你对可以达成的目标有所了解。能够解决的问题种类以及能够回答的问题的多样性几乎是无穷无尽的。
在接下来的几章中,我们将转向一些较轻松的话题,讨论格式化和设计,但在结束之前,我们肯定还会看到一两个表格计算的例子!
第七章:制作既美观又实用的可视化
Tableau 默认应用了许多优秀的视觉实践,对于快速分析来说,你可能不需要过多担心改变这些默认设置。然而,在考虑如何最好地传达你所发现的数据故事时,你需要考虑如何利用一切,从字体和文本到颜色和设计,以便能够与观众有效沟通。
Tableau 的格式化选项提供了相当大的灵活性。字体、标题、说明、颜色、行列带状、标签、阴影、注释等等,都可以自定义,以使你的可视化讲述一个令人印象深刻的故事。
本章将涵盖以下主题:
-
可视化考虑因素
-
在 Tableau 中利用格式化
-
为可视化添加价值
当你思考为什么要调整某个可视化时,有几个方面需要考虑。我们将从这些考虑因素开始。
可视化考虑因素
从你开始将字段拖放到架子上,Tableau 就采用了良好的格式化和可视化实践。你会发现离散调色板使用了易于区分的颜色,字体令人愉悦,网格线在适当的位置较为淡薄,数字和日期遵循元数据中定义的默认格式设置。
默认格式化对于发现和分析来说已经足够。如果你的重点是分析,可能不需要花太多时间微调格式,直到你准备好分享结果。然而,当你思考如何将数据传达给他人时,你可能会考虑格式化的调整如何对数据故事的传达效果产生重大影响。
有时,你可能会有特定的格式化偏好,或者有一套公司指南来决定字体和颜色的选择。在这种情况下,你可以在一个空白工作簿中设置格式化选项,并将其保存为模板。每当你希望开始一组新的视图和仪表板时,可以复制这个工作簿文件。
以下是你应该考虑的一些事项:
-
受众:受众是谁,他们的需求是什么?
-
目标:目标是引发情感反应,还是为做出热烈的决策列出事实?你是在突出需要采取的行动,还是仅仅想引发对某个话题的兴趣?
-
设置:这是数据故事传达的环境。是一个正式的商业会议,格式应该体现高度的专业性吗?还是将要以非正式的方式分享到博客上?
-
模式:可视化将如何呈现?你需要确保行、列、字体和标记足够大,适合投影仪使用,或者足够紧凑,适合 iPad。如果你将数据发布到 Tableau Server、Tableau Online 或 Tableau Public,那么你是否选择了适合网络的安全字体?你是否需要使用设备设计器来为仪表板创建不同版本?
-
情感:某些颜色、字体和布局可以用来设置情感。数据是否讲述了一个应该激发某种反应的故事?数据故事是严肃的还是轻松的?例如,红色可能意味着危险、负面结果或表明需要采取某些行动。然而,你需要对你的观众和具体情境保持敏感。颜色在不同的文化和情境中有不同的含义。在一些文化中,红色可能表示喜庆或幸福。此外,如果红色是公司标志的颜色,那么它可能并不是传达负面情绪的好选择。
-
一致性:通常来说,在所有可视化中使用相同的字体、颜色、形状、线条粗细和行条带。尤其是当它们将在仪表板上一起查看或在同一个工作簿中使用时。这也特别适用于考虑如何在整个组织内保持一致性,而不显得过于死板。
这些考虑因素将指导你的设计和格式化决策。与使用 Tableau 的其他所有工作一样,把设计视为一个迭代过程。经常从你的目标观众那里获取反馈,并根据需要调整你的做法,确保你的沟通尽可能清晰和有效。格式化的最终目标是更有效地传达数据。
利用 Tableau 中的格式化
本章将重点介绍工作表级别的格式化,因为我们已经在第二章《在 Tableau 中连接数据》中涵盖了元数据,而第八章《用仪表板讲述数据故事》将涵盖仪表板和故事。然而,了解 Tableau 格式化的全局视角是有益的。
Tableau 使用默认格式,包括默认字体、颜色、阴影和对齐方式。此外,还有多个格式化级别可以进行自定义,如下图所示:

图 7.1:Tableau 中的格式化级别
让我们更详细地了解这些内容:
-
数据源级别:我们已经看过如何为数字和日期字段设置默认格式。其他默认设置,如颜色和形状,也可以通过数据面板中的下拉菜单上的默认属性菜单进行设置。
-
工作簿级别:可以设置各种全局格式选项。从菜单中选择格式 | 工作簿。
-
故事级别:导航到故事标签并选择格式 | 故事(或故事 | 格式)来编辑特定于故事元素的格式。这些包括自定义阴影、标题、导航器和描述的选项。
-
仪表板级:仪表板特定元素可以进行格式化。在查看仪表板时,选择格式 | 仪表板(或仪表板 | 格式)以指定仪表板标题、副标题、底纹和文本对象的格式。
-
工作表级别:我们将考虑各种选项。以下类型的格式化可用于工作表:
-
工作表格式化:这种格式化包括字体、对齐、底纹、边框和线条。您可以覆盖整个工作表的格式化以进行行和列特定的格式化。
-
字段级格式化:这种格式化包括字体、对齐、底纹以及数字和日期格式。这种格式化是特定于字段在当前视图中的显示方式。您在字段级别设置的选项会覆盖工作表级别设置的默认值。数字和日期格式也会覆盖默认字段格式化。
-
附加格式化:可以应用于标题、说明、工具提示、标签、注释、参考线、字段标签等的附加格式化。
-
-
富文本格式化:标题、说明、注释、标签和工具提示都包含可以使用不同字体、颜色和对齐方式进行格式化的文本。这种格式化是特定于各个文本元素的。
让我们从检查工作簿级格式化开始。
工作簿级格式化
Tableau 允许您在工作簿级别设置某些格式化默认值。要查看选项并更改默认值,请单击格式 | 工作簿... 现在左侧窗格将显示工作簿的格式化选项:

图 7.2:工作簿格式化选项
选项包括更改默认字体,适用于视图或仪表板的各个部分,以及默认线条,适用于可视化中使用的各种线条类型。还请注意恢复默认值按钮,如果您希望恢复默认格式化。这里的任何更改都将影响整个工作簿。
有时,您会希望应用于特定工作表的格式化,接下来我们将考虑这一点。
工作表级格式化
您已经看到如何在以前的章节中编辑元数据,我们将在未来的章节中详细介绍仪表板和故事。因此,我们将把注意力转向工作表级格式化。
在具体调整格式化之前,考虑与格式化相关的视图的以下部分:

图 7.3:使用工作表级格式化可以进行格式化的视图部分
此视图由以下部分组成,可以进行格式化:
-
行的字段标签:可以通过菜单(格式 | 字段标签...)或右键点击视图中的字段标签并选择格式...来进行格式设置。此外,您也可以通过菜单(分析 | 表格布局,然后取消勾选显示字段标签的选项)或右键点击视图中的字段标签并选择隐藏选项来隐藏字段标签。如果需要,您可以使用分析 | 表格布局菜单选项重新显示它们。
-
列的字段标签:这些字段标签与行的标签选项相同,但它们可以独立于行字段标签进行格式设置或显示/隐藏。
-
行标题:这些标题将遵循一般标题的格式设置,除非您为行单独指定不同的标题格式。请注意,小计和总计也有标题。小计和总计的标题分别标记为a和b。
-
列标题:这些标题将遵循一般标题的格式设置,除非您为列单独指定不同的标题格式。请注意,小计和总计也有标题。在前面的截图中标记的总计标题就是列标题。
-
面板:许多格式设置选项包括将面板与标题进行不同格式设置的功能。
-
总计(列)面板:这是用于总计的面板,可以在工作表或列级别进行格式设置。
-
总计(行)面板:这是用于总计的面板,可以在工作表或行级别进行格式设置。
工作表级别的格式设置是通过格式窗口完成的,格式窗口会出现在左侧,取代数据面板的位置。
要查看格式窗口,请从菜单中选择格式,然后选择字体...、对齐...、阴影...、边框...或线条...:

图 7.4:工作表的格式选项
您还可以右键点击视图中的几乎任何元素并选择格式。这将打开特定于所选元素上下文的格式窗口。只需确保格式窗口的标题与您的预期一致。当您进行更改时,视图应立即更新以反映您的格式设置。如果没有更新,您可能是在格式窗口的错误选项卡中工作,或者您可能在较低级别(例如行)进行格式设置,这会覆盖在较高级别(例如工作表)所做的更改。
现在您应该能够在左侧看到格式窗口,在这种情况下是格式字体。它看起来应该是这样的:

图 7.5:格式字体面板
注意格式窗口中的以下关键方面:
-
窗口的标题将为您的格式选择提供上下文信息。
-
顶部的图标与格式菜单的选择项相匹配。这使您可以轻松地浏览这些选项,而无需每次都返回菜单。
-
三个标签,工作表、行和列,允许你在工作表级别指定选项,然后在行和列级别覆盖这些选项和默认值。例如,你可以为行总计设置不同于列总计的窗格和标题字体(尽管这种选择可能会显得突兀,不推荐使用!)。
-
右上角的字段下拉菜单允许你在字段级别进行格式微调。
-
你所做的任何更改都会预览,并通过加粗标签显示,表明该格式选项已经从默认设置进行了更改(注意到总计下的标题字体已被自定义,导致标题标签文字显示为加粗)。
清除格式的三种选项如下:
清除单个选项:在格式窗口中,右键单击你已更改的任何单个选项的标签或控件,然后从弹出菜单中选择清除。
清除所有当前选项:在格式窗口底部,点击清除按钮以清除所有可见的更改。此操作仅适用于你当前在格式窗口中看到的内容。例如,如果你在行标签上查看阴影并点击清除,那么仅行标签上的阴影选项会被清除。
清除工作表:从菜单中选择工作表 | 清除 | 格式。你也可以通过工具栏上的清除项目的下拉菜单来实现。这将清除当前工作表上的所有自定义格式。
其他格式选项(如对齐和阴影)与字体选项的工作方式非常相似。只有少数细节需要注意:
-
对齐包括水平和垂直对齐、文本方向和文本换行的选项。
-
阴影包括行和列带状效果的选项。带状效果允许交替的阴影模式,帮助区分或分组行和列。默认情况下,文本表格启用了浅色行带状效果,但在其他可视化类型中也可能有用,例如水平条形图。行带状效果可以设置为不同的级别,级别与行或列架上出现的离散(蓝色)字段数对应。
-
边框指的是绘制在单元格、窗格和标题周围的边框。它包括行和列分隔符选项。你可以在视图中看到部门之间的分隔符。默认情况下,边框的级别是基于行或列中的倒数第二个字段设置的。
-
线条指的是通过坐标轴绘制的线条。这包括网格线、参考线、零线和坐标轴标尺。你可以从菜单的格式选项访问更多完整的参考线和掉线选项。
我们已经考虑了如何在整个工作簿级别以及特定工作表级别调整格式。现在,让我们将注意力转向字段级别的格式调整。
字段级格式
在格式窗口的右上角有一个小的下拉菜单,标签为 字段。选择该下拉菜单会显示当前视图中的字段列表,选择一个字段会更新格式窗口,以显示适合该字段的格式选项。例如,这是 SUM(Sales) 字段所显示的窗口:

图 7.6:字段级格式化的格式窗格
格式窗口的标题会提醒你正在格式化的字段。从窗口左上角选择 字体、对齐方式 等图标将切换回工作表级别的格式设置。但是,你可以在 轴 和 窗格 选项卡之间切换。这两个选项卡允许你对字段在标题或作为轴标签使用时与在视图窗格中的格式进行不同的格式设置。字段的选项包括 字体、对齐方式、阴影 以及 数字 和 日期 格式。最后两个选项将覆盖任何默认的元数据格式。
你会注意到某些类型字段有特殊的格式选项。数字字段支持广泛的格式化选项,甚至包括自定义格式化功能,接下来我们将讨论这个。
自定义数字格式
当你更改数字格式时,可以从几种标准格式中选择,也可以选择自定义格式。自定义格式允许你输入一个格式字符串,Tableau 将根据该字符串来格式化数字。你的格式字符串可以使用井号/符号(#)、逗号、负号和括号的组合,同时可以使用被引号括起来的文字字符串来指示数字的显示方式。
格式字符串最多可以包含三个条目,用分号分隔,分别表示正数、负数和零的格式。
这里有一些示例,假设正数为 34,331.336,负数为 -8,156.7777:

图 7.7:格式字符串示例及结果值
你可以通过 Starter 或 Complete 工作簿中的 自定义数字格式 视图来复制这些示例并尝试其他格式字符串:

图 7.8:在第七章工作簿中使用自定义数字格式视图实验格式字符串
注意 Tableau 如何根据格式字符串对数字的显示进行四舍五入。请始终注意,你在文本、标签或标题中看到的数字可能由于格式设置而被四舍五入。
还可以观察到,你可以将格式字符(如井号、逗号和小数点)与字符串混合使用。所示的第四个示例将提供一个标签,其中零值通常会显示在该位置。
最后,注意最后一个示例使用了 Unicode 字符,这为你提供了广泛的可能性,例如显示度数或其他单位的测量。Unicode 字符可以在 Tableau 中的文本框、标题、字段名称和标签、别名等地方使用!
选择一个接近你想要的预定义格式,然后切换到自定义格式,可以让你从一个接近你所需格式的自定义格式字符串开始。
自定义日期格式化
以类似的方式,你可以使用自定义字符串定义自定义日期格式。下表说明了基于不同格式字符串对日期值 11/08/2018, 1:30 PM 的一些可能格式化:

图 7.9:一些可能的日期格式示例
这些仅仅是示例,你可以根据需要添加任意多的字面字符串。
查看自定义日期格式字符串选项的完整列表,请访问 onlinehelp.tableau.com/current/pro/desktop/en-us/dates_custom_date_formats.html。
注意,在这个示例中,应用某些自定义日期格式如何提高轴线的可读性:

图 7.10:这里使用的自定义格式字符串是 mmmmm,这会将月份表示为单个字母。
当你有需要格式化的数值时,自定义数字和日期格式是可以使用的。但如果没有数值呢?也就是说,如何格式化NULL值?我们接下来来探讨这个问题。
空值格式化
格式化字段的另一个方面是特别格式化空值。当格式化字段时,选择窗格标签并找到特殊值部分,如以下截图所示:

图 7.11:格式窗格中出现的特殊值选项
在字段值为空时,输入你希望在窗格中显示的任何文本(在文本字段中)。你还可以选择标记显示的位置。标记下拉菜单提供了多种选项,用于定义当使用轴时空值的标记应如何绘制。你有以下选项:
-
在指示器处显示会在视图的右下角显示一个小指示器,标明空值的数量。你可以点击该指示器选择过滤空值或将其显示为默认值。你也可以右键点击该指示器将其隐藏。
-
显示为默认值将在默认位置(通常为 0)显示标记。
-
隐藏(连接行)不会为空值放置标记,但会连接所有非空值之间的线条。
-
隐藏(断开行)会在不显示空值的位置打断行。
你可以在以下截图中看到这些选项,两个空值的位置由灰色带标示。
在指示器处显示不会在灰色区域显示标记,但会在右下角指示空值的数量:

图 7.12:在指示器处显示
显示为默认值将在0处放置标记并连接线条:

图 7.13:显示为默认值
隐藏(连接线条)移除缺失值的标记,但会连接现有的标记:

图 7.14:隐藏(连接线条)
隐藏(断开线条)移除缺失值的标记,并且不连接现有的标记:

图 7.15:隐藏(断开线条)
这些选项中的任何一个可能都能很好地使用,但需要考虑每个选项如何传达信息。连接线条可能有助于传达随时间变化的趋势,但也可能会减少缺失数据的显示。断开线条可能有助于突出缺失值,但可能会削弱整体信息。你需要根据本章开始时提到的考虑因素,决定哪个选项最符合你的目标。
你会注意到,之前的折线图在视图中每个标记的位置都有小圆圈标记。当标记类型为线条时,点击颜色架会打开一个菜单,提供标记的选项。所有标记类型都有标准选项,如颜色和透明度。一些标记类型支持其他选项,如边框和/或光环,正如这里所示:

图 7.16:向线条添加标记
了解这些选项将帮助你在思考如何传达缺失数据时做出决策,但始终要记得,另一种可视化类型,如条形图,可能在传达缺失值方面更加有效:

图 7.17:条形图有时比折线图更适合展示缺失值
了解如何格式化空值为你提供了一些选项,帮助你考虑如何传达数据。我们来看一下几个额外的选项。
其他格式化选项
还可以通过格式窗口访问其他格式化选项。这些选项包括以下内容:
-
参考线的众多选项
-
下拉线的线条和文本选项
-
标题和说明的阴影和边框选项
-
注释的文本、框和线条选项
-
字段标签的字体、阴影、对齐和分隔符选项
-
图例、快速筛选和参数的标题和主体选项
-
单元格大小和工作簿主题选项
你会发现这些选项大多数比较直观。一些选项可能不太明显:
-
下拉线,即从标记到坐标轴的连线,可以通过右键点击视图中带有坐标轴的空白区域并选择下拉线 | 显示下拉线来启用。使用相同的右键菜单并选择编辑下拉线,可以访问其他选项。下拉线仅在 Tableau Desktop 和 Reader 中显示,但在视图发布到 Tableau Server、Online 或 Public 时不可用。
-
标题和说明可以通过从菜单中选择工作表并选择所需选项来显示或隐藏。除了可以应用于标题和说明的标准格式外,还可以通过双击标题或说明、右键点击标题或说明并选择编辑,或通过使用标题或说明的下拉菜单(或仪表板视图的下拉菜单)来编辑和专门格式化标题或说明的文本。标题和说明的文本可以动态地包括参数的值、视图中任何字段的值,以及某些其他数据和工作表特定的值。
-
注释可以通过右键点击视图中的标记或空白区域,选择注释,然后选择以下三种注释类型之一来创建:
-
标记注释与视图中的特定标记相关联。如果该标记未显示(由于过滤器或坐标轴范围),则注释也不会显示。标记注释可以显示定义标记或其位置的任何字段的值。
-
点注释固定在视图中的特定点上。如果该点在视图中不可见,则注释将消失。点注释可以显示定义点位置的任何字段值(例如,坐标轴的坐标)。
-
区域注释包含在一个矩形区域内。所有注释的文本可以动态地包括参数的值,以及某些其他数据和工作表特定的值。
-
您可以通过在查看源工作表时,从格式菜单中选择复制格式,将格式从一个工作表复制到另一个工作表(无论是在同一工作簿内还是跨工作簿)。然后,在查看目标工作表时,从格式菜单中选择粘贴格式(或者从目标工作表标签的右键菜单中选择该选项)。
该选项将把源工作表上所有的自定义格式应用到目标工作表。然而,在编辑标题、说明、标签和工具提示的文本时所应用的特定格式不会被复制到目标工作表。
我们现在已经考虑了格式化工作簿、单独工作表、字段、数字、日期和空值的许多选项。接下来,让我们考虑如何利用其中一些技巧来真正帮助我们更好地理解数据。
为可视化添加价值
现在我们已经了解了 Tableau 中格式化的工作方式,接下来我们来看看格式化如何为可视化增加价值。
在应用自定义格式时,始终问问自己格式化到底为数据理解带来了什么。它是否使可视化更清晰、更易理解?还是只是在增加杂乱和噪音?
一般来说,尝试采用简约的方式。从可视化中移除所有不必要的内容。强调重要的数值、文本和标记,同时降低那些仅提供支持或上下文的内容的重点。
请考虑以下可视化,均使用默认格式:

图 7.18:默认格式通常适用于数据发现和快速分析,但在向他人清晰传达和强调数据故事时,可能会显得过于杂乱。
默认格式效果相当不错,但将其与这个可视化进行比较:

图 7.19:格式化可以使可视化看起来更简洁,并更有效地传达数据。
上述两个图表均展示了按季度划分的销售额,并过滤到办公用品部门。第一个视图使用默认格式。第二个视图进行了格式调整,包括以下内容:
-
标题已调整,包含了部门名称。
-
销售额已被格式化为以自定义货币显示,保留两位小数,单位为百万。这适用于轴和注释。通常,高精度可能会让可视化变得杂乱。数据的初始视图为我们提供了趋势和足够的细节,以了解数量级的顺序。工具提示或额外视图可以用于显示详细信息并提高精度。
-
轴标签已通过右键单击轴、选择编辑轴,然后清除文本的方式移除。视图的标题清楚地表明你正在查看
销售额。仅凭数值可以揭示第二个轴是按季度划分的。如果数据中包含多个日期,你可能需要指定当前使用的是哪个日期。根据你的目标,你可能考虑完全隐藏轴。 -
行上的网格线已被移除。网格线可以为视图增值,尤其是在能够确定数值至关重要的视图中。然而,它们也可能让视图显得杂乱并分散注意力。你需要根据视图本身和你要讲述的故事来决定网格线是否有帮助。
-
趋势线的格式已调整为与线条颜色匹配,尽管它较浅且较细,以降低其突出程度。此外,置信区间已被移除。你需要根据自己的需求和观众来决定这些置信区间是否提供了上下文或只是增加了杂乱。
-
注释中的线条、阴影和框已被移除,以减少杂乱。
-
注释的大小和颜色已更改,以使其更加突出。如果目标只是突出显示线上的最小值和最大值,标签可能是更好的选择,因为它们可以设置为仅显示最小/最大。然而,在这个例子中,较小的数字实际上是视图中的第二低点。
-
坐标轴刻度和刻度线已被强调并着色,以匹配标记和参考线(坐标轴刻度在格式窗口的线条选项下可用)。
格式化也可以用来显著改变可视化的外观。考虑以下图表:

图 7.20:可以通过设置视图的阴影来设置深色背景
该可视化与先前的视图几乎相同。然而,已经对工作表和标题应用了阴影。此外,字体根据需要进行了加亮或加暗,以便在深色背景上显示清晰。有些人认为这种格式更加赏心悦目,尤其是在移动设备上。如果视图要嵌入到带有深色主题的网站中,这种格式可能会非常受欢迎。然而,某些文本在深色背景下可能会更难以阅读。你需要考虑你的受众、环境和交付方式,来判断这种格式是否适合你的情况。
使用深色背景时,顺序色彩调色板(基于连续字段的单色渐变)应该被反转。这是因为,较浅(较低)到较深(较高)的默认设置在白色背景上效果良好,其中较深的颜色突出显示,而较浅的颜色会逐渐融入白色。在黑色背景上,较浅的颜色突出显示,较深的颜色会渐变为黑色。你可以在双击图例或右键单击图例选择编辑颜色...并勾选反转时找到反转选项。
工具提示
由于工具提示并不总是可见,它们是可视化中容易被忽视的方面。然而,它们增添了一种微妙的专业感。考虑以下默认工具提示,当最终用户将鼠标悬停在前面截图中显示的一个标记上时,显示的工具提示:

图 7.21:默认工具提示
与这个工具提示进行对比:

图 7.22:自定义工具提示
工具提示通过点击工具提示在标记卡片上编辑,打开一个编辑器,允许在工具提示中进行丰富的文本编辑:

图 7.23:工具提示编辑器
该编辑器类似于用于编辑标签、标题、说明和注释文本的编辑器。你可以输入文本并根据需要进行格式化。此外,编辑工具提示对话框还具有一些额外的功能:
-
右上角的插入下拉菜单允许你插入工作表、字段、参数和其他动态值。这些特殊或动态的文本对象在文本编辑器中作为标签包围(例如,
<SUM(Sales)>)。稍后我们将考虑工作表的特殊情况。 -
一个复选框选项显示工具提示,以及一个下拉菜单,用于指示工具提示的样式(响应式 - 即时显示工具提示或悬停时显示)。
-
一个复选框选项包括命令按钮。这是默认设置,你可以在本节的第一个未编辑的工具提示中看到这些命令按钮。命令按钮包括包含、排除、创建集合等选项。许多选项仍然可以通过右键点击访问,因此将它们从工具提示中删除并不会完全阻止用户访问它们。
-
一个复选框选项允许按类别选择。启用时,这个功能允许用户点击工具提示中显示的维度值,从而选择与该值相关联的所有标记。
对于那些不会显著且有意提升用户体验的视图,考虑取消勾选显示工具提示。
Viz in Tooltip
Tableau 允许你将可视化嵌入到工具提示中,这些可视化会根据你悬停在不同标记上的位置动态过滤。通常称为Viz in Tooltip,它大大扩展了终端用户的交互性,提供了深入挖掘细节的能力,以及快速以不同方式查看数据的能力。
在前面的截图中,以下标签是通过选择插入 | 工作表 | 类别添加到工具提示中的:
<Sheet name="Categories" maxwidth="300" maxheight="300" filter="<All Fields>">
这个标签,你可以直接编辑文本进行修改,它告诉 Tableau 在工具提示中显示类别工作表的可视化。最大宽度和高度默认为 300 像素。过滤器指示哪个字段作为从工作表到“Viz in Tooltip”的过滤器。默认情况下,<所有字段>表示视图中的所有维度都会作为过滤器。然而,你可以指定一个字段列表,根据视图中存在的一个或多个维度进行特定过滤(例如,<部门>、<类别>)。
注意带有工具提示的最终视图:

图 7.24:Viz in Tooltip
使用“Viz in Tooltip”功能有很多可能性。首先,你可以利用该功能深入细节,而无需在仪表板上额外占用空间,也无需导航到一个单独的视图。其次,你可以显示数据的不同方面(例如:时间序列的地理位置作为工具提示)。最后,你可以考虑如何使用“Viz in Tooltip”来让终端用户在更广泛的背景下看到部分数据。
这个功能还有许多其他有价值的应用,下面是一些提示,帮助我们总结“Viz in Tooltip”功能:
-
你可以在单个工具提示中添加多个可视化。
-
将工作表的适应选项设置为适应整个视图,使其调整到最大宽度和高度。
-
你可以通过右键点击工作表标签并选择隐藏来隐藏工具提示中使用的工作表。要恢复它们,请右键点击工具提示中使用的工作表标签并选择取消隐藏工作表。
总结
格式化的目标是提高手头数据的有效传达。在进行格式化的迭代过程中,始终考虑受众、环境、模式、情绪和一致性。寻找能为你的可视化增值的格式化,避免无用的杂乱。
我们讨论了很多格式化选项——从工作簿级别的字体、颜色、线条等到单独的工作表和字段格式化。我们还讨论了如何自定义数字、日期和空值的格式,并且如何利用这些技巧为你的可视化增加价值。
了解 Tableau 中格式化的工作原理后,你将能够将你在发现和分析阶段创建的可视化精炼成一个极具效果的数据故事传达。
在下一章,我们将看看这些内容如何在仪表板中汇聚。
第八章:用仪表板讲述数据故事
在数据发现和分析过程中,你很可能会创建许多数据可视化。每一个可视化都为你提供了数据中某个故事的快照。每一个对数据的洞察都会回答一两个问题。有时,发现和分析阶段就足够让你做出关键决策,整个周期便完成了。在其他情况下,你需要将这些快照汇集在一起,向目标观众传达一个完整且有说服力的故事。
Tableau 允许你将相关的数据可视化整合到一个仪表板中。这个仪表板可以是对数据各方面的静态视图,或者是一个完全互动的环境,允许用户动态过滤、深入分析并与数据可视化进行交互。
在本章中,我们将通过几个深入的示例来探讨这些概念,逐步走过仪表板设计过程。像之前一样,不必担心记住一长串指令。相反,专注于理解仪表板的各个组件和方面为何以及如何发挥作用。
本章将涵盖以下内容:
-
仪表板简介
-
在 Tableau 中设计仪表板
-
适应不同显示器和设备的设计
-
通过操作实现互动性
-
故事
在本章的示例中,我们将回到前几章中使用的Superstore Sales示例数据。请创建一个新的工作簿并连接到该数据集,我们将从介绍仪表板的关键概念开始。
仪表板简介
在深入了解一些实际示例之前,先花点时间理解什么是仪表板,以及为什么你可能会创建一个仪表板。
仪表板定义
从 Tableau 的角度来看,仪表板是将单独的可视化以及其他组件,如图例、过滤器、参数、文本、容器、图像、扩展、按钮和网页对象,安排在一个画布上的方式。理想情况下,可视化和组件应共同工作,讲述一个完整且有说服力的数据故事。仪表板通常(但不总是)是互动的。
仪表板目标
仪表板的主要目标是将数据传达给特定的观众,并获得预期的结果。我们经常会谈论讲述数据故事。也就是说,数据中包含了一个或多个可以传达给他人的叙事。
尽管你可以通过单一的可视化或一系列复杂的仪表板讲述数据故事,但单个 Tableau 仪表板是最常见的讲述单一故事的方式。每个仪表板都旨在通过清晰展示特定信息来讲述一个故事。在构建故事之前,你应该了解数据讲述了什么故事。你如何讲述这个故事将取决于许多因素,比如你的观众、观众如何访问仪表板,以及你希望观众做出什么回应。
Stephen Few,数据可视化领域的领先专家之一,将仪表板定义为一种显示达成一个或多个目标所需最重要信息的可视化展示,这些信息被整合并排列在一个屏幕上,以便能够一目了然地进行监控。
该定义来自 Few 的论文 Dashboard Confusion,可以通过以下链接阅读:www.perceptualedge.com/articles/ie/dashboard_confusion.pdf。
这个定义有助于我们理解数据故事,并界定我们在 Tableau 中讲述数据故事时要遵循的一些关键边界。通常,你的数据故事应当遵循以下准则:
-
数据故事应当专注于最重要的信息。任何不传达或不支持核心故事的信息应当被排除。你可能希望将这些信息包含在其他仪表板中。
-
你讲述的数据故事必须符合你的关键目标。你的目标可能包括从提供信息到为进一步探索提供界面,再到促使观众采取行动或做出关键决策。任何不支持你的目标的内容,应当留给其他仪表板。
-
数据故事应该容易访问,且核心思想应当清晰。根据你的观众,你可能希望明确地陈述你的数据结论,或者你可能希望引导观众自己得出结论。
当你开始构建仪表板时,首先要仔细考虑你的目标。你的发现和分析应该已经揭示了有关数据及其故事的各种洞察。现在,责任在你,将这些发现和分析转化为一种有意义的方式,以传达故事并满足你的目标和观众的需求。你处理这一任务的方式被称为你的方法。
仪表板方法
根据你的目标,构建仪表板有许多可能的方法。以下列举的仅仅是一个不完整的清单:
-
引导分析:你已经进行了分析,得出了发现,因此对数据故事的含义有了深刻的理解。通常,设计一个能够引导观众经历类似发现过程的仪表板是有帮助的,这样他们就能清楚地认识到行动的必要性。例如,你可能已经发现了营销部门的浪费性开支,但团队可能在没有看到数据如何引导你得出这个结论的情况下,并不准备接受你的结果。
-
探索性:很多时候,当数据在下一个小时、下一个星期或下一个年份刷新时,你并不知道数据会讲述什么故事。今天可能看似不重要的部分,未来可能成为一个重要的决策点。在这种情况下,你的目标是为你的观众提供一个分析工具,使他们能够自主地探索和互动数据的各个方面。例如,今天,所有区域的客户满意度都很高。然而,你的仪表板需要让你的组织能够持续跟踪满意度变化,动态按产品和价格进行筛选,并观察与质量和交货时间等因素的相关性。
-
计分卡/状态快照:对于表示良好与不良绩效的关键绩效指标(KPI)或度量指标,通常会达成广泛共识。你不需要引导观众进行发现或强迫他们去探索。他们只需要一个高层次的总结,并能够深入细节,快速找到并解决问题,奖励成功。例如,你可能有一个仪表板,简单地显示仍未解决的支持工单数量。经理可以在移动设备上打开仪表板,并立即采取必要的行动。
-
叙事型:这种类型的仪表板强调一个故事。可能涉及探索性、引导性分析或绩效指标,但主要目的是从数据中讲述一个单一的故事。例如,你可能想讲述一种入侵性昆虫的传播故事,包括它的起源、传播速度、结果以及控制措施。你的仪表板应以一种可视化的方式,利用数据讲述这个故事。
我们将通过几个深入的示例来更好地理解这些不同的方法,并结合我们在前几章中学习的许多技能。首先,我们将介绍一些设计 Tableau 仪表板的关键方面。
你的仪表板可能采取混合方式。例如,你可能有一个探索性仪表板,突出显示一些关键绩效指标(KPI)。但是,务必小心不要让仪表板过于复杂。试图用单个仪表板实现多个目标往往会导致信息过载,变得混乱不堪。
Tableau 中的仪表板设计
无论你的目标或方法是什么,设计 Tableau 仪表板的实际任务每次看起来都差不多。在本节中,我们将介绍一些基本概念。
对象
仪表板由对象组成,这些对象被排列在画布上。你将在仪表板的左侧面板看到可以添加到仪表板中的对象列表:

图 8.1:可添加到仪表板的对象
该面板包含以下对象:
-
水平容器:一种布局容器,其中其他对象将在单一行(水平)中排列。
-
垂直:一个布局容器,其中其他对象将按单列(垂直)排列。
-
文本:允许您在仪表板中包含格式丰富的文本的对象。
-
图片:可以在仪表板上定位和调整大小的图像(例如
.gif、.png或.jpeg)。您还可以选择设置点击图片时的导航 URL。 -
网页:允许您在仪表板中嵌入网页内容的对象。您可以在设计时设置 URL。我们还会考虑如何使用动作动态更改 URL。
-
空白:一个空白对象,可用作占位符或提供间距选项。
-
导航:导航按钮允许您定义用户跳转到工作簿中的其他页面和仪表板。
-
导出:导出对象允许您创建一个链接或按钮,方便用户将仪表板导出为图像、PDF 或 PowerPoint。
-
扩展:由 Tableau 及第三方(甚至可能是您自己!)开发的一种日益增长的工具,利用扩展 API 为仪表板提供扩展功能。这可以使您实现诸如收集广泛的使用数据、动态更新参数、整合来自其他平台的可视化(如 D3)等更多功能。
除了可以通过侧边栏添加的对象外,还有其他可能适用于特定仪表板的对象:
-
过滤器:这些将作为控件显示,供最终用户选择过滤的值。
-
参数:类似于过滤器,这些将作为控件显示,供最终用户选择参数选项。
-
页面控件:这些是控件,允许最终用户分页查看数据,并可用于动画效果展示可视化和仪表板。
-
图例:这些包括颜色、大小和形状的图例,帮助最终用户理解各种可视化内容。
-
高亮器:这些允许用户在视图中高亮显示不同的维度值。
-
仪表板标题:一个特殊的文本对象,默认显示仪表板页面的名称。
平铺与浮动
对象可以是平铺的或浮动的。如果它是平铺对象,它会自动对齐到您拖动的仪表板或布局容器中。如果它是浮动对象,它将浮动在仪表板上并叠加显示。您可以更改浮动对象的层次顺序。
您会注意到,在前面的图片中,平铺或浮动按钮位于对象面板的正下方。这些按钮定义了您放置在仪表板上的对象的默认设置,但您可以更改任何给定对象的平铺或浮动状态。
按住Shift键,拖动对象时可以快速将其从平铺状态切换为浮动状态,或从浮动状态切换为平铺状态。
随着你在仪表板设计中的经验积累,你可能会更倾向于使用主要是瓷砖布局或主要是浮动布局的设计方式。(你可以在任何仪表板中混合使用瓷砖和浮动对象)。许多设计师发现其中一种设计方法更符合他们的风格。以下是一些考虑事项:
-
精度:浮动对象可以精确到像素级别进行调整和定位,而瓷砖对象则会大大依赖其容器的位置和大小。
-
速度:许多设计师发现,瓷砖布局的创建速度要快得多,因为他们不必担心精确度或层叠问题。
-
动态调整大小:浮动对象在固定大小的仪表板上表现良好,但如果仪表板根据窗口大小动态调整,则浮动对象会发生偏移,常常进入不理想的位置。瓷砖对象的移动和调整大小更为可靠(但并非总是完美!)。
-
灵活性:某些设计技巧可以通过浮动或瓷砖两种方式实现。例如,可以使用浮动技术将透明可视化层叠在背景图像上。然而,表单切换(我们将在第十一章,动态仪表板中讨论)通常是通过瓷砖布局实现的。
-
维护:浮动仪表板的布局变更可能比瓷砖布局的更困难且繁琐。
尝试各种设计技巧,并随意发展自己的风格!
操作仪表板上的对象
一旦某个对象成为仪表板的一部分,你可能希望对其进行操作。每个对象都有一些控制选项,当你选择该对象时,这些控制项将会显示:

图 8.2:选择仪表板对象后,将可以访问各种控制项
-
握柄:点击并拖动握柄来移动对象。
-
从仪表板中移除:点击此按钮可将对象从仪表板中移除。
-
转到工作表:要编辑仪表板上的单个可视化,请使用此按钮导航到单独的工作表。
-
用作筛选器:点击此处将启用视图作为筛选器。选择视图中的标记后,将会过滤仪表板上的其他视图。我们将在本章后面讨论筛选器操作的细节,以及如何更精确地控制视图如何作为筛选器使用。
-
更多选项:此下拉箭头将显示该对象的多种选项,包括参数和筛选器的控制显示选项;显示或隐藏视图上的标题或说明;向仪表板添加图例、参数和筛选器;格式化、布局和大小选项等。
-
对象大小边框:将鼠标悬停在边框上,光标会变为调整大小的光标。你可以拖动边框来调整对象的大小。
你可能会注意到,根据对象所在的容器类型以及对象是瓷砖还是浮动,尺寸行为有所不同。
在本章的前几节中,我们介绍了仪表板的理论基础以及设计中的一些关键元素。现在,让我们通过一个实际例子来应用这些概念。
用于理解盈利能力的仪表板
在涵盖了一些概念性话题以及与仪表板设计相关的实际事项之后,我们将深入一个示例。
假设你被要求帮助管理层找出最不盈利的商品。管理层认为,大多数最不盈利的商品应该从库存中淘汰。然而,由于你已经完成了分析,你发现某些商品虽然整体上不盈利,但在某些地区偶尔会盈利。你的主要目标是让管理层能够快速看到最不盈利商品的分析,以识别一个商品是否一直没有盈利,从而回答“最不盈利的商品是否一直没有盈利?”这个问题。这个例子将结合引导分析仪表板和探索工具的特点。
构建视图
使用Superstore Sales数据集,并按照以下步骤构建将形成仪表板基础的各个视图:
-
创建一个按类别显示利润的柱状图。按利润总和降序排列类别。
-
将部门字段添加到筛选器中并显示筛选器。为此,使用数据窗格中部门字段的下拉菜单,选择显示筛选器。
-
将工作表命名为按类别总利润:
![]()
图 8.3:显示按类别汇总利润的柱状图,以“部门”作为筛选器
-
创建另一个类似的视图,显示按商品的利润。按利润总和降序排列商品。
-
你会注意到,项目太多,无法一次性查看。对于这个仪表板的目标,你可以将项目限制为最不盈利的前 10 个。将项目字段添加到筛选器区域,选择前 10标签,并调整设置以按字段筛选。指定最不盈利的 10 个,按
Sum(Profit):![]()
图 8.4:使用“前 10”标签设置显示的项目数量
-
将工作表重命名为最不盈利的前 10 个商品:
![]()
图 8.5:结果柱状图显示最不盈利的前 10 个项目
-
创建另一个工作表,显示按州划分的利润填充地图。你可以通过双击数据窗口中的州字段,然后将利润拖动到颜色区域来迅速完成这一操作。(注意:如果你的地区设置不是美国,你可能需要使用编辑位置选项将国家设置为美国。)
-
将工作表重命名为按州利润:
![]()
图 8.6:显示按州划分利润的填充地图
-
创建最后一个工作表,显示利润是何时产生或丧失的。确保订单日期字段已作为季度日期值添加,并且它是连续的(绿色)。
-
添加线性趋势线。为此,请切换到左侧边栏的分析标签,将趋势线从模型拖动到视图中。或者,右键单击视图画布的空白区域,选择趋势线 | 显示趋势线。
-
将工作表重命名为利润趋势:
![]()
图 8.7:显示按季度利润趋势的折线图
现在,您已经创建了构成仪表盘的视图,让我们开始将仪表盘组合起来!
创建仪表盘框架
此时,您已经拥有实现仪表盘目标所需的所有视图。现在,只剩下安排它们并启用所需的交互性,以有效讲述故事:
-
通过点击位于所有现有工作表标签右侧的新建仪表盘标签,或从菜单中选择仪表盘 | 新建仪表盘来创建一个新的仪表盘。
-
将新仪表盘重命名为
最不盈利的是否总是亏损的?。 -
在左侧边栏底部,勾选显示仪表盘标题。
-
通过从左侧边栏的仪表盘窗格中拖动视图并将其放入仪表盘画布中,来将视图添加到仪表盘。按如下方式排列它们:
![]()
图 8.8:所有视图已放置在仪表盘上
在仪表盘中添加视图后,您需要花些时间重新定位和调整各个元素和视图的大小。
-
使用部门筛选器上的下拉菜单,将控件更改为单值(下拉菜单)。
-
您会注意到,改变筛选器的值只会改变按类别的总体利润视图。您可以通过使用下拉菜单来调整筛选器应用的视图。使用下拉菜单,选择应用到工作表 | 所有使用此数据源。
可以通过筛选器控件上的下拉菜单或视图中筛选器架上的字段来设置应用筛选器的选项。选项包括以下内容:
-
所有使用相关数据源:该筛选器将应用于所有数据源,其中用于筛选的字段在数据源之间存在关联。可以通过主菜单中的数据 | 编辑关系来编辑关系。
-
所有使用此数据源:该筛选器将应用于任何将数据源用作主要数据源的视图。
-
选择的工作表...:该筛选器将应用于您选择的工作表。
-
仅此工作表:该筛选器将仅应用于当前工作表。
现在,让我们回到创建仪表盘框架的工作。
-
从左侧边栏中,拖动并将文本对象放置在按类别的总体利润之上,并输入以下说明:
-
从下拉菜单中选择一个部门
-
选择下方的类别
-
选择下方的项目
-
-
使用控制柄,将部门筛选器立即移动到最不盈利的前 10 项视图上方。
-
调整文本对象的大小,以使前 10 名视图与整体视图对齐。
-
将利润颜色图例移到按州利润视图下方。
-
使用整体类别利润下拉菜单,选择适应 | 整个视图。这将确保所有类别都可见,而不需要滚动条。
-
此外,将最不赚钱的前 10 个项目调整为整个视图。
此时,你的仪表板应该类似于下图所示:

图 8.9:已整理并调整大小的精美仪表板
现在我们有一个包含所有我们想要的视图的仪表板。如你所见,添加视图和对象并重新排列它们是很容易的。接下来,让我们继续探讨如何通过操作来驱动故事。
实施操作来引导故事
现在你有了一个支持数据故事讲述的框架。你的观众能够在选定类别的上下文中定位到最不赚钱的项目。然后,选择一个项目将回答它是否在每个位置上都一直是无利可图的。为了启用这种流程并实现你的目标,你通常需要启用交互性。在本例中,我们将使用操作。我们将通过一些具体的步骤来完成这个示例,然后在本章稍后详细介绍操作的复杂性:
-
点击整体类别利润视图上的用作筛选器按钮。这将使该视图成为整个仪表板的交互式筛选器。也就是说,当用户选择一个条形图时,所有其他视图将根据选择进行过滤:
![]()
图 8.10:按类别利润视图上的“用作筛选器”控件
-
从主菜单中,选择仪表板 | 操作。你将看到一个包含名为筛选器 1(生成)的操作的列表。这是你之前选择用作筛选器时创建的操作:
![]()
图 8.11:点击筛选控制时创建了筛选器 1(生成)
-
点击添加操作 >按钮并选择筛选器。弹出的对话框将为你提供选择源和目标的选项,以及该操作的其他选项。
-
在这里,我们需要一个操作,当用户选择某个项目时,筛选除整体类别利润视图之外的所有内容。在添加筛选操作对话框中,将源工作表设置为最不赚钱的前 10 个项目,并将目标工作表设置为按州利润和利润趋势。确保操作设置为在选择时运行。将筛选器命名为按项目筛选,然后点击对话框中的确定按钮。然后在操作对话框中做同样的操作:
![]()
图 8.12:为按项目筛选操作设置选项
现在,你有三个筛选器(其中两个是操作)来驱动仪表板:
-
从下拉菜单中选择一个部门将过滤整个仪表板(实际上会过滤工作簿中的所有视图,因为你已设置为使用数据源过滤每个视图)
-
选择一个类别(点击一个条形图或标题)将把整个仪表板筛选到该选择
-
选择一个项目(点击一个条形图或标题)将筛选按州的利润和利润趋势仪表板
您可以通过点击空白区域或再次点击选定标记来清除视图中的选择。例如,如果您点击书架条形图以选择它(从而筛选出仪表板的其余部分),您可以再次点击该条形图来取消选择。
尝试使用筛选器和操作,看看您的仪表板如何运行。
上下文筛选
当您使用下拉筛选器选择单个部门或选择单个类别时,您会发现在 Top 10 视图中少于 10 个项目。例如,从部门筛选器选择家具,点击桌子条形图只显示三个项目。这是因为顶级项目筛选器与操作筛选器同时评估。只有三个桌子类别项目同时也在Top 10中。
如果您想查看桌子类别中的 Top 10 项目,您可以通过上下文筛选器实现这一目标。
上下文筛选器是 Tableau 中的一种特殊类型的筛选器,它们在其他筛选器之前应用。其他筛选器然后在上下文筛选器定义的上下文中应用。概念上,上下文筛选器导致数据子集,其他筛选器和计算在此数据子集上运行。除了顶级筛选器外,还在上下文筛选器定义的上下文中计算计算集和固定详细级别计算。
在这种情况下,导航到Top 10工作表,并使用筛选器架上字段的下拉菜单将部门筛选器和新添加的(类别)操作筛选器添加到上下文中。一旦添加到上下文中,这些字段将在筛选器架上显示为灰色。现在,您将看到所选部门和类别的 Top 10 项目:

图 8.13:最不赚钱的 10 个项目将位于 Action(类别)和部门筛选器的上下文中
请注意,将筛选器添加到上下文会使字段在筛选器架上显示为灰色。
如果您编辑仪表板上的操作,筛选器可能会自动更新,您可能需要重新添加到上下文中。
通过选择几个不同的类别和几个不同的项目,继续并逐步进行操作。观察最终的仪表板如何通过讲述一个故事来实现您的目标:

图 8.14:由选择触发的最终仪表板与筛选器
用户从部门下拉菜单中选择了技术,从类别列表中选择了电话和通讯,然后选择了项目 10631,这是该类别中利润最少的项目。此操作显示了该项目在各个州的销售情况(按利润进行颜色编码),以及该项目的利润时间序列。
管理层是否应从库存中移除项目 10631?在考虑到该项目仅在一个实例中亏损,并且其趋势正向更高的盈利转变之前,不能轻易做出决定。虽然最初的亏损很大,但那是很久以前的事,而且每次后续销售该项目都获得了盈利。你所得到的结果可能会促使进一步分析,以确定影响项目盈亏的因素,从而帮助管理层做出更好的决策。
当你查看第八章完成的工作簿时,你会看到底部只有仪表板的选项卡,个别视图已被隐藏。隐藏仪表板或故事中使用的工作表选项卡是保持工作簿整洁并引导观众远离那些应在仪表板或故事背景下查看的工作表的好方法。要隐藏工作表,右键点击选项卡并选择隐藏工作表。要取消隐藏工作表,导航到使用该工作表的仪表板或故事,右键点击左侧窗格中的工作表,并取消勾选隐藏工作表。此外,你还可以通过右键点击仪表板选项卡并选择适当的选项,来隐藏或取消隐藏所有在仪表板中使用的工作表。用于工具提示的工作表也可以用相同的方式进行隐藏或取消隐藏。
现在,你已经拥有一个完全互动的仪表板!你构建了视图,将它们添加到仪表板,并创建了一些有意义的计算。过程中,你学习了顶部过滤器和上下文过滤器。现在,让我们考虑一下如何为不同的显示器和设备设计仪表板。
针对不同显示器和设备的设计
在设计仪表板时,你通常会问自己的一些第一个问题是:我的观众如何查看这个仪表板?他们会使用什么设备? 随着移动设备的广泛采用,后一个问题变得非常重要,因为在大型平面屏幕显示器上看起来不错的东西,在平板或手机上可能并不总是很好看。
左侧边栏仪表板选项卡的顶部显示了一个按钮,用于在各种设备上预览仪表板,以及一个大小选项的下拉菜单:

图 8.15:设备预览选项允许你为其他设备设计和预览仪表板
点击设备预览按钮不仅可以让你查看仪表板在各种设备类型(甚至是特定型号)上的显示效果,还可以让你为每种设备类型添加布局,并且可以进行自定义:

图 8.16:设备的可自定义选项
你不仅可以查看仪表盘在各种设备和型号上的显示效果,还可以根据设备的方向以及是否使用 Tableau Mobile 应用(如果该设备支持)查看其外观。
点击添加布局按钮(即前面截图中的添加平板布局按钮)将会在左侧边栏的仪表盘选项卡下添加一个布局:

图 8.17:每种布局都可以配置多种选项
每种布局可以有自己的大小和适配选项,布局选项允许你从默认切换到自定义。这使你能够根据给定的布局重新排列仪表盘。你甚至可以为某些布局删除视图和对象。例如,你可以简化仪表盘,将其缩减为一两个视图用于手机显示,同时为桌面显示保留三四个视图。
Chapter 08 Completed 工作簿包含利润分析仪表盘的示例,并提供了几种布局选项。例如,这是为手机显示格式化的仪表盘,仪表盘会根据手机的宽度自动适配,并允许上下滚动:

图 8.18:仪表盘的手机布局
如你所见,手机的仪表盘布局意味着按州利润和利润趋势在手机设备的预览边界内不会显示。然而,它们距离手指滑动仅一步之遥。
与操作的交互
在 Tableau 中,操作是由用户发起的事件,它触发 Tableau 的响应。你已经看过几个仪表盘中使用操作的示例。现在我们将探讨一些操作在 Tableau 中如何工作的细节。
Tableau 支持六种操作:
-
筛选操作:用户的操作会导致在一个或多个视图中应用一个或多个筛选器。
-
突出显示操作:用户的操作会导致在一个或多个视图中突出显示特定的标记和标题。
-
URL 操作:用户的操作会导致打开特定的 URL(可以是浏览器、新标签页或嵌入式网页对象)。
-
转到工作表:用户的操作会导致导航到选定的工作表或仪表盘。
-
参数操作:用户的操作会更改参数的值。这使用户能够以全新和令人兴奋的方式与参数进行视觉互动!
-
设置操作:用户的操作定义了一个集合。集合可以在计算、筛选器和货架上使用,以定义标记的视觉属性。这为复杂和创造性的交互提供了许多可能性。
某些操作是由 Tableau 根据快捷方式自动生成的。例如,你可以从仪表盘视图的下拉菜单中选择用作筛选器,这会自动生成一个筛选操作。通过点击离散颜色图例上的按钮或工具栏上的按钮启用突出显示,将自动生成一个突出显示操作:

图 8.19:启用高亮显示的选项
您还可以通过从菜单中选择仪表板 | 操作来创建或编辑仪表板操作。我们来看看每种类型操作的详细信息。
过滤器操作
过滤器操作由一个或多个源工作表定义,这些源工作表将一个或多个维度值作为过滤器传递给目标工作表。当涉及到这些标记的操作发生时,包含该标记的维度值可以作为过滤器传递到一个或多个目标工作表。请记住,每个工作表上的标记是由独特的维度值交集定义的。
当您创建或编辑过滤器操作时,您将看到如下选项:

图 8.20:过滤器操作选项
此屏幕允许您执行以下操作:
-
命名过滤器。
-
选择源和目标工作表。源工作表是用户将启动操作(悬停、选择、菜单)的地方,目标工作表是应用响应的地方(在此示例中是过滤,但也可以是高亮显示)。
-
设置触发过滤器的操作,以及多个标记的选择还是单个标记的选择触发操作。
-
选择清除选择时发生的情况。
-
指定哪些维度用于将过滤器值传递到目标工作表。
尝试使用有助于您在仪表板中区分多个操作的名称来命名您的操作。此外,如果您的操作设置为在菜单上运行,那么您使用的名称将在工具提示中作为链接显示。使用名称右侧的箭头插入特殊字段占位符。当用户在工具提示中看到菜单选项时,这些占位符会根据标记的字段值动态更新。
您可以选择任意数量的源和目标工作表。然而,如果您在底部区域指定了特定的目标过滤器,则您选择的字段必须出现在源工作表中(例如,行、列和详细信息)。如果某个字段在一个或多个源工作表中不可用,您将收到警告,并且该操作将不会在这些工作表上触发。大多数情况下,您的源和目标将是相同的仪表板。您还可以选择一个不同的目标工作表或仪表板,这将使操作除了过滤之外,还能够导航到目标。
当过滤器操作在工作表级别定义时(在查看工作表时,从菜单中选择工作表 | 操作),该操作的菜单项将作为菜单项出现在每个使用相同数据源的工作表上的所有标记中。您可以使用此功能在工作表之间以及从仪表板到单个工作表之间快速创建导航。
过滤器操作可以设置为发生在三种可能的操作中的任何一种:
-
悬停:用户将鼠标光标移动到标记上(或在移动设备上点击标记)。
-
选择:用户点击或轻触一个标记,通过点击并拖动矩形框选中多个标记,或者点击一个标题(这样该标题下的所有标记都会被选中)。用户可以通过点击/轻触已经选中的标记、点击/轻触视图中的空白区域,或点击/轻触已选中的标题来取消选择。
-
菜单:用户选择工具提示中的操作菜单选项。
下面是一个筛选操作的示例,当源中的条形图被选中时触发:

图 8.21:点击“表格”条形图,将“类别”作为过滤器传递给目标表格。
源中的每个条形标记都由类别维度定义。当选择“表格”的条形图时,目标上会设置一个单一的过滤器。
如果标记由多个维度定义(例如,类别和区域),则目标表格仍然会根据所选维度值的组合设置单一过滤器。
在这个例子中,过滤器包含办公设备和西部,这与定义选中方框的维度匹配:

图 8.22:点击“办公设备”和“西部”交集的方框,会将这两个维度的值作为单一操作过滤器传递给目标。
默认情况下,源视图中存在的所有维度都会用于筛选操作。你可以选择性地指定应使用哪些字段。你可以在编辑筛选操作对话框中使用已选择字段选项来实现以下功能:
-
基于更少的维度进行筛选。例如,如果你只选择了区域字段,那么选择前述方框将只会将“西部”区域作为过滤器传递给目标。
-
使用不同的数据源对目标视图进行筛选。已选择字段选项允许你将源字段映射到目标字段(即使目标字段有不同的名称,但值必须仍然匹配)。例如,如果目标使用的数据源中,东部是一个名为区域的字段的可能值,你可以将源中的区域映射到目标中的区域。
筛选操作非常有用,可以缩小焦点范围,深入查看细节,观察所选维度的不同方面。你会发现自己经常使用它们。让我们考虑另一种类型的操作:高亮操作。
高亮操作
这种类型的操作不会过滤目标表格。相反,高亮操作会在目标表格中突出显示由所选维度值定义的标记(至少部分由它们定义)。高亮操作的选项与筛选操作非常相似,具有相同的源和目标表格配置选项,以及触发操作的事件。
假设一个仪表板有三个视图,并且基于地区字段的高亮操作。当对东区触发该操作时,所有由东区定义的标记都会被高亮显示。用于高亮的维度必须出现在所有你希望应用高亮的视图中。地图和散点图的地区字段都位于标记卡的详细信息部分:

图 8.23:点击东区的条形图已高亮显示与该维度值相关的所有其他标记
高亮显示器(也称为数据高亮显示器)作为用户控件显示(类似于过滤器和参数),根据用户交互来进行高亮显示。它们可以应用于一个或多个视图,并且会高亮显示视图中的标记。它们不会创建动作。要添加高亮显示器,选择视图中的任何离散(蓝色)字段,并使用下拉菜单点击显示高亮显示器。或者,你也可以使用菜单选择分析 | 高亮显示器。在仪表板上,你可以通过使用视图的下拉菜单选择高亮显示器来添加高亮显示器。
URL 操作
URL 操作允许你根据某个操作动态生成一个 URL,并在仪表板中的网页对象内或在一个新的浏览器窗口或标签页中打开它。URL 操作可以通过与其他操作相同的悬停、菜单和选择事件来触发。URL 操作的名称使其与其他操作区分开,并将在作为菜单使用时显示为链接。
URL 包括你输入的任何硬编码值,以及通过 URL 文本框右侧的箭头可以访问的占位符。这些占位符包括字段和参数。当操作触发时,这些值将动态插入到 URL 字符串中,基于构成所选标记的字段的值和当前参数的值。
如果你在仪表板中包含了一个网页对象,URL 操作将自动使用该对象作为目标。否则,操作会打开一个新的浏览器窗口(当仪表板在桌面或阅读器中查看时,使用你的默认浏览器)或一个新的标签页(当仪表板在网页浏览器中查看时)。
一些网页在通过 iframe 查看时具有不同的行为。浏览器对象在 Tableau Desktop 或 Tableau Reader 中不使用 iframe,但在将仪表板发布到 Tableau Server、Tableau Online 或 Tableau Public 时会使用 iframe。你需要根据你的观众将如何查看仪表板来测试 URL 操作。
创建或编辑 URL 操作时,你可以为 URL 操作指定一个目标:

图 8.24:URL 操作的选项
选项包括新浏览器标签页、网页对象(如果仪表板上有多个对象,你可以选择其中一个)和如果没有网页对象则为浏览器标签页。如果仪表板上有多个网页对象,建议为它们命名,以便更容易选择。
要完成此操作,请切换到左侧窗格中的布局选项卡,并展开项目层级结构,直到找到你希望重命名的对象。右键单击该对象并选择重命名仪表板项...:

图 8.25:可以通过项目层级结构和右键上下文菜单重命名仪表板对象
在你重命名对象之后,你将能更轻松地识别出哪个是 URL 操作的目标。
接下来,我们将考虑另一种实现特定结果的操作类型:导航。
转到工作表操作
转到工作表操作(也称为导航操作)允许你根据用户与一个或多个视图的交互,指定导航到工作簿中的另一个仪表板或工作表。例如,点击条形图中的条形可能会导航到另一个仪表板。这些操作类似于定义另一个工作表为目标的过滤器操作,但转到工作表操作不会设置任何过滤器。
参数操作
参数操作允许你根据用户操作设置参数的值。当你创建参数操作时,你将使用类似这样的界面设置选项:

图 8.26:参数操作的选项
与其他操作一样,你可以选择触发操作的工作表和用户交互(悬停、选择、菜单)。此外,你将设置目标参数并指定哪个字段将设置该值。你可以使用工作表中的任何字段,也可以为该字段指定聚合。
我们在第四章,使用计算和参数开始冒险中,看到过参数如何用于实现各种结果。你可以在计算、过滤器和前 N 名集合中使用它们,还可以使用它们定义参考线并改变任何视图的视觉效果。这为使用视图和触发器驱动交互体验打开了无限可能。
设置操作
集合操作允许你为一个或多个维度填充一个或多个值的集合。这非常强大,因为集合可以在任何架构中使用来编码任何视觉元素,可以在计算中使用,也可以作为过滤器使用。它们可以以不同的方式在不同的视图中使用,这为集合操作提供了令人难以置信的灵活性。我们将首先花一些时间更清楚地定义集合,然后看一个集合操作的示例。
集合
在 Tableau 中,集合定义了来自数据源的一组记录。在行级别,每条记录要么在集合中,要么不在集合中。有两种类型的集合:
-
动态集合(有时称为计算或计算集)
-
固定集合
动态集合是根据你定义的条件计算为单一维度计算的。随着数据变化,条件的结果可能会变化,记录可能会在集合内外之间切换。
例如,如果你在数据窗格中的Customer Name字段上使用下拉菜单并选择Create | Set,你可以规定一个条件来定义哪些记录属于该集合:

图 8.27:基于条件的动态集合
在这个示例中,我们创建了一个名为Customers who purchased more than $100的动态集合,其条件是销售总额大于100。你会注意到,还有计算By formula或Top N 的选项。所有这些条件将应用于聚合级别(跨整个数据集或如果使用了上下文筛选器则跨上下文),然后每条记录将根据该记录对应的客户总销售额是否大于$100 来判断其是否在集合中。
固定集合是一个包含一个或多个维度的值的列表。如果单个记录的值与集合定义的列表匹配,则该记录在集合中,否则不在集合中。例如,你可能会基于Customer Name字段创建另一个集合,这次使用General选项卡:

图 8.28:基于成员选择的静态集合
在这里,你可以选择定义集合中包含或排除的单独值。注意有一个选项是排除而不是包含值。在这种情况下,我们创建了一个名为Customers with first name of Aaron的集合。任何具有与我们选择的6个值匹配的Customer Name值的记录都将包含在集合中。所有其他的将不在集合中。因为这是一个固定集合,所以这些值永远不会被计算或重新计算。如果下周数据集中出现一个名为 Aaron Burr 的客户记录,它仍然不会出现在集合中。
正如我们在下面的示例中所看到的,集合操作作用于固定的集合。
一个集合操作的示例
你可以在名为Sales by Region and Category (set actions)的仪表板中的Chapter 08 Complete.twbx工作簿中找到一个集合操作的示例,显示如下:

图 8.29:集合操作允许高亮显示:突出显示属于选定区域的条形部分
该仪表板包含两个视图:一个地图和一个条形图。在地图上选择一个区域会触发一个集合操作,从而更新条形图。一个筛选操作会筛选条形图,使每个条形的长度仅显示所选区域的值。然而,在这里,集合操作用于显示属于该区域的整体条形部分,同时仍保留所有区域的完整条形长度。
要复制此交互性,请按照以下步骤操作:
-
在数据窗格中维度下的Region字段上使用下拉菜单选择Create | Set。将集合命名为Region Set。
-
在生成的创建集合对话框中,选择常规选项卡,勾选一个或多个值。这将创建一个固定集合。在这个示例中,选择哪些值并不重要,因为稍后你会配置集合操作来瞬间更新这些值。
-
创建一个按类别销售的条形图。
-
从数据面板中的集合拖动区域集合并放置到颜色上:
![]()
图 8.30:将集合拖放到颜色上,以显示集合内外的区别
你可以像使用其他字段一样在架构上使用集合。注意集合如何给出两个值,即集合内和集合外,它们定义了两种颜色。你可能希望调整颜色,以突出显示集合内的部分。
你也可以在计算字段中使用集合。例如,代码[Region Set]为每条记录提供布尔值真/假结果,表示该记录是否在集合中。
通过创建区域地图、仪表板并实现集合操作来完成集合操作示例:
-
使用区域的下拉菜单选择地理角色 | 从…创建 | 州。这告诉 Tableau 根据州这一地理字段的关系将区域视为地理字段。
-
在一个新的空白视图中,双击区域字段以创建地图视图。现在,区域被识别为地理字段,Tableau 会生成必要的纬度、经度以及渲染形状所需的几何图形。
-
将地图和条形图视图都添加到同一个仪表板中。你可以根据需要将它们定位。
-
通过选择仪表板 | 操作菜单,然后在弹出的对话框中选择添加操作 | 更改集合值...来添加集合操作。弹出的对话框具有许多与其他操作类型相似的功能:
![]()
图 8.31:集合操作的选项
你会注意到可以为名称指定操作值;执行操作时: 悬停、选择或菜单;以及清除选择的选项。像其他操作类型一样,你还可以指定触发该操作的源工作表。目标集合允许你指定根据操作更新值的数据源及该数据源中的固定集合。在此示例中,我们希望在销售按区域(集合操作)视图中做出选择时更新区域集合。当清除选择时,我们将选择从集合中删除所有值。
创建上述操作后,你的仪表板应与本节开始时显示的示例非常相似。在地图上选择一个区域时,突出显示与该区域对应的条形图部分。这种技术被称为刷选,或比例刷选。
该技巧只是集合操作的几百种可能应用之一。由于集合可以在任何架构上使用,并且可用于计算,通过集合操作更新数值为用户交互和分析开辟了几乎无限的可能性。
在了解了各种类型的操作后,让我们继续考虑另一个示例,展示不同类型的仪表板。
一个地区评分卡仪表板
现在,我们将考虑另一个示例仪表板,展示略微不同的目标。假设组织中的每个人都同意利润比率是一个 KPI。此外,大家也达成共识,认为可接受与差的利润比率之间的临界值为 15%,但管理层希望能够动态调整此值,以查看是否可能有更好的目标。
考虑以下仪表板:

图 8.32:一个简单的利润 KPI 仪表板
该仪表板使你的观众能够非常迅速地评估各个地区在过去六个月的表现。高层管理人员可以很快在他们的移动设备上调出这个仪表板,并根据需要采取适当的行动。
该仪表板提供与 KPI 目标参数的互动。如果需要,额外的深入探索功能可以提供到其他仪表板或视图。如果该视图发布到 Tableau Server,考虑到地区经理可能会订阅该视图并接收包含最新仪表板图像的定期电子邮件,这也是完全合理的。
让我们考虑如何创建一个类似的仪表板:
-
创建一个名为
Profit Ratio KPI Target的浮动类型参数,初始值设置为.15,格式为百分比。 -
创建一个名为
Profit Ratio的计算,公式为SUM([Profit]) / SUM([Sales])。这是一个聚合计算,它将把利润总和除以视图中定义的详细程度下的销售总和。 -
创建第二个名为
KPI - 利润比率的计算,公式如下:IF [Profit Ratio] >= [Profit Ratio KPI Target] THEN "Acceptable" ELSE "Poor" END该代码将利润比率与参数化的临界值进行比较。任何等于或高于临界值的将标记为
可接受,而低于临界值的将标记为差。 -
创建一个名为地区评分卡的新工作表。该视图包含行上的
地区,列上的订单日期(作为离散日期部分),以及在形状和颜色上都有KPI - 利润比率字段。你会观察到形状已被编辑为使用勾选标记和叉号,并且颜色调色板使用了对色盲友好的蓝色和橙色。 -
使用分析面板添加列总计,并将总计格式化为自定义标签总体,字体加粗,并使用浅灰色阴影。
-
添加订单日期作为过滤器,并将其设置为按字段排序的前 6 名(订单日期作为最小值)。这将动态地将视图过滤为过去六个月的数据:
![]()
图 8.33:此视图定义了地区评分卡,显示每个地区每月的可接受与差的结果
-
创建另一个名为按区域计算的利润率的工作表。
-
如果你跳过了设置操作示例,请使用
Region上的下拉菜单选择地理角色 | 从...创建 | 州。这告诉 Tableau 将Region视为一个基于与地理字段州的关系的地理字段。 -
双击数据窗格中的Region字段。Tableau 将自动根据Region生成地理可视化。我们将在第十二章,探索地图和高级地理空间功能中更详细地探讨自定义地理区域的创建。
-
将利润率放在颜色和标签上。你还需要将利润率格式化为百分比。你可以通过专门在此视图中格式化该字段,或者通过在数据窗格中设置字段的默认数字格式来完成(后者通常是首选,因为你几乎总是希望它以百分比形式显示)。
-
此外,将Region添加到标签中。重新排列标记卡中的字段以重新排序标签,或者点击标签架直接编辑标签文本。
-
将与区域记分卡视图相同的过滤器应用于此视图。你可能希望导航到区域记分卡工作表,并使用订单日期上过滤器架上的下拉菜单将现有的过滤器应用于多个工作表:
![]()
图 8.34:填充地图显示按区域计算的利润
一旦两个视图都创建完成,你可以将这些视图安排成一个仪表板。第八章完整工作簿中的示例应用了一个手机布局,如下所示:

图 8.35:KPI 仪表板的手机布局
尝试不同的布局和元素位置。
默认情况下,所有添加到仪表板的对象都是瓷砖化的。瓷砖化的对象会固定位置,并出现在浮动对象下面。任何对象都可以通过切换左侧窗口下新对象下的切换按钮,或按住Shift键将对象拖动到仪表板上,作为浮动对象添加到仪表板。
现有对象可以通过按住Shift键在移动对象时或使用下拉菜单在浮动和瓷砖之间切换。下拉菜单还提供了调整对象浮动顺序的选项。此外,通过选择浮动对象并使用左下角的定位和大小控制,你可以以像素为单位精确调整浮动对象的大小和位置。
你可以混合使用瓷砖和浮动元素,但许多仪表板作者更喜欢构建完全由一个或另一个组成的仪表板。这确保了不同布局和屏幕尺寸之间的一致性(特别是当仪表板设置为自动或范围大小选项时)。
这个例子展示了一个用于快速查找和快速决策的仪表板。如果我们想讲述一个更复杂的故事,展示细节的进展,甚至按照特定顺序呈现数据故事怎么办?让我们考虑如何利用 Tableau 的一个专门设计用于此目的的功能。
故事
故事功能允许你使用仪表板和视图的交互式快照讲述一个故事。快照成为故事中的一个点。这使你能够构建一个引导性叙事,甚至是一个完整的演示。
让我们考虑一个故事点可能有用的例子。高层管理者对你之前开发的区域记分卡仪表板感到满意。现在,他们希望你为董事会做一个演示,突出显示南部地区的某些具体问题。通过最小的努力,你可以将简单的记分卡进行扩展,添加一些额外的视图,并讲述整个故事:
-
首先,我们将构建几个额外的视图。创建一个简单的地理视图,命名为
利润比率 KPI 按州。将其设置为填充地图,使用KPI – 利润比率字段并定义颜色。 -
将利润比率添加到Marks卡片的详细信息部分,以便稍后使用:
![]()
图 8.36:利润比率 KPI 按州使用颜色编码显示可接受与差的对比
-
创建一个名为
按季度利润比率的额外视图。将订单日期作为列上的连续日期值,利润比率作为行。 -
将标记类型设置为条形图。为利润比率 KPI 目标参数值添加参考线(你可以右键点击利润比率轴并选择添加参考线...)。
-
将KPI – 利润比率添加到颜色。你也可以点击颜色货架并添加边框。
-
继续筛选视图,选择南部地区,并使用下拉菜单将该筛选器应用到利润比率 KPI 按州视图中:
![]()
图 8.37:按季度利润比率显示某一季度是否符合目标,是否可接受或差
-
创建一个新的仪表板,包含这两个新的视图,排列方式与下面截图中的相同。如果没有显示,添加利润比率 KPI 目标参数和地区筛选器。
-
使用利润比率 KPI 按州上的下拉菜单,将该视图作为筛选器使用:
![]()
图 8.38:同一仪表板上的利润比率 KPI 按州和按季度视图
-
通过从菜单中选择故事 | 新建故事,或者使用底部现有工作表旁的新建故事标签来创建一个新故事:
故事界面由一个侧边栏组成,显示所有可见的仪表板和视图。顶部显示故事标题,可以通过双击进行编辑。故事中的每个新点都会显示为一个导航框,其中的文本也可以编辑。点击框会让你访问故事点,随后你可以添加单个仪表板或视图。
![]()
图 8.39:添加故事点
你可以使用新建空白点按钮(创建一个新故事点)、复制按钮(将创建当前选定故事点的复制快照)或另存为新点按钮(将捕获当前仪表板的状态作为一个新的故事点)来创建新的故事点。
点击故事点导航框将显示该故事点的视图或仪表板快照。你可以通过选择、改变筛选器、更改参数值和添加注释等方式与仪表板互动。更改仪表板的任何部分后,系统将提供更新现有故事点为仪表板当前状态的选项。或者,你可以使用导航框上方的恢复按钮返回仪表板的原始状态。点击X将删除故事点。
每个故事点包含一个完全独立的仪表板快照。筛选选择、参数值、选择项和注释将为特定的故事点记住,但不会影响其他故事点或仪表板中的任何其他工作表。
你可以通过拖动和放置导航框来重新排列故事点。
我们将通过完成以下步骤来构建故事:
-
给故事命名为南部区域分析。
-
将区域成绩卡仪表板作为第一个故事点。选择地图中的南部区域。为该故事点添加以下文本:南部区域在过去六个月的表现不佳:
![]()
图 8.40:第一个故事点突出显示南部区域的表现
-
点击新建空白点按钮创建一个新的故事点,并将利润比率分析仪表板添加到该点。
-
给此故事点添加标题只有一个州整体达到了 15% 的目标。
-
右键点击地图上的弗吉尼亚州,选择注释 | 标记。保持州和利润比率作为注释的一部分:
![]()
图 8.41:第二个故事点深入细节
-
点击复制按钮复制当前故事点。为这个新故事点添加标题3 个州将达到 10% 的目标。将利润比率 KPI 目标设置为
10.00%并更新该点。 -
再次点击复制按钮,为新创建的点添加标题某些州在历史上表现良好。
-
右键点击弗吉尼亚州的注释,选择删除将其删除,然后为路易斯安那州添加类似的注释。接着,点击路易斯安那州选择该州。
-
确保点击更新按钮以捕获仪表板的状态。
在演示模式下,添加、复制、更新或删除故事点的按钮不会显示。你的最终故事应该类似于以下内容:

图 8.42:此故事点突出显示单个州的季度结果
花点时间浏览一下演示文稿。点击导航框将展示该故事点。你可以在每个故事点中完全与仪表板互动。通过这种方式,你可以即时回答问题并深入探讨细节,然后继续故事的进行。
学习仪表板技巧(以及数据可视化技巧的一般方法)一个很好的方式是订阅 每日可视化 (www.tableau.com/public/community/viz-of-the-day)。每天都会展示一个新的可视化、仪表板或故事。当你看到一个想要了解的设计技巧或可视化时,你可以下载工作簿并探索使用的各种技巧。
摘要
当你准备分享你的发现和分析时,你可能会使用仪表板将故事与观众关联起来。讲述故事的方式将取决于你的目标、观众以及传递方式。通过结合视图、对象、参数、筛选器和图例,你可以创造一个极具吸引力的数据故事框架。Tableau 允许你为不同的设备专门设计布局,确保你的观众获得最佳体验。通过引入动作和互动性,你可以邀请观众参与到故事中。故事点将允许你将多个仪表板和视图的快照汇集在一起,从而制作和呈现完整的叙事。
在下一章,我们将关注一些涉及趋势、分布、预测和聚类的更深入分析。
第九章:可视化分析 – 趋势、聚类、分布和预测
使用 Tableau 进行的快速视觉分析对于回答众多问题和做出关键决策非常有用。但它仅仅触及了可能分析的表面。例如,一个简单的散点图可以揭示异常值,但通常你会想要了解数据的分布,或者识别出类似的观察点的聚集。一个简单的时间序列帮助你看到某一指标随时间的涨跌,但通常,你想看到趋势或预测未来的数值。
Tableau 使你能够快速通过统计分析来增强数据可视化。内置的功能,如趋势模型、聚类、分布和预测,使你能够快速为你的可视化分析增值。此外,Tableau 还与 R 和 Python 平台集成,为数据的处理和分析提供了无限的选择。
本章将涵盖内置的统计模型和分析,包括以下主题:
-
趋势
-
聚类
-
分布
-
预测
我们将通过一些示例数据集来查看这些概念。你可以通过 Chapter 9 工作簿来跟随并重现这些示例。
在分析随时间变化的数据时,理解变化的整体趋势至关重要。我们将从观察和理解趋势开始。
趋势
World Population.xlsx 文件包含在 Chapter 09 目录中。它记录了每个国家从1960年到2015年的每一年的人口数据。使用这个数据集,让我们来看看不同国家的历史趋势。创建一个类似于下方截图所示的视图,展示阿富汗和澳大利亚随时间变化的人口数据。你会注意到国家名称已经被过滤,只包括阿富汗和澳大利亚,并且该字段还被添加到了颜色和标签货架中:

图 9.1:阿富汗和澳大利亚随时间变化的人口数据
仅从这个可视化图表中,你可以得出几个有趣的观察结论。到1980年,两国的人口增长相似。此后,阿富汗的人口开始下降,直到1988年才开始上升。在1996年左右,阿富汗的人口超过了澳大利亚。此后,两国之间的差距持续扩大。
虽然我们对这两个趋势有一些了解,但当我们看到趋势线时,它们变得更加明显。Tableau 提供了几种添加趋势线的方式:
-
从菜单中选择分析 | 趋势线 | 显示趋势线。
-
右键点击视图窗格中的空白区域并选择显示趋势线。
-
点击左侧边栏中的分析选项卡,切换到分析面板。将趋势线拖放到你选择的趋势模型上(在本例中我们使用线性模型,稍后我们将在本章中讨论其他模型):
![]()
图 9.2:通过从分析面板拖放来将趋势线添加到视图中
一旦将趋势线添加到视图中,你将看到两条趋势线:每个国家各一条。我们稍后将讨论如何定制显示。现在,你的视图应该像这样:

图 9.3:每条趋势线显示了各自国家的整体趋势
趋势是由 Tableau 在查询数据源后计算的,并且基于视图中的各个元素:
-
定义 X 和 Y 坐标的两个字段:位于行和列上的字段定义了x轴和y轴的坐标,允许 Tableau 计算各种趋势模型。为了显示趋势线,必须在行和列上使用连续(绿色)字段。唯一的例外是可以使用离散(蓝色)日期字段。如果你使用离散的日期字段来定义标题,另一个字段必须是连续字段。
-
创建多个独立趋势线的附加字段:行、列或颜色架上的离散(蓝色)字段可用作因素,将单一趋势线拆分为多个独立的趋势线。
-
选择的趋势模型:我们将在下一节中检查模型之间的差异,即趋势模型。
请在图 9.3中观察到有两条趋势线。由于国家名称是一个离散(蓝色)字段,且位于颜色上,因此默认情况下每种颜色都会定义一条趋势线。
如前所述,我们观察到阿富汗的人口在不同的历史时期内有所增减。请注意,趋势线是沿整个日期范围计算的。那么,如果我们想查看那些时间段的不同趋势线呢?
其中一个选项是简单地选择视图中感兴趣时间段的标记。默认情况下,Tableau 将为当前选择计算趋势线。例如,在这里,选择了1980到1988年间的阿富汗数据点,并显示了新的趋势:

图 9.4:默认设置指定将为选择绘制趋势线
另一个选项是指示 Tableau 使用行、列或颜色上的离散字段绘制不同的趋势线。
请继续创建一个名为Period的计算字段,该字段使用如下代码定义不同历史时期的离散值:
IF [Year] <= 1979
THEN "1960 to 1979"
ELSEIF [Year] <= 1988
THEN "1980 to 1988"
ELSE "1988 to 2015"
END
当你将其放置在列上时,你将得到每个时间段的标题,这会打断行并导致每个时间段显示不同的趋势。你还会观察到,Tableau 在每个时间段的轴上保留了完整的日期范围。你可以通过右键单击其中一个日期轴,选择编辑轴,然后勾选每行或每列独立的轴范围选项来设置独立范围:

图 9.5:这里,离散维度“周期”创建了三个独立的时间段,并为每个时间段绘制了趋势线
在这个视图中,已对颜色应用透明度,以帮助趋势线突出显示。此外,年份的轴被隐藏(通过取消勾选字段中的显示标题选项)。现在,你可以清楚地看到不同时期趋势的差异。澳大利亚的趋势在各个时期几乎没有变化,而阿富汗的趋势则变化较大。
在了解如何将趋势线添加到可视化之后,让我们更深入地探讨如何自定义趋势线和模型。
自定义趋势线
让我们再看一个例子,它将帮助我们考虑趋势线的各种选项。使用房地产数据源,创建一个像这样的视图:

图 9.6:散点图上的趋势线通常有助于更好地理解相关性和离群值
在这里,我们创建了一个散点图,尺寸(平方英尺)的总和放置在列上,用于定义x轴,价格的总和放置在行上,用于定义y轴。地址已添加到标记卡片的详细信息中,以定义聚合级别。因此,散点图上的每个标记都是一个在由尺寸和价格定义的位置的独特地址。销售类型已放置在颜色上。趋势线已经显示。根据 Tableau 的默认设置,有三条趋势线:每种颜色一条趋势线。置信区间已被隐藏。
假设有一个良好的模型,趋势线展示了价格与尺寸增加之间的关系,以及每种销售类型下价格的上涨速度和幅度。
在这个数据集中,我们有两个字段,地址和ID,每个字段定义了一个唯一的记录。将其中一个字段添加到详细级别,实际上会将数据进行拆分,并允许我们为每个单独的属性绘制一个标记。有时,数据中可能没有定义唯一性的维度。在这种情况下,你可以通过在分析菜单中取消勾选聚合度量来拆分数据。
另外,你可以使用每个度量字段在行和列上的下拉菜单,将它们从度量更改为维度,同时保持它们是连续的。作为维度,每个单独的值将定义一个标记。保持连续性将保留趋势线所需的轴。
让我们考虑一些趋势线的可用选项。您可以通过使用菜单并选择分析 | 趋势线 | 编辑趋势线... 或右键单击趋势线然后选择编辑趋势线... 来编辑趋势线。当您这样做时,您将看到如下的对话框:

图 9.7:Tableau 提供多种配置趋势线的选项
在这里,您可以选择模型类型;选择模型中适用的字段作为因素;允许离散颜色定义不同的趋势线;显示置信区间;强制 y 截距为零;为所选标记显示重新计算的趋势;以及显示趋势线的工具提示。我们将更详细地研究这些选项。
只有在确信必须为零时才应将 y 截距强制为零。根据这些数据,它几乎肯定不为零(即,不存在面积为 0 平方英尺且标价为$0 的房屋)。
现在,尝试各种选项。注意如何将销售类型字段作为因素移除或取消选中每种颜色显示趋势线选项将导致单一趋势线。
可以从下面的视图中排除一个字段作为因素的结果,其中销售类型已添加到行中:

图 9.8:将字段作为因素包含告诉 Tableau 它是否有助于趋势模型
如前述截图的左侧部分所示,销售类型被包括为因素。这导致每种销售类型有一个明显的趋势线。当将销售类型排除为因素时,相同的趋势线(即所有类型的总体趋势)将绘制三次。这种技术对比较数据子集和总体趋势非常有用。
自定义趋势线只是使用趋势了解数据的一个方面。同样重要的是趋势模型本身,我们将在下一节考虑定制。
趋势模型
让我们回到原始视图,并继续使用单一趋势线,考虑在 Tableau 中可用的趋势模型。下面的模型可以从趋势线选项窗口中选择。
线性
如果我们假设随着尺寸增加,价格将以恒定速率增加,我们将使用线性模型。无论尺寸增加多少,我们都预期价格增加,以便新数据点接近直线:

图 9.9:线性趋势
对数
如果我们预计实际上存在边际效益递减法则,即在买家停止支付更多之前,尺寸只能增加这么多:

图 9.10:对数趋势
指数
我们将使用指数模型来测试这样一个观点:每增加一点尺寸会导致价格的显著(指数级!)增加:

图 9.11:指数趋势
幂次
如果我们认为大小与价格之间的关系是非线性的,并且介于递减的对数趋势和爆炸性的指数趋势之间,我们会采用幂次趋势模型。该曲线表示价格是尺寸的某个幂次函数。幂次趋势非常适用于预测某些事件,例如车辆加速的行驶距离:

图 9.12:幂次趋势
多项式
如果我们认为大小和价格之间的关系较为复杂,并且遵循更像S形曲线的趋势——最初增大尺寸会显著提高价格,但到某一点后价格趋于平稳——我们将使用此模型。你可以将多项式模型的度数设置为从2到8之间。这里显示的趋势线是一个 3^(rd)度的多项式:

图 9.13:3^(rd)度多项式趋势
你需要了解趋势模型的基础知识,以便测试和验证你对数据的假设。某些趋势模型对于我们的数据显然是错误的(尽管在统计学上仍然有效,但价格指数增长的可能性极低)。常识与日益增加的统计学知识将帮助你在不断发展的过程中取得进展。
你可能还希望分析模型的准确性,我们接下来会进行这方面的讨论。
分析趋势模型
观察趋势线可能很有用,但通常我们希望了解我们选择的趋势模型是否具有统计学意义。幸运的是,Tableau 为我们提供了一些趋势模型和计算的可视化信息。
只需将鼠标悬停在单一趋势线上,就可以看到该趋势线的公式,以及R 平方和P 值:

图 9.14:将鼠标悬停在趋势线时显示的提示信息
P 值是一个统计学概念,描述了假设值之间没有关系(即随机机会)时,结果与趋势模型预测的结果之间的相似度的概率。P 值为 5%(.05)意味着有 5%的概率是随机机会能够至少与趋势模型一样好地描述值之间的关系。这也是为什么 P 值在 5%或以下通常被认为表明趋势模型显著的原因。P 值高于 5%通常会让统计学家质疑趋势模型所描述的相关性。
此外,你还可以通过从菜单中选择分析 | 趋势线 | 描述趋势模型...,或者通过右键单击视图面板中的相似菜单来查看趋势模型的更详细描述。当你查看趋势模型时,将会看到描述趋势模型窗口:

图 9.15:描述趋势模型窗口
你还可以在工作表描述中获得趋势模型的描述,该描述可以通过工作表菜单或按下Ctrl + E来访问。工作表描述包含了当前视图的其他有用的总结信息。
窗口中显示的丰富统计信息包括趋势模型的描述、公式、观测数量以及模型整体和每条趋势线的p 值。注意,在前面展示的截图中,类型字段作为一个因素被包含在内,定义了三条趋势线。你可能会发现,视觉化中的不同线条(例如图 9.6中的线条)的 p 值是不同的。有时,即使某些趋势线的 p 值不显著,你也可能会发现整个模型在统计上是显著的。
通过显示总结信息,Tableau Desktop 可以显示给定视图的额外统计总结信息。通过菜单选择工作表 | 显示总结。在总结卡片上的下拉菜单中可以展开显示的总结信息:

图 9.16:总结信息
通过工具提示和总结提供的大量信息将帮助你评估趋势模型并理解其准确性和细节。但我们甚至可以进一步,通过导出并分析趋势模型的统计数据。接下来我们将讨论这个话题。
导出统计模型详情
Tableau 还提供了导出数据的功能,包括与趋势模型相关的数据。这使得你能够更深入地——甚至是通过可视化的方式——分析趋势模型本身。让我们分析房地产价格与面积散点图的三次多项式趋势线,而不考虑任何因素。要导出与当前视图相关的数据,请使用菜单选择工作表 | 导出 | 数据。数据将被导出为Microsoft Access 数据库(.mdb)文件,并且系统会提示你保存文件的位置。
导出数据到Access的功能仅限于 PC。如果你使用的是 Mac,则没有此选项。你可以快速浏览这一部分,但不必担心你无法复制示例。
在导出数据到 Access屏幕上,指定一个 Access 表名称,并选择是导出整个视图的数据还是仅导出当前选择的数据。你还可以指定 Tableau 应该连接到数据。这将生成数据源,并以指定名称将其提供给当前工作簿:

图 9.17:导出数据到 Access 对话框
新的数据源连接将包含原始视图中的所有字段,以及与趋势模型相关的附加字段。这使得我们可以像下面这样使用残差和预测构建一个视图:

图 9.18:使用残差和预测来测试模型的视图
预测(x 轴)和残差(y 轴)的散点图可以让你直观地看到每个标记与趋势线预测位置之间的距离。这也能让你看出残差是否均匀分布在零的两侧。如果分布不均,则可能表明趋势模型存在问题。
你可以将这个新视图与原始视图一同放在仪表板上,以便直观地探索趋势模型。使用工具栏上的高亮按钮来高亮显示 地址 字段:

图 9.19:高亮按钮
定义了高亮动作后,在一个视图中选择标记,将使你能够在另一个视图中看到它们。你可以扩展此技术,将多个趋势模型和仪表板导出,以同时评估几个趋势模型:

图 9.20:将原始视图与测试视图并排放置,可以看到它们之间的关系
使用 R 和 Python 进行高级统计分析等
你可以利用 Tableau 与 R 或 Python 的集成功能,进行更复杂的统计分析。R 是一个开源的统计分析平台和编程语言,您可以使用它定义高级统计模型。Python 是一种高级编程语言,它因易用性而迅速获得数据分析师和数据科学家的广泛关注。Python 提供了许多数据清洗功能以及统计函数库。
要使用 R 或 Python,首先需要安装一个 R 服务器或 TabPy(Tableau 提供的 Python API),然后配置 Tableau 以使用 R 服务器或 TabPy。要了解更多关于安装和使用 R 服务器或 TabPy 的信息,请参考以下资源:
R: www.tableau.com/solutions/r
Python: www.tableau.com/about/blog/2017/1/building-advanced-analytics-applications-tabpy-64916
本书并未深入探讨 R 和 Python 的复杂性,但了解它们的功能将帮助你进一步研究该主题。
接下来,我们将查看 Tableau 如何利用聚类分析识别数据中复杂的关系。
聚类分析
Tableau 使你能够在可视化中快速执行聚类分析。这可以让你根据选择的任意数量,找到彼此相似的单个数据点的组,或者说是 聚类。这种功能在许多不同的行业和学科中都非常有用,以下是一些例子:
-
营销部门可能会发现,根据消费金额、购买频率或订单时间和日期,确定彼此相关的顾客群体是有用的。
-
医院中的病人护理主任可能会从了解基于诊断、药物、住院时间和再入院次数的病人群体中获益。
-
免疫学家可能会根据抗药性或基因标记搜索相关的细菌菌株。
-
可再生能源顾问可能希望根据能源生产来定位风车的聚类,然后将其与地理位置进行关联。
Tableau 使用标准的 k-均值聚类 算法,每次渲染视图时都会产生一致的结果。Tableau 会自动分配聚类数(k),但你可以选择调整该值,并分配任意数量的变量。
在我们考虑聚类时,我们将再次回到房地产数据,看看我们是否能够找到市场上相关房屋的分组,然后根据我们找到的聚类确定是否存在地理模式。
尽管你可以在任何可视化中添加聚类,但我们将从散点图开始,因为它已经允许我们查看两个变量之间的关系。这将为我们提供一些关于聚类如何工作的洞察,然后我们可以添加额外的变量,看看聚类是如何重新定义的。
从 地址 按 面积 和 价格 的基本散点图开始,切换到 分析 面板,并将 聚类 拖到视图中:

图 9.21:通过从分析面板拖放添加聚类
当你将 聚类 拖到视图时,Tableau 会生成一个新的 聚类 字段(这里自动放置在 颜色 上),并会显示一个包含作为 变量 使用的字段和更改 聚类数 选项的 聚类 窗口。变量 默认将包含视图中已经存在的度量:

图 9.22:基于价格和面积的单独地址的聚类
变量 是聚类算法用来确定相关数据点的所有因素。聚类数 决定了数据被划分成多少组。在前面的视图中,你将看到三个房屋聚类:
-
价格较低且面积较小的(蓝色)
-
价格和大小适中的(橙色)
-
价格较高且面积较大的(灰色)
由于用于聚类的两个变量与散点图中使用的变量相同,因此比较容易看出聚类的边界(你可以想象几条对角线将数据分区)。
你可以将几乎任何字段从 数据面板 或 视图 拖动到 变量 部分进行添加或删除变量。随着你这样做,聚类会自动更新。通过将 卧室数 添加到 变量 列表中进行实验,观察到 聚类 1 和 聚类 2 之间现在有了一些重叠,因为一些较大的房屋只有两三个卧室,而一些较小的房屋可能有四五个卧室。卧室数量现在有助于定义聚类。移除 卧室数,并注意到聚类会立即再次更新。
一旦你得到了有意义的集群,就可以通过将其从视图中拖动并放入数据面板,将集群物化为数据源中的组:

图 9.23:通过将集群字段从视图拖动到数据面板来物化集群
集群组在渲染时不会重新计算。要重新计算集群组,请使用数据面板中字段的下拉菜单,并选择重新调整。
使用集群组可以完成很多事情,包括以下内容:
-
集群组可以跨多个可视化使用,并可以在仪表板上的操作中使用。
-
集群组可以编辑,如果需要,个别成员可以在组之间移动。
-
集群组的名称可以设置别名,从而允许比集群 1和集群 2更具描述性的名称。
-
集群组可以在计算字段中使用,而集群则不能。
在以下示例中,已经根据前一视图中的地址(集群)组对房产地图进行了颜色编码,以帮助我们查看基于价格和大小的集群是否与地理位置有关。虽然这些集群可以直接在此可视化中创建,但该组有一些之前提到的优势:

图 9.24:此视图使用我们识别的集群,进一步理解任何地理空间关系
在此视图中,每个原始集群现在都是一个已经设置了别名的组,从而为集群提供了更好的描述。你可以使用数据面板中组字段的下拉菜单,或者右键点击颜色图例中的项目来编辑别名。
映射的外观有很多编辑选项。你可以调整显示在地图上的图层,以便为你绘制的数据提供更多背景信息。从顶部菜单中选择地图 | 地图图层。图层选项将显示在左侧边栏中。之前的地图启用了街道、高速公路、县边界和邮政编码边界,以便为每个地址提供更精确的位置背景。可以选择的图层将取决于地图的缩放级别。
在查看之前的视图时,确实可以看到一些几乎完全是低价和小尺寸(集群 1)的邻域,另一些则几乎完全是中等价位(集群 2)。试想一个房地产投资者如何利用这样的可视化来寻找在中等价位社区中的低价房屋。
分布
分析分布非常有用。我们已经看到某些计算可以用于确定统计信息,如平均值、百分位数和标准差。Tableau 还可以轻松地快速可视化各种分布,包括置信区间、百分比、百分位数、分位数和标准差。
您可以使用分析窗格添加任何这些视觉分析功能(或者,您可以右键单击轴并选择添加参考线)。与参考线和带状图一样,分布分析可以应用于表、窗格或单元格的范围内。当您拖放所需的视觉分析时,您将有选择范围和轴的选项。在以下示例中,我们从分析窗格将分布带拖放到由Sum(Price)定义的窗格轴上:

图 9.25:在添加参考线和分布时,定义范围和轴
选择了范围和轴之后,您将有更改设置的选项。您还可以通过右键单击视图中的分析功能或轴或参考线本身来编辑线条、带状图、分布和箱线图。
例如,让我们以价格和大小为轴,将销售类型放在列上,并加上颜色的散点图为例:

图 9.26:一个分为三列的散点图
接下来,我们从分析窗格将分布带放置到仅定义为价格轴的窗格中。这将弹出一个对话框来设置选项:

图 9.27:用于添加或编辑线条、带状图、分布或箱线图的对话框
每个特定分布选项在计算下拉菜单中有独特的设置。例如,置信区间允许您指定一个百分比值作为区间。标准差允许您输入一个逗号分隔的数值列表,描述多少个标准差和在什么间隔下。前述设置反映了指定-2、-1、1和2个标准差。调整标签和格式如前述屏幕截图所示后,您应该看到如下结果:

图 9.28:每种销售类型价格的两个标准差
由于您将标准差应用于每个窗格,因此每种销售类型都有不同的带状图。每个轴都可以支持多个分布、参考线和带状图。例如,在前述视图中添加平均线可帮助观看者理解标准差的中心。
在散点图上,为每个轴使用分布可以提供分析异常值的非常有用的方法。显示面积和价格的单个标准差使您能够轻松查看落入两者或其中一个或都不符合正常价格范围的属性(您可能会考虑购买一套房子,其大小处于高端但价格在正常范围内!):

图 9.29:所有房屋价格和大小的一个标准差
预测
如我们所见,趋势模型可以进行预测。在一个良好的模型下,你可以期望额外的数据会遵循这个趋势。当趋势随着时间推移时,你可以大致了解未来值可能落在何处。然而,预测未来值通常需要另一种类型的模型。季节性等因素可能会产生趋势模型无法预测的差异。Tableau 包含内置的预测模型,可以用来预测并可视化未来值。
要使用预测功能,你需要一个包含日期字段或足够日期部分的视图,以便 Tableau 可以重建日期(例如,年份和月份字段)。Tableau 还允许基于整数进行预测,而不是仅限于日期。你可以从分析窗格中拖放预测,选择分析 | 预测 | 显示预测,或右键点击视图窗格并从上下文菜单中选择该选项。
例如,下面是展示阿富汗和澳大利亚人口增长及其预测结果的视图:

图 9.30:阿富汗和澳大利亚的人口预测
请注意,当你显示预测时,Tableau 会在行的SUM(人口)字段上添加一个预测图标,以表明该度量值正在进行预测。此外,Tableau 还会在颜色中添加一个新的特殊预测指示器字段,以便在视图中区分预测值与实际值。
你可以将预测指示器字段移动,甚至复制它(在拖动和放置时按住Ctrl键)到其他货架上,以进一步自定义你的视图。
当你通过从菜单中选择分析 | 预测 | 预测选项...,或在视图上使用右键菜单进行编辑时,你将看到多个选项,允许你自定义趋势模型,如下所示:

图 9.31:预测选项对话框
在这里,你可以设置预测的时长、确定聚合方式、自定义模型,并设置是否希望显示预测区间。默认情况下,预测长度设置为自动,但你也可以通过自定义值来延长预测时长。
源数据下的选项允许你可选地为模型指定不同的数据粒度。例如,视图可能按年份显示一个度量值,但你可以允许 Tableau 查询源数据以按月份检索值,并使用更细粒度的数据来潜在地实现更好的预测结果。
Tableau 能够单独查询数据源以获取更细粒度的数据,从而获得更精确的结果,这在处理关系型数据源时效果很好。然而,联机分析处理(OLAP)数据源不兼容这种方法,这也是为什么在处理数据立方体时无法使用预测功能的原因之一。
默认情况下,最后一个值会被排除在模型之外。这在你处理的数据中,最近期的时间段尚不完整时非常有用。例如,当记录是每日添加时,最后(当前)月份在最后一天记录添加之前是不会完整的。如果在最后一天之前该不完整的时间段未被忽略,可能会影响模型的准确性。
模型本身可以设置为自动模式,带或不带季节性,或者可以自定义设置季节性和趋势的选项。要了解这些选项,请参考以下来自 Superstore 示例数据集的 按月销售 视图:

图 9.32:此时间序列显示了一个周期性或季节性模式
数据显示出明显的周期性或季节性模式。这对于零售销售和其他类型的数据非常典型。以下是选择不同自定义选项的结果:

图 9.33:选择不同的预测模型会产生不同的结果
检查上述差异将帮助你理解选项之间的不同。例如,注意没有季节性时,结果是一条直线,不随季节波动。乘法趋势会导致更陡峭的上升和下降,而乘法季节性则会导致更剧烈的变化。
与趋势类似,预测模型和摘要信息可以通过菜单访问。选择 分析 | 预测 | 描述预测 将显示一个窗口,其中包含关于模型的摘要和详细信息的选项卡:

图 9.34:Tableau 描述了预测模型
点击窗口底部的 了解更多关于预测摘要的信息 链接,将为你提供更多关于 Tableau 中使用的预测模型的信息。
预测模型仅在满足特定条件时启用。如果该选项被禁用,请确保你连接的是关系型数据库而非 OLAP,且未使用表计算,且至少有五个数据点。
摘要
Tableau 提供了一套丰富的功能,帮助你为分析添加更多价值。趋势线使你能够更准确地识别离群值,确定哪些值落在某些模型的预测范围内,甚至可以预测测量值的预期位置。Tableau 提供了对趋势模型的全面可视化,甚至允许你导出包含趋势模型预测值和残差的数据。聚类功能可以帮助你基于各种因素找到相关数据点的组。分布功能有助于理解数据集中的值分布。预测功能能够通过复杂的趋势和季节性模型预测未来的结果。充分理解这些工具将使你能够澄清和验证最初的可视化分析。
接下来,我们将考虑一些高级可视化类型,这些类型将拓展你在使用 Tableau 时能够完成的工作范围,以及你向他人传达数据的方式!
第十章:高级可视化
我们已经探索了许多不同类型的可视化,并考虑了它们最适合回答哪些类型的问题。例如,条形图有助于比较数值;折线图可以显示随时间变化的趋势和变化;堆叠条形图和树状图帮助我们看到部分与整体的关系;箱形图帮助我们理解分布和异常值。我们还看到如何通过计算、注释、格式化和参考线来增强我们的理解和数据叙事。以这些知识为基础,我们将通过一些高级可视化扩展数据分析的可能性。
这些仅仅是 Tableau 惊人灵活性的示例,旨在激发你思考新的方式来查看、理解和传达数据。这些图表并不是为了复杂而复杂,而是为了激发创造力和兴趣,从而有效地传达数据。
我们将考虑以下主题:
-
高级可视化——何时以及为什么使用它们
-
坡度图和波动图
-
漏斗图
-
步骤线和跳跃线
-
火花线
-
哑铃图
-
单位/符号图
-
Marimekko 图
-
动画可视化
高级可视化——何时以及为什么使用它们
到目前为止,我们看到的可视化类型可以回答你关于数据的许多问题。如果你问的是什么时候?,那么时间序列可能是最合适的解决方案。如果你问的是多少?,条形图可以提供一个快速且好的结果。但有时候,你会提出一些问题,用其他类型的可视化会更好地回答。例如,运动或流动可能最好用桑基图表示。多少个? 可能最好用单位图或符号图回答。比较排名或绝对值的变化可能最适合使用坡度图或波动图。这些后续的可视化并不是你在最初探索数据时会使用的。但当你深入分析并想了解或传达更多信息时,你可以考虑本章中的一些选项。
本章中的每个可视化都是使用提供的Superstore数据创建的。我们不会提供逐步的操作指引,而是指出每种图表类型中使用的具体高级技巧。我们的目标不是让你记住步骤,而是让你理解如何创造性地利用 Tableau 的功能。
你可以在第十章完整工作簿中找到完整的示例,或者通过使用第十章入门工作簿从零开始构建,测试你不断增长的 Tableau 技能。
让我们从坡度图和波动图开始我们的高级可视化之旅。
坡度图和波动图
坡度图展示了从一个时期或状态到另一个时期或状态的值变化。例如,这里是一个坡度图,展示了南部地区每个州在2016到2017年间销售排名的变化:

图 10.1:坡度图有助于比较从一个时期或状态到另一个时期或状态的排名或绝对值的变化。
以下是用于创建前述坡度图的一些功能和技术:
-
表格计算Rank(SUM(Sales))是通过(按州分组)计算的,这意味着每个州在单一年度的分区内进行排名。
-
网格线和零线的行已设置为无。
-
轴已经被反转(右键单击轴并选择编辑,然后勾选反转选项)。这样可以使排名#1显示在顶部,较低的排名按降序排列。
-
轴已被隐藏(右键单击轴并取消勾选显示标题)。
-
标签已被编辑(点击标签)以显示在线的两端,垂直居中,并将排名数字放在州名旁边。
-
年份列标题已从视图底部移至顶部(从顶部菜单中选择分析 | 表格布局 | 高级,然后取消选中将最内层级别显示在底部的选项)。
-
已添加数据高亮(在视图中的
State字段的下拉菜单中选择显示高亮),使最终用户能够突出显示一个或多个州。
数据高亮使用户能够通过从下拉列表中选择值或输入内容(任何部分匹配的值都会高亮显示标记;例如,输入Carolina会高亮显示北卡罗来纳州和南卡罗来纳州)。数据高亮可以显示在你在视图中使用的任何离散字段(蓝色),并且可以跨多个视图在仪表板中使用,只要这些视图中使用了相同的字段。
坡度图可以使用绝对值(例如,销售额的实际值)或相对值(例如,销售额的排名,如本例所示)。如果你展示超过两年的数据以观察排名在多个时期的变化,那么结果的可视化图表可能被称为碰撞图,其外观如下:

图 10.2:此碰撞图显示了每个州随时间变化的排名变化,并利用了高亮功能。
坡度图在比较前后的排名或从一个州到另一个州的排名时非常有用。碰撞图则将这一概念扩展到多个时期。当你想要理解排名的相对变化并对比这种变化时,可以考虑使用这两种图表之一。
接下来,我们将考虑一种帮助我们理解部分与整体关系的图表。
漏斗图
瀑布图在你想展示各个部分如何逐步累积到整体时非常有用。例如,在以下截图中,瀑布图显示了利润如何在各个部门和产品类别中逐步累积到最终总和。有时利润为负数,在这种情况下,瀑布图会出现下跌,而正值则逐步累积到总和:

图 10.3:该瀑布图显示了每个类别如何增加(或减少)利润,逐步构建出总和
以下是构建图表所使用的特性和技巧:
-
SUM(Profit) 字段在行上是一个累计总和表计算(使用快速表计算从下拉菜单创建),并且是跨整个表计算的。
-
已经在视图中添加了行总计(从分析窗格拖放)。
-
标记类型设置为甘特条形图,并使用了临时计算,代码为:SUM(Profit) 来确定大小。一开始这可能看起来有点奇怪,但它会让甘特条形图根据实际值绘制,当利润为正时填充向下,利润为负时填充向上。
-
类别按其利润总和升序排序,使得瀑布图在每个部门内从左到右逐渐(或负向)构建。你可能需要尝试不同的排序选项,看看它们对展示效果的影响。
瀑布图将帮助你展示一个逐步累积或向总和/整体值推进的过程。接下来,我们将考虑阶梯线和跳跃线,用来展示随时间变化的离散变化。
阶梯线和跳跃线
标记类型设置为线条,点击路径架,你将看到三种线条类型选项:

图 10.4:点击标记卡上的路径,改变线条类型
这三种选项为:
-
线性:使用倾斜的线条来强调值之间的运动或过渡。这是默认设置,并且本书中所有的线图示例都使用了这种线条类型。
-
阶梯线:保持连接,但强调离散的变化步骤。当你想表达值之间没有过渡,或者过渡是一个离散的变化步骤时,这种线条类型非常有用。例如,你可能想展示一段时间内发电机的数量变化。从 7 到 8 的变化是一个离散的变化,可能最适合用阶梯线表示。
-
跳跃线不连接,当值发生变化时,会开始新的一条线。跳跃线在你想展示某个特定状态存在一段时间后跳到另一个状态时非常有用。例如,你可能想展示一家酒店随时间变化的日入住率。跳跃线可以帮助强调每一天的入住率是一个新的值。
在以下示例中,我们使用之前用瀑布图演示的利润构建过程,采用阶梯线来显示每一步骤的利润变化:

图 10.5:阶梯线图强调突变或离散差异。
尝试切换线条类型,查看其视觉效果以及每种类型对数据的传达方式。
小火花图
小火花图(Sparklines)是通过多个小型线形图展示的可视化,它们旨在快速读取和比较。小火花图的目标是提供一种可以一眼看懂的可视化。你并不是在传达精确的数值,而是让观众快速理解趋势、变化和模式。
在这种可视化方法的各种用途中,你可能已经在财务出版物中看到过小火花图,用于比较股票价格的变动。回想一下,在第一章中,我们讨论了小火花图(Sparklines)的初步实现,分析了折线图的迭代过程。这里是一个更加完善的示例:

图 10.6:小火花图让你快速浏览多个类别的时间变化趋势。
你可以通过以下步骤构建这样的图表:
-
从订单日期(Order Date)按季度(Quarter)展示销售总和(SUM(Sales))的简单视图开始,并将类别(Category)放入行(Rows)。
-
创建两个计算字段,显示每个类别的季度最低和最高销售额。最低销售额(Min Sales)的公式是
WINDOW_MIN(SUM(Sales)),最高销售额(Max Sales)的公式是WINDOW_MAX(SUM(Sales))。将这两个字段添加到行(Rows)中,作为离散(蓝色)字段。 -
将计算字段最后销售(Last Sales),公式为
IF LAST() == 0 THEN SUM([Sales]) END,放入行(Rows),并使用同步的双轴与圆形标记类型,突出显示每个时间段的最终销售值。 -
编辑销售总和(SUM(Sales))的轴,使每行或列具有独立的轴范围,并隐藏轴。这可以突出显示线条的变化。记住:目标不是显示精确的数值,而是让观众看到模式和变化。
-
隐藏行(Rows)的网格线。
-
调整视图大小(水平压缩并设置为适应高度(Fit Height))。这将使小火花图适应小空间,便于快速理解模式和趋势。
小火花图可以与各种时间序列一起使用,帮助快速洞察整体趋势和行为。
哑铃图
哑铃图(Dumbbell chart)是圆形图的一种变体,用于比较每个数据切片的两个数值,突出显示这两个数值之间的距离。
例如,下面是一个展示东西部地区利润差异的图表,按每个类别(Category)的产品进行展示:

图 10.7:哑铃图强调两个数值之间的距离/差异。
此图表是使用以下功能和技术构建的:
-
已使用同步的双轴图,其中一个轴用于标记利润总和(SUM(Profit)),另一个轴用于圆形(Circle)标记,另一个用于线形(Line)标记。
-
类别已按利润降序排序(排序时将东部和西部的利润合并)。
-
区域已放置在路径架位上,以便线条告诉 Tableau 在两个区域之间绘制一条线。
路径架位适用于线条和多边形标记类型。当你将字段放置在路径架位时,它告诉 Tableau 连接点的顺序(按照放置在路径上的字段的排序顺序)。路径通常用于地理可视化中,连接原点和目的地,但也可以用于其他可视化类型。Tableau 会在两个值之间(在此例中是东部和西部)绘制一条线。
-
区域已放置在颜色上,用于圆形标记类型。
哑铃图非常适合突出值之间的差异。接下来我们考虑如何使用单位/符号图表来推动反应。
单位/符号图表
单位图表可以用来显示单个项目,通常使用形状或符号来代表每个个体。这些图表能够引起强烈的情感反应,因为数据的表现形式不那么抽象,更容易识别为真实的事物。例如,下面的图表显示了每个区域中有多少客户的订单发生了延迟发货:

图 10.8:每个图像代表一个真实的人,远比圆形或方形更具象
该视图使用了以下技术:
-
视图被过滤,仅显示延迟发货为True的记录。延迟发货是一个计算字段,用于判断订单是否超过
14天才发货。代码如下:DATEDIFF('day', [Order Date], [Ship Date]) > 14 -
区域已按客户 ID的不同计数降序排序。
-
客户 ID已放置在详细信息上,以便为每个独立客户生成一个标记。
-
标记类型已更改为形状,并且形状已更改为性别形状调色板中的人形图形。要更改形状,请点击形状架位并选择所需的形状,如下图所示:
![]()
图 10.9:你可以使用形状架位将形状分配给维度值
前述的单位图表可能比标准条形图更能引起区域经理的反应,尤其是在他们被温和提醒,客户服务不佳会影响真实人群时。尽管这些形状仍然是抽象的,但它们更能代表实际的人物。你还可以考虑为标记添加客户姓名标签或使用其他技巧来进一步吸引你的观众。
请记住,通常在 Tableau 中,每个维度值交叉点都会生成一个标记。因此,对于一个只包含某字段值10的单行数据,绘制10个单独的形状会相当困难。这意味着你需要考虑数据的形态,并包含足够的行数来绘制你希望表示的单位。
在任何类型的可视化中,具体的形状也能显著减少理解数据所需的时间。对比这两个散点图中识别部门所需的努力量:

图 10.10:注意左图和右图之间的“认知负荷”差异
一旦你了解了形状的含义,就不再需要参考图例。将离散字段放置在形状架上,可以将形状分配给字段的各个值。
形状是位于My Tableau Repository\Shapes目录中的图像。你可以通过在该目录下添加文件夹和图像文件,将自定义形状包含在子文件夹中。
Marimekko 图表
Marimekko 图表(有时也叫做Mekko 图表)类似于垂直堆叠条形图,但额外使用了不同宽度的条形图来传达有关数据的更多信息。例如,下面是一个Marimekko 图表,展示了按区域和部门分类的销售情况。
条形图的宽度传达了区域的总销售额,而每个部分的高度则展示了部门在该区域内的销售百分比:

图 10.11:每个部分的高度表示每个部门的销售额,而每个条形图的宽度则表示每个区域的总销售额
在 Tableau 中创建 Marimekko 图表利用了根据坐标轴的单位固定条形图宽度的功能。
当一个连续(绿色)字段位于列上(从而定义了横轴),且标记类型设置为条形时,点击大小架会显示固定大小的选项。你可以手动输入大小和对齐方式,或将字段拖到大小架上,以改变条形图的宽度。
创建这种可视化所需的步骤如下:
-
标记类型已特别设置为条形。
-
区域和部门分别被放置在颜色和详细信息架上。它们是视图中唯一的维度,因此定义了视图的详细级别。
-
销售额已放置在行上,并应用了总百分比快速表计算。计算方式(地址)已设置为部门,这样我们就能得到每个部门在区域分区中的销售百分比。
-
计算字段区域销售计算了每个条形图右侧位置的X轴位置。代码如下:
IF FIRST() = 0 THEN MIN({EXCLUDE [Department] : SUM(Sales)}) ELSEIF LOOKUP(MIN([Region]), -1) <> MIN([Region]) THEN PREVIOUS_VALUE(0) + MIN({EXCLUDE [Department] : SUM(Sales)}) ELSE PREVIOUS_VALUE(0) END
虽然这段代码一开始可能显得令人望而生畏,但它遵循了逻辑进程。具体来说,如果这是第一个条形段,我们需要知道Region的总和,我们需要将之前Region的总和与新的Region总和相加。否则,计算的是同一个Region中的另一个条形段,因此区域总和与前一个条形段相同。再次注意,Compute Using选项已设置为Department,以使逻辑进程按预期工作。
最后,对视图进行了几个额外的调整:
-
Size字段是一个临时的详细计算,代码为
{EXCLUDE [Department] : SUM(Sales)}。正如我们之前提到的,这排除了Department字段,允许我们获取Region级别的销售总和。这意味着每个条形的大小是根据给定Region的总销售额来确定的。 -
点击Size架构可以设置条形的对齐方式为右对齐。由于之前的计算给出了条形的正确位置,我们需要确保条形从该起始点绘制。
-
各种字段,如SUM(Sales)的绝对值和百分比,已被复制到Label架构中,以便每个条形段能够更清晰地传达含义给观众。
要为每个Region列添加标签,您可以考虑创建第二个视图并将两个视图放置在仪表板上。或者,您也可以使用注释。
除了让您能够创建 Marimekko 图表外,控制条形的大小(以坐标轴单位为准)还为创建其他可视化提供了各种可能性,例如复杂的级联图或阶梯面积图。使用的技术与此处相似。您还可以将大小调整功能与连续区间结合使用(使用下拉菜单将视图中的区间字段从离散更改为连续)。
有关 Marimekko 图表的更全面讨论,以及适用于稀疏数据的处理方法,请参阅 Jonathan Drummey 在www.tableau.com/about/blog/2016/8/how-build-marimekko-chart-tableau-58153上的博客文章。
动画可视化
Tableau 的早期版本通过Pages架构和播放控制实现了简单的动画效果。Tableau 2020.1 引入了真正的Mark Animation,意味着在应用筛选器、排序或分页变化时,标记会平滑过渡。考虑通过以下几种方式利用动画来扩展您的分析潜力:
-
在探索和分析数据时启用它。这使您能够获得您可能会错过的分析洞察,例如看到随着筛选器变化,散点图中的标记会向哪个方向移动。
-
战略性地使用它来增强数据故事。动画可以用来吸引注意力、突出重要元素,或为结论的出现制造悬念。
我们将在接下来的示例中考虑两种动画方法。
通过动画增强分析效果
考虑以下柱状图,展示了每个部门的销售额和利润的相关性:

图 10.12:每个部门的销售额和利润
注意区域过滤器。在Chapter 10工作簿中多次更改过滤器选择。你将观察到没有动画时的标准行为:圆形标记会立即在过滤器确定的新位置重新绘制。这是有效的,但在过滤器设置之间存在一些脱节。当你在区域之间切换时,注意到在跟踪标记的位置和新选择之间的心理难度。某个区域的标记是增加了利润吗?是减少了销售额吗?
现在,为视图开启动画。为此,使用菜单选择格式 | 动画…。动画格式面板将出现在左侧。使用它为选定工作表启用动画:

图 10.13:动画格式面板提供了工作簿和单个工作表动画设置的各种选项
尝试不同的持续时间设置并更改过滤器值。注意从一个区域到另一个区域销售额和利润变化的观察有多么容易。这让你能更轻松地注意到变化。即使不花费大量的认知精力,你也会开始洞察变化的大小和方向。动画为此分析洞察提供了路径。
通过动画增强数据讲故事的效果
除了在进行数据发现和分析时提供分析洞察外,你还可以利用动画更有效地激发兴趣,并突出数据故事中的决策点、机会或风险。例如,考虑一下Chapter 10工作簿中的这个视图:

图 10.14:阿波罗 13 号任务期间 O2 气罐 1 和 2 的压力读取随时间变化
这个视图讲述了阿波罗 13 号任务和灾难的故事,它通过使用页面架和流畅的动画来实现这一点。尝试调整Chapter 10工作簿中的动画速度和播放控件。考虑一下动画如何用来提高意识、激发兴趣,甚至制造悬念。
当你在仪表板上使用多个视图,并且每个视图在页面架上拥有相同的字段组合时,你可以通过同步播放控件(使用播放控件上的下拉菜单)来创建一个完全动画化的仪表板。
动画可以与其他 Tableau Desktop 用户共享,并在 Tableau Server、Tableau Online 和 Tableau Public 上显示。
总结
在本章中,我们涵盖了多种高级可视化类型!我们讨论了显示排名或数值变化的斜率图和凸起图,展示离散变化值的阶梯线和跳跃线,以及帮助具体化抽象概念的单元图。
不能涵盖所有可能的可视化类型。相反,我们的目的是展示一些可以实现的方式,并激发新的创意和灵感。当你尝试并不断迭代新的数据呈现方式时,你将变得更加自信,能够更好地传达数据背后的故事。接下来,我们将简要回到仪表盘的话题,看看一些高级技术如何使其真正变得动态。
第十一章:动态仪表板
我们在之前的第八章《使用仪表板讲述数据故事》中已经讨论过仪表板,并考虑了如何使用各种操作使其具备交互性。现在,我们将扩展这一概念,考虑如何创建真正动态的仪表板——可以显示和隐藏对象的仪表板。这使得你可以做很多惊人的事情,例如允许用户选择查看哪种类型的可视化,或者动态隐藏或显示相关或期望的控件。
我们将考虑以下几种动态交互方式:
-
显示/隐藏按钮
-
工作表交换
-
自动显示和隐藏控件
让我们从考虑如何使用显示/隐藏按钮来在仪表板上显示和隐藏内容开始。
显示/隐藏按钮
显示/隐藏按钮允许你显示和隐藏布局容器(以及其中的所有内容!)。你可以在第十一章完整工作簿中找到几个示例。第十一章入门工作簿包含仪表板,但没有显示/隐藏按钮或容器。第二个示例中使用的图像也位于第十一章目录中。
要使用显示/隐藏按钮,先将一个布局容器添加到仪表板中,作为浮动对象,然后使用下拉菜单选择添加显示/隐藏按钮,如图 11.1所示:

图 11.1:一个包含单一地图视图和浮动布局容器的仪表板
在这个仪表板上,我们添加了一个垂直布局容器,浮动在地图上方。当我们选择添加显示/隐藏按钮时,Tableau 会向仪表板添加一个小按钮:

图 11.2:布局容器的显示/隐藏按钮
每个显示/隐藏按钮都可以应用于仪表板上的任何单个浮动布局容器。
使用重命名仪表板项目…选项在布局容器下拉菜单中,可以轻松识别哪个布局容器是显示/隐藏按钮的目标。
你可以通过点击按钮的下拉菜单选择编辑按钮...来编辑按钮的外观和动作:

图 11.3:选择“编辑按钮…”可以显示许多选项,用于更改按钮的行为和外观
在弹出的对话框中,你将有选项选择要显示或隐藏的布局容器,按钮的样式(图像或文本),以及在容器显示或隐藏时显示哪些图像或文本。
在这个示例中,显示/隐藏按钮使用了默认的图像按钮样式(如图 11.3所示),并且布局容器已经填充了一些过滤器和地图的图例。
你可以将任何仪表板对象包含在容器中,包括过滤器、图例、参数和集合控件,甚至是其他视图!
此外,容器还设置了边框和半透明背景,以便地图在容器下方稍微可见。通过选择容器并使用仪表板窗格的布局选项卡完成了这一设置,如下所示:

图 11.4:使用布局窗格调整所选仪表板对象的选项
最终结果在第十一章工作簿中展示,是一个带有显示/隐藏按钮的仪表板,使用户清楚地知道可以显示或隐藏其他选项:

图 11.5:在这里您可以看到布局容器的隐藏和显示状态以及按钮图像的变化
在设计模式下使用 Alt + Click 来触发按钮动作,或者切换到演示模式,单击即可触发按钮。
显示/隐藏按钮为您的仪表板设计提供了很大的灵活性,从优化空间到简化显示,到从打印输出中删除过滤器和其他混乱的内容。
考虑在第十一章完成工作簿中的另一个示例,该示例说明了显示和隐藏说明的可能性:

图 11.6:单击问号按钮会显示如何使用仪表板的说明
在这种情况下,默认按钮图像已被问号图标替换。这是通过编辑图像实现的,如图 11.3所示,并更改图像(questionmark.png包含在第十一章目录中。)
当用户点击按钮时,一个浮动容器出现在整个仪表板的顶部。它包括文本以及一个带注释的图像,指导用户如何使用仪表板。在这个简单的例子中,以这种方式提供说明可能有点过火,一个简单的文本标签就足够了。
然而,随着您构建更复杂的仪表板或需要解释的详细分析,这是向用户提供额外指示和细节的好方法,否则会使仪表板混乱。
还考虑使用显示/隐藏按钮来允许用户互动,这些功能不希望包含在 PDF 或仪表板的打印页面中。过滤器和参数非常有用,但并不总是希望它们显示在精美的输出中。
让我们继续考虑另一种在仪表板上动态显示、隐藏甚至切换内容的方法。
表格切换
表格切换,有时也称为表格选择,是一种动态在仪表板上显示和隐藏视图的技术,通常表现为将一个视图与另一个视图进行切换。在仪表板上动态隐藏和显示视图具有更广泛的应用。当与浮动对象和布局容器结合使用时,此技术允许您创建丰富和动态的仪表板。
让我们从一些基本的表格切换原则开始。
表格切换的基本原则
基本原则相对简单。当以下情况发生时,仪表板上的视图会折叠:
-
至少有一个字段位于行或列上
-
它位于水平或垂直的布局容器中
-
它没有固定的高度或宽度,并且布局容器未设置为等分项目
-
组合使用过滤器或隐藏功能会阻止任何标记的呈现
此外,标题和说明文字不会随视图一起折叠。然而,这些可以被隐藏,从而使视图完全折叠。
接下来,我们将探讨一个如何在实践中使用工作表交换的示例。
使用工作表交换在仪表板上更改视图
让我们考虑一个简单的示例,视图显示了 部门和类别的利润,并具有一个 部门 快速过滤器。仪表板已被格式化(从菜单中选择 Format | Dashboard),并使用灰色阴影帮助我们看到效果:

图 11.7:在仪表板中隐藏工作表的演示
观察到过滤掉所有部门后,视图会折叠。标题仍然存在,但也可以隐藏。
为了交换两个不同的工作表,我们简单地利用了折叠行为和布局容器的属性。我们将通过创建两个通过参数和计算字段过滤的不同视图来开始。参数将允许我们确定显示哪个工作表。请执行以下步骤:
-
创建一个名为
Show Sheet的整数参数,列出 String 类型的值,设置为 Bar Chart 和 Map:![]()
图 11.8:创建一个参数来控制显示哪个工作表
-
由于我们希望基于参数选择进行过滤,而参数不能直接添加到 Filters 架构中,因此我们将创建一个名为
Show Sheet Filter的计算字段来返回参数的选定值。代码很简单,直接使用[Show Sheet],即参数名称,返回当前参数的值。 -
创建一个新的工作表,命名为 Bar Chart,类似于图 11.7 中显示的 部门和类别的利润 视图。
-
显示参数控制(右键点击数据窗口中的参数,选择 Show Parameter Control)。确保选择了 Bar Chart 选项。
-
将
Show Sheet Filter字段添加到 Filters 架构,并勾选 Bar Chart 来保留该值。 -
创建另一个命名为 Map 的工作表,显示按利润划分的州填充地图:
![]()
图 11.9:地图视图
-
在该视图上显示参数,并将选择更改为 Map。请记住,参数选择是全局性的,适用于整个工作表。如果你切换回 Bar Chart 视图,它应该不再显示任何数据,因为已经应用了过滤器。
-
将
Show Sheet Filter字段添加到 Filters 架构,并勾选 Map 作为保留的值。 -
创建一个新的仪表板,命名为 Sheet Swap。
-
从左侧窗口的对象中,将一个 Horizontal 布局容器添加到仪表板中:
![]()
图 11.10:插入一个水平布局容器
在这种情况下,垂直布局容器同样有效。关键在于布局容器允许内部的每个视图在设置为适合整个视图时扩展以填充容器,或适合宽度(对于水平容器)或适合高度(对于垂直容器)。当一个视图折叠时,可见视图将扩展以填充剩余的容器。
-
将每个 Sheet 添加到仪表板中的布局容器中。由于在每个视图中都可见,参数控件应该会被自动添加。
-
在条形图视图上使用下拉菜单,确保视图设置为填充容器(适合 | 整个视图)。您不必为地图设置填充,因为地图可视化会自动填充容器。
-
隐藏每个视图的标题(右键单击标题并选择隐藏标题)。
现在您有一个仪表板,更改参数会显示一个或另一个视图。当选择地图时,过滤器导致条形图没有数据,因此它会折叠,地图填充容器:

图 11.11:地图可见,而条形图已折叠
或者,当选择条形图时,由于过滤器的作用,地图会折叠,而条形图会填充容器:

图 11.12:条形图可见,而地图已折叠
折叠视图的关键是使用一个或一组过滤器确保不显示任何数据行。您不必使用参数来控制过滤。您可以使用常规过滤器或操作过滤器来实现相同的效果。这为仪表板中的动态行为开辟了各种可能性。
Sheet 交换可以为您的仪表板带来惊人的效果。从允许用户选择可视化类型,到交换适合小数据集的视图,再到为大数据集总结的视图,考虑使用 Sheet 交换来实现动态体验。
在某些情况下,您可能会考虑替代 Sheet 交换,例如使用导航按钮在不同版本的仪表板之间导航,而不是尝试在同一仪表板中交换内容。
Sheet 交换允许您在仪表板中交换视图。如果视图更改导致某些图例、过滤器或参数不再适用,并且您希望隐藏它们,我们来考虑一些可能性。
自动显示和隐藏其他控件
当所有数据被过滤时,视图将会折叠。但是,其他控件(如快速过滤器、参数、图像、图例和文本框)不会折叠。您可以使用我们之前讨论过的显示/隐藏按钮,但通常您希望在过滤器更改时自动显示或隐藏这些控件,而无需用户采取额外的操作。
考虑前一节中的简单示例。由 Tableau 自动添加到仪表板中的颜色图例适用于地图,但当条形图显示时,图例就不再适用了。
幸运的是,我们可以扩展前一节中使用的技术,通过展开视图,将我们希望显示的项推到浮动对象下方,然后收起视图,让我们希望隐藏的项返回到浮动对象下方。
让我们扩展之前的工作表交换示例,看看如何显示和隐藏颜色图例:
-
创建一个名为显示/隐藏图例的新工作表。此视图仅用于显示和隐藏颜色图例。
-
通过双击行并输入
MIN(1)来创建临时计算。为了让视图收缩,我们必须在行或列上有一个字段,所以我们将使用这个字段来为行和列分别提供一个单一的坐标轴,并且没有其他标题。 -
在列上复制临时计算。现在你应该有一个简单的散点图,并且只有一个标记。
-
由于这是一个辅助工作表,并非我们希望用户看到的内容,因此我们不希望它显示任何标记或线条。使用格式 | 线条格式化视图,移除行和列中的网格线,以及坐标轴标尺。此外,隐藏坐标轴(右键点击每个坐标轴或字段,取消勾选显示标题)。同时,将颜色设置为完全透明以隐藏标记。
-
当选择地图选项时,我们希望显示此视图,因此显示参数控制,并确保它设置为地图,然后将显示工作表过滤器添加到过滤器中,并勾选地图:
![]()
图 11.13:应用显示工作表过滤器的显示/隐藏图例工作表
-
在工作表交换仪表板上,将显示/隐藏图例工作表添加到布局容器中,放置在显示工作表参数下拉菜单和颜色图例之间。隐藏显示/隐藏图例工作表的标题。
-
确保选中地图。颜色图例应该被推到底部。
-
将一个布局容器作为浮动对象添加。就大小和位置而言,它应完全覆盖颜色图例原先所在的区域。它应该覆盖显示/隐藏图例工作表的标题,但不覆盖参数下拉菜单。
可以通过按住Shift键拖动、将新对象选项设置为浮动,或通过在对象上使用下拉菜单将对象添加为浮动对象。你还可以在仪表板窗格中更改新对象的默认行为,从平铺更改为浮动。
-
布局容器默认是透明的,但我们希望它能够隐藏下面的内容。使用下拉菜单进行格式化,并添加白色阴影,使其与背景不可区分。
此时,您已经拥有一个动态仪表板,其中图例在地图显示并适用时显示,在条形图可见时隐藏。当选择地图时,显示/隐藏图例工作表会显示,并将图例推到底部的布局容器:

图 11.14:显示/隐藏图例将图例推到浮动对象下方
当选择条形图时,显示/隐藏图例工作表折叠,图例不再适用于该视图,掉到浮动布局容器下方/隐藏。

图 11.15:显示/隐藏图例折叠,导致图例移到浮动对象下方
您可以在仪表板上使用该技术的变体数量没有限制。您可以根据需要添加任意多的层。您甚至可以组合这些技术,在仪表板上推送或移除视图和对象。创造丰富互动用户体验的可能性是令人难以置信的。
总结
创建真正动态的仪表板为您的仪表板设计提供了极大的灵活性。显示/隐藏按钮为最终用户提供了在仪表板上显示或隐藏内容的选项。工作表切换技术允许您切换显示哪些视图,并自动显示或隐藏控件或其他内容。
本章介绍的技术将使您能够实现各种惊人的互动效果,从隐藏和显示控件、说明、业务规则和分析的解释,到允许用户确定可视化类型并切换视图。
接下来,我们将转向使用一些高级技术来探索某种类型的数据:地理空间数据!
第十二章:探索映射和高级地理空间功能
到目前为止,我们已经看过利用 Tableau 基本功能的地图和地理空间可视化示例。在本章中,我们将踏上探索 Tableau 提供的广泛映射和地理空间功能之旅。从利用内置的地理空间数据库并用额外的数据和空间文件进行补充,到使用高级地理空间功能,我们将探索 Tableau 能够实现的可能性。
正如我们之前所做的,本章将通过一些实际示例来介绍这些概念。这些示例将跨越不同行业,包括房地产、交通运输和医疗保健。与以往一样,这些示例具有广泛的适用性,您将发现许多方法来利用数据,发掘您所发现的空间模式中的答案。
在本章中,我们将讨论以下主题:
-
Tableau 地图概述
-
使用 Tableau 渲染地图
-
使用地理空间数据
-
利用空间函数
-
创建自定义区域
-
Tableau 映射:技巧与窍门
-
在背景图像上绘制数据
Tableau 地图概述
Tableau 包含一个内部地理数据库,使其能够识别常见的地理元素,并在地图上的特定纬度和经度位置渲染标记。在许多情况下,例如国家或州,Tableau 还包含内部的形状文件,使其能够在正确的位置以复杂的矢量形状渲染标记。Tableau 还可以利用您特定的地理空间数据,例如纬度和经度、形状文件以及空间对象。本章中,我们将探讨其中的一些可能性。现在,我们将带您了解 Tableau 渲染地图的一些基本知识,以及可用的自定义选项。
使用 Tableau 渲染地图
请参考以下截图(第十二章 工作簿中的 基本地图 示例),并对某些元素进行编号以便参考:

图 12.1:Tableau 中的基本地理空间渲染
数字表示 Tableau 渲染地图能力的某些重要方面:
-
数据中的地理字段会显示为一个地球图标。Tableau 默认会为它识别的字段添加此图标。您可以通过菜单为任何字段分配一个地理角色,选择 地理角色 即可。
-
视图中的地理字段(在本例中位于 详细信息)是渲染地图所必需的。
-
如果 Tableau 能够将地理字段与其内部数据库匹配,那么将 纬度(生成的) 和 经度(生成的) 字段放在 行 和 列 上,再加上地理字段(们)放在 标记 卡片上,即可渲染出一张地图。
-
与 Tableau 地理数据库不匹配的值将显示一个指示器,提醒您存在未知值。
您可以右键点击未知指示器将其隐藏,或者点击它以显示以下选项:
-
编辑位置(手动匹配位置值到已知值或经纬度)
-
过滤掉未知位置
-
在默认位置绘制(纬度和经度为 0,这个位置有时幽默地被称为“空岛”,位于非洲西海岸附近)
Tableau 在地图上呈现标记的方式与散点图类似(实际上,您可以把地图看作是一种散点图,它通过一些复杂的几何变换来投影经纬度)。这意味着您可以在地图上绘制圆形、点和自定义形状。
在标记下方,地图本身是从在线地图服务中检索到的矢量图像。接下来,我们将考虑如何自定义地图图层和选项。
自定义地图图层
地图本身——陆地和水域、地形、街道、国家和州的边界等——都是从在线地图服务中检索到的矢量图像(也提供离线选项)。
然后在该图像上绘制标记。您已经知道如何使用数据、计算和参数来调整标记的渲染方式,但 Tableau 给予您对地图渲染方式的高度控制。
使用菜单通过选择地图 | 背景地图来探索各种选项。例如,这里是一个暗色地图:

图 12.2:暗色地图是多种地图背景选项之一
这张地图包含与前一个截图完全相同的标记,只是背景不同。其他选项包括浅色、街道、卫星等。
如果您将在没有互联网的环境中使用 Tableau(或发布到没有互联网连接的 Tableau 服务器),请选择离线选项。但是,请注意,离线版本不包含在线选项中的细节或缩放级别。
通过从菜单中选择地图 | 地图图层,可以找到其他图层选项。这将打开一个看起来像这样的地图图层面板:

图 12.3:地图图层面板
地图图层面板提供了选择背景、设置洗涤效果、选择显示的特征以及设置数据图层的选项。根据缩放级别,某些选项可能会被禁用(例如,建筑物轮廓只有在缩放到足够接近地图时才会启用)。数据图层允许您基于各种人口统计数据将填充地图应用于背景。这些人口统计数据只作为图像的一部分显示,并且不具备互动性,数据不会暴露给用户交互或计算。
您还可以使用菜单选项地图 | 背景地图 | 管理地图来更改使用的地图服务,这样您就可以指定自己的 WMS 服务器、第三方服务,或者使用Mapbox地图。这使您能够以任何您喜欢的方式自定义地图可视化的背景图层。
这些功能的细节超出了本书的范围,不过,你可以在 Tableau 的官方文档中找到相关内容。
自定义地图选项
此外,你还可以自定义可供最终用户使用的地图选项。注意当你将鼠标悬停在地图上时会出现的控制项:

图 12.4:自定义地图时可用的控制项
这些控制项允许你搜索地图、放大和缩小、将地图定位到当前位置,并使用各种选择方式。
你还可以使用键盘和鼠标组合来导航地图。使用Ctrl + 鼠标滚轮或Shift + Ctrl + 鼠标点击进行缩放。点击并按住或Shift + 点击来平移。
选择 地图 | 地图选项 后会出现其他选项:

图 12.5:地图选项
这些选项让你能够设置允许最终用户执行哪些地图操作,以及是否显示比例尺。此外,你还可以设置比例尺和径向选择的显示单位。选项包括自动(基于系统配置)、公制(米和千米)和美制(英尺和英里)。
Tableau 中集成了许多其他地理空间功能,我们将在接下来的内容中揭示如何利用地理空间数据。
使用地理空间数据
我们已经看到,对于任何数据源,Tableau 会根据它与内部地理数据库匹配的字段自动提供纬度(生成)和经度(生成)字段。像国家、省州、邮政编码、大都市区(MSA)和国会选区等字段都包含在 Tableau 的内部地理库中。随着 Tableau 持续增加地理功能,你可能需要查阅文档,了解内部数据库具体包含的内容。
然而,你也可以在可视化中利用特定的地理空间数据。我们将考虑使用能够支持地理空间可视化的数据,包括以下内容:
-
在你的数据中包含
纬度和经度作为数值。 -
将包含
纬度和经度定义的.csv文件导入到 Tableau 的数据库中。 -
利用 Tableau 连接到支持空间对象的各种空间文件或数据库的能力。
我们将在接下来的部分中探索这些选项,然后进一步了解如何利用地理空间函数扩展数据。
在数据中包含纬度和经度
在数据中包含纬度和经度可以为你的可视化(和计算)提供极大的灵活性。例如,虽然 Tableau 内建了国家、省州和邮政编码的地理编码功能,但它并不提供地址级别的地理编码。提供纬度或经度数据能让你精确地在地图上定位标记。
你可以在使用房地产数据源的第十二章工作簿中找到以下示例:

图 12.6:按价格大小绘制的待售房屋地图
在这里,每个单独的房屋可以通过精确的位置进行映射,并根据价格调整大小。为了帮助观众更直观地理解,已经应用了街道背景。
有许多免费的和商业的工具可以地理编码地址。也就是说,给定一个地址,这些工具会添加经度和纬度信息。
如果你无法直接将字段添加到数据源中,可以考虑使用跨数据库连接或数据混合。另一种选择是直接将纬度和经度定义导入到 Tableau 中。接下来我们将考虑这种选项。
导入定义到 Tableau 的地理数据库
若要从菜单导入,选择地图 | 地理编码 | 导入自定义地理编码...。导入对话框中包含了一个链接,描述了该选项的更多细节:

图 12.7:导入自定义地理编码对话框
通过导入一组定义,你可以:
-
添加新的地理类型
-
扩展 Tableau 内建的地理类型
纬度和经度定义了一个单一的点。在某些时候,你可能需要呈现更复杂的形状和线条。在这种情况下,你可以考虑一些地理空间函数和空间对象支持,接下来我们将讨论这些内容。
利用空间对象
空间对象定义了地理区域,这些区域可以简单如一个点,也可以复杂如多边形。这使得你可以呈现从自定义商业区域到河流、道路以及县和国家的历史边界等所有内容。空间对象可以存储在空间文件中,并且被一些关系型数据库所支持。
Tableau 支持多种空间文件格式,如ESRI、MapInfo、KML、GeoJSON和TopoJSON。此外,你还可以直接连接到ESRI数据库以及具有地理空间支持的关系型数据库,如ESRI或 SQL Server。如果你创建了一个提取文件,空间对象将被包含在提取文件中。
许多应用程序,如Alteryx、Google Earth和ArcGIS,都可以用来生成空间文件。空间文件也可以从许多组织那里轻松下载。这为地理空间分析提供了极大的灵活性。
例如,这里有一张美国铁路的地图:

图 12.8:美国铁路地图
要复制此示例,请从美国人口普查局下载 shapefile:catalog.data.gov/dataset/tiger-line-shapefile-2015-nation-u-s-rails-national-shapefile。
下载并解压文件后,连接到tl_2015_us_rails.shp文件。在预览中,你将看到带有 ID 字段和铁路名称的数据记录。几何字段是定义铁路段线性形状的空间对象:

图 12.9:美国铁路地图预览
在空白工作表中,只需双击几何字段。Tableau 将把地理数据集包括在细节中,并自动引入纬度和经度字段以完成渲染。尝试将 ID 字段包含在细节中,并根据全名进行筛选。
考虑使用跨数据库连接来补充现有数据与自定义空间数据。此外,Tableau 支持空间连接,允许你将仅在空间上相关的数据汇聚在一起,即使没有其他关系存在。
接下来,我们将着眼于利用一些空间函数,甚至是空间连接来扩展你的分析。
利用空间函数
Tableau 不断增加对空间函数的本地支持。撰写本文时,Tableau 支持以下功能:
-
Makeline()返回一个由两个点确定的线状空间对象。 -
Makepoint()返回一个由两个坐标确定的点状空间对象。 -
Distance()返回两个点之间的距离,单位为所需的测量单位。 -
Buffer()在一个点周围创建一个给定距离半径的圆形区域。你可以指定测量单位。
我们将通过第十二章工作簿中的医院和病人数据集来探索一些这些功能。该数据集将房地产数据重新构想为一个被病人环绕的医院,在以下视图中通过形状、大小和颜色的差异来表示:

图 12.10:一个被病人包围的医院(由星号表示)
我们可能会提出许多分析性问题。我们将集中讨论以下几个问题:
-
每个病人距离医院有多远?
-
有多少病人位于给定半径内?
-
哪些病人位于半径之外?
为了开始回答这些问题,我们将创建一些计算字段来为我们提供构建块。为了在同一计算中使用多个点,医院的纬度和经度需要与每个病人记录一起包含。实现这一目标的一种方法是使用几个FIXED 细节级别(LOD)表达式将值返回到每一行。
我们将创建一个名为Hospital Latitude的计算,代码如下:
{FIXED : MIN(IF [Location Type] == "Hospital" THEN [Latitude] END)}
以及一个名为Hospital Longitude的相应计算,代码如下:
{FIXED : MIN(IF [Location Type] == "Hospital" THEN [Longitude] END)}
在每种情况下,医院的纬度和经度是通过IF/THEN逻辑确定的,并通过FIXED LOD 表达式作为行级结果返回。这为我们提供了几个附加计算的构建块。接下来,我们将考虑第十二章工作簿中的几个示例。
MAKELINE()和 MAKEPOINT()
在考虑这两个功能时,我们将创建一个计算字段,绘制医院和每个患者之间的线。我们将命名我们的计算为Line并编写以下代码:
MAKELINE(
MAKEPOINT([Hospital Latitude], [Hospital Longitude]),
MAKEPOINT([Latitude], [Longitude])
)
MAKELINE()需要两个点,这些点可以通过MAKEPOINT()函数创建。该函数需要纬度和经度。第一个点是医院的位置,第二个点是患者的纬度和经度。
由于该函数返回一个空间对象,你会注意到该字段有一个地理图标:

图 12.11:地理图标已添加到 Line 字段
在一个新的可视化中,如果你双击Line字段,你会立即得到一个地理可视化,因为该字段定义了一个地理空间对象。你会注意到Detail上的COLLECT(Line)字段,以及Columns和Rows上的 Tableau 的Longitude (generated)和Latitude (generated)。地理空间集合被绘制为一个单一对象,除非你通过向视图添加维度来将其拆分。
在这种情况下,每个 ID 定义了一条单独的线,因此将其添加到Marks卡片的Detail中会将地理空间对象拆分为单独的线:

图 12.12:每条线从医院起点绘制到患者
如果我们想知道每条线覆盖的距离呢?我们将在一个扩展的例子中考虑这个问题。
DISTANCE()
距离可能是我们分析数据时非常重要的概念。知道两个地理空间点之间的距离能为我们提供很多见解。计算本身非常类似于MAKELINE(),我们可以创建一个名为Distance to the Hospital的计算字段,使用以下代码:
DISTANCE(
MAKEPOINT([Hospital Latitude], [Hospital Longitude]),
MAKEPOINT([Latitude], [Longitude]),
'mi'
)
类似于MAKELINE()计算,DISTANCE()函数也需要几个点,但它还需要一个单位。这里,我们使用参数'mi'指定英里,但我们也可以使用'km'来指定公里。
我们可以将此计算放置在Tooltip上,以查看每条线所覆盖的距离:

图 12.13:工具提示现在显示从医院到患者的距离
这个简单的例子可以大大扩展。现在,我们可以知道当我们悬停在这条线时,患者 ID 5距离医院2.954…英里。我们可以通过将距离四舍五入到2个小数位来改进显示,或者查看患者的名字。我们还可以通过将距离作为过滤器来显著增加分析的实用性(分析距离超过或低于某个阈值的患者),或者将距离作为更复杂分析中的相关因素。
我们可以通过Buffer()在视觉上完成一些操作,接下来我们将进一步探讨!
BUFFER()
Buffer 函数与DISTANCE()类似,但方向相反。与其计算两个点之间的距离,BUFFER()函数允许你指定一个点、一个距离和一个单位,进而在该点周围绘制一个具有指定半径的圆。
例如,你可能想要可视化哪些病人在医院的 3 英里半径范围内。为此,我们将创建一个名为Hospital Radius的计算字段,代码如下:
IF [Location Type] == "Hospital"
THEN BUFFER(MAKEPOINT([Latitude], [Longitude]), 3, 'mi')
END
这段代码首先检查确保只对医院记录进行计算。BUFFER()计算本身使用经纬度来生成一个点,并指定一个 3 英里半径。
为了可视化半径以及每个病人的个体标记,我们将创建一个双轴地图。双轴地图会复制经纬度字段并放在行或列中,然后使用Marks卡片的不同部分来渲染不同的地理空间对象。例如,在这里我们将病人的位置以圆点表示,将半径以自动标记类型表示:

图 12.14:位于医院 3 英里半径范围内的病人
注意,我们使用了生成的纬度和经度字段。这些字段作为占位符,供 Tableau 可视化任何空间对象。在Marks卡片的第一个部分,我们包含了来自数据的纬度和经度字段。在第二部分,我们加入了医院半径字段。在这两种情况下,生成的字段使 Tableau 能够使用Marks卡片上的地理或空间对象来定义可视化。
我们刚刚触及空间函数的表面。例如,你可以将半径值参数化,以便让最终用户动态更改距离。你还可以将MAKEPOINT()和BUFFER()计算作为连接计算在数据源中使用,以便将空间相关的数据汇聚在一起。例如,利用这些数据,你可以通过BUFFER()与MAKEPOINT()的相交连接将医院记录与病人记录结合,专门处理包含或排除特定半径内病人的数据集。这大大提升了你的分析能力。
在充分理解了可用的地理空间函数后,我们稍微调整一下焦点,讨论另一个感兴趣的话题:创建自定义区域。
创建自定义区域
自定义区域是你创建的(或数据定义的)地理区域或范围,而非内建的区域(例如国家或区号)。Tableau 为你提供了两种创建自定义区域的选项:临时自定义区域和字段定义自定义区域。接下来我们将探讨这两者。
临时自定义区域
你可以通过选择和分组地图上的标记,以一种临时方式创建自定义区域。只需选择一个或多个标记,悬停在一个标记上,然后使用分组图标。或者,右键点击其中一个标记,找到相关选项。如果数据中包含纬度和经度,或者你正在使用 Tableau 生成的纬度和经度,你可以按任何维度进行分组,从而创建自定义区域。
在这里,我们将通过邮政编码来考虑一个例子:

图 12.15:选择填充区域并将其分组为一个新区域后,使用回形针图标创建该分组
你会注意到,在这个例子中,Tableau 创建了一个新的字段 Zip Code (group)。该字段在数据面板中显示了回形针和地球图标,表明它是一个分组字段和地理字段:

图 12.16:一个分组和地理字段
Tableau 会自动将分组字段添加到颜色上。
你可以继续选择和分组标记,直到你得到所有所需的自定义区域。由于邮政编码仍然是视图级别的详细信息,视图中将显示每个邮政编码的标记(并且任何度量值将按邮政编码切分)。然而,当你从视图中移除邮政编码,仅保留Zip Code (group)字段时,Tableau 会根据新的分组绘制标记:

图 12.17:按自定义区域分组
在这里,分组字段已重命名为 Custom Territories,并且分组名称已别名为东区、西区和中区。我们可以看到每个自定义区域内的房屋平均价格。
这些功能的详细内容超出了本书的范围,但你可以在 Tableau 的文档中找到相关信息。
使用填充地图时,Tableau 会连接所有相邻区域,并仍然将不相连的区域包含在选择和高亮显示中。使用符号地图时,Tableau 会在所有分组区域的地理中心绘制标记。
有时,数据本身就定义了区域。在这种情况下,我们无需手动创建区域。相反,我们将使用接下来描述的技术。
字段定义的自定义区域
有时你的数据包含自定义区域的定义。例如,假设你的数据中有一个名为Region的字段,已经将邮政编码分组到不同的区域中。也就是说,每个邮政编码只包含在一个区域中。在这种情况下,你可能不想花时间手动选择标记并进行分组。
相反,你可以告诉 Tableau 数据中已经存在这种关系。在这个例子中,你可以使用数据面板中Region字段的下拉菜单,选择地理角色 | 从...创建 | 邮政编码。现在,Region变成了一个地理字段,定义了自定义区域:

图 12.18:此处的自定义区域由数据中的区域字段定义
在这种情况下,区域是由数据中的区域字段定义的。如果稍后重新定义这些区域,Tableau 会显示新区域(只要数据已更新)。使用字段定义的自定义区域使我们确信不需要手动更新定义。
使用临时自定义区域进行快速分析,但考虑使用字段定义的自定义区域作为长期解决方案,因为这样你可以在数据中重新定义区域,而无需手动编辑 Tableau 数据源中的任何分组。
Tableau 地图 – 提示与技巧
在处理地理可视化时,还需考虑一些其他提示:
使用顶部菜单选择地图 | 地图图层,以查看多个可作为地图一部分显示的背景图层选项。
-
放大还可以通过使用鼠标滚轮、双击、Shift + Alt + 点击以及Shift + Alt + Ctrl + 点击来实现。
-
你可以点击并按住几秒钟来切换到平移模式。
-
你可以通过右键点击地图并选择相应选项来显示或隐藏缩放控制和/或地图搜索。
-
缩放控制可以在任何使用轴的可视化类型上显示。
-
放大控制按钮上的图钉会交替将地图恢复到适合可见数据的最佳视图,或者锁定当前的缩放和位置。
-
你可以通过复制(Ctrl + 拖动/放置)列上的经度或行上的纬度来创建双轴地图,然后使用字段的下拉菜单选择双轴。你可以使用这种技巧在单一地图上结合多种标记类型:
![]()
图 12.19:双轴地图,显示州级的利润和邮政编码级别的销售额
你可以使用双轴来显示不同级别的细节或使用不同的标记类型。在这种情况下,两个目标都已实现。该地图利用双轴在州级别显示填充地图的利润,在邮政编码级别显示圆形的销售额:
-
在使用填充地图时,考虑在地图图层窗口中将洗净设置为100%,以获得干净的地图效果。然而,只有填充的形状会显示,因此任何缺失的州(或县、国家等)将不会被绘制:
![]()
图 12.20:洗净地图
-
你可以通过菜单选择地图 | 背景地图来更改背景地图图像的来源。这样,你可以选择无、离线(在没有互联网连接时使用,但显示的细节有限)或Tableau(默认选项)。
-
此外,从同一菜单选项中,你可以指定地图服务...来使用
WMS 服务器或Mapbox。
-
接下来,我们将通过探讨如何将数据绘制到背景图像上,来进一步提升数据可视化和展示效果,从而结束本章内容。
将数据绘制到背景图像上
背景图像允许你在任何图像上绘制数据。想象一下这些可能性!你可以在体育场的座位图上绘制票务销售数据、在办公室楼层图上绘制房间占用情况、在网络图上绘制每个设备的错误数量,或者在月球表面绘制陨石撞击数据。
在本例中,我们将绘制每月在医院不同房间里的病人数。我们将使用医院底层和二层的两张平面图作为图像。数据源位于Chapter 12目录下,文件名为Hospital.xlsx。它包含两个标签:一个是病人数统计,另一个是基于映射到图像上的 x/y 坐标的房间位置。我们接下来将讨论它是如何工作的。你可以查看Chapter 12目录下的Complete.twbx工作簿来查看完整示例,或者从头开始使用Chapter 12目录下的Starter.twbx。
要指定背景图片,请使用顶部菜单选择地图 | 背景图片,然后点击适用该图像的数据源——在本例中为Patient Activity (Hospital)。在背景图片屏幕上,您可以添加一张或多张图片。
在这里,我们将从位于Chapter 12目录下的Hospital - Ground Floor.png开始:

图 12.21:添加背景图片窗格
你会注意到我们映射了X和Y字段(来自Locations标签),并指定了Right为800,Bottom为700。这是基于图像的像素大小。
你不必使用像素,但大多数情况下,使用像素能让映射数据位置更容易。在这个例子中,我们有一个 Excel 文件标签,里面已经将位置映射到图像上的x和y坐标(单位为像素)。通过跨数据库联接,你可以创建一个包含图片映射的简单文本或 Excel 文件,并将其连接到现有数据源。你可以手动映射点(使用图形应用程序)或使用多个免费的在线工具,快速在图片上映射坐标。
我们只想显示这一蓝图的底层平面图,因此切换到Options标签,我们将确保基于数据设置条件。我们还将确保勾选始终显示整个图像:

图 12.22:编辑背景图片窗格
接下来,重复前面的步骤,我们将把第二张图像(Hospital - 2nd Floor.png)添加到数据源中,并确保它只在2nd Floor显示。
一旦我们定义并映射了图像,就可以开始构建可视化了。基本思路是使用X和Y字段作为轴来构建散点图。但我们必须确保X和Y没有被求和,因为如果它们在多个记录中被相加,就无法正确映射到像素位置。这里有几个选项:
-
使用X和Y作为连续维度。
-
使用
MIN、MAX或AVG替代SUM,并确保 位置 被用来定义视图的细节级别。 -
此外,图像从顶部的 0 到底部的 Y 进行度量,而散点图则从底部的 0 开始,数值向上增加。因此,最初你可能会看到背景图像显示倒置。为了避免这个问题,我们将编辑 y 轴(右键点击并选择 编辑轴),然后勾选 反向 选项。
我们还需要确保 楼层 字段被用于视图中。这是为了告诉 Tableau 应该显示哪个图像。在这一点上,我们应该能够得到如下的可视化效果:

图 12.23:在楼层平面图像上绘制每个房间的患者数量
在这里,我们已根据每个房间的患者数量绘制了大小不同的圆圈。我们可以通过多种方式清理和修改可视化:
-
隐藏 x 和 y 轴(右键点击轴并取消勾选 显示标题)
-
隐藏 楼层 的标题,因为图像已经包含了标签
-
将 楼层 添加到 筛选器 架上,以便最终用户可以选择一次查看一个楼层
在背景图像上绘制标记的功能为传达复杂主题开辟了无限的可能性。想想你如何在计算机网络的图示上显示硬件错误数量,在篮球场上显示未投中的跳投次数,或者显示办公室大楼中人与人之间的距离。所有这一切,甚至更多,都是可能的!
摘要
本章我们已经覆盖了很多内容!可视化地图的基本操作很简单,但背后有很多强大的功能和可能性。从使用你自己的地理空间数据到利用地理空间对象和函数,你有很多分析选项。创建自定义区域并在背景图像上绘制数据,进一步扩展了你的可能性。
接下来,我们将重点介绍 Tableau 2020.2 的全新功能:数据模型!我们将探讨数据模型关系、连接、混合的区别,并看看如何使用它们进行各种有价值的分析!
第十三章:理解 Tableau 数据模型、连接和混合
在本章中,我们将深入了解如何使用 Tableau 建模和构建数据。我们在之前的章节中已经看到过数据源界面,并简要了解了如何通过拖放表格来建立关系。现在,我们将探索一些 Tableau 的复杂功能,以便深入了解 Tableau 如何允许你以逻辑或物理方式将多个表格关联在一起。
我们将首先对 Tableau 的新数据模型进行广泛的概述,然后详细研究不同类型的连接和混合。数据模型和混合主要适用于 Tableau Desktop(和 Server),但请特别注意连接的讨论,因为对连接类型的良好理解将对我们在第十五章《使用 Tableau Prep 整理数据》中的 Tableau 准备工作有很大帮助。
数据模型仅在 Tableau 2020.2 及更高版本中可用。如果你使用的是旧版本,连接和混合的解释将直接适用,而数据模型的解释将为你提供升级的灵感!
在本章中,我们将涵盖以下主题:
-
本章使用的示例数据解释
-
探索 Tableau 数据模型
-
使用连接
-
使用混合
-
何时使用数据模型、连接或混合
我们将首先了解本章工作簿中包含的示例数据集。这是为了让你在进行示例操作之前,建立一个良好的知识基础。
本章使用的示例数据解释
本章中,我们将使用一个包含患者就诊记录的示例数据集。数据本身存储在Hospital Visits.xlsx的 Excel 文件中,该文件位于Learning Tableau\Chapter 13目录下。Excel 文件中的标签代表数据表,就像你在任何关系型数据库中可能会看到的多个文件一样,或者仅仅是 Excel 文件中的标签!这些表格之间的关系在这里进行了说明:

图 13.1:Excel 文件的四个标签以四个具有关系的表格形式展示
Excel 并没有明确定义表之间的关系,但这里展示了它们可能在关系型数据库中通过外键查找的形式存在。下面是对这些表及其关系的简要说明:
-
医院就诊:这是记录单个患者在一次就诊中入院和诊断信息的主表。它包含诸如入院类型、地点等属性,以及服务等待时间(分钟)的度量。
-
患者:此表包含单个患者的附加信息,如姓名、出生日期以及其最近入院时的年龄的度量。
-
出院详情:此表提供了有关患者出院的额外信息,如 出院日期 和 处置(患者出院条件及离开医院后的去向)。它还包含一个度量 患者对护理感受如何?(1-10),其中 1 表示最低,10 表示最高。
-
患者与医生互动:此表定义了患者在就诊期间与医生之间的互动。它包括 医生姓名、备注 和衡量医生与患者共度时间的度量(与患者共度时间(分钟))。
这些表以不同的方式相互关联。以下是一些详细信息:
-
住院就诊 到 患者:每次就诊都有一个单独的患者,因此 住院就诊 将始终有一个指向 患者 表中单个记录的 患者 ID 字段。我们也会在 患者 表中找到其他没有记录就诊的患者。也许它们是来自遗留系统的历史记录,或者患者与医院的互动方式并非通过就诊。
-
住院就诊 到 出院详情:每次就诊可能只有一个出院记录,但某些患者可能仍然在医院内。在良好设计的数据结构中,我们应该能够依靠 出院详情 表中的记录来指示“仍在医院”。然而,在我们的 Excel 数据中,可能会有或没有 出院详情 ID,这意味着并不总是会有一个匹配的 出院详情 记录与每次 住院就诊 相对应。
-
患者与医生互动 到 住院就诊:在患者的就诊过程中,可能会有一个或多个医生与患者互动。也可能没有医生记录任何互动。因此,在 患者与医生互动 中,我们有时会找到多条记录参考单个 就诊 ID,有时只有一条记录,有时在 住院就诊 表中存在就诊但没有任何记录。
掌握了示例数据源后,让我们转向如何在 Tableau 中构建数据模型。
探索 Tableau 数据模型
在 Tableau 2020.2 及更高版本中,您将会发现数据模型作为一个新功能。每个数据源都将使用数据模型。在之前的版本中创建的数据源将会被更新为数据模型,但它们将被包含在一个单一的对象中,因此在功能上,它们将与之前的版本相同地运行。
Tableau 的早期版本允许您利用连接表和混合数据源,我们将在本章末尾考虑这些选项。现在,我们将专注于创建数据模型并理解这种范式。
创建数据模型
我们在第二章中简要查看了数据源屏幕,在 Tableau 中连接数据。现在,我们将深入探讨界面背后的概念。你可以随时跟随 Chapter 13 Starter.twb 工作簿中的示例,或者查看 Chapter 13 Complete.twbx 中的最终结果。
我们将首先创建与Hospital Visits.xlsx文件的连接,该文件位于Chapter 13目录中。首次连接到文件时,数据源屏幕将如下所示:

图 13.2:数据源屏幕列出了 Excel 工作簿中的标签,并邀请你开始构建数据模型。
我们将通过拖放表格到画布上来构建数据模型。我们将添加所有四个表。Tableau 会根据任何匹配的字段名称和类型为每个新添加的表建议关系。对于我们的表,我们将接受默认设置,因为指示正确关系的ID字段具有相同的名称和类型。
第一个添加的表是根表,构成数据模型的起点。在这个例子中,添加表格的顺序并不重要,尽管你可能会注意到,取决于你从哪个表开始,显示效果会略有不同。在以下截图中,我们从住院就诊(这是主要表,因此作为根表是合理的)开始,然后添加了其他所有表:

图 13.3:所有表格都已添加到数据模型中。
你会注意到编辑关系对话框已打开,用于住院就诊和患者之间的关系。Tableau 自动创建了我们的关系,因为两个表中的 ID 字段具有相同的名称和类型。如果需要,你可以手动编辑这些关系,改变哪些字段定义了关系。
关系仅定义了连接表格的字段,而没有定义表格之间的具体关系。我们将在本章后面讨论连接类型的概念(例如,左连接或内连接),但关系不限于某种连接类型。相反,Tableau 会根据你在视图中使用的字段,选择合适的连接类型以及正确的聚合方式。在大多数情况下,你无需关心 Tableau 在背后做了什么,但我们将在下一节探讨一些独特的行为。
在 2020.2 版本中,无法编写计算来定义关系,但在 2020.3 版本中这是一个功能。
此外,请注意关系编辑器中的性能选项下拉菜单,如下所示:

图 13.4:编辑关系对话框包含提高性能的选项。
这些性能选项允许 Tableau 在已知关系性质的情况下生成更高效的查询。如果你不知道关系的确切性质,最好保持默认设置,因为不正确的设置可能导致错误的结果。
性能选项涉及的两个基本概念:
-
基数:这个术语指示一个表中的多少记录可能与另一个表中的记录相关。例如,我们知道一次就诊只对应一个患者。然而,我们也知道在一次就诊中,可能有许多医生会与患者互动。
-
参照完整性:这个术语指示我们是否期望所有记录都能找到匹配项,或者是否某些记录可能无法匹配。例如,我们知道(根据前面的描述)患者表中有些患者在住院记录表中没有匹配项。我们还知道有些患者可能没有出院记录,因为他们仍然在医院里。
如果 Tableau 能够从关系型数据库中确定约束条件,它将使用这些约束。否则,Tableau 会将默认设置为多对多和某些记录匹配。对于本章中的示例,我们确实知道关系的确切性质(它们在前一节中已描述),但由于数据集足够小,修改这些设置不会带来明显的性能提升,因此我们将接受默认的性能设置。
在创建了初始数据模型后,花点时间探索数据模型范式的两层结构。
数据模型的层次
数据模型由两层组成:
-
逻辑层:由相关的逻辑表或对象组成的语义层。每个逻辑表可能由一个或多个物理表组成。
-
物理层:由来自底层数据源的物理表组成的层。这些表可以通过常规的连接或联合操作连接或联合在一起,或通过自定义 SQL 语句创建。
请查看以下包含我们四个表的画布截图:

图 13.5:数据模型的逻辑层
这个初始画布定义了数据模型的逻辑表。逻辑表是定义单一结构或对象的数据集合,这些结构或对象与其他逻辑数据结构相关。双击画布上的住院记录表,你将看到逻辑层下方的另一个层次:

图 13.6:构成住院记录的物理表的物理层
这是逻辑医院访问表的物理层。这个物理层由数据的物理表组成——可能是联合或连接在一起的。在这种情况下,我们知道医院访问由 1 个表组成。所以,在这种情况下,医院访问的逻辑层与下面的物理层是相同的。在本章的使用连接部分,我们将探讨如何通过多个表来扩展物理层的复杂性,同时仍将这些表的集合视为一个单一对象。
现在请点击右上角的X图标,关闭医院访问的物理层。然后转到本章工作簿的分析标签,我们将探索数据模型如何在实践中工作。
使用数据模型
大部分情况下,使用数据模型将会相对直观。如果你曾使用过之前版本的 Tableau,你会注意到一些细微的界面变化,并且有些数据模型的行为需要你去习惯。一旦你熟悉了这些,你的分析将超出预期!
新的数据面板界面
你可能会注意到数据面板的不同之处,它看起来大致是这样的:

图 13.7:数据面板按逻辑表格组织,并显示每个表格中的维度和度量的分隔
你会注意到,数据面板按照逻辑表格组织,每个表格中包含的字段都被列出。度量和维度通过一条细线进行分隔,而不像以前那样出现在不同的部分。这使得查找与分析相关的字段变得更加容易,也有助于你理解数据模型的预期行为。与之前的版本不同的是,每个逻辑表都有一个记录数量字段,字段名遵循表名 (Count)的命名规则。你还可以在字段列表的底部找到可以添加的计算以及度量名称/度量值。
在概览了 UI 的一些变化后,让我们来看一下你可以预期的数据模型行为。
数据模型行为
在Starter工作簿的分析标签中,尝试创建不同的可视化效果。特别注意维度、显示的值以及度量的聚合方式。我们将通过几个示例进行讲解(你可以在Starter工作簿中复制这些示例,或者在Complete工作簿中查看)。
首先,注意到将姓名从病人表拖到行中,会显示 10 个病人。结果发现,并不是所有病人都有住院记录,但当我们使用来自同一逻辑表的一个或多个维度时,我们会看到 Tableau 中的完整值域。也就是说,我们会看到所有病人,无论他们是否有过住院记录。我们可以通过添加住院记录(数量)字段来验证每个病人的就诊次数,得到以下视图:

图 13.8:所有病人都被显示出来,甚至是那些没有就诊的病人
但是如果我们在表格中加入初步诊断,注意到只有 10 个病人中的 6 个被显示出来:

图 13.9:只显示有就诊记录的病人;大多数病人只有一次就诊记录且诊断相同,但有一位病人做了两次同样的诊断
这突显了另一个行为:当你从两个或更多表格中包含维度时,只有匹配的值才会显示。本质上,当你添加姓名和初步诊断时,Tableau 会展示那些同时存在于病人和住院记录表中的病人。如果你只想关注曾经去过医院的病人,这是很有用的。
那么如果你真的想看到所有病人以及适用的诊断呢?为了实现这一点,只需从表格中添加你想查看完整领域的字段的度量。在这个例子中,我们可以添加最近一次住院年龄或病人(数量)度量,因为它们都来自病人表。这样做会得到如下视图:

图 13.10:所有病人再次显示出来
尽管最近一次住院年龄对那些从未住院的病人来说是NULL,但只需将该度量添加到视图中,Tableau 就会显示所有病人。这展示了第三个行为:从与维度相同的表格中包含度量将迫使 Tableau 展示该维度的完整值域。
这里还展示了数据模型行为的另一个基本原则。请注意,最近一次住院年龄显示了每个病人和每个诊断的值。然而,Tableau 不会错误地在总计或小计中重复显示该值。如果你为每个病人在最近一次住院年龄和住院记录数量列中添加小计,正如以下视图所示,你会看到 Tableau 已经计算出了正确的值:

图 13.11:即使传统的连接行为会重复显示值,Tableau 也会正确计算小计
数据模型的最终行为可以表述为:聚合是根据度量的逻辑表定义的细节层次来计算的。这类似于你使用细节级别(LOD)表达式来避免 LOD 重复的方式,但你无需编写表达式或中断思路来解决问题。Tableau 数据模型为你完成了繁重的工作!
花一些额外的时间,利用你创建的数据模型构建视图和可视化。然后复习以下行为,以便了解预期效果以及如何控制你想执行的分析:
-
当你使用来自同一逻辑表的一个或多个维度时,你将在 Tableau 中看到该维度的完整值域。
-
当你从两个或更多逻辑表中包含维度时,只有匹配的值会被显示。
-
如果将度量与同一逻辑表中的维度一起使用,Tableau 将强制显示该维度的完整值域(即使之前的行为已生效)。
-
聚合是根据度量的逻辑表定义的细节层次来计算的。
只需稍加练习,你会发现这些行为变得很自然,尤其会欣赏 Tableau 在正确的细节层次上执行聚合。
当你首次创建新数据模型时,进行几个类似前面示例的快速检查是很有帮助的。这将帮助你熟悉数据模型,并验证关系是否按预期工作。
现在,我们将重点学习如何使用连接在物理层中关联数据。
使用连接
在物理层中的连接是表之间按行逐行匹配数据的过程。我们将看看几种不同类型的连接,然后考虑如何在数据模型的物理层中利用它们。
连接类型
在物理层中,你可以指定以下几种连接类型:
-
内连接:只有在左右两表中都满足连接条件的记录才会保留。在下面的示例中,只有三行匹配的记录被保留在结果中:
![]()
图 13.12:内连接
-
左连接:左表中的所有记录都会被保留。来自右表的匹配记录会在结果表中显示其值,而不匹配的记录则会在右表的所有字段中显示
NULL值。以下示例中,左表的五行记录被保留,对于右表中未匹配的任何值显示为NULL:![]()
图 13.13:左连接
-
右连接:右表中的所有记录都会被保留。左表中匹配的记录会生成值,而未匹配的记录会在左表中显示所有字段的
NULL值。并非所有数据源都支持右连接。如果不支持,该选项将被禁用。在以下示例中,右表中的五行记录被保留,未匹配的左表字段显示NULL值:![]()
图 13.14:右连接
-
全外连接:两边表中的所有记录都会被保留。匹配的记录将具有来自左边和右边的值。没有匹配的记录将会在左边或右边的匹配记录未找到的地方显示
NULL值。并非所有数据源都支持全外连接。如果不支持,该选项将被禁用。在以下示例中,来自两边的所有行都被保留,未找到匹配的地方显示NULL值:![]()
图 13.15:全外连接
-
空间:这会根据空间对象的交集(重叠)将匹配的记录连接在一起(我们在第十二章“探索地图和高级地理空间功能”中讨论了 Tableau 的空间功能)。例如,一个基于经纬度的点可能位于由 Shapefile 定义的复杂形状内部。只要一个表中的空间对象与另一个表中指定的空间对象重叠,相关记录就会被保留:
![]()
图 13.16:空间连接
当你从左表和右表中选择空间对象时,你需要指定交集作为字段之间的操作符,以实现空间连接,如图 13.17所示:

图 13.17:假设选中的两个字段代表空间对象,"交集"选项将可用
在深入理解连接类型之后,我们来考虑如何在 Tableau 的数据模型物理层中使用它们。
连接数据表
大多数数据库有多个数据表,这些表之间以某种方式相关。此外,你还可以通过各种数据连接将不同数据源中的数据表联合起来。
对于这里的示例,我们再次考虑医院数据库中的表,并进行一些简化:

图 13.18:主医院访问表,包含患者和出院详细信息,可能存在于关系型数据库中
让我们来考虑如何在物理层中使用一些连接来构建数据源。要跟随示例,请在Chapter 13 Starter.twbx工作簿中创建一个新的 Excel 数据源,引用Chapter 13目录中的Hospital Visits (Joins).xlsx文件。你也可以在Chapter 13 Complete.twbx工作簿中查看连接。
正如我们之前所做的那样,我们将首先将住院记录表格拖到数据源画布上,以便在逻辑层中创建一个住院记录对象,像这样:

图 13.19:将表格拖到画布上后,逻辑层中创建了住院记录对象
此时,逻辑层对象仅包含一个物理表格。但接下来我们将扩展它。双击住院记录对象以展开物理层。它将看起来像这样:

图 13.20:当前仅包含一个物理表格的物理层
你可以通过添加额外的表格来扩展物理模型。我们将在这里进行扩展,添加出院详情和病人。在添加时,Tableau 会弹出对话框提示你调整连接的详细信息。它将看起来像这样:

图 13.21:在物理层中将出院详情与住院记录连接
连接对话框允许你指定连接类型(内连接、左连接、右连接或完全外连接),并指定一个或多个字段进行连接。在这些字段之间,你可以选择哪种类型的运算符来连接字段。默认是相等(=;字段必须相等),但你也可以选择不等(<>;字段必须不相等)、小于(<)、小于等于(<=)、大于(>)或大于等于(>=)。连接的类型和定义连接的字段关系将决定从连接中返回多少记录。我们将在下一节详细查看这些细节。
通常,你会希望首先将主表拖到物理层画布上。在这个例子中,住院记录包含连接额外表格的键。其他表格应在主表之后被拖放。
此时,接受 Tableau 自动检测到的在表格之间共享的字段(出院详情 ID 对应 出院详情,病人 ID 对应 病人)。将出院详情的连接改为左连接。这意味着所有住院记录都将被包括在内,即使尚未发生出院。将病人保持为内连接。这将仅返回在两个表格之间共享的记录,因此只保留有住院记录的病人。
最终,住院记录的物理层将看起来像这样:

图 13.22:物理层由三个连接在一起的表格组成
当你关闭物理层后,你将再次看到逻辑层,其中包含一个单一对象:住院记录。该对象现在包含一个连接图标,表示它是由多个物理表格连接而成。但它仍然是数据模型逻辑层中的一个单一对象,像这样:

图 13.23:逻辑层包含一个由三个物理表格组成的单一对象
所有连接会创建你可能认为的一个平面表,它可以与数据模型中的其他对象关联。这些对象反过来可能由单个物理表或多个物理表连接组成。
如果你正在跟随示例操作,请将此数据源重命名为医院就诊(连接)。我们将在本章结束时再次利用这个数据源进行一个示例。在此期间,让我们考虑一些与连接相关的其他细节。
其他连接注意事项
我们在本节的结尾总结了利用连接的进一步可能性,并提醒可能会出现的问题。
连接计算
在前面的示例中,我们提到 Tableau 基于数据中的字段逐行连接。你可能会遇到需要基于数据中没有但可以从现有数据中派生的值进行连接的情况。例如,假设有一个患者档案表,它能为你的数据集增加显著的价值。然而,它缺少患者 ID,只包含名字和姓氏字段。
要将其连接到我们的患者表,我们可以使用连接计算。这是一种仅用于连接表的计算。要创建连接计算,请在连接对话框中的字段下拉列表中选择最后一个选项,创建连接计算:

图 13.24:你可以创建一个连接计算,帮助形成正确的连接
选择此选项允许你编写可以在连接中使用的行级计算。例如,我们的连接计算可能会像 [First Name] + " " + [Last Name] 这样的代码,用于返回与姓名字段匹配的值。
尽量避免在文本字段上进行连接,尤其是在较大的数据集上,这样做会影响性能。基于整数进行连接效率更高。而且,两个不同的人可能会共享相同的名字和姓氏,因此如果一个实际数据集遵循本示例中的结构,可能会发生错误匹配和数据错误。
你还可以利用第十二章中提到的地理空间函数,探索映射和高级地理空间功能,即使其中一个或两个数据源缺少用于连接的特定空间对象,也能创建空间连接。例如,如果你有纬度和经度,你可以创建一个连接计算,使用 MAKEPOINT([Latitude], [Longitude]) 的代码,找到与另一个表中的空间对象的交集。
当你缺少用于连接的字段时,连接计算也能提供帮助。如果你想要连接的数据完全位于另一个数据库或文件中呢?在这种情况下,我们会考虑跨数据库连接。
跨数据库连接
使用 Tableau,你可以在行级别进行多个不同数据连接的连接。不同数据连接之间的连接被称为跨数据库连接。例如,你可以将 SQL Server 表与文本文件或 Excel 文件连接,或将一个数据库中的表与另一个数据库中的表连接,即使它们在不同的服务器上。这为补充数据或分析来自不同来源的数据提供了各种可能性。
考虑医院数据。尽管它不属于第十三章文件集的一部分,但账单数据通常与病人护理数据存在于不同的系统中并不罕见。假设你有一个病人账单文件,其中包含你希望包括在医院就诊分析中的数据。你可以通过将文本文件作为数据连接添加,然后将其与现有的表格进行连接,如下所示:

图 13.25:基于不同数据连接的表或文件连接
你会注意到,在数据源界面上有一个添加链接,允许你向数据源添加数据连接。点击每个连接后,你可以将该连接中的表拖放到数据源设计器中,并按需指定连接。每个数据连接都会有颜色编码,以便你可以立即识别设计器中各种表格的来源。
你也可以在逻辑层使用多个数据源。
连接时的另一个考虑因素是无意的错误,我们接下来会讨论这个问题。
数据的无意重复
最后,我们以关于连接的警告作为结尾——如果不小心,你可能会得到多几行或是比预期多很多倍的记录数。我们考虑一个理论上的例子:
假设你有一个像这样的Visit表:
| Visit ID | Patient Name | Doctor ID |
|---|---|---|
| 1 | Kirk | 1 |
| 2 | Picard | 2 |
| 3 | Sisko | 3 |
以及像这样的Doctor表:
| Doctor ID | Doctor Name |
|---|---|
| 1 | McCoy |
| 2 | Crusher |
| 3 | Bashir |
| 2 | Pulaski |
请注意,Doctor ID的值2在Doctor表中出现了两次。在Doctor ID值相等的情况下进行连接将会导致重复记录,无论使用何种连接类型。这样的连接将会得到以下数据集:
| Visit ID | Patient Name | Doctor ID | Doctor Name |
|---|---|---|---|
| 1 | Kirk | 1 | McCoy |
| 2 | Picard | 2 | Crusher |
| 3 | Sisko | 3 | Bashir |
| 2 | Picard | 2 | Pulaski |
这将大大影响你的分析。例如,如果你在计算行数来确定发生了多少次病人就诊,你会重复计数。有时候你可能故意创建重复记录以帮助分析,但通常,这会表现为无意的错误。
除了不小心重复数据并导致额外行的风险外,还有可能会丢失一些行,因为预期匹配的值没有完全匹配。养成验证使用连接的任何数据源行数的习惯。
深入理解连接不仅能帮助你在使用 Tableau Desktop 和 Tableau Server 时更得心应手,还能为我们接下来在第十五章,使用 Tableau Prep 整理数据中学习 Tableau Prep 打下坚实的基础。现在,让我们通过简要了解数据混合来结束这一章。
使用数据混合
数据混合使你能够在同一视图中使用来自多个数据源的数据。这些数据源通常可能是不同类型的。例如,你可以将来自 Oracle 的数据与 Excel 的数据混合,将 Google Analytics 的数据与空间文件混合。数据混合还允许你在不同的细节级别上比较数据。让我们了解一些基础知识并看一个简单的例子。
数据混合是在汇总级别进行的,并且涉及向每个数据源发送不同的查询,不同于连接,它是在行级别进行的(从概念上讲)并且涉及向单个数据源发出单一查询。一个简单的数据混合过程包含几个步骤,如下图所示:

图 13.26:Tableau 如何实现数据混合
从上述图示中,我们可以看到以下内容:
-
Tableau 向主数据源发出查询。
-
底层数据引擎返回汇总结果。
-
Tableau 向辅助数据源发出另一个查询。这个查询是基于来自主数据源的维度值集合进行过滤,这些维度将两个数据源连接起来。
-
底层数据引擎从辅助数据源返回汇总结果。
-
主数据源的汇总结果和辅助数据源的汇总结果将在缓存中混合在一起。
需要注意的是,数据混合不同于连接。连接是在单个查询中完成的,结果逐行匹配。数据混合是通过发出两个独立的查询,然后将汇总结果混合在一起实现的。
只能有一个主数据源,但可以有任意数量的辅助数据源。步骤 3和4将为每个辅助数据源重复执行。当所有汇总结果返回后,Tableau 会根据链接字段匹配汇总行。
当你的 Tableau 工作簿中有多个数据源时,首先在视图中使用的源将成为该视图的主数据源。
数据混合是特定于视图的。在一个视图中,你可以将一个数据源作为主数据源,而在另一个视图中,将相同的数据源作为辅助数据源。任何数据源都可以用于数据混合,但像 SQL Server Analysis Services 中的 OLAP 立方体,必须作为主数据源使用。
在许多方面,数据混合类似于创建一个包含两个或更多对象的数据模型。在许多情况下,数据模型会提供您所需的所有内容,而无需使用数据混合。然而,使用数据混合您会有更多灵活性,因为您可以在视图级别而不是对象级别更改哪些字段是相关的。
关联字段是用于匹配主数据源和次数据源之间的数据混合的维度。关联字段定义了次级数据源的详细级别。如果数据源之间的字段名称和类型匹配,则会自动分配关联字段。
否则,您可以通过从菜单中选择数据 | 编辑数据关系手动分配字段之间的关系,如下所示:

图 13.27:定义数据源之间的混合关系
关系窗口将显示不同数据源之间识别的关系。您可以从自动切换到自定义,以定义您自己的关联字段。
关联字段可以在视图中启用或禁用。视图中使用的关联字段通常默认是激活的,而其他字段则不是。然而,您可以通过点击数据窗格中关联字段旁的链接图标来更改关联字段的激活状态。
此外,使用编辑数据关系屏幕定义将用于跨数据源筛选器的字段。当您在视图中的筛选器字段的下拉菜单中使用并选择应用于工作表 | 所有使用相关数据源时,筛选器将在数据源之间生效。
让我们通过一个例子将其从概念转化为实际操作。
数据混合示例
让我们快速看一个数据混合的示例。假设您有以下表格,表示医院中各个位置在为病人服务时的服务目标:
| 位置 | 平均服务时间目标(分钟) |
|---|---|
| 住院手术 | 30 |
| 门诊手术 | 40 |
| ICU | 30 |
| 产科 | 25 |
| 实验室 | 120 |
这些数据包含在一个简单的文本文件中,名为Location Goals.txt,位于第十三章目录下。起始工作簿和完整工作簿中已经定义了该文件的数据源。
我们将首先创建一个简单的条形图,来自您之前创建的医院就诊(连接)数据源,显示如下的按位置计算的平均服务时间(分钟):

图 13.28:按位置计算的平均服务时间(分钟)
然后,在数据窗格中,我们将选择位置目标数据源。请观察此处显示的数据窗格:

图 13.29:医院就诊(连接)显示为主数据源,而位置目标数据源中的位置被指示为关联字段
医院访问(连接)数据源上的蓝色勾选标记(在图 13.29中标记为1)表示该数据源是主数据源。Tableau 将位置识别为连接字段,并通过一个连接图标(在图 13.29中标记为2)指示该字段为活动状态。它之所以为活动状态,是因为你在当前视图中使用了来自主数据源的位置。如果你没有使用,Tableau 仍然会显示链接,但默认情况下它不会处于活动状态。你可以点击该链接图标,在活动和非活动状态之间切换,进而控制在次级数据源中进行汇总时的详细级别。
现在,点击数据窗格中的服务目标的平均分钟数,然后从Show Me中选择子弹图,如图所示:

图 13.30:你可以将次级数据源的字段拖放到视图中,或者使用 Show Me
你可能需要右键单击视图中的服务的平均分钟数轴,然后选择交换参考线字段,以确保目标是参考线,条形图是实际指标。现在你的视图应该是这样的:

图 13.31:由主数据源和次级数据源创建的视图
请注意,医院访问(连接)数据源和位置目标数据源都在此视图中使用。医院访问(连接)是主数据源(由蓝色勾选标记指示),而位置目标是次级数据源(由橙色勾选标记指示)。服务目标的平均分钟数字段在Marks卡片中的Detail上是次级数据源的,并且也由橙色勾选标记的图标指示。
你可能还会注意到主医院和重症监护在视图中没有显示目标值。回想一下,主数据源用于确定视图中显示的完整值列表。主医院在主数据源中存在,但在次级数据源中没有匹配项。它会显示在视图中,但没有次级数据源的值。
重症监护也没有次级数据源的值。这是因为次级数据源中的相应值是ICU。主数据源和次级数据源中的值必须完全匹配,数据融合才能找到匹配项。不过,数据融合也会考虑别名的情况。
别名是维度值的替代值,将用于显示和数据融合。你可以通过右键单击行标题或使用视图或数据窗格中的字段菜单,并选择别名选项来更改维度的别名。
我们可以通过右键单击视图中的行标题并使用编辑别名…选项来更改字段的别名,如下所示:

图 13.32:使用编辑别名...选项
如果我们将别名更改为ICU,在次级数据源中找到匹配项,视图中显示的是次级数据源的值:

图 13.33:ICU 现在可以在次级数据源中找到匹配项。
位置、实验室的最终值仅出现在Location Goals.txt源中,因此在此视图中不显示。如果我们创建一个新视图并使用Location Goals作为主数据源,它将会显示。
本章中我们已经讨论了许多关于如何关联数据的选项。让我们花点时间考虑一下何时使用这些不同的技术。
何时使用数据模型、连接或混合。
从某种意义上讲,使用最新版本的 Tableau 创建的每个数据源都将使用数据模型。即使是使用一个物理表的数据源,也会在数据模型的逻辑层中有一个对应的对象。但在何时应通过数据模型关联表,何时应在物理层将其连接在一起,何时应使用混合呢?
大多数情况下,没有单一的正确或错误答案。然而,这里有一些通用的指导原则,可以帮助你思考何时适合使用某种方法。
一般来说,使用数据模型来关联表:
-
当连接会使正确的聚合变得不可能,或者需要复杂的 LOD 表达式来获得准确结果时。
-
当连接会导致数据重复时。
-
当你需要灵活性来展示维度的完整域,或仅展示在关系中匹配的值时。
-
当你对数据源不确定,且不知道使用哪种类型的连接时。
一般来说,在物理层面使用连接:
-
当你必须使用除了字段之间的等式以外的操作符时。
-
当你需要进行空间连接时。
-
当你想要特定地控制分析中使用的连接类型时。
-
当数据模型的性能比使用连接时效率低时。
一般来说,在以下情况下使用混合:
-
你需要关联无法通过数据模型连接或关联的数据源(例如 OLAP 立方体)。
-
你需要灵活性来通过别名“修复”匹配。
-
你需要灵活性来调整哪些字段在不同视图中定义关系的方式。
随着你在使用每种方法时的信心增长,你将能够更好地判断在特定情况下哪种方法更合适。
总结
当你需要将数据表关联在一起时,你现在有几种技术可以选择。数据模型是 Tableau 最新版本中的一项新功能,它为关联逻辑数据表提供了一种新的范式。它在显示维度值的完整和部分域时引入了一些新的行为,但通过考虑聚合的自然细节级别,它也大大简化了聚合。在物理层面,你可以选择将物理表连接在一起。
我们介绍了各种类型的连接,并讨论了使用连接计算和跨数据库连接的可能性,以实现最终的灵活性。我们简要讨论了数据混合的工作原理,并展示了一个实际的例子。最后,您回顾了每种方法的使用时机。现在,您已经拥有了广泛的工具集,能够处理不同表格中的数据,甚至是不同数据库或文件中的数据。
在下一章中,我们将进一步扩展这一工具集,着眼于 Tableau Prep Builder。Tableau Prep 为您提供了强大的功能和高度的复杂性,让您能够将来自各种来源的数据汇聚在一起,清洗数据,并以您喜欢的任何方式进行结构化!
第十四章:将混乱数据结构化以便与 Tableau 配合使用
到目前为止,本书中的大多数示例假设数据结构良好且相对干净。现实世界中的数据并不总是如此完美。也许它很混乱,或者没有良好的结构。它可能缺失值或有重复值,或者可能具有错误的详细程度。
如何处理这种类型的混乱数据?在上一章中,我们考虑了如何使用 Tableau 的数据模型来关联不同表中的数据。在下一章中,我们将考虑将 Tableau Prep Builder 作为清理和结构化数据的有效方法。本章中的许多信息将为你使用 Tableau Prep 提供必要的基础。
目前,让我们关注一些在 Tableau 中效果良好的基本数据结构,以及你可以使用的一些额外技术,将数据转换为这些结构。在本章中,我们将讨论 Tableau 的本地功能,但你学到的许多内容将在下一章的 Tableau Prep 中应用。到本章结束时,你将对什么构成良好的数据结构有一个坚实的基础。了解哪些数据结构与 Tableau 配合良好是解决某些问题的关键。
在本章中,我们将重点讨论一些有助于与 Tableau 配合良好的数据结构原则,以及如何解决常见数据问题的具体示例。本章将涵盖以下主题:
-
为 Tableau 结构化数据
-
四种基本的数据转换
-
数据问题的高级修复概述
我们将首先讨论哪些数据结构在 Tableau 中效果较好。
为 Tableau 结构化数据
我们已经看到,Tableau 可以连接几乎所有数据源。无论是内置的直接连接、开放数据库连接(ODBC),还是使用 Tableau 数据提取 API 生成提取,数据都没有限制。然而,某些结构使得数据在 Tableau 中更容易使用。
确保良好数据结构的两个关键要素是:
-
每个源数据连接的记录应处于有意义的详细程度
-
数据源中包含的每个度量值应与数据源的详细程度匹配,或者可能处于更高的详细程度,但绝不应处于较低的详细程度。
例如,假设你有一张记录每个班级的测试成绩的表格,每条记录代表一个学校中的一个教室。在记录中,你可能会有三个度量值:该教室的平均 GPA、班级中的学生人数以及学校的平均 GPA:
| 学校 | 教室 | 平均 GPA | 学生人数 | 学校的学生人数 |
|---|---|---|---|---|
| Pickaway 小学 | 4 年级 | 3.78 | 153 | 1,038 |
| Pickaway 小学 | 5 年级 | 3.73 | 227 | 1,038 |
| Pickaway 小学 | 6 年级 | 3.84 | 227 | 1,038 |
| McCord 小学 | 4 年级 | 3.82 | 94 | 915 |
| McCord 小学 | 5^(年级) | 3.77 | 89 | 915 |
| McCord 小学 | 6^(年级) | 3.84 | 122 | 915 |
前两个度量(平均 GPA和学生数量)与数据的单个记录处于相同的详细级别(每个班级的记录)。学生数量(学校)则处于更高的详细级别(每个学校)。只要你意识到这一点,你就可以进行仔细的分析。然而,如果你尝试将每个学生的 GPA 存储在班级记录中,就会遇到数据结构问题。如果数据结构尝试存储每个年级的所有学生 GPA(也许每个学生有一列,或者有一个字段包含一个以逗号分隔的学生成绩列表),那么我们需要做一些工作,以便让数据在 Tableau 中更易于使用。
理解源数据的详细级别(通常称为粒度)至关重要。每次连接到数据源时,你应该问并回答的第一个问题是:一条记录代表什么?例如,如果你将记录数量(或在 Tableau 2020.2 及更高版本中的表格(计数)字段)字段拖放到视图中并观察到 1,000 条记录,那么你应该能够完成这个陈述,我有 1,000 个 _____。它可以是 1,000 个学生、1,000 个考试成绩,或者 1,000 所学校。对数据粒度有良好的理解将帮助你避免做出错误的分析,并帮助你判断是否拥有进行分析所需的数据。
查找数据详细级别的快速方法是将记录数量(或者在 Tableau 2020.2 及更高版本中的表格(计数)字段)放到文本架上,然后尝试将不同的维度放到行架上。当所有行显示为 1,并且在左下角状态栏中显示的总数等于数据中的记录数量时,那么该维度(或维度组合)就唯一标识了一条记录,并定义了数据的最低详细级别。
理解数据粒度的整体原则后,让我们继续了解某些数据结构,这些结构可以让你在 Tableau 中无缝且高效地工作。有时,最好在源头使用Alteryx或 Tableau Prep Builder 等工具重构数据。然而,在某些情况下,重构源数据是不可能的或不可行的。例如,你可能没有数据库的写入权限,或者它可能是一个具有预定义结构的基于云的数据源。对于这种情况,我们将在 Tableau 中看一些选项。目前,让我们考虑哪些类型的数据结构与 Tableau 的兼容性较好。
Tableau 中的良好结构化数据
在上一节中提到的构建良好结构的两个关键点应该能得出一种数据结构,其中单一的度量包含在单一列中。你可能有多个不同的度量,但任何单一的度量几乎不应被分布在多个列中。通常,这种差异被描述为宽数据与高数据。
宽数据
宽数据通常不是 Tableau 中进行可视化分析的良好结构。
宽数据描述了一种结构,其中单行的度量分布在多个列中。这种数据通常更加易于阅读。宽数据往往会导致较少的行和更多的列。
下面是宽数据在表格中展示的人口数字示例:
| 国家名称 | 1960 | 1961 | 1962 | 1963 | 1964 |
|---|---|---|---|---|---|
| 阿富汗 | 8,774,440 | 8,953,544 | 9,141,783 | 9,339,507 | 9,547,131 |
| 澳大利亚 | 10,276,477 | 10,483,000 | 10,742,000 | 10,950,000 | 11,167,000 |
请注意,这个表格的详细层次是每个国家一行。然而,单一的度量(人口)并未存储在单一列中。这些数据是宽数据,因为它们有一个单一的度量(人口),但该度量被分布在多个列中(每个年份一个列)。这个宽数据表违反了构建良好结构的第二个关键点,因为度量的层次低于每条记录的层次(按国家和年份,而不是按国家)。
高数据
高数据通常是 Tableau 中进行可视化分析的良好结构。
高数据描述了一种结构,其中每个不同的度量在一行中包含在单一列中。高数据通常会导致更多的行和更少的列。
考虑以下表格,它代表了与之前相同的数据,但采用了高数据结构:
| 国家名称 | 年份 | 人口 |
|---|---|---|
| 阿富汗 | 1960 | 8,774,440 |
| 阿富汗 | 1961 | 8,953,544 |
| 阿富汗 | 1962 | 9,141,783 |
| 阿富汗 | 1963 | 9,339,507 |
| 阿富汗 | 1964 | 9,547,131 |
| 澳大利亚 | 1960 | 10,276,477 |
| 澳大利亚 | 1961 | 10,483,000 |
| 澳大利亚 | 1962 | 10,742,000 |
| 澳大利亚 | 1963 | 10,950,000 |
| 澳大利亚 | 1964 | 11,167,000 |
现在,我们有更多的行(每个国家每年一行)。单独的年份不再是分开的列,而人口测量也不再分布在这些列中。相反,一个单一的列给我们提供了年份的维度,另一个单一的列给我们提供了人口的度量。行数增加了,而列数减少了。现在,人口的度量与每一行的详细信息处于同一层次,因此在 Tableau 中进行可视化分析将变得更容易。
让我们看看这个差异在实践中的体现。
Tableau 中的宽数据与高数据
你可以在 Tableau 中轻松看到宽数据与高数据的区别。以下是宽数据表格在左侧数据窗口中的样子:

图 14.1:宽格式数据每年都有一个度量。
正如我们所期望的那样,Tableau 将表中的每一列视为一个独立的字段。数据的宽格式结构对我们不利。最终,我们为每一年都得到一个独立的度量。如果你想绘制每年的人口折线图,你可能会感到很困难。哪个维度表示日期?你可以使用哪个单一度量来表示人口?
这并不是说不能在 Tableau 中使用宽格式数据。例如,你可以使用度量名称/度量值将所有年份度量绘制在一个视图中,如下所示:

图 14.2:宽格式数据仍然可以使用,但方式复杂且有限。
你会注意到每个年份字段都被放置在度量值货架上。好消息是,即使是结构不良的数据,你也可以从中创建可视化图表。坏消息是,创建视图往往更加困难,并且某些高级功能可能无法使用。
基于宽格式数据结构,以下限制适用于图 14.2 中的视图:
-
因为 Tableau 没有日期维度或整数维度,所以无法使用预测功能。
-
因为 Tableau 在列中没有日期或连续字段,所以无法启用趋势线。
-
因为每个度量都是一个独立的字段,所以无法使用快速表计算(例如累计总和、百分比差异等)。
-
确定诸如跨年份平均人口等内容,将需要繁琐的自定义计算,而不是仅仅更改度量的聚合方式。
-
你没有日期轴(只有度量名称的系列标题),因此无法添加参考线。
相比之下,高格式数据在数据面板中的样子是这样的:

图 14.3:高格式数据具有一个年份维度和一个单独的人口度量。
这个数据源更容易处理。只有一个度量(人口)和一个年份维度来切片该度量。如果你想制作按年份划分的人口折线图,只需将人口和年份字段拖到列和行中。预测、趋势线、聚类、平均值、标准差等高级功能都能按预期工作。
你可以看到,使用仅三个活动字段创建的可视化结果,在 Tableau 中要容易得多。

图 14.4:使用高格式数据在 Tableau 中创建视图要容易得多。
接下来,我们将考虑几种其他适合与 Tableau 配合使用的数据结构。
星型模式(数据集市/数据仓库)
假设它们设计良好,星型模式数据模型与 Tableau 非常兼容,因为它们有明确的粒度、度量和维度定义。此外,如果它们实现得当,可以极为高效地查询。这使得在使用 Tableau 的实时连接时,能够提供非常顺畅的体验。
星型架构之所以得名,是因为它由一个单一的事实表和与之相关的维度表组成,从而形成了一个星形模式。事实表包含具有有意义粒度的度量,而维度表包含各种相关实体的属性。下图展示了一个简单的星型架构,其中包含一个事实表(医院就诊)和三个维度表(患者、主治医生、和出院详情):

图 14.5:一个简单的星型架构
事实表通过通常被称为替代键或外键的字段与相关的维度表连接,该外键引用单一的维度记录。事实表定义了粒度级别,并包含度量。在这种情况下,医院就诊的粒度是每次就诊一条记录。在这个简单的示例中,每次就诊都对应一个患者,患者见了一个主治医生并完成了出院。医院就诊表明确存储了就诊时长这一度量,并隐式定义了另一项度量就诊次数(即行数)。
数据建模的纯粹主义者会指出,日期值已被存储在事实表中(甚至一些维度表中)。他们会建议,应该有一个日期维度表,包含每个日期的详细属性,并且只在事实表中存储一个替代键(外键)。
日期维度非常有用。然而,Tableau 内置的日期层次结构和丰富的日期选项使得将日期存储在事实表中成为一种可行的选择。如果你需要日期的特定属性,而这些属性在 Tableau 中不可用(例如,哪些天是公司假期),或者有复杂的财政年度,或者需要支持遗留的 BI 报表工具,可以考虑使用日期维度。
设计良好的星型架构允许使用内连接,因为每个替代键都应引用单个维度记录。在维度值未知或不适用的情况下,会使用特殊的维度记录。例如,一个尚未完成的住院就诊(患者仍在医院)可能会引用出院详情表中的一个特殊记录,标记为尚未出院。
你已经在上一章中处理过类似的数据结构,在那里你体验了数据模型的逻辑层和物理层中表关系的差异。可以随时返回第十三章,理解 Tableau 数据模型、联接和合并,以复习相关概念。
实现良好的星型架构尤其适合用于实时连接,因为 Tableau 可以通过实现联接剔除来提高性能。联接剔除是 Tableau 通过将查询中的不必要联接发送到数据源引擎来消除不必要的联接。
例如,如果将医生姓名放置在行上,将访问时长的平均值放置在列上,以便获得每个医生的平均访问时长的条形图,那么可能不需要连接到治疗和病人表格。如果你使用的是简单的星型模式且只从中央事实表进行连接,并且在数据源中启用了参照完整性,或者允许 Tableau 假设参照完整性,那么 Tableau 会自动去除不必要的连接。对于物理层中连接的表格,从数据菜单中选择数据源连接,或使用数据源连接的上下文菜单,选择假设参照完整性。对于数据模型的逻辑层中的关系,使用每个适用关系的参照完整性性能选项。
在考虑了一些良好的结构示例后,让我们关注一些基本的转换,这些转换将帮助我们将结构不佳的数据集转换为结构良好的数据集,使得在 Tableau 中更容易操作。
四种基本的数据转换
在本节中,我们将为您提供一些基本转换的概述,这些转换可以从根本上改变数据的结构。我们将从概述开始,然后查看一些实际示例。
转换概述
在 Tableau(以及 Tableau Prep)中,有四种基本的数据转换。以下定义广泛适用于大多数数据库和数据转换工具,但也有一些特定于 Tableau 的细节和术语:
-
透视:这表示将列转换为行或将行转换为列。后者仅在 Tableau Prep 中可用。结果的数据集会更窄更高,列数较少,行数较多(列转行),或者会更宽更短,列数更多,行数较少(行转列)。
-
联合:这表示将一张数据表的行附加到另一张表格,匹配的列对齐在一起。结果数据结构是一个包含所有联合表格行的单一表格,以及原始表格之间匹配的列,未匹配的列则包含
NULL值。 -
连接:这表示对两个或更多表格进行逐行匹配,生成一个包含所有表格列的数据结构。行数取决于连接类型和找到的匹配数量。
-
聚合:这表示将表格汇总到更高层次的细节,以便每个用于分组的维度的唯一值集都有一行,同时包含其他聚合值(如总和、最小值、最大值或其他聚合)。
为了更全面地理解这些定义,我们将借助一些插图和实际示例。
透视(以及一些简单的数据清理)
World Population Data.xlsx 这份 Excel 工作簿,位于本书资源包中 Chapter 14 目录下,是许多 Excel 文档的典型代表。它的内容如下所示:

图 14.6:World Population Data Excel 文件
这类 Excel 文档通常更加易于阅读,但在 Tableau 中用于数据分析时往往包含多个问题。此文档中的问题包括:
-
多余的表头(标题、注释和格式)不属于数据部分
-
合并单元格
-
国家名称和代码合并在同一列中
-
可能不必要的列(指标名称 和 指标代码)
-
数据较宽,即每一年都有一列,且人口数据分布在这些列中,属于同一条记录
当我们最初连接到 Excel 文档时,连接界面将类似于 图 14.7,如下所示:

图 14.7:Tableau 数据源页面中的 World Population Data.xlsx
数据预览显示了因结构不良而导致的一些问题:
-
由于列头不在 Excel 的第一行,Tableau 默认为每一列赋予了 F1、F2 等名称
-
标题 World Population Data 和关于样本数据的注释被解读为 F1 列中的值
-
实际的列头被当作了一行数据(第三行)
幸运的是,这些问题可以在连接窗口中解决。首先,我们可以通过启用 Tableau 数据解析器 来修正许多多余的表头问题,该组件专门用于识别和解决 Excel 或 Google 表格文档中的常见结构问题。当你勾选 使用数据解析器 选项时,数据预览将呈现出更好的结果:

图 14.8:Tableau 数据解析器解决了 Excel(及类似)数据源中许多常见问题
点击勾选框下方的 查看结果... 链接,将导致 Tableau 生成一个新的 Excel 文档,并通过颜色编码来显示数据解析器如何解析该 Excel 文档。使用此功能可以验证 Tableau 是否正确解析了 Excel 文档,并保留了你预期的数据。
观察到多余的表头被去除,且列名得到了正确的显示。然而,仍然有一些附加的问题需要修正。
首先,如果我们认为 指标名称 和 指标代码 列对分析没有用处,我们可以将其隐藏。点击列头上的下拉箭头,会显示一个菜单选项。
选择 隐藏 将会从连接中移除该字段,并且防止其被存储到提取文件中:

图 14.9:你可以在数据源页面隐藏字段
其次,我们可以使用相同菜单中的选项将国家名称和代码列分成两列,以便分别处理名称和代码。在这种情况下,菜单中的拆分选项效果很好,Tableau 完美地拆分了数据,甚至去除了代码周围的括号。在拆分选项初次无法正常工作时,可以尝试自定义拆分...选项。我们还将使用重命名选项,将拆分后的字段国家名称和代码 - 拆分 1和国家名称和代码 - 拆分 2分别重命名为国家名称和国家代码。然后,我们将隐藏原始的国家名称和代码字段。
到此为止,大部分数据结构问题已经得到解决。然而,你会发现数据仍然是宽格式。我们已经看到了可能遇到的一些问题:

图 14.10:经过一些清理后,数据仍然呈现不理想的宽格式结构
我们的最后一步是透视年份列。这意味着我们将重塑数据,使得每个国家在每一年都有一行。通过点击1960列,向右滚动,按住Shift键并点击2013列,选择所有年份列。最后,在任何一个年份字段的下拉菜单中选择透视选项。
结果是用两个列(透视字段名称和透视字段值)代替了所有年份列。将这两个新列重命名为年份和人口。现在,数据集变得更加狭长,而不是宽短。
最后,注意到年份列的图标被 Tableau 识别为文本字段。点击该图标可以直接更改数据类型。在这种情况下,选择日期会得到NULL值,但将数据类型更改为数字(整数)则会得到适用于大多数情况的整数值:

图 14.11:你可以在数据源页面上更改字段的数据类型
另外,你也可以使用年份字段中第一个下拉菜单并选择创建计算字段...。这将允许你创建一个计算字段,命名为年份(日期),该字段将年份字符串解析为日期,代码如下:DATE(DATEPARSE("yyyy", [Year]))。此代码将解析字符串并将其转换为没有时间的简单日期。然后,你可以隐藏原始的年份字段。即使字段用于计算,只要它不用于视图,你也可以将其隐藏。这将使数据集变得非常干净。
最终清理后的透视数据集在 Tableau 中比原始数据集更容易操作:

图 14.12:清理和透视后的数据集
数据解释器、清理选项以及在 Tableau 中透视数据(列转行)的功能,使得处理许多数据集变得更加轻松。接下来,我们将了解合并。
合并
通常,你可能有多个独立的文件或表格,它们合在一起代表整个数据集。例如,你可能有一个过程,每月生成一个新的数据转储文件并保存到某个目录中。或者,你可能有一个 Excel 文件,其中包含每个部门的数据,每个部门的数据在不同的工作表中。
联合是将数据表按行拼接成一个单一表格的过程。比如,考虑以下三张数据表:
原创:
| 姓名 | 职业 | 银行账户余额 |
|---|---|---|
| Luke | 农民 | $2,000 |
| Leia | 公主 | $50,000 |
| Han | 走私犯 | -$20,000 |
前传:
| 姓名 | 职业 | 银行账户余额 |
|---|---|---|
| Watto | 垃圾商 | $9,000 |
| Darth Maul | 面部画家 | $10,000 |
| Jar Jar | 西斯领主 | -$100,000 |
续集:
| 姓名 | 职业 | 银行账户余额 |
|---|---|---|
| Rey | 拾荒者 | $600 |
| Poe | 飞行员 | $30,000 |
| Kylo | 失业 | $0 |
这些表的联合将生成一个包含每个单独表格行的单一表格:
| 姓名 | 职业 | 银行账户余额 |
|---|---|---|
| Luke | 农民 | $2,000 |
| Leia | 公主 | $50,000 |
| Han | 走私犯 | -$20,000 |
| Watto | 垃圾商 | $9,000 |
| Darth Maul | 面部画家 | $10,000 |
| Jar Jar | 西斯领主 | -$100,000 |
| Rey | 拾荒者 | $600 |
| Poe | 飞行员 | $30,000 |
| Kylo | 失业 | $0 |
Tableau 允许你将文件数据源中的表格联合起来,包括以下类型:
-
文本文件(
.csv、.txt和其他文本文件格式) -
Excel 文档中的工作表(标签)
-
Excel 表中的子表
-
多个 Excel 文档
-
Google 表格
-
关系型数据库表
使用数据解析器功能查找 Excel 或 Google 表格中的子表。它们将作为数据的附加表格出现在左侧边栏。
在 Tableau 中创建联合,请按以下步骤操作:
-
从菜单、工具栏或数据源屏幕中创建一个新的数据源,开始时选择你希望成为联合一部分的文件之一。然后,将任何其他文件拖动到画布上现有表格下方的拖动表格到联合区域,该区域位于逻辑层或物理层中(不过,技术上讲,联合存在于物理层中):
![]()
图 14.13:你可以通过将表格或文件直接拖放到画布上现有表格下方来创建联合
-
一旦你创建了联合,可以在设计器中的表格下拉菜单中配置联合选项。或者,你也可以将左侧边栏中的新建联合对象拖动到设计器中,替换现有表格。这将显示创建和配置联合的选项:
![]()
图 14.14:你可以使用这些选项编辑联合
Specific (manual)标签允许你将表格拖入或拖出联合操作。Wildcard (automatic)标签允许你指定文件名和工作表(对于 Excel 和 Google Sheets)中的通配符,这些通配符会根据匹配情况自动将文件和工作表包含在联合操作中。
如果你预见未来会添加更多文件,使用Wildcard (automatic)功能。例如,如果你有一个特定的目录,用于定期存储数据文件,通配符功能将确保你不必手动编辑连接。
-
一旦定义了联合操作,你可以使用结果数据源来可视化数据。此外,联合表可以与设计窗口中的其他表格进行连接,给你在数据处理上提供很大的灵活性。
当你创建联合操作时,Tableau 会在数据源中添加一个或多个新字段,帮助你识别数据来源的文件、工作表和表格。Path将包含文件路径(包括文件名),Sheet将包含工作表名称(对于 Excel 或 Google Sheets),而Table Name将包含子表或文本文件名。你可以利用这些字段帮助识别数据问题,并根据需要扩展数据集。
例如,如果你有一个按月命名的数据文件目录,文件名为2020-01.txt、2020-02.txt、2020-03.txt,依此类推,但文件中没有实际的日期字段,你可以使用如下代码通过计算字段获取日期:
DATEPARSE('yyyy-MM', [Table Name] )
在联合操作中,Tableau 会根据列名匹配不同表格之间的列。当表格或文件之间的列名不一致时会发生什么情况?如果你向数据库写查询,你可能会预期查询失败,因为列名通常需要完全匹配。然而,Tableau 允许你联合那些列名不匹配的文件或表格。
在一个文件/表格中存在但在其他文件/表格中不存在的列会作为联合表的一部分出现,但在没有该列的文件/表格中,值会显示为NULL。例如,如果某个文件包含一个名为Job的列,而不是Occupation,那么最终的联合表将包含一个名为Job的列和一个名为Occupation的列,在不存在该列的地方显示NULL值。你可以通过选择这些列并使用下拉菜单来合并不匹配的列。这将合并(保留每行数据中第一个非空值)为一个新的单列:

图 14.15:使用合并不匹配字段功能,合并因联合操作导致的字段名不匹配的列(该不匹配未包含在示例数据中)。
你不必合并不匹配的字段。有时,某些文件或表格中没有对应的匹配项,这对于你的分析可能是有用的。
联合(Unions)允许你将结构相对相同的多个文件或表格合并,并堆叠在一起,这样你就可以得到所有表格/文件中的记录。通过对旋转和联合的探索,我们已经涵盖了四种基本转换类型中的两种。接下来我们将继续演示如何使用连接来重构数据。
连接(Joins)
你会记得,我们之前在第十三章,理解 Tableau 数据模型、连接和混合中讨论了连接的概念和类型。虽然连接在将同一数据库中的表格或甚至不同数据源(不同系统和格式中的数据)合并时非常有用,但它们也可以用来解决其他数据问题,例如重塑数据,使其更容易在 Tableau 中实现你的目标。
你可以在第十四章的工作簿中通过以下示例进行操作,但服务器数据库数据源是通过文本文件(Patient Visits.txt)进行模拟的。
假设你有一个服务器数据库中的表格(例如 SQL Server 或 Oracle),该表格为每个患者包含一行数据,并将入院日期和出院日期作为单独的列:
| 患者 ID | 患者姓名 | 入院日期 | 出院日期 |
|---|---|---|---|
| 1 | David | 2018/12/1 | 2018/12/20 |
| 2 | Solomon | 2018/12/3 | 2018/12/7 |
| 3 | Asa | 2018/12/5 | 2018/12/22 |
| 4 | Jehoshaphat | 2018/12/5 | 2018/12/6 |
| 5 | Joash | 2018/12/9 | 2018/12/16 |
| 6 | Amaziah | 2018/12/10 | 2018/12/14 |
| 7 | Uzziah | 2018/12/12 | 2018/12/24 |
| 8 | Jotham | 2018/12/16 | 2018/12/29 |
| 9 | Hezekiah | 2018/12/18 | 2018/12/22 |
| 10 | Josiah | 2018/12/22 | 2018/12/23 |
尽管这种数据结构适用于某些分析类型,但如果你想要按日展示 12 月住院患者的数量,可能会觉得难以使用。
首先,你应该使用哪个日期字段作为轴?即使你将表格旋转,使得所有日期都集中在一个字段中,你也会发现数据中有缺失。稀疏数据,即某些值没有记录的数据,在一些现实世界的数据源中非常常见。具体来说,在这个例子中,你每个入院或出院日期都有一条记录,但中间的日期没有记录。
有时,可能可以选择在源头重构数据,但如果数据库被锁定,你可能无法做到这一点。你还可以利用 Tableau 填补数据空白的功能(数据密集化)来解决这个问题。然而,这种解决方案可能会很复杂,并且潜在地不稳定或难以维护。
另一种选择是使用连接来创建所有日期的行。在这种情况下,我们将利用跨数据库连接,将另一个数据源完全引入。你可能会迅速创建一个包含你想要查看的日期列表的 Excel 表格,如下所示:

图 14.16:一个仅包含日期综合列表的 Excel 文件
这个 Excel 文件包含每个日期的记录。我们的目标是将数据库表与 Excel 表中的数据进行交叉连接(将一个表的每一行与另一个表的每一行连接)。完成此操作后,您将为每个患者的每个日期生成一行记录。
将一个数据集中的每条记录与另一个数据集中的每条记录连接起来,产生的结果称为笛卡尔积。生成的数据集将包含N1 * N2行(其中N1是第一个数据集的行数,N2是第二个数据集的行数)。使用这种方法时要小心。它在较小的数据集上效果良好,但随着数据集的增大,笛卡尔积可能会变得非常庞大,以至于这个解决方案不再可行。
您通常会在各个表中找到可以用来连接数据的特定字段。然而,在这种情况下,我们没有定义连接的键。日期也没有给我们提供一种连接所有数据的方法,以便获得我们想要的结构。为了实现交叉连接,我们将使用连接计算。连接计算允许您编写一个专门用于连接的特殊计算字段。
在这种情况下,我们将为两个表选择创建连接计算...并为左右两侧都输入单一的硬编码值,也就是1:

图 14.17:正如我们所见,连接是在数据模型的物理层创建的
由于左侧每行的1与右侧每行的1匹配,我们得到了每一行与每一行的匹配——这就是一个真正的交叉连接。
作为替代方案,对于许多其他基于服务器的数据源,您可以使用自定义 SQL作为数据源。在数据源屏幕上,使用设计器中的患者访问表,您可以使用顶部菜单选择数据 | 转换为自定义 SQL来编辑 Tableau 用于源的 SQL 脚本。或者,您也可以在左侧边栏使用新建自定义 SQL对象编写自己的自定义 SQL。
在这个替代示例中的脚本已被修改,加入了1 AS Join来创建一个名为Join的字段,字段值为每行1(尽管如果您没有在脚本中这样做,您也可以简单地使用连接计算)。在自定义 SQL 中定义的字段也可以用于连接:

图 14.18:一个可以用来创建连接值的示例脚本
基于连接计算,我们新的交叉连接数据集包含了每个患者每个日期的记录,现在我们可以创建一个快速计算,查看某个患者是否应被计入特定日期的医院人口。名为医院中的患者的计算字段包含以下代码:
IF [Admit Date] <= [Date] AND [Discharge Date] >= [Date]
THEN 1
ELSE 0
END
这使我们能够轻松可视化患者流动,甚至可能基于平均值、趋势,甚至预测进行高级分析:

图 14.19:经过数据重构后的每日医院人口可视化图表,使得分析变得简单。
最终,对于长期解决方案,你可能希望考虑开发一个基于服务器的数据源,以提供所需分析的结构。然而,这里的连接允许我们在不等待长时间开发周期的情况下实现分析。
在考虑了枢轴、联合和连接的例子之后,让我们将焦点转向最终主要的转换类型之一:聚合。
聚合
请记住,良好数据结构的两个关键要素如下:
-
拥有有意义的细节级别
-
拥有与细节级别相匹配的度量,或者可能处于更高细节级别的度量
处于较低细节级别的度量往往导致数据变得很宽,可能会使某些分析变得困难,甚至不可能。而较高细节级别的度量,有时也可能是有用的。只要我们了解如何正确处理它们,就可以避免一些陷阱。
举例来说,考虑以下数据(该数据以Apartment Rent.xlsx文件形式包含在Chapter 14目录中),该数据为每个公寓每个月提供一个记录:

图 14.20:公寓租金数据,由于每个月的平方英尺(Square Feet)度量值被重复记录,结构较差。
这两个度量值实际上位于不同的细节级别:
-
收取的租金(Rent Collected)与数据的细节级别相匹配,其中记录了每月每个公寓的租金收入。
-
另一方面,平方英尺(Square Feet)每个月并不变化。相反,它处于较高的细节级别,仅限于公寓。
如果数据被包含在两个表格中,且细节级别正确,Tableau 的数据模型会使得这些数据非常容易处理。如果数据存储在关系型数据库中,我们可以使用自定义 SQL 语句创建几个具有正确细节级别的表格,那么我们可能会考虑这种方法。在下一章中,我们将讨论如何使用 Tableau Prep 来轻松解决这个问题。现在,请逐步分析这些细节,以便理解如何应对类似的结构问题(这样你会对 Tableau Prep 和 Tableau 数据模型能做的事情有深刻的认识!)。
细节级别的差异可以通过移除视图中的日期,并查看所有数据的公寓级别来观察:

图 14.21:展示了不同聚合方式在不同细节级别下是否正确的插图。
注意,SUM(收取的租金) 是完全合理的。你可以将每个月收取的租金加总起来,并得出每个公寓的有意义的结果。然而,你不能对平方英尺(Square Feet)进行求和并得到每个公寓的有意义结果。其他聚合方法,如平均值、最小值和最大值,确实能给出每个公寓的正确结果。
然而,假设您被要求计算每个公寓的租金与平方英尺的比率。您知道这将是一个聚合计算,因为您需要先将收取的租金求和再进行除法。但以下哪个是正确的计算方法呢?
-
SUM([收取租金])/SUM([平方英尺]) -
SUM([收取租金])/AVG([平方英尺]) -
SUM([收取租金])/MIN([平方英尺]) -
SUM([收取租金])/MAX([平方英尺])
第一个显然是错误的。我们已经看到每个月不应该添加平方英尺。只要确保公寓继续定义视图的详细级别,最后三个中的任何一个都是正确的。
然而,一旦我们查看具有不同详细级别的视图(例如,所有公寓的总计或多个公寓的每月总计),这些计算就不起作用了。要理解原因,请考虑当我们打开列总计(从菜单中选择分析 | 总计 | 显示列总计,或者从分析选项卡中拖放总计)时会发生什么:

图 14.22:没有一种聚合方式可以给我们提供总计
这里的问题在于总计行位于所有公寓(所有月份)的详细级别。实际上,我们真正想要的总计平方英尺是 900 + 750 = 1,650。然而,在这里,平方英尺的总和是所有公寓所有月份的平方英尺相加。平均值不适用。最小值找到 750 作为数据中所有公寓的最小度量。同样地,最大值选择 900 作为单个最大值。因此,任何提议的计算方法在不包括单个公寓的详细级别时都不会起作用。
您可以通过点击单个值并使用下拉菜单选择总计方式来调整子总计和总计的计算方式。或者,右键单击活动度量字段并选择使用总计。您可以从菜单中选择分析 | 总计 | 全部使用总计来一次性更改所有度量的总计方式。使用这种两遍总计技术可以在先前的视图中得到正确的结果,但不能普遍解决问题。例如,如果您想显示每月每平方英尺的价格,您将面临同样的问题。
幸运的是,Tableau 允许我们在视图中处理不同的详细级别。使用我们在第五章,利用详细级别计算中遇到的详细级别(LOD)计算,我们可以计算每个公寓的平方英尺。
在这里,我们将使用固定的 LOD 计算来保持公寓级别的详细信息不变。我们将创建一个名为每个公寓的平方英尺的计算字段,其代码如下:
{ INCLUDE [Apartment] : MIN([Square Feet]) }
大括号包围了一个 LOD 计算,关键字INCLUDE表示我们希望将公寓包含为计算的详细级别的一部分,即使它不包含在视图详细级别中。在前述代码中使用了MIN,但也可以使用MAX或AVG,因为所有这些都会得到每个公寓相同的结果。
正如你所看到的,计算返回了视图级别和总计级别的正确结果,在这里 Tableau 包括公寓以找到900(A的最小值)和750(B的最小值),然后将它们求和得到1,650:

图 14.23:LOD 计算为我们提供了所有详细级别上的正确结果
现在,我们可以在另一个计算中使用 LOD 计算字段来确定所需的结果。我们将创建一个名为每平方英尺收集的租金的计算字段,并使用以下代码:
SUM([Rent Collected])/SUM([Square Feet per Apartment])
当该字段添加到视图并格式化以显示小数时,最终结果是正确的:

图 14.24:LOD 表达式为我们提供了更复杂的基础,例如计算每个区域的租金
或者,我们可以使用FIXED级别的详细信息,而不是使用INCLUDE。这总是在遵循FIXED关键字后的维度级别上执行,而不管视图中定义的详细级别是什么。这将告诉 Tableau 始终计算每个公寓的最小平方英尺,而不管定义视图级别的维度是什么。虽然非常有用,请注意,FIXED LOD 计算是针对整个上下文(整个数据集或由上下文筛选器定义的子集)计算的。如果不理解这一点,使用它们可能会产生意想不到的结果。
目前,我们已经学会了如何处理一些聚合问题;然而,在下一章中,我们将探讨如何通过聚合来真正转换数据,使类似前面练习的问题变得更加容易。与此同时,让我们考虑一些数据问题的替代修复方法。
数据问题的高级修复概述
除了本章早些时候提到的技术之外,还有一些额外的方法来处理数据结构问题。本书不涵盖完全发展这些概念。然而,通过一些对这些方法的熟悉,你可以扩展自己解决挑战的能力:
-
自定义 SQL:它可以用于数据连接以解决一些数据问题。除了为跨数据库连接提供字段,如我们之前看到的,自定义 SQL 还可以用于根本重塑从源中检索的数据。自定义 SQL 并非适用于所有数据源,但适用于许多关系型数据库。考虑一个自定义 SQL 脚本,将我们之前在本章中提到的国家人口的宽表重构为高表:
SELECT [Country Name],[1960] AS Population, 1960 AS Year FROM Countries UNION ALL SELECT [Country Name],[1961] AS Population, 1961 AS Year FROM Countries UNION ALL SELECT [Country Name],[1962] AS Population, 1962 AS Year FROM Countries ... ...等等。虽然设置起来可能有些繁琐,但这将使得在 Tableau 中处理数据变得更加容易!然而,许多使用复杂自定义 SQL 的数据源出于性能考虑需要进行提取。
-
表格计算:表格计算可以用于解决许多数据挑战,从查找和消除重复记录到处理多个细节级别。由于表格计算可以在更高细节级别的分区内工作,你可以将多个表格计算与聚合计算结合使用,在一个视图中混合不同的细节级别。一个简单的例子是总百分比表格计算,它将视图中细节级别的聚合计算与更高细节级别的总计进行比较。
-
数据混合:数据混合可以用来解决许多数据结构问题。由于你可以定义所使用的连接字段,你可以控制混合的细节级别。
-
数据支架:数据支架扩展了数据混合的概念。在这种方法中,你构建一个由各种维度值组成的支架,作为主要数据源,然后将它们与一个或多个次要数据源进行混合。通过这种方式,你可以控制主要数据源的结构和粒度,同时仍然能够利用次要数据源中的数据。
-
数据模型:数据混合在你需要控制每个视图的关系级别时非常有用。如果关系定义得更好,数据模型将为你提供强大的能力,将不同细节级别的表格关联起来,并确保聚合计算能够正确执行。
总结
到目前为止,我们已经查看了大多数结构良好且易于使用的数据。在这一章中,我们考虑了什么构成良好的结构以及如何处理不良的数据结构。一个良好的结构由具有有意义细节级别的数据组成,并且具有与该细节级别相匹配的度量。当度量分布在多个列中时,我们得到的是宽数据而非高数据。
我们还花了一些时间理解了基本的转换类型:数据透视、联合、连接和聚合。理解这些对于解决数据结构问题至关重要。
你还获得了一些实际经验,应用各种技术来处理具有错误形状或度量级别不匹配的数据。Tableau 赋予我们处理一些结构性问题的能力和灵活性,但最好在源头上修复数据结构。
在下一章,我们将暂时停下来不看 Tableau Desktop,转而考虑 Tableau Prep,另一个解决复杂数据问题的替代工具!
第十五章:使用 Tableau Prep 整理数据
在前一章中,我们考虑了在 Tableau Desktop 中构建数据结构的几种选项。有关结构良好的数据的许多概念将在此处应用,因为我们现在将注意力转向 Tableau 的另一款产品:Tableau Prep。Tableau Prep 扩展了 Tableau 平台,提供了强大的数据清理和结构化选项,便于在 Tableau 中进行分析。正如 Tableau Desktop 为数据可视化和分析提供了一个直观、交互的体验,Tableau Prep 则为数据清理和整形提供了一个直观、交互的体验。
Tableau Prep 处于加速的每月发布周期中,虽然该平台不断增长和扩展,但其背后有一个基本的范式,为数据清理和整形奠定了基础。我们将在本章中覆盖大量内容,但我们的目标不是覆盖每一个可能的功能——实际上,我们不会。相反,我们将寻求理解那个基础范式和思考流程,这将帮助您在 Tableau Prep 中应对多种数据挑战。
在本章中,我们将通过几个实际的示例来探讨 Tableau Prep 的范式,理解基本的转换操作,并了解 Tableau Prep 的许多功能和特性。
本章将涵盖多个主题,包括以下内容:
-
准备好探索 Tableau Prep
-
了解 Tableau Prep Builder 界面
-
按照基本范式进行数据流动
-
连接数据
-
清理数据
-
Tableau Prep 中的计算和聚合
-
在 Tableau Prep 中过滤数据
-
为分析转化数据
-
-
自动化数据流的选项
在本章中,我们将广泛使用“Tableau Prep”这一术语,指代 Tableau 为数据准备开发的整个平台,有时也作为 Tableau Prep Builder 的简称,后者是用于连接数据、创建数据流和定义输出的客户端应用程序。在需要明确时,我们将使用这些具体名称:
-
Tableau Prep Builder:用于设计数据流、在本地运行它们并发布的客户端应用程序
-
Tableau Prep Conductor:这是 Tableau Server 的一个附加组件,允许对已发布的数据流进行调度和自动化处理。
让我们从了解如何开始使用 Tableau Prep 开始。
准备好开始探索 Tableau Prep
Tableau Prep Builder 适用于 Windows 和 Mac。如果您当前没有在机器上安装 Tableau Prep Builder,请花点时间从www.tableau.com/products/prep/download下载该应用程序。Tableau Prep Builder 的许可证包含在 Tableau Creator 许可中。如果您当前没有许可证,您可以免费试用该应用程序 14 天。请与您的 Tableau 代表联系,以确认许可和试用期。
本章中的示例使用的文件位于 \Learning Tableau\Chapter 15 目录下。具体说明将指导你何时以及如何使用这些文件。
一旦你下载并安装了 Tableau Prep Builder,你将能够启动应用程序。启动后,你将看到一个欢迎屏幕,我们将在下一节中详细介绍该界面。
理解 Tableau Prep Builder 界面
你会发现 Tableau Prep Builder 和 Tableau Desktop 的界面有很多相似之处。Tableau Prep Builder 的主屏幕看起来将类似于以下内容:

图 15.1:Tableau Prep Builder 欢迎屏幕,数字标注用以识别界面中的关键组件
以下组件在图 15.1中已被编号:
-
菜单包括打开文件、编辑和运行流、登录 Tableau Server 以及各种帮助功能的选项。还可以注意到左侧紧挨着文件菜单的连接面板。初始时它是折叠的,但随着你创建数据连接,它将包含一个数据连接列表。
-
屏幕顶部的两个大按钮为你提供了打开一个流的选项,用于打开一个现有的 Tableau Prep 流文件,或连接数据,用于通过初始数据连接开始一个新流。在下一节中我们会定义什么是流。现在,你可以把流看作是 Tableau Prep 相当于 Tableau Desktop 工作簿的东西。
-
最近的流显示了你最近保存的 Tableau Prep 数据流。你可以点击其中一个打开流并进行编辑或运行。右侧的切换按钮允许你在缩略图和列表视图之间切换。
-
示例流允许你打开一些预构建的示例。
-
发现面板为你提供了在学习 Tableau Prep 时的培训和资源选项。如果有新版本可用,通知升级也会出现在此。
一旦你打开或开始一个新流,主屏幕将被一个新界面替代,这将有助于流的设计和运行:

图 15.2:在设计流时,你会看到类似于此的界面。主要组件已按数字标注,具体描述如下:
这个界面由以下部分组成,这些部分在前面的截图中已编号:
-
流面板,你将在其中逻辑地构建数据流,步骤包括从清洗到计算,再到转换和重塑。选择任何一个单独的步骤,将在屏幕下半部分显示相应的界面。这个界面会有所不同,具体取决于你选择的步骤类型。
-
设置面板或更改面板列出了该步骤的设置,还包括该步骤中所做的所有更改,从计算、重命名或删除字段,到更改数据类型或分组值。你可以点击单个更改进行编辑,或者查看这些更改如何影响数据。
-
配置面板显示了所选步骤中每个字段的配置情况。你可以看到每个字段的类型和数值分布。点击某个字段将突出显示流程面板中的数据流,点击字段的一个或多个数值将突出显示与之相关的其他字段值。
-
数据网格显示了该步骤中存在的每条数据记录。选择变化网格中的某个变化,将显示根据该变化(包括该变化)后的数据。选择配置面板中某个字段的值,将筛选数据网格,仅显示包含该值的记录。例如,选择配置面板中
订单日期字段的第一行,将使数据网格仅显示由该条记录表示的数据。这允许你浏览数据,但在你执行某个会产生变化的操作之前,数据不会被更改。
你还会注意到工具栏,它允许你撤销或重做操作、刷新数据或运行流程。此外,还会根据所选步骤或字段的类型显示其他选项或控件。我们将在深入探讨 Tableau Prep 的工作原理及本章稍后的实际示例时,详细说明这些内容。
跟随基本理念的流动
Tableau Prep 的整体理念是通过一个流程,以实践和可视化的方式发现、清理和塑造数据。一个流程(有时也叫做数据流程)是应用于数据的逻辑步骤和变化的系列,从输入(或多个输入)到输出(或多个输出)。
下面是 Tableau Prep 中流程面板中的一个流程示例:

图 15.3:Tableau Prep 中的流程示例
每个流程的独立组件称为步骤,这些步骤通过连接线相互连接,表示数据从左到右的逻辑流动。连接线有时也被称为流程的连接器或分支。请注意,聚合步骤这里有一条从左边进入的线和三条向右延伸的分支。任何步骤都可以有多个输出分支,表示流程中该点的数据逻辑副本。
需要注意的一个重要点是,四种步骤类型代表了我们在第十四章《将凌乱数据结构化以便在 Tableau 中顺利工作》中讨论的四大数据转换。这些步骤类型分别是透视、联合、连接和聚合,它们与这些转换完全对应,而清理步骤则允许进行各种清理和计算操作。你可能希望回顾一下上一章中提到的基本数据转换。
在本章我们通过一个流程示例进行讲解时,将更详细地考察每种类型的步骤。现在,先考虑一下 Tableau Prep 中主要步骤的初步定义:
-
输入:输入步骤通过数据源(例如文件、表格、视图或自定义 SQL)开始流程。它提供了定义文件分隔符、多个表或文件的联合以及如何抽样数据量(对于较大的记录集)的选项。
-
清理步骤:清理步骤允许你对数据执行各种功能,包括计算、过滤、调整数据类型、移除和合并字段、分组和清理等。
-
聚合步骤:聚合步骤允许你在指定的详细级别上聚合值(例如,获取
MIN、MAX、SUM、AVG等)。 -
连接步骤:连接步骤允许你将流程中的两个分支汇聚在一起,并基于你选择的字段以及连接类型逐行匹配数据。
-
联合步骤:联合步骤允许你将两个或更多代表数据集的分支合并在一起。你将有选项合并或移除不匹配的字段。
这个示例中的联合步骤和连接步骤都有一个错误图标,表示流程中某些配置不正确。将鼠标悬停在图标上会显示错误的工具提示描述。在这种情况下,错误是由于只有一个输入连接,而联合和连接都需要至少两个输入。通常,选择带有错误图标的步骤可能会在更改窗格或配置步骤的其他地方显示错误的详细信息。
-
透视步骤:透视步骤允许你将数据列转换为行,或将数据行转换为列。你将有选项选择透视类型以及字段本身。有时也会使用术语转置来描述此操作。
-
输出:输出步骤定义了清理和转换后的数据的最终目的地。这可以是文本文件(
.csv)、提取文件(.hyper或.tde),或发布到 Tableau Server 的提取数据源。虽然输出到数据库的功能已经宣布,但在撰写时尚不可用。你将有选项选择输出类型、路径和文件名,或选择 Tableau Server 和项目。
右键单击步骤或连接器会显示各种选项。你也可以将步骤拖放到其他步骤上,以显示连接或联合步骤的选项。如果你想替换流程的早期部分并交换输入步骤,可以右键单击连接器并选择删除,然后将新的输入步骤拖动到流程中所需的下一个步骤上,以将其添加为新的输入。
除了使用术语流程来指代定义数据逻辑流程和转换的步骤与连接,我们还会使用流程一词来指代 Tableau Prep 用于存储步骤定义和流程更改的文件。Tableau Prep 流程文件的扩展名为 .tfl(未打包流程)或 .tflx(打包流程)。
Tableau Prep 的范式远远超出了任何单一步骤的功能和特点。当你构建和修改数据流时,你会立即收到反馈,这样你就能看到每个步骤和变化的影响。这使得你可以相对轻松(而且有趣!)地逐步发现数据,并进行必要的更改。
当你构建数据流、添加步骤、做出更改并与数据互动时,你处于 设计模式。Tableau Prep 结合了 Hyper 引擎的缓存和直接查询数据库的方式,在你做出更改时提供近乎即时的反馈。当你运行数据流时,你使用的是 批处理模式 或 执行模式。Tableau Prep 将运行优化过的查询和操作,这些查询与设计模式下运行的查询可能略有不同。
在本章的其余部分,我们将通过一个示例来帮助讨论 Tableau Prep 的范式,并突出一些重要的功能和注意事项。这个示例将自然展开,使我们能够看到 Tableau Prep 如何提供令人难以置信的灵活性,以应对数据挑战并随着你发现数据的新方面进行更改。
我们将把你置于一个分析师的角色,任务是分析员工的航空旅行。这将包括票价、航空公司,甚至对旅行本身进行一些地理空间分析。数据需要从多个系统中整合,并且需要清洗和整理才能进行分析。
为了跟随操作,打开 Tableau Prep Builder,它会直接显示在主屏幕(本章没有启动数据流)。示例数据位于 Chapter 15 目录中,如果你想检查你的工作,可以找到 Complete 流程。Complete (clean) 流程包含了一个自我记录数据流的示例——它不会精确匹配截图。
当你打开 Complete 流程文件时,你可能会收到错误和警告,提示输入路径和输出路径无效。这是预期中的情况,因为你的计算机几乎肯定会有不同的驱动器和目录结构,和准备示例时所用的系统不同。当你与他人共享数据流文件时,也会遇到这种情况。要解决这些问题,只需在左侧的 连接 窗格(在 图 15.4 中展开)中处理连接,重新连接文件并将输出步骤设置为适合你计算机的目录。
我们将从连接数据开始!
连接数据
在 Tableau Prep 中连接数据非常类似于在 Tableau Desktop 中连接数据。从主屏幕上,你可以点击“连接到数据”或在展开的“连接”窗格中点击 + 按钮:

图 15.4:你可以通过点击 + 按钮或“连接到数据”按钮来创建新的数据连接。
无论哪种 UI 元素都会弹出一个数据源类型的选择列表。
与 Tableau Desktop 类似,对于基于文件的数据源,你可以将文件从Windows 资源管理器或Finder拖动到 Tableau Prep 窗口,以快速创建连接。
Tableau Prep 支持多种文件类型和数据库,且支持的类型仍在不断增加。你会识别出许多与 Tableau Desktop 相同的连接类型。不过,在撰写本书时,Tableau Prep 尚不支持 Tableau Desktop 中所有可用的连接类型。
你可以创建任意数量的连接,连接窗格会分别列出每个连接,并显示相关的文件、表、视图、存储过程或适用于该数据源的其他选项。你可以在流中使用任何组合的数据源。
现在,我们从以下步骤开始示例:
-
从图 15.4 所示的窗口开始,点击连接数据。
-
从出现的扩展连接列表中,选择Microsoft Excel。
-
你将看到一个名为员工航班的主表和一个名为员工航班表 1的子表。将员工航班表拖动到流画布中,将创建一个输入步骤,并显示数据预览和其他选项。输入预览窗格最初会像这样:
![]()
图 15.5:输入预览允许你选择要包含在流中的输入字段,重命名字段,并更改数据类型。
输入步骤显示字段网格和这些字段的选项。你会注意到,员工航班表中的许多字段被命名为
F2、F3、F4,依此类推。这是由于 Excel 文件的格式问题,其中包含合并单元格和汇总子表。请继续按照以下步骤进行操作: -
在连接窗格中选中使用数据解释器选项,Tableau Prep 将正确解析文件,如下所示:
![]()
图 15.6:数据解释器解析文件,以修复常见问题,例如合并单元格、空标题和小计行。
当你选择一个输入步骤时,Tableau Prep 会显示数据字段的网格。你可以使用该网格取消勾选不想包含的字段,点击相关符号编辑数据的类型(例如,将字符串改为日期),并通过双击字段名值来编辑字段名称。
如果 Tableau Prep Builder 检测到数据源包含大量记录,它可能会启用数据采样。数据采样使用较小的记录子集来提供快速反馈和设计模式下的分析。然而,在你以批处理模式运行整个流程时,它将使用完整的数据集。你可以通过点击输入窗格中的数据样本来控制数据采样选项。虽然你可以为源设置样本大小,但后续步骤(如联接)如果生成大量记录,可能会启用无法禁用的采样。如果在流程中发生数据采样,你会收到数据采样的指示。
-
现在,我们将继续探索数据并在过程中解决一些问题。点击鼠标悬停在员工航班输入步骤上时出现的+按钮。这将允许你通过添加额外的步骤类型来扩展流程。在这种情况下,我们将添加一个清理步骤。这将通过添加名为Clean 1的清理步骤来扩展流程:
![]()
图 15.7:添加一个步骤扩展了流程。在这里,添加一个清理步骤会添加 Clean 1
-
选择Clean 1步骤后,花一点时间使用配置文件窗格来探索数据。观察在配置文件窗格中选择字段的单个值时,如何突出显示与其他字段相关的部分值。这能让你深入了解数据,比如根据
机票类型看到不同的价格区间:![]()
图 15.8:在配置文件窗格中选择字段值时,会突出显示与所选值相关的值(以及这些值的比例)
在配置文件窗格中突出显示字段间的条形图段,通常是通过选择字段值实现的,这叫做“刷选”。你还可以通过配置文件窗格顶部的工具栏或右键点击字段值来对选中的值采取操作。这些操作包括过滤、编辑值或用 NULL 替换。然而,在对数据进行任何更改或清理之前,让我们连接一些额外的数据。
事实证明,大部分航空公司机票预订数据存储在一个由 Excel 文件表示的数据库中,但另一家航空公司的预订数据存储在定期添加到目录中的文件中。这些文件位于 \Learning Tableau\Chapter 15\ 目录中。文件名遵循 Southwest YYYY.csv 的命名规范(其中 YYYY 代表 年份)。
我们将连接所有现有文件,并确保为未来可能添加的文件做好准备:
-
点击连接窗格中的+图标,添加一个新的文本文件连接。
-
导航到
\Learning Tableau\Chapter 15\目录并选择任何一个Southwest YYYY.csv文件来开始连接。查看输入设置,你应该会看到 Tableau Prep 正确识别了字段分隔符、字段名称和类型:![]()
图 15.9:一个文本文件包含了头部、字段分隔符、文本限定符、字符集等选项。还可以注意到诸如“多个文件”和“数据示例”等标签,提供了其他文本输入的选项。
-
在输入面板中,选择多个文件标签,并从单一表格切换到通配符联合。将匹配模式设置为
Southwest*,然后点击应用。这告诉 Tableau Prep 将目录中所有以Southwest开头的文本文件联合起来:

图 15.10:使用匹配模式告诉 Tableau Prep 应该将哪些文件联合在一起。这样,当Southwest 2020.txt和未来的文件被放入目录时,它们将自动被包括在内。
- 使用流程面板中西南输入步骤上的+图标来添加一个新的清理步骤。这个步骤默认命名为清理 2。再次检查数据,但在将两个数据源在流程中结合之前,不要采取任何操作。你可能会注意到在清理 2步骤中有一个名为文件路径的新字段,表示联合中每条记录对应的文件。
在定义了输入步骤之后,接下来我们考虑如何清理一些数据,为分析做好准备。
数据清理
构建流程的过程是相当迭代的,你会经常发现有关数据的新信息,这有助于你清理和转换数据。为了方便参考,我们将此示例分成几个部分,但不要因此忽视构建流程本应是一种思维流的想法。这个示例旨在做到无缝衔接!
在本节中,我们将探讨一些数据预处理的可能性,包括合并和分组。让我们从查看如何在流程中联合各个分支开始。
联合、合并不匹配的字段并删除不必要的字段
我们知道我们想要将所有航空公司的预订数据合并在一起,因此我们将在流程中联合这两个路径:
-
将清理 2步骤拖到清理 1步骤上,并将其放到出现的联合框中。这将创建一个新的联合步骤,输入连接来自两个清理步骤:
![]()
图 15.11:在流程中将一个步骤拖到另一个步骤上,显示出将数据集合并到流程中的选项。例如,这里有创建联合或连接的选项。
-
当选择联合步骤时,出现的联合面板会显示不匹配的字段,指示相关输入,并提供删除或合并字段的选项。例如,
Fare、Type和Ticket Type在 Excel 文件和文本文件中的命名不同,但实际上代表的是相同的数据。按住Ctrl键并选择两个字段,然后从面板顶部的工具栏或右键菜单中选择合并字段:![]()
图 15.12:当你选择单一字段时,Tableau Prep 会高亮显示可能为相同数据的字段。选择这两个字段后会显示“合并字段”选项。
-
同样,合并
Row``ID和Row_ID。 -
文件路径仅适用于
Southwest文件,这些文件在输入步骤中被联合在一起。虽然这个自动生成的字段在某些情况下非常有用,但在这个例子中并没有为数据增加任何价值。选择该字段,然后点击省略号菜单按钮,选择移除字段。 -
类似地,
Travel``Insurance?和Passenger``ID仅适用于一个输入字段,在我们的分析中用处不大。也请移除这些字段。 -
唯一剩下的字段
Airline是有用的。暂时保留它,然后点击流面板中Union 1步骤的+图标,选择清理步骤来扩展流程。此时,您的流程应该如下所示:![]()
图 15.13:你的流程应该类似于这个。你可能会注意到步骤的确切位置或颜色有所不同(你可以通过右键点击步骤来更改步骤的颜色)。
在流中的Union 1步骤上方有一个图标,表示在此步骤内做出的更改。在这种情况下,更改是移除了几个字段。每个有更改的步骤都会有类似的图标,鼠标悬停时会显示工具提示的详细信息,还可以与更改进行交互。你可以通过点击步骤并打开更改面板,查看更改的完整列表,编辑它们、重新排序或移除它们。根据步骤类型,可以通过展开步骤或选择“更改”选项卡来查看此内容。
接下来,我们将继续构建流程并考虑一些分组与清理的选项。
分组与清理
现在,我们将花些时间清理来自两个输入源的数据。选中Clean 3步骤后,使用配置面板检查数据并继续我们的流程。前两个字段显示了一些需要处理的问题:

图 15.14:所有Airline字段中的空值来自于 Southwest 文件。幸运的是,在这个案例中,数据源明确指示了航空公司。
Table``Names字段是由 Tableau Prep 在Union 1步骤中生成的,用以指示记录的来源。Airline字段仅来自 Excel 文件(你可以通过在配置面板中选择它并观察流面板中该字段的高亮路径来确认这一点)。点击Airline字段的空值,并观察数据刷选:这是证明Airline中的空值全部来自 Southwest 文件的证据,因为这些文件没有包含用来指示航空公司的字段。我们将处理这些空值并进行一些额外的清理:
-
双击null值,然后输入
Southwest,将NULL替换为你知道代表正确航空公司的值。Tableau Prep 将通过一个回形针图标指示发生了分组和替换操作。 -
我们将进行额外的分组,以清理American的变体。使用
Airline字段上的选项按钮,选择分组值 | 按发音分组:![]()
图 15.15:字段上的省略号按钮将显示大量选项,从清理到过滤,再到分组和创建计算。
几乎所有变体都被分组到American值中。只有AA还剩下。
-
在弹出的按发音分组值窗格中,选择American Airlines组,并通过选中右侧列表中的AA手动添加它:
![]()
图 15.16:当按发音分组时,你会注意到一个滑块,允许你控制分组的灵敏度。你也可以通过选择一个字段手动调整分组。
-
在按发音分组值窗格中点击完成。
-
接下来,选择不再需要的
Table``Names字段。使用工具栏选项、字段右键菜单或选项按钮,选择删除字段。 -
在资料窗格中的一些字段上,有一个建议图标(类似灯泡的图标)位于右上角。点击
Passenger``Email字段上的此图标,然后点击应用建议,为其分配Email数据角色:![]()
图 15.17:当 Tableau Prep 有清理字段的建议时,建议将会显示。
数据角色允许你根据预期的模式或值域快速识别有效或无效的值。一旦分配了数据角色,你可能会收到额外的建议,提示你过滤或替换无效值。
应用建议后,你会看到资料窗格中标记无效值的指示。当你继续跟随示例时,我们将考虑一些快速处理无效值的选项。
-
再次点击
Passenger``Email字段上的建议按钮。你将看到呈现出两个新的选项。应用该选项以分组并将无效值替换为null:![]()
图 15.18:在这里,Tableau Prep 建议要么过滤掉具有无效值的记录,要么将无效值替换为 null。在这种情况下,我们不想过滤掉整个记录,但无效值本身没有意义,最好用 null 来表示。
-
除了
Fare``Type(或者可能是Ticket``Type,具体取决于之前合并字段时保留了哪个名称)之外,大部分剩余字段看起来都没问题。这个字段包含了1st Class和First Class的值。按住Ctrl键点击这两个值,然后将它们与First Class值一起分组。这里有两种分组值的界面选项:

图 15.19:选择两个或多个值后,可以通过工具栏选项或右键菜单将它们分组
-
到目前为止,我们已经有了一个干净的数据集,包含了所有的主要数据。事实上,我们已经可以进行很多分析了。不如现在先预览一下数据。右键点击Clean 3步骤并选择在 Tableau Desktop 中预览:
![]()
图 15.20:你可以通过右键菜单选项在 Tableau Desktop 中预览任何步骤表示的数据
将建立一个新的数据连接,并在 Tableau Desktop 中打开。你可以预览流中任何步骤的数据。花些时间在 Tableau Desktop 中探索数据,然后返回 Tableau Prep。现在,我们将把注意力转向通过一些计算、补充数据和小范围重构来扩展数据集。
Tableau Prep 中的计算和聚合
让我们看看如何在 Tableau Prep 中创建计算和聚合选项。
行级计算
Tableau Prep 中的计算语法几乎与 Tableau Desktop 相同。不过,你会注意到,只有行级和FIXED详细级别的函数是可用的。这是因为 Tableau Prep 中的所有计算都将应用于行级别。聚合操作则通过聚合****步骤来执行,我们稍后会讨论这一点。
计算和聚合可以大大扩展我们的分析能力。在当前的示例中,我们有机会分析从购票到实际旅行之间的时间间隔。我们还可能希望为每条记录标注一个乘客的整体旅行频率指标。接下来,跟随以下步骤深入了解这些计算:
-
我们将从一个计算开始,确定从购票到旅行的时间间隔。选择Clean 3步骤,然后点击创建计算字段。将计算命名为从购买到旅行的天数,并输入
DATEDIFF('day', [Purchase Date], [Travel Date])。 -
检查个人资料面板中的结果。新字段应该如下所示:
![]()
图 15.21:计算字段显示在个人资料面板中
这里的默认视图(与许多数值字段的情况一样)是一个汇总的分箱直方图。你可以通过选择字段右上角的省略号按钮并切换到详细信息视图,查看字段的每一个值:

图 15.22:数值和日期字段可以在摘要或详细信息中查看。
默认汇总直方图显示的数据形态接近我们预期的,大多数人会在靠近(但不是立即)出行日期时购买票。提前购买可能会有更好的优惠,所以识别这一模式(并在 Tableau Desktop 中进一步探索)对于此类分析至关重要。
细节级别计算
我们可能希望进行其他几种类型的分析。让我们考虑如何根据乘客的旅行频率创建乘客细分。
我们将使用 FIXED 细节级别(LOD)表达式来完成这一任务。我们可以从头开始创建计算,匹配我们在 Tableau Desktop 中学习的语法,像这样编写计算:
{FIXED [Person] : COUNTD([Row_ID])}
上述计算会对每个人进行不同的行计数。考虑到每一行代表一次旅行,我们也可以使用代码 {FIXED [Person] : SUM(1)},根据具体的数据源,这可能会具有更好的性能。
然而,在这个例子中,我们将利用界面来可视化地创建计算:
-
点击
Person字段上的省略号按钮,并选择创建计算字段 | 固定 LOD:![]()
图 15.23:要创建固定 LOD 计算,请使用菜单选择“创建计算字段” | “固定 LOD”。
还可以注意到创建 自定义计算(编写代码)和 排名(计算选定字段的排名)的选项。
-
这将弹出一个 固定 LOD 面板,允许我们配置 LOD 表达式。按组计算字段已设置为
Person(因为我们从该字段开始计算),但我们需要配置 按...计算 以执行行的不同计数,并将字段重命名为Trips``per``Person,如图所示:![]()
图 15.24:固定 LOD 面板允许您可视化地配置 LOD 表达式,并即时获得关于结果的可视化反馈。
-
配置完 固定 LOD 后,点击完成。
-
我们将使用
Trips per Person字段来创建客户细分。我们将通过另一个计算字段来实现此目的,因此点击创建计算字段...以打开代码编辑器。命名该字段为Frequency Segment,并输入以下代码:IF [Trips per Person] <= 2 THEN "Rarely" ELSEIF [Trips per Person] <= 5 THEN "Occasionally" ELSE "Frequently" END
该代码使用 Trips per Person 字段在 If Then Else 结构中创建三个细分。您可以在预览面板中直观地看到字段之间的对应关系:

图 15.25:您可以轻松地通过概况面板可视化计算与其他字段之间的关系。
Frequency``Segment 字段可用于完成各种有用的分析。例如,您可能想了解频繁旅行者是否通常能获得更好的票价。
我们已经了解了行级别和 FIXED LOD 计算,并注意到了排名选项。现在让我们将注意力转向聚合。
聚合
在 Tableau Prep 中,聚合是通过聚合步骤实现的。我们将继续我们的流程,假设我们希望更好地理解我们的旅行频率分段:
- 点击Clean 3上的+符号并添加一个聚合步骤。默认情况下,新步骤将被命名为聚合 1:

图 15.26:使用 + 符号将聚合步骤添加到流程中
-
双击新步骤下的文本聚合 1,这样你就可以编辑名称。将名称从聚合 1更改为频率 分段。
给步骤起有意义的名字,以便自我记录流程。这将大大帮助你和其他人在将来返回编辑流程时。此外,当你编辑步骤的名称时,添加描述的文本会出现在名称下方,如图 15.27所示。
![]()
图 15.27:在编辑步骤名称时,你还可以添加更详细的描述,帮助记录步骤的目的。
选择聚合步骤会显示一个面板,提供在流程中对字段进行分组和聚合的选项:
![]()
图 15.28:使用 + 符号将聚合步骤添加到流程中
你可以将左侧的字段拖放到分组字段或聚合字段部分,并且你可以通过点击聚合文本(图 15.28中的箭头指示的示例:
SUM位于每人旅行旁,或者AVG位于票价上方)并从下拉菜单中选择不同的聚合类型来更改聚合方式。在图 15.28中,注意我们将频率 分段添加到分组中,并将
票价字段作为AVG添加到聚合字段中。还注意到,行数(聚合)出现在左侧字段列表的底部。这是一个在聚合步骤中可用的特殊字段。 -
通过点击当你悬停在频率分段聚合步骤上时出现的+图标,添加一个输出步骤来结束本示例:
![]()
图 15.29 使用 + 符号将输出步骤添加到流程中
-
当你选择输出步骤时,输出面板会显示保存输出的选项,并预览输出将是什么样子。在这种情况下,我们已配置输出将保存到名为频率分段的逗号分隔值(.csv)文件中:

图 15.30:此输出将包含确切的三行数据
- 输出面板还提供了设置输出类型、执行数据完全刷新或将数据追加到现有数据中以及运行流程的选项。
在接下来的几个部分,我们将扩展我们的流程,额外输出详细数据。详细数据以及聚合数据的输出文件为我们提供了一些很好的选项,可以在 Tableau Desktop 中利用 Tableau 的数据模型进行复杂分析。
让我们继续思考如何在 Tableau Prep 中过滤数据。
在 Tableau Prep 中过滤数据
在 Tableau Prep 中有几种方法可以过滤数据:
-
过滤输入
-
流程中的过滤
过滤输入可以提高效率,因为发送到数据源的查询将返回更少的记录。要过滤输入,选择输入步骤,然后点击输入面板上的过滤值...按钮:

图 15.31:过滤值...选项允许你在输入步骤中过滤值。这可能会提高在大数据集或关系型数据库上的性能。
弹出的添加过滤器对话框允许你写出一个Boolean(布尔值,真/假)结果的计算式。只有为真值的记录将被保留。
过滤操作也可以在流程中的清洗步骤内进行。有多种方式可以应用过滤器:
-
选择一个或多个给定字段的值,然后使用仅保留或排除选项。
-
使用字段上的选项按钮,根据字段类型显示多个过滤选项。例如,日期可以通过计算...、日期范围、相对日期或空值来过滤:

图 15.32:字段的过滤选项包括按计算、日期范围、相对日期进行过滤,以及保留或排除空值
-
选择一个字段,然后从工具栏中选择过滤值。与输入面板中的过滤器工作方式类似,你将被提示编写代码,以返回你希望保留的记录的真值。例如,如果你希望保留 2016 年 1 月 1 日之后的旅行记录,可以编写如下代码:
[Travel Date] > MAKEDATE(2016, 1, 1)
虽然在我们示例中的数据集无需过滤,但你可能希望尝试不同的过滤技巧。
到此为止,你的流程应该像这样:

图 15.33:你的流程应该看起来像这样(步骤的具体位置和颜色可能有所不同)
让我们通过一些最终的转换来结束 Tableau Prep 流程,使数据在 Tableau 中更容易使用。
转换数据以进行分析
让我们在流程中创建一个新的分支,再次处理详细数据。点击清洗 3步骤并检查预览面板。特别是,考虑一下Route字段:

图 15.34:Route 字段使用机场代码表示起点和终点,用破折号分隔
Tableau Desktop(和 Server)内置了机场代码的地理编码功能。但为了实现我们的具体分析目标(并为 Tableau Desktop 中的其他地理空间功能开辟新的可能性),我们将通过自己的地理编码来补充数据。我们还需要考虑数据的形态。将起点和终点拆分成单独的字段最为有用,如果我们想要将它们在视觉上连接,我们还需要考虑将它们拆分成单独的行(一个用于起点,另一个用于终点)。
有很多种可视化数据的方法。例如,我们可以将起点和终点保留在同一行,并使用双轴图。如果我们想通过线条将起点和终点连接起来,我们可以将它们保留在同一数据行中,并使用 Tableau 的 MAKELINE() 函数。这里你将跟随的示例将指导你将数据拆分成单独的行。
如果你在跟随本教程,以下是我们将采取的步骤:
-
使用当你悬停在 Clean 3 步骤时出现的 + 按钮。点击该按钮添加一个新的清理步骤,自动命名为 Clean 4:
![]()
图 15.35:向已有输出的步骤中添加内容会在流程中添加一个新的分支
-
在 Clean 4 步骤中,点击
Route字段的省略号按钮,选择 拆分值 | 自动拆分:![]()
图 15.36:拆分值允许你将分隔的字符串拆分成单独的字段。自动拆分会尝试确定分隔符,而自定义拆分...则提供更多选项和灵活性
现在你会看到两个新的字段已添加到该步骤:
![]()
图 15.37:拆分结果将在流程中生成新的字段
-
Route - Split 1 是起点,Route - Split 2 是终点。在配置面板中双击字段名(或使用省略号按钮的选项)将字段重命名为
Origin和Destination。 -
在
Chapter 15目录下找到US Airports.hyper文件。该文件包含每个AirportCode,以及AirportName、Latitude和Longitude:![]()
图 15.38:超提取文件包含了我们需要补充流程的地理空间数据
-
在 Tableau Prep 中连接此文件。你可以选择将文件拖放到 Tableau Prep 画布上,或使用界面上的 添加连接 按钮。Tableau 会自动插入一个名为 Extract (Extract.Extract) 的输入步骤。你可以自由地将输入步骤的名称更改为 机场代码:
![]()
图 15.39:机场代码文件的输入面板
-
我们希望将机场代码加入我们的流程中,以便查找
纬度和经度,但在执行之前,我们需要考虑到Clean 4中的起点和终点目前都在同一行数据中。一种选择是透视数据。使用Clean 4步骤中的+按钮添加一个透视步骤:![]()
图 15.40:从 Clean 4 添加透视步骤
-
透视窗格提供了将行转换为列或将列转换为行的选项。我们将保留默认选项列转行。将
起点和终点字段拖入窗格中的Pivot1 值区域:![]()
图 15.41:Pivot1 名称保持原始列名的值,而 Pivot1 值则包含来自起点和终点的实际值
-
作为快捷方式,代替步骤 6和步骤 7,你可以在Clean 4步骤中选择
起点和终点字段,并选择透视列转行:

图 15.42:透视列转行的快捷方式
按照以下步骤继续操作:
-
双击Pivot1 值的文本并将字段重命名为
机场代码。该字段将包含起点和终点记录的所有机场代码。 -
双击Pivot1 名称的文本并将字段重命名为
路线点。该字段将标记每条记录为起点或终点。此时,我们拥有一个数据集,其中包含每个旅行终点(无论是起点还是终点)的单条记录。
注意,透视操作导致了重复数据。曾经是一行(起点和终点合并在一起)的数据现在变成了两行。记录数已翻倍,因此我们不能再通过记录数来确定旅行的数量。我们也不能对票价使用
SUM,因为它会重复计算票价。我们需要使用MIN/MAX/AVG或某种详细级别的表达式或筛选器,以便仅查看起点或终点。虽然许多转换可以帮助我们实现特定目标,但我们必须意识到它们可能引入其他复杂情况。我们当前在主流程中所拥有的唯一位置信息是机场代码。然而,我们已经与
Airports.hyper建立了连接,并将输入步骤重命名为机场代码。 -
定位到机场代码输入步骤,并将其拖到透视步骤上。将其放置到连接区域:
![]()
图 15.43:将机场代码拖到透视步骤的连接区域
在将机场代码输入步骤拖到连接区域后,将创建一个新的连接步骤,命名为连接 1。稍作停顿,查看连接窗格:
![]()
图 15.44:连接窗格提供了大量信息和选项,用于配置连接和理解结果。界面中的重要部分已编号,并附有说明
你会在图 15.44中注意到以下特征:
-
应用的连接子句:在此,您可以选择向连接子句添加条件,决定哪些字段应作为关键字来定义连接。您可以根据需要添加任意数量的子句。
-
连接类型:在此,您可以定义连接的类型(内部连接、左连接、左内部连接、右连接、右内部连接、外连接)。通过单击 Venn 图的各个部分来完成此操作。
-
连接结果摘要:这里的条形图显示了来自每个输入的记录数量,以及匹配或未匹配的记录数量。您可以单击条形图的某个部分来查看数据网格中的过滤结果。
-
连接子句建议:如果适用,Tableau Prep 将显示可能的连接子句,您可以通过单击轻松添加。
-
连接子句:在此,Tableau Prep 显示了用于连接子句的字段及其对应的值。任何未匹配的值将以红色字体显示。您可以通过双击它们来编辑值。这使您能够根据需要修复个别不匹配的值。
在这个例子中,我们不需要配置任何内容。Airport Code字段上的内部连接默认设置非常有效。我们可以确认来自Pivot步骤的所有9,158条记录都被保留。只有32条来自Airport Codes超文件的记录是实际匹配的(1,301条记录未匹配)。这不需要担心。这仅仅意味着我们有很多多余的代码,这些代码本来可能为数据提供补充,但实际上并不需要。现在,继续我们之前的例子:
-
从连接 1开始,添加一个最终输出步骤,并将其配置为输出到名为
Airline Travel.csv的.csv文件。 -
使用工具栏顶部的运行按钮或点击输出步骤中的运行按钮来运行流程。

图 15.45:工具栏允许您运行所有输出的流程或单个输出,而输出步骤上的按钮将仅运行该输出的流程
您的最终流程看起来大致如下:

图 15.46:您的最终流程将类似于此,但外观可能略有不同
Chapter 15 Complete (clean).tfl文件经过了一些清理,添加了适当的步骤标签和描述。作为一种良好的做法,请尝试重命名您的步骤并添加描述,以便使流程更易于理解。以下是清理后的版本:

图 15.47:此流程已被清理并包含“自我文档化”
一旦流程执行完毕,打开Airline Travel.twb工作簿,该文件位于\Learning Tableau\Chapter 15目录中,以查看数据如何使用并自行探索:

图 15.48:在Airline Travel.twb工作簿中探索数据
与 .tde 或 .hyper 文件不同,.csv 文件可以被写入,即使它们作为数据源在 Tableau Desktop 中打开。如果你运行一个流程试图覆盖正在使用中的 .tde 或 .hyper 文件,你将收到错误提示。此外,你可以通过将字段拖放到清洁步骤的配置文件面板中来重新排列 .csv 文件的字段顺序,然后再输出。
随着我们的示例结束,让我们通过考虑一些自动化 Tableau Prep 流程的选项来总结。
自动化流程的选项
Tableau Prep Builder 允许你使用该应用程序设计和运行流程。有时,数据清洗和准备是一次性的操作,用于支持临时分析。然而,你通常希望随后运行流程,以捕获新数据或更改后的数据,并根据相同的模式清洗和调整它。在这些情况下,你需要考虑一些自动化流程的选项:
-
Tableau Prep Builder 可以通过命令行运行。你可以提供 JSON 文件来定义输入或输出数据连接的凭证。这使你能够使用脚本和调度工具运行流程,而无需手动打开并运行 Tableau Prep 界面。有关此选项的详细信息,请参阅 Tableau 帮助:
onlinehelp.tableau.com/current/prep/en-us/prep_save_share.htm#refresh-output-files-from-the-command-line。 -
Tableau Prep Conductor 是 Tableau Server 的附加组件,允许你将整个流程从 Tableau Prep Builder 发布到 Tableau Server,然后根据需求或自定义时间表运行这些流程。它还提供了监控和故障排除功能。
总结
Tableau Prep 通过即时反馈的动手数据清洗和调整的创新范式,极大地扩展了 Tableau 平台,并使你对数据拥有了令人难以置信的控制力。在本章中,我们考虑了整体界面以及它如何使你能够迭代和快速构建一个逻辑流程,用于清洗和调整数据,以便进行所需的分析或可视化。
通过本章中贯穿始终的详细而实用的示例,我们探索了 Tableau Prep 中的每个主要转换,从输入到联合、连接、聚合和透视,再到输出。在此过程中,我们还考察了其他转换和功能,包括计算、拆分、合并以及值的分组。这为你提供了在任何需要的方式下塑造和调整数据的基础。
在下一章中,我们将总结一些关于如何利用 Tableau 平台分享你的分析和数据故事的最终思考!
第十六章:分享您的数据故事
本书的重点是 Tableau Desktop,我们学习了如何通过可视化和仪表板来深入探索和传达数据。一旦您做出了发现,设计了具有洞察力的可视化,并构建了令人惊叹的仪表板,您就准备好分享您的数据故事了。
Tableau 使您能够通过多种方式共享您的工作。在本章中,我们将查看各种共享可视化和仪表板的方法,以及在决定如何共享项目时需要考虑的事项。
具体来说,我们将探讨以下主题:
-
展示、打印和导出
-
与 Tableau Desktop 和 Tableau Reader 的用户共享
-
与 Tableau Server、Tableau Online 和 Tableau Public 的用户共享
本章没有需要跟随的示例,但强烈建议您通读材料,以便深入了解共享洞察和发现的各种选项。
让我们从展示、打印和导出过程的概述开始。
展示、打印和导出
Tableau 主要用于构建丰富互动的可视化和仪表板,以便在屏幕上进行查看。通常,您会期望用户与您的仪表板和可视化进行互动。然而,提供多种格式的展示、打印和导出选项也是非常不错的选择。
展示
Tableau 为您提供了多种个人展示数据故事的选项。您可以带领观众浏览单个仪表板或视图的展示,或者您可以创建一个完整的演示文稿。虽然有多种方式可以构建演示文稿,但请考虑以下选项:
-
导出到 PowerPoint
-
演示模式
Tableau Desktop 和 Tableau Server 允许您直接导出到 PowerPoint。在 Tableau Desktop 中,选择 文件 | 导出为 PowerPoint...。选择位置和文件名后,Tableau 将生成一个 PowerPoint 文件(.pptx),将 Tableau 工作簿中的每个标签页转换为 PowerPoint 中的单个幻灯片。每个幻灯片将包含导出时视图和仪表板的静态图像。由于每个幻灯片只是一个截图,因此导出后将不再具备动态互动功能。
如果您更喜欢更具动态性的演示体验,请考虑使用演示模式。此模式会将所有仪表板和视图显示为全屏模式,隐藏所有工具栏、窗格和创作对象。要激活演示模式,选择顶部菜单中的窗口,或者按F7或顶部工具栏中的选项。按F7或Esc键退出演示模式。在演示模式下,您仍然可以通过操作、突出显示、筛选和其他选项与仪表板和视图进行交互。这可以丰富演示内容,并让您能够快速回答问题。在配合引人注目的仪表板和故事使用时,演示模式是一种有效的方式,能够带领观众深入了解数据故事。
如果在演示模式下按Ctrl + S保存工作簿,工作簿将在默认情况下以演示模式打开。
打印
Tableau 支持单独的可视化、仪表板和故事的打印。通过文件菜单,您可以选择打印将当前活动的工作表发送到打印机,或选择打印为 PDF选项导出为 PDF。无论哪种方式,您都可以将活动工作表、选定的工作表或整个工作簿导出为 PDF。要选择多个工作表,按住Ctrl键并点击单个标签。
打印时,您还可以选择显示选择项。选中此选项时,在视图或仪表板上交互式选择或高亮的标记将作为已选项进行打印。否则,标记将像没有选择项一样打印。以下仪表板中的地图已选择美国西部的标记:

图 16.1:您可以在此截图中看到已选择的州和圆圈。您可以选择打印包含选择项的视图
以下是一些关于打印的考虑事项、提示和建议:
-
如果仪表板是为打印设计的,请选择预定义的纸张大小作为仪表板的固定大小,或使用与相同纵横比匹配的自定义大小。
-
使用页面设置界面(可从文件菜单访问)来定义特定的打印选项,例如将包含哪些元素(图例、标题、说明文字)、布局(包括边距和居中)以及视图或仪表板如何缩放以匹配纸张大小。页面设置选项是针对每个视图的。复制或复制一个工作表时,会包含任何对页面设置的更改:
如果您要设计多个工作表或仪表板用于打印,请考虑将其中一个工作表作为模板,设置所有所需的打印设置,然后为每个新工作表进行复制。

图 16.2:页面设置对话框包含布局和打印缩放选项
-
在页面架构上使用的字段将定义打印中的分页(适用于单个工作表,但不适用于仪表板或故事)。页面架构定义的页面数量不一定等于打印的页数。这是因为一个由页面架构定义的单一页面可能需要多于一页的打印页。
-
故事中的每个故事点将被打印在新的一页上。
-
打印整个工作簿是生成单一 PDF 文档并分发的一种有效方式。每个可见的工作表将按标签顺序(从左到右)包含在 PDF 中。你可以隐藏工作表以防止它们出现在 PDF 中,或重新排序工作表以调整结果文档的顺序。还可以考虑创建包含图像和文本的仪表板,用于封面、目录、页码和评论。你也可以尝试使用上一章中的完整工作簿,查看不同的视觉元素在 PDF 转换中的保留或变化。
-
避免在仪表板中使用滚动条,因为它们会作为滚动条打印,并且可视窗口外的内容将不会被打印。
-
你还可以在工作簿中选择多个工作表(按住
Ctrl键同时点击每个标签),然后仅打印所选工作表。如果工作表是用于一个或多个仪表板或工具提示的视图,或者是用于一个或多个故事的仪表板,则可以隐藏工作表。要隐藏视图,右键点击底部条带或仪表板或故事工作区左侧面板中的标签或缩略图,然后选择隐藏工作表。要显示工作表,在仪表板或故事工作区的左侧面板中找到它,右键点击并取消选中隐藏工作表。你还可以右键点击仪表板或故事标签,隐藏或显示所有使用的工作表。
如果你没有看到隐藏工作表选项,这意味着该工作表没有在任何仪表板中使用,因此可以删除。
除了打印或输出为 PDF,我们还可以导出视图和仪表板中的数据和图像。让我们来看看吧!
导出
Tableau 还使得导出视图、仪表板和故事的图像变得非常简单,适用于文档、文献甚至像本书这样的书籍!图像可以导出为.png、.emf、.jpg或.bmp格式。你还可以将图像复制到剪贴板,然后粘贴到其他应用程序中。你还可以将数据导出为交叉表(Excel)、.csv文件或 Microsoft Access 数据库(适用于 PC)。
要复制图像或导出图像或数据,请使用工作表、仪表板或故事的菜单选项。
我们将很快详细讨论如何使用 Tableau Server、Tableau Online 和 Tableau Public。现在,让我们先了解这些平台上可用的导出功能。当在 Tableau Server、Online 或 Public 上与视图交互时,除非你没有所需的权限,或者管理员特意禁用了工具栏,否则你将看到一个工具栏:

图 16.3:从工具栏导出提供了与 Server、Online 和 Public 相似的体验
工具栏中的下载选项允许你下载图像、数据、交叉表(Excel)、PDF、PowerPoint或Tableau 工作簿。图像以.png格式导出,并呈现当前状态下的仪表板。导出.pdf文档时,用户可以选择多种选项,包括布局、缩放、是否打印当前仪表板、工作簿中的所有工作表,或当前仪表板中的所有工作表。
导出数据或交叉表时,会导出仪表板中活动视图的数据;也就是说,如果你点击仪表板中的一个视图,它将变为活动视图,你可以导出该视图的数据显示或交叉表。
Tableau Server 上还存在其他导出选项:
-
带有导出按钮的仪表板你可能还记得,导出按钮是可以添加到仪表板中的对象之一。这些按钮可以配置为将整个仪表板导出为 PDF、PowerPoint 或图像,并且是工具栏选项的不错替代方案。这也便于从 Tableau Desktop 导出。
-
Tabcmd 让你能够通过命令行或脚本以多种格式导出数据、图像或文档。
-
REST API 让你能够以编程方式导出数据、图像或文档,支持多种格式。
-
你可以将扩展名附加到托管在 Tableau Server 或 Tableau Online 上的视图的 URL,以查看或下载链接定义的格式。例如,附加
.pdf后,URL 可能会变成https://tableauserver/#/views/Dashboard/View.pdf,这样视图就会在浏览器中作为 PDF 文档呈现。
除了共享图像或文档导出外,你通常会想与他人共享完全互动的仪表板。让我们考虑一下如何实现这一点。
与 Tableau Desktop 和 Tableau Reader 用户共享
你可以与其他 Tableau Desktop 和 Tableau Reader 用户共享工作簿。我们将在接下来的章节中考虑选项,并注意一些差异。
与 Tableau Desktop 用户共享
与其他 Tableau Desktop 用户共享工作簿相当简单,但有一些事项需要考虑。
主要的考虑因素之一是你将共享打包的工作簿(.twbx)还是未打包的工作簿(.twb)。打包工作簿是一个包含工作簿(.twb)、提取文件(.hyper)、未提取的基于文件的数据源(如.xls、.xlsx、.txt、.cub、.mdb等)、自定义图像及其他相关文件的单一文件。
要与 Tableau Desktop 用户共享,你有多种选择:
-
你可以通过简单地将文件与其他拥有相同或更新版本的 Tableau Desktop 用户共享,来共享打包(
.twbx)或未打包(.twb)工作簿。当在更新版本的 Tableau Desktop 中保存工作簿文件时,工作簿文件将会更新。在旧版本的 Tableau 中打开工作簿时可能会收到错误或警告。首次打开工作簿时会提示更新,保存时再次提示。您可以选择从文件菜单将工作簿导出为之前的版本。
-
如果您分享一个未打包的(
.twb)工作簿,则使用它的其他任何人必须能够访问任何数据源,并且任何引用的图像必须在与原始文件引用的相同目录中对用户可用。例如,如果工作簿在网络路径上使用对 Excel(.xlsx)文件的实时连接,并在位于C:\Images的仪表板上包含图像,则所有用户必须能够访问网络路径上的 Excel 文件,并在本地具有包含相同名称图像文件的C:\Images目录。如果使用此方法,请考虑使用 UNC 路径(例如
\\servername\directory\file.xlsx)来共享常用文件。
类似地,如果您分享一个使用实时连接的打包工作簿(.twbx),那么使用该工作簿的任何人必须能够访问实时连接的数据源,并具有适当的权限。
与 Tableau Reader 用户分享
Tableau Reader是 Tableau Software 提供的免费应用程序,允许用户与在 Tableau Desktop 中创建的可视化、仪表板和故事进行交互。与 Tableau Desktop 不同,它不允许创建可视化或仪表板。但是,所有互动功能(如过滤、下钻、操作和突出显示)对最终用户均可用。
将 Tableau Reader 视为许多 PDF 阅读器的类似物,允许您阅读和导航文档,但不允许创建或保存更改。
要与 Tableau Reader 用户分享,请考虑以下事项:
-
Reader 仅打开打包的(
.twbx)工作簿。 -
打包的工作簿可能不包含与服务器或基于云的数据源的实时连接。这些连接必须是提取的。
在分享打包的工作簿(
.twbx)时,请务必考虑安全性和机密性问题。由于打包的工作簿通常包含数据,因此必须确保数据不敏感。即使数据未显示在任何视图或仪表板上,如果它是与工作簿一起打包的提取或文件的一部分,仍然可以访问它。
Reader 和 Desktop 是不错的选择,但确实需要其他用户安装该应用程序。您还可以考虑使用 Tableau Server、Online 或 Public 与更广泛的受众分享和协作。
与 Tableau Server、Tableau Online 和 Tableau Public 用户分享
Tableau Server、Tableau Online和Tableau Public都是相同概念的变体:在服务器上托管可视化和仪表板,并允许用户通过 Web 浏览器访问它们。
以下表格提供了产品之间的一些相似性和差异,但由于细节可能会变化,请在做出购买决策前咨询 Tableau 代表:
| Tableau Server | Tableau Online | Tableau Public | |
|---|---|---|---|
| 描述 | 安装在一台或多台服务器上的服务器应用程序,托管通过 Tableau Desktop 创建的视图和仪表板。 | 一个由 Tableau 软件维护的基于云的服务,托管通过 Tableau Desktop 创建的视图和仪表板。 | 一个由 Tableau 软件维护的基于云的服务,托管通过 Tableau Desktop 或免费的 Tableau Public 客户端创建的视图和仪表板。 |
| 授权费用 | 是 | 是 | 免费 |
| 管理 | 完全由购买许可证的个人或组织进行维护、管理和操作。 | 由 Tableau 软件进行管理和维护,用户可以选择进行项目和用户管理。 | 由 Tableau 软件进行管理和维护。 |
| 创作和发布 | Tableau Desktop 的用户可以创作并将工作簿发布到 Tableau Server。Web 创作功能允许 Tableau Server 用户在 Web 浏览器中编辑和创建可视化和仪表板。 | Tableau Desktop 的用户可以创作并将工作簿发布到 Tableau Online。Web 创作功能允许 Tableau Online 用户在 Web 浏览器中编辑和创建可视化和仪表板。 | Tableau Desktop 用户或免费的 Tableau Public 客户端用户可以将工作簿发布到 Tableau Public。未来将发布支持在线创作的功能。 |
| 交互 | 已授权的 Tableau Server 用户可以与托管的视图进行交互。视图也可以嵌入到内联网网站、SharePoint 和自定义门户中。 | 已授权的 Tableau Online 用户可以与托管的视图进行交互。视图也可以嵌入到内联网网站、SharePoint 和自定义门户中。 | 一切都公开。任何人都可以与托管的视图进行交互。视图可以嵌入到公共网站和博客中。 |
| Tableau Server | Tableau Online | Tableau Public | |
| 限制 | 无 | 大多数数据源必须在工作簿发布之前进行提取。大多数非云数据源必须通过本地计算机上的Tableau Desktop或通过Tableau Online Sync Client刷新提取数据。 | 所有数据必须提取,每个数据源的行数限制为 1500 万行。 |
| 安全性 | Tableau Server 管理员可以创建站点、项目和用户,并为每个用户调整权限。可以限制对基础数据的访问,并且可以限制工作簿或数据的下载。 | Tableau Server 管理员可以创建项目和用户,并为每个用户调整权限。可以限制对基础数据的访问,并且可以限制工作簿或数据的下载。 | 默认情况下,任何人都可以下载和查看数据;不过,作者可以限制这些选项的访问权限。 |
| 良好用途 | 内部仪表板和分析,或通过多租户站点跨部门/部门/客户使用。 | 内部仪表板和分析,特别是大多数数据源都是基于云的情况。与远程用户分享和协作。 | 在面向公众的网站或博客上使用嵌入视图分享可视化和仪表板。 |
发布到 Tableau Public
您可以使用 Tableau Desktop 或免费的 Tableau Public 客户端应用程序打开工作簿并保存到 Tableau Public。请记住以下几点:
-
要使用 Tableau Public,您需要注册一个帐户。
-
使用 Tableau Desktop 和适当的权限,您可以使用服务器菜单并在 Tableau Public 下选择选项来保存和打开工作簿。
-
使用免费的 Tableau Public 客户端,您只能将工作簿保存到网络并从网络中打开。
使用这些选项时,请注意全世界任何人都可以查看您发布的内容。
-
选择管理工作簿选项将打开一个浏览器,以便您可以登录到您的 Tableau Public 帐户并在线管理所有工作簿。
-
保存到 Tableau Public 的工作簿可能包含任意数量的数据源连接,但它们必须全部被提取,每个提取的数据不能超过 1500 万行。
当您想与世界分享您的数据故事时,请考虑使用 Tableau Public!
发布到 Tableau Server 和 Tableau Online
发布到 Tableau Server 和 Tableau Online 是类似的体验。要发布到 Tableau Server 或 Tableau Online,请从菜单中选择服务器 | 发布工作簿。如果您尚未登录到服务器,则将提示您登录:

图 16.4:Tableau Online 的登录界面
您必须拥有一个具有发布权限的用户帐户,用于一个或多个项目。输入 Tableau Server 的 URL 或 IP 地址,您的用户名和密码。登录后,如果您有多个访问权限,则会提示您选择一个站点。最后,您将看到发布屏幕:

图 16.5:发布到 Tableau Online
发布时您有多个选项:
-
选择要发布到的项目并为您的工作簿命名。如果已经使用与所选项目相同的名称发布了工作簿,则将提示您覆盖它。
-
您可以为工作簿添加描述并使用添加标签使搜索和查找工作簿更容易。
-
您还可以指定要在发布的工作簿中包含哪些工作表。您勾选的任何工作表都将被包含;您取消勾选的则不会。
-
您可以编辑用户和组权限以定义谁有权查看、交互和更改您的工作簿。默认情况下,使用项目设置。这是一个带有个人用户和权限的示例工作簿:
![]()
图 16.6:Tableau Server 允许进行强大的权限设置。您可以调整个人和组的权限,以进行查看、过滤、评论、编辑、保存等操作。
-
您可以编辑数据源的属性。下一节将详细描述这些选项。
-
您还可以选择显示工作表作为标签。选中此选项后,Tableau Server 上的用户将能够像在 Tableau Desktop 底部那样使用标签在工作表之间进行导航。如果您计划设置在视图之间导航的操作,必须选中此选项。
-
显示选择表示您希望任何活动的标记选择在发布的视图中保留。
编辑数据源时,您可以选择身份验证和调度选项:
-
对于工作簿中使用的每个数据连接,您可以确定如何验证数据库连接的身份。可选项将根据数据源以及 Tableau Server 的配置而有所不同。不同的选项包括嵌入密码、模拟用户或提示 Tableau Server 用户输入凭据。
-
您可以为 Tableau Server 设置调度,以运行任何数据提取的刷新。
任何需要在服务器上刷新实时连接或提取连接的,都必须定义可从服务器使用的连接。这意味着所有相关的数据库驱动程序必须安装在服务器上;所有访问数据库服务器和基于云的数据所需的网络、互联网连接及端口必须是开放的。
此外,任何由工作簿引用的外部文件(例如图像文件和未提取的基于文件的数据源)如果在工作簿发布时未包含,必须使用 Tableau Server 可访问的位置进行引用(例如,具有允许 Tableau Server 进程读取权限的网络路径)。
一旦仪表板和视图发布到 Tableau Server,您和其他有权限的用户将能够与其进行交互。接下来我们将详细讨论这些内容。
与 Tableau Server 交互
在工作簿发布到 Tableau Server 后,其他用户将能够使用网页浏览器查看和与可视化和仪表板交互。登录 Tableau Server 后,他们将能够浏览其有权限访问的内容。这些用户可以使用仪表板中内置的任何功能,如快速过滤器、参数、操作或钻取。所有内容都以HTML5格式呈现,因此用户查看和与视图及仪表板交互的唯一要求是兼容HTML5的网页浏览器。
Tableau 移动版应用程序,适用于 iOS 和 Android 设备,可以增强移动用户的体验。使用 Tableau 的设备设计器为特定设备调整布局。
大多数情况下,在 Server 或 Online 上与工作簿互动非常类似于在 Tableau Desktop 或 Reader 中与工作簿互动。快速筛选器、参数、操作和工具提示的外观和行为都非常相似。
你还会找到一些额外的功能:
-
侧边菜单为你提供了与管理和导航 Tableau Server 相关的各种选项。
-
在下面,你会看到一个面包屑导航,告诉你当前正在查看哪个工作簿和视图。
-
在下方,你会看到一个包含多个功能的工具栏:
![]()
图 16.7:Tableau Server 工具栏
-
撤销和重做使你能够在交互过程中前后移动。
-
恢复使你能够撤销所有更改并恢复到原始仪表板。
-
刷新重新加载仪表板并刷新数据。然而,这不会刷新任何数据的提取。
-
暂停允许你暂停仪表板基于操作、筛选选择或参数值变化的刷新,直到你完成所有想要的更改。
-
视图允许你根据选择、筛选器和参数值保存仪表板的当前状态,以便你稍后能够快速返回到该状态。你也可以在这里找到已保存的视图。
-
警报允许你设置条件警报。当视图中的标记达到你定义的阈值时,你将通过电子邮件收到警报。例如,你可能有一个盈利能力的折线图,并希望在达到组织目标的那天收到警报,或者你可以设置一个警报,当数据中指示的错误数量超过
0时,收到通知。 -
订阅允许你安排定期发送仪表板截图的电子邮件。管理员还可以为其他用户订阅。你可能希望考虑这个选项来分发每日绩效报告、销售更新、库存数量或任何你想要推送的其他信息!
-
编辑允许你编辑仪表板。界面与 Tableau Desktop 非常相似。Tableau 管理员可以根据用户或用户组启用或禁用网页编辑,并控制保存编辑视图的权限。
-
共享为你提供了共享工作簿的选项。这些选项包括一个你可以分发给其他授权用户的 URL,以及用于将仪表板嵌入网页的代码。
-
下载按钮允许你下载数据、仪表板图像、
.pdf文件或工作簿,如前所述。 -
评论使你能够通过在视图上发表评论并回复其他人评论的方式与其他 Tableau Server 用户进行协作。
-
全屏允许你查看仪表板或以全屏模式查看。
-
指标(未在图 16.7中显示)使你能够定义你希望跟踪的关键数字或指标。
现在我们已经探索了 Tableau Server 的一些互动功能,让我们进一步考虑 Tableau Server 和 Tableau Online 的一些分发选项。
使用 Tableau Server 或 Tableau Online 的其他分发选项
Tableau Server 和 Tableau Online 提供了几种其他选项,用于共享您的视图、仪表板和数据。在允许用户登录 Tableau Server 的同时,您还可以考虑以下选项:
-
仪表板、视图和故事点可以嵌入到网站、门户和 SharePoint 中。单点登录选项可实现您的网站身份验证与 Tableau Server 的无缝集成。
-
Tableau Server 允许用户订阅视图和仪表板并安排电子邮件发送。电子邮件将包含视图的最新图像以及 Tableau Server 上仪表板的链接。
-
tabcmd 工具与 Tableau Server 一起提供,并可以安装在其他机器上。该工具提供了自动化 Tableau Server 多种功能的能力,包括导出功能、发布功能以及用户和安全管理功能。这为自动化交付打开了许多可能性。
-
REST API 允许与 Tableau Server 进行程序化交互。这为您提供了广泛的选项,用于导出数据、图像和文档并分发给用户,以及访问使用统计信息、用户、权限等更多内容!
所有这些选项极大地扩展了将数据和可视化内容分发给组织中最需要它们的人所提供的灵活性!
摘要
Tableau 是一个令人惊叹的平台,适用于探索、准备和清理数据,同时创建有用且有意义的可视化和仪表板,以便理解和传达关键洞察。 在本书中,我们考虑了如何连接数据——无论是基于文件的、在本地数据库中的,还是在云中的。您已经通过示例了解了如何探索和准备数据,以便清理它并将其结构化以进行分析。我们已涵盖了多种可视化类型,以及它们如何揭示深入的分析洞察。四种主要计算类型已被深入探讨,为您提供了扩展数据、分析和用户互动的工具。您已经构建了仪表板并讲述了数据故事。在本章中,我们考虑了如何与他人共享您所有工作的结果。
您现在已经打下了坚实的基础。从本质上讲,Tableau 平台直观且易于使用。当您深入探索时,简洁性变得愈加美丽。随着您发现理解数据的新方式,解决复杂问题,提出新问题,并在数据集中找到新的答案,您的新 Tableau 技能将帮助您发掘、解读并共享数据中隐藏的新洞察。


















































































































浙公网安备 33010602011771号