Tableau-策略指南-全-

Tableau 策略指南(全)

原文:zh.annas-archive.org/md5/617133610e68907e6f8ce522984c63ef

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

如果你拿起了这本书,那么我们已经有一些共同点了。你可能会问,这是什么?那就是我们热爱数据——与数据一起工作、分析数据并呈现数据。Tableau 产品组合,尤其是 Tableau Desktop,为我们这些数据爱好者提供了与数据亲密接触的机会,审视它,并创建美丽的图表和输出。

Tableau 作为一种可视化工具是独特的。它采用分析优先的方法,提供一个开放的画布,让创作者可以从头开始构建他们能想象到的任何图表。它还提供了一个出色的工具包,用于创建交互式仪表板和像素完美的数据显示。

但是,作为我们这里的所有专业人士,我们知道真相:仅仅连接数据集到 Tableau 并不能提取洞察力和价值。这就是这本书的用武之地。在这些页面中,你将找到一系列详尽的用例和场景,旨在提供背景评论和技术知识。无论你是数据初学者(我们已为你准备好了)还是经验丰富的 Tableau 专业人士,本书的各章都旨在指导你如何为什么制作图表。

而这本书最令人兴奋的部分之一是什么?它涵盖了许多行业的示例,并包含许多类型的数据。我们都知道数据的类型和数据集的内容定义了分析的方向,但在你的日常工作中,你往往只能处理一种类型的数据。在这里,你将能够从中获得灵感,并获得与你完全不熟悉的数据一起工作的实际经验。

在 Tableau 存在近 20 年的时间里,你们两位作者都没有找到比 Tableau Desktop 提供的深度、灵活性和创新更多的可视化工具。再加上一个世界级社区和名为 Tableau Public 的免费社交分享平台,你们两位为何继续将职业投入 Tableau,并将其教授给各种规模和类型的学习者和课堂,这就是完美的原因。

谁应该阅读本书

这本书适合任何熟悉 Tableau Desktop 并能够使用该应用程序创建图表、可视化和仪表板的人。我们设计这本书是为了那些已经知道如何连接数据,但正在寻找灵感和知识增强应用的人。

如果你是数据分析师,这本书会给你带来共鸣,因为它提供了我们自己经验的用例和实践练习。每个策略都以利益相关者的问题和背景为框架,我们将带你从开始到结束,介绍如何构建可视化,为何构建它以及在此过程中学到的经验。

如果你是一位分析领导者,这本书将帮助你在使用 Tableau 分析和展示数据时,应对各种请求的挑战。借助我们的策略,你可以避免常见的错误,学习如何为不同受众创建合适的数据产品,并减少维护产品的时间。

如果你是一位商业智能开发者或数据工程师,我们希望本书能够成为连接数据技术领域和满足业务需求的深入桥梁。你将第一时间了解到,使用 Tableau 的敏捷性质如何指导数据捕捉的类型、存储方式,以及最重要的数据共享方式。

最后,如果你刚接触数据和分析领域,本书将作为你接收到最常见请求的全面指南。本书所做的是前所未有的:提供实际使用案例,并以任何读者都能学习和实施的形式呈现。当你深入学习这些章节时,请知道,你正在阅读我们在职业生涯初期都希望拥有的书籍。

为什么撰写本书

我们撰写本书的目的是揭开使用 Tableau 创建数据产品和可视化过程的神秘面纱。在关于 Tableau 的海量信息中,我们都觉得有一个需要填补的空白——即为任何类型的组织制定成功的 Tableau 可视化策略。本书独特之处在于,每一个策略都是我们中的一位或两位实际实施过的,并伴随着与策略相关的思考和观点。

阅读指南

本书的前 10 章旨在引导你了解特定类型的分析以及使用 Tableau 生成的数据产品。在每一章中,你将找到称为策略的实际练习,并提供相应的数据集,以构建解决方案。

你将从本书的前三章基础部分开始,从分类数据开始。首先,你将学习如何构建最基本的可视化——条形图。随后的策略将继续发展,并包括如何定制每种图表以适应你的受众的技巧。

第 4 至第七章将详细介绍更具体的视觉分析类型。你将学习如何处理时间,并掌握构建完美日期计算、向高管传达关键指标(第五章)、以及制作地图(第七章)的要领。

第 8、9 和 10 章将全面考验你在 Tableau 中的掌握程度。你将看到我们最具挑战性的策略,并学习如何将 Tableau 远远超越其默认功能。

书的最后四章从练习中退后,探索更广泛的概念。在第十一章和第十二章中,您将学习如何创建交互式、美观且有影响力的仪表板和数据产品。在第十三章和第十四章中,我们将介绍分析学的评论,包括如何创建完整的分析平台以及关于来自最流行行业的框架的讨论。

本书中使用的约定

本书中使用以下排版约定:

斜体

表示新术语、URL、电子邮件地址、文件名和文件扩展名。

等宽字体

用于程序列表,以及段落内引用程序元素,例如变量或函数名称、数据库、数据类型、环境变量、语句和关键字。

等宽字体粗体

显示用户应按字面输入的命令或其他文本。

注意

此元素表示一般说明。

提示

此元素表示提示或建议。

警告

此元素表示警告或注意事项。

O’Reilly 在线学习

注意

超过 40 年来,O’Reilly Media为企业成功提供技术和业务培训、知识和洞察力。

我们独特的专家和创新者网络通过书籍、文章和我们的在线学习平台分享他们的知识和专长。O’Reilly 的在线学习平台为您提供即时访问实时培训课程、深入学习路径、交互式编码环境以及来自 O’Reilly 和其他 200 多家出版商的大量文本和视频。欲了解更多信息,请访问http://oreilly.com

如何联系我们

请将有关本书的评论和问题寄送给出版商:

  • O’Reilly Media, Inc.

  • 1005 Gravenstein Highway North

  • 加利福尼亚州塞巴斯托波尔 95472

  • 800-998-9938(美国或加拿大)

  • 707-829-0515(国际或本地)

  • 707-829-0104(传真)

我们为本书设有网页,列出勘误、示例及任何其他信息。您可以访问https://oreil.ly/TableauStrategies

通过电子邮件bookquestions@oreilly.com对本书进行评论或提出技术问题。

关于我们的书籍和课程的新闻和信息,请访问http://www.oreilly.com

在 Facebook 上找到我们:http://facebook.com/oreilly

在 Twitter 上关注我们:http://twitter.com/oreillymedia

在 YouTube 上观看我们:http://www.youtube.com/oreillymedia

致谢

总体来说,我们都要感谢 Tableau 社群中每一个成员,不论是过去的、现在的还是未来的。正是你们持续带来的知识、问题和讨论,才让我们能够完成我们的工作。具体来说,我们要感谢 Andy Kriebel 和 Emma Whyte,这两位将 Tableau 中的技术挑战构思成了一个名为 Workout Wednesday 的每周挑战活动。没有这个社群倡议的基础,我们就无法建立一个大量示例可供选择的案例库,也无法意识到这种书籍的需求。

我们也共同感谢 Rody Zakovich、Curtis Harris、Lorna Brown、Sean Miller 和 Candra McRae。你们多年来一直支持 Workout Wednesday,并为我们提供挑战和知识的交流平台。因为与你们的合作,我们每个人都变得更加出色。

最后,我们共同感谢本书的技术审稿人员 Jami Delagrange、Alicia Bembenek、Christopher Gardner、Allen Hillery 和 Bonny McClain,他们投入了大量时间来确保最终产品达到我们的满意度。我们感激你们在整个过程中分享的每一个评论、每一处纠正和每一个建议。

安想要感谢以下个人:

Jami Delagrange

感谢你不仅仅是一个技术审稿人。我珍视你的友谊和观点。

Patti 和 John Provost

感谢你相信并支持我的目标。感谢你在我每次恐慌的短信和电话中,用爱、理解和幽默作答。

乔什·杰克逊

感谢你作为我的生活伴侣和丈夫。感谢你支持我的梦想,在我看不到光明时引导我们一起前行。我为我们共同创造的生活感到无比感激,能与你分享我的每一天。

卢克想要感谢以下人士:

我的共同作者

在我们早期的职业生涯中,安和我曾在同一家公司工作,但直到 2017 年的 Tableau 大会我们才有机会见面。从那时起,我们保持了一种牢固的专业关系,最终导致我们共同撰写了这本书。感谢你安,在这些年里,你为我们的友谊所付出的时间。

我的妻子和父母

感谢你在全球大流行期间抽出时间提供儿童看护支持,让我能在夜晚和周末写技术书籍。

Tessellation 团队

你们是一个梦幻团队,也是我日常灵感和动力的源泉之一。看着你们每个人多年来的成长,是一份礼物。我还要特别赞扬 Alicia Bembenek,两年前加入团队,并迅速接受了担任技术审稿人的机会。感谢你抽出额外的时间来帮助审阅并提供反馈。

分析社群

分析社群的成员们通过社交媒体不那么秘密地提供了分布式的输入。感谢你对我所有随机想法的反应。

第一章:分类分析

分类分析是数据可视化的基础。这是数据分析师使用的第一种和最频繁的数据可视化类型。分类分析将一个维度(例如,[地区])按照一个度量(例如,[销售额])进行分解。维度通常是一个分类值;这些不会被聚合。它们通常用于创建数据标题或生成过滤器。度量是一个(通常是数值的)值,可以使用数学函数(如求和、平均值或中位数)进行聚合。度量创建无间断的轴线,从一个范围的一端延伸到另一端。

这种类型的分析有助于回答以下常见业务问题:

  • AB相比如何?

  • X的度量在Y类别中如何分布?

  • ABC对总体的贡献有多大?

  • 如何测量X随时间(时间作为维度)的变化?

分类分析通常以条形图呈现。条形图使用高度或长度作为视觉编码来表达一个度量。视觉编码是指在图表中显示数据的技术;图 1-1 展示了一些例子。在条形图中编码数据非常有效,因为人类可以快速分析条形的大小变化;它们也容易理解和标记。

这幅插图展示了数据可以如何编码以便显示,并将它们与一个理解尺度对齐,表明人眼可以辨别差异的精度

图 1-1。这幅插图展示了数据可以如何编码以便显示,并将它们与一个理解尺度对齐,表明人眼可以辨别差异的精度。

在我们的第一个应用案例中,我们将探讨如何制作有效的条形图。您将扮演一个希望了解哪些商家类别占据大部分交易支出的大型金融机构角色,以推动营销工作和合作伙伴关系,更好地服务客户利益的角色。我们还将从默认设置中扩展出两种额外的制作条形图的方法,以展示最重要的信息。

在第二个案例研究中,您将学习如何处理多个维度。虽然条形图非常有用,但在进行分类分析时,您需要其他数据可视化工具。当一个维度有许多成员时,将每个成员显示为条形图有时会变得棘手。在这种情况下,您可以使用替代的图表形式来节省空间,但仍然可以显示所有成员。对于这种情况最有用的图表是树状图。我们将通过一个关于非营利组织的案例研究来探索树状图。

在本章的最终用例中,您将学习如何使用饼图和环形图来可视化整体关系。本案例涉及对 IT 专业人员和心理健康进行调查。饼图通常是您在学校学习的第一种数据可视化类型,但我们喜欢节俭地使用它们作为备选选项。当我们到达这个用例时,您将看到如何正确执行饼图可以成为与观众共享和制作数据的强大工具。

柱状图:Tableau 案例研究

我们的第一个案例研究涉及一家试图了解消费者行为的大型金融机构。我们称之为Banco de Tableau(简称为 BoT)。

BoT 的数据团队正在努力了解消费者如何和在哪里花钱。这个目标对于组织的成功至关重要,因为它将推动营销努力、合作伙伴关系和产品推广的方向。它还将提供关于客户画像的见解,并可能揭示增加客户群体的机会。团队应该使用什么样的图表来呈现其结果?

当您探索分类分析时,柱状图应该是您尝试的第一种可视化类型。因为它们使用长度和高度作为视觉编码,使得解释和比较成员变得容易。

要解决银行数据团队的问题,你将从一个基本的柱状图开始。它将帮助你通过消费者支出来比较各种类型的商户。它还将作为理解数据的第一步。

策略:在 Tableau 中构建柱状图

要构建您的第一个柱状图,您将使用 Tableau 中的金融机构交易数据集进行跟随。以下是步骤:

  1. 将[Merchant Category]维度拖动到行架上。

  2. 将[Transaction Amount]度量作为SUM([Transaction Amount])拖动到列架上。

  3. 从工具栏中,按交易金额(即支出)降序排列商户。

恭喜你——你已经构建了你的第一个柱状图。现在这可能看起来并不革命性,但这是了解消费者支出重点的第一步。这个简单的图表,显示在图 1-2 中,打破了任何基于直觉的理论,并向我们呈现了事实。

柱状图显示按交易金额降序排列的商户类别

图 1-2. 柱状图显示按交易金额降序排列的商户类别

这是一个很好的起点。我们已经将数据可视化,可以看到最大的商户类别是男女装店。我们还可以看到一些小的商户类别贡献不了很多支出,比如清洁和维护。知道有许多类型的商户类别,有些比其他的大得多,这是我们可以利用以改进我们的可视化的额外洞察。

通过使用一个Top N 过滤器和一个参数,限制显示的商家类别数量是一个很好的增量方式。这个过滤器根据用户定义的N值限制图表,以便只显示图表中的前几名成员。参数是由最终用户定义的动态输入字段。

在这种情况下,我们将创建一个允许用户动态定义要查看的类别数的参数。添加参数不仅可以使我们的受众更多地控制可视化效果,而且还提供了一种更具对话性的方式来理解图表的内容。前 10 名的示例比长长的条形图列表更具切实可行性和简洁性。

提示

在即将到来的策略中,您将首次使用参数。我们使用记忆术ABC来记住构建参数的最常见步骤:

  • A: 添加一个新的参数。

  • B: 将参数控件拖放到工作表上(显示控件)。

  • C: 将参数包含在一个计算字段中。

策略:创建 Top N 条形图

要创建 Top N 条形图,请按照以下步骤操作:

  1. 将[商家类别]拖放到筛选器架上。

  2. 导航到顶部部分。

  3. 从下拉列表中,选择创建一个新的参数。

  4. 将参数命名为**[Top N]**并保存。

  5. 右键单击数据窗格左下角的参数以显示参数控件。

注意在图 1-3 中,我们将参数值放在图表标题中。现在,当用户进行动态更改时,数字将随之更新。通过这个小动作,我们创建了一系列可以根据受众需求定制的图表。这个改变还使得图表能够对观众产生响应;他们的行为改变了可视化效果。

一个应用了 Top N 过滤和参数的条形图

图 1-3. 一个应用了 Top N 过滤和参数的条形图

那么我们如何进一步提升呢?我们猜你一直在想,这些类别在总支出中所占的百分比是多少。尽管比较它们在我们进一步综合思考时是有用的,但一种自然的倾向是改变评论,即“男装和女装店的客户支出达到 2700 万美元”,改为“接近总客户支出的 4%归因于男装和女装店”。

我们如何处理呈现这些信息?首先,我们可以将度量从直接度量改为总量的百分比。但现在我们留下一个悬而未决的想法,即如果我们将我们的图表限制在前 10 名,我们将失去其他所有类别支出量的上下文。

要解决此限制,我们可以允许观众使用参数来定义他们希望看到分解为商户类别的客户支出比例,并自动将所有其他类别分组在一起。他们仍然可以对图表进行动态控制,但同时可以看到数据的整体情况,如 图 1-4 所示。

注意,您需要构建一个与您所做的总数百分比计算相当的计算。为此,您可以利用 层级详细 (LOD) 表达式。LOD 表达式允许您定义计算的聚合方式,与可视化中使用的维度无关。该计算采用 SUM([Transaction Amount]) 并将其除以整个数据集的总和 SUM([Transaction Amount])

更新后的条形图,现在将所有其他类别分组放置在底部

图 1-4. 更新后的条形图,现在将所有其他类别分组放置在底部。

策略:动态分组其他维度

要更新我们的图表,动态分组其他维度并显示总数的百分比,请按照以下步骤操作,使用前一策略的工作表:

  1. 从筛选架中删除 [商户类别] 筛选器,方法是右键单击并选择“删除”或将其拖到标记卡下方的灰色空间中。

  2. 通过使用快速表格计算,将度量更改为总数的百分比。右键单击 SUM([Transaction Amount]),选择快速表格计算 → 百分比占总数。

  3. 创建名为 **[百分比阈值]** 的参数。将数据类型设置为浮点数,当前值为 0.01。以百分比格式显示数值。

  4. 基于 [商户类别] 维度创建一个集合。这将是一个基于计算的公式集合,其中总数的百分比大于或等于参数。在数据窗格中右键单击 [商户类别],选择创建 → 集合。

  5. 在“创建集合”对话框中,选择“使用全部”,然后导航到“条件”选项卡并在“按公式”文本框中输入以下内容:

    SUM([Transaction Amount])/MAX({SUM([Transaction Amount])})
    	>= [Percentage Threshold]
    
  6. 创建名为 **[要显示的商户类别]** 的计算维度:

    //Merchant Category to Display
    IF [Merchant Category Set] THEN [Merchant Category]
    ELSE "All Other Categories" END
    
  7. 将新的 [要显示的商户类别] 维度拖放到行架上的 [商户类别] 上方。

  8. 将 [商户类别集] 拖到 [要显示的商户类别] 的左侧。这将组织类别的显示顺序。右键单击并隐藏标题。

  9. 通过右键单击并将 [百分比阈值] 参数添加到工作表来完成可视化。同样,右键单击并隐藏 [要显示的商户类别] 的字段标题。通过在标记卡上单击 Label 并选中“显示标记标签”复选框来添加标签。

更新后的分析更加灵活地满足观众的偏好。现在,他们有关于总数百分比的上下文信息,并且能够决定显示多少数据。这种可视化已经超越了只有支出总和的条形图,因为我们不再牺牲了解数据总分布的情况。

如果您已经达到这一点,仍然想要更多,您可以引入额外的项目来增加更多的上下文和反馈。类似于我们最初用于 Top N 的参数,这些附加技术将根据观众的反馈提供反馈,并帮助增强他们对图表的信任。

策略:通过颜色增强您的条形图

您可以在条形图中添加颜色。按照以下步骤进行增强:

  1. 您可以使用参数作为参考线,以加强动态输入概念。右键单击[% of Total Transaction Amount]轴,选择添加参考线。将范围设置为整个表格,值设置为百分比阈值,标签设置为值。点击确定。

  2. 现在将百分比阈值调整为 0.75%(0.0075)。请注意,会显示额外的类别,但没有一个低于 0.75%。

  3. 您还可以通过使用我们的“颜色设置”来进一步对目标大型商户类别进行编码。将[商户类别设置]拖到颜色上。设置在此集合中的商户将显示为一种颜色,而不在其中且属于“所有其他类别”的商户将显示为另一种颜色。

    图 1-5 显示了结果。

相同的条形图,现在通过颜色编码区分个别类别和分组类别

图 1-5. 相同的条形图,现在通过颜色编码区分个别类别和分组类别

干得好!我们喜欢条形图——它们是任何分析的关键工具。虽然它们可能一开始很简单,但通过抽象的度量和动态输入,您可以将条形图从基础提升到令人惊叹的水平。

有时候,文本在和那些条形图周围的格式化方式上的价值就体现在这里。在这一节中,我们将讨论三种更多的方法来通过格式化使你的条形图更加突出。您将继续使用金融机构交易数据集来构建这些内容。

策略:左对齐文本

从一个新的工作表开始,您将使用网络创建这个格式化的条形图:

  1. 将[网络]添加到行架上,将SUM([交易])添加到列架上。将视图设置为整个视图,并使用轴上的排序图标将网络按SUM([交易])按降序排序。

  2. 通过按住 Ctrl 键从各自的行/列架上拖动,将[网络]和SUM([交易])添加到标签上的标记卡。

  3. 右键单击行架上的[网络]并取消选择显示标题。

  4. 要编辑标签,请点击标记卡上的标签。在打开的对话框中,点击文本选项旁边的省略号。自定义标签为**<Network> // <SUM(Transactions)>**,左对齐。我们建议将维度的字体大小设置为度量的 1.5 倍左右。您可以通过将设置为 12 和<SUM(Transactions)>设置为 10 来完成此操作。

  5. 再次点击标签,并调整水平对齐方式为左对齐。

  6. 右键单击轴,取消选中显示[Transactions]的标题以隐藏轴。

  7. 从工具栏中选择“格式” → “线条”。通过将它们设置为“无”,删除网格线和零线。将行的轴标尺设置为实线黑色。

结果是一个可视化图表,标签包含维度名称和与度量相关的数值(图 1-6)。

重新格式化柱状图表可以为图表类型带来新生命

图 1-6。重新格式化柱状图表可以为图表类型带来新生命

策略:创建带有顶部标签的柱状图

此策略还直接将标签和值放置在柱形上方。创建此柱状图的技巧在于我们根本不会使用柱形标记类型:

  1. 右键单击上一个策略的工作表并进行复制。

  2. 创建名为**[Baseline]**的计算。此计算将用于确定柱状图表的基线位置:

    //Baseline
    MIN(0.0)
    
  3. 在列架上添加[基线]。右键单击并创建双轴。同步轴,然后将标记类型更改为甘特图。右键单击隐藏轴,取消选择显示标题。你可能需要将SUM([Transactions])的标记类型改回柱状图。在这样做的同时,取消选中“显示标记标签”。

  4. 在[基线]的标记卡上,通过单击“大小”并调整滑块来编辑甘特图的宽度,使甘特条尽可能宽。将颜色设置为白色,并将不透明度设置为零。

  5. 调整标签对齐方式,水平右对齐,垂直顶部。

  6. 现在,您可以调整SUM([Transactions])柱的大小,使其变小,看起来标有甘特标记的标签位于柱的顶部。图 1-7 显示了重新格式化的图表。

另一个重新格式化的柱状图表

图 1-7。另一个重新格式化的柱状图表

策略:创建最大百分比柱状图

举例说明,你将构建另一个柱状图表(图 1-8),但这次柱的背景也将用颜色突出显示:

  1. 创建名为**[Total Bar]**的计算:

    // Total Bar
    MIN(1.0)
    
    提示

    我们将使用此计算来在可视化中表示交易金额的 100%。

  2. 将[Network]添加到行架上。

  3. 将“Total Bar”添加到“Columns”架上。将轴固定在 0 开始到 1.1 结束。您可以通过右键单击轴并选择“编辑轴”来执行此操作。在对话框中,将范围设置为固定,并使用 0 作为固定起点,1.1 作为固定终点。

  4. 将颜色不透明度设置为 40%。将SUM([Transactions])拖到标签中。

  5. 创建一个名为**[Percent of Maximum]**的度量:

    // Percent of Maximum Transactions
    SUM([Transactions])/WINDOW_MAX(SUM([Transactions]))
    
  6. 将这个新的度量添加到“Columns”架上。创建一个双轴并同步轴。您可能需要将标记类型更改回柱形。在所有标记卡上删除“[Measure Names]”的颜色。从“[Percent of Maximum Transactions]”标记卡中删除标签。

  7. 通过单击轴并选择降序来对网络进行排序。然后隐藏两个轴标题。调整柱状图的大小以位于“大小”的中心刻度标记处。

一个百分比最大柱状图

图 1-8. 一个百分比最大柱状图

柱形-柱形图:Amplify Performance 案例研究

我们的下一个案例研究关注非营利组织 Amplify Performance (AP),它控制并资助纽约州的创意、表演和文化艺术项目和倡议。资助款项分为两类:一类与组织预算相关,另一类更直接地分类为项目倡议。AP 数据团队试图用并排柱状图展示这两类数据,但结果令人困惑。什么样的可视化方式更合适?

并非所有分类比较都需要简单的柱形图。有时比较更复杂。例如,您可能需要比较单一指标的不同时间段的群组。您的受众将希望了解成员之间的变化,以及各个组在时间上的变化。

在这些情况下,新手开发者的第一反应往往是使用并排柱状图。这些可能是有效的,但它们占用了大量空间。在进行这类分析时,我们更喜欢使用柱形-柱形图。在图 1-9 中,您可以看到 2018 年和 2019 年每个类别的总资助额的并排柱状图。

并排柱状图虽然有效,但占用了太多空间

图 1-9. 并排柱状图虽然有效,但占用了太多空间

看起来你已经得到了你真正想要的所有信息:有两年的柱形图,并且可以快速比较。但你会注意到,数据并没有按照 2019 年的总数排序;相反,它按照两年总数排序

此外,我们在组内进行任何比较(例如,艺术教育)都需要观众进行心算,以理解从 2018 年到 2019 年变化的幅度。如果能在可视化中直接显示这些信息,将会非常有帮助。同样,观众也能快速了解哪些类别从前一年增加,哪些减少。

您可以通过使用条形图,如图 1-10 所示,完成所有操作。跟随非营利性拨款数据集创建此图。

条形内外柱图比并排条形图占用更少的空间,同时展示相同的信息

图 1-10. 条形内外柱图比并排条形图占用更少的空间,同时展示相同的信息。

策略:创建条形内外柱图

在图 1-10 中,我们将 2019 年的拨款总额放置在每个类别的 2018 年拨款总额上方。在此,您的观众可以快速比较基准年度(此处为 2019 年)各组的表现,以及该组与前一年的表现。

我们通过添加颜色来辅助年度比较 —— 我们并未选择两种截然不同的颜色,而是使用了同一色调的两种颜色。前一年减少的总数用较亮、饱和度较低的颜色表示。

最后,我们将 2019 年的年度变化以百分比的形式添加到总数旁边。在图 1-10 中,生成的图表综合了三个比较内容:2019 年各组的总拨款金额、每组从 2018 年到 2019 年的拨款金额变化,以及从 2018 年到 2019 年的变化幅度。

那么,如何创建此图表呢?按照以下步骤操作:

  1. 创建您的度量。与其使用日期维度来分隔数据,更有效的做法是创建两个分别过滤到相关数据内部的计算。让我们创建 2018 年拨款金额的计算:

    // Grant Amount | 2018
    SUM(
     IF YEAR([Date]) = 2018
     THEN [Grant Amount]
     END
    )
    

    以及 2019 年拨款金额的计算:

    // Grant Amount | 2019
    SUM(
     IF YEAR([Date]) = 2019
     THEN [Grant Amount]
     END
    )
    

    一般而言,应避免在计算过程中硬编码任何内容。在这种情况下,我们通常使用计算或参数来在数据更新时自动化变化(详见第 4 章)。

  2. 通过将[Budget Category]添加到行中,同时将[Grant Amount | 2018]和[Grant amount | 2019]添加到行中创建基础可视化。

    1. 创建一个同步的双轴图表,两个标记类型都设置为条形。确保将 2018 年放在双轴图表的最左侧。

      将 2019 年的条形大小调窄,使其比 2018 年的条形更窄。您可能需要调整两者,以便使条形的位置更合适。

    2. 确保从两个 Marks card 中删除[测量名称]。(这不是您添加的;当您创建双轴图表时,Tableau 会自动添加这个。)

    3. 将外部柱的颜色设置为浅灰色,但仍能与背景区分开,如图 1-11 所示。

      使用自定义计算创建柱对柱图表

    图 1-11. 使用自定义计算创建柱对柱图表
    提示

    我们倾向于使我们外部柱的宽度(在图 1-11,2018 年)等于柱之间的空白宽度。对于内部柱,我们希望其宽度介于外部柱宽度的 50%至 75%之间。

  3. 我们可以依赖轴来进行比较,但由于我们使用的是水平柱状图,因此添加标签是有意义的:

    1. 在[资助金额 | 2019] Marks card 上,点击并拖动[资助金额 | 2019]到标签。

    2. 创建一个名为**[资助金额 | % 变化]**的新计算,用于从 2018 年到 2019 年的百分比变化:

      // Grant Amount | % Change
      ([Grant Amount | 2019] - [Grant Amount | 2018]) / [Grant Amount | 2018]
      
    3. 创建度量后,右键单击它,并更改数字格式的默认设置,如图 1-12 所示。

      使用自定义格式使您的百分比显示恰到好处

      图 1-12. 使用自定义格式使您的百分比显示恰到好处

      这将显示正值前面的加号,负值前面的减号,当方向没有变化时则不显示任何符号。

    4. 将此计算添加到标签中。现在编辑标签的文本。将[资助金额 | 2019]格式化为比[资助金额 | % 变化]度量更大且颜色更深。您的图表应如图 1-13 所示。

      文本编辑器显示您应如何格式化可视化文本标签

      图 1-13. 文本编辑器显示您应如何格式化可视化文本标签

      在此示例中,我们分别使用了大小为 15 和 9 的字体。文本颜色分别为#000000(黑色)和#555555(深灰色)。此外,我们在括号中添加了[资助金额 | % 变化]。您的图表应如图 1-14 所示。

      在我们最终完成格式化之前查看柱对柱图表

      图 1-14. 在最终格式化之前查看柱对柱图表
  4. 要添加颜色,请创建一个名为**[颜色]**的简单布尔型变量,比较 2019 年和 2018 年的情况,然后将其添加到[资助金额 | 2019] Marks card:

    // Color
    
    [Grant Amount | 2019] > [Grant Amount | 2018]
    

    您可以编辑颜色,并选择两种以相同颜色开头的颜色:例如,基础十六进制颜色#19626B 用于 True 值,第二种颜色#84B6BC 则更亮、饱和度较低。

  5. 添加最后的润色:

    1. 按 2019 年总资助金额对类别进行排序。

    2. 隐藏您的轴和行标题标签。删除所有多余的线条。

    3. 移除垂直分隔线。保留水平分隔线,确保每个成员之间都有分隔。

    你的结果应该类似于图 1-15。

添加颜色后的柱状图

图 1-15. 添加颜色后的柱状图

Treemaps:放大性能案例研究

Treemap类似于柱状图,但使用矩形的面积相对于高度或长度来编码数据。如果一个维度有许多成员,并且必须显示所有成员,则 Treemap 是一个很好的替代方案。

面积是一个较不精确的度量,但通常在使用 Treemap 时,目标不是完全精确,而是要在一个单一、紧凑的可视化中显示类别的所有成员,按大小排序。

我们将探讨使用 Treemap 的主要好处之一,即能够使用颜色来表示度量或维度。在可钻取的 Treemap 示例中,我们将使用颜色来表示预算类别及其内部的项目类别。然后我们将展示如何根据需要向观众展示额外的详细成员。借助这一功能,观众可以自由探索多个方面而不感到不知所措。我们还将直接和间接地将颜色表示为度量。

接下来,我们将专注于在单个可视化中显示维度的所有成员时该如何操作。您已经看到使用柱状图时会出现长滚动的问题,那么您可以使用什么类型的图表来解决这个障碍呢?

假设你正在与之前介绍的非营利组织 AP 合作,该组织控制并拨发资助金用于纽约州的创意、表演和文化艺术项目和倡议。资助金分为两类:一类专注于组织的预算,另一类专注于项目的倡议。

在这种情况下,您不能牺牲较小的成员。能够看到一些较小类别的情况至关重要,以便提供额外资助金的去向洞察。

如果您面临类似情境,我们建议使用 Treemap。虽然您可能会失去比较选择度量的某些精确性,但您将得到一个良好排序且紧凑的可视化,能够显示维度的所有成员。

策略:创建基本 Treemap

使用非营利资助数据集创建一个新的工作表,然后按照以下步骤操作:

  1. 将[Budget Category]拖动到文本。

  2. SUM([Grant Amount])拖动到大小,然后同时将其 Ctrl-拖动到颜色中。

  3. 确保将标记类型设置为 Square。

    结果显示在图 1-16 中。

显示按授予金额排序的预算类别的树图

图 1-16. 按授予金额排序的预算类别的 Treemap

这将为您提供AP的资助分配的完整图景。没有一个单一的预算类别拥有大部分资金,但一些较小的类别占用不到 1%。

提示

在使用树状图时的标准惯例是通过大小和颜色双重编码一个度量。这有助于进一步区分各部分和成员。但这不是必需的。作为一种替代方案,您可以考虑在颜色上编码类别。然而,我们建议谨慎:这里有许多成员,而在这种情况下,您将编码冗余信息。

这个树状图是一个很好的起点,但仅让我们提供了关于资助数据的具体细节一半。资金不仅分配给预算,还分配给项目类别。有 55 个独特的项目类别,这是一个重要的附加详细级别,可能会令人不知所措。我们确实只需要知道每次同时一个给定的预算类别内有哪些项目类别。

要解决预算内项目类别的下一个层次的问题,AP团队可以创建一个可钻取的树状图:一个交互式的树状图,在这里观众可以点击特定的预算类别以查看更多信息。

注意

在以下策略中,您将使用集合动作。集合和集合动作允许您的最终用户与可视化进行交互,以将维度分配给一个集合。在这里,一旦一个维度成为集合的一部分,钻取部分将显示更多细节。

策略:创建可钻取的树状图

让我们尝试创建一个可钻取的树状图,继续使用非营利性资助数据集:

  1. 从前一策略完成的树状图开始,通过首先将[项目类别]拖放到树状图视图的标记卡上,创建一个基于[预算类别]和[项目类别]的集合。这将允许您点击标记并创建一个集合,将两个维度结合起来。右键单击任何标记并创建一个名为**[项目和预算集合]**的集合。最初集合中有什么值并不重要,只要有两列,每个维度一列。

  2. 现在创建一个名为**[标签项目]**的计算字段。这将评估某物是否是集合的一部分,并返回该项目:

    //Label Program
    IF [Program & Budget Set] THEN [Program Category] END
    
  3. 将这个计算字段拖放到标记卡上的[项目类别]之上。

  4. 创建钻取功能。选择工作表 → 操作 → 添加操作 → 更改集合值。

  5. 称之为**深入到项目**。它将在选择时运行。目标集是[项目和预算集合]。清除选择时您想要的操作是“从集合中删除所有值”。

  6. 将[Budget Category]拖放到颜色上,替换SUM([Grant Amount])

  7. 现在点击Dance,树状图矩形将进入,显示组成Dance预算的所有项目。

请注意,在图 1-17 中,您已经改变了颜色的使用方式。这里不再将颜色与拨款支出的重复联系起来,而是用它来区分预算类别。

显示预算类别和项目类别的树状图(树状图以预算类别着色,矩形的大小代表拨款金额)

图 1-17. 显示预算类别和项目类别的树状图(树状图以预算类别着色,矩形的大小代表拨款金额)

让我们再次回到我们的树状图示例,进一步探讨颜色编码。在这种情况下,您将从项目类别开始创建树状图。这次,AP 团队试图确保不仅各种项目类型获得了足够的资金分配,而且资助和支持的项目类型多样化存在。

策略:用颜色编码连续度量

对于这个可视化,您将使用颜色编码来发现项目复苏的机会。您还将用它来突出另一个连续度量:自最近的拨款以来的天数。

一个连续度量是指跨越无限范围的度量,通常在数轴或时间轴上:

  1. 在新的工作表上,创建一个关于[项目类别]和[拨款金额]的树状图。

  2. 创建一个计算字段,评估某类别自上次拨款以来的时间:

    //Days Since Last Grant
    DATEDIFF( 'day',MAX([Date]),TODAY())
    
  3. 当您在视图中使用此计算时,它将评估每个[项目类别]的最大或最近日期,然后计算自今天以来的天数。

  4. 将此度量放在颜色上,并将调色板更改为蓝绿顺序反转。

    您可以在图 1-18 中看到结果。

显示项目类别按拨款金额分类的树状图;颜色已编码以显示项目上次拨款以来的天数

图 1-18. 显示项目类别按拨款金额分类的树状图;颜色已编码以显示项目上次拨款以来的天数

您现在已经看到三种树状图方法,利用不同的颜色编码技术和允许观众深入探索类别的动态元素。

饼图和圆环图:IT 员工健康项目案例研究

本章的最后一个案例研究涉及 IT 员工健康项目,这是一个调查 IT 专业人员及其雇主的倡议。该项目调查了 IT 工作对员工心理健康的影响,以及雇主对心理健康的态度。

与大多数调查一样,有许多问题需要分析以确定态度,但核心任务是提供受访者的人口统计概述。项目的数据分析师的目标是通过职业显示调查受访者的性别分布。他们还希望同时比较几个专业中的分布。哪种图表类型能最有效地将这些传达给项目委员会?

当您考虑到部分与整体的关系时,饼图是一个自然的起点。饼图将圆圈分成维度成员的片段,每个部分代表整体的一部分。一些图表爱好者一想到饼图就会退缩,但饼图对大多数人来说很熟悉。它们还能有效利用空间,并可以作为颜色图例或交互式过滤器使用。并非在每种情况下都是最佳选择,但在正确使用时它们确实有其用武之地。

在本章的最终策略中,您将通过制作小倍数或同一图表的重复版本,按专业分开,进一步发展您的甜甜圈图。这将使数据团队能够同时比较几个专业中性别分布。

策略:构建基本饼图

让我们从基本的饼图开始。你将使用 IT 调查数据集来跟随:

  1. 将 [性别] 拖动到颜色上。

  2. 将标记类型更改为饼图。

  3. 创建一个名为 **[# 受访者]** 的计算字段。

    //# Respondents
    COUNTD([Respondent ID])
    
  4. 将 [# 受访者] 拖动到角度上。根据需要更改颜色(我们使用夏季调色板和白色边框)。将 [性别] 与 [# 受访者] 一起拖动到标签上。格式化标签以匹配标记颜色。

    图 1-19 显示了结果。

显示调查受访者性别分布的饼图

图 1-19. 显示调查受访者性别分布的饼图

为什么这个饼图有效?首先,它只有三个部分;这个饼图没有很多片,所以很容易比较差异。接下来,你已经走了额外的一英里,直接标记并将每个部分的百分比放在旁边。这使得观众很容易理解。如果你有更多的值,或者几个大小相似的部分,我们建议使用条形图,但在这里显然不是这种情况。

策略:构建甜甜圈图

现在让我们通过在中间添加一个孔将这个饼图变成甜甜圈图。这个孔允许您传达额外的信息。在这种情况下,它允许您在单个图表中表示两个概念——受访者数量和性别分布:

  1. 创建一个虚拟测量 **[MIN(1)]**;这将用作双轴图表的多个测量值:

    //Dummy
    MIN(1)
    
  2. 将其拖动到行上两次,右键单击,创建双轴图表。您可以使用前一个策略的可视化作为起点。

  3. 将第一个度量的大小设置为推荐大小的正确刻度。

  4. 右键单击[# Respondents],将其更改为总体快速表格计算的百分比。然后通过右键单击该字段并选择格式化,将百分比格式化为不带小数位。

  5. 单击第二个度量并移除所有字段,除了[# Respondents],它应该在标签上。在该字段下添加文本**Respondents**,字体大小为 8 pt。

  6. 将第二个度量的大小设置为推荐大小的左刻度。

  7. 将标签对齐到中间并居中,并将标记颜色设置为白色。

  8. 隐藏坐标轴并从图表中删除所有线条。

    您可以在图 1-20 中看到结果。

一个带有受访者数量的甜甜圈图已添加到中心;片段代表调查受访者按性别分布

图 1-20. 一个带有受访者数量的甜甜圈图已添加到中心;片段代表调查受访者按性别分布

现在您有一个能够同时服务两个目的并且在生成深刻描述时非常出色的甜甜圈图。您可以说“24%的受访者是女性”,并立即了解调查的样本大小,这对于观众从结果中做出决策是必要的。

要完成甜甜圈图,您可以将其用作交互式过滤器;当用户点击一个片段时,Tableau 会在后续的可视化中进行筛选。它还可以用作颜色图例的用途——不仅仅是说明绿色代表男性。

策略:创建小多图

因为我们正在处理甜点图表,我们想介绍的最后一种可视化是小多图,即以较小格式重复出现的任何图表。对于饼图和甜甜圈图,小多图非常强大。您可以采用更多成员的维度,并使用它来创建重复的图表进行比较。

我们知道项目委员会希望看到不同职业中性别分布的变化。小多图可以帮助您快速分析答案。是的,您可以创建一个筛选器来选择角色,但当您创建能显示分布并在上下文中提供样本大小的小多图时,您可以一目了然地获得更多洞察。

从您刚刚创建的甜甜圈图开始,您只需要做一些微调:

  1. 从标签中删除“受访者”一词以节省空间。

  2. 将[Professional Role]拖放到列架上。

    您可以在图 1-21 中看到结果。

一个包括将受访者人数添加到中心的小多图甜甜圈图;片段代表调查受访者按性别分布

图 1-21. 小多图甜甜圈图,其中包括根据不同职业分开性别分布

现在您已经看过一些饼图的示例,希望您能意识到何时适合使用它们——更重要的是,使用它们可以增强您向观众呈现数据的效果。

结论

现在,您有机会看到不同的图表类型用于分类分析。您从基本的水平条形图开始,并迅速学会了如何创建 Top N 图表,以便为观众限制最相关的信息。

从那里开始,您探索了将小类别动态分组到“其他”柱中,并允许您的观众通过参数定义分析的范围,使他们能够定义一个类别必须具有的百分比贡献才能显示在图表中。

您还探索了在条形图中使用颜色编码来进一步突出分类分析,并学习了一些我们喜欢的格式化技巧,以使条形图更加生动。

接下来,我们进入了 Amplify Performance 的案例研究,并使用了矩形树图来确保将维度的所有成员(即使是非常小的成员!)都呈现在可视化中。您学会了如何通过允许深入分割数据来使此图表类型更加动态化。您还使用了颜色编码,并尝试了一些日期计算来向 AP 高管展示可能没有得到资金的区域(如果这很有趣,等到第四章吧)。

最后,我们通过探索甜点图表(首先是饼图,然后是甜甜圈图)来结束本章。您学会了何时有效使用饼图(不要太多切片),以及如何利用甜甜圈图内部的空洞同时显示两个信息。

借助所有这些新技术,我们确信您将能够创建灵活、引人入胜且有洞察力的可视化,让您的观众动态探索问题和分析。

在下一章中,我们将向您介绍定量分析——所有图表都专注于以不同方式绘制数值字段和使用统计数据。您将通过创建各种图表类型(再见,条形图)将学到的基础知识付诸实践。

第二章:定量分析

本章讨论的是制作展示分布、传播和许多细微差别的可视化图表。如果您曾经处理过数据,您就会知道,在清晰和易于理解的方式中传达详细复杂信息可能是一项挑战。我们将提供技术来帮助您克服这一挑战。

本章的可视化重点是度量和统计。使用数值字段,我们将向您展示不同的图表如何通过数据值的数值表示提供不同的洞见。度量是我们可以应用函数如SUM()的数值字段。统计当然是数学的一个分支;在 Tableau 中,我们使用它的概念在专门的函数中工作,处理平均数、中位数、均值、标准偏差(SD)等等。(如果你以前没有学过统计学也不用担心——我们会一步步引导你!)这些函数通常不会产生类似总销售额的总和值,而是描述数据点如何分布:它们的高点、低点、数据点集中的地方以及离群值的位置。

每个数据集都有独特的数据形状。一旦您探索它们,大多数都具有一些共同的特征。有些数据形状可能很难处理,因此我们还将探讨处理这些形状的技术。

在本章中,我们将探讨以下类型的可视化:

  • 直方图

  • 点图

  • 抖动图

  • 范围点图

  • 箱线图

  • 折线图

  • 帕累托图

因为我们知道您正在使用这些可视化工具来完成工作,我们将继续使用案例研究来帮助您了解这些图表类型在涉及真实人员(比如您的老板)的实际业务沟通中如何运作。通过我们对办公用品零售商、物流公司和大型银行的分析师的建议,我们将为您概述每种类型的一般情况,包括其外观、优缺点以及它最适合的信息类型。我们还将花时间学习一些统计学的核心概念,这些概念可以帮助您将数据见解提升到更高的水平。

直方图:办公必需品案例研究

我们的第一个案例研究涉及销售办公用品的大型零售连锁店。我们称之为办公必需品OE)。数据团队正准备向 OE 的高级管理层和董事会做一次重要的演示。董事会希望了解谁在下订单,多频繁,以及数量有多少。

团队成员应该从这些数据中挖掘出哪些指标?以及他们如何最好地展示他们所发现的内容,知道他们可能只有几秒钟来传达数据中最重要的见解?团队成员知道他们需要考虑的一件事是订单频率。OE 的客户下了多少订单?他们大多数是经常回购的顾客,还是只购买一次?

要回答这个问题,最好的图表是直方图。在我们深入制作之前,让我们先给您一些关于这种流行图表类型的背景知识。

一个直方图是一种专门用于可视化具有数值的数据点分布或散布的条形图。在这种情况下,OE 公司的销售如何在其客户中分布?您可能决定查看去年在 OE 公司的零售店中花费 100 到 200 美元的客户数量,或特定客户购买特定产品的次数。

与标准条形图不同,直方图的 y 轴(即垂直轴)具有数字值、范围或间隔(通常称为bin),表示为一个标题,其 x 轴(即水平轴)表示频率,如每年每位客户的订单数。直方图是一种在 x 轴上表示频率,在 y 轴上表示客户数的条形图。

策略:创建一个简单的购买行为直方图

对于这种类型的图表,我们将使用 LOD 表达式而不是 bin 来构建直方图。正如在第 1 章中提到的,Tableau 的 LOD 表达式允许您定义度量的聚合(如总和、平均值或中位数)。默认情况下,Tableau 基于视图或工作表中的详细信息或字段来聚合任何字段,但 LOD 允许您创建定制的聚合字段。让我们来试试:

  1. 创建一个名为**[# Orders per Customer]**的字段。这告诉 Tableau 按客户名称统计订单的不同数量:

    //Orders per Customer
    {FIXED [Customer Name]: COUNTD([Order ID])}
    
  2. 右键单击度量并选择创建 → Bins。将打开对话框。

  3. 在审查度量的各种值后,Tableau 将自动建议一个 bin 大小。您可以自由调整这些以满足您的需求。对于这个分析,客户订单数量不应该是小数,所以将 bin 大小改为 1。

  4. 创建 bin 后,它会显示为数据窗格中的离散维度。这是一个重要的观点,因为它将为您使用它在图表中时的行为提供洞察。

  5. 现在,将[Orders per Customer (bin)]拖放到列中。正如预期的那样,Tableau 创建了离散的标题。

  6. 现在,将[# of Customers],即 COUNTD([Customer Name])度量,拖放到行中:

    //# Customers
    COUNTD([Customer Name])
    

您应该得到类似于图 2-1 的结果。让我们停下来消化这个可视化效果。

客户数量的订单频率直方图

图 2-1. 客户数量的订单频率直方图

即使您没有上过统计课,您可能也熟悉统计学中最常见的视觉之一:正态分布,也广为人知为钟形曲线(图 2-2)。每当您查看直方图时,正态分布应该会出现在您的脑海中。

尽管你刚刚创建的直方图不是正态分布,但将其与正态分布进行比较将有助于解释数据形状。在正态分布中,数据被表示为曲线的顶部代表平均值或平均值。曲线是对称的:数据的一半位于平均值的左侧,另一半位于右侧。

当你处理数字时,标准偏差SD)指的是数据集中数字从“正常”或平均值分散出来的程度。在实践中,你的 SD 越大,数据点之间的变化就越大;相反,SD 越小,差异或数据分散就越小。在正态分布中,大多数数据在平均值的一个 SD 内;95% 的数据距平均值两个 SD。

一个正态分布,显示每个标准差的百分比

图 2-2. 一个正态分布,显示每个标准差的百分比

你可以从你制作的图表中看到(图 2-1),订单频率明显集中在四到八个订单的范围内,而一些顾客订单频率更高(我们称他们为异常值)。

我们可以通过将直方图切分为小多个并比较数据在诸如 [Segment] 这样的维度上的分布或扩展来创造更即时的价值,如 图 2-3 所示。我们将在 第三章 中更详细地讨论这种图表类型,但现在只需知道,小多个图表(也称为格栅图)实际上是一系列使用完全相同轴线的图表,通常以网格形式排列。

尝试将 [Segment] 拖动到行和颜色上。

按顾客分割的订单频率直方图,按部门分开

图 2-3. 按顾客分割的订单频率直方图,按部门分开

现在事情变得有趣了。之前,我们看到了顾客订单频率的总体分布,但现在我们已经按业务单位/部门将其分开了。尽管每个直方图的数据形状与原始数据类似,但我们肯定可以分辨出它们之间的一些差异:

  • 从整体上看,购买来自消费者部门的顾客数量占据了其他两个部门。

  • 这些异常客户仅存在于消费者部门。

  • 家庭办公室的订单频率看起来相对稳定,通常范围在 4 到 9 之间;与其他部门相比,这个段的数量更加接近。

为了更精确,尝试将 y 轴改为每行独立,如 图 2-4 所示。不过,当你做出这个改变时,请务必小心!应该非常清楚条形图长度代表什么,以及它们在每个部分中是唯一的。

独立 y 轴下的订单频率直方图

图 2-4. 独立 y 轴下的订单频率直方图

让我们看看您可以利用的其他几种技术,以制作更有效的直方图。

策略:创建一个具有连续区间的直方图

在数学和统计书籍中,直方图通常显示没有任何间隙的条形图,正如图 2-5 所示。要做到这一点,通过右键单击字段将您的箱从离散变成连续。

这些连续直方图的订单频率是按客户数量计算的,注意条形之间的空隙

图 2-5. 这些连续直方图的订单频率是按客户数量计算的,注意条形之间的空隙

回想一下,从第一章可以知道,连续字段将绘制坐标轴:这意味着,我们不再为每个订单区间设定标题,而是使用一个不间断的数轴。此外,柱的宽度将自动调整为区间的大小——在我们的情况下,是 1。

策略:在直方图中使用 LOD 表达式

我们可以做的最后一件事是将现有的箱子创建为任何数量或更多的箱子。为什么要做这些额外的努力?有两个原因。

首先,我们减少图表中的整体噪声。很可能,当您查看初始直方图时,您的视线被吸引到右侧。这甚至可能会妨碍您准确记住直方图的整体形状。

接下来,图表在演讲时变得更易读,这对您的演示非常有帮助。由于 11 到 17 组中成员如此之少,将它们分组在一起使我们可以为该组分配一个单一的数字。这些步骤的结果如图 2-6 所示:

  1. 创建与图 2-1 相同的直方图(显示按客户计算的订单频率)。

  2. 创建一个名为**[Orders per Customer Grouping]**的计算字段。此计算将把大于 11 的每个客户的订单组合成一个部分。这将消除空箱子并将所有内容分组到一个最终柱中:

    //Orders per Customer Grouping
    IF [Orders per Customer] <=10 THEN [Orders per Customer]
    ELSE 11
    END
    

    每个客户的订单分组

    图 2-6. 每个客户的订单分组
  3. 将您新计算的字段拖放到[每个客户的订单]列上。您应该右键单击并将其拖放到可视化效果中,以便快速将其作为维度而不是聚合度量项放置(见图 2-7)。

    拖放字段

    图 2-7. 拖放字段

    现在你的图表中所有大于 10 的数据都集中在一个柱状图中。将其视为我们解决方案的中间步骤。我们绝对不建议您与观众分享这个直方图:最终的柱状图可能会令人困惑,甚至有误导性。

  4. 相反,为了准确性的缘故,我们将进行最后一次更改。首先,通过右键单击列架上的字段将其更改为离散。接下来,我们将对值 11 进行别名(即为其指定别名)。您可以通过右键单击 11 并选择编辑别名来为此值指定别名。图 2-8 显示了结果。

完成的直方图

图 2-8. 完成的直方图

现在我们已经清楚地处理了数据的右“尾部”,而 11+清楚地向观众传达了最终柱形条代表的大于或等于 11 的一切。祝你的演示好运!

点图和抖动图:Office Essentials 案例研究

Office Essentials 的高级管理团队现在想要知道,客户每个订单平均花费多少。数据团队应该使用哪种类型的图表?

单独的直方图将无法传达所有见解。您需要一个整合其他图表类型的策略。本节介绍了两种可用于显示定量信息的图表类型:点图和抖动图。

如果有人要求你提供某个度量的平均值,请谨慎行事。平均值 是一个非常汇总的数值;当你只呈现这个信息级别时,你可能会过度简化底层数据集。更重要的是,你的听众可能会合理地问道:“但如果有离群值导致平均值偏斜怎么办?”

如果只有聚合数据,回应可能会很困难。为了避免这种情况,我们建议从详细数据开始,然后再呈现汇总的平均值。包含这些额外细节立即为您提供了一个回应,并允许听众在思考过程中更具分析性。

策略:创建基本点图

点图 是一种将数据表示为圆圈(点)的一维图表。每个点代表一个单独的数据点。当你有大量数据点或者维度内有许多成员时,或者这些数据点的分布是重要见解时,这种图表非常有效。我们喜欢使用点图,因为它们在视觉屏幕上占用很少的空间。让我们继续构建一个(图 2-9)并仔细观察一下:

  1. 将[订单 ID]拖放到标记卡片的详细信息上。这将定义您将显示数据的级别。

  2. SUM([销售额])拖放到列上。

  3. 将标记类型更改为圆圈。

  4. 由于我们的数据朝向较小的数值密集,通过将颜色的不透明度改为 60%,添加透明度。

  5. 为了确保回答原始问题,从分析窗格中拖放平均线跨整个表格。

显示每个订单销售金额的点图,包含平均值

图 2-9. 显示每个订单销售金额的点图,包含平均值

现在您已经有了潜在的图片,您能得出什么结论?我们会得出这样的结论,很多数据密度确实存在于较小的值周围,很可能在平均值周围,但我们不能忽视明显的异常值。

问题是,现在我们有很多重叠的数据点,在共享的数值上聚集在一起,这使得很难看到单个数据点。为了清理这个视图,您需要一种方法来扩展所有那些在一起收集的数据点。这个技术术语称为抖动数据——即将点图转换为抖动图。

策略:创建抖动图

创建抖动图时,您将获得点图的优势,但成员在 y 轴上随机分布。数据点不再重叠那么多。抖动图几乎与点图相同,但包括 y 轴上的数值。该值没有分析价值,不应显示;它的唯一目的是展开数据并使其更少密集,以便更容易阅读。

如果您正在使用 Tableau 抽取或已发布的数据源,则可以访问名为RANDOM()的内置函数,该函数返回 0 到 1 之间的随机小数。如果可以的话,我们强烈建议您利用这个函数:它将确保您的抖动是自然的,不受任何其他指标的影响。(其他方法涉及对数据进行索引,要求您对数据施加某种排序。)

按照以下步骤创建您的抖动图:

  1. 双击进入行并输入**RANDOM()**,然后按 Enter 键。您会注意到聚合将是SUM(RANDOM())。更改此项,以免过度聚合并返回大于 1 的值。

  2. 通过右键单击SUM(RANDOM())并将度量更改为最小值来更改聚合(参见图 2-10)。

  3. 右键单击 y 轴(行)并取消选中“显示标题”。

将测量值更改为最小值

图 2-10. 将测量值更改为最小值

让我们看看在图 2-11 中得到的结果图表。

完成的抖动图

图 2-11. 完成的抖动图

现在我们对数据有了更清晰的认识。当我们查看以前的图表时,它是一维的,所以我们真的不知道左侧有多少密度。这应该给管理层提供所需的洞察力。

范围点图:Office Essentials 案例研究

我们为 OE 创建的抖动图细节太多了,让人感到不知所措。团队的可视化将在演示中作为幻灯片展示,因此需要快速传达重点。高级经理们想要简短精炼的信息——他们可以轻松记住并告诉他人。

所以,您无法说服您的高管接受抖动图,因为这对他们来说是太多的数据。我们曾经有过同样的困扰!我们如何在不丢失重要信息的情况下简化这个图表?当我们遇到这种情况时,我们的第一个反应是建议一个折中的方案:只显示聚合数据,但在类似提示工具的次要位置包含详细信息。

不过,如果这仍然对您来说是太多的数据,我们有另一个解决方案:范围点图。它是点图的一种简化版本,仍然展示了数据形状的一些关键特征。范围点图表示聚合值,如平均值、最小值、最大值或中位数,而不是所有单个数据点。它们可以是数据集整体范围的良好视觉表示。

由于您的数据是关于客户平均花费的数据,您需要关注的关键特征包括平均值(当然),最小值,最大值以及最小值和最大值之间的范围。

策略:创建一个范围点图

使用以下步骤创建您的范围点图:

  1. 确保有一个表示每个订单 ID 的总销售额的度量。在这个数据集中,这意味着您将创建一个 LOD 表达式。这个计算告诉 Tableau 找到每个订单 ID 的SUM()销售额,因为您的最终可视化效果将不包含订单 ID 的详细信息:

    //Sales by Order ID
    {FIXED [Order ID]: SUM([Sales])}
    
  2. 右键单击并拖动[按订单 ID 销售]到列架上选择聚合方式,并选择AVG()。将标记类型设置为圆圈,并选择您喜欢的颜色。

  3. 制作一个名为**[订单销售范围]**的计算字段,以找到最大值和最小值之间的差异。

    //Range of Order Sales
    MAX([Sales by Order ID])-MIN([Sales by Order ID])
    
  4. 再次右键单击并拖动[按订单 ID 销售]到列架上,但这次选择最小值。(您需要一个范围的起点,没有比最小值更好的选择。)将其设置为双轴并同步轴线。还要确保这个新轴的标记位于后面,右键单击并选择“将标记移至后面”。

  5. 将标记类型更改为甘特条形图。这将允许您将度量值——即我们的[订单销售范围]——放到大小上。

  6. 将[订单销售范围]拖放到大小。

  7. 将[子类别]拖放到行上,以便您可以比较产品类别之间的范围和平均值。

  8. 调整格式和大小,直到您喜欢最终的视觉效果(我们在图 2-12 中展示)。

范围点图

图 2-12. 范围点图

这种可视化效果讲述了一个更具吸引力的故事。一眼就能看到许多元素,如每个子类别的平均值和范围,并进行一些自然的视觉比较。例如,可以看到信封订单平均为$550,并且与类似子类别相比,范围并不是太极端。

如果您喜欢这种可视化效果,可以进一步操作如下:

  • 如果发现您的数据存在严重偏斜或异常值——正如您的数据一样——尝试将平均值更改为中位数。

  • 如果您的受众无法决定他们想要看到中位数还是平均数,请建立一个允许他们在两者之间切换的参数。

  • 您还可以利用百分位数而不是最小值和最大值范围。

如果你看到一个或两个极端值显著地拉动数据形状,你的策略应该是让这一点知道,但提供一个解决方案。让我们试试百分位数,看看我们能得出什么结论。

策略:使用中位数和杠杆百分位数

如果你想象你的数据散开,百分位数允许你把数据点分成从 0%到 100%的几个部分。最常见的百分位数是分位数和分位数。 分位数 将数据分成四分之一:四个相等的部分,每个部分占数据集的 25%。 分位数 将数据分成 10 个相等的部分,每个部分占 10%。

百分位数还用于与正态分布相关的统计场景中。请记住,在正态分布中,数据的 95%位于平均值的两个标准偏差之内——因此,限制范围在 2.5%和 97.5%之间可能是合适的,或者说“95%的数据”位于特定范围内。

从先前策略的图表开始,按照以下步骤创建一个范围:

  1. 首先通过右键单击将平均值的聚合从先前的策略更改为中位数。现在你可以进行百分位数计算:

    //2.5% of Data
    PERCENTILE([Sales by Order ID],.025)
    
  2. 你可以重复这个计算到 97.5%或 0.975。然后,你可以创建一个新的范围,几乎与我们的原始范围相同。继续以完全相同的方式完成图表:

    //97.5% of Data
    PERCENTILE([Sales by Order ID],.975)
    
    //Percentile Range
    [97.5% of Data]-[2.5% of Data]
    
  3. 用[2.5%的数据]替换第二轴的 MIN([订单 ID 销售额]),并用[百分位范围]替换[订单销售范围]。图 2-13 显示了更新后的视图。

带有杠杆百分位数的分段点图

图 2-13. 带有杠杆百分位数的分段点图

那么是什么让这个视图特别?当然,我们缩小了范围,但我们也减少了视图中的噪音量。

每次你制作一个图表时,问问自己:你希望观众带走什么见解?哪些见解与他们的需求相关?

如果 OE 高管需要平均或中位订单价值以及一个简短的说法,这个范围点图将满足这一需求。现在他们有一个简单的方法来传达关于每个段的信息,比如这样:“除了一些离群值,我们大部分复印机订单的平均价格约为$1,500。”

箱形图:Spear-Tukey 运输案例研究

我们的下一个案例研究发生在 Spear-Tukey Shipping (STS),一家运输和物流公司。¹ STS 在全球范围内运输产品,需要严格的截止期限,因此流程必须精确。如果出现问题,公司需要知道。

当客户使用 STS 发货时,他们必须选择一种运输方式。有四种方法。它们都不同,并且每一种都有自己的交货期限。交货必须在指定的天数内完成。

最近,STS 听到了关于延迟交货的投诉,但高管们不确定问题有多严重(甚至是否真的是问题)。数据团队已经收集了数据并正在进行分析。团队计划向 CEO 呈现结果,CEO 想知道公司每种方法符合要求的截止日期的频率。

表 2-1 列出了 STS 的方法和截止日期。

表 2-1. 运输方法和截止日期

方法 交货天数
当天空运 1
紧急空运 2
紧急陆运 3
陆运 5

在我们深入讨论之前,让我们先考虑预期。在 OE 案例研究中,我们没有预期的答案;也许我们有一些制度上或直觉上的猜测,但我们使用可视化工具来寻找答案。然而,在这里,我们有一个应该受到控制的过程;目标是找到那些设计不合理的例子。我们也有大量每种方法的数据,因此需要想办法在一个图表中将所有信息可视化,而不会变得过于复杂和令人困惑。

对于任何高度受控的过程,我们发现最好依靠统计数据来传达性能。对于这个用例,我们将几个概念结合到一个可视化中,即箱线图(图 2-14)。箱线图比我们到目前为止展示的其他图表稍微复杂一些,所以让我们看看它们是如何构建的。

箱线图的构造

图 2-14. 箱线图的构造

箱线图包括以下元素:

中位数

中位数,或者数据的中点,被表示为盒子内的一条线。

四分位数

Q1 和 Q3 是四分位数;在 Tableau 中,你也会看到它们被标记为中间值。Q1 位于数据的 25%,而 Q3 位于 75%处。

内四分位距(IQR)

Q1 和 Q3 之间的范围。

触须

这些是从盒子伸出的水平线。它们可以通过两种方式构建:

  • 最小触须可以延伸到 Q1 减去 1.5 倍的 IQR。最大触须可以延伸到 Q3 加上 1.5 倍的 IQR。

  • 或者,触须可以延伸到数据集的最小值和最大值。

离群值

任何超出触须范围的数据点,显示为点。

策略:创建基本的箱线图

现在你对我们正在构建的东西有了一个感觉,请跟随我们一起尝试:

  1. 创建**[Days to Delivery]**字段。你将构建这个计算字段来计算发货日期和交货日期之间的天数:

    //Days to Delivery
    [Delivery Date]-[Ship Date]
    
  2. 将[Days to Delivery]字段拖动到行架上。请注意,当您拖动该字段时,Tableau 将使用一种度量来聚合数据。我们不想查看聚合数据,因此我们可以通过以下两种方式之一来解除数据的聚合:

    • 选择分析 → 取消勾选聚合测量。

    • 将[清单 ID]拖放到详细信息中。这是数据集中的最低详细级别,并将构建等于行级值的聚合。

  3. 包括运输方式。还将[运输方式]拖放到列中。

  4. 将标记类型更改为圆圈,并将不透明度降至 60%。请注意,您再次得到了与点图非常相似的东西,如图 2-15 所示。

    每个点表示交货所需的天数

    图 2-15. 每个点表示交货所需的天数。
  5. 要将其转换为箱线图,请转到分析面板并将箱线图拖放到工作表上。当您将其拖放到单元格上时,Tableau 现在在您的数据上绘制了一个箱线图。

当您悬停在箱线图上时,摘要工具提示将显示中位数、四分位数和盒须的值(参见图 2-16)。

完成的箱线图

图 2-16. 完成的箱线图

此时,您可能想知道如何解释这个箱线图——以及如何向 CEO 解释。首先,缩小数据范围。让我们放大同日空运方法的数据(参见图 2-17)并首先尝试解释该部分。

解释箱线图

图 2-17. 解释箱线图

我们可以看到第三行,同日空运交货的中位时间为 1.08 天。您可以表达为“我们的同日空运交货中有 50%在 1.08 天内到达。”观察箱限(IQR),您可以补充说“25%的交货在不到一天(0.69 天)内到达,75%在不到 2 天(1.725 天)内到达。”

看起来最大值为 3.05 天。这意味着我们可以自信地说,STS 的同日空运交货 100%在三天内到达——对于应该是同日的东西来说,这并不理想!

在 Tableau 中,我们可以通过右键单击编辑进一步自定义此可视化。这里有很多信息。我们可以减少屏幕上的标记总数,仅留下箱线图和任何异常值。

正如我们所提到的,我们可以通过两种方式扩展盒须。在右键单击以编辑时,您将看到两种选项。单击复选框以隐藏箱线图内部的标记。您可以在图 2-18 中看到最终版本。

定制的箱线图

图 2-18. 定制的箱线图

如果这个箱线图适合您的受众,太棒了!但这里涉及很多内容,有时箱线图可能会让观众感到不安。知道这一点,通常我们会将箱线图与更少让人不安的图表(如直方图)配对,以帮助传达内容并确保每个人都理解主要信息。

策略:结合箱线图和直方图

要创建此图表,我们将从您刚刚构建的箱线图开始。这次,不是解聚您的测量值,而是需要对它们进行聚合。如果您将[清单 ID]添加到详细信息中,您就可以开始了!

  1. 修改箱线图,使触须从最小到最大范围。

  2. 现在你有了这个视图,可以引入其他需要聚合的度量作为双轴。创建一个名为**[Days to Delivery by Manifest ID]**的特定 LOD 计算字段:

    //Days to Delivery by Manifest ID
    {FIXED [Manifest ID]: AVG([Days to Delivery])}
    
  3. 创建分箱,使用与本章开头构建直方图时相同的方法。将分箱设置为每 0.5 天一个。在数据窗格中右键单击字段并转换为连续型。

  4. 点击顶部工具栏旁边的交换行和列图标(排序图标旁边),切换行和列的布局。

  5. 将新的分箱计算[Days to Delivery by Manifest ID (bin)]拖动到列中,位于 AVG([Days to Delivery])的右侧。

  6. 在此可视化的标记卡上,将标记类型更改为柱形图。从详细信息中移除[Manifest ID]。

  7. 创建一个名为**[# Shipments]**的计算字段,并将其拖动到行中:

    // # Shipments
    COUNTD([Manifest ID])
    
  8. 右键单击[Days to Delivery by Manifest ID (bin)],选择双轴;右键单击新创建的双轴并同步轴线。

  9. 在所有标记卡上,从颜色中移除[Measure Names],右键单击以隐藏顶部的额外轴线。

    图 2-19 展示了我们的结果——更易于阅读,不是吗?解释数据也更容易。

完成的箱线图和直方图合并

图 2-19. 完成的箱线图和直方图合并

现在 STS CEO 可以看到箱线图的构建与基础数据的关系。高管们可以看到每个柱形的频率并理解数据在箱线图形式下的呈现方式。他们还可以同时看到数据的频率和密度。

线图:办公室必备案例研究

现在让我们回到 OE,在那里数据团队现在需要展示公司过去几年的整体销售数据,按月份细分,使用数据的样本。这个想法是,良好的视图可以帮助预测未来几个月的销售,并识别趋势,特别是如果公司需要快速采取行动的情况。按月份显示销售情况很容易,但如何表明什么是正常的,什么是不正常的?

多年来我们学到的一件事是,每当有人问及趋势时,他们的脑海中就会形成一幅折线图的心理图像。与条形图一样,折线图是数据可视化中常用的工具。它们将指标随时间显示出来。在这里,我们不会深入讨论如何处理时间(我们将把它保存到第四章),但我们确实想介绍一些可以使用统计值和派生度量来制作具有真正影响力的折线图的方法。听起来 OE 的领导层有兴趣变得更加数据驱动,这些技术将有所帮助。

策略:构建一条线图

让我们从基本的折线图开始,显示 OE 的按月销售额(图 2-20)。要构建此图,右键单击并拖动[订单日期]到列中,选择底部的月份。将SUM([销售])拖动到行中。

按月销售的折线图

图 2-20. 按月销售的折线图

这提供了一些直观的见解。我们可以看出数据中存在季节性:每年的 9 月、11 月和 12 月发生了峰值。总体上看,销售额似乎随时间而增加。

但我们可以通过包含统计量来讲述更复杂的故事。我们将从内置且易于在 Tableau 中使用的工具开始。在第一章中,我们探索了为平均值添加参考线;这一次,让我们更进一步,添加参考分布:图表上一组指示范围的带子,使观众可以看到线条落在该范围内的情况。

策略:将参考分布添加到折线图中

记住,我们警告过您,平均值(以及其他聚合值)并不总是足够传达足够的信息?通过显示您所提供的平均值的确切程度,这是减轻这种情况的一个很好的方式。

我们将在这里包含的参考分布显示置信区间的范围。置信区间是从随机样本计算的一系列值,这些值很可能包含所选择的测量的真实值。它是您的数据的两个项目的函数:样本大小(或数据点数)和整体置信水平。随着样本大小的增加,置信区间可能会变窄,因为观察次数增加了。置信水平具有相反的效果:您对数据越有信心(例如,如果您需要对数据的信心为 99%,而不是 95%),带子越宽。

要添加置信区间,请按照以下步骤操作:

  1. 从分析面板中,将一个平均线拖放到视图上,然后将其放置在表上。

  2. 焦点放在中间部分,除了线条,还添加一个置信区间,并指定置信水平。在此过程中,将标签选项更改为数值,而不是计算。

    现在图表(图 2-21)显示了平均每月销售额,并且用灰色带表示置信区间。

带置信区间的平均月销售折线图

图 2-21. 带置信区间的平均月销售折线图

为什么要向图表添加这种类型的上下文?对于这个演示文稿,这是为了为依赖我们提供的平均值的 OE 高管和董事会增加细节。现在,由于那个灰色带子,他们可以轻松地看到哪些月份的销售额低于或高于平均水平——这正是他们寻找的信息类型。

虽然我们刚刚创建的图表显示基于提供的样本数据的计算平均值为$47,858,但平均值两侧存在约$7,000 的误差范围,用来展示平均值可能是什么。误差范围是一种表示我们可以在 95%的置信水平下陈述如果我们有所有的月销售额数值,那么平均值将在$40,542 和$55,174 之间。

策略:在线图中添加标准差

你也可以在 Tableau 中使用分布带和参考线来表示百分位数或标准差。接下来我们将添加标准差:

  1. 右键点击平均线,然后点击“编辑”。

  2. 再次更改为仅线条。

  3. 要创建另一条参考线,右键点击坐标轴,然后选择分布。

  4. 将计算值更改为标准差,保持因子为-1 和 1。同样,选择样本选项,因为我们没有所有数据,只有一个子集。

  5. 将标签选项更改为数值,然后点击“确定”(见图 2-22)。

在线图中添加标准差

图 2-22. 在线图中添加标准差

那么从这个生成的图表我们能得出什么结论呢?首先,与平均值相比,存在很大的差距。对于任何给定的月份,销售额可能会与平均值相差高达$25,000。这几乎是计算的每月平均值的一半,情况不太乐观。

OE 高管应该从中得到什么启示呢?他们需要意识到每月销售数据存在大量的变异。在这个时候,也许还不适合使用这些数据来预测未来的数值。

我们的观众也想知道什么是正常的,什么是不正常的。什么时候他们应该担心?

我们将尝试另一种处理标准差的方法,但不是将它们显示为参考分布,而是将它们用作一种警示策略。这是一种客观的方法来审查数据集并查看哪里真正存在有意义的统计变异(在统计学中,当报告的数值距平均值超出一定数量的标准差时,通常会说某事处于“失控”状态)。

策略:使用参考分布作为警示策略

我们的下一个图表将展示每月销售额和平均线,就像以前一样。不过这次,我们将在超过平均值 1 个标准差的月份添加红色圆点:

  1. 创建一个名为**[SD Alert Dot]**的新计算字段。此计算将比较月销售额与视图平均值加 1 个标准差的数额,以及减去 1 个标准差的数额。如果条件成立,它将返回销售额。然后我们将该销售额转换成一个点。

     //SD Alert Dot
    IF SUM([Sales])>=(WINDOW_AVG(SUM([Sales]))+WINDOW_STDEV(SUM([Sales])))
    OR
    SUM([Sales])<=(WINDOW_AVG(SUM([Sales]))-WINDOW_STDEV(SUM([Sales])))
    
    THEN SUM([Sales])
    ELSE NULL
    END
    
  2. 当你阅读这个计算字段时,看起来好像有很多内容,但让我们简化各个组成部分:

    • SUM([Sales])只是销售金额,会按月绘制,因为这是您视图的详细级别。

    • WINDOW_AVG(SUM([Sales]))与平均参考线完全相同:它是视图中所有数据点(在“窗口”中)的平均值。

    • WINDOW_STDEV(SUM([Sales]))与平均值的概念相同,但这次是标准差。

    其余的条件是确定销售价值是否在这些点之上或之下。如果是,则返回销售额;否则,可以将其置空。

  3. 将[SD Alert Dot]字段拖动到您的行架上。

  4. 右键单击并使其成为双轴,然后同步您的轴。

  5. 将您的第二轴的标记类型更改为圆圈。确保您的第一个标记仍然是一条线。

  6. 适当地着色测量,并右键单击右下角的空指示器以隐藏它。

  7. 您还可以通过单击可视化的顶部或底部标准差处来拖动参考分布。

    图 2-23 显示了生成的折线图。

折线图,红色标记的月份在平均值的±1 个标准差内

图 2-23. 折线图,红色标记的月份在平均值的±1 个标准差内。

那么这张图与前一个带参考线带的例子有什么区别?两者都显示趋势指标和标准差,但关键区别在于观众如何感知它们。使用参考线带,团队将向高管展示标准差的分布,但警报点则邀请他们采取行动。

这就是以图表形式展示信息与真正数据驱动的区别。一个强大的数据驱动组织定义了具有度量标准的警报或阈值,以便其领导知道何时采取行动。

我们的下一个案例研究将看看另一种将统计输出转化为维度的方法。

基于统计的计算维度:Banco de Tableau 案例研究

我们下一个研究案例位于 Banco de Tableau(BoT),这是一个大型(虚构的)金融机构,您在第一章中已经见过。该银行正在寻找利用其商户类别数据更好地了解其客户的新方法。数据包含许多类别,BoT 数据团队需要一种方法来根据它们的总消费进行分组和评分。

来自第一章的 Top N 条形图很棒,但现在团队需要一种更全面的方式来传达结果。它应包括数据集中的每一个类别,而不仅仅是前 10 个。团队成员希望将最低消费者与最高消费者进行比较,并进行更深入的洞察。

部署统计学是深化数据可视化的一个好方法。我们将在这里尝试两种方法。第一种是根据视图中的数据为数据点分配一个摘要统计值。第二种是使用帕累托图(请稍候详细了解)。

策略:为数据点分配摘要统计值

下面是为数据点分配摘要统计值的步骤:

  1. 从一个新的水平条形图开始,该图显示了每个[商户类别]的总交易金额。将条形图按降序排序。

  2. 创建一个名为**[Merchant Category Level]**的计算字段,可以将商户类别分为三个群体:一个为前 10%,一个为后 10%,还有一个包含其余数据的群体。将计算字段拖动到颜色上。记住,在这里,window_percentile将是基于我们视图中的数据的相应百分位数:

    //Merchant Category Level
    IF SUM([Transaction Amount])
      <=WINDOW_PERCENTILE(SUM([Transaction Amount]),.1)
    THEN 'Bottom 10%'
    ELSEIF SUM([Transaction Amount])
      >=WINDOW_PERCENTILE(SUM([Transaction Amount]),.9)
    THEN 'Top 10%'
    ELSE 'Middle'
    END
    

    这个计算实际上只评估了一件重要的事情:交易金额是否高于或低于特定百分位数。

  3. 将计算字段添加为视图的标题。这将允许您创建新的聚合,如各个群体的平均值。您可能需要手动重新排序标题。

有几个理由需要分配一个摘要统计值。现在,通过数学分析,我们已经平均分离出了我们的商户类别。这样做也使我们能够对这些新的分类进行汇总讨论。如果我们想要获得更加深刻的见解,我们可以添加一个仅针对某个百分位数内商户的参考线。

例如,在我们的图表(图 2-24)中,我们可以看到在前 10%的商户类别中,平均支出为 1,010 万美元。与底部 10%的商户类别相比,其平均支出仅为 175 万美元。

为数据点分配摘要统计值

图 2-24。为数据点分配摘要统计值

使用统计数据创建各种分组还使图表变得动态,可以实现我们的银行家们期望的深度分析。如果我们在筛选数据时改变分析范围,后续的可视化也将更新。我们可以筛选数据以查看在特定时间段内完成的交易,甚至是在特定地区完成的交易,可视化效果也会相应变化。

到目前为止,我们已经讨论了如何展示分类数据及其分布,但我们还没有深入探讨。现在让我们来做这件事。

帕累托图:Amplify Performance(AP)案例研究

我们再次分析 Amplify Performance 的数据。这一次,高管们希望更好地理解资助金额的分布情况。他们已经看过第一章的树状图,并知道一些项目类别似乎占据了大部分资金,但他们希望能够向更广泛的观众传达这一点。我们可以建立什么样的可视化来满足这一要求?

策略:使用帕累托图显示分类数据

你听说过80/20 法则吗?通常称为帕累托原则,它表明一个度量或结果的 80%与数据的 20%有关。

为了更直观地看到这一可视化效果,我们可以构建一个帕累托图:这是一个双轴图表,它以初始排序的条形图为基础,并添加一条线表示总体的累计百分比。总体的累计百分比展示了 80/20 法则。更具体地说,这张图表旨在展示与分类数据相关的数值分布。

注意

帕累托原理认为,80%的后果来自于 20%的原因。我们通过将这一原理应用于数据可视化,称 80%的指标可以追溯到数据的 20%。这一原理由质量管理先驱约瑟夫·M·朱兰开发,并以维尔弗雷多·帕累托(1848–1923),一位意大利经济学家命名,他著名地证明了意大利 80%的土地归属于仅占人口 20%的人。

当你需要帮助观众关注重要内容并轻松传达分布情况时,帕累托图就非常有用了。我们将首先为 AP 构建一个基本的垂直条形图(如果你不记得如何做,请回顾第一章)。然后我们将把它转化为帕累托图。

你是否会发现,20%的项目类别占据了 80%的拨款金额?以下是步骤:

  1. 拖动[项目类别]到列上。

  2. 将[拨款金额]拖动到行上。

  3. 使用工具栏按[拨款金额]降序对项目类别进行排序,如图 2-25 所示。

    在垂直条形图中排序项目类别

    图 2-25. 在垂直条形图中排序项目类别
  4. 按住 Ctrl 键并将SUM([Grant Amount])作为副本拖到您的行架上。

  5. 再次右键点击新的度量值并创建快速表格计算;使用累计总数。

  6. 再次右键点击表格计算并编辑它。这次点击“添加次要计算”,选择“总体百分比”。这将把累计总数呈现为百分比形式(见图 2-26)。

    帕累托图的表格计算

    图 2-26. 帕累托图的表格计算
  7. 将第二个指标的标记类型更改为线条。然后右键单击它以使其成为双轴图表,并为线图表打开标签(见图 2-27)。

    双轴帕累托图

    图 2-27. 双轴帕累托图
  8. 通过编辑轴标签来清理视图。安喜欢将次要轴标记为**[累计 %]**

  9. 您还可以添加参数或常数参考线以准确定位数据的 80%位置。现在让我们来看看最终的产品(见图 2-28)。

完成的帕累托图

图 2-28. 完成的帕累托图

AP 的资金是否遵循 80/20 法则?的确:从图表中可以看出,55 个总类别中的 9 个项目类别占据了 81%的资金。换句话说,16%的项目类别占用了 81%的资金。这意味着 AP 的支出实际上比帕累托分布稍微更集中!我们确信,看到资金分布方式会让执行团队深思。

结论

在本章中,您已经看到了在现实世界中处理数值数据的几种方法。我们探讨了使用直方图、点图和抖动图查看数据分布的方式,前者使您的受众能够看到总结数据,后者使他们能够看到构成整体图像的个体数据点。

您还学习了如何使用应用统计概念创建显示重要摘要统计信息的箱线图(中位数和四分位距是您的朋友),并学会了如何通过包含直方图来说服您的受众接受此图表。

您还看到了如何将内置的统计计算(如标准差)轻松添加到折线图中,以帮助表达数据中的微妙差异。此外,您还探讨了使用统计阈值帮助使您的组织数据驱动,使您的受众能够快速看到“失控”的数据点,并在决策中提供指导。

在最后两节中,您探讨了即使对于分类数据,也可以计算新的统计维度来描述您的数据(并测试至关重要的 80/20 法则)的方式。

有了这些知识,您将准备好继续学习下一章关于比较的内容,我们将向您展示如何比较分类数据(维度)和新的图表类型中的度量。

¹ 这不是它的真实名称。相反,我们使用了 Mary Eleanor Spear 创造的范围条和 John Tukey 开发的箱线图和须状图的名称。当我们回答完您的问题时,您将明白为什么我们选择了他们。

第三章:进行比较

比较是数据可视化的核心。我们的观众经常专注于比较两个或更多的值。作为从业者,我们的工作是简化每组值的比较。

比较中有些比较容易。如果你在比较一个单一值的两个组,你的比较就很直接:使用柱状图。大多数情况下,你应该只使用柱状图,因为柱状图是最多才能且最常见的用于比较的图表类型。

但是每个柱状图都有一个挑战:它是一个柱状图!你的观众已经看过这种图表类型数百、数千甚至数百万次。在本章中,我们将为您提供一些替代方案,如克利夫兰点图和棒棒糖图,以及各种格式化柱状图的方法。

在创建这些替代图表时,请认真考虑您是为了观众的需求还是为了自己而寻找柱状图。如果是为了你自己,就保持为柱状图。如果是为了你的观众,那么很好——使用替代方案。

并非所有的比较都像柱状图那么直接。有时您正在比较一个维度的成员及其内部不同时间点。其他时候,您正在比较多个成员与多个维度。有时您担心实际度量,有时是值的排名。有时您有兴趣比较值,而不是其他成员,而是整体组。

在本章中,我们将提供其他比较方法,包括柱状图上的柱状图,显示两个时间段之间排名变化的图表,颠簸图,哑铃图,栅格和平行坐标。

柱状图及其替代方案:增强性能案例研究

正如我们已经讨论过的那样,数据可视化从业者制作了大量的柱状图——这是理所当然的。正如您在第一章中所学到的,柱状图比较一个或多个组在单一度量上的两个或更多的组。柱状图易于使用,因为您只需比较一个柱的长度或高度与另一个即可。一眼就能看出差异的大小。

一个在表演艺术领域的非营利组织,AP 正试图更好地了解其赠款计划。其高管们想知道平均赠款金额与赠款类型的比较情况。他们已经向资助者展示了同样的图表四年了,现在正在寻找不同的方式来增强数据的视觉冲击力!他们如何能够增加这些数据的视觉冲击?

在授予数据中,您将使用名为[Program]的组来比较数据,并创建名为[Avg Grant Amount]的度量。您将使用此组和此度量进行五个示例。

策略:与基本柱状图进行比较

首先,让我们从基本的柱状图开始:

  1. 连接到非营利授予数据集。

  2. 创建一个名为**[Avg Grant Amount]**的计算字段。

  3. 使用现有字段并编写以下公式:

    // Avg Grant Amount
    SUM([Grant Amount])/COUNT([Record ID])
    
  4. 将[程序]添加到列中,将[平均拨款金额]添加到行中。

  5. 将标记类型更改为条形。

  6. 在列架上旋转标签,使文本垂直显示。

我们首先创建了这个垂直条形图,因为几乎每个人在学习如何制作条形图时都是垂直绘制的。当你使用文档编辑器或电子表格工具时,这种方式经常被强化。大多数人无法避免默认设置是垂直条形图。另一种选择是水平条形图,接下来你将学习如何制作。

但首先,让我们来解剖这个垂直条形图。在这里,[程序]在列上,[平均拨款金额]在行上,正如你在图 3-1 中所见。

图 3-1:显示类别平均拨款金额的垂直条形图

图 3-1:显示类别平均拨款金额的垂直条形图

让我们像您的观众一样查看这个图表。乍一看,它看起来很不错。例如,您可以轻松识别出去中心化和地区经济发展基金作为平均拨款金额最大的两个类别。

然而,当你开始比较时,确定组的顺序更加困难。虽然按字母顺序排序很好,但并不是那么有意义。另外,要读标签,您需要稍微弯曲脖子。如果有更好的方式就好了。

我们几乎总是建议使用水平条形图而不是垂直条形图。如果在阅读本文之前制作了许多垂直条形图,那完全没问题。这并不是你的错,是你的小学老师让你为所有数学和科学项目制作垂直条形图。我们中的许多人习惯从左到右阅读,特别是说母语为从左到右语言的人,所以我们处理文本和信息的方式也很容易。这意味着选择垂直条形图而不是水平条形图。(记住,并不意味着你必须放弃水平条形图。)

策略:将垂直条形图转换为水平条形图

在下一个示例中,您将制作一个水平条形图:

  1. 复制蓝图 3-1 中的工作表。

  2. 将工作表设置为填充整个视图。

  3. 单击“交换轴”按钮以交换行和列。

  4. 如有必要,在行上旋转标签。

  5. 将[程序]组按[平均拨款金额]降序排列。

  6. 右键单击可视化并选择“格式”。使用 Tableau 颜色调色板中第二轻灰色选项添加行分隔线,以匹配图 3-2。

  7. 在格式面板中,单击线按钮(五个选项中的第五个),然后通过将这些值设置为无来删除所有网格线、零线和坐标轴标尺。

  8. 将条的大小调整为最大值的约 50%。

  9. 单击“标签”在“标记”卡上,并选择“显示标签”。

  10. 右键单击[平均拨款金额]轴,并取消选择“显示标题”以隐藏标题。

水平条形图对您的受众来说更容易解释,因为文本可以从左到右阅读

图 3-2。水平条形图对您的受众来说更容易解释,因为文本可以从左到右阅读

水平条形图为您的柱形图的标签打开了机会。您可以包含标签以向柱形图添加更多上下文,指示与以往期间的变化,总数的百分比,或与其他成员的排名相比。

如果您选择添加标签,可以隐藏轴。轴和标签达到相同的目标:它们为柱状大小提供比例。包括两者意味着包含冗余信息,作为从业者,您希望最小化冗余。(但是,如果您发现您的受众经常误解信息,您可能需要包含冗余信息,在文本形式中提供额外的背景信息,或选择不同的可视化方式进行沟通。)

对于这个水平条形图示例,我们选择添加了标签,所以我们让您隐藏了轴并移除了 Tableau 格式面板中包含的网格线,网格标尺和所有其他线型。我们还建议您按指标对值进行排序。Luke 个人喜好也是增加每个柱之间的空白(通过减少柱宽)并在格式选项中包含行分隔符,如图 3-2 所示。

现在再假设您是我们预期受众中的一个个体。与之前一样,您可以迅速看出去中心化和地区经济发展是平均拨款金额最高的两个类别。但是现在,您还可以看到州和地方合作伙伴是接下来的,平均拨款金额大约低了$10,000。您可以看到大多数类别的平均拨款金额在$14,000 到$20,000 之间。最后,您可以看到艺术教育,戏剧和文学的平均拨款金额最小。当然,所有这些信息在垂直条形图中都是可用的,但是使用我们的水平条形图,我们可以更快地获得这些见解。

现在我们已经为水平条形图做出了推荐,让我们谈谈帮助您的受众打破看到条形图的例行公事的替代方法。接下来,我们将向您展示如何创建棒棒糖图和单点(或克利夫兰)点图。

策略:创建棒棒糖图

打破条形图单调性的最简单方法之一是创建lollipop chart。这只是一个带有每个柱形图末端圆圈的柱形图(Figure 3-3)。出于某种原因——也许是圆形的端点——受众和开发者喜欢使用这种图表类型。

棒棒糖图是您或您的受众从查看条形图中快速休息的一种方式,尽管棒棒糖图是条形图

图 3-3. 棒棒糖图表是您或您的观众从查看条形图中休息的快捷方式,尽管棒棒糖图表也是一种条形图

按照以下步骤创建您的棒棒糖图:

  1. 创建一个新工作表。

  2. 使用相同的维度创建一个双轴图表——在本例中使用 [平均授予金额]。这将给您两个可以控制的 Marks 卡。如果您还没有制作双轴图表,可以通过两次将 [平均授予金额] 添加到列轴上来完成。然后右键单击列上最右边的度量,并选择双轴。在视图的顶轴上,右键单击并选择同步轴。结果显示在 图 3-4 中。

    提示

    同步轴确切地执行其名称所示的功能:它确保跨双轴图表的度量单位是相同的。如果您在两个轴上使用相同的度量标准,则需要确保启用此选项。

    棒棒糖图的第一步

    图 3-4. 棒棒糖图的第一步
  3. 对于 Marks 卡 1,在列上点击最左边的 [平均授予金额]。然后进行以下更改:

    1. 将标记类型更改为条形。

    2. 将条形的大小改为小于圆圈。

  4. 对于 Marks 卡 2,在列上点击最右边的 [平均授予金额] 度量。然后进行以下更改:

    1. 将标记类型从自动更改为圆圈。

    2. 在此 Marks 卡上显示标记标签,并将对齐方式更改为右中。

    3. 如有必要,调整圆圈大小。请参阅 图 3-5 查看结果。

      创建一个带有条形和圆圈的同步双轴,以制作双轴图表。确保为圆圈添加标签而不是条形。

    图 3-5. 创建一个带有条形和圆圈的同步双轴,以制作双轴图表。确保为圆圈添加标签而不是条形。
  5. 格式化可视化如下:

    1. 通过右键单击并取消在轴上显示标题来隐藏标题。

    2. 删除网格线、零线和轴标尺。

    3. 添加行分隔线。

    这会生成 图 3-6 中的可视化效果。

最终的棒棒糖图,显示按类别平均授予金额

图 3-6. 最终的棒棒糖图,显示按类别平均授予金额

观众和开发人员喜欢棒棒糖图表。它们提供了一种从条形图中稍作休息的微妙方式,并且构建棒棒糖图表并不需要太多工作。

棒棒糖图的一个缺点:它们不能完全准确地代表数据。条形图是数据的准确表示,但我们在每个条形的末端加上一个圆圈。圆圈的中心与条形的中心对齐。这意味着圆圈的一半会误传数据(图 3-7)。

棒棒糖图在创建可视化的完全准确描述方面并非像素完美,但这没关系

图 3-7. 棒棒糖图在创建可视化的完全准确描述方面并非像素完美,但这没关系

关于这种不准确性,我们的任务是创建近似数据的可视化。大多数图表类型已经是数据的近似值。如果这种抽象水平会改变读者对数据的解释,请不要使用它。如果仍然是一个接近的近似值,请随时使用它。只需准备好证明您的决定即可!

策略:创建基本的克利夫兰点图

正如我们在本章开头提到的,我们的受众正在寻找替代柱状图的方法。卢克个人最喜欢Cleveland 点图。他喜欢使用它,因为它增加了数据元素的间距,减弱了非数据元素的影响,同时仍然提供与柱状图相同的信息。

克利夫兰点图并不来自俄亥俄州克利夫兰市。相反,它是由威廉·克利夫兰和罗伯特·麦吉尔在 1984 年发布的设计。使用点图,我们可以沿着轴用圆圈显示值。然后在轴的末端显示每组的值,如图 3-8 所示。

按类别显示平均资助金额的克利夫兰点图

图 3-8. 按类别显示平均资助金额的克利夫兰点图

我们喜欢点图而不是柱状图的原因是,我们可以增加整体的空白空间,保持现有值的比较,并将文本/值对齐到单列中。我们还可以使用金额标签作为参考,快速了解数据范围(回顾第二章中的点图)。

按照以下步骤创建基本的克利夫兰点图:

  1. 要构建可视化效果,请创建一个新的工作表。

    1. 将[程序]添加到行中。

    2. 与棒棒糖图一样,两次将[Avg Grant Amount]添加到列中,然后创建同步的双轴。

  2. 在列上的最左边的[Avg Grant Amount]测量中,双击并编辑计算。在WINDOW_MAX()函数中包装[Avg Grant Amount](图 3-9)。

    WINDOW_MAX()计算是一个表格计算,将返回所有[Avg Grant Amount]的最大值。通过右键单击并设置计算使用为“表格(向下)”来编辑表格计算。

    注意

    表格计算允许您在正在创建的可视化数据之上进行分析。虽然我们不会详细讨论*它们的功能,但您可以查看 Tableau 自己的前 10 个表格计算博客以获取更多见解。

    在列上创建临时的 WINDOW_MAX()计算

    图 3-9. 在列上创建一个临时的WINDOW_MAX()计算
  3. 根据以下方式自定义您的条形图:

    1. 将标记类型从自动更改为条形。将条的大小更改为可能的最小值。我们不希望条形过于显眼,因此将其颜色更改为浅灰色。

    2. 在标签中添加[平均授予金额]。

    3. 如果您希望使背景条大小更窄,您可以单击 Marks 卡上的颜色,并将边框颜色设置为与背景相匹配的颜色。完成此步骤后,您的可视化应类似于图 3-10。

      在调整格式之前窥视克利夫兰点图

    图 3-10. 在调整格式之前窥视克利夫兰点图
  4. 调整圆圈如下:

    1. 单击列上最右侧的[平均授予金额]。将标记类型从自动更改为圆圈。

    2. 更改圆圈的大小。我们更喜欢较小的圆圈,即小于我们使用WINDOW_MAX()创建的线条之间距离的 50%。必须手动调整此标记的大小,因此尽量眼测到一个看似合适的大小。

  5. 完成可视化(图 3-11):

    1. 将颜色调整为与背景线条明显不同的颜色。

    2. 隐藏坐标轴。

    3. 在格式窗格中删除所有线条和分隔线。

最终结果:显示按类别平均授予金额的克利夫兰点图

图 3-11. 最终结果:显示按类别平均授予金额的克利夫兰点图

正如我们之前提到的,点图为我们提供与条形图相同的信息,同时增加了空白空间,保留了比较的便利性,并将标签垂直对齐。我们可能会在右对齐标签或增加线条与标签之间的空白方面挑剔,但对于大多数受众来说,这里的基本点图已经足够了。

排名变化的条形图:AP 案例研究

并非所有比较都需要您检查测量值跨越或在测量内部的大小。有时,您的受众仅对比较不同组的排名变化以及一段时间内的排名变化感兴趣。Tableau 提供了许多显示值排名的方法。我们将从一个简单的方法开始:显示总授予金额的当前排名以及从一年到另一年的排名变化。

现在我们更好地了解了分发的资助金额,我们希望比较按组和年份分类的资助。让我们探讨如何显示排名顺序变化。

AP 正在仔细查看其账簿,并试图更好地理解年度资金趋势。高管们想要了解他们服务的每个行业部门分别获得了多少资金,并且从 2018 年到 2019 年每个部门是否出现了增长或减少。您将如何构建一个展示这些变量之间关系的可视化呢?

策略:在条形图上显示排名和排名变化

在本例中,我们将再次显示 2019 年的总授予金额。这一次,我们将显示相对于 2019 年所有其他组的排名,同时也显示从 2018 年到 2019 年在同一度量标准上排名的总变化。图 3-12 显示了一个预览。

我们将为下一个策略创建的可视化快照。注意右侧的排名值及排名变化的//分隔符。

图 3-12. 我们将为下一个策略创建的可视化快照。注意右侧的排名值及排名变化的//分隔符。

在图表中使用排名的原因很简单:我们人类只能处理有限的信息量。有时候,比较两个测量之间的变化时,通过比较排名的变化更容易理解。这里是这种策略的步骤:

  1. 通过将[Program]添加到行,将[授予金额 | 2019]添加到列以及将其添加到 Marks 卡上的标签,创建基本条形图(图 3-13)

    一个水平条形图显示 2019 年按类别划分的总授予金额

    图 3-13. 一个水平条形图显示 2019 年按类别划分的总授予金额
    注意

    Tableau 内置了几种排名计算,包括RANK()RANK_DENSE()RANK_MODIFIED()RANK_PERCENTILE()RANK_UNIQUE()。尽管这些计算在某些情况下可能更合理,但我们将使用INDEX()函数。由于它在计算中不进行排名数字的比较,因此更可靠和灵活。

  2. 创建排名计算如下:

    1. 创建名为**[指数 | 授予金额 | 2019]**的新计算:

      // Index | Grant Amount | 2019
      INDEX()
      

      INDEX()根据您指定的表计算方式创建一个值的递增计数。我们将通过调整视图上的表计算来设置[指数 | 授予金额 | 2019]执行这种递增计数。

    2. **[指数 | 授予金额 | 2019]**添加到 Marks 卡上的标签。您会注意到,该函数只是通过视图上的标记从上到下添加了一个递增的值(图 3-14)。

      一个未格式化的水平条形图显示 2019 年的总授予金额和未排序的 INDEX()值

      图 3-14. 一个未格式化的水平条形图显示 2019 年的总授予金额和未排序的INDEX()
    3. 要使计算像排名一样工作,请通过右键单击 Marks 卡上的值并编辑表计算来编辑表计算。选择特定维度,并确保选择了 Program。现在您可以编辑排序顺序。选择自定义,并在[授予金额 | 2019]上选择降序。该函数现在应该看起来像一个唯一的排名(图 3-15)!

      显示 2019 年总赠款金额和基于 2019 年总赠款金额的排序 INDEX()值的未格式化水平条形图

    图 3-15. 显示 2019 年总赠款金额和基于 2019 年总赠款金额的排序INDEX()值的未格式化水平条形图
  3. 创建排名变动计算:

    1. 创建[指数 | 赠款金额 | 2018]的副本,并称新计算为**[Index | Grant Amount | 2018]**

      // Index | Grant Amount | 2018
      INDEX()
      
    2. 对于下一个计算,你将计算两个指数计算之间的差异。创建一个名为**[Index Change | Grant Amount]**的计算:

      // Index Change | Grant Amount
      [Index | Grant Amount | 2018] - [Index | Grant Amount | 2019]
      
    3. 将此计算添加到 Marks 卡上的文本中。编辑表格计算。你可以定制[指数 | 赠款金额 | 2018]和[指数 | 赠款金额 | 2019]。这些表格计算显示在图 3-16 中。

      一定要编辑 2018 年和 2019 年的表格计算。使用下拉菜单选择要更新的表格计算。

      图 3-16. 一定要编辑 2018 年和 2019 年的表格计算。使用下拉菜单选择要更新的表格计算。

      这是一个重要的步骤,因为接下来的计算依赖于正确排序[指数 | 赠款金额 | 2019]和[指数 | 赠款金额 | 2018]。

    4. 一定要对[指数 | 赠款金额 | 2019]进行降序自定义排序,使用[赠款金额 | 2019]进行排序,并对[指数 | 赠款金额 | 2018]进行降序自定义排序,使用[赠款金额 | 2018]进行排序。这将为你提供一个正确的计算,显示从 2018 年到 2019 年的排名变化。

  4. 一旦计算正确显示结果,右键点击并编辑[指数变化 | 赠款金额]的文本格式。使用自定义格式写**(↑0);(↓0);""**,如图 3-17 所示。你可以通过按住 Alt 键并输入24来输入上箭头,按 Alt-25 来输入下箭头。

    使用自定义文本格式添加箭头到正值和负值

    图 3-17. 使用自定义文本格式添加箭头到正值和负值

    此自定义格式化以三种方式格式化值:当值为正时,当值为负时,或当值为零时。这些规则按照正、负和零的顺序指定,并用分号分隔。根据这些规则,正值将以带有上箭头的括号显示,负值将以带有下箭头的括号显示,如果排名没有变化,则不会显示任何内容,因为我们使用空引号。

    一旦你格式化了标签的显示,可视化效果会类似于图 3-18。

    一个未格式化的横向条形图,显示 2019 年的总授款金额,使用未排序的值进行 2019 年总授款金额的排名,并使用嵌套的函数在单个计算中显示排名变化

    图 3-18. 一个未格式化的横向条形图,显示 2019 年的总授款金额,使用未排序的INDEX()值进行 2019 年总授款金额的排名,并使用嵌套的INDEX()函数在单个计算中显示排名变化
  5. 现在您已经在仪表板上放置了所有组件,您需要通过格式化可视化文本的方式,格式化线条和分隔符,并对类别进行排序来完成视图。

    从编辑文本标签开始。对于这种策略,您将把所有的测量指标放在一行,并添加两个斜杠以帮助区分排名和值(见图 3-19)。

更改排名条形图标签的文本编辑器视图

图 3-19. 更改排名条形图标签的文本编辑器视图

这种策略的优点在于显示排名变化。该元素使观众能够看到变化如何影响从一个时期到下一个时期的类别顺序(见图 3-20)。

最终版本显示 2019 年的总授款金额,跨 24 个类别的排名比较以及从 2018 年到 2019 年的排名变化

图 3-20. 最终版本显示 2019 年的总授款金额,跨 24 个类别的排名比较以及从 2018 年到 2019 年的排名变化

跨多个时期的排名变化的颠簸图:AP 案例研究

之前的策略侧重于在仅两个时期内对排名变化的跟踪。如果您试图在多个时期内跟踪这一时期呢?显然,带有几个条形图箭头的文本是行不通的。我们需要使用不同的图表类型。

AP 委员会对 2018 年和 2019 年按行业部门资助的演示非常印象深刻,因此他们要求您提供更多信息。他们要求对同一行业部门进行评估,以表明每年分配了多少授款资金。这一次,他们希望看到这些信息在 2015 年到 2020 年的五年期间的表现。您将如何创建一个仍然清晰可读且具有影响力的可视化呢?

首先,让我们看一看一张折线图,显示每个季度的总授款金额,并从您的受众角度考虑它(见图 3-21)。

一张(不太理想的)折线图,显示每个类别每季度的总授款金额

图 3-21. 一张(不太理想的)折线图,显示每个类别每季度的总授款金额

此线图有很多线,但惊人地不难跟踪。通常,应避免在折线图上有超过八条线,因为太多线条往往会重叠。但观众更感兴趣的是任何类别与其他类别的比较,而此图表未显示随时间的变化。所需的是一种能描述这种排名变化的图表。

用于随时间变化排名的最佳图表类型之一是颠簸图表。使用颠簸图表可以看到排名如何随时间变化,而不至于完全迷失在信息中。与构建前述图表不同,让我们构建一个颠簸图表,允许我们选择单个类别(图 3-22)。

一个颠簸图表显示 24 个类别按季度排名随时间变化

图 3-22. 一个颠簸图表显示 24 个类别按季度排名随时间变化

怎么制作颠簸图表?

策略:制作颠簸图表

颠簸图表与折线图有根本区别。这种颠簸图表策略显示了从 2015 年到 2019 年每半年类别排名的变化。信息不关心基础拨款总额有多接近;相反,它只关注整体排名。在这种情况下,颠簸图表展示了艺术家个人拨款在其他类别相对排名的周期性特征:

  1. 创建如下线图:

    1. SUM([Grant Amount])添加到行,并将[Program]添加到 Marks 卡片的详细信息。

    2. 创建一个名为**[Date | Biannual]**的新计算字段,返回最接近半年的日期,即 1 月 1 日或 7 月 1 日:

      // Date | Biannual
      IF MONTH([Date]) > 6
      THEN DATEADD('month', 6, DATETRUNC('year', [Date]))
      ELSE DATETRUNC('year', [Date])
      END
      

      将此计算放置在列上,然后右键单击并更改为精确日期。

    3. 使用[Date | Biannual]添加一个上下文过滤器,并选择所有年份,但不包括 2020 年。

      上下文过滤器与标准维度过滤器略有不同,因为它过滤数据不包括在固定 LOD 计算中。标准维度过滤器在 LOD 计算完成后应用于视图。

    4. 在行上为SUM([Grant Amount])添加一个排名表计算。设置排名为唯一且降序(图 3-23)。在[Program]上计算此计算。

      为每个日期按节目创建唯一降序排名的总拨款美元

      图 3-23. 为每个日期按节目创建唯一降序排名的总拨款美元
    5. 将度量的副本拖动到数据窗格的表区域。这将创建一个新的保存计算。编辑计算名称为**[Grant Amount | Rank]**

      创建计算后,您的可视化将如图 3-24 所示。

      添加排名计算后的工作进展

    图 3-24. 添加排名计算后的工作进展
  2. 根据以下准备标签:

    1. 编辑排名轴并反转轴。隐藏排名轴。

    2. 要添加标签,请创建两个计算。第一个应命名为**[Bump Category Label]**

      // Bump Category Label
      IF [Date | Biannual] = {MIN([Date | Biannual])}
      OR [Date | Biannual] = {MAX([Date | Biannual])}
      THEN [Program]
      END
      

      将第二个**[Bump Rank Label]**命名为调用。

      // Bump Rank Label
      IF MAX([Date | Biannual]) = MIN({MAX([Date | Biannual])})
      OR MIN([Date | Biannual]) = MAX({MIN([Date | Biannual])})
      THEN [Grant Amount | Rank]
      
      END
      

      我们将在第四章讨论这些计算的部分。现在只需知道,这两个计算将显示每个类别的起始和结束日期及相应的排名标签即可。

  3. 构建标签如下所示:

    1. 将[Bump Category Label]添加为标签的属性。

    2. 将[Bump Rank Label]添加到标签中,并将表格计算更改为在[Program]上使用特定维度。

    3. 编辑[Date | Biannual]轴,使其范围从 2013 年 1 月 1 日到 2022 年 1 月 1 日,然后隐藏轴。我们设置轴的范围超出数据中的值,以便为标签腾出空间。

    4. 右键单击并格式化[Bump Rank Label],以便在排名值前面添加**#**(见图 3-25)。

      突显图表文本标签的自定义格式

      图 3-25. 突显图表文本标签的自定义格式
    5. 格式化文本后,将标签对齐到中间。此时的图表如图 3-26 所示。

      在添加突出显示之前查看突出显示的进度

    图 3-26. 在添加突出显示之前查看突出显示的进度
  4. 突出显示单个类别:

    1. 从[Program]创建名为**[Program Parameter]**的参数。

    2. 从维度和参数创建名为**[Program | TF]**的计算:

      // Program | TF
      [Program] = [Program Parameter]
      
    3. 将这个新维度放置在 Marks 卡片的大小和颜色上。

    4. 编辑颜色,使 False 值为灰色,True 值为蓝色。将 True 值放在 False 值前面,并使 True 值的大小大于 False 值的大小。

    5. 编辑[Grant Amount | Rank]和[Bump Rank Label]的表格计算,以包括[Program]和[Program | TF]作为计算表格计算的特定维度(见图 3-27)。

      调整排名计算的表格计算,以包含[Program | TF]作为选定的维度

    图 3-27. 调整排名计算的表格计算,以包括[Program | TF]作为选定的维度

    完成此步骤后,您的可视化将如图 3-28 所示。

    显示单个类别的最小格式的突显突显图表

    图 3-28. 显示单个类别的最小格式的突显突显图表
  5. 格式化突显图表如下所示:

    1. 移除所有线条和分隔线。

    2. 还值得将你的工具提示格式化为包含SUM([Grant Amount])。我们更喜欢超越默认的工具提示格式。

    图 3-29 展示了最终的突出显示的突显图表。

一个完全格式化的凸起图显示最终的可视化结果

图 3-29. 一个完全格式化的凸起图显示最终的可视化结果

层次数据的哑铃图:办公必需品案例研究

比较不仅限于条形图和排名。有时,你必须比较层次结构的数据。用于层次比较最常见的方法之一是哑铃图。(惊喜!)

我们在本章的其余部分进行的比较可以应用于任何行业。然而,对于这个策略——以及本章剩余的策略——我们将从社区资助数据转换为使用零售数据。

OE 公司的销售副总裁请求数据团队提供公司产品线子类别的销售量按地区显示的分析。他计划在未来一年内增加团队成员,并需要更好地了解销售机会。OE 公司有 17 个子类别和 4 个销售地区。

在许多数据点需要表示的情况下,如何清晰地呈现数据是最好的方式?你可能会把这些数据看作是单列条形图(图 3-30)。

这种子类别和区域并列条形图不理想,因为它占用了空间

图 3-30. 这种子类别和区域并列条形图不理想,因为它占用了空间

我们不能说这是一个糟糕的解决方案:如果我们的受众查看任何子类别,他们将能够轻松比较各个地区。问题在于,如果他们对存储子类别感兴趣,例如,他们必须浏览几十个数据点,直到找到他们感兴趣的信息。当他们找到时,他们必须重新适应图表。

另一种选择是将[Region]移动到列中,将[Margin 的百分比]移动到行中,以在每个子类别内创建垂直条形图。这减少了观众的认知负荷:他们现在能够更快地处理信息,因为每一行现在都是一个子类别(而不是子类别和地区的组合)。现在,当他们从左到右扫描时,他们能够快速比较子类别内的各个地区(图 3-31)。

即使这种并列条形图也占用了太多空间

图 3-31. 即使这种并列条形图也占用了太多空间

虽然这张图在每个地区内提供了清晰度,但它很长,限制了读者在各个子类别之间进行比较的能力。在这里可能很有效的替代条形图的方法是哑铃图——点图的近亲。

注意

杠铃图 的名称来自于其形状类似杠铃,一根直杆两侧各有一个重物。在数据可视化中,这个概念可以扩展到包括更多点,其中第一个和最后一个点(以及线的长度)代表所绘制度量的最小值和最大值。

杠铃图将点放置在多条线上,每条线代表第二维度,感兴趣的度量是线的连续性。示例见 图 3-32。

杠铃图可以显著整合原本可能以并排条形图表示的可视化

图 3-32. 杠铃图可以显著整合原本可能以并排条形图表示的可视化

结果是一种简洁的视觉表现形式,使您的观众能够快速理解度量内的性能,同时把握总体表现。杠铃图的成功不仅在于绘图设计,还在于格式化。通过 图 3-32 中的图表,您的观众可以按照一个子类别从左到右或快速上下扫描比较值的准则。

那么您如何构建这种可视化呢?

策略:构建杠铃图表

按照以下步骤构建我们的杠铃图:

  1. 创建基础可视化:

    1. 连接到 Sample – Superstore 数据集。将 [子类别] 添加到行上。

    2. 将 [区域] 添加到颜色。在本例中,我们已经定制了颜色。

    3. 创建名为 **[% 利润率]** 的计算:

      // % Margin
      SUM([Profit]) / SUM([Sales])
      
    4. 将 [% 利润率] 计算添加两次到列架上 (图 3-33)。

      创建杠铃图表,从堆叠条形图开始

    图 3-33. 创建杠铃图表,从堆叠条形图开始
  2. 自定义标记卡:

    1. 对于最左侧的 [% 利润率] 标记卡,将标记类型从自动更改为线条。将 [区域] 从颜色移到路径。

    2. 对于最右侧的 [% 利润率] 标记卡,将标记类型从自动更改为圆圈。通过为圆圈标记添加边框来格式化颜色。

    3. 创建同步双轴图表。

  3. 完善格式:

    1. 你将在行架上添加一个内联计算。在行架上 [子类别] 右侧双击并输入 **MIN(0.0)**,如 图 3-34 所示。这将创建一个标尺,观众将使用它从子类别移动到轴上的值。按 Enter 键。

      小贴士

      使用 MIN(0.0)MIN(0)MIN(1) 是 Tableau 开发中常见的惯例,用于创建虚拟连续轴。它们通常用于将不同的度量添加到标签或进行额外的格式化。

      添加 MIN(0.0) 作为临时计算

    图 3-34. 添加 MIN(0.0) 作为临时计算

    这将给你一个新的垂直轴。右键单击并隐藏新的轴(参见图 3-35,取消选中显示标题以隐藏轴)。

    取消选中显示标题以隐藏轴

    图 3-35. 取消选中显示标题以隐藏轴
  4. 调整子类别大小,使其适合简洁视图:

    1. 格式化并移除所有边框线,除了列网格线和零轴行。

    2. 格式化这些线的类型和颜色,使其相同。

    3. 在[子类别]标题上右键单击,并选择隐藏行的字段标签(在整本书中我们会经常这样做)。

    4. 右键单击任何子类别,并格式化标题,使成员右对齐。

    5. 右键单击[MIN(0.0)]标题并取消选中显示标题。

    6. 调整圆圈大小,使其显眼但不会分散观众注意力。保持线条细,但不要使用最细的(以使其与指南区分开)。

    图 3-36 展示了最终结果。

杠铃图的最终版本

图 3-36. 杠铃图的最终版本

另一种选择是使线条略大于圆圈(参见图 3-37,另一种替代杠铃图,其中点之间的线条较粗)。 无论您选择宽线还是窄线,都可以利用圆圈的边框颜色来帮助区分圆圈的颜色和形状与线条的颜色。

另一种不太理想的线条图,显示按子类别销售情况

图 3-37. 另一种替代杠铃图,其中点之间的线条较粗

杠铃图的结果是一个简洁的图表,使您的观众能够快速比较组内的值,甚至跨组查看值。

格子图/小多图表:办公必需品案例研究

请考虑图 3-38 所示的线条图,展示了四年来每个季度的总销售额,分为 17 个子类别。

另一种不太理想的线条图,显示按子类别销售情况

图 3-38. 另一种不太理想的线条图,显示按子类别销售情况

假设你是观众中的一员。你对这个图表的反应可能是,“这是什么鬼?太乱了!” 实际上,几乎没有人希望看到超过八条线的线条图(认真的)! 您的观众希望追踪单一线条,但即使使用颜色编码,也不可能仅跟踪一个线条。 您必须找到更好的方法来传达这些信息。 我们更倾向于使用小多图或格子图表来分享这些信息的一种方式。

格子图 实际上是一系列使用完全相同坐标轴的图表,通常按网格排列。 与显示具有 17 条线的单一线条图相比,我们可以选择显示 17 个单独的图表——例如作为条形图——以展示数据中的模式(参见图 3-39,小多图可以用来显示模式)。

小倍数可用于显示组内随时间变化的模式

图 3-39. 小倍数可用于显示组内随时间变化的模式

在 OE,销售副总裁非常欣赏数据团队提供的见解,因此他要求提供更多信息。在做出招聘决策时,他希望看到更细粒度的视图,显示按季度的销售情况。如何清晰地表示这些信息呢?

图 3-39 展示了我们 17 个子类别按季度的总销售额。每年都有不同的颜色以帮助分析。我们还在每个子类别内添加了标签,显示最大值,以提供额外的背景信息。

使用小倍数,你的观众可以追踪数据中的模式。在这种情况下,他们将能够看到数据的季节性以及子类别的整体表现。当他们查看这张图表时,他们可以看到手机和椅子是最畅销的产品。他们可以注意到椅子、桌子、配件和纸的季节性一致。他们还可以注意到 2019 年 Q2 和 Q3,复印机销量显著下降,然后在 Q4 恢复到正常值。现在你的观众可以追踪个别数值了。

这种图表类型的一个缺点是不知道任何特定柱的实际值 —— 但这几乎是每种可视化都面临的挑战。此外,跨子类别比较数值可能会很困难。但这是任何图表的斗争;任何图表类型都需要权衡。你的工作是权衡选项并选择最佳类型。

在 Tableau 中构建格子图表时,难度取决于期望的结果。您可以通过检查销售区域和业务部门来创建一个简单的格子图表,就像图 3-40 所示。

两个维度定义行和列的简单小倍数

图 3-40. 一个简单的小倍数图,其中两个维度定义行和列

在 Tableau 中完成这种类型的格子图表非常简单:行上至少需要一个维度,列上需要另一个维度(图 3-41)。

在列上 [分段] 和在行上 [区域] 的近距离观察

图 3-41. [分段] 在列上和 [区域] 在行上的近距离观察

真正的挑战是使用单个维度创建一个小倍数的网格。在接下来的策略中,您将使用单个维度创建一个格子图表。这绝非一种即插即用的图表。要创建此可视化,您需要考虑如何设计您的网格并添加标签。

最后一点:由于使用了表格计算,如果某个维度的某个成员在视图的任何部分缺少数据,这些图表可能会出现问题。

策略:为单个维度创建格子图表

让我们开始吧!使用 Sample - Superstore 数据集,创建一个新工作表,并按照以下步骤操作:

  1. 创建网格。这需要使用表计算。您将在此步骤中编写三个计算并创建一个参数:

    1. 创建一个名为**[索引]**的新计算,用于对网格上显示的成员进行排序:

      // Index
      INDEX()
      

      您将在另外两个计算中使用此计算,这些计算将形成列和行。

    2. 创建一个名为**[总列数]**的新整数参数。这将为我们的镶嵌图表动态更改列数提供一种方法。将值设置为 5。

    3. 创建一个名为**[列名]**的计算,用于将每个成员编码到适当的列中:

      // Columns
      ([Index] - 1) % [Total Columns]
      

      此计算使用INDEX()函数,该函数创建一个从 1 到任意数字的值的运行计数,并应用模函数。

      提示

      模运算符计算除法问题的余数。还记得在小学时计算除法问题的余数而不是小数吗?我们打赌您从未想过成年后还会用到它!

      此计算的输出为您提供了一个维度的成员,根据您在总列数参数中指定的任何数字分成多组:在这里,是五组。图 3-42(#output_of_the_index_and_columns_calculat)显示了您希望看到的映射。

      索引和列计算的输出

      图 3-42。索引和列计算的输出
    4. 现在您已经有了[列]的计算,您所需要的只是[行]的计算:

      // Rows
      ((([Index] - 1) - [Columns]) - 1) / [Total Columns]
      

      将[子类别]和[索引]添加到详细信息中。将[列]添加到列架上,将[行]添加到行架上。将[列]和[行]更改为离散。

    5. 要在工作表上构建网格,请编辑[列]、[行]和[索引]的表计算,并选择具体维度,选择[子类别]。右键单击标记卡上的[子类别],使用销售总额降序创建自定义排序。对于[行]计算,您有两个表计算需要编辑。确保表计算使用相同的计算依据和排序顺序选项(图 3-43,#use_table_calculations_to_build_the_grid)。

      使用表计算为小多重叠图构建网格

    图 3-43。使用表计算为小多重叠图构建网格
  2. 现在,您已经建立了网格,可以开始构建可视化。您将根据订单日期查看销售情况:

    1. 将[订单日期]拖放到列中。然后右键单击并选择连续的季度日期类型(图 3-44,#change_order_date_to_a_date_value_by_qua)。

      将订单日期更改为按季度的日期值

      图 3-44。将订单日期更改为按季度的日期值
    2. 将 SUM([销售额])添加到行中。将 YEAR([订单日期])添加到颜色中。您可能需要将标记类型更改为条形图。这使您得到了图 3-45(#a_small_multiple_chart_without_sub-categ)中的可视化效果。

      一个小多图表,每个网格部分没有子类别标签

      图 3-45. 每个网格部分没有子类别标签的小多图表

      我们已完成可视化的基础。现在,每个框的标签会很好。要做到这一点,您将创建一个双轴图表,并添加两个自定义计算。

  3. 要在每个多重图表的正上方添加一个居中的标签,请创建一个自定义日期计算,以识别最中间的日期:

    1. 通过识别我们日期的端点然后取两者的平均来完成此操作。编写以下计算,称为**[订单日期 | SM 标签]**

      // Order Date | SM Label
      {MIN([Order Date])} + (({MAX([Order Date])} - {MIN([Order Date])})/2)
      

      它找到第一个和最后一个订单日期,然后找到两个日期的中间。 (您将在第四章中了解更多信息。)

    2. 将此计算作为确切日期添加到“列”货架上。您会注意到一个单独的堆积条形图,对应于新的日期计算(图 3-46)。

      为获取适当的标签而进行的工作进展

      图 3-46. 为获取适当的标签而进行的工作进展
    3. 编辑[订单日期 | SM 标签]的标记卡。将标记类型更改为文本并从颜色中删除 YEAR([订单日期])。

    4. 创建一个同步的双轴。在同一标记卡上,将[子类别]和[索引]从详细信息移动到文本。

      您会看到一个问题是,文本在每个子类别上不对齐(图 3-47)。这是因为对于[订单日期 | SM 标签]轴,每个标签都位于该子类别的总体总数处。我们需要找到一些魔法(或巧妙的方法)来对齐这些标签。

      现在显示了小多个图表的标签,但高度因小多个网格的单元格而异

    图 3-47. 现在显示了小多个图表的标签,但高度因小多个网格的单元格而异
  4. 通过找到子类别的单个最大季度总额,然后调整标签,使其比该值高出一个倍数,可以对齐标签。如果假设每个类别按季度最高的总销售额来自 2018 年 Q4 的复印机,并且该值为 100 美元,则我们希望所有子类别的标签略高于图表中心位置,例如在 120 处。

    但有一点需要注意:您需要文本居中,并且需要条形图的高度相同。而且您可以只用一个计算来完成!如何实现?通过使用SIZE()函数计算每个计算中发生的标记数量!

    提示

    SIZE()是另一个有用的表格计算。它在数据分区内找到数据点的总数。例如,如果您有一个简单的文本表格,其中有 10 行数据,SIZE()将为 10。

    1. 创建一个称为**[条形 + 标签]**的计算:

      // Bars + Label
      IF SIZE() > 1
      THEN SUM([Sales])
      ELSE 1.1 * AVG({
        MAX(
         {FIXED [Sub-Category], DATETRUNC("quarter", [Order Date]) :
          SUM([Sales])
        })
      })
      END
      

      在这个计算中,SIZE() 首先根据您设置的表格计算来计算标记的数量。对于文本标记,这将返回一个值为 1。对于条形图,SIZE() 将返回每个子类别显示的季度数。由于条形图的值为 16,计算将返回总销售额。对于文本,它返回比季度销售额最高的单个子类别多 1.1 倍的值。

    2. 使用 [Bars + Label] 计算替换 SUM([Sales]) 和 [Rows]。编辑表格计算并按订单日期的季度进行选择。在 [Order | SM Label] Marks 卡片上的标签中添加 SUM([Sales])。这将使您获得 图 3-48 中的可视化效果。

      三维分析图现在具有相同位置的标签,但只需进行格式化即可

    图 3-48. 三维分析图现在具有相同位置的标签,但只需进行格式化即可
  5. 要完成可视化效果,您需要将显示在 [Order Date | SM Label] 上的文本格式化如下:

    1. 您可以根据自己的喜好格式化此文本;我们将子类放在第一行,并将指数(充当排名)和SUM([Sales])放在第二行(图 3-49)。

      文本格式化后的可视化示例

      图 3-49. 文本格式化后的可视化示例
    2. 在 [Order Date] Marks 卡片上的 [Quarter of Order Date] 中添加SUM([Sales])到标签。我们将字体设置为大小 7,然后显示每个子类别的最高值,可通过在范围部分选择 Pane 然后选择“标记最大值”来完成(图 3-50)。

      通过选择 Min/Max,然后选择 Pane,然后勾选“标记最大值”来为条形图上的最大值添加标签

      图 3-50. 通过选择 Min/Max,然后选择 Pane,然后勾选“标记最大值”来为条形图上的最大值添加标签
    3. 隐藏列和行的标题。根据您的喜好调整线条和边框。例如,我们喜欢保留网格线并包括将设置为背景颜色的行和列分隔线。最终结果是一个 5 × 4 的小多重图表(图 3-51)。

      最终结果是一个组织良好的三维分析图表,使您的观众能够检查子类别中的模式

      图 3-51. 最终结果是一个组织良好的三维分析图表,使您的观众能够检查子类别中的模式
    4. 如果您要显示数百个多重图表,可能希望过滤到前 20 个。您可以通过使用您的指数计算进行过滤,将范围设置为 1 到 20。只需确保您的过滤器上的表格计算设置正确即可。

使用网格图,您可以创建多个具有相同基础框架的图表。通过使用网格图,您能够检查数据子集在彼此之间的外观。这允许在子集内部和跨子集之间进行比较。

您可以在 Tableau 中使用多个维度创建网格图,或者使用单个维度和一些方便的表格计算。此特定示例处理了一个带有日期的单个维度网格图。这可能是最难创建的!

多度量标平行坐标图:OE 案例研究

对于我们本章的最后一种策略,让我们来处理分析师经常不得不进行的比较:在多个度量中比较单个维度的多个成员。我们经常看到的最常见的做法是使用条形图(或表格),如图 3-52 所示。

多条形图显示销售额、销售单位、利润和利润百分比。这种图表有效,但也有替代方案。

图 3-52. 多条形图显示销售额、销售单位、利润和利润百分比。这种图表有效,但也有替代方案。

唯一的缺点是可能会有太多的成员/行需要管理;您可能更喜欢以更简洁的格式总结您的数据。

您可以使用平行坐标图来实现这一点。平行坐标用于绘制具有多个维度的数据,并比较它们之间的关系。在这种图表类型中,每个变量都有自己的坐标轴。这些轴通常使用不同的测量单位,并且针对每个测量进行了归一化处理。这样可以保持比例尺度的一致性。然后使用线条连接每个维度的成员,跨度量和相应的坐标轴。

因为通常会同时绘制许多成员,所以图表很快会变得混乱。我们建议您要么突出显示一个维度的单个成员相对于整个组,要么尽量减少进行比较的成员数量。我们更倾向于突出显示一个维度的单个成员(见图 3-53)。

平行坐标图允许观众快速比较多个维度中任何成员

图 3-53. 平行坐标图允许观众快速比较多个维度中的任何成员

平行坐标图可以快速比较多个度量中任何一个维度的成员,比柱状图通常更快提供背景信息。此外,该图表并不适合比较任何两个变量之间的关系;这更适合散点图。

平行坐标图可能是 OE 所需的内容。在做出雇佣决策之前,销售副总裁要求提供更多信息。数据团队的任务是比较零售商的 17 个子类别在四个指标上的表现:总销售额、总单位销售、利润或利润(以美元计)、以及利润率占销售额的百分比。报告应比较每个子类别相对于其他子类别的表现。

如何在显示子类别之间的关系的同时最好地表示这些数据?最好的方法是使用平行坐标图。

策略:构建平行坐标图

首先,您需要构建标准化指标。这意味着将任何一组指标从其现有比例转换为一个从 0 到 1 的比例。这个计算的格式很简单:

value – lowest value
------
highest value – lowest value

  1. 由于您正在处理四个指标,您必须对四个计算进行标准化。这些计算是**[销售 | 标准化]****[利润率 | 标准化]****[% 利润率 | 标准化]****[单位 | 标准化]**

    // Sales | Normalized
    (SUM([Sales]) - WINDOW_MIN(SUM([Sales])))
    /
    (WINDOW_MAX(SUM([Sales])) - WINDOW_MIN(SUM([Sales])))
    
    // Units | Normalized
    (SUM([Quantity]) - WINDOW_MIN(SUM([Quantity])))
    /
    (WINDOW_MAX(SUM([Quantity])) - WINDOW_MIN(SUM([Quantity])))
    
    // Margin | Normalized
    (SUM([Profit]) - WINDOW_MIN(SUM([Profit])))
    /
    (WINDOW_MAX(SUM([Profit])) - WINDOW_MIN(SUM([Profit])))
    
    // % Margin | Normalized
    ((SUM([Profit])/SUM([Sales])) - WINDOW_MIN(SUM([Profit])/SUM([Sales])))
    /
    (WINDOW_MAX(SUM([Profit])/SUM([Sales])) - WINDOW_MIN(SUM([Profit])/SUM([Sales])))
    
    提示

    您也可以使用嵌套的 LOD 进行此操作。在适当的级别使用固定的 LOD 表达式替换WINDOW_MAX()WINDOW_MIN()函数。

    您会注意到每个计算具有类似的结构。

  2. 按以下步骤构建情节:

    1. 将[子类别]放在详细信息中。将[度量名称]添加到列中,将[度量值]添加到行中。将[销售 | 标准化]、[单位 | 标准化]、[利润率 | 标准化]和[% 利润率 | 标准化]添加到[度量值]标记卡中。

    2. 编辑每个表格计算,使其跨子类别计算。将标记类型更改为线条。

      图 3-54 显示此步骤后的情节。

      平行坐标图开始的一瞥

      图 3-54. 平行坐标图的开始预览
    3. 将第二个[度量值]添加到行中。编辑最左侧的[度量值]标记卡,将[子类别]从详细信息移动到路径中。

    4. 将线条尺寸调窄并将颜色更改为中灰色。

    5. 创建一个同步双轴图表。格式化并删除所有线条和边框。然后隐藏标题。这将创建图 3-55。

      添加垂直线对我们的受众非常有用,因为它界定了变化发生的位置

    图 3-55. 添加垂直线对我们的受众非常有用,因为它界定了变化发生的位置
  3. 突出显示[子类别]维度中的单个成员如下:

    1. 从[子类别]创建一个参数,并将其命名为**[子类别参数]**

    2. 创建名为**[子类别 | TF]**的新计算:

       // Sub-Category | TF
      [Sub-Category] = [Sub-Category Parameter]
      
    3. 在最右侧的[度量值]标记卡上,将[子类别 | TF]添加到大小和颜色中。在最左侧的[度量值]标记卡上,将[子类别 | TF]添加到详细信息中。

    4. 你需要再次编辑表格计算,以显示正确的颜色和大小值。在“度量值”窗格中编辑表格计算时,请确保使用[子类别]和[子类别 | TF]进行计算。

    5. 为 True 和 False 值设置颜色。将 True 值设置为相对于 False 值具有更高的亮度。在本例中,我们将 True 值设置为#7C00B2,将 False 值设置为#CEB8D8。确保 True 值位于 False 值之上。使 True 值略微宽于 False 值。

    6. 将实际值添加到第二个标记卡的工具提示中,并格式化工具提示。通过删除提示框内的所有值,从第一个标记卡中删除工具提示。

    7. 编辑轴,使值从精确的 0 到 1。

    此示例所需的核心工作已完成(图 3-56)。

    在格式化的平行坐标图中,您不能仅仅因为限制而向图表的顶部和底部添加标签。相反,您将创建单独的工作表。

    图 3-56. 在格式化的平行坐标图中,您不能仅仅因为限制而向图表的顶部和底部添加标签。相反,您将创建单独的工作表。

    如果您希望此图表有简单的标签,可以编辑最左侧的[度量值]标记卡,并将[度量名称]添加到标签中,然后显示最小值和最大值上的值。但是,我们将向您展示一种多页方法,以便数据更具上下文。

  4. 在每个轴的顶部,您希望显示最大值。这将为您的观众提供上下文。为此,您需要创建一个单独的工作表:

    1. 首先,在列上创建四个相同的临时计算(图 3-57)。双击并键入**MIN(0.0)**。再做三次。这将创建四个单独的标记卡,我们可以在其上放置标签。

      添加 MIN(0.0),直到建立平行坐标的顶部标签

      图 3-57. 添加MIN(0.0),直到建立平行坐标的顶部标签
    2. 将所有标记卡更改为文本标记。在每个标记卡上,您将添加一个测量类型和轴上最大值的标签。

    3. 在第一个标记卡上,创建一个名为**[销售 | 窗口最大]**的新计算:

      // Sales | Window Max
      WINDOW_MAX(SUM([Sales]))
      

      将此计算添加到文本。编辑文本。在第一行写上**销售**,在第二行放置计算(图 3-58)。

      添加描述维度和窗口最大值的文本

      图 3-58. 添加描述维度和窗口最大值的文本
    4. 在第二个 MIN(0.0)卡上重复此任务,针对[单位 | 窗口最大]。分别对第三和第四个标记卡进行[利润率 | 窗口最大]和[%利润率 | 窗口最大]的重复:

      // Units | Window Max
      WINDOW_MAX(SUM([Quantity]))
      
      // Margin | Window Max
      WINDOW_MAX(SUM([Profit]))
      
      // % Margin | Window Max
      WINDOW_MAX(SUM([Profit])/SUM([Profit]))
      
    5. 在每个标记卡的详情中添加[子类别]。然后删除所有线条和边框。最后,隐藏标题。这将使您得到图 3-59 中混乱的可视化效果。

      在添加筛选器以显示单个值之前,预览正在进行中的顶部标签

      图 3-59. 在添加筛选器以显示单个值之前,预览正在进行中的顶部标签
    6. 要清理这些内容,我们需要创建并添加一个名为**[First]**的单个计算到我们的筛选器中:

      // First
      FIRST() = 0
      

      然后将计算放置在筛选器上。不要担心立即选择 True 或 False。无论如何,在任何操作生效之前,您都需要编辑您的表格计算。

    7. 将您的表格计算设置为跨子类别计算,然后编辑筛选器以使值为真。最后,关闭工具提示。

      现在您将拥有一个值得分享的标题(图 3-60)!

      一个将用作平行坐标顶部的工作表

    图 3-60. 一个将用作平行坐标顶部的工作表
  5. 我们需要创建的最后一个工作表将显示每个度量的最低值,并且看起来像是在标记底部轴:

    1. 重复从上一步骤开始的相同过程,向列中添加自定义 MIN(0.0)计算。

    2. 在第一个标记卡上,计算销售的窗口最小值,单位的窗口最小值,然后计算边界和边界百分比的最小值。每个值将放置在文本上:

      // Sales | Window Min
      WINDOW_MIN(SUM([Sales]))
      
      // Units | Window Min
      WINDOW_MIN(SUM([Quantity]))
      
      // Margin | Window Min
      WINDOW_MIN(SUM([Profit]))
      
      // % Margin | Window Min
      WINDOW_MIN(SUM([Profit])/SUM([Profit]))
      
    3. 将每个详情添加到[子类别]中。然后格式化您的工作表。

    4. 添加[First]作为筛选器,重复我们在步骤 4f 中讨论的步骤。

    结果是四个值,代表我们平行坐标中每个轴上可能的最低值(图 3-61)。

    一个将用作平行坐标底部的工作表

    图 3-61. 一个将用作平行坐标底部的工作表
  6. 现在您有了三张包含所需关键数据的工作表,需要将它们拼接在一个仪表板上。最佳的方法是在仪表板上使用垂直容器来完成此操作。

    理想情况下,此可视化应该与表格(是的,是表格)或一系列柱状图配对,显示各个值。但出于策略的考虑,我们将使用一个仪表板来显示单一可视化效果:

    1. 创建一个新的仪表板,并将其大小设置为 800 像素 × 500 像素。

    2. 添加一个垂直平铺容器。

      小贴士

      我们将在第十二章更深入地探讨垂直容器。现在,知道容器允许您将多个工作表放在内部,并精确控制每张工作表的高度就足够了。

    3. 添加视觉元素:在容器中,首先添加平行坐标的顶部,然后是平行坐标本身,最后是页脚。对于每个表,确保它使用整个视图。你还应该隐藏标题。

    4. 两个图例都没有提供太多价值,因此从仪表板中移除它们。

    5. 调整标题和页脚的间距。我们建议将标题的高度固定为 60,页脚为 30。

    6. 将 [子类别] 参数添加到仪表板上。

结果是一个非常干净的平行坐标图(图 3-62)。

一个单个仪表板显示标题、平行坐标和页脚

图 3-62. 单个仪表板显示标题、平行坐标和页脚

正如前面提到的,平行坐标图旨在总结特定组的性能在多个测量方面相对于其他组的情况。与散点图不同,它不提供两个或多个指标之间关系的具体细节。它也不描述其他组在同一指标上的表现。真正的目的是检查一个组在这些多个测量上的表现如何。

在我们的例子中,如果我们看 Appliances,我们可能会注意到这是一个平均水平的类别。在任何特定的指标上都没有突出!如果我们看另一个子类别 Copiers,我们会看到不同的模式(图 3-63)。

一个更新后的平行坐标视图,选择了 Copiers 子类别

图 3-63. 更新后的平行坐标视图,选择了 Copiers 子类别

Copiers 和 Appliances 一样,销售额平均,但这就是事情开始有所不同的地方。Copiers 的总单位是最低的,但它们产生了最高的总利润和非常高的利润百分比。结果是一张简洁地讲述了两个子类别不同故事的图表。虽然创建平行坐标图需要很多工作,但回报可能是巨大的!如果你不确定是否要继续创建平行坐标图,你总是可以使用柱状图。

结论

在本章中,您探索了比较数据的各种方式。通常我们比较单个维度的成员在单个度量上的情况。对于这种比较类型,我们建议您使用柱状图。

如果您的观众厌倦了柱状图,您可以尝试其他替代方案——虽然它们在技术上不是柱状图,但提供相同的目的。这些替代方案包括棒棒糖图和克利夫兰点图。事实上,并不总是需要改变图表类型成为完全不同的东西;有时候只需调整柱状图的格式使其看起来略有不同即可。

您还探索了如何在不明确使用排名计算的情况下计算排名。通过使用INDEX()进行排序,您可以更可靠且更快地计算唯一的排名(特别是在服务器上呈现时)。通过使用INDEX()进行单独的排名计算,您学会了如何显示排名随时间的变化,并显示该排名的变化,无论是上升还是下降。

您还学会了如何创建颠簸图表,以展示多个成员在时间序列上的顺序。在颠簸图中,您需要反转轴并使用 LOD 计算来识别线条的起始点和终点,以提供标签。您还专注于突出颠簸图中的单个成员,以强调洞察力。

接下来,您处理了需要比较多个维度或多个度量的情景。有些比较很直接。通过杠铃图,您学会了如何使用双轴图表和一些格式设置来突出多个度量之间的差异。

您还了解了多面板或小多面板图表。当行和列上有独特维度时,有时创建这些图表很容易。其他时候,我们面临使用单一维度创建网格的挑战。通过这个例子,您看到简单的算术和精心设计的计算可以轻松创建网格。您还学会了向网格添加标签并不总是那么简单。但再次地,我们可以利用 Tableau 的强大功能来确定视图的某个部分上的标记数量,并基于标记卡上的详细信息提供动态计算。

最后,您通过创建平行坐标图解决了多维数据的问题。这要求您对数据进行归一化处理。还需要一些额外的表来创建看起来像是平行坐标系统每个轴端点的值。通过这个例子,您掌握了WINDOW_MAX()WINDOW_MIN()FIRST()。最终的结果是一种可让您在多个维度上对比一个组与其他组的简明视觉化。

还记得我们在平行坐标策略中的最后一条建议:条形图适用于本章中所有的示例。条形图非常实用且多功能。然而,当您希望以更简洁的形式传达信息时,请考虑本章讨论的其他图表类型。

在下一章中,我们肯定会利用本章中的一些图表类型。但我们的重点将放在向您展示如何充分利用日期及其导出的计算上,而不是在数据更新时更新过滤器和参数。第四章还侧重于自动化洞察力,而不是更新数据时更新过滤器和参数。

第四章:处理时间

在我们辩论本书内容时,没有任何一章包含的示例比这个更多。我们有如此多关于时间的例子,以至于我们在几乎所有章节中都添加了它们,包括早期章节。

让时间变得有趣的是,我们可以在我们的数据中有一个与时间相关的单列,这使得我们的数据极其灵活。这是因为时间数据自然上具有层次结构。无论是秒、分钟、小时、天、周、月、季度还是年,包含时间数据的列都为您提供了其他任何数据列所不具备的灵活性。

在第三章中,我们讨论了分类数据。分类数据非常适合进行比较。关于所有比较的一个基本假设是一致性。当我们作为开发者可视化两个非时间基准的值时,我们的观众假定我们正在进行适当的比较。您的观众可能认为它们是同一时间段。

想象一下,您正在进行呼叫中心分析并比较总呼叫量。如果今天是 2020 年 5 月 17 日,您可能不希望将 2019 年和 2020 年的总呼叫量进行比较,因为它们的长度相差太大!无论我们是试图比较从当前年度开始到现在的日期,还是比较一个月的表现与一年前同月份的表现,我们的观众都会认为时间段的一致性是开发者与用户之间的一种默契。

本章的目标是讨论日期和日期时间的自然层次结构,并帮助您开发能够标准化和自动化您的可视化的计算方法。

在本章中,我们将为您详细介绍基础计算,使您成为日期计算的专家。在建立这种基础理解之后,我们将过渡到针对我们在处理日期数据时经常遇到的具体挑战的策略。请记住:在本书的其余部分,您将看到大量利用日期的示例。

理解日期和时间

Tableau 为用户提供了一个非常简单的界面来处理时间。默认情况下,Tableau 创建一个层次结构,允许用户轻松导航到任何日期时间的可能性。如果您将任何日期或日期时间字段拖放到可视化中,该字段将自动按年份聚合显示。这是 Tableau 中日期的默认设置。

除了年份作为默认设置外,Tableau 还将时间值放入层次结构中。如果您深入研究这种层次结构,将会通过季度、月份、周、日、小时、分钟和秒向您的视图添加额外的细节。

提示

这种层次结构也将提供给您的观众。如果您不需要该功能,则需要创建自定义日期计算——这是我们强烈建议的。

尽管时间字段的默认设置是年份,您可以右键单击编辑年份计算并选择适当的时间。

如果您不希望年份成为默认值,您可以在 Mac 上点击并按住 Option 键,或者在 PC 上右键单击,同时将时间字段拖放到视图中。从那里,您可以选择感兴趣的日期部分或值(图 4-1)。

点击并拖动日期到视图后,右键单击更改日期类型后您将看到的视图(左)。点击并按住 Ctrl 键(或 Mac 上的 Option 键)拖动日期到视图后您将看到的视图(右)。

图 4-1. 点击并拖动日期到视图后,右键单击更改日期类型后您将看到的视图(左);点击并按住 Ctrl 键(或 Mac 上的 Option 键)拖动日期到视图后您将看到的视图(右)

日期部分和日期值

您可以处理日期的方式开启了许多可能性。当您查看 图 4-1 时,您会看到许多处理日期的选项。您可以选择像年份(2015)、季度(Q2)或月份(May)这样的日期部分,也可以选择像季度(Q2 2015)、月份(May 2015)或日期(May 8, 2015)这样的日期。它们之间的区别在于您要么选择日期的特定部分,要么截断日期到最近的日期值。

日期计算

无论是确定日期部分还是截断到的值,Tableau 通过 DATEPART()DATENAME()DATETRUNC() 函数在计算字段中提供了相同的灵活性。DATEPART() 返回感兴趣的日期部分的单个数值。例如,如果设置为返回月份,则 2015 年 5 月 8 日将返回值 5。DATENAME() 返回感兴趣的日期部分的字符串,因此如果设置为返回月份,则 2015 年 5 月 8 日将返回 May。这是一个微妙的区别,但信息显示的方式将会不同。与 DATEPART()DATENAME() 不同,DATETRUNC() 返回实际的日期或日期时间值。使用 DATETRUNC(),值将四舍五入或截断到最近的指定日期值。

现在,如果前面的两段听起来耳熟能详,那是因为我们希望以此方式向您展示下一个要点。虽然 Tableau 视图上的字段可能显示为 YEAR、QUARTER 或 MONTH,但实际上它们在幕后使用这些计算。让我们来看看图 4-2、4-3 和 4-4,您将看到在列上有月份的日期部分和年份的日期值。如果您双击其中任何一个值,Tableau 将显示底层计算。

首先,在列架上有一个离散的月份和连续的年份。这些字段看起来漂亮而干净,并且易于理解。但是在每个字段的底层实际上都是更复杂的函数。

列架显示离散月份和连续年份

图 4-2. 列架显示离散月份和连续年份

如果您双击离散字段 MONTH(Order Date),将会打开即席计算编辑器。在本书中我们会经常使用这个编辑器。图 4-3 展示了 MONTH(Order Date) 的基础计算。原来这个计算使用了 DATEPART() 函数,并指定 month 作为函数的第一个参数。这有助于返回订单日期的月份部分。

 函数构建了离散  字段的基础

图 4-3. DATEPART() 函数构建了离散 MONTH(Order Date) 字段的基础

如果您双击年份字段 YEAR(Order Date) 的连续字段,则底层函数是 DATETRUNC(),如前所述,将字段舍入到指定级别。这在 图 4-4 中有所显示。在这种情况下,year 将返回 [Order Date] 年份的 1 月 1 日。

 函数构建了连续  字段的基础

图 4-4. DATETRUNC() 函数构建了连续 YEAR(Order Date) 字段的基础

观察这些计算的好处在于,它帮助您在使用 Tableau 中的任何时间字段的默认设置时学习日期计算。同样出色的是,您可以快速更改这些计算——甚至在会议中共享见解时进行。

日期层次结构和自定义日期

您会注意到 图 4-4 中的所有日期都包括层次结构——这是位于列字段名称左侧的小 + 按钮。默认情况下,日期字段将自动创建这些层次结构。当您将日期字段添加到视图时,观众将能够与该日期层次结构进行交互。如果您希望与日期字段的特定层次结构交互,则处理日期可能会有所挑战。

幸运的是,有方法可以绕过自动化日期层次结构。您可以通过创建自定义日期来实现:右键单击数据源中的原始时间字段,选择创建 → 自定义日期(图 4-5)。然后,您必须选择感兴趣的日期部分或日期值。创建了这个字段后,将其放置在视图中的某个位置,您会注意到日期没有关联的层次结构。

创建自定义日期的菜单操作

图 4-5. 创建自定义日期的菜单操作

离散日期与连续日期

为了更好地理解 Tableau 中如何直观表示日期,让我们看看四个可视化,在其中我们在水平轴上变化了两个组成部分。让我们看看日期部分和日期值之间的差异,也看看两种图表类型的离散和连续轴如何变化。这为您提供了四种探索选项(图 4-6)。

视觉输出因日期是离散还是连续以及您是否使用日期部分或日期值而异

图 4-6. 视觉输出因日期是离散还是连续以及您是否使用日期部分或日期值而异

您可以看到仅更改两个选项如何产生操作方式完全不同的四个图表。两个重要的差异值得重申:日期部分选择仅返回日期字段的单个部分,日期部分的默认选项通常是离散的。这会创建分隔每个日期部分的区间

您仍然可以将离散日期部分转换为连续以创建连续轴。图表类型看起来相似,但轴的功能不同。如果您查看右上角的连续日期部分可视化,您会发现每个月的轴刻度位于月份名称的中心。而左上角的离散日期部分,可视化具有每个月的桶,并且没有刻度与每个月的值对齐。这些刻度使我们的观众更容易理解他们正在查看的月份,因此出于这个原因,我们更喜欢使用连续字段。

这也适用于您的日期值选项。如果您选择月份的日期值,Tableau 默认会将每个值舍入到每个月的开始。这样可以查看数据的逐年月视图。默认情况下,日期值是连续字段,但您可以将它们转换为离散字段。请注意,在图 4-6 左下角的轴上,轴是不同的标签名称桶。然而,在右下角的连续日期值中,显示了一个带有刻度的单一轴。

提示

请记住,离散维度将仅为存在的数据创建标题。如果日期中存在间隔,您可能希望使用连续轴来保留任何未表示的日期。

在离散日期轴上有一个位置。如果您计划使用柱状图,可以使用离散日期部分。如果您使用折线图,我们建议使用连续轴。

调用频率:芯片和螺栓呼叫中心案例研究

汽车零部件制造商 Chips and Bolts (CaB)的呼叫中心正寻求提高其客户满意度得分。执行官们需要在评估他们的绩效之前更好地理解基础知识。作为第一步,他们想要知道他们接到了多少电话。他们希望在 2.5 年的时间窗口内以 15 分钟为间隔追踪这些数据,以更好地了解呼叫量可能如何与客户满意度调查相关联。如何表示这些信息?

在 Tableau 中处理时间并不是没有挑战的。但在 Tableau 中轻松将小时和分钟放在图表中:如果您使用的是日期时间字段,Tableau 会自动将其放置在日期时间层次结构中。例如,创建一个关于总呼叫量的图表并不是那么困难。

如前所示的连续日期部分示例,将单个日期部分转换为连续轴以绘制多个时间段是相当容易的。使用连续日期值截断日期到特定日期部分,但有时您希望做相反的操作。在这个例子中,我们希望为小时、分钟和天创建一个连续轴。看看图 4-7,显示了在 2.5 年内每 15 分钟从呼叫中心接收到的总入站电话呼叫。

每 15 分钟总呼叫量的面积图

图 4-7. 每 15 分钟总呼叫量的面积图

对于前四个策略,您将把日期时间转换为各种聚合级别。要完成最终的分析,按每 15 分钟聚合的连续轴上的呼叫数据,您需要使每个日期都完全相同,但保留数据中每行的时间。

策略:按小时确定总通话时间

在这个策略中,我们将解决处理时间的挑战,特别是在连续轴上。该策略的结果显示在图 4-8 中。

每年销售按小时绘制的线图

图 4-8. 每年销售按小时绘制的线图

在这个策略中,我们将按小时绘制总呼叫量,按年份分类:

  1. 创建一个新的工作表,并设置为适合整个视图。

  2. 将[开始日期时间]放在列上。然后将显示更改为离散小时。

  3. 如果您使用的是 Tableau Desktop 2020.1 或更早版本,您的数据源已经带有[记录数]字段。如果您使用的是 Tableau 2020.2 或更新版本,请创建一个名为**[记录数]**的计算字段:

    // Number of Records
    1
    
  4. 将[记录数]作为总和添加到行中。

  5. 将[开始日期时间]的离散年份添加到颜色中。

这样做可以让您看到,无论是哪一年,呼叫量都在早上 7 点左右开始上升,但真正在早上 8 点左右增加。您还可以看到,2020 年的呼叫量全面下降。

这项分析缺少的是更深入的调查。通话是否发生在每个小时的开头或半小时?如果您正在制定人员配备计划,确切的时间可能更有用。

策略:创建一个按分钟测量总通话时间的图表

我们将通过创建一个可视化来扩展之前的策略,该可视化绘制了每天按分钟计的总通话量:

  1. 按小时的 HOUR 分层上点击“+”对数据进行排序。图 4-9 显示了结果可视化。

    一条按小时和分钟分段销售的折线图,每年的三年数据

    图 4-9. 一条按小时和分钟分段销售的折线图,每年的三年数据

    结果显示了一天中的通话次数,但现在我们有两个离散的轴:顶部轴按小时分割,第二个轴按分钟,每小时还创建了高达 60 个单独的分区。这仅在数据存在时创建分区。因此,如果小时 0 没有数据,分钟 53(事实上没有),则分区不存在。

  2. 添加任何缺失的分区。如果要包含任何指定日期部分的缺失分区,请右键单击该日期部分并选择显示缺失值(图 4-10 右键单击)。

要显示缺失值,请右键单击日期字段并选择显示缺失值

图 4-10. 若要显示缺失值,请右键单击日期字段,然后选择显示缺失值

如果您查看图 4-9,您会看到您的可视化具有两组离散的箱柜:一个用于小时,一个用于分钟。对于小时和分钟使用离散值是困难的,因为您最终会得到 1,440 个分区(24 小时 × 60 分钟)。

那么如何创建一个单一的轴?在这个计算中,我们将依赖于两个常用的计算:DATEADD()DATEDIFF()

DATEADD() 添加或减去日期或时间,并需要三个输入:

  • 指定的日期部分,用引号括起来且小写。这显示我们要添加到日期中的单位,无论是秒、小时还是年。

  • 任何整数,表示我们想要添加或减去的时间量。如果指定了负数,将从值中减去时间。

  • 初始日期时间字段。

这个非常多才多艺的计算是我们经常使用的。

DATEDIFF() 根据感兴趣的日期部分计算两个日期之间的差异,并需要三个输入:

  • 指定的日期部分

  • 开始日期

  • 结束日期

您可以指定各种日期部分:yearquartermonthdayofyeardayweekdayweekhourminutesecondiso-yeariso-quarteriso-weekiso-weekday

提示

欲获取更多技术帮助,请阅读Tableau 有关日期函数的文档

策略:创建一个连续的按秒计的日期时间轴

现在,您将创建一个允许您拥有单一时间轴的计算:

  1. 创建名为**[time]**的计算字段,并编写以下计算:

    // time
    DATEADD(
        "day",
        DATEDIFF(
            "day",
            [Start Date Time],
            {MAX(DATETRUNC("day", [Start Date Time]))}
        ),
        [Start Date Time]
    )
    

    此计算将更改数据集中所有日期为数据集中的最大日期。时间(小时、分钟和秒)保持不变。

  2. 创建如下连续轴:

    1. 移除所有列上的计算。

    2. 将[time]字段添加为列的确切日期。

    这将生成图 4-11 中的可视化。

使用连续轴每秒的总呼叫量

图 4-11. 使用连续轴每秒的总呼叫量

您现在有了一个连续的轴。然而,这个分析是秒级的,这并不是非常有用或深刻的。与其进行每秒的分析,也许您想捕捉每 15 秒的数据。

策略:为 15 秒间隔创建连续的日期时间轴。

您将继续探索日期时间,创建一个自定义计算,基于每天每 15 秒的呼叫进行聚合:

  1. 使用我们之前策略的可视化。

  2. 创建一个新的计算并命名为**[time / 15 sec]**

  3. 撰写以下内容:

    // time / 15 sec
    DATEADD(
      "second",
      -(DATEPART("second",[time]) % 15),
      [time]
    )
    

    这里首先计算时间字段的秒数。然后使用模运算符(%)计算每 15 秒的总秒数。因此,不是计数到 60,而是计数到 14;然后,而不是继续到 15,重新从 0 开始。

    此计算的结果是将日期时间截断为最近的 15 秒。

  4. 单击并拖动[time / 15 sec]以替换时间字段为连续轴。这将生成图 4-12 中的可视化。

使用连续轴每 15 秒的总呼叫量

图 4-12. 使用连续轴显示每天每 15 秒的总呼叫量

您开始看到类似于每小时绘图的模式,但这个视图仍然过于详细。与其每 15 秒查看一次,不如每 15 分钟查看一次?

策略:为 15 分钟间隔创建连续的日期时间轴。

当我们开始处理这些数据时,我们发现每小时 LOD 的信息很有趣,但我们需要看更多信息以便更具体。从那里开始,我们看到了每分钟和每 15 秒的图表。这些图表太详细了。在这个策略中,我们创建了一个计算,将时间截断为每 15 分钟。结果将是比前三个更具可操作性的图表。

  1. 创建名为**[time / 15 min]**的新计算。

  2. 撰写以下内容:

    // time / 15 min
    DATEADD(
      "minute",
      -(DATEPART("minute", [time]) % 15),
      DATETRUNC("minute", [time])
    )
    

    [time / 15 min]的格式看起来几乎相同,只是我们用minute替换了second,我们的第三个参数现在是DATETRUNC("minute", [time])而不是time。这是因为我们使用[time / 15 sec]在 Tableau 中已经是最低级别(秒)。因为我们在更高级别的数据上工作,我们需要将所有值汇总到最近的分钟。

  3. 向最近的分钟卷起:

    1. 点击并拖动以用[时间/15 秒]替换[时间/15 分钟]。

    2. 在标记卡上,单击路径,将线型更改为步进。我们喜欢使用步进路径而不是直线,因为我们知道该线表示该 15 分钟增量中的所有值。

    最后,在图 4-13 中,我们有一个单一的轴,可以看到数据在 15 分钟间隔内的模式。这个图表为我们提供了关于每天早晨通话快速增长速度的大量信息,比最近小时(但不太精确)要精确得多。

    每天每 15 分钟的总通话次数,使用连续轴

    图 4-13. 每天每 15 分钟的总通话次数,使用连续轴

    你仍然有代表 2020 年的红线,比所有其他值都低得多。这可能是因为我们仅收集到了 2020 年 4 月 14 日为止的数据。由于业务可能是季节性的,比较类似的时间段可能是值得的。但在我们这样做之前,我们希望深入了解每 15 分钟的通话次数。

  4. 让我们看看每 15 分钟的通话次数,通过调整颜色上的维度来按星期几进行。右键单击 YEAR(开始日期时间),将日期类型更改为工作日的离散日期部分(这位于日期部分的“更多”部分下)。之后可以随意编辑颜色。图 4-14 显示了结果可视化。

每天每 15 分钟的总通话次数,按星期几着色,并使用连续轴

图 4-14. 每天每 15 分钟的总通话次数,按星期几着色,并使用连续轴

热图(突出显示表格)

图 4-14 中的信息非常有用,但要阅读这些洞察力,行数实在是太多了。当我们处理具有八条或更多线条的折线图时,我们会立即考虑其他图表类型。在这种情况下,我们选择的图表类型是热图—尽管 Tableau 称之为突出显示表格。热图允许观众通过颜色、强度或色调来看待变化,而不是通过方向。这个热图显示为一个矩阵,以便任何人都能轻松追踪维度中单个成员的变化。

策略:构建一个基本的热图

让我们创建一个重新构想前一战略折线图分析的热图:

  1. 创建一个新工作表。

  2. 将标记类型更改为方块。

  3. 通过使用[开始日期时间]创建一个自定义的工作日日期部分,并将其放置在列上。

  4. 将[时间/15 分钟]放在行上,但选择小时日期部分。

  5. 将[记录数]放在颜色上。

  6. 选择适合你的调色板。我们选择了一个自定义调色板(我们将在第十二章中更详细地讨论它)。

    结果是图 4-15 中的热图。

使用热图显示每天每小时和周几的总通话量

图 4-15. 使用热图显示每天每小时和周几的总通话量

再次看到通话从上午 8 点开始增加,通过颜色变化。但您还能看到周一特别是早上非常繁忙。周末较为宁静,周日异常缓慢。我们还看到通话在下午 5 点后开始减少(图表中显示为 17)。

策略:创建更详细的热图

即使数据相当精细,热图也可以非常有帮助。随着可视化的复杂性和细节增加,热图的价值也在不断提高。按照以下步骤为您的热图添加更多细节:

  1. 复制前一策略中的可视化。

  2. 通过使用[开始日期时间]创建一个定制日期以用作月份的日期部分。

  3. 将其放在列上并放在您的工作日计算左侧的列上。

  4. 在行上单击 HOUR(time / 15 min)上的+。这将显示四舍五入到最近 15 分钟的时间。

  5. 您会注意到仪表板上没有值的地方有些空白。如果您想为这些位置添加标记,您需要使用查找计算:ZN(LOOKUP(SUM([Number of Records]),0))。(我们将在第六章中更详细地讨论这个。)将此计算添加到颜色中。

  6. 格式化您的列和行标题以使其更易读。图 4-16 显示了生成的可视化效果。

使用热图显示每天每 15 分钟的总通话量按月和周几

图 4-16. 使用热图显示每天每 15 分钟的总通话次数按月和周几

我们选择在小时和月份级别上设置分隔符。这使您的观众可以快速导航到分析段落。

该图表显示了按月和周几每 15 分钟递增的通话量。那么,您能从这些数据中获取哪些见解呢?

  • 平均每年几乎每个月的工作日早上 8 点通话量增加。

  • 更多通话倾向于在夏季晚些时候发生。

  • 无论一周的哪一天,通常一月份的通话量都很大。

  • 在四月、七月和十二月,周一的通话量较多。这可能是因为周末暖气或空调出现故障,导致周一需要服务。

从这种可视化中识别通话模式可能对人员配备非常有帮助。周一总是很忙,但在四月、七月和十二月这些日子加强人员配备可能是有意义的。由于夏季晚些时候的通话量较高,可能需要在下午 6 点而不是下午 5 点之前进行人员配备。这可以通过在 11 月和 12 月的非周一减少工作时间来抵消。

我们喜欢热力图。它们是代表时间的被低估的工具,并且在数据可以用一个维度的许多成员表示时特别有用。

年初至今比较值:CaB 呼叫中心案例研究

现在呼叫中心更好地理解了呼入呼叫量,工作人员希望了解这种变化随时间的变化。现在是四月,他们想要在分析中看到当前年份的数据。您如何创建与前几年相比的同类比较?

在这个案例研究中,我们将继续分析呼叫中心的数据。在最终分析中,我们关心的是跨年适当的比较。为此,让我们回到我们按年每 15 分钟的总呼叫量绘制的图表(图 4-17)。

每 15 分钟按年的总呼叫量

图 4-17。每 15 分钟按年的总呼叫量

我们看到呼叫量有所下降,但这是因为 2020 年与其他年份处于不同的时间点。部分原因是我们的数据仅截至 2020 年 4 月 14 日。可能更公平的比较是将 2018 年、2019 年和 2020 年截至 4 月 14 日的呼叫量进行比较,而不是它们的整体总数。

这是我们经常面临的挑战,无论数据类型如何:能够比较相似的时间段。那么你如何解决这个问题呢?通过一个设计良好的日期计算。

接下来两个策略的目标是创建一个计算,将最近一年的最近日期与前几年的相同日期进行比较。对于下一个策略,您将重新创建一个显示进度到总体的柱状图。这将使您的观众能够在同时显示可比较的年初至今值的同时关注总体值。然后,我们将在我们的折线图上应用一个过滤器,以进行适当的年初至今比较,而不是在图 4-18 中显示的可视化。

显示总呼叫量与前两年总呼叫量的可视化(顶部),以及三年同一天的总呼叫量(底部)

图 4-18。显示总呼叫量与前两年总呼叫量的可视化(顶部),以及三年同一天的总呼叫量(底部)

策略:使用两个柱状图显示总体进展

在这个策略中,您将使用柱状图来显示总体进展:

  1. 按以下方式构建计算:

    1. 将日期归一化为同一年,创建名为**[开始日期时间 | 同一年]**的计算:

      // Start Date Time | Same Year
      DATEADD(
        "year",
        DATEDIFF("year", {MAX([Start Date Time])}, [Start Date Time]),
        DATETRUNC("day", [Start Date Time])
      )
      
    2. 创建名为**[开始日期时间 | 同一年 | TF]**的第二个计算。这是一个布尔值,用于检测一个日期是否小于或等于最近一年的同一天的年初至今:

      // Start Date Time | Same Year | TF
      DATEPART("dayofyear", [Start Date Time | Same Year])
        <= DATEPART("dayofyear", {MAX([Start Date Time])})
      
    3. 创建名为**[总呼叫量 | 年初至今]**的第三个计算:

      // Total Calls | YTD
      SUM(
        IF [Start Date Time| Same Year | TF]
        THEN [Number Records]
        END
      )
      

    这将为每一年返回年初至今的值。

  2. 构建可视化:

    1. 将[记录数量]添加到行。

    2. 在行架上的 [Number of Records] 右侧添加 [Total Calls | YTD]。

    3. 创建一个同步双轴图表。

    4. 将 [Start Date Time] 作为离散年名称添加到列和颜色中。

    5. SUM([Number of Records]) Marks 卡片上的不透明度设置为 40%。

    6. 格式化您的可视化图表,删除列和行分隔线,添加较暗的列轴标尺和刻度线,样式化网格线,仅显示左轴,并重命名轴。

    7. 在 AGG(Total Calls | YTD) Marks 卡片上显示标签。

    这将导致 图 4-19 中的柱状图。

显示截至当前日期的年度进展的可视化结果

图 4-19. 显示最近一年的截至当前日期的年度进展的结果可视化。

在这个可视化中,我们在聚合内嵌了一个 IF 语句,以在计算内执行过滤。这是您应该经常做的事情,以使可视化变得动态。随着年度的推移,我们将看到 2020 年的柱子增加。2018 年和 2019 年的 100%不透明柱子也将继续增长。这些柱子最终将在同一轴上显示的 40%不透明柱子值处达到顶峰。

回顾 图 4-17。该可视化显示了 2018 年和 2019 年所有日期的总通话次数。它还仅显示了 2020 年 4 月 14 日之前的日期。这不是一种直接对比。如果我们能够比较这些值,那将是很好的。

策略:在线图上比较类似期间。

与之前的策略不同,我们在这里使用一个 IF 语句来过滤我们的数据,我们将明确地在筛选架上放置一个计算。我们这个策略的目标是使用本章早些时候创建的可视化,并添加一个年度筛选:

  1. 复制您在前述连续数据策略中展示的最终可视化图,如 图 4-13 所示。

  2. 确保您已完成上述策略的步骤 1a 和步骤 1b。

  3. 编辑 [Start Date Time] 的工作日,当前在颜色上的离散年日期类型。

  4. 将 [Start Time Date | Same Year | TF] 添加到筛选架上,选择 True,并点击确定。

  5. 编辑轴并移除轴标题。图 4-20 显示了结果。

显示每天每 15 分钟总通话次数的可视化图,过滤到 2018 年、2019 年和 2020 年的同一年同一天

图 4-20. 显示 2018 年、2019 年和 2020 年同一天过滤的每天每 15 分钟总通话次数的可视化图。

当将我们前两个策略的结果并列时,最终结果是一个迷你的年度仪表板,允许您的受众追踪今年以来的总呼叫量,以及呼叫发生的时间(图 4-21)。

显示 2018 年、2019 年和 2020 年每天同一天的总呼叫量及每 15 分钟的比较的迷你仪表板

图 4-21。显示 2018 年、2019 年和 2020 年每天同一天的总呼叫量及每 15 分钟的比较的迷你仪表板

自动化报告

在这一节中,我们将讨论通过使用自定义计算来自动化报告。无论是呼叫中心数据、财务报告还是学生注册人数,我们花费大量时间开发在月底自动更新的表格。虽然实施这些表格需要一点时间,但这些努力可以大大节省时间。Tableau 的新手用户最常见的一个行为是手动更新数据,然后转到仪表板并编辑过滤器以包含更新后的数据。下一个策略的目标是展示如何根据仪表板上的数据自动更新仪表板。

月对比月和年对比年变化的自动化报告:CaB 呼叫中心案例研究

现在 CaB 呼叫中心开始了解年度整体呼叫量,员工们希望更仔细地查看制造周期和大订单对他们的满意度评分的影响。他们要求增加一个月对比一个月的视图,除了已提供的年度对比报告。这个视图将显示更详细的数据。你将如何构建一个依然易于理解的报告?你将采取哪些步骤来自动化这个报告?

看看图 4-22 中的表格。它显示了每天平均呼叫量以及月对比月和年对比年的呼叫变化百分比。该表格显示了 2019 年 3 月至 2020 年 3 月的数据。我们决定不报告 4 月的任何内容,因为我们的数据报告仅到 4 月 14 日。当我们有 4 月最后一天的数据报告时,报告将自动更新,以便表格显示 2019 年 4 月至 2020 年 4 月的指标。此外,该表格显示了按呼叫原因分解的呼叫量,并进行总计汇总。

2019 年 3 月至 2020 年 3 月每天平均呼叫量及呼叫变化百分比,月对比月和年对比年

图 4-22。2019 年 3 月至 2020 年 3 月每天平均呼叫量及呼叫变化百分比,月对比月和年对比年

策略:自动滚动表

在这个策略中,您将重新创建图 4-22 中显示的表格。这将始终显示基于最后条目日期的最后 13 个完整的月份:

  1. 为此可视化构建基本表格。为我们的表格创建指标,**[Calls/Day]**

    // Calls/Day
    SUM([Number Records])/COUNTD(DATETRUNC("day", [Start Date Time]))
    

    将[Calls/Day]添加到文本中。将[Call Reason]添加到列中,并按每天呼叫次数降序排列维度。创建一个名为**[Start Date Time | Month]**的新自定义日期,返回月度日期值。将其作为离散值放置在列中。添加列总计,并将它们放置在顶部,如图 4-23 所示。

    要将总计添加到列的顶部,请选择分析 → 总计,然后选择显示列总计和列总计到顶部

    图 4-23. 要将总计添加到列的顶部,请选择分析 → 总计,然后选择显示列总计和列总计到顶部
  2. 格式化您的表格,以便仅存在行分隔符,如图 4-24 所示。仅为您的总计添加带色块。这将成为您的月对月计算、年对年计算以及将要创建的自动化的基础。

    表格显示每天按呼叫原因和月份分类的呼叫次数

    图 4-24. 表格显示每天的呼叫次数按呼叫原因和月份分类
  3. 创建月对月计算。这是通过表格计算完成的。将此新计算命名为**[Calls/Day | % Change 1]**

    // Calls/Day | % Change 1
    (ZN([Calls/Day]) - LOOKUP(ZN([Calls/Day]), -1))
    /
    ABS(LOOKUP(ZN([Calls/Day]), -1))
    

    此计算基于前值创建百分比变化,即前一个月的值。因为企业可能是季节性的(许多企业都是如此),通常最好将值与前一年进行比较。要执行此操作,请创建一个名为**[Calls/Day | % Change 12]**的新计算:

    // Calls/Day | % Change 12
    (ZN([Calls/Day]) - LOOKUP(ZN([Calls/Day]), -12))
    /
    ABS(LOOKUP(ZN([Calls/Day]), -12))
    

    您会注意到,计算略有不同:–1 已更改为–12. 双击[Calls/Day | % Change 1]和[Calls/Day | % Change 12]。这将转换表格以包括[测量名称],而文本现在为[测量值]。需要更新[Calls/Day | % Change 1]和[Calls/Day | % Change 12]中的表格计算,但您可以等到所有视图组件都准备好后再执行此操作。

  4. 现在让我们只展示完整的月份。通过编写一个名为**[Start Date Time | Max Date]**的计算来计算[开始日期时间]的最大日期:

    // Start Date Time | Max Date
    {MAX([Start Date Time])}
    

    在这里,我们使用一个 LOD 计算来计算数据集中的最大日期。我们将监视此日期,以便知道何时更新我们的表格。这将允许您动态计算相关的时间段。您只需找到动态表格的起点和终点。首先计算上个完整月份的最后一天,并将计算命名为**[Last Day of Last Full Month]**

    // Last Day of Last Full Month
    DATETRUNC("month", [Start Date Time | Max Date] + 1) - 1
    

    使用此计算来创建一个布尔值以过滤当前月份的数据——当前月份尚未完成。创建一个名为**[Start Date Time | Full Months]**的计算:

    // Start Date Time | Full Months
    [Start Date Time] <= [Last Day of Last Full Month]
    

    将此计算添加到筛选器中,并选择 True。

  5. 将此可视化结果筛选至最近的 13 个完整月。创建一个名为**[开始日期时间 | 最近 13 个月]**的新计算:

    //Start Date Time | Last 13 Months
    [Start Date Time] > DATEADD("month", -12,
      [Last Day of Last Full Month] + 1) - 1
    

    将此计算放置在[开始日期时间 | 月]的左侧。右键单击假标题并选择隐藏。然后从同一菜单中取消选择显示标题(图 4-25)。

    通过取消选择显示标题隐藏标题

    图 4-25. 通过取消选择显示标题隐藏标题
  6. 通过编辑[每天呼叫数 | %变化 1]和[每天呼叫数 | %变化 12]表计算设置在[度量值]标记卡中,只取消选择[呼叫原因],如图 4-26 所示,完成表格计算。

    [每天呼叫数 | %变化 1]和[每天呼叫数 | %变化 12]的表计算设置

    图 4-26. [每天呼叫数 | %变化 1]和[每天呼叫数 | %变化 12]的表计算设置
  7. 确保将月度同比和年度同比计算都格式化为百分比。最后,右键单击并编辑别名(图 4-27)。将[每天呼叫数 | %变化 1]更改为 MoM(月同比),将[每天呼叫数 | %变化 12]更改为 YoY(年同比)。

右键单击[度量名称],选择编辑别名

图 4-27. 右键单击[度量名称],选择编辑别名

所有这些工作的结果(如前面显示的图 4-22)是一个简单的表格,提供了许多重要见解,并且每月自动更新。

大多数时候,作为开发人员,我们几乎不考虑一年、一个月或甚至一周的定义是什么意思。我们只是假设一年从 1 月 1 日到 12 月 31 日。但在组织中,财政年度可以用许多方式定义。下一节将简要介绍在 Tableau 中处理财政日期的工作原理。

非标准日历

财政年度可以在任何时间开始;可以是 1 月 1 日、6 月 5 日,甚至是标准日历年的第五个星期一。这完全取决于具体情况。Tableau 提供了一些灵活性。

如果您的日历年从月初开始,可以通过右键单击,然后导航到默认属性 → 财年起始日 → 财年月份(图 4-28)。这简化了与该特定日期度量相关联的层次结构。

右键单击日期以更改财年起始日的默认属性。在此示例中,财年起始日设为六月。

图 4-28. 右键单击日期以更改财年起始日的默认属性(在此示例中,财年起始日设为六月)

一些组织使用标准的格里高利日历作为其财政年度:从 1 月 1 日至 12 月 31 日。然而,其他组织从每月开始的第一天开始财政年度或月份。因此,如果 1 月 1 日是星期二,则财政年度将从 12 月 30 日开始。这种日历类型称为ISO-8601。虽然名字很奇怪,但请知道该日历基于周。您可以通过右键单击视图中的日期值并选择 ISO-8601 周为基础来指定日历类型。(在本节中我们称之为ISO 日历。)

在图 4-29(#data_in_a_standard_calendar)和图 4-30(#data_in_an_iso_calendar)中,您可以看到标准日历数据如何与 ISO 日历略有不同。

标准日历中的数据

图 4-29. 标准日历中的数据

ISO 日历中的数据

图 4-30. ISO 日历中的数据

策略:构建一个以六月 1 日为财政年度起点的月度柱状图。

让我们花点时间来建立一个以六月为财政起点的可视化。为了简单起见,想象你正在构建一个柱状图,显示每月和财政年度的总销售额。您将复制 Figure 4-31:

  1. 连接到样本 - 超级商店数据集。

  2. 复制[Order Date]字段,并将其命名为**[Order Date | June]**

  3. 右键单击[Order Date | June]并将默认财政年度开始日期更改为六月。

  4. 将[Order Date | June]添加为按月连续数据值到列中。

  5. SUM([Sales])添加到行中。

  6. 将年份添加到颜色中([Order Date | June])。

  7. 将标记类型更改为柱形图。

  8. 右键单击 2016 年 9 月柱形图,并向标记添加注释,显示日期和总销售额。

按月销售,按财政年份着色,使用六月开始的财政年度

图 4-31. 按月销售,按财政年份着色,使用六月开始的财政年度

可视化 4-5-4 日历:Office Essentials 案例研究

我们的大型零售店 OE 一直依赖与日历年相关的数据指标。该公司希望重新设计一些标准报告,现在采用 4-5-4 日历。您如何完成此任务?

零售商通常使用4-5-4 日历。这种日历允许他们通过将一年分为基于重复的四周、五周和四周的月份来比较销售额。零售商使用此日历是因为假期往往重叠,并且相似月份中显示相同数量的星期六和星期日。4-5-4 销售日历并非完美:因为该日历基于 52 周或 364 天,这每年多余一天需要考虑。为了调整此问题,每五到六年将向财政日历添加一周。这发生在 2012 年和 2017 年,并将在 2023 年再次发生。

4-5-4 日历年随年而异。当二月一日是在星期四、星期五或星期六时,日历年在二月一日后的第一个星期天开始。如果二月一日是在星期天、星期一、星期二或星期三,则日历年在二月一日所在周的星期天开始。

下一个策略专注于构建 4-5-4 零售日历的日期组件。这些组件包括年度周数、年度月份、年度季度以及季度周数。在构建完组件后,将建立可视化突出显示其中一些计算。

策略:使用 4-5-4 零售日历构建条形图

  1. 创建一个计算,计算二月一日。将此计算命名为**[Feb 1]**

    // Feb 1
    DATEADD("month", 1, DATETRUNC("year", [Order Date]))
    
  2. 基于二月一日是否在周三之后计算日历年的开始日期。将此计算命名为**[454 Year Start]**

    // 454 Year Start
    IF DATEPART('weekday', [Feb 1]) > 4
    THEN DATETRUNC('week', DATEADD('week', 1, [Feb 1]))
    ELSE DATETRUNC('week', [Feb 1])
    END
    
  3. 确定去年的 4-5-4 日历年的开始日期,计算去年的二月一日。将此计算命名为**[Feb 1 | PY]**

    // Feb 1 | PY
    DATEADD('year', -1, DATEADD("month", 1, DATETRUNC("year", [Order Date])))
    

    计算前一个日历年的开始日期。我们将使用此计算与当前年份的值来确定日历年的周数。将此计算标记为**[454 Prior Year Start]**

    // 454 Prior Year Start
    IF DATEPART('weekday', [Feb 1 | PY]) > 4
    THEN DATETRUNC('week', DATEADD('week', 1, [Feb 1 | PY]))
    ELSE DATETRUNC('week', [Feb 1 | PY])
    END
    
  4. 解析年度零售周:

    // Retail Week
    IF [454 Year Start] <= [Order Date]
    THEN DATEDIFF('week', [454 Year Start], [Order Date]) + 1
    ELSE ({FIXED [Feb 1] : MAX(DATEDIFF('week',
      [454 Prior Year Start], DATETRUNC('year',[454 Year Start])))}
    +
    DATEPART('week', [Order Date])
         )
    END
    
  5. 现在您有了这周的数据,您可以创建像零售季度、零售季度月、零售季度周、零售月和零售月周等组件。逐步构建每一个这些计算:

    //Retail Quarter
    FLOOR(([Retail Week]-1)/13)+1
    
    //Retail Week of Quarter
    (([Retail Week] - 1) % 13) + 1
    
    // Retail Month of Quarter
    IF [Retail Week of Quarter] <= 4
    THEN 1
    ELSEIF [Retail Week of Quarter] > 4
    AND [Retail Week of Quarter] <= 9
    THEN 2
    ELSEIF [Retail Week of Quarter] > 9
    AND [Retail Week of Quarter] <= 13
    THEN 3
    END
    
    //Retail Month
    IF [Retail Week] <= 4
    THEN "February"
    ELSEIF [Retail Week] > 4 AND [Retail Week] <= 9
    THEN "March"
    ELSEIF [Retail Week] > 9 AND [Retail Week] <= 13
    THEN "April"
    ELSEIF [Retail Week] > 13 AND [Retail Week] <= 17
    THEN "May"
    ELSEIF [Retail Week] > 17 AND [Retail Week] <= 22
    THEN "June"
    ELSEIF [Retail Week] > 22 AND [Retail Week] <= 26
    THEN "July"
    ELSEIF [Retail Week] > 26 AND [Retail Week] <= 30
    THEN "August"
    ELSEIF [Retail Week] > 30 AND [Retail Week] <= 35
    THEN "September"
    ELSEIF [Retail Week] > 35 AND [Retail Week] <= 39
    THEN "October"
    ELSEIF [Retail Week] > 39 AND [Retail Week] <= 43
    THEN "November"
    ELSEIF [Retail Week] > 43 AND [Retail Week] <= 48
    THEN "December"
    ELSEIF [Retail Week] > 48 AND [Retail Week] <= 52
    THEN "January"
    END
    
    // Retail Week of Month
    IF [Retail Week of Quarter] <= 4
    THEN [Retail Week of Quarter]
    ELSEIF [Retail Week of Quarter] > 4
    AND [Retail Week of Quarter] <= 9
    THEN [Retail Week of Quarter] - 4
    ELSEIF [Retail Week of Quarter] > 9
    AND [Retail Week of Quarter] <= 13
    THEN [Retail Week of Quarter] - 9
    END
    

    拥有所有这些计算对于使用零售日历的任何可视化都非常有用。让我们创建一个我们喜欢用来展示零售日历的可视化。

  6. 将[零售季度月]作为离散维度添加到列中。将[零售季度]作为离散维度添加到行中。将[零售月周]作为连续维度添加到行中。在[零售月周]右侧创建一个临时的连续维度 0.0。创建一个同步双轴。

  7. 添加如下详细信息:

    1. 将[零售月周]的标记卡设置为条形图。将[Profit Ratio] * (SUM([Profit])/SUM([Sales]))添加到颜色中。将SUM([Sales])和[零售周]的连续维度添加到文本中。格式化文本,使其显示如图 4-32 所示。

      4-5-4 条形图的文本标签

      图 4-32. 4-5-4 条形图的文本标签
    2. 在标记卡的 0.0 值上,将标记类型设置为文本。将[零售月]添加到文本中。

  8. 对于最后一部分,我们需要在控制两个轴的列上放置一个值。创建名为**[bar]**的计算并将其添加到列中:

    // bar
    IF COUNTD([Retail Week]) = 1
    THEN SUM([Sales])/WINDOW_MAX(SUM([Sales]))
    ELSE .9
    END
    

    此计算将以零售周的最大销售额百分比显示条形图,并将每个州的标签放置在 0.9 上。更改表计算并选择所有值,如图 4-33 所示。

    4-5-4 条形图的表计算设置

    图 4-33. 4-5-4 条形图的表计算设置

    设置条形轴范围在 0 到 1.8 之间,然后隐藏轴。反转[零售月的周]字段的轴,然后隐藏轴。

  9. 最后,根据您的设计标准格式化图表。

    展示的结果可见于图 4-34。

显示按 4-5-4 零售月和周销售和利润的条形图

图 4-34. 按照 4-5-4 零售月和周显示销售和利润的条形图

结论

在本章中,我们只是浅尝了日期和时间的冰山一角。因为日期和时间具有自然的层次结构,并且可以被视为维度或度量,一个单独的日期字段有几乎无限的组合选项。

在章节开头,我们讨论了理解日期部分和日期之间差异的重要性。使用日期部分,Tableau 返回日期或时间字段的单个组成部分。日期部分的基础计算是DATEPART()函数。

在前两种策略中,我们展示了如何绘制日期的部分。组合多个日期部分(在这种情况下是小时和分钟)可能导致显示过多的离散值。

使用日期值,Tableau 返回截断到指定日期部分的日期。这意味着月份的日期部分将返回月份的名称或数字,而月份的日期值将返回年份和月份的组合。日期值的基础计算是DATETRUNC()函数。

Tableau 默认将日期部分设置为维度,将日期值设置为连续值。虽然这些是默认值,但我们可以将其转换为离散或连续值。我们选择离散或连续值会影响我们的坐标轴可能的外观,从而影响我们最可能选择的图表类型。

最后一个我们讨论的基础是 Tableau 默认提供日期层次结构给您的观众。如果您希望限制此层次结构的可用性,则必须使用自定义日期。

对于大多数观众来说,使用连续轴更直观,因为这符合人们对时间的思考方式!这使得线形图成为首选。处理日期的一个挑战是创建单个日期部分的连续图。我们解决了创建连续轴的这一挑战。在这些挑战中,我们从展示数据精确到最接近一天内的秒,到最接近 15 秒,再到最接近 15 分钟。

虽然线形图和偶尔的条形图是展示日期和时间值的两种常见方式,我们喜欢使用热力图(仅 Tableau 称为 高亮表格)。线形图在描述超过五条线时能力有限——对于大多数数据精通的受众来说,即使是解释模式也变得困难。线形图的一个简单替代方案是热力图。我们强调了在处理日期和时间字段时,这种图表类型的灵活性。

处理日期时的另一个常见挑战是将前年与本年到目前为止进行比较。我们向您展示了一个可以用来计算任意日期的年初至今值的计算公式。这可以用于聚合计算中,并且可以用来创建显示达到总体进度的图表。我们扩展了相同的年初至今计算方法以调整线形图,以进行公平比较。

我们还研究了如何利用 LOD 和表计算创建自动化报告。通过使用离散日期值和 LAST() 函数,您可以轻松显示最近 N 个月的数据。我们还展示了如何使用表计算完成月对月和年对年的计算。

我们在章节中讨论了非公历日历。公历是标准,但有些组织的财政年度起始月份不同于一月。我们甚至超越传统日历,讨论了 4-5-4 日历,这在零售和消费品公司中很常见。

下一章将涵盖关键绩效指标(KPI)。KPI 是独立的度量标准,您的受众可以用来推动日常运营或指导战略决策。虽然 KPI 侧重于度量本身,但通常由特定时间段定义。如果您熟练掌握 Tableau 中的日期字段,创建动态自动化的 KPI 将变得自然而然。

第五章:关键绩效指标

让我们再谈谈数据可视化中更具争议的一个话题:关键绩效指标KPI。围绕 KPI 的争议是因为您仅仅呈现一个单一的数字,事实上,您根本没有使用任何特定的可视化——您只是将一个数字或值显示为文本。尽管如此,这个文本也有其艺术性,在本章中,我们将讨论创建 KPI 的艺术。

这种类型的分析有助于回答常见的商业问题,例如:

  • 本月我们的营收是多少?

  • 上个月我们是否达到了筹款目标?

  • 发货时间与去年同期相比如何?

  • 我们的打八折促销效果如何?

  • 利润率随时间(时间作为维度)的变化如何?

几乎每个使用数据的组织都在使用 KPI。这是因为组织内设立的目标通常使用一个单一的度量来衡量。通常这个度量的定义由领导者确定,并定期作为时间快照进行审查。作为仪表板的开发者,您的工作是使这个度量指标易于获得。KPI 通常在一个时间点上进行测量,无论是一周、一个月还是一年。这使得任何仪表板开发者都非常重要地了解 KPI 所涵盖的特定时间以及如何准确地测量该指标。

开发有用的 KPI 意味着不仅仅提供一个单一数字;它意味着为该指标提供额外的背景信息。这种背景信息可以是月度或年度的百分比变化,或者作为火花线(一种非常小的折线图,通常没有坐标轴或标签)或其他微型图表的一部分,这些图表也没有坐标轴或标签。

现在,并非每个收集的数据点——也不是每个创建的仪表板——都需要一个关键绩效指标(KPI),但无论您的观众是高管、销售人员还是在车间工作的机械师,他们很可能都在使用自己的 KPI。这些个体中的每一个都会意识到他们的 KPI 仅仅是衡量的一个元素,并且这些 KPI 通常不能说明实际结果的驱动因素。

例如,高管可能对盈利能力的增长感兴趣。即使简单的盈利能力增长也有几个驱动因素:当前期销售额,前期销售额,当前期成本以及前期成本。一个机械师,可能用单位创建的数量来衡量生产力,必须考虑到这个数字的背景。例如,某个月创建的单位数量可能因休假量、机器维修停机时间或部件复杂性而有所不同。

请记住,KPI 根据指标和受众的不同频率进行检查。例如,机械师可能每 15 分钟观察一次表,以确保机器不会故障并减少产出,因为机械师的工作是在当下保持机器运行。高管可能每月检查一次工厂产量,因为他们的工作是引导组织的长远未来,并需要关注数十个指标。

每个人都使用 KPI,但 KPI 作为独立的值通常不提供足够的上下文。当前值是否是数据中异常的单个高峰,还是其性能的一致体现?作为开发者,你有责任不仅分享 KPI,还要用增强决策的上下文特征来增强 KPI。请问自己以下问题:

  • 这个值相对于 KPI 的上一个度量的移动方向是什么?

  • 你的 KPI 一年的趋势如何?

  • 这个 KPI 是否跨越了一个阈值并需要警报?

使用指标显示方向性,显示火花线,并添加颜色;不要让 KPI 独立存在。记住,你是开发者,你需要支持正确使用 KPI!

显示 KPIs

在深入研究如何创建 KPI 之前,让我们从一个我们在初学者 Tableau 开发者中最常见的场景开始:一系列没有上下文的 KPI 大数字。此外,这些值每个月都需要手动更新。

在开发 Tableau 仪表板时,尽量自动化尽可能多的计算。让我们来看看图 5-1,它展示了四个 KPI:销售额、利润、利润率和数量。

新手 KPI 提供的值没有任何上下文,并且需要手动筛选

图 5-1. 新手 KPI 提供的值没有任何上下文,并且需要手动筛选

当我们与初学者开发者合作时,我们经常看到这张图中展示的完全相同的解决方案:每个 KPI 单独的表格,其数字未必与表格的标题对齐,需要手动更新的值。

我们已经参与了太多组织,不知道自动化很少意味着在任何月、周或年底自动更新值的计算。更常见的是,开发人员在数据更新后可能需要更新一系列隐藏的过滤器,这些过滤器可能就在仪表板的旁边或者在数据更新后的几次点击之后。作为开发者,你不应该每天、每月或每周都需要打开仪表板并更新过滤器。你应该设计那些能够根据选择的日期自动更新的计算方法。

否则,如果您在 2020 年 3 月报告了 KPI,但 4 月刚刚结束,高管们期望看到新的值,您必须进入报告并更新过滤器以代表 2020 年 4 月之前的数据,然后领导才能看到报告。这不仅不是解决问题的最有效方法,而且可以通过良好设计的计算自动化分析。

显示 KPI:办公必需品案例研究

为了减少重复的工作量和报告所花费的时间,OE 的高管团队希望改善其 KPI 跟踪。具体来说,高管要求数据团队尽可能自动化许多功能。如何格式化新报告以确保 KPI 准确?

在本章的全部内容中,我们将使用样本 - 超级商店数据集。我们将为销售、利润、销售利润占比和总销售单位构建 KPI。我们还将在月度级别查看每个指标的情况。为了增加适当的复杂性,在所有这些示例中,我们将日期设置为 2020 年 3 月 15 日。高管很少会对每日或每周级别的 KPI 做出反应。有时候他们只想以月度节奏查看值。

要将日期设置为 2020 年 3 月 15 日,您需要编辑样本 - 超级商店数据源:

  1. 在连接部分的右上角点击提取。

  2. 然后在筛选选择中选择添加。

  3. 使用订单日期字段,并将范围设置为 11/1/2017 到 3/15/2020。

  4. 点击确定,再次点击确定。

  5. 然后转到一个表格执行数据提取。

这将设置数据集中日期范围为 1/1/2017 到 3/15/2020,并模拟您的可视化,仿佛当前日期是 3 月 15 日!

在这个案例研究中,您将学习如何正确格式化您的 KPI,自动化计算,以便无需每月或每周更新过滤器,并添加上下文以帮助最终用户理解 KPI。由于高管团队的定期计划每月讨论这些 KPI,您的 KPI 将以月度级别报告。

我们将使用之前显示在图 5-1 中的 KPI 作为起点。每个 KPI 都在单独的表上开发,并使用 Tableau 的默认设置。对于初学者开发者来说,这些视觉没有问题。但是还有更多工作可以做。

如果您想构建初学者 KPI,只需执行以下操作:

  1. 连接到样本 - 超级商店数据集。

  2. 创建四个名为销售、利润、利润比率和数量的新表。

  3. 在销售表上,将 SUM(Sales)添加到文本中。

  4. 在利润表上,将 SUM(Profit)添加到文本中。

  5. 在利润比例表上,将[Profit Ratio]添加到文本中。

  6. 在数量表中,将 SUM(Quantity)添加到文本中。

  7. 在这四张表上,通过使用订单日期的年份添加一个 2020 年的筛选器。设置表以占据整个视图。

  8. 创建一个新的仪表板,宽度为 1000 像素,高度为 500 像素。添加一个水平容器,并将工作表放置在其中。

如果您通常制作这样的 KPI,那没问题。我们将为您提供一些改进 KPI 的好方法!

策略:设计清晰的 KPI

在创建 KPI 时,请确保它们的标题与值对齐(参见图 5-2](#matching_the_title_and_value_alignment_o))。这将提高文档的可读性。

匹配 KPI 标题和值的对齐方式

图 5-2. 匹配 KPI 标题和值的对齐方式

注意我们已将表格标题的对齐方式改为与 KPI 一致,并且可读性得到了改善?这是一个很大的进步,但我们可以做得更多。接下来,我们不再显示仪表板的表格标题,而是将标题添加到表格本身(参见图 5-3](#editing_the_text_of_a_kpi))。

编辑 KPI 的文本

图 5-3. 编辑 KPI 的文本

下面是具体步骤:

  1. 点击表格,点击 Marks 卡上的文本属性,然后点击文本框旁边的省略号。

  2. 这将打开编辑标签对话框。在测量上方添加来自您表格名称的标题文本,然后点击确定。

  3. 隐藏表格标题。

    结果是标题和 KPI 之间的空间明显减少(参见图 5-4](#kpis_with_titles_on_text_of_a_marks_card))。

带有标题在 Marks 卡文本上的 KPI

图 5-4. 带有 Marks 卡文本上 KPI 的标题

关于 KPI 的最后一个入门级提示:使标题比值小一些,但确保它仍然可读。在图 5-5](#formatted_no-frills_kpis))中,KPI 标题使用 10 点 Tableau Book 字体,而 KPI 值使用 20 点 Tableau Semibold 字体。我们通常保持颜色不变,但使标题比值淡一些。最终结果是一组看起来非常专业的简约 KPI。

格式简约的 KPI

图 5-5. 格式简约的 KPI

策略:创建单一表格的 KPI

在单独的表格上创建 KPI 的挑战之一是必须在多个表格之间切换,并逐个进行调整。另一个挑战是性能问题。尽管 KPI 非常直观,但是通过将所有 KPI 放在单个表格上,可以优化仪表板的性能。这可以通过第三章中讨论的MIN(0.0)技术来实现:

  1. 双击列架上的列来创建一个即兴计算。这将打开一个提示框,让您编写一个计算。

  2. 输入**MIN(0.0)**

  3. 再重复三次。这将创建五个 Marks 卡片,一个用于所有 Marks 卡片,另外四个用于每个MIN(0.0)计算。生成的可视化效果如图 5-6](#the_visualization_with_four_minleft_pare))所示。

    带有四个 MIN(0.0)测量的可视化效果

    图 5-6. 带有四个MIN(0.0)测量的可视化效果
  4. 编辑每个轴并将值设置为从-1 到 0.1。然后隐藏轴。

  5. 将 SUM(Sales)添加到第一个 MIN(0.0)标记卡。对 SUM(Profit)、Profit Ratio 和 SUM(Quantity)重复此操作。完成后隐藏轴。

  6. 将所有文本对齐到所有标记卡的左中部。

  7. 将标记类型更改为形状。

  8. 在 Tableau 之外,从https://tessellationtech.io/wp-content/uploads/2020/05/NULL.png下载一个 1 × 1 的透明图像。

  9. 在您的桌面上,转到 My Tableau Repository 中的 Shapes 文件夹,并将透明图像添加到 KPI 文件夹中。

  10. 回到 Tableau Desktop,在所有标记卡上编辑形状,然后选择更多形状。单击重新加载形状按钮,然后从选择形状调色板下拉菜单中选择 KPI。接下来,选择透明图像。单击确定。如果尝试悬停在自定义形状上,它不会高亮显示,因为它是完全透明的形状。

  11. 在表格格式设置中,删除所有线条和边框。

    这将生成一张包含所有相关关键绩效指标的单页(图 5-7)。

单页上的关键绩效指标

图 5-7. 单页上的关键绩效指标

将所有关键绩效指标添加到单页中显然比每个关键绩效指标各有一张表格需要更多步骤。但是现在花费时间会导致性能更快的仪表板,在将来更容易调整。在整章中,您将继续更新此表格,以改进我们的关键绩效指标。

您已经解决了图 5-1 中初学者关键绩效指标提供的问题,但是您的过滤器对于仪表板观众来说是看不见的。而不是在仪表板上使用过滤器,您需要构建一个自定义计算来为您过滤数据。

对于我们的示例数据,即 Sample – Superstore 数据集,我们可以访问每日提供的订单数据中的行项目(单个产品)。但是,对于共享关键绩效指标,仅应共享完全完成月份的值。对于您的下一个策略,您将构建一系列计算,当时机成熟时将自动更新 KPI。具体来说,您将创建自动化 KPI,显示最近完整月份数据的最新值。

这意味着如果现在是 2020 年 5 月中旬(即 2020 年 5 月 17 日),数据将仅显示 2020 年 4 月。如果日期是 2020 年 5 月 30 日,数据仍将显示为四月。但是一旦 2020 年 5 月 31 日的数据可用,KPI 将更新以显示现在已完成的五月 2020 年的值。

策略:自动化您的关键绩效指标

在此策略中,您将创建自动返回最新完整月份数据的关键绩效指标。这将在单张表上完成,而不是多张表:

  1. 编辑您的数据源,将从 2020 年 3 月 15 日到 2020 年 5 月 17 日的数据筛选器中更改结束日期。

  2. 创建一个名为**[Max Date]**的计算。此计算还将计算数据集中的最大日期:

      // Max Date
      {MAX([Order Date])}
    
    提示

    这是在处理时间时记住的最重要的单个 LOD 表达式。您正在找到数据集中的最大日期,这非常有用,并且在其他计算中提供了灵活性。

  3. 计算上一个完整完成月的最后一天。将此计算命名为 **[上一个完整月的最后一天]**

    // Last Day of Last Full Month
    DATETRUNC("month", [Max Date] + 1) - 1
    
  4. 计算上一个完整月的起始日期。将此计算命名为 **[上一个完整月的第一天]**

    // First Day of Last Full Month
    DATETRUNC("month", [Last Day of Last Full Month])
    
  5. 现在创建另一个名为 **[最近的月份]** 的计算:

    // Most Recent Month
    [Order Date] >= [First Day of Last Full Month]
    AND
    [Order Date] <= [Last Day of Last Full Month]
    
    提示

    当我们处理关键绩效指标时,尽可能使用布尔计算。它们处理和处理速度非常快,而且非常容易调试。

  6. 从这里开始,您可以开始建立一个用于上一个完整月销售额的动态计算,称为 **[销售额 | 上个月]**

    // Sales | LM
    SUM(
      IF [Most Recent Month]
      THEN [Sales]
      END
    )
    

    **[利润 | 上个月]****[利润比率 | 上个月]****[数量 | 上个月]** 重复相同操作:

    // Profit | LM
    SUM(
      IF [Most Recent Month]
      THEN [Profit]
      END
    )
    
    // Profit Ratio | LM
    [Profit | LM]/[Sales | LM]
    
    // Quantity | LM
    SUM(
      IF [Most Recent Month]
      THEN [Quantity]
      END
    )
    
  7. 将文本右对齐,并将所有行和边框设置为无。

  8. 将这些计算放置在显示关键绩效指标的单表的其各自的标记卡上。最终结果,如 图 5-8,是一个没有任何过滤器上的度量或维度的表格。

自动化的单表关键绩效指标

图 5-8. 自动化的单表关键绩效指标

通过这个策略,您已经开始自动化您的关键绩效指标。接下来的挑战是为这些关键绩效指标提供背景信息。

现在,唯一的结论是上个月的销售额为 $36,522。下面是高管们将要问的下一个问题:

  • 这个指标的趋势如何?

  • 它与上个月相比如何?

  • 它与去年同期相比如何?

  • 这段时间与上段相比增长了多少?

  • OE 有多接近达到其目标?

你的任务是预料到这些问题。不必为每一个关键绩效指标提供所有的背景模式,但至少提供至少一个额外的数据点是关键的。对于我们下一个策略,我们将详细讨论如何创建动态的年度对比计算。

策略:创建年度对比计算

在这里,您将构建计算,用于计算年度对比变化。这些将为您的关键绩效指标提供宝贵的背景信息:

  1. 连接到样本—超级商店。

  2. 设置一个提取过滤器,以包括所有日期,包括 2020 年 5 月 17 日之前的日期,从 [订单日期] 字段中。

  3. 按照 “策略:自动化您的关键绩效指标” 中的步骤 1–6 进行操作。

  4. 计算去年同期的上一个完整月的最后一天:

    // Last Day of Last Full Month Prior Year
    DATEADD("year", -1, [Last Day of Last Full Month] + 1) - 1
    
  5. 计算上一个年度的上一个完整月的第一天:

    // First Day of Last Full Month Prior Year
    DATETRUNC("month", [Last Day of Last Full Month Prior Year])
    
  6. 创建一个布尔计算,用于识别日期是否在数据的上一个年度的最后一个完整月内:

    // Most Recent Month Prior Year | TF
    [Order Date] <= [Last Day of Last Full Month Prior Year]
    AND
    [Order Date] >= [First Day of Last Full Month Prior Year]
    
  7. 计算上一个完整月的销售额,但是对于上一个年度:

    // Sales | LMLY
    SUM(
      IF [Most Recent Month Prior Year | TF]
      THEN [Sales]
      END
    )
    
  8. 计算上一个完整月的销售额与去年同期之间的差异:

    // Sales | Delta
    [Sales | LM] - [Sales | LMLY]
    
  9. 计算两个时间段之间的百分比变化:

    // Sales | % Delta
    [Sales | Delta] / [Sales | LMLY]
    
  10. 创建一个箭头,当变化为正时指向上方:

    // Sales | Delta | Arrow Up
    IF [Sales | Delta] > 0
    THEN "▲"
    END
    
  11. 创建一个箭头,当变化为负数时会指向下方:

    // Sales | Delta | Arrow Down
    IF [Sales | Delta] < 0
    THEN "▼"
    END
    
  12. 在现有的销售 KPI 上,将 [Sales | % Delta]、[Sales | Delta | Arrow Up] 和 [Sales | Delta | Arrow Down] 添加到您的带有 KPI 的工作表的 Sales MIN(0.0) Marks card 的文本中。 ([Sales | LM] 应已在文本上。)

  13. 格式化你的 KPI。在我们格式化 KPI 时,我们更喜欢保持上下文信息的字体比指标本身小得多。我们通常还选择较浅的字体颜色。通过单独的箭头计算,我们还能为箭头选择两种颜色。这样,我们可以利用颜色作为观众注意指标变化的视觉指示器。结果显示在图 5-9 中。

    Tableau Desktop 的快照

    图 5-9. Tableau Desktop 的快照
  14. 为每个打算创建的关键绩效指标(KPI)重复执行步骤 5–9。

最终结果是一个提供上下文的 KPI(图 5-10)。在这种情况下,36,522 美元的销售额实际上比去年下降了 6%。这就是为什么你在 KPI 中总是需要提供上下文。您的观众不知道静态值意味着什么。即使您每周或每月查看相同的信息,也很难跟踪上下文。这就是为什么您作为分析开发人员需要记住添加上下文至关重要的原因!

一个完整的可视化截图

图 5-10. 一个完整的可视化截图

在这个例子中,您通过一个单一值为您的 KPI 提供了上下文,使您的观众开始准确理解每个 KPI 的含义。

火花线

如果您觉得您的观众希望不仅仅是一个单一值来证明 KPI 方向,我们强烈建议使用火花线。这些是非常小的线图,没有轴或坐标,强调数据的形状和趋势;它们首次由统计学家和教授爱德华·图夫特引入,并由微软 Excel 推广。它们提供了一种简单而紧凑的方法来显示数据。它们在小倍数中表现良好,但与 KPI 结合使用时也非常出色。

火花线长期以来都很受欢迎。即使今天,它们仍然可以在一些最大的数字媒体网站的首页上找到。例如,在纽约时报的网站上,火花线描述了美国 COVID-19 病例的趋势(图 5-11)。这些与新病例和新死亡的 KPI 相邻。

2020 年 12 月 11 日 *纽约时报* 首页的火花线

图 5-11. 2020 年 12 月 11 日 纽约时报 首页的火花线(Sparklines)

与单表格 KPI 不同,这些火花线需要在单独的工作表上创建。

火花线:办公室必备案例研究

作为您工作的一部分,您收到了提供 KPI 附加背景信息的反馈。经过几轮反馈后,决定您需要显示显示最近 13 个完整月份数据的小线图。

策略:创建小线图

按照以下步骤创建小线图:

  1. 连接到 Sample – Superstore。

  2. 设置抽取筛选器以包括所有截至 2020 年 5 月 17 日及之前的日期,从[订单日期]字段创建一个月级别的自定义日期值。

  3. 右键单击[订单日期]创建自定义日期(图 5-12)。将此新计算称为[订单日期(月份)]添加到列中。

    创建一个月份日期值的自定义日期

    图 5-12. 创建一个月份日期值的自定义日期
  4. 创建一个名为**[完整月份]**的新计算。此计算将用作帮助我们显示数据完整的月份的筛选器:

    // Full Months
    [Order Date] <= DATETRUNC("month", {MAX([Order Date])} + 1) -1
    
  5. 将[完整月份]放置在筛选器架上,并将其设置为 True。

  6. 创建一个名为**[最后 13 个]**的新计算。此计算将帮助我们显示最近 13 个月的数据:

    // Last 13
    LAST() <= 12
    
  7. 将[最后 13 个]添加到筛选器架,并将其设置为 True。现在您应该显示最近 13 个月的数据,从四月到四月。

  8. 接下来,您需要将关键指标添加到图表中。在本例中,它是[销售]。

  9. 编辑[销售]轴并取消选择“包括零”(图 5-13)。我们将在策略结束时讨论为什么这样做。

    最终将转换为小线图的折线图

    图 5-13. 最终将转换为小线图的折线图
  10. 通过在标记卡上调整大小滑块来格式化图表到最低值。接下来隐藏轴线。最后,隐藏工作表上的所有线条和边框。

  11. 对每个关键绩效指标(KPI)重复此操作。

  12. 创建一个新的仪表板,并按顺序执行以下操作:

    1. 向您的仪表板添加一个垂直容器。

    2. 在该容器内部添加您的关键绩效指标(KPI)。

    3. 在垂直容器内部添加一个水平容器。

    4. 将每个小线图工作表添加到水平容器中。

    5. 隐藏所有工作表的标题,并确保它们占据整个视图。

    6. 调整左右填充,使小线图与您的 KPI 对齐。这将是一个手动过程,取决于容器的宽度和高度。

在这个例子中,容器宽度为 900 像素,高度为 140 像素。我们将左内边距设为 100 像素,右内边距设为 20 像素,用于我们的小线图。我们还将水平容器的高度固定为 25 像素。最终的可视化效果包括强调关键绩效指标的小线图,并附带重要信息(图 5-14)。

创建每个小线图并添加到仪表板后的最终可视化效果

图 5-14. 创建每个小线图并添加到仪表板后的最终可视化效果

我们喜欢火花线的原因是它们能够在不占用太多空间的情况下为我们的数据产品增加背景信息。新手开发人员经常将火花线制作为占据仪表板重要空间的完整图表;如果我们可以以更简单、更易于理解的方式提供背景信息,那就没必要了。

创建火花线的其他方法可能也很有用。在图 5-14 中,我们展示了过去 13 个月的数据,但有时展示替代方案也是值得的。例如,您可能希望展示年度火花线与去年同期火花线的比较。有两种方法可以做到这一点。第一种方法是显示两条线:一条是最近的 12 个月,另一条是前一个 12 个月。另一种方法是显示一个单线图,按月份绘制,显示选定月份与前一年同月份之间的差异(我们称之为 Delta 火花条,因为它显示两个月份之间的差异,将是一个条形图)。

策略:创建年度火花线

年度走势火花线允许最终用户比较今年的趋势与去年的趋势。两条线的顺序使其易于解释,因为从左到右依次是一月到十二月,而不仅仅显示一个滚动的 12 个月:

  1. 连接到样本 - 超级商店。

  2. 设置一个提取过滤器,包括截止到 2020 年 5 月 17 日的所有日期,来自 [Order Date] 字段。创建一个月份级别详细信息的自定义日期值。

  3. 将 [Order Date] 添加为列的连续月度日期部分。

  4. 将 [Order Date] 添加为 Color 的离散年份。

  5. 将 [Full Months] 计算(在前一个策略中找到)添加到过滤器,并选择 True。

  6. 创建一个名为 **[Last Two Years]** 的计算。将其添加到过滤器,并选择 True:

    // Last Two Years
    DATETRUNC("month", [Order Date]) >= DATEADD("year", -1,
      DATETRUNC("year", {MAX([Order Date])}))
    
  7. 将 [Sales] 添加到行。

  8. 格式化颜色。通常我们使用更深、更显眼的颜色表示当前年份,使用较浅的灰色表示比较期间。

  9. 对每个火花线重复操作。

    产品显示在图 5-15 中,是一组清晰的火花线,让观众可以在整年中跟踪进展。

年度比较火花线在 KPI 可视化中

图 5-15。年度比较火花线在 KPI 可视化中

策略:创建滚动 24 个月火花线

有时单个火花线是不够的。有时候需要每个指标两个火花线。该策略展示了一个滚动的 12 个月火花线,以及一个第二个火花线表示前一年,以比较火花线与其上一年的值:

  1. 连接到样本 - 超级商店。

  2. 设置一个提取过滤器,包括截止到 2020 年 5 月 17 日的所有日期,来自 [Order Date] 字段。创建一个月份级别详细信息的自定义日期值。

  3. 在详细标记卡上,创建一个月份级别的自定义日期值,并将其添加到详细信息。

  4. 为列创建一个即兴计算:

    (INDEX()-1) % 12
    

    编辑表格计算并选择订单日期(月份)。

  5. 向 Marks 卡添加临时计算,然后将其设置为颜色:

    [Order Date (Months)] < DATEADD("year",
      -1, DATETRUNC("month", {MAX([Order Date])}+1)-1)
    
  6. 将 [全月] 计算添加到筛选器中并选择 True。

  7. 创建名为**[Last 24]**的计算。将其添加到筛选器中。编辑表格计算并选择订单日期(月份),然后选择 True:

    // Last 24
    LAST() < 24
    
  8. 将 [销售额] 添加到行中。

  9. 格式化行以匹配 图 5-16 中的设计。

  10. 对每个 Sparkline 重复此过程,并将每个添加到水平分隔符中。

最终结果是具有相当多历史背景的 Sparklines(图 5-16)。当你思考我们作为仪表板开发者的工作时,我们的任务是为数字提供背景信息。通过这一更加历史性导向的 Sparklines 集合,我们能够提供这样的背景信息。

具有滚动 24 个月 Sparklines 的最终可视化效果

图 5-16. 具有滚动 24 个月 Sparklines 的最终可视化效果

策略:构建 Delta Spark 条形图

当我们与高管合作时,我们经常发现他们对看到最有价值的变化指标的 Spark 图表最感兴趣。他们特别想知道变化是否一致。其中一个最好的方法就是使用 Spark Bar,这是一种类似于 Sparklines 的功能,但是以条形图的形式呈现。这使您可以显示数值是高于还是低于零,为此情况提供更为细致的数据可视化:

  1. 连接到 Sample – Superstore。

  2. 设置提取筛选器以包括从订单日期字段到 2020 年 5 月 17 日的所有日期。在月份级别的详细信息中创建自定义日期值。

  3. 在月份级别创建自定义日期值。将此自定义日期添加到列中。

  4. 创建名为**[Last 12]**的计算。将其添加到筛选器中。编辑相应的表格计算并选择订单日期(月份)。更改过滤器以选择 True 的值:

    // Last 12
    LAST() < 12
    
  5. 将 [全月] 计算添加到筛选器中并选择 True。

  6. 创建名为**[Sales | Delta 12]**的计算,计算过去 12 个周期的百分比变化,并将计算添加到行中:

    // Sales | Delta 12
    (ZN(SUM([Sales])) - LOOKUP(ZN(SUM([Sales])), -12))
    /
    ABS(LOOKUP(ZN(SUM([Sales])), -12))
    
  7. 格式化以匹配 图 5-17 中的条形图。

  8. 对每个 Sparkline 重复此过程,并将每个添加到水平分隔符中。

结果是一系列柱状图,代表了过去 12 个月的时间变化(图 5-17)。

显示每个关键业绩指标的逐月同比变化的 Spark 条形图

图 5-17. 显示每个关键业绩指标的逐月同比变化的 Spark 条形图

我们的高管可以轻松地扫描这一视觉效果,看到柱条是否在零线以上或以下。在许多情况下,由 Spark Bars 表示的值成为头等重要指标。

例如,让我们重新访问纽约时报中的 COVID-19 可视化(图 5-11)。虽然 KPI 可能是新病例(225,572),但更重要的值是过去 14 天的变化度量(+28%)。高管们通常不关心原始值,而是更关注变化。

想一想。高管们知道原始值意义不大,他们更关注变化度量作为真正的关键绩效指标,这是正确的。他们知道+28%比 225,572 更能帮助理解当前状态。在 COVID-19 的背景下,这两者一起糟糕透了!

策略:进展至目标

有时您会被要求追踪 KPI 的进展—特别是是否达到了阈值(预设目标或历史值)。在此策略中,我们将在 KPI 下方构建一个视觉效果,显示该进展(图 5-18)。

显示 KPI 的百分比进展图表

图 5-18。显示 KPI 的百分比进展图表

以下是步骤:

  1. 在列架上创建一个临时计算**MIN(1.0)**

  2. 将 MIN(1.0)轴设置为–0.1 到 1.1。

  3. 将此条形图的颜色设置为浅灰色。

  4. 创建一个名为**[销售目标]**的浮动参数。将值设置为 1.1。此值将用于设定销售目标为前一年的 110%。

  5. 创建一个布尔计算称为**[当前年份完整月份]**,计算当前年份的完整月份:

    // Current Year Full Months
    [Order Date] < DATETRUNC("month", {MAX([Order Date])})
    AND
    [Order Date] >= DATETRUNC("year", {MAX([Order Date])})
    
  6. 创建一个布尔计算称为**[上一年度完整月份]**,计算与当前年度相同的前一年度的完整月份:

    // Last Year Full Months
    [Order Date] < DATEADD('year', -1, DATETRUNC("month", {MAX([Order Date])}))
    AND
    [Order Date] >= DATEADD('year', -1, DATETRUNC("year", {MAX([Order Date])}))
    
  7. 计算与前一年度相比的截至目前的销售百分比。将计算命名为**[销售 | % 预期]**

    // Sales | % Expected
    SUM(
        IF [Last Year Full Months]
        THEN [Sales]
        END
    )/
    SUM(
        IF YEAR([Order Date]) = YEAR({MAX([Order Date])})
        THEN [Sales]
        END
    )
    
  8. 计算与年度预期总额相比的销售百分比。将计算命名为**[销售 | % 目标]**

    //Sales | % Target
    SUM(
        IF [Current Year Full Months]
        THEN [Sales]
        END
    )/
    SUM(
        IF YEAR([Order Date]) = YEAR({MAX([Order Date])})
        THEN [Sales] * [Sales Target]
        END
    )
    
  9. 将整体总数设定上限,以防超过目标,创建名为**[销售 | % 目标 | 上限]**的计算:

    // Sales | % Target | Capped
    IF [Sales | % Target] < 1
    THEN [Sales | % Target]
    ELSE 1
    END
    
  10. 将[销售 | % 目标 | 上限]添加到 MIN(1.0)右侧的列上。创建一个同步双轴。在两个标记卡的颜色上删除[度量名称]。

  11. 创建一个计算,比较预期百分比与目标百分比。将计算命名为**[销售 | % 预期 vs % 目标]**

    // Sales | % Expected vs % Target
    [Sales | % Expected] < [Sales | % Target]
    

    将其放在颜色上。将 True 颜色设置为青色,False 颜色设置为红色。

  12. 将[销售 | % 预期]添加到[销售 | % 目标 | 上限]标记卡的详细信息中。

  13. 右键单击[销售 | % 目标 | 上限],添加一个参考线,使用[销售 | % 预期]。将线宽设置为最粗选项,颜色设置为黑色。

  14. 对[利润]、[利润比率]和[总客户数]重复步骤 1 至 13。此步骤的结果显示在图 5-19 中。

    完成第 14 步后显示的百分比进展图表

    图 5-19。完成第 14 步后显示的百分比进展图表
  15. 将您的 KPI 表格和百分比进展表格放在同一个仪表板上并格式化它们以减少间距。结果将会是图 5-20。

    百分比进展图表与 KPI 并列的最终结果

    图 5-20. 百分比进展图表与 KPI 并列的最终结果

多个 KPI 作为评分卡

有时一个独立的 KPI 作为度量标准是不够的。有时领导者使用一系列度量标准,我们称之为评分卡,必须全部一致,以衡量成功。这些 KPI 集合通常是成功的全面衡量标准。

聚合 KPI 或评分卡并不是一个新概念。成功本身很少被量化为二元值。在我们的工作中,奖金通常是基于是否达到一系列目标来计算的。在零售业中,您不仅仅被衡量总销售额,还包括订单数量和总销售数量。如果您达到所有目标,您将获得奖金。如果差一点,就会错失奖金!

这个概念适用于任何组织中需要同时跟踪多个 KPI 的单位。

KPI 评分卡:办公必需品案例研究

在这个案例研究中,您的任务是跟踪样本–超级商店数据集中每个子类别的四个 KPI。您需要查看销售、总订单和总销售量在达到目标时的表现。然后,您需要计算一个聚合 KPI 评分卡来突出显示达到其目标的 KPI 的百分比。如果任何 KPI 未达到 100%的目标,您将需要通过一个指示器来指出(在本例中是一个红点)。

在这种情况下,知道 KPI 的价值并不那么重要,而更重要的是知道每个 KPI 是否达到其目标。下一个策略的结果显示在图 5-21 中。

显示多个 KPI 及其结果作为聚合或总体评分的评分卡

图 5-21. 显示多个 KPI 的评分卡及其结果作为聚合或总体评分的输出

策略:创建聚合 KPI

在这个策略中,您将构建 5-21 中显示的可视化效果:

  1. 将[子类别]添加到行。

  2. 在列上创建一个临时计算,并键入**MIN(1)**。通过按住 Ctrl 键并点击并拖动度量值到自身右侧来复制该度量。重复此步骤三次。

  3. 编辑每个轴,范围从 0 到 1。

  4. 在第一个 MIN(1) Marks 卡片上,将本章前面的[销售 | % Delta]计算添加到颜色中。编辑颜色:选择自定义的对比调色板。为左侧值选择灰色,为右侧值选择颜色。使用两步的阶梯颜色。将中心设置为 0。 (见图 5-22.)

    编辑每个 KPI 的调色板

    图 5-22. 编辑每个 KPI 的调色板
  5. 使用在本章节前面创建的[利润 | % 变动]计算方法,为第二个 MIN(1)分数卡重复此步骤。重复第 4 步中的颜色处理过程。

  6. 使用在本章节前面创建的[数量 | % 变动]计算方法,为第三个 MIN(1)分数卡重复此步骤。重复第 4 步中的颜色处理过程。

  7. 创建名为**[总百分比]**的计算,并将其添加到第四个 MIN(1)分数卡的文本中:

    //  Total Percentage
    (
      IIF([Sales | % Delta] > 0, 1, 0) +
      IIF([Profit | % Delta] > 0, 1, 0) +
      IIF([Quantity | % Delta] > 0, 1, 0)
    )/3
    
  8. 创建名为**[警示点]**的计算。还将此计算添加到第四个 MIN(1)分数卡的详细信息中:

    // Alert Dot
    IF [Total Percentage] < 1
    THEN '●'
    ELSE ''
    END
    
  9. 将此分数卡上的颜色更改为白色。编辑文本。在同一行上的[总百分比]左侧放置[警示点]。将[警示点]的颜色更改为红色。

最终结果显示在图 5-23,这是一种可视化方式,可以看到每个子类别的表现。

在 Tableau Desktop 中显示的聚合 KPI 创建的表视图

图 5-23. 在 Tableau Desktop 中显示的表视图,展示了如何创建聚合 KPI

跟踪每日变化:办公必需品案例研究

OE 的销售已经稳步增长。除了月度报告外,管理层现在还希望跟踪累计每日价值,以便每天早上了解业务表现。如何在上下文中表示这些每日价值?

对于本章节的最后一个策略,我们将构建可以跟踪每日累计值与前一时间段比较的关键绩效指标。在此可视化中,我们将显示一个 KPI 以及线条和区域图表。这种可视化系统适用于每日跟踪,而不是在几天内就单个值进行系统讨论。对于高管更频繁查看或需要更多视觉空间以获取上下文信息的情况非常有用。

这些图表显示了相对于去年同期价值的进展,以及当前年度进展的进度。常见用例可能包括跟踪销售数据、报告单位生产情况以及了解客户参与的数量。所有这些情况都依赖于与前一年的表现进行对比,以更好地了解业务的趋势是否符合预期。

添加这些月度行可为本月与去年同期的当前表现提供背景。当值优于去年同期时,行为绿色。当低于去年时,为红色。尽管这些在 Tableau 中看起来非常简单,但需要多个步骤来构建这些线条。

这个下一个案例研究将分为三个策略,但将合并为单个仪表板。在图 5-24 中显示的输出突出显示了按月销售绩效。

下三种策略的输出结果

图 5-24. 下三种策略的输出结果

策略:创建月至今 Sparklines

此策略创建了图表和面积图,如图 5-24 所示:

  1. 连接到样本 - 超级商店。

  2. 设置一个提取过滤器,包括截止到 2020 年 9 月 17 日的所有日期,来自[订单日期]字段的自定义日期值。

  3. 将订单日期的日添加到列中作为连续日期部分。

    接下来,您将构建一系列计算,以帮助您创建可视化效果。

  4. 创建一个名为**[今天]**的计算。通常情况下,您会在计算中放置TODAY()函数,但为了示例,使用我们数据集中的最大日期——在应用了提取筛选器之后,这是 5 月 17 日:

    // Today
    {MAX([Order Date])}
    
  5. 创建一个名为**[CMCY | TF]**的布尔计算,表示数据是否与[今天]处于同一个月份(CMCY = 当前月份,当前年份):

    // CMCY | TF
    DATETRUNC('month' ,[Order Date]) = DATETRUNC('month', [Today])
    AND DATEPART('day', [Order Date]) <= DATEPART('day', [Today])
    
  6. 创建一个名为**[SDLY | TF]**的布尔计算,表示数据是否与[今天]相同月的上一年同一天(SDLY = 同一天,去年):

    // SDLY | TF
    DATETRUNC('month', [Order Date]) = DATETRUNC('month', DATEADD('year', -1,
      [Today]))
    AND DATEPART('day', [Order Date]) <= DATEPART('day',[Today])
    
  7. 创建一个名为**[SMLY | TF]**的布尔计算,指示月份是否与[今天]的同一个月份相同,但是是前一年(SMLY = 同一个月份,去年):

        // SMLY | TF
    DATETRUNC('month', [Order Date]) = DATETRUNC('month', DATEADD('year', -1,
      [Today]))
    
  8. 为当前月份的[今天]创建一个名为**[销售额 | CMCY]**的计算:

    // Sales | CMCY
    IF [CMCY | TF]
    THEN [Sales]
    END
    
  9. 创建一个名为**[销售额 | SMLY]**的计算,如果它们发生在与[今天]相同的上个月,但是去年:

    // Sales | SMLY
    IF [SMLY | TF]
    THEN [Sales]
    END
    
  10. 创建一个名为**[销售额 | SDLY]**的计算,计算与[今天]相同日和月份的去年同一天的销售额:

    // Sales | SDLY
    IF [SDLY | TF]
    THEN [Sales]
    END
    

    现在,您已经为这个可视化创建了基本计算,我们可以开始把它们整合在一起。

  11. 创建一个名为**[销售额 | CMCY | 隐藏]**的计算:

    // Sales | CMCY | Hidden
    IF MAX(DAY([Order Date])) > MAX(DAY([Today]))
    THEN NULL
    ELSE RUNNING_SUM(SUM([Sales | CMCY]))
    END
    
  12. 将[销售额 | CMCY | 隐藏]添加到行中。将标记类型设置为线条。编辑表计算。选择特定维度,并仅选择订单日期的日。

  13. 创建一个名为**[销售额 | SDLY | 隐藏]**的计算:

    // Sales | SDLY | Hidden
    IF MAX(DAY([Order Date])) > MAX(DAY([Today]))
    THEN NULL
    ELSE RUNNING_SUM(SUM([Sales | SDLY]))
    END
    
  14. 将[Measure Values]添加到行中。在新的[Measure Values] Marks 卡中,确保只包括 SUM(销售额 | SMLY)和[销售额 | SDLY | 隐藏]。右键单击[Measure Values] Marks 卡上的 SUM(销售额 | SMLY),添加一个累计总数表计算(图 5-25)。

    在[Measure Values] Marks 卡上右键单击度量,添加一个快速表计算来计算累计总数

    图 5-25. 在[Measure Values] Marks 卡上右键单击度量,添加一个快速表计算来计算累计总数。
  15. 将[Measure Values]标记类型更改为面积。将[Measure Names]添加到颜色中,将 SUM(销售额 | SMLY)设置为浅灰色,将[销售额 | SDLY | 隐藏]设置为中灰色。

  16. 您会注意到我们的两个面积图是堆叠的。你不想要这个。从顶部菜单中选择分析 → 堆叠标记 → 关闭(图 5-26)。

    从顶部菜单中关闭堆叠标记

    图 5-26. 从顶部菜单中关闭堆叠标记
  17. 在行架上创建一个同步的双轴,位于[销售额 | CMCY | 隐藏]和[度量值]之间。然后,右键单击[销售额 | CMCY | 隐藏]轴并选择“将标记移至前面”。

  18. 创建一个名为**[今日参考线]**的计算:

    // Today Reference Line
    DATEPART('day', [Today])
    

    将此计算拖动到[销售额 | CMCY | 隐藏]标记卡的详细信息中。将计算的聚合更改为最大值。右键单击[订单日期的日]轴并添加参考线。

    对于整个表格,使用[今日参考线]的最大值。不显示标签或工具提示。将线型更改为短划线。取消选中“显示突出显示或选定数据点的重新计算线”。图 5-27 显示了此时的图表。

    百分比至目标区域和线图的进展

    图 5-27. 百分比至目标区域和线图的进展
  19. 创建一个名为**[销售额 | MTD | % 变化]**的计算。这将计算出与去年同期相比,从当天到当月底的销售额变化百分比:

    // Sales | MTD | % Delta
    (SUM([Sales | CMCY]) - SUM([Sales | SDLY]))
    /
    SUM([Sales | SDLY])
    
  20. 创建一个名为**[颜色线]**的计算:

    // Color Line
    {EXCLUDE [Order Date]: SIGN([Sales | MTD | % Delta])}
    

    将[颜色线]添加到[销售额 | CMCY | 隐藏]标记卡的颜色中。将标记类型从连续更改为离散。编辑颜色,因此-1 为红色,1 为绿色。

  21. 在[销售额 | CMCY | 隐藏]标记卡上,选择“显示标记标签”复选框。对于要标记的标记选项,请选择线末端并仅选择标签末端。最后,在字体下拉菜单中选择匹配标记颜色。图 5-28 显示了这些选项。

    使用“标签”上的“匹配标记颜色”选项来匹配标记颜色

    图 5-28. 使用“标签”上的“匹配标记颜色”选项来匹配标记颜色
  22. 最后,您需要对可视化进行格式化。隐藏值轴、[销售额 | CMCY | 隐藏]轴和[订单日期的日]轴。然后删除虚线零线和列分隔线。在可视化的左上角,右键单击[分段]并选择隐藏行字段标签。

    结果显示在图 5-29 中,显示今年与去年区域图的美丽线条。当然,图表很有用,但您也希望将其与本月的关键绩效指标结合起来。

最终产品

图 5-29. 最终产品

策略:创建月度关键绩效指标

在这种策略中,我们将详细介绍如何将之前的关键绩效指标与本月的绩效指标结合起来。幸运的是,我们在构建线条时已经建立了许多我们需要的计算,所以这次构建应该会更加直接。

  1. 将[分段]添加到行中。

  2. 在列上输入**MIN(10)**作为即席计算。将标记类型设置为文本。要进行格式化,请将网格线、零线、轴标尺和轴刻度设置为无。编辑轴并将范围固定在 0 到 20 之间。

  3. 将 SUM(Sales | CMCY)、[Sales | MTD | % Delta]和[Segment]添加到标签中。按照图 5-30](#a_detailed_view_of_the_text_formatting)所示编辑文本。

    文本格式的详细视图

    图 5-30. 文本格式的详细视图
  4. 右键单击 Marks 卡上的[Sales | MTD | %Delta],然后选择格式。在字体格式设置下,选择窗格(如果尚未选择)。单击数字下拉框。在默认部分,靠近格式的顶部,选择自定义,然后键入**"▲ 0%;▼ 0%;▬"**。这将在正百分比之前放置一个上箭头,在负百分比之前放置一个下箭头,并为零值放置一个大破折号。

  5. 在 MIN(10)右侧的列上作为即席计算键入**MIN(1)**,然后创建同步双轴,然后隐藏轴线。还要删除在两个标记卡的颜色上自动添加的[Measure Names]值。

    将标记类型更改为条形。将条形类型设置为最大宽度。在颜色上,将边框设置为无。

    删除网格线和列分隔线。与运行线和面积图表上的行分隔线匹配格式。

  6. 将[Color Lines]的计算添加到 MIN(1)标记卡的颜色中。这种颜色应该与您从“策略:创建月度累计火花线”中的线条颜色匹配。

    完成此步骤后,您已创建了您的 KPIs(见图 5-31](#kpis_and_a_success_indicator))。

KPI 和成功指标

图 5-31. KPI 和成功指标

策略:在仪表板中合并 KPI 可视化

现在您已完成前两个策略中的 KPI 和微型图表,现在是时候将可视化效果集中在仪表板上了:

  1. 在您的仪表板中添加一个水平容器。

  2. 将 KPI 添加到水平容器中。将所有外部或内部填充设置为零。隐藏标题。选择使 KPI 适合整个视图的选项。

  3. 在水平容器内 KPI 的右侧添加微型图表。隐藏右侧的段标题。将所有外部或内部填充设置为零,并隐藏标题。选择使 KPI 适合整个视图的选项。

  4. 删除包含图例的容器。

  5. 调整 KPI 表的大小以达到所需的宽度,并为线图腾出空间。

    结果是两个可视化效果,它们作为仪表板的单个组件出现(见图 5-32](#the_final_result_of_the_strategy))。

策略的最终结果

图 5-32. 策略的最终结果

结论

现在您有机会使用和扩展您的 KPIs 之后,让我们回顾一下。

我们开始本章讨论格式化 KPI 的重要性,以便您的受众能够轻松阅读。简单的功能,如文本大小、文本对齐和字体选择,都很重要。总体目标是增加可读性,使您的受众可以一眼看到数值并迅速获取所需信息。

我们展示了如何使用计算 MIN(0.0)作为占位符在单张表上构建多个 KPI。在单张表上开发您的 KPI 带来两个主要好处。首先,所有 KPI 都在一个位置,简化并加快了开发速度。现在您不需要从一张表跳到另一张表,只需快速切换到不同的 Marks 卡片进行编辑即可。这也简化了格式化过程。另一个更大的好处是因为从单张表工作而带来的性能提升。如果您能找到减少使用表数的方法,那就应该抓住这个机会。表数越少通常意味着性能越好。

在本章的大部分内容中,我们展示了如何为 KPI 添加上下文示例。计算年度(或月度)同比对于大多数商业情境至关重要。想象一下仅仅通过您汽车上的里程表来讲述一个故事。

仅在任何给定时点记下您的速度并没有太多的上下文:

  • 如果您能说出速度是否高于或低于目标,比如限速,那该多好?

  • 如果您能说出此时速度与以前同一路段的旅行速度相比如何?

  • 如果您能在固定的时间间隔内展示快照——比如每 15 分钟一次?

这种上下文将提高理解。您可能能够判断自己是否超速,是否比平常行程快,或者在路途中的何处失去了时间。

所有这些都可以转化为本章的策略。我们向您展示了如何使用 LOD 计算来计算年度对比,这使您能够理解您的指标的方向。

我们还讨论了如何自动化您的 KPI。这是因为观众渴望最新的信息,并且认为在维护其数据产品时没有额外的努力。自动化的 KPI(和其他计算)是救命的。我们亲眼见证了这一点!我们可以亲自证明这一策略使人们的周末恢复了,从而提高了公司的员工保留率!这太疯狂了!通过精心设计的计算,您可以自动化您的 KPI(以及您的其他仪表板),不仅使您的最终用户获得最新信息,还使分析师节省了大量时间。

在本章介绍的策略中,我们展示了如何显示自动化的火花线图,展示了过去 13 个月的情况,并将本年度累计进展与去年进行了叠加,结合了展示滚动 24 个月火花线图的想法。每种火花线选项都增强了 KPI,并允许您的观众看到路径进展而不必过度分析数据。

我们还展示了一个火花柱状图,显示了一个指标的年度差异作为微图表的驱动值。同样重要的是,这种策略展示了一种替代方法——使用表计算来计算年度指标。

如果您正在追踪累积目标(这在销售中非常常见),那么进度条图表对您非常有用。虽然我们使用去年销售额的 110%作为我们的目标,但也可以使用其他方法设置目标。重要的是展示我们可以追踪进展!

尽管本章介绍的许多策略都侧重于月度指标,但也可以报告从第二个(每秒水量)到终身(客户生命周期价值)的任何时间段。在章节末尾,我们将焦点从月度转移到了日常。结果是每日销售总额的运行总计以及每日价值快照高于或低于指定目标。

KPIs 本身非常简单。每个指标表示您的受众讨论的单个值。虽然我们在整章中都提到过这一点,但我们要结束时说,作为开发者,您的工作是为这个值添加上下文,以便您的受众对齐。

在下一章中,我们将继续专注于基本内容,并讨论表格设计和分析。虽然大多数数据可视化专家避免谈论表格,但我们希望提供这些指导,因为每个开发者都会收到表格的请求。像 KPIs 一样,一个设计良好且具有适当背景的表格对您的受众可能非常有用。

第六章:构建有影响力的表格

快速——不要想太多,回答以下问题:

  • 当展示数据时,使用最多的图表类型是什么?

  • 最难设计的图表类型是什么?

  • 最不可定制的图表类型是什么?

  • 数据从业者最讨厌的图表类型是什么?

所有这些问题的答案都是朴素的数据表格。本章讨论的是构建充满信息的表格,而不牺牲设计。

像图 6-1 中的视觉一样,大部分信息仍然以表格形式共享。但是当我们想传达数据中的特殊点时,很可能会在大量信息中丢失。

分析师和设计师抱怨表格,但实际上人们在决策时使用表格。看吧,这可能是你在尝试验证数据时的首选可视化方式。作为分析开发人员和数据可视化从业者,我们的工作是为用户提供工具,让他们能够完成工作。如果你的受众要求表格,这意味着要制作表格!

带有一些颜色(但不是所有颜色)以突出一些关键值的表格

图 6-1. 带有一些颜色(但不是所有颜色)以突出一些关键值的表格

构建出色的表格

在开始制作表格之前,让我们看一些可以帮助设计更有用的表格的技巧。人们认为表格很简单,但它们是信息的复杂系统,必须非常小心地格式化,以最大化理解。

让我们从我们职业生涯中不可避免地制作的一种表格开始:小字体、信息密集的表格;参见图 6-2。

小字体且没有间距的表格

图 6-2. 小字体且没有间距的表格

制作这种表格时,你根本不考虑最终用户或如何设计表格以改善决策。你唯一的想法是,如何尽可能多地将信息塞进这个表格中,以便今后无需再思考?但是表格可以很有用。我们不应该担心空间,因为我们基本上可以使用任意多的空间;这是数字的,不是纸张,所以不要害怕好好利用像素。

那么,你可以做些什么简单的事情来最大化表格的可读性呢?

确保表格的明确目的

为任何受众提供数据表格是很容易的事情。确切地了解受众的需求,并定制表格的输出以突出受众的关键见解,并使用附加数据提供背景信息,则是完全另一回事。也许您想要传达的关键值是总客户数。也许是上个月客户数量的变化,或者与一年前相比的上个月总客户变化(这被称为双重变化)。每个这三个目标都需要不同类型的表格。

格式化您的表格以最大化可读性

有很多方法可以做到这一点,但我们建议采用以下技术:

使字体大小可读

您可能会因为想要通过减小字体大小而试图把太多内容塞进一个表格中。不要这样做!字号在 10 到 14 之间通常是合适的。

区分列标题和正文

使用粗体字体或更改标题文本的颜色以区分头部和正文。

在表格中为行添加间距和填充

行间填充应在文本上方和下方的字体大小的 0.5 至 1.0 倍之间。

选择适合表格的字体

在选择字体时要慎重。Luke 个人不喜欢衬线字体,而是选择无衬线或等宽字体;Ann 喜欢使用 Tableau 字体系列,因为它们在所有字体大小下都被最大化用于可读性和数据展示。总体而言,选择数字值单调间隔的字体是非常重要的,这样可以使列中的数字对齐。

限制您使用颜色的次数

颜色对表格设计很有用,但使用过多可能会分散注意力。通过一些定制,您可以谨慎使用颜色来突出表格的特定列。

我们的前两种策略介绍了创建适合任何受众的表格的基本原则。在本章的其余部分,您将通过应用这些原则来提高您的 Tableau 表格开发技能。

在表格中使用颜色:办公必备产品案例研究

让我们回到之前章节中您看到的办公用品店 OE。在这个例子中,数据团队被要求创建一个按客户显示指标细分的表格。这个表格将有很多行,这将使得收集见解变得困难。团队如何使用颜色来传达要点?

颜色是突出所需传达内容的好方法,但过多的颜色可能会让人感到不知所措。OE 数据团队如何突出一些值以传达见解?

在本节中,我们将讨论几种策略。首先,我们将带您创建一个表格,只需使用少量颜色来表达其观点。然后我们会尝试一种使用点来编码颜色的变体。

策略:使用有限的颜色创建表格

您将首先使用 Sample - Superstore 数据集构建一个基础表格:

  1. 按以下方式创建基本表格,如图 6-3 所示:

    1. 将[客户名称]添加到行架上。

    2. 将[测量名称]添加到列中,将[测量值]添加到文本中。

    3. 在筛选架上,你会看到[测量名称]。通过选择[销售]、[订单]、[利润]和[利润率]来编辑它。

      如果你没有利润比率计算,请创建它。

      // Profit Ratio
      SUM([Profit])/SUM([Sales]))
      
    4. 将值从上到下重新排序:SUM(销售),AGG(订单),SUM(利润)和 AGG(利润率)。

      Tableau 中的简单基本表格

    图 6-3. Tableau 中的简单基本表格
  2. 通过将表格的文本格式化为与行标题相同的字体样式、大小和颜色,应用可读性原则。你可以点击“文本”按钮,设置字体为 Tableau Book,大小为 15,并选择第一列黑色色调的倒数第二个阴影(图 6-4)。

    默认情况下,Tableau 在表格中不使用最佳实践的文本颜色和大小。确保更新文本和字体。

    图 6-4. 默认情况下,Tableau 在表格中不使用最佳实践的文本颜色和大小。确保更新文本和字体。

    通过右键单击客户名称并选择格式,使此样式与行标题匹配。图 6-5 显示了结果选项。

    除了更新文本外,确保更新标题

    图 6-5. 除了更新文本外,确保更新标题

    确保顶部标题是粗体字体(它应该是)。最后,移除行间隔条纹,但为每一行添加行分隔符。格式化边框并将行分隔符设置为最低的详细级别,将滑块向右移动。这将使你得到图 6-6 中的表格。

    这个表格的微妙但重要的区别在于每行具有相同的字体和样式

    图 6-6. 这个表格的微妙但重要的区别在于每行具有相同的字体和样式
  3. 现在,你的表格相当基础。你只是列出数据,而不是展示 Tableau 的强大功能。因此,让我们添加一些颜色(图 6-7)。将[测量值]拖动到颜色中,然后将标记类型从自动更改为方块。

    通过在表格中使用[测量值]来进行颜色

    图 6-7. 通过在表格中使用[测量值]进行颜色

    这就是你经常在 Tableau 中看到的表格上的颜色使用方式:使用[Measure Values]为所有度量使用一种颜色。但是你有四个度量,它们都非常不同。[Sales]度量仅由从零到数万的正值组成。[Profit]可能是负值也可能是正值,并且可能达到数千。[Total Orders]表示为整数,但甚至不超过 20。而[Profit Ratio]是一个百分比,大多数值在-10%到 25%之间。单一颜色编码对所有四个度量都不适用。

    你可以通过右键点击[Measure Values]上的颜色并选择“使用单独图例”来解决这个问题(参见图 6-8)。

    如果你想要在[Measure Names]中为每个度量选择不同的颜色,请务必在右键点击[Measure Values]上的颜色后选择“使用单独图例”

    图 6-8. 如果你想要在[Measure Names]中为每个度量选择不同的颜色,请在右键点击[Measure Values]上的颜色后选择“使用单独图例”

    这将为你的表格中的每个度量(参见图 6-9)提供一个不同颜色的图例。

选择“使用单独图例”后的默认颜色

图 6-9. 选择“使用单独图例”后的默认颜色

现在你可以单独对每个度量进行编码,这真是太神奇了。不过要记住,限制颜色的使用非常重要,因为这样能帮助你的观众更轻松地从表格中获取见解。在这种情况下,最多只能对两个度量使用颜色。

你需要设计这个表格,使得颜色仅出现在[SUM(Sales)]和[AGG(Profit Ratio)]上。首先,编辑[SUM([Sales)]的颜色调色板,将调色板设置为绿金色。接下来,编辑[AGG(Profit Ratio)]并将颜色调色板设置为金紫色分散。

现在,要移除[SUM(Profit)]和[AGG(Total Orders)]的颜色。不幸的是,你不能从视图中删除这些颜色图例。编辑调色板,使其为白色(或者你在表格中使用的背景色)。你可以通过创建自定义的分散调色板,设置阶梯色为 2 步,然后将两个自定义颜色都改为白色(#FFFFFF),如图 6-10 所示。

如果你不想显示图例,请选择与仪表板背景颜色匹配的颜色

图 6-10. 如果你不想显示图例,选择与仪表板背景颜色匹配的颜色

这使得表格看起来像图 6-11。

使用单独图例突出显示两列的表格。注意,其他两个图例设置为全白。

图 6-11. 使用单独图例突出显示两列的表格。注意,其他两个图例设置为全白。

最终产品是一个只在两列中使用颜色的表格。这使我们的观众能够更快地从数据中获取见解,特别是通过视觉指标准确识别销售额最高或利润率最高的客户。

策略:使用点来编码颜色

另一种策略是使用点来进行颜色编码。在跟随过程中,您需要确保点保持文本右对齐,并且圆圈不会与文本重叠(参见图 6-12)。

当使用点来突出显示值时,请确保点不会重叠或分散注意力,否则您将得到一个混乱的可视化效果(左侧),或者会干扰表格中的值(右侧)

图 6-12. 当使用点来突出显示值时,请确保点不会重叠或分散注意力,否则您将得到一个混乱的可视化效果(右侧)

如果您只是将标记类型从方形更改为圆形,技术上您会得到相同的图表,但文本偶尔会与圆圈重叠,使其更难以阅读。让我们用正确的方法来做:

  1. 将标记类型从方形更改为圆形。

  2. 要适当地对齐圆圈和文本,您需要创建自定义措施,将值居中到您想要的表格中。首先创建一个特定的计算。在列架上,双击[Measure Names]右侧的空白处。这将打开一个提示,允许您编写自定义计算。键入**MIN(0.2)**。现在看起来像是将圆圈和文本居中到 0.2,但实际上完成后,只会将圆点居中到该值。这将创建图 6-13 中的表格。

    我们正在进行的工作,为视觉编码添加点和颜色

    图 6-13. 我们正在进行的工作,为视觉编码添加点和颜色
    Tip

    当您使用MIN(0.2)时,您使用了一个固定的度量来创建数据源中的一列。使用最小函数可以确保该值直接放置在您指定的任何值上。如果您使用了SUM(),则该值将等于该维度成员的总记录数,乘以您在MIN()函数中放置的值。

    当您希望在数据集中创建多个列或将标记层叠在一起时,您将使用这种MIN()技术。

    Tip

    这种技术有助于从数据中推导出额外的列。在此示例中,您使用了MIN(0.2)。然而,在几乎所有其他用例中,最好使用MIN(0.0)MIN(1.0);这些更自然的值可以用作占位符。

    如果您想要保持圆圈与文本右对齐,您只需隐藏标题并去除网格线,就可以了。但由于您试图将圆圈放在度量的左侧,并同时保持文本右对齐,因此还需要一些额外的步骤。

  3. 双击 AGG(MIN(0.2))右侧,输入**MIN(1.0)**。这会在我们的视图上加倍标记,并创建第二个标记卡。结果是图 6-14。

    添加另一个虚拟数据列 MIN(1.0)会使标记加倍,但我们将更新可视化,以避免标记重复显示

    图 6-14。添加另一个虚拟数据列 MIN(1.0)会使标记加倍,但我们将更新可视化,以避免标记重复显示
  4. 取 AGG(MIN(0.2))和 AGG(MIN(0.2))测量值,并在两者之间创建一个同步双轴。这将使你得到图 6-15 的图表。

    在同步轴后,您会注意到一个圆圈,一个圆圈在一列的文本左侧,另一个圆圈在另一列的文本右侧

    图 6-15。在同步轴后,您会注意到一个圆圈,一个圆圈在一列的文本左侧,另一个圆圈在另一列的文本右侧
  5. 在 AGG(MIN(0.2))标记卡上,从文本中移除[Measure Values]。

  6. 在 AGG(MIN(1.0))标记卡上,将标记类型更改为甘特条,从颜色中移除[Measure Values],将颜色设置为白色,并完全确保它们不会与文本重叠或冲突,将不透明度更改为 0%。点击 Marks 卡上的 Label,并将水平对齐从自动更改为左对齐。图 6-16 显示了此阶段的可视化。

    调整 MIN(0.2)和 MIN(1.0)文本后,视觉指示器开始形成

    图 6-16。调整 MIN(0.2)和 MIN(1.0)文本后,视觉指示器开始形成
  7. 你已经快要完成了。要设置轴范围,请右键单击 MIN(0.2)轴,选择编辑轴。在编辑轴弹出窗口中,将范围设置为从 0 到 1。然后退出弹出窗口并隐藏两个轴。

  8. 右键单击图表,选择格式。在格式化线条下,移除所有网格线和零线。这样你就得到了最终的图表(图 6-17),文本仍然右对齐,但你也有了编码颜色的圆圈。

一旦格式化,视觉指示器会为数据的方向提供微妙的提示

图 6-17。一旦格式化,视觉指示器会为数据的方向提供微妙的提示

超越度量名称和值:Office Essentials 案例研究

我们在 Office Essentials 数据团队的朋友面临另一个挑战。他们的经理阿里喜欢图 6-17 中的表格,但她认为他们可以做得更好——她有一个愿望清单!这是她要求的:

  • 一种方法是将每年销售额的百分增长率与总销售指标一起显示

  • 一个像图 6-17 的表格,但突出显示最有利可图和最不利可图的项目

  • 一个销售表格,当某个特定周的数据完整一周时将自动更新,并显示自上周以来总订单是增加还是减少。

有时您希望构建表格,但您试图使用的计算需要除了度量名称和度量值之外的其他东西。阿里的所有请求都涉及为团队的表格提供更多上下文。有许多方法可以做到这一点,例如将维度添加到单元格中,或使用不同的标记类型对列数据进行编码。

查看图 6-18,显示在 Tableau 中创建的“表格”。为什么用引号?因为在 Tableau 中,真正的表格由单个工作表组成,而此示例不是。

这些可视化包括从左到右:

  • 一列,由第二个度量提供额外上下文(在本例中,是从月到月的百分比变化)

  • 一个具有特定阈值的列,其中颜色设置在$0 以下和$1,000 以上。

  • 一个第三列,根据数值是小于或等于零还是大于零,有颜色编码变化。第三列还包括不同的标记类型。

此可视化显示了三种标记类型:甘特图、条形图和形状。

使用占位符显示值的三种方法:添加上下文,为单个列添加颜色(而无需篡改!),以及添加自定义形状

图 6-18。使用占位符显示值的三种方法:添加上下文,为单个列添加颜色(而无需篡改!),以及添加自定义形状。

本例突出了我们(作者)将放入单个可视化中的一些基本原理,但并非我们会包含的所有特性。在下一个策略中,您应该专注于如何创建组件,而不是整个图表。

对于此示例,我们将使用MIN(1.0)来创建占位符列。使用此方法,我们为添加到行中的每个维度创建一个新的标记卡。这使您可以模仿度量名称和度量值,但根据个别指标定制表格时具有更大的灵活性。

策略:创建一个没有度量名称或度量值的表格主体。

在此策略中,您将创建表格主体,显示在图 6-18 中。此表格包括三种标记类型:

  1. 首先将[子类别]添加到行架上。

  2. 当您创建一个没有度量名称或度量值的表格时,您需要通过双击列架并输入**MIN(1.0)**来创建一个列占位符。这将创建一个带有高度为 1 单位的条形的列。将标记类型更改为甘特条。将颜色的不透明度设置为 0%。

    在此列中,您将显示最近一年的销售情况。您还将显示与上一年相比的销售差异。

  3. 编写以下计算,称为**[销售|当前年度]**,以显示最近一年的销售情况:

    // Sales | Current Year
    IF DATEPART("year", {MAX([Order Date])}) = DATEPART("year", [Order Date])
    THEN [Sales]
    END
    
  4. 编写**[销售额 | 去年]**来计算去年的销售额:

    // Sales | Prior Year
    IF (DATEPART("year", {MAX([Order Date])}) - 1)
      = DATEPART("year", [Order Date])
    THEN [Sales]
    END
    

    请注意,这两个计算之间唯一的区别是IF语句中布尔参数左侧的-1。这将返回比最大年份少一年的销售额。

  5. 现在可以通过创建一个称为**[销售额 | 当年与去年同期比较]**的计算来计算这两个计算之间的差异——销售额的变化:

    // Sales | CY vs PY
    SUM([Sales | Current Year]) - SUM([Sales | Prior Year])
    

    创建完这三个计算后,请确保将数字的默认格式设置为带有没有小数位的货币格式。

  6. 将[销售额 | 当年]和[销售额 | 当年与去年同期比较]计算添加到标记卡的文本上。将文本格式设置为左对齐(图 6-19 中的#be_sure_text_is_left-aligned_on_the_text)。

    确保文本在文本按钮上左对齐

    图 6-19. 确保文本在文本按钮上左对齐
  7. 格式化标记类型如下:

    1. 点击省略号编辑文本。

    2. 将[销售额 | 当年]放在第一行,将[销售额 | 当年与去年同期比较]放在第二行。

    3. 将[销售额 | 当年与去年同期比较]的大小调整为[销售额 | 当年]字体大小的大约 33%。在图 6-20 中的#right-align_and_format_text_in_the_text 中,[销售额 | 当年]的字体大小为 15 像素,而[销售额 | 当年与去年同期比较]的高度为 10 像素。

    4. 还应将第二行的颜色设置为稍浅的色调。在文本编辑器中将该字体右对齐。

      右对齐并格式化文本编辑器中的文本

    图 6-20. 右对齐并格式化文本编辑器中的文本
  8. 右键单击并格式化线条,并删除网格线、零线、轴标尺和轴刻度。这将使您得到图 6-21 中的可视化效果,满足 Ali 愿望清单上第一项的要求。

    结果是一个给数据提供背景的列

    图 6-21. 结果是一个给数据提供背景的列

    让我们再添加一列。这将让您突出显示最赚钱和最不赚钱的项目,这是 Ali 愿望清单上的第二个要求。

  9. 添加一个看起来像突出显示表的列:

    1. 添加另一列。双击 AGG(MIN(1.0)右侧,并输入**MIN(-1.0)**

    2. 将 MIN(-1.0)的标记类型更改为条形。编辑轴,范围从-1 到 0。

    3. 将颜色改回 100%不透明度。将大小改为略低于最大值。

    4. 创建最近一年总利润的计算,称为**[利润 | 当年]**

      // Profit | Current Year
      IF DATEPART("year", [Order Date]) = DATEPART("year", {MAX([Order Date])})
      THEN [Profit]
      END
      

    接下来,格式化这个计算的数字,然后将该度量放置在 AGG(MIN(-1.0))标记卡的文本位置。

  10. 通过这种技术创建列,您可以使用自定义计算设置离散颜色。例如,如果利润为负数,则创建一个名为 Bad 的类别;如果值大于$10,000,则将成员添加到名为 Good 的类别中。所有其他成员应分类为 Neutral:

    // Profit | Current Year | Color
    IF SUM([Profit | Current Year]) < 0
    THEN "Bad"
    ELSEIF SUM([Profit | Current Year]) > 10000
    THEN "Good"
    ELSE "Neutral"
    END
    

    [利润 | 当年 | 颜色] 添加到 AGG(MIN(-1.0)) 的标记卡的颜色。编辑颜色。设置颜色为 Bad 为红色 (#D81159),Good 为绿色 (#75CF4A),Neutral 为白色 (#FFFFFF)。将不透明度设置为 70%。

    现在您的表格应该看起来像 图 6-22。

    您可以在条形图中使用自定义颜色使列看起来像表格

    图 6-22。您可以在条形图中使用自定义颜色使列看起来像表格
  11. 添加一列,显示总订单的变化情况。您将展示与前一年相比最近一年总订单的差异:

    1. 在 AGG(MIN(-1.0)) 的右侧,键入 **MIN(1.0)**。这将创建另一个标记卡。

    2. 将标记类型更改为形状,并将颜色的不透明度设置为 100%。

    3. 创建当年总订单的计算:

      // Total Orders | Current Year
      COUNTD(
        IF DATEPART("year", {MAX([Order Date])})
          = DATEPART("year", [Order Date])
        THEN [Order ID]
        END
      )
      

      并创建 **[总订单 | 去年]** 来计算前一年的订单:

      // Total Orders | Prior Year
      COUNTD(
        IF (DATEPART("year", {MAX([Order Date])}) - 1) = DATEPART("year", [Order Date])
        THEN [Order ID]
        END
      )
      

      然后计算两个总数之间的差异,称之为 **[总订单 | 当年 vs 去年]**

      // Total Orders | CY vs PY
      [Total Orders | Current Year] - [Total Orders | Prior Year]
      

      在新的标记卡上的文本中添加 [总订单 | 当年 vs 去年]。将文本左对齐。

    4. 现在为形状和颜色创建一个计算:

      // Total Orders | CY vs PY > 0
      [Total Orders | CY vs PY] > 0
      

      将此计算添加到形状和颜色中。将 True 设置为一个填充的上箭头,将 False 设置为一个填充的下箭头。将 True 的颜色设置为步骤 10 中的绿色,将 False 的颜色设置为 Bad 类别的颜色(红色)。

      隐藏标题并移除列分隔线。右键单击标题上的 [子类别],选择“隐藏行的字段标签”。结果显示在 图 6-23 中。

第三列显示自定义形状,与完全不同设计的两列并排

图 6-23。第三列显示自定义形状,与完全不同设计的两列并排

其一缺点是这种技术创建了一个没有标题的表格,这意味着您无法依赖 Tableau 内置的列排序功能。我们可以创建标题,可以使用文本框或者工作表。如果您不需要动态排序,可以使用文本框;否则,可以使用工作表或参数来创建排序选项。

策略:创建没有度量名称或度量值的表头

除了表体外,还可以将可视化与表头结合起来。让我们在这里尝试一下:

  1. 在仪表板上,添加一个垂直容器。将刚刚创建的表格放入该容器中。单击并拖动一个水平容器到垂直容器中,但将其放置在表格上方。

  2. 在水平容器内,添加三个文本框,分别为 **销售****利润****总订单**。选择水平容器,选择“编辑高度”(图 6-24),将高度设置为 50 像素。

    在仪表板上,添加文本到水平容器并编辑容器的高度

    图 6-24. 在仪表板上,向水平容器添加文本并编辑容器的高度
  3. 调整水平容器的左边距,使文本框与列对齐。Tableau 的指南会自动显示在容器内部,这样做更加容易(参见图 6-25)。

    如果您正确地格式化表格和文本框,结果将是一种类似表格的可视化效果

    图 6-25. 如果你正确地格式化表格和文本框,结果将是一种类似表格的可视化效果。
  4. 最后,将每个文本框的右边距从 4 调整为 14。这将使表头文本的右侧与表格中的文本对齐。

这个“表”的最终版本

图 6-26. 这个“表”的最终版本

最终的产品,显示在图 6-26,是一个“表格”,不使用度量名称或度量值,并允许您使用不同的标记类型自定义每列,多个文本度量以及颜色。这是卢克构建表格的首选方法;安对此方法的依赖程度较低。然而,当需要时,我们都依赖这种技术。

策略:使用度量作为标题

有时,与其将聚合度量放置在 Marks 卡的文本中,您可能希望将该值作为维度包含在标题中(尽管它是聚合值)。当您希望共享一组维度的总体值或使用数据驱动的指标来突出显示一组值时,此策略非常合适。

我们的下一个策略解决了阿里愿望清单的第三项:一个表格,当特定周的数据完整时将自动更新(参见图 6-27)。在其中,您将创建一系列度量(既作为 LOD 计算又作为表计算),并将其用作标题。

您将继续使用 Superstore – Sample 数据集来编写两个 LOD 计算:一个计算每周的总销售额,另一个生成一个箭头以突出显示销售总额最高的周。您还将创建一个计算来对过去 13 周的销售进行排名。

然后,您将按类别拆分销售额,显示每个类别按周的销售排名,并突出显示最高和最低的周。

有时您需要使用度量作为行标题,如此示例中,其中排名和总销售额是转换为维度的度量

图 6-27. 有时您需要使用度量作为行标题,例如此示例中的排名和总销售额被转换为维度的度量

这里是步骤:

  1. 创建一个名为**[全周数 | TF]**的新计算,用于确定最近一周是否完整。该计算创建一个布尔值,检查订单日期是否在最大日期加一天的周的开始之前:

    // Full Weeks | TF
    [Order Date] < DATETRUNC("week", {MAX([Order Date])} + 1)
    

    将此新计算添加到 Filters 架构中并选择 True。一旦应用了过滤器,右键单击 Filters 架构中的[Full Weeks | TF]并将其转换为上下文过滤器。

  2. 由于 Ali 希望这个可视化只显示最近的 13 周,让我们创建另一个过滤器来实现这一点。

    创建一个名为**[Last 13 Weeks]**的新计算。它看起来与前一个计算类似,不同之处在于你会将不等号改为大于或等于。你还会将参数的右侧嵌套到 DATEADD()函数中,以便你可以回溯:

    // Last 13 Week
    [Order Date] >= DATEADD("week", -13, DATETRUNC("week",
      {MAX([Order Date])}))
    

    将此计算放置在 Filters 中。选择 True。然后将过滤器转换为上下文过滤器。

    现在你的过滤器已经完成,你可以开始构建可视化了。

  3. 转到数据窗格上的[Order Date]。右键点击,选择创建 → 自定义日期。在创建自定义日期对话框中,设置名称为**Order Date | Week**。从详细列表中选择“周数”。选择日期值,然后点击确定。

    创建完成后,右键点击数据窗格上的字段并选择转换为离散值。这将使 Tableau 在视觉化时将计算视为离散值(这将节省未来的步骤)。

    现在简单地复制[Order Date | Week]字段。你可以将其重命名为**[Order Date | Week 2]**

    提示

    为什么需要两个相同的字段?因为你将要隐藏其中一个维度的标题。如果你在 Rows 或 Columns 上有相同的计算两次,它将隐藏所有字段相同的标题!试一试:将[Order Date | Week 2]添加两次到 Columns,然后隐藏一个标题——它们都会消失。

    现在你要添加到现有的可视化中。如果你已经尝试过,请确保重新选择显示标题。你还需要从视图中删除[Order Date | Week 2]字段。

    将[Order Date | Week]添加到行架构中,并加上维度。对[Order Date | Week 2]执行相同操作,但将其放置在 Rows 的左侧。你应该会看到两个外观相同的列标题(参见图 6-28)。

    两个可见标题的重复字段

    图 6-28. 两个可见标题的重复字段
  4. 从这里开始,你可以在视图中添加维度和度量。将 SUM(Sales)添加到 Marks 卡片上的 Text,并将[Category]添加到 Columns 架构中。确保你的文本对齐方式是右对齐以显示销售额值。

  5. 你将会构建三个计算,如图 6-29 所示。第一个是特定周的总销售额。第二个是指向总销售额最高周的箭头。第三个按周总销售额排名。

    构建基础表

    图 6-29. 构建基础表
  6. 创建一个名为 **[总销售额]** 的计算,使用 LOD。通过你的 [订单日期 | 周] 计算设置固定值,并将 SUM(Sales) 放在参数的右侧。这告诉 Tableau 计算每周的总销售额:

    // Total Sales
    {FIXED [Order Date | Week] : SUM([Sales])}
    
  7. 创建一个名为 **[最佳周]** 的计算字段,使用刚刚编写的 [总销售额] 计算。这将计算出总销售额最好的周:

    // Best Week
    IF [Total Sales] = {MAX([Total Sales])}
    THEN "►"
    ELSE ""
    END
    

    这个计算将一个 LOD 计算嵌套到另一个 LOD 计算中,以获取顶部的整体值,即最大值。如果一周等于该顶部值,您希望它通过使用 ASCII 码返回一个右箭头。

    提示

    ASCII 编码使用数字代码来代替字符,如英语字母、数字和标点符号。(例如,大写字母 S 的 ASCII 代码为 83。)其他编码系统,如 Unicode,提供了更多的选项。通常情况下,你不会手动输入 ASCII 代码;你可以从网站(如 Alt-Codes)复制粘贴它们。

  8. 对于每周的排名标签,我们不会使用排名函数(惊喜!)。相反,我们将使用 INDEX()。创建一个名为 **[排名标签]** 的计算,并写入以下内容:

    // Rank Label
    "(#" + STR(INDEX()) + ")"
    

    这将返回一个索引值加上格式化,以便任何值都在括号内。

    注意

    你是否注意到我们避免使用排名函数?我们不会在这里向你介绍技术细节,但重要的是要知道,有时在 Tableau Desktop 与 Tableau Server 上,排名值的顺序可能会有所不同。为了避免这个问题,我们使用 INDEX() 函数。这个更直接的函数简单地为你的分区中的行添加一个数值索引值。

  9. 现在你已经编写了计算公式,可以将它们放到你的视图中并转换为标题:

    1. 从 [总销售额] 开始。从数据窗格中拖动这个值到行架上。在值显示在行架上后,右键单击并选择离散。再次右键单击并在格式窗口上选择格式。将值的格式更改为没有小数位数的货币形式。(确保你正在格式化标题而不是窗格。)你当前的视图应该像 图 6-30 一样。

      一个表,现在包括总销售额作为度量转为维度

      图 6-30. 一个表,现在包括总销售额作为度量转为维度
    2. 将 [最佳周] 从 [订单日期 | 第 2 周] 拖动到 [订单日期 | 周] 之间的行上。你应该在视图中看到一个单独的右箭头。

    3. 重复上述步骤来创建 [排名标签],将值放置在 [订单日期 | 周] 和 [总销售额] 之间。警告:视觉效果可能不会像你想象的那样。这是因为它是一个表计算,你需要编辑你的聚合方式。

    4. 在你的行架上右键单击编辑[排名标签]的表计算。选择具体维度并选择除了[类别]之外的所有值(因为我们希望分别在每个类别上完成此计算)。

      然后通过使用自定义排序在表计算窗口中编辑排序顺序。将排序设置为按销售总额降序排列。您的可视化效果应该类似于图 6-31。

      将排名作为度量转化为维度添加

    图 6-31. 添加排名作为度量转化为维度
  10. 现在,您只需右键单击[订单日期 | 第 2 周]并取消选中“显示标题”。这将使您的大多数可视化完成(参见图 6-32)。

    添加箭头指示顶级周数

    图 6-32. 添加箭头指示顶级周数
  11. 此可视化效果不错,但是对于 Ali 和她的团队来说,在视觉上区分排名是有些困难的。如果表格有一些颜色会更容易。我们试试看。

    1. 双击列并输入**MIN(-1.0)**。将标记类型设置为条形,并将度量的轴设置为从–1 到 0。将标记的大小设置为最大值。点击 Marks 卡上的标签属性并将对齐方式更改为左对齐(由于条的原点是负值,标签实际上将位于右侧)。隐藏轴。

    2. 要突出排名,您可以使用颜色来突出显示顶部值、接下来的两个顶部值、底部值和接下来的两个底部值。您可以通过使用INDEX()函数并在视图上排序来实现。创建名为**[颜色]**的以下计算:

      // Color
      IF INDEX() =  1
      THEN "TOP"
      ELSEIF INDEX() <= 3
      THEN "TOP 3"
      ELSEIF INDEX() = SIZE()
      THEN "BOTTOM"
      ELSEIF INDEX() >= SIZE() -2
      THEN "BOTTOM 3"
      ELSE "MIDDLE"
      END
      

      计算的输出是每种成员类型的标签。正如您在本章中所见,您可以使用INDEX()在 Tableau 中创建更可靠的排名计算。

      此计算将INDEX()SIZE()配对。SIZE()函数非常适合自动确定视图(您的表)中的行数——在本例中是周数。

    3. 创建此计算后,将颜色值添加到 Marks 卡的 Color 属性中。添加值时,您还需要右键单击并编辑表计算。点击并拖动[类别]到四个维度列表的顶部。选择具体维度。在“在级别”列表中,确保选择最深层次,并在“每次重新启动”列表中选择类别(参见图 6-33)。

      编辑表计算以确保正确计算颜色

    图 6-33. 编辑表计算以确保正确计算颜色

    这将更改颜色,以便每个类别中有一个顶级周,在底部有一个周,在前 3 个中还有两周,在后 3 个中还有两周。所有其他的将编码为 MIDDLE。

  12. 调整表格计算后,您可以分配颜色了。表格 6-1 提供了我们在这一策略中使用的确切颜色的十六进制代码。

    表格 6-1. 颜色和标签

    标签 颜色
    TOP #989CA3
    TOP3 #D3D3D3
    MIDDLE #FFFFFF
    BOTTOM 3 #FCD8E5
    BOTTOM #F690B5

    这将使您的表格看起来像图 6-34。

    添加了顶部、中部和底部值颜色后的表格视图

    图 6-34. 添加了顶部、中部和底部值颜色后的表格视图
  13. 使用INDEX()函数和临时计算创建您的排名,如下所示:

    1. 双击标记卡上 SUM(Sales)下方的空白处。这应该会创建一个临时计算。

    2. 键入**INDEX()**然后按 Enter。现在,在标记卡上应该有第二个计算:INDEX()。

    3. 点击 INDEX()左侧的小图标——这是一个迷你详细信息图标——将类型更改为文本。

    4. 根据视图中间隙的大小,您可能会看到####符号,表示文本空间不足。要修复此问题,请点击视图上的文本并进行编辑。

    5. 格式化文本,使 INDEX()计算略小于 SUM(Sales);参见图 6-35。

    6. 同时将颜色设置为稍浅的色调。我们在颜色编辑器的黑色列中使用了倒数第二个颜色。

      工具提示的文本编辑器

    图 6-35. 工具提示的文本编辑器
  14. 设置格式后,您会注意到通过INDEX()函数设置的“排名”未按正确顺序显示。请按以下方式进行修复:

    1. 编辑表格计算。

    2. 选择特定维度和所有列出的维度。

    3. 将 Category 拖动到维度列表的顶部。

    4. 在“在级别”列表中,确保选择了 Deepest。从“每次重新开始”列表中选择 Category。然后按销售总额降序完成自定义排序。

    您的结果应该看起来像图 6-26。

使用子集解决问题并隐藏可怕的 Abc:Office Essentials 案例研究

OE 拥有大量产品。事实上,在一个子类别中,可能有数百种产品。当然,了解畅销产品很重要,但 Ali 和数据团队需要更多细节:他们想要构建一个表格,显示每个子类别内的畅销产品。他们还希望将这些产品的销售数字与该类别中所有其他产品的销售数字进行比较。他们尝试使用一个集合,但效果不佳。他们该怎么办?

还有一个问题——他们的一些表格始终生成一个奇怪的列,每行都只读“Abc”。团队需要在展示结果之前摆脱这个“Abc”列,但它怎么也不肯走。问题出在哪?

是的,你的作者对这些问题都很了解。别担心,我们会解决这些表格排序问题。

策略:显示子类别内的顶级产品

让我们从这些子类别总数开始。OE 数据团队尝试使用集合,但没有成功。那是因为集合只适用于数据源的最高级别,他们希望按类别内的单个产品拆分数据。您不能在产品级别使用集合。请跟随我们的步骤来找到解决方法:

  1. 要构建顶级子类别集,创建一个新的整数参数,称为 **[前 N 个子类别]**。将值设置为 4。

    现在创建一个名为 **[子类别 | 利润]** 的子类别为 Top N 集。使用 [Top N 子类别] 参数设置集合中的子类别数量,并选择 [利润] 的总和作为度量。

  2. 创建一个顶级子类别计算:

    // Sub-Category Header
    IF [Sub-Category | Profit]
    THEN [Sub-Category]
    ELSE "All Others"
    END
    

    将 [子类别标题] 放置在行上。

  3. 编写一个子类别排序计算:

    // Sub-Category Sort
    IF MIN([Sub-Category | Profit])
    THEN COUNTD([Order ID])
    ELSE 0
    END
    

    右键单击行上的 [子类别标题],并按子类别排序(参见图 6-36)进行降序排序。

    行上的 [子类别标题] 计算

    图 6-36. 行上的 [子类别标题] 计算
  4. 创建一个整数参数,用于显示要显示的产品数量。称其为 **[前 N 个产品]**。将整数设置为 5. 此参数可用于动态更新显示详细信息的产品数量。

  5. 创建一个名为 **[产品索引]** 的函数:

    // Product Index
    INDEX()
    

    此计算将作为每个产品在其子类别内的排名(稍后我们将更详细地讨论)。同时,您可以使用此计算来帮助构建其余的计算。

  6. 创建一个计算,以帮助您将产品按我们的 Top N(在我们的示例中为 Top 5)分类到每个子类别中。如果某个产品落在 Top N 之外,它仍然会获得排名,只是在顶部之外:

    // Product Sort
    IF [Product Index] > [Top N Products]
    THEN [Top N Products] + 1
    ELSE [Product Index]
    END
    

    将 [产品排序] 放置在 [子类别标题] 的左侧行上(确保它是离散的)。将 [产品名称] 添加到 [子类别标题] 的右侧行上。编辑 [产品名称] 的排序顺序,按关键指标(在本例中为 [利润] 的总和)进行降序排序。

    现在右键单击以编辑 [产品排序] 的表格计算。选择特定维度,仅选择产品名称。您将看到类似于 图 6-37 的内容。

    在这个表格中,前 5 个产品与其余产品分开

    图 6-37. 在这个表格中,前 5 个产品与其余产品分开。
  7. 创建一个名为 **[产品行标签]** 的计算。此计算将是您在行上看到的标签:

    // Product Row Labels
    IF [Product Index] <= [Top N Products]
    THEN ATTR([Product Name])
    ELSE "All Others"
    END
    
    提示

    您是否注意到我们在这里使用了属性函数ATTR()?由于索引计算是一个聚合,计算内部的维度也需要聚合。ATTR()评估维度的最小值和最大值,如果它们相同,则返回该值;如果它们不同,则返回星号(*)。

    将此维度添加到[产品名称]右侧的行架上。编辑行架上值的表计算,选择特定维度,并仅选择产品名称。

  8. 创建顶级产品的行标题。首先创建一个名为[产品标题]的计算。您将使用此计算作为一个筛选器,以显示顶级产品和[其他产品]子类别中的第一个产品:

    // Product Header
    [Product Index] <= [Top N Products] + 1
    

    保存计算后,将此维度拖放到筛选器架上。单击确定(不必担心选择值)。编辑表计算;在内部选择特定维度,仅选择产品名称。然后编辑过滤器,并仅选择真实值。图 6-38 显示了应该看起来的样子。

    添加筛选器并创建产品行标签后的结果

    图 6-38。添加筛选器并创建产品行标签后的结果
  9. 将[产品行标签]添加到行架后,您可以通过右键单击行架上的每个维度并取消选中显示标题来隐藏[产品排序]和[产品名称]。

  10. 现在,您必须创建在视图上使用的所有度量。对于每个度量,您将使用相同的格式。对于超出前 N 名的值,您需要计算某些聚合的TOTAL()。如果值在前 N 名之内,则可以直接使用标准聚合。

    在这里,将SUM(Profit)放在TOTAL()函数内,但仅当它在前 5 名之外时。当[产品名称]位于前 5 名内时,采用标准的SUM(Profit)

    // Profit | Top N Products
    IF [Product Index] > [Top N Products]
    THEN WINDOW_SUM(
      IF [Product Index] > [Top N Products]
      THEN SUM([Profit])
      END
    )
    ELSE SUM([Profit])
    END
    

    要包括其他聚合度量,您可以重复相同的步骤。以下是[销售]的计算:

    // Sales | Top N Products
    IF [Product Index] > [Top N Products]
    THEN WINDOW_SUM(
      IF [Product Index] > [Top N Products]
      THEN SUM([Sales])
      END
    )
    ELSE SUM([Sales])
    END
    

    这里还有[总订单]的计算:

    // Total Orders | Top N Products
    IF [Product Index] > [Top N Products]
    THEN WINDOW_SUM(
      IF [Product Index] > [Top N Products]
      THEN COUNTD([Order ID])
      END
    )
    ELSE COUNTD([Order ID])
    END
    

    当您将所有三个度量放在可视化中时,您需要编辑每个计算中的嵌套表计算。确保同时编辑。选择特定维度,并选择产品名称。

    因为显示在标题上的计算名称可能对您的观众来说不够直观,我们建议编辑它们的别名。对于度量,右键单击列架上的[度量名称],选择编辑别名;然后重命名维度别名。对于行上的维度,您可以右键单击标题名称,并选择隐藏行标签。还要确保添加适当的表格格式。

    最终的可视化显示在图 6-39 中。

最终可视化的完整视图

图 6-39。最终可视化的完整视图

注意,底部产品总是显示为所有其他产品,并且是该类别中所有其他产品的总和。

策略:隐藏 Abc

有时,您只想创建一个表格来探索其维度,或将数据输出到.csv文件或其他格式。但如果您仅在行上使用维度而没有任何列上的度量或文本上的维度,那么您将得到视图上维度值中的“Abc”:字面上只显示字母“Abc”。您可以在图 6-40 中看到它,以及前面策略中的一些图像。

表格中没有文本值时产生的恐怖的 Abc 列

图 6-40。恐惧的 Abc 列来自表格中没有文本值。

美观上,这个 Abc 列是一场噩梦。对您的最终用户也是一种干扰。您应该摆脱它。以下是如何做到这一点:

  1. 使用 Sample - Superstore 数据集,并将[Order ID]、[Customer Name]、[Country/Region]、[State]、[City]和[Ship Mode]放在行上。

  2. 双击 Marks 卡按钮下方的空白处,并键入**""**。这是空引号 ——两个没有内容的引号。

  3. 单击空引号左侧的图标并更改类型为文本。然后将空引号放置在文本上并移除 Abc。

  4. 在您的键盘上,按 Ctrl 右箭头三次以使标签变宽。

  5. 通过点击和拖动右边框调整列的大小,使其尽可能小到 Ship Mode 列。

  6. 在您的键盘上按下 Ctrl 左箭头五次。

    提示

    步骤 6 调整表格的行宽。这也适用于行高:你可以使用上下箭头,而不是左右箭头。

    这将使您的表格具备导出准备就绪的状态,不再显示“Abc”(图 6-41)。

已移除 Abc 的最终版表格

图 6-41。已移除 Abc 的最终版表格

结论

对于仪表板开发人员来说,创建表格可能是一种难以接受的事情。我们有能力做更多!但表格并没有消失,对于某些观众来说,它们确实是理解和评估数据的最佳方式。我们的工作是利用我们的分析工具为他们提供能够使他们的工作更轻松、决策更快速的见解。有时,这意味着设计表格。

请记住,创建表格始终有一个目的。无论您的观众是试图理解单个路线和负载的供应链团队,还是试图理解支出的执行团队,如果您围绕他们的目的设计,您将能够帮助他们。

不要低估在改善表格的整体外观和感觉时所需的时间。通过遵循本章开头我们概述的简单步骤,您可以轻松清理表格的设计。

考虑添加一些色彩的点缀。通过间歇性和有思考的使用颜色,你可以突出表格中的关键信息,就像在仪表板中一样。我们向你展示了如何限制表格中颜色的使用量。我们还向你展示了如何将编码从高亮更改为点,这简化了观众与数据交互的方式。

另一种突出数据见解的方法是在每一列中使用不同的编码方式。例如,你可以使用箭头或额外的文字,而不仅仅是点或彩色单元格。我们已经向你展示了如何为不同列创建自定义表格,并且即使没有使用测量名称或测量值作为表头,也可以使用不同的标记类型。同时,当你构建仪表板时,我们还向你展示了如何重新创建这些表头。我们还向你展示了如何在表头中使用测量值。你还学习了在表格中为数值添加背景的多种方法,这是一个重要的主题,我们将在第十二章中再次讨论。

最后,我们解决了 Tableau 表格中两个常见问题。由于没有针对在数据的各个子集中突出显示顶级产品的开箱即用方法,我们向你展示了一种解决方法。你还学会了如何消除一些非常大的表格中出现的烦人的“Abc”列。

在下一章中,我们将转变视角,探讨另一种为数据提供背景的强大方式:使用地图。

第七章:处理地理空间数据

您上次真正地看过地图是什么时候?我们指的是真正地看过地图?您有没有停下来赞赏和认识到它们所包含的大量数据和信息?

地图是最强大的可视化类型之一,也许是我们在生活中最早接触到的类型之一。试着回想一下你第一次理解如何阅读地图的时候——很难回想起来,对吧?许多人几乎本能地理解地图,这使它们成为传达数据的有用工具。

记住,地理邻近性和分布对任何地图分析至关重要。这实际上是在考虑制作地图时的关键区别因素。仅仅因为能够绘制某些内容,并不意味着应该这样做。

本章中,我们将向您展示在 Tableau 中创建地图的技术。我们还将帮助您了解何时适合创建地图,而不是像可靠的条形图那样简单的东西。

分区(填充)地图

Tableau 的一个关键差异化因素是其映射数据的能力。映射是最强大的数据职业之一——事实上,甚至还有一个专门领域称为地理信息系统(GIS)。尽管这种专业化水平带来了一些令人惊叹的工具,但这也意味着,直到最近,数据映射和商业智能数据可视化大多是分开进行的,用于创建地图的工具与用于仪表板和条形图的工具也不同。

Tableau 通过允许用户获取数据集中常见的地理数据元素(如邮政编码、城市、州/省、地区和国家)并自动将正确的纬度和经度坐标赋予它们来区别于其他软件。它还可以为它们分配适当的形状或地理多边形(空间对象)。这意味着您无需知道西雅图,华盛顿的坐标;Tableau 将通过其内置的地理数据库提供它们。同样,您无需创建多边形对象或坐标列表来构建华盛顿州;只需向 Tableau 提供州的名称即可让其识别并绘制多边形。分区地图将数值值作为地图上的颜色比例尺进行绘制。

用分区地图显示客户渗透:Office Essentials 案例研究

OE 正在评估人口统计数据,以更好地了解其核心客户。高管们想要回答一个看似简单的问题,“我们的客户来自哪里?”您会如何建立可视化以展示这一点?

首先,您将建立一个分区地图。(在 Tableau 中,这被称为填充地图;这些术语是同义的。您将根据居住在各州的购买客户数量对美国各州进行着色(图 7-1)。

显示美国各州客户数量的基本分区地图

图 7-1。显示美国各州客户数量的基本分区地图

策略:创建简单的分区地图

让我们开始构建我们的地图:

  1. 双击 Data pane 内的[State]字段。Tableau 将看到这是一个地理值,并自动创建地图。这是我们建议双击字段并让 Tableau 决定如何在可视化中呈现的少数情况之一。

  2. 创建一个名为**[# of Customers]**的计算字段。这将是客户名称的唯一计数:

    //# of Customers
    COUNTD([Customer Name])
    
  3. 将此新创建的度量拖放到 Marks 卡片上的 Color 字段。Tableau 会自动更改标记类型。

  4. 单击 Marks 卡片上的 Label 并打开标签。

停下来检查图表。您能立即获得什么见解?与其他州相比,加利福尼亚州、德克萨斯州和纽约州拥有最多的客户。还有其他什么?老实说,很难区分中间排名的州。除了前几个州外,其他州看起来差不多。

您是否有一种隐隐的感觉,这张地图并未完全或准确地反映数据故事?如果是这样,我们与您想法一致。虽然这三个州确实拥有最多的客户,但它们也有最大的人口。因此,虽然说这些州拥有最多的客户是准确的,但这种说法忽略了我们理解每个州客户渗透水平所需的背景。

要改善此地图,我们建议对数据进行归一化处理。归一化意味着调整数字的比例,使其不再是每次读数都独立,而是在所有读数中保持一致。

对于这张地图,您需要将客户数量与每个州的人口进行归一化。用更合适的度量来表达我们的办公用品店可能具有更深的客户渗透度,将会使用人均(每人)的测量。这将把我们的客户数表示为每个州人口的百分比。也可以这样说:“我们每千名州公民拥有多少客户?”

策略:归一化分区地图

现在我们要引入一个新的数据集来归一化数据:

  1. 通过包括每个州的人口数据来增强数据:

    1. 转到数据源并添加新的连接。

    2. 导航到包含美国各州人口普查和估计数据的文件。

  2. 使用 Tableau 的逻辑数据建模,在人口普查数据和客户订单数据之间创建一个关系。这个关系将基于选择 State = 地理区域,如图 7-2 所示。我们将在第十章详细探讨数据建模。现在,知道 Tableau 通过州名关联这两个数据集就足够了。

    使用 Tableau 的逻辑数据建模创建关系

    图 7-2. 使用 Tableau 的逻辑数据建模创建关系
  3. 构建一个计算字段,即**[% of Customers per State]**。分子将是**[# of Customers]**,分母将是**[SUM(Census)]**。将字段的默认格式设置为百分比,显示四位小数:

    //% of Customers per State
    [# of Customers]
    /
    SUM([Census])
    

    您认为在 图 7-3 中更新的地图如何?这是否改变了您对客户数据的理解?

正常化后的等值区域地图

图 7-3. 正常化后的等值区域地图

我们认为是这样。第一张地图让人觉得加利福尼亚州、德克萨斯州和纽约州是表现出色的地区。现在我们已经对数据进行了标准化,很明显我们的商店在华盛顿州和特拉华州有很强的存在感。总结性措施并不能完全讲述全部故事。

但我们仍然认为这张地图需要更清晰。下一个要解决的问题是色彩渐变。正如您在 第一章 中看到的,颜色编码并不是区分数据点最精确的方法。特别是在制图中,重要的是您花时间考虑如何最好地显示数据。

幸运的是,对颜色感知的研究导致了考虑可访问性问题的颜色调色板的开发,如感知的一致性、生动性和色盲。我们特别推荐四种渐变色调色板:Viridis、Magma、Plasma 和 Inferno。所有这四种色调最初在 R 中开发,并且在 Tableau 中使用起来很容易。

策略:添加自定义颜色调色板

您可以在 Tableau 的首选项中编码几种类型的颜色调色板。在本练习中,我们将使用有序顺序调色板,这意味着每种颜色都按顺序列出,并且在使用连续字段进行颜色设置时可用。

  1. 选择 文件 → 仓库位置 以确定 Tableau 文件的默认保存位置。

  2. 查找 preferences.tps 文件并在文本编辑器中打开它。

  3. 转到 Tableau Public 上由 Jacob Olsufka 构建的 颜色调色板仪表板,复制并粘贴 Viridis 色调色板的十六进制代码。

  4. 保存并关闭您的 Preferences 文件。重新启动 Tableau Desktop 以激活新的调色板。

    1. 单击 Marks 卡片上的 Color。

    2. 将调色板更改为 Viridis。

    这对可视化的轻微改进,在 图 7-4 中显示,显著提高了观众的理解。所有中央州,一度略有不同的蓝色调,现在更容易区分。现在您可以清楚地看到特拉华州在客户渗透率方面表现最好。

使用 Viridis 色调色板的标准化区域地图

图 7-4. 使用 Viridis 色调色板的标准化区域地图

您可以通过在颜色上使用另一个派生度量值进一步简化此可视化。假设您的观众想要知道哪些州的客户渗透率最高。他们希望得到州名作为答案;数值百分比则次要。使用百分位数可以使图像更加清晰。

策略:创建分位数区域图

对于此策略,您将创建一个分位数地图。此地图中各州的颜色将指示数值的百分位,介于 0%到 100%之间。分位数是均匀分布的一定数量的比例片段。最常见的两种分位数是四分位数(将数据分为四个均匀分布区间:0 到 25%、25 到 50%、50%到 75%和 75%到 100%)和分位数(将数据均匀分布为十个部分)。在这里,您将制作一个分位数地图:

  1. 右键单击[每州客户百分比]度量值上的颜色,选择快速表计算 → 百分位数(图 7-5)。现在数据将以百分位数表示,最小值为 0%,最大值为 100%。

    以百分位数表示数据

    图 7-5. 以百分位数表示数据
  2. 点击颜色 → 编辑颜色,并选择阶梯颜色。将步数更改为 10。

  3. 通过点击高级选项,勾选每个框并输入值,将调色板范围的开始和结束固定在 0 和 1 之间(图 7-6)。

    设置调色板范围

    图 7-6. 设置调色板范围
  4. 通过从数据窗格将度量值拖动到标签上,将标签更改回[每州客户百分比]。

    调色板的好处显而易见:您可以轻松区分不同的颜色,并在心理上将状态映射到不同的分位数(图 7-7)。这让您可以告诉观众,客户渗透率前 10%的州分别是华盛顿州、宾夕法尼亚州、纽约州、特拉华州和罗得岛州。

带 Viridis 色调的分位数区域图

图 7-7. 带 Viridis 色调的分位数区域图

我们从基本指标(客户数)开始,进一步到百分位数。可读性上的显著差异凸显了思考数据展示方式及向观众传达信息的重要性。这种简单的进步在创建引人入胜且有洞察力的可视化方面已经走了很长一段路。

符号地图

在 Tableau 中您可能要创建的第二种最常见的地图类型是符号地图。它将一个离散或连续字段编码到形状上。该形状可以在大小和颜色上进行额外的编码,以进一步区分它。

使用符号地图展示盈利能力和渠道分布:OE 案例研究

现在 OE 想知道哪个城市为公司带来的利润最多。使用相同的数据集,您将如何构建一个显示两个度量的地图:销售和利润比率?请记住,这个问题是多方面的:虽然利润比率是您的观众试图理解的主要指标,但它需要上下文,比如总销售额。销售经理更关心哪个:一个有百万美元销售额但利润率为 10%的城市,还是一个销售额为 500 美元但利润率为 90%的城市?

策略:创建一个符号地图

首先,在新工作表中,您将首先创建一个 Tableau 默认的符号地图,然后优化格式以便于您的观众:

  1. 在数据窗格中双击[城市],自动创建一个符号地图,显示数据集中每个城市的圆圈。

    小贴士

    根据您正在使用的数据集版本,您可能需要首先创建一个包含国家、地区、州、城市和邮政编码的层次结构。当您创建带有地理信息的层次结构时,Tableau 将自动将层次结构的更高级别添加到视图中。

  2. 将[销售]拖动到大小。调整标记的大小为 Tableau 建议的最大值,如图 7-8 所示。

    调整标记大小以显示销售情况

    图 7-8. 调整标记大小以显示销售情况
  3. 现在创建一个名为**[利润比率]**的计算字段:

    //Profit Ratio
    SUM([Profit])
    /
    SUM([Sales])
    
  4. 将[利润比率]拖动到颜色。Tableau 自动创建一个以 0 为中心的发散颜色调色板,识别到这个度量既有正值也有负值。

  5. 为了在视觉上区分重叠的标记,略微调整颜色不透明度,并添加边框(参见图 7-9)。

调整不透明度并添加边框

图 7-9. 调整不透明度并添加边框

如图 7-10 所示,经典的符号地图在数据分析中始终有其位置。但如果我们超越默认思维,利用符号地图创建一些独特和不同的内容呢?

经典的符号地图

图 7-10. 经典的符号地图

假设我们的办公用品执行官要求您为每个州的产品渠道的销售分布提供概述。(产品渠道在我们的数据段中。)为了回答这个问题,您需要展示一个度量按维度分离出来的情况。您可以通过堆积条形图来完成这项工作,但我们可以采用映射的方法。

策略:创建带甜甜圈图的地图

在这种策略中,您将在地图上方使用一个甜甜圈图来回答团队的疑问:

  1. 双击[州]构建一个地图。

  2. 将标记类型更改为饼图,并将[销售]拖动到角度。

  3. 将[分段]拖动到颜色,并调整标记的大小为建议的最大大小。

  4. 创建双轴以将饼图变成甜甜圈图:

    1. 将[纬度]拖动到行架上的副本。

    2. 右键单击该字段,选择双轴。

  5. 点击复制[Latitude]以访问标记卡片;从颜色中删除[Segment]并将标记颜色更改为白色。将标记大小调整为较小,以便仍然可见分段的饼图。

  6. 将[销售额]拖放到标签上,并将其格式化为以千元(K)为单位的单个小数货币。

    注意,图 7-11 中的地图提供了更深入的洞察力的两个信息层次。首先,它解决了主要的分析问题:“我们各州的销售额是多少?”然后,它提供了概述信息:每个州的总销售额。虽然您的观众可以看到销售额的视觉比例,但添加分母(每个州的总销售额)使他们能够进行心算,以确定他们所看到的视觉分布是否是需要记住的重要信息。

使用带有甜甜圈图的地图显示按州的销售额

图 7-11. 使用带有甜甜圈图的地图显示按州的销售额

平铺地图(卡托图)

当需要理解地理位置与数据时,地图非常有用。但同样重要的是要认识到地理区域的大小可能会对观众产生偏见。较大的地理区域自然会主导任何可视化的空间。当添加颜色编码时,观众的眼睛自然会被大而丰富多彩的区域所吸引,这使得他们很容易忽略地图中的一些细微差别。

为了弥补这一点,我们可以使用卡托图平铺地图。平铺地图将地理区域取出其复杂的实际形状,并用更均匀的形状替换。最常见的形状是正方形、六边形或其他可以镶嵌的形状。在镶嵌中,一种模式使用形状,这些形状可以在彼此之间没有任何间隙或空白的情况下相互贴合。卡托图还可以使用其他测量标准来构建形状;例如,世界地图上每个形状的面积表示总人口。

使用平铺地图显示教育水平:旅舍教育服务案例研究

在这个下一个用例中,旅舍教育服务公司,一个致力于提高美国成年人教育水平的组织,正在查看该国的教育人口统计数据。他们想知道每个州的成年人口中有多少百分比获得了学士学位,并展示最高和最低比率的位置。您将如何创建可视化来传达这一信息?

策略:构建方形平铺地图

您将连接到美国州属达成数据集,然后按照以下步骤来丰富数据并构建平铺地图:

  1. 从数据集创建一个名为**[% College Attainment]**的计算字段。将默认数值格式设置为带有一位小数点的百分比:

    //% College Attainment
    SUM([Total Population with Bachelor’s Degree 25 Years and Over (Estimate)])
    /
    SUM([Total Population 25 Years and Over (Estimate)])
    
  2. 通过添加将每个州映射到列或行的文件来丰富数据集(如图 7-12](#mapping_states_to_columns_and_rows) 所示)。更复杂的形状可能会将每个州映射到xy坐标,但我们在这里保持简单。

    将州映射到列和行

    图 7-12. 将状态映射到列和行
  3. 将 [行] 拖动到行和 [列] 拖动到列;将标记类型更改为方形。(确保它们都是离散维度。)设置视图大小为整个视图。

    提示

    如果 [行] 和 [列] 是连续度量(绿色),则可以将它们拖动到数据窗格中的水平线上,以将每个变为离散维度。

  4. 将 [% 学院成就] 拖动到颜色和标签中。将 [缩写] 拖动到标签中。您可能需要将标记类型更改回方形。与本章第一节相同,更改颜色板为自定义颜色板。(图 7-13 使用 Color Brewer Greens。) 还要添加白色边框。

  5. 右键单击 [行] 和 [列] 并取消选中“显示标题”。

瓷质图显示的教育成就率(上),以及区域色阶图显示的相同数据(下)

图 7-13. 显示在瓷质图中的教育成就率(上),以及在区域色阶图中显示的相同数据(下)

当您比较瓷质图和原始图时,关注点的变化是什么?尽管科罗拉多州仍然显著,但在瓷质图中更容易看到东南部较低成就的区域以及东海岸较高成就的区域。由于其大小,阿拉斯加不再主导可视化,而像夏威夷、哥伦比亚特区和波多黎各等较小地区则都得到了同等的空间。

看到您刚刚制作的瓷质图后,您的非营利组织利益相关者可能会问如何判断特定州的比率是高于还是低于国家平均水平。如何使此显示更具洞察力?通过使用除颜色直接测量外的其他方式。

策略:使用瓷质图比较整体与部分

从上一策略的图表开始,我们将添加格式、文本和颜色增强:

  1. 创建一个名为 **[总体美国学院成就]** 的新计算字段。

    这将是一个 LOD 表达式,计算整个数据集(包括所有州)的学院成就百分比:

    //Total US College Attainment
    {FIXED : [% College Attainment]}
    
  2. 使用这个新的计算字段,创建另一个名为 **[与美国总体差值]** 的计算字段。这将是该州率与美国总体率之间的百分点差异:

    //Delta from US Overall
    [% College Attainment] - MAX([Total US College Attainment])
    

    在这里,您正在重新聚合 LOD 表达式至最大值。LOD 通常是行级的。由于其他度量值是聚合的,因此[总体美国学院成就]也必须是聚合的。在计算字段的 LOD 聚合中,常规做法是使用最大、最小或平均值;在数学上,它们将返回相同的结果。

  3. 将新的度量值拖动到颜色和标签中。

  4. 对于高级格式设置,请使用符号 ▼▲▬ 更改 [与美国总体差值] 的默认数值格式,如 图 7-14 所示。

更改默认数值格式

图 7-14. 更改默认数字格式

在可视化的最终版本(图 7-15)中,重点是与整体率的比较,并讲述了一个引人入胜的故事。每个南方州和中西部的一组州都低于平均水平。

显示每个州的大学完成率与全国平均水平相比较的图块地图

图 7-15. 显示每个州大学完成率与全国平均水平相比较的图块地图

内置功能和功能

您现在已经看到了如何在 Tableau 中制作默认和非默认地图的许多示例。我们为您提供了基本示例,并为最大化地理位置数据的呈现提供了宝贵的选项。然而,这只是地理空间分析的一部分。在本节中,我们将向您展示一些 Tableau 内置功能和分析计算。

使用内置功能和功能处理营销数据:SAGE 数字营销案例研究

在此示例中,Savvy Actionable Gains Executed(SAGE)是一家数字营销机构,通过搜索结果中的付费广告为客户提供线索。该机构的客户是一家当地的园艺公司。对于客户来说,他们支付的线索越少,他们从每位转换的客户那里获得的利润越多,因此目标是尽可能给他们提供尽可能多且成本最低的一致线索。

客户在三个物理位置上,根据家庭地址将客户分为三个服务区域。您如何了解每个服务区域中广告的表现如何?可用数据显示了显示付费搜索广告的成本及任何给定邮政编码中点击广告的人数。

Tableau 允许您构建自定义地理区域,称为自定义多边形。对于第一种策略,您将使用他们提供的邮政编码数据设置客户的三个服务区域。与 Tableau 中的大多数事物一样,有多种方法可以做到这一点。我们将向您展示两种方法。

策略:使用组构建自定义多边形

虽然您的数据提供了邮政编码,但不知道确切地哪些邮政编码属于三个服务区域(如图 7-16 所示)。您可能只有这些区域大致位置的粗略估计。

显示客户服务区域大致位置的地图

图 7-16. 显示客户服务区域大致位置的地图

在 Tableau 中,您可以轻松创建组,以生成不同的区域:

  1. 双击[ZIP]以创建显示数据集中邮政编码可用数据的地图。将标记类型更改为地图。

  2. 通过在工具栏上选择地图,并在顶部选择地图图层来修改地图背景。将样式更改为街道。

  3. 在地图图像的左上角悬停以查看工具栏;在底部图标(右箭头)上悬停以查看可以选择数据的各种方式。点击最右边的套索选项(图 7-17)。

    当您将鼠标悬停在工作表左上角时,地图工具栏会自动显示

    图 7-17. 当你将鼠标悬停在工作表左上角时,地图工具栏会自动显示。
  4. 选择套索选项,选择属于北服务区的邮政编码,如图 7-16 所示。如果错过了某个邮政编码,之后可以按住 Ctrl 键手动选择额外的邮政编码。选择不必精确。

  5. 选择适当的邮政编码后,单击顶部工具栏上的组图标(图钉),然后单击单词 ZIP。Tableau 将自动构建一个包含您选择的邮政编码的组。新组自动放置在颜色上。

  6. 重复此过程两次,直到您大致创建了三个与服务区域相似的区域(图 7-18)。您可以通过编辑刚创建的组来重命名它们。

    现在每个邮政编码都按服务区域着色

    图 7-18. 现在每个邮政编码都按服务区域着色
  7. 从详细属性中删除[ZIP]。这是最重要的一步。现在您已创建了自定义多边形。使用这些信息,您可以看到按服务区域聚合的度量值。

  8. 创建一个名为**[每次点击费用]**的计算字段。将其添加到标签中,以及服务区域名称:

    //Cost per Click
    SUM([Cost])
    /
    SUM([Clicks])
    

    图 7-19 显示了结果。

通过临时组创建的每个服务区域的客户点击费用

图 7-19. 通过临时组创建的每个服务区域的客户点击费用

以这种方式聚合地理数据的能力非常强大。原始数据没有提供所需的内容——每个区域的点击费用,但聚合数据提供了关键指标的清晰度。

在这种情况下,我们使用了一种临时技术来构建这些区域。如果您的数据已编码或映射到领土、区域或区域,则可以使用底层地理数据来计算相同的结果,而无需构建临时组。

策略:使用底层地理数据构建自定义多边形

在这个策略中,您将创建一个类似于之前练习的地图,但这次使用数据集中存在的数据字段:

  1. 右键单击名为[Service Area]的字段,选择地理角色 → 从 → ZIP 创建。

    此功能将地理数据与数据集中的服务区域(领土)对齐。只要邮政编码和领土之间存在单向关系,您的数据就会合并到新的分组中。

    注意到出现了一个新的层次结构,显示了服务区和邮政编码之间的关系(图 7-20)。

    服务区/邮政编码层次结构

    图 7-20. 服务区/邮政编码层次结构
  2. 双击 [服务区]。更改标记类型为填充地图。

  3. 将 [每次点击成本] 添加到标签中,连同 [服务区]。将 [服务区] 添加到颜色中。您可能需要更改颜色以匹配先前的策略。

    图 7-21 展示了结果。

按服务区划分的每次点击成本,使用底层地理数据创建

图 7-21. 客户的每次点击成本按服务区划分,使用底层地理数据创建

策略:使用距离函数显示邮政编码相对于中心位置的距离

现在你的园艺公司的客户想知道他们的营业地点与查看他们广告的人之间有多远。他们想要测试他们的理论,即广告观众距离商店越近(我们将其称为服务区中心),越有可能购买服务。您可以使用内置的空间函数来回答这个问题。

为此,我们将探索 Tableau 的四个与地理相关的内置函数:

DISTANCE()

使用地理空间字段(带有地球图标)作为输入来计算两个对象之间的距离。

MAKELINE()

创建两个对象之间的线。

MAKEPOINT()

当您提供坐标(纬度和经度或 x,y 坐标)时,Tableau 会识别它们表示的坐标或 GIS 系统,并发布空间参考标识符 (SRID)。

BUFFER()

获取地理空间点对象并计算您可以指定的单位距离的半径。

按照以下步骤查找从邮政编码到服务区中心的距离:

  1. 使用 MAKEPOINT() 函数与纬度和经度创建一个名为**[邮政编码点]**的点:

    //Zip Code Point
    MAKEPOINT([Latitude],[Longitude])
    
  2. 重复此过程,使用 [服务区纬度] 和 [服务区经度] 构建一个名为**[服务区点]**的字段:

    //Service Area Point
    MAKEPOINT([Service Area Latitude], [Service Area Longitude])
    
  3. 使用这两个计算字段构建一个名为**[距离服务区中心的距离]**的最终计算字段。在其中,将单位(第三个参数)设置为**mi**

    //Distance from Service Area Center
    DISTANCE([Service Area Point], [Zip Code Point], "mi")
    
  4. 右键单击 [距离服务区中心的距离] 并将默认聚合设置为平均值。这允许您显示邮政编码与服务区中心之间的距离,即使对于单个邮政编码有多行数据。您还可以使用此测量在更高层次的聚合(如 [服务区])上计算距离。

  5. 构建一个点图:

    1. 将 [服务区] 拖放到行架上。

    2. 将 [距离服务区中心的距离] 拖放到列架上。将标记类型更改为圆形。

    3. 将 [邮编] 拖放到标记卡的详细信息上。

  6. 将 [转换] 拖放到大小上。将颜色不透明度调整为 60%。

    您能从图 7-22 的可视化中得出什么结论?

每个服务区内每个邮政编码距离中心点的距离,以及转化数量

图 7-22. 每个服务区内每个邮政编码距离中心点的距离,以及转化数量

首先,每个服务区的结果之间肯定存在一些区别:在北部,看起来更多的转化来自距离 30 到 35 英里的邮政编码。对于南部来说,这个距离略微紧一些,大多数在 25 英里内。而对于中部来说,显然中心点附近几乎没有多少邮政编码。

多亏了您的洞察力,您的园艺客户现在知道北部服务区的大多数转化来自哪里。他们决定调整策略,并仅针对每个中心点周围 25 英里内的客户。他们要求您进行影响分析:他们将保留哪些邮政编码,哪些将被删除?他们会损失多少?您可以通过使用BUFFER()函数来完成此任务。此过程将在您的可视化中创建第二个地图图层,如果您希望在一个地图上显示不同地理细节的图层,这将非常有用。

策略:使用缓冲功能以径向距离映射交易区域

使用与前一策略相同的数据集,您将构建一个新的地图图层,其半径已指定:

  1. 创建一个名为**[Service Area Trade Area]**的计算字段:

    //Service Area Trade Area
    BUFFER([Service Area Point], 25, "mi")
    
  2. 双击此新计算字段以在地图上绘制区域。将[服务区]添加到颜色和标签。将标记的不透明度更改为 20%,并添加黑色边框。

  3. 将[ZIP]拖放到左上角的地图上;这将生成用于添加另一个地图图层的投放区域。

  4. 在刚创建的次要标记卡上,添加[服务区]到详细信息。将点的不透明度降低到 60%,并将边框和光晕都设置为无。

    现在您的客户可以清楚地看到他们在修订的付费搜索工作中将要针对的哪些邮政编码,以及哪些邮政编码将被排除在外(图 7-23)。

显示围绕每个服务区中心构建的 25 英里半径内的交易区域地图,标有当前正在进行营销努力的邮政编码

图 7-23. 显示围绕每个服务区中心构建的 25 英里半径内的交易区域地图,标有当前正在进行营销努力的邮政编码

在我们的最终可视化中,您将创建一张地图,向客户解释整个故事:哪些邮政编码属于每个服务区,每个邮政编码距离中心有多远,哪些落入了修订广告策略所针对的贸易区域,并且每个邮政编码关联的转化数量。您可以通过从服务区中心到每个邮政编码构建线条来完成这个任务。

策略:使用 MakePoint 和 MakeLine 创建起点到目的地之间的路径

在本章的最后一种策略中,您将把所有内容整合起来,并使用先前介绍的剩余两个空间函数:

  1. 创建一个名为**[Line from Zip to SA Center]**的计算字段:

    //Line from Zip to SA Center
    MAKELINE([Service Area Point],[Zip Code Point])
    
  2. 将此字段拖放到已经在您的 Zip Code 层标记卡上的[Zip Code Point]字段上方。点应该会变成线

    提示

    当您在可视化中将一个字段拖放到另一个字段上方时,原始字段会立即被您拖放的字段替换。

  3. 创建一个名为**[In Service Area]**的计算字段,用于标识邮政编码与服务区中心之间的距离是否小于或等于 25 英里:

    //In Service Area
    [Distance from Service Area Center]<=25
    
  4. 将这个新字段拖放到[Zip Code]标记卡上。

    a. 点击字段左侧的图标,将其从详细信息更改为颜色。现在,在服务区内的每个邮政编码应该有两种不同的颜色,一种深一种浅。如有必要,使用 Tableau 20 调色板调整颜色。

    提示

    色彩图例可以代表多个维度,但只有在将每个维度手动分配到 Marks 卡的颜色属性上时才行。如果您将字段拖放到颜色上,它将自动替换先前的字段,并将其设置为详细信息。

  5. 最后,在[Line from Zip to SA Center]标记卡上,将[Conversions]拖放到 Size 上。这将根据与邮政编码相关联的转化数量调整每条线的大小。

    这个在 Figure 7-24 中的可视化帮助您的客户看到整体画面。

新的贸易区域以及每个贸易区域内外的邮政编码和转化

图 7-24。新的贸易区域以及每个贸易区域内外的邮政编码和转化

它还表明,虽然修订后的定位策略对北部和南部领土效果很好,但在中央服务区却并不成功。您可能建议您的客户移动中央区的中心或将服务区分成两个较小的部分。

结论

您已经看到了在 Tableau 中处理地图和地理数据的几种方式,从显示每个州 OE 的渗透率的基本等值地图开始。您还学会了如何对数据进行归一化,以向观众提供更准确的数值结果。

此外,在处理地图时,您已经看到了颜色编码的重要性。像 Viridis 这样的调色板故意在强度和色调上有显著差异,这有助于观众区分表示为颜色的数值。

您还通过瓷砖地图创建了一个等面积地图,其中每个州的地理区域被从地图中剥离,并替换为统一的正方形。这使得数据值更易于理解,并增加了对较小州的平等性。

你还使用空间函数对地理数据进行了额外分析,这不一定总是地图。首先,你使用内置功能构建了全新的空间多边形,然后基于数据中其他地理数据点构建了多边形。你还探索了内置的地理函数,学会了如何创建新的点、构建服务区域,并测量两点之间的距离。

在下一章中,你将专注于高级数学概念。你将学习如何处理高级数学函数和概念的方方面面,以及最佳实践,指示何时以及在何处对数据进行更高级的数学转换。

第八章:高级数学概念

本章的目的是探索您数据之间的关系。通常希望探索两个或更多数值指标之间的关系,使用您的时间限定数据来确定未来可能发生的事情,或者使用维度之间的重复关系进一步分类和分段。本章的目的是探索所有这些概念。

我们认为本章非常重要,专门为最有可能探索数据的个人设计——即寻找更深层次的洞见或揭示模式,这与我们探索的其他一些旨在呈现具有明显洞见的数据的概念不同。在本章中,您将构建的一些图表可能不会被大众看到,但将有助于更深入地理解您所处理的数据。

在第一个案例研究中,您将重温我们的呼叫中心,并使用 Tableau 来预测呼叫量,以帮助确定员工配备水平。

在第二个案例研究中,您将使用数字营销数据来帮助营销团队做出优化决策,确定哪些广告应该保留,哪些应该删除。您还将探索两个营销指标之间的关系,以确定是否可以估计结果或提供达到目标所需的最低要求。

在第三个案例研究中,您将探索替代轴并可视化 COVID-19 数据。您将看到如何使用不同的轴类型可以带来更好的数据故事。

最后,在本章的最后一节中,我们将讨论何时以及何时不使用其他分析插件来进一步扩展您的分析类型。我们将提供两个泛化案例研究,一个是关于 A/B 测试,另一个是文本分析,这些都可以轻松应用到您自己的用例中。

预测

预测是通过使用历史数据拟合模型以预测未来观察结果的过程。这也是时间限定数据最常见的用例之一。许多行业,如零售,依赖展示季节性的历史数据来预测或提供接下来几个月的方向。虽然这可能看起来不够复杂,但许多过程确实遵循季节性趋势,可以很好地预测。在零售业中,你知道每年在最后一个季度会有销售增长,这是由假日购物推动的。同样,在美国的医疗保健行业中,每当美国人的保险福利每年重置时,通常会出现大幅增加的使用量——这使他们能够避免自己支付超出医疗福利限额的费用。

尽管如此,预测并非万全之策,无法应对自然灾害、经济快速变化、社会动荡或全球大流行等无法预见的事件。COVID-19 大流行就是一个完美的例子:不存在任何预测模型能够准确预测导致的消费习惯剧烈变化。可以肯定,在全球大流行期间,零售、主要体育、食品服务、旅行和娱乐行业的任何预测模型都变得完全无效。

当您使用预测时,将其视为未来即将发生事情的指导,并特别考虑它在“业务如常”情况下的作用。如果您向受众和可视化实践中如此展示它,它可以成为规划未来结果的有用工具。

使用预测来预测人员需求:CaB 呼叫中心案例研究

一个需要关注未来事件的行业是客户服务。许多组织有保持客户满意的最低服务水平要求,商业到商业(B2B)世界通常有服务级别协议(SLA)。因此,在这些情况下,正确配置员工的数量至关重要。

汽车零部件制造商 CaB 的呼叫中心每月平均可以接待 3,000 通以上的呼叫。在定期订单交付和新产品发布期间,呼叫可能会急剧增加。公司希望能够更准确地预测其呼叫负荷,以管理员工工时,减少呼叫者等待时间,并提高客户满意度。如何利用大量的时间限制数据来预测各级别时间(月度、周度、日度)的未来呼叫量?

策略:创建月度预测

CaB 呼叫中心的经理想要知道未来每月的呼叫量会是多少。她希望利用这些信息来估计可能需要雇佣的额外员工数量,考虑到当前员工的流失情况。您将按如下步骤创建月度预测:

  1. 创建一个趋势为按月呼叫的折线图。通过将SUM([Calls])拖放到行架上,并将 Month(Start Date Time) 拖放到列中来实现。

    小贴士

    我们选择将数据限制在 18 年 1 月 1 日至 20 年 3 月 31 日之间。这是为了保留完整的月份数据,并确保预测模型不受部分数据月份的错误影响。在进行预测时,始终选择最相关的时间段进行分析。

  2. 在分析窗格中,将[预测]拖放到您的图表上(图 8-1)。您的图表中的数据应该延伸并显示未来的预测值(图 8-2)。

    将预测线拖放到折线图上

    图 8-1. 将预测线拖放到折线图上

    显示按月呼叫量及自动生成的预测的图表

    图 8-2. 显示按月呼叫量的图表,带有自动生成的预测
  3. 通过从颜色标记卡中删除自动生成的预测指示器来去除实际数据和估计数据之间的断点。

  4. 通过选择分析 → 预测 → 预测选项来定制预测。将长度更改为 24 个月。将预测区间调整为 99%。现在你的图表应该与图 8-3 相匹配。

自定义预测月呼叫量,为期 24 个月,包括 99% 预测区间

图 8-3. 自定义预测月呼叫量,为期 24 个月,包括 99% 预测区间
  1. 通过选择分析 → 预测 → 描述预测来查看预测输出的摘要,以打开描述预测对话框(图 8-4)。

由 Tableau 生成的预测摘要描述

图 8-4. 由 Tableau 生成的预测摘要描述
提示

在 Tableau 中创建预测后,审查摘要非常关键。在这里,您将找到关键信息,包括模型的质量(评为好、中等或差)。掌握摘要和模型部分的内容将有助于您增强描述和使用生成的模型的信心。

在之前的策略中,我们只是初步涉及了 Tableau 中的预测。值得一提的是,您可以通过点击“了解更多关于预测摘要”的链接来访问详细文档,了解预测是如何生成的,以及如何解释所有输出的统计组件的详细信息。它还提供了有关自定义预测模型的指导。在向他人解释 Tableau 中预测的关键特性时,我们将注意力集中在以下关键功能:

  • 使用指数平滑法,这是一种减少旧观测权重的方法。

  • 使用趋势和季节性来生成预测,两者都可以根据您对数据的现有理解进行加法或乘法的定制化调整。

您可以访问 Tableau Desktop 的帮助文章,了解更多关于描述预测输出的信息。

两个数值之间的关系

另一种强大的分析类型是探索两个指标之间的关系。大多数数据点可能具有多个数值指标,因此自然希望探索这些属性,并查看这些指标在彼此之间是否存在任何关系或影响。

一个实际的例子是,比较一个国家人口的预期寿命与生活在贫困中的百分比(图 8-5)。您或您的观众可能自然地认为存在某种关系,但通过使用本章探讨的概念,您可以呈现研究结果及其统计学显著性。

一个散点图,显示人口中生活在贫困中的百分比与平均预期寿命的比较

图 8-5. 一个散点图,显示人口中生活在贫困中的百分比与平均预期寿命的比较

检查了 图 8-5 之后,可以肯定地说,在一般情况下,贫困率较低的国家寿命更长——但这项分析的下一个层次和本章的范围是通过数学方法来探索。这样可以消除对数据呈现给观众时的过度估计和基于直觉的推断。

值得注意的是,在探索两个度量之间的关系时,并不总是需要应用额外的统计处理。仅仅使用这些方法就足以深入了解数据及两个度量分布之间的关系。您还可以将这种类型的分析用作为观众提供数据点的一种可操作的方式。

使用散点图查看支出和转化之间的关系:SAGE 数字营销案例研究

在营销中,始终有优化的驱动力——例如,优化每个广告以获得最佳结果,通常以消费者购买的数量与投资金额的比例来衡量。实现这种优化可以通过改变广告的媒介或位置(如社交媒体或搜索结果)来实现。

要解决这个迫切的需求,一个实用的工具是散点图。一个散点图将一个度量指标放在 x 轴上,另一个放在 y 轴上。所绘制的点取决于您希望显示的数据级别,可以是个别记录(比如特定广告)或更为聚合的结果(如整个营销活动)。

在这个案例研究中,SAGE 数字营销希望快速确定在特定营销渠道中哪些营销活动最有效地推动消费者购买。您如何设计一个散点图来可视化这些数据?

策略:创建一个散点图

从一个新的工作表开始,您将构建一个散点图来比较两个度量:

  1. 将 SUM(Spend) 拖到列架上,将 SUM(Conversions) 拖到行架上。

  2. 将 [Channel] 拖到颜色和标签中。将 [Platform] 和 [Campaign] 拖到详细信息中。

  3. 调整标记为圆圈,使大小更大,并将点的不透明度调整为 75%。

    到此为止,请花点时间回顾 图 8-6 中显示的情节。

总体而言,您可以得出什么结论?

  • OOH(户外广告,又称广告牌)非常昂贵,但转化率相对较低。

  • 有一个付费搜索表现非常出色,几乎比其他倡议的转化率高出三倍。

  • 剩余的数据点相对均匀地分布在图表的左下方区域——支出和转化率的结果相似。

散点图显示了营销数据中支出与转化率的关系

Figure 8-6. 散点图显示了营销数据中支出与转化率之间的关系

这个散点图本身就包含了观众可以描述的丰富洞察。但是,如果我们想把这个视图变得更具操作性呢?在下一个策略中,我们将探讨如何将您的散点图转化为一个分类每个数据点结果的图表。

策略:创建象限图

正如您刚刚看到的,在前一策略中构建的散点图讲述了两个关键指标的引人注目的故事。为了使这种洞察的对话对您的受众更加可见和可理解,您可以将散点图转化为象限图。象限图 是一种转换后的散点图,其中在 x 轴和 y 轴指标上使用了平均线来将数据分成四个部分或象限。一旦数据分成四个象限,您可以将它们标记为概括其表现的组。

对于我们的营销优化场景,我们希望最终得到四个类别:

  • 低影响,高成本

  • 高影响,低成本

  • 低影响,低成本

  • 高影响,高成本

负责在这些类别下进行优化的利益相关者面临一个更简单的流程,即决定哪些倡议应保留或进一步投资,哪些可能需要移除。此策略的步骤如下:

  1. 从分析窗格中,单击并拖动 SUM(Spend)SUM([Conversions]) 的平均线,如图 8-7 所示。两者都应适用于表格。

    拖放菜单,在将参考线拖动到视图时出现

    Figure 8-7. 拖放菜单,在将参考线拖动到视图时出现
    提示

    在添加参考线时,根据行和列的维度有三种处理数据的方式。表格 读取所有数据(从左到右思考);窗格 将构建一个适用于由标头划分的数据子集的线;单元格 将为最内层标头或单个数据点构建线。

  2. 右键单击每条平均线,选择“编辑”,并修改设置,使其成为一个虚线,并显示该平均值。取消选中“显示重新计算的高亮或选定数据点的线”。图 8-8 显示了结果。

    将散点图转化为象限图的第一步;已添加了每个轴的平均线。

    图 8-8. 将散点图转换为象限图表的第一步;每个轴上已添加了平均线。

    接下来,您将完成两个项目:一个是计算字段,将数据点分类为我们提到的四个标签之一,另一个是注释图表以强调这些类别。

  3. 创建一个名为**[平均支出]**和一个名为**[平均转化率]**的计算字段。这两个字段将与图表上的平均线值匹配:

    //Average Spend
     WINDOW_AVG(SUM([Spend]))
    //Average Conversions
    WINDOW_AVG(SUM([Conversions]))
    
    小贴士

    使用表格计算来构建与参考线相同的数值。同时使用参考线和表格计算是验证你的表格计算准确性的简便方法。

  4. 创建一个名为**[优化类别]**的计算字段:

    //Optimization Category
    IF SUM([Spend])>=[Average Spend] AND
    SUM([Conversions]) >=[Average Conversions]
    THEN 'High Cost, High Impact'
    ELSEIF SUM([Spend])>=[Average Spend] AND
    SUM([Conversions])<[Average Conversions]
    THEN 'High Cost, Low Impact'
    ELSEIF SUM([Spend])<[Average Spend] AND
    SUM([Conversions])<[Average Conversions]
    THEN 'Low Cost, Low Impact'
    ELSEIF SUM([Spend])<[Average Spend] AND
    SUM([Conversions])>=[Average Conversions]
    THEN 'Low Cost, High Impact'
    END
    
  5. 将[优化类别]拖动到颜色上,替换[渠道]。右键单击[优化类别],确保在所有维度的最深层级上计算。

  6. 右键单击象限的空白处,选择注释 → 区域。输入代表该象限的优化类别。按需调整格式。

  7. 将数据筛选到 2020 年 8 月、2020 年 9 月和 2020 年 10 月——SAGE 的财政季度。图 8-9 显示了此阶段的图表。

现在你有了一个完成的象限图表,可以在仪表板上或向利益相关者展示。高管们现在可以从这个二维图表中获取洞察,这使得集中优化部分项目变得更加简单。

我们将在散点图中最后讨论的概念是趋势线。趋势线被添加到图表中以显示数据的一般方向或数字数据之间的关系。构建和包含趋势线在您明确想要展示变量之间的相关性或估计/预测变量时非常有用。

当您使用数据创建趋势线时,您正在生成一个数学方程,其中 x 轴度量或自变量,以及 y 轴度量或因变量。您生成的方程类型取决于数据之间的关系(最佳拟合线),类似地,在 Tableau 中您可以生成各种线条类型。最常见的趋势线类型是线性趋势,其遵循y = mx + b的模式,其中m是线的斜率或角度,b是 y 轴截距,即线与 y 轴交点。

显示数据所属四个优化类别的象限图表

图 8-9. 显示数据所属四个优化类别的象限图表

值得注意的是,您始终可以在图表上放置一个趋势线,选择最佳拟合线,但绘制/构建一条线并不保证您的指标之间存在统计或数学关系。您需要使用趋势线提供的输出来确定该线对于预测或解释是否值得信赖。

策略:向散点图添加趋势线

在这种策略中,您将继续使用营销数据,但改变被审视的两个指标。这一次,您将使用印象和转化,而不是按营销渠道和活动分析数据,而是按天拆分数据。这将有助于回答以下问题:“基于一则营销内容的印象数量,我们可以预期收到多少转化?”这项练习的相关性在于,如果您知道某事物将获得多少印象,可以预测并估计结果:

  1. 将 SUM(Impressions) 拖放到列架上,将 SUM(Conversions) 拖放到行架上。

  2. 右键单击并拖动日期到详细信息上,在连续日期值的选择上放置它。

  3. 将数据筛选为仅包括搜索渠道(图 8-10)

    按天为付费搜索营销创建的印象与转化的散点图

    图 8-10. 按天为付费搜索营销创建的印象与转化的散点图

    从您刚创作的可视化效果中,很可能已经显而易见这两个指标(变量)之间存在强关系。但接下来,您将添加一个趋势线来数学表达这种关系,并获得能够展示模型置信度的输出。

  4. 从分析窗格中拖动趋势线,放置到线性上。

    小贴士

    Tableau 提供五个方程式来生成趋势线(图 8-11)

    • Linear 遵循 y = mx + b 的格式。

    • Logarithmic 生成一个在一端形成高原的曲线。

    • Exponential 也创建一个曲线,通常用于快速增长或减少的情况。

    • Polynomial 生成弯曲一次或多次的曲线。

    • Power 创建一个带有以已知速率变化的斜率的曲线。

    由于选项很多,我们鼓励您探索它们并找到最合适的选项。

Tableau 内置的趋势线模型类型

图 8-11. Tableau 内置的趋势线模型类型

现在您已经构建了趋势线(图 8-12),接下来就是评估模型的重要部分。

当 Tableau 生成趋势线时,会包括线性方程以及一个菜单,您可以通过右键单击该线并选择“描述趋势模型”来访问该菜单。这将打开 图 8-13 中显示的对话框。

一个线性趋势线适合显示印象与转化的图表

图 8-12. 一个线性趋势线适合显示印象与转化的图表

访问趋势线描述

图 8-13. 访问趋势线描述

当我们审查这些模型时,我们关注两个关键组成部分:p 值和 R-Squared 值。p 值 是输出由随机机会引起的概率。这个值越小,输出与统计上显著性相关的可能性就越大。换句话说,p 值越接近 0,两个变量之间存在统计关系的可能性就越大。R-Squared 值是一个介于 0 和 1 之间的数字,用于描述趋势线中的变异量。R-Squared 值越接近 1,说明该线对数据的拟合程度越好。

小贴士

如果您得到非常小的 p 值,但 R-Squared 值不高,请尝试不同的模型类型,看看是否能获得更好的拟合线。

在 图 8-12 中生成的模型非常出色——p 值非常小,而 R-Squared 非常接近 1。如果您知道将要服务的印象次数,您可以自信地预测或估计转化次数。对于策略而言,具体的模型方程式是转化 = 0.0595388 × 印象 - 24.6459。更明确地说,任何给定的一天,您可能会在每 100 次印象中收到 19 次转化。

回到我们的市场营销案例研究,这意味着我们也可以相反地计算出需要展示的广告数量,以达到特定的转化值,从而产生收入。基本上,如果我们想销售 100,000 个产品单位,我们将需要生成约 1.68 百万次印象。

聚类分析

随着围绕数据存储和数据处理的技术爆炸,数据分析领域已扩展到包括更多处理数据的统计和数学方法。数据科学在商业世界中的普及越来越普遍。数据科学将高级数学和统计概念与机器学习结合,并应用于数据模型。数据科学中使用的算法主要依赖于某种形式的编程,因为它们的生成通常复杂,涉及多次迭代,或者具有递归元素。

在本章的最后部分,我们将探讨如何将两种数据科学应用集成到您的 Tableau 可视化中,但现在我们想从内置于 Tableau 中的一种分析开始:聚类分析。聚类分析是将相似的数据点聚集在一起的任务。与手动分组或分类不同,聚类分析使用算法确定数据点之间的相似性和差异。Tableau 使用 k 均值聚类算法生成聚类。

聚类分析在业务分析中有许多实际应用。它可以用于人群分割、客户画像的开发、欺诈和异常检测以及优化。它可以处理数值数据值、分类数据值或两者兼而有之。它之所以效果好,是因为在许多变量或字段上工作时,可能不太可行将四五个不同的数据点绘制在单个图表上,并评估它们的相似性。

就像预测一样,聚类分析并非处理数据分类的万灵药。相反,可以将其视为对数据进行分组、分类或细分的建议方式。由于它依赖于数学输出,应在输出结果中结合业务眼光和领域知识,以确定结果是否对您的组织和用例有用。

在 Banco de Tableau 案例研究中创建员工分割以评估流失差异

Tableau 银行正在考虑为其部分客服和 IT 人员提供远程就业机会。公司高管意识到技术进步对办公工作景观产生广泛影响,并希望了解员工接近办公室与员工流失率之间是否存在关联。特别是,他们希望了解是否由于担心长途通勤等问题而失去顶尖人才。

人力资源团队已将注意力集中在影响工作生活平衡和工作幸福感的三个关键因素上:任职时间、月收入和距办公室的距离。您将如何利用聚类分析将这三个变量分组?

策略:在散点图中添加聚类分析,并在另一个图表中使用分析

在开始之前,我们想指出,大多数情况下,当您看到聚类分析完成时,它通常从散点图开始。这不是巧合;因为您通常会处理三个或更多变量,所以从散点图开始探索变量之间的关系是很自然的。尽管如此,聚类分析并不要求使用散点图,特别是如果您想将一系列维度组合在一起而不是数值和分类数据。让我们开始吧:

  1. 创建一个散点图,其中包含[在公司工作年限]与[月收入]按[员工编号]。

  2. 将数据限制在销售部门。

  3. 通过将[Distance from Home]添加到 Size 中,并将标记类型更改为 Circle,并将不透明度设置为 70%,包括第三个指标。图 8-14 显示了结果散点图。

    一个散点图,额外变量是离家距离,大小为 Size

    图 8-14. 散点图,额外变量是离家距离,大小为 Size

    现在停下来,审查这个可视化结果。如果您必须分组类似的点,您会从哪里开始?不幸的是,对于大多数人类来说,一旦引入第三维度,完成任务就变得越来越困难。但这正是聚类分析发挥作用的地方。

    从分析面板中,将[Clusters]拖到工作表中。图 8-15 显示了结果。

    提示

    当您在 Tableau 中创建聚类时,可以控制分析使用的内容和聚类的数量。没有正确或错误的答案,因此,请使用您认为可能会产生影响的变量,并为您的用例优化聚类数量。请注意,Tableau 默认为自动或优化的聚类数量(意味着聚类之间的差异最大,而聚类内部的相似性最大)。

    将聚类分析结果添加到图 8-13

    图 8-15. 将聚类分析结果添加到图 8-13
  4. 右键单击标记卡上的[Clusters]字段,然后选择描述聚类。您将看到图 8-16 中详细信息的摘要。

    与 HR 数据相关的聚类分析摘要详情

    图 8-16. 与 HR 数据相关的聚类分析摘要详情

    这一步很重要。这是您为生成的聚类提供语义描述和解释的地方。描述中显示的每个指标的值代表每个聚类的数学中心,不完全是平均值。相反,想象聚类为圆形或椭圆形,数据点位于中心。在本例中,我们有三个聚类,我们将其定义如下:

    聚类 1

    短途通勤,低收入,低任期

    聚类 2

    短途通勤,高收入,高任期

    聚类 3

    长途通勤,低收入,低任期

  5. 现在按住 Ctrl 键,将[Clusters]字段拖到数据窗格中保存为字段。将其命名为**[Employee Groupings]**

  6. 右键单击并编辑组以重命名聚类,以匹配我们选择的描述。正如我们之前所说,这只是使用聚类分析的开始。当我们将这些新的分段应用于其他变量时,就会变得有趣。

  7. 在新表中,制作一个条形图显示[Employment Status]的员工人数。

  8. 将[员工分组]拖到颜色,并将度量单位更改为每个状态的总百分比。图 8-17 显示了完成的图表。

堆叠条形图显示活跃和非活跃员工分布比较

图 8-17. 堆叠条形图显示活跃和非活跃员工分布比较

现在你有了一些迷人的结果。显然,活跃员工和非活跃员工之间的比例有所不同。最引人注目的是,那些已经离开公司的员工中有更大比例的人,他们通勤时间长、收入低、任职时间短。更有用的是,你可以利用分析产生的中心作为指导,识别出哪些现有和未来的员工可能更有可能离开组织。

Alternative Axis and Many Multiples

如果您曾经遇到过难以可视化的数据集,那么这一部分正是为您而设。有些数据集简单地不能符合传统的可视化方法。也许数据正在呈指数增长,使得难以随时间绘制,或者属性过多以至于无法进行有力的比较。

当我们遇到这些情况时,更重要的是退后一步,尝试找到合适的可视化方式来传达数据。由于数据集的特性较为复杂,借助可视化进行综合和传达可能更为重要。而在我们写这篇文章时,COVID-19 数据就是最好的例子。与您可能遇到的传统数据不同,它具有必须掌握的独特特性。根据给定的月份,阳性人数可能每天增加一倍或三倍。标题和主要见解恰好是这一点——清楚地展示病毒传播的迅速程度。

要处理快速变化的数值,特别是那些数值范围广泛的情况(比如从 1 到 100 万),我们建议使用对数刻度。对数刻度 是一种非线性刻度,其刻度标记的间距不是相同的量级。而是以倍数或基本刻度的因子间隔。对数刻度的美妙之处在于它能够紧凑地显示大范围的数据,并有助于提供图表叙述;可视数学的语言变成了“x 倍”或“x 倍更大”,而不是加法量。

全球 COVID-19 阳性病例追踪:物流案例研究

随着全球 COVID-19 大流行的到来,迫切需要了解和分析这种病毒。全球的组织、世界领导人、媒体、健康专家以及个人都在寻找了解情况和病毒可能带来影响的方式。

全球领导人在了解 COVID-19 严重性后的第一反应是开始评估某个国家的总阳性病例数与同行的比较。这对于确定最大需求和哪些预防措施有助于积极结果是非常有用的。您将如何设计一个对数比例尺来可视化每个国家的每日感染率?

策略:使用对数轴理解变化率

在这种策略中,您将使用对数轴来绘制全球八个国家的图表 — 阿根廷、中国、法国、意大利、韩国、西班牙、美国和赞比亚:

  1. 创建一个趋势线,显示按日累计的“阳性病例总数”。注意:此测量是累计总数。

  2. 将数据筛选为提到的八个国家,并将[国家简称]放置在颜色上。

  3. 右键点击 y 轴,将比例尺修改为对数轴;保持设置为正数。您还可以隐藏右下角指示器,指示存在负值。图 8-18 显示了生成的可视化效果。

提示

对数刻度通常仅适用于正数,但 Tableau 还允许用户选择对称轴,这样也可以显示对数化的负数。

显示在对数尺度上的八个国家每日的总 COVID-19 病例

图 8-18. 八个国家在线性轴上的图示

现在将结果与线性轴图表进行比较,如图 8-19。您的视觉解释和故事发生了怎样的变化?

八个国家在线性轴上的图示

图 8-19. 显示在对数尺度上的八个国家每日的总 COVID-19 病例

通过对数轴,观众立即可以清楚地看到这八个目标国家病例迅速激增的情况。它还很好地显示了各国之间的细微差别。例如,中国的累计总数达到约 75,000 后,然后变得完全平缓。与此相反,赞比亚自报告以来已经出现了两次或三次激增。而美国在线性图中的数据遥遥领先于其他国家,但在对数轴视图中更容易与同行进行比较。在撰写本文时,美国报告的总阳性病例几乎是法国的七倍。

虽然我们在这里关注的是 COVID-19,但对数轴在任何指数增长的度量标准中都很有用。通常以对数方式绘制的其他常见主题领域包括增长和采用(技术或产品)、货币利息和储蓄以及(无控制的)人口增长。

随着我们的进展,我们采用了一个额外的策略来帮助展示 COVID-19 数据——即标准化 x 轴,即时间。记住我们说过我们的利益相关者想知道各种缓解策略在各国的有效性吗?在当前视图中,要看到中国在二月份的全面封锁命令是否与美国的部分居家命令产生了相同的影响是困难的。但现在您已经是 Tableau 的专家,这应该是一个简单的解决方案!

策略:标准化日期轴

在这种策略中,我们将标准化报告日期,使得每一天都参照病毒在特定国家首次报告的时间:

  1. 创建一个名为 **[每个国家的第一次日期]** 的 LOD 表达式;这个计算将是每个国家的首次报告日期:

    //First Date per Country
    {FIXED [Country Alpha 3 Code]: MIN(IF [People Positive Cases Count]>0
      THEN [Report Date] END)}
    
    提示

    此数据包含从 2019 年 12 月 31 日起每个国家的记录,无论是否报告了任何病例。添加 IF 语句要求确保正案例大于 0,以确保最小日期指示报告第一例病例的时间。

  2. 创建另一个名为 **[第一例病例后的天数]** 的计算字段:

    //Days Since First Case
    DATEDIFF('day',[First Date per Country],[Report Date])
    
  3. 在将 [第一例病例后的天数] 拖放到列上之前,请通过右键单击并选择转换为维度,然后再转换为连续,将其转换为连续维度。

    提示

    记住,您可以随时更改 Tableau 中字段的属性。当您将此字段设为维度时,您告诉 Tableau 在工作表中使用时不对其进行聚合。通过使其连续,您还告诉 Tableau 在绘制时要求一个无限数线或轴。

  4. 将 [第一例病例后的天数] 拖放到 DAY(Report Date) 的上方以替换它。

当我们回顾这最终的转换(图 8-20)时,我们再次问,数据故事发生了什么变化?

COVID-19 数据在对数轴上,并通过标准化的报告日期

图 8-20. COVID-19 数据在对数轴上,并通过标准化的报告日期

随着每个国家设置相同的时间轴,比较和对比行动如何影响结果变得更加容易。在首次报告病例后的 50 天内,韩国能够完全平稳地减少总病例数,而美国经历了两次初始大幅攀升,一次在第 40 天,另一次在第 90 天。这张图表还为阿根廷和赞比亚等落后于其他国家的国家提供了指导,可以全球寻找成功案例以及避免的陷阱。

在我们结束 COVID-19 的案例研究之前,我们还想解决如何处理众多成员(如国家、州和地区)的问题。在前两个策略中有八个成员,我们的折线图已经达到信息分享的极限,而不会变成混乱的程度。所以,我们要解决的最后一个问题是:如何在一个图表中动态显示多个维度。

在第 1 章中,我们在维度有五个成员时创建了小多图,但这种策略不总是适用,特别是当您有十个或更多成员时。相反,我们想引入一种方法,动态创建许多小多图,这是一种根据您可能可用的屏幕空间进行配置的策略。

策略:创建一个格子图

正如您从前几章中所了解的那样,格子图是描述小多图的一个花哨术语。想象一下支持藤蔓攀爬到墙壁一侧的格子图。这种结构描述了通过在一个图表中创建许多小多图而形成的轴线和网格模式。在这个策略中,您将为我们的 COVID-19 数据创建一个格子图:

  1. 使用与前一策略相同的原则构建一个图表,该图表使用对数轴显示每个美国州和地区按报告日期的总 COVID-19 阳性病例数(图 8-21)。

    美国每个州和地区的总 COVID-19 病例

    图 8-21. 美国每个州和地区的总 COVID-19 病例
  2. 创建一个名为**[索引]**的计算字段:

    //Index
    INDEX()
    
    小贴士

    索引是我们最喜欢的表计算,因为它非常实用。它允许您对数据进行编号,可以在您分配它的数据级别上完成此操作。

  3. 创建一个名为**[总列]**的整数参数;将其设置为 8。

  4. 创建另外两个计算字段,一个称为**[列]**,另一个称为**[行]**

    //Column
    ([Index]-1)%[Total Columns]
    //Row
    (([Index]-1)-[Column])/[Total Columns]
    
    小贴士

    收藏这些计算!参数、列和行计算是您创建小多图所需的全部内容,您可以通过简单更改参数值动态调整其大小。

  5. 将两个计算字段都转换为离散,然后将[行]和[列]拖到各自的架上。

  6. 右键单击[列],选择编辑表计算。设置计算使用选项为特定维度,并选择省/州名称。对[行]重复此操作。

    小贴士

    在这里,您正在设置 Tableau 如何对视图中的数据进行编号。通过指定省/州名称而不包括报告日期的日期,Tableau 将从 0 到N编号省/州名称,忽略日期。

  7. 右键单击并隐藏列和行标题。添加格式,以便最新日期显示总病例数和州/地区的名称(图 8-22)。

    美国每个州和地区每日的 COVID-19 总病例

    图 8-22. 美国每个州和地区每日的 COVID-19 总病例

    作为最后一步,我们希望通过基于其总病例数对州/地区进行排序,为此图表增加一点点价值。

  8. 创建一个名为**[每个州的最大]**的计算字段,返回每个州的最大总病例数:

    //Max Per State
    {FIXED [Province State Name], [Country Alpha 3 Code]: SUM({FIXED [County Fips Number],
      [Province State Name], [Country Alpha 3 Code]:
        MAX([People Positive Cases Count])})}
    
    小贴士

    我们在这里使用了嵌套的 LOD,因为数据是在县级报告的。因此,LOD 首先找到每个县的最大阳性病例数,然后在州级别上总结该值。

  9. 在标记卡上右键单击[省州名称],按最大州级最大值降序排序。图 8-23 显示了生成的图表。

按日期排序的每个美国州 COVID-19 总病例数,按总病例数排序

图 8-23。按照总病例数排序的每个美国州按日期排序的 COVID-19 总病例数

虽然话题很严峻,但生成的图表效果很好。您的观众现在可以看到 COVID-19 病毒在美国各地区的形状,并评估该病毒对每个地区社区的影响。

使用统计附加组件进行高级建模

在本章的最后一节中,我们将讨论更多扩展数据分析类型的方法。正如我们所提到的,数据科学正在分析师日常生活中变得越来越普遍。幸运的是,Tableau 使得集成两种最常见的高级统计和数学建模语言 Python 和 R 变得轻而易举。Tableau 将这些称为分析扩展

在开始使用这些工具之前,了解何时使用它们非常重要。Tableau 认为这些工具的集成输出是表计算。这是一个关键概念,因为它意味着您将传递视图(工作表)中可用的数据进行处理,然后进一步输出。此外,由于 Tableau 的操作顺序,这一步将在所有其他操作之后立即发生,即在可视化渲染之前。

我们建议在以下情况下使用这些集成:

  • 您或您的观众需要随时更改算法输出。一个很好的例子是在过滤其他字段后计算预测输出。如果您有许多过滤的组合,或者您不太确定哪种组合会产生最佳结果,即时计算预测输出是您的最佳选择。

  • 您想进行高级统计显著性测试,如两个比例的检验,并需要显示 p 值。尽管您已经看到可以查看趋势线的 p 值,但无法在图表中可视化它;它只能作为工具提示保留。因此,如果您正在测试多种比例组合并希望生成 p 值表格,则最好让 Python 或 R 将它们呈现为计算字段。

  • 您的数据将会变化或增长。如果您的模型将不断接收新的输入或使用新的数据,最好在 Tableau Desktop 中进行处理。由于 Tableau 将读取所有可用数据并通过,您可以使用相同的算法持续生成新的输出。

  • 你正在进行超出普通 Tableau 功能范围的数据转换。因为 Python 和 R 都有许多库和函数,连接并使用其中一个包来转换数据可能会很容易。我们遇到过的一个实际用例是将 IPv4 IP 地址转换为 IPv6。有一种算法方法可以做到这一点,虽然步骤很多,但在 Python 中只需要一个函数。

相反,这里是一些不使用分析扩展的情景:

  • 你想要处理数据以找到最佳算法。如果你试图找到最适合你数据的算法,考虑完全在 Python 或 R 中工作。找到最佳匹配后,使用 Tableau 来可视化你的输出。

  • 你正在对数据集进行一次性处理步骤,例如情感分析。如果你依赖库或包进行文本分析或评分,没有必要在使用 Tableau 时即时处理数据。相反,预先处理所有数据,然后在 Tableau 中进行可视化。

  • 你想要创建一个趋势线或预测,而对模型的特征变化要求最小。如果你可以通过使用内置的 Tableau 功能实现结果,那就节省一些时间,避免使用这些附加组件。正如在“策略:向散点图添加趋势线”中所看到的,我们创建了一条线性趋势线,并且具有出色的 R 方值。我们建议你首先在 Tableau 中测试这些统计工具,然后再投入额外的时间。

  • 你正在使用机器学习来创建模型,并且有一个训练数据集。机器学习模型依赖于首先输入训练数据集,然后在你的实际数据集上应用算法。由于你将被限制使用视图中的数据,尝试在单个脚本计算字段中通过训练数据集和实际数据集可能会变得过于复杂。

  • 你正在使用任何类型的递归或循环。如果你正在迭代处理可变长度的数据,这种预处理应该在 Tableau 之外完成。想象一下计算书中每个句子的字数。

  • 你的可视化需要对最终用户非常快速。这可能听起来像一个愚蠢的原因,但如果你的观众不耐烦,考虑预处理你的数据。通过数据子集传递到另一个应用程序,让该应用程序处理数据,推回结果,最后呈现可视化结果可能会很昂贵,特别是如果是一个复杂的任务或在许多数据行上完成。

现在我们已经讨论了一些最佳实践,让我们更仔细地看看统计附加组件。

使用 Python 分析扩展进行网页 A/B 测试:Squeaks 宠物供应案例研究

A/B 测试 对于任何拥有网站的人来说都是一种常见的实践。这是一种测试内容的多个迭代版本、获取结果并确定哪个版本能够产生更多参与度的好方法。对于电子商务组织来说,它可以是一种无价的工具,用于找到能够引起顾客最终购买的内容的最佳匹配。也就是说,要评估 A/B 测试,必须使用假设检验来进行两个样本比例的测试,也称为 t 检验

Squeaks Pet Supply 是一家宠物产品公司,计划在多个产品上推出几项 A/B 测试。它正在测试网站的两种布局,以确定是否有一种版本能增加顾客购买产品的可能性。公司高管希望在单个可视化中看到所有产品的结果。如何表示这些结果?注意,尽管内容格式在各自的版本中保持一致,内容团队仍希望了解个别产品与整体测试结果之间是否存在影响变化。

为了完成这项任务,我们转向使用 Python Analytics 扩展(TabPy)。在这种情况下,使用 TabPy 的高级工作流程如下:

  1. 在您的机器上或独立服务器上安装 TabPy。您可以在其 GitHub 仓库 中找到有关如何安装 TabPy 的文档。如果您使用默认设置安装,可以通过在浏览器中输入 **localhost:9004** 来检查其是否处于活动状态,如 图 8-24 所示。

    在本地 Windows 机器上安装 TabPy 后,可以通过 localhost 的 9004 端口访问

    图 8-24. 在本地 Windows 机器上安装 TabPy 后,可以通过 localhost 的 9004 端口访问
  2. 安装完 TabPy 后,我们在 Tableau Desktop 中启用连接到 TabPy 服务器;参见图 8-25 和 8-26。

    访问 Analytics 扩展连接

    图 8-25. 访问 Analytics 扩展连接

    为本地 TabPy 实例添加连接信息

    图 8-26. 为本地 TabPy 实例添加连接信息
  3. 脚本代码是在 Tableau Desktop 中编写并传递给 TabPy 服务器的。Python 代码和称为 参数 的字段都用于该函数:

    //p-value
    SCRIPT_REAL("import numpy as np
    from statsmodels.stats.proportion import proportions_ztest
    test_success  = _arg1[0]
    test_sample = _arg2[0]
    control_success = _arg3[0]
    control_sample = _arg4[0]
    success = np.array([test_success,control_success])
    sample = np.array([test_sample,control_sample])
    value = 0
    alternative = 'two-sided'
    stat, pval = proportions_ztest(success, sample, value, alternative)
    return(pval)", SUM([Test Success]), SUM([Test Sample]), SUM([Control Success]),
    SUM([Control Sample]))
    

    您可以通过修改引用常量整数字段的四个参数来测试此代码。

    提示

    在处理 Analytics 扩展时,您将将字段作为参数传递。您还将使用脚本函数从 Analytics 扩展返回值。有四个脚本函数:

    • SCRIPT_BOOL() 返回布尔数据类型值。

    • SCRIPT_INT() 返回整数数据类型值。

    • SCRIPT_REAL() 返回实数(或浮点数)数据类型值。

    • SCRIPT_STR() 返回一个字符串数据类型的值。

  4. 最后,脚本的输出被返回并显示在 Tableau 的可视化中(参见图 8-27)。您需要为 SCRIPT_REAL() 函数的表计算指定计算使用选项。在此示例中,我们使用 Cell,因为成功和样本大小在可视化的每行中聚合。

最右列显示基于输入的两个比例检验的 p 值

图 8-27. 最右列显示基于输入的两个比例检验的 p 值

由于两个比例检验的输入相对较少,并且结果 p 值是从 Python 的单个函数输出的,这节省了我们团队成员宝贵的时间,并允许他们随着时间的推移积累数据,以查看测试结果是否随时间改变。他们还能够通过客户人口统计信息对数据进行切分和分析,以确定行为是否在所有客户中保持一致或者在某个子集中引起共鸣。

客户评论的情感分析:Amazing Products 案例研究

您是否曾经阅读过产品的客户评论?对于销售产品的公司来说,客户的认可或投诉可能是产品成功与失败的分水岭。但是随着互联网的普及,阅读、解释和分类大量评论可能非常困难。

Amazing Products 正考虑更新其数字流媒体设备 Amazing Fire TV。但是,公司高管首先想了解更多关于痛点及客户对现有版本感受的信息。他们要求分析在线评论,并希望看到这些数据量化。在您处理这项任务时,情感分析可以扮演什么角色呢?

情感分析 根据预设的知识词典对单词、短语或句子进行评分,提供积极或消极(情感)评分。在进行情感分析时,您可以选择默认词典或自定义词典。当我们在进行这项与 Amazing Products 相关的实践时(参见图 8-28),我们从一个基础库开始。由于输出是在 -1 到 1 之间的数字,我们通过 TabPy 处理了脚本并将结果绘制在抖动图中:

//Review Sentiment
SCRIPT_REAL("
import nltk
from nltk.sentiment import SentimentIntensityAnalyzer
reviews =_arg1
scores = []
sid = SentimentIntensityAnalyzer()

for text in reviews:
    ss = sid.polarity_scores(text)
    scores.append(ss['compound'])
return scores
",MAX([Review Text]))

您可以通过用引号括起来的句子替换 Review Text 来测试代码。

展示个别产品评论及其情感的抖动图

图 8-28. 展示个别产品评论及其情感的抖动图

结论

虽然本章探讨的主题比其他章节的数学内容更为深奥,但我们希望你已经看到了所呈现示例的优点。你学会了如何在处理时间序列等有合理可预测数据时创建预测和遵循预测最佳实践的技巧,这是一种技术。你还学会了如何创建散点图和象限图,这些工具对于评估两个数值变量之间的关系至关重要。特别是,通过象限图,你学会了如何进一步分段你的数据,以清晰地传达给观众。

你还学习了内置于 Tableau 中的更高级的数学分析技术:构建趋势线和通过 k-means 聚类创建集群。快速拖放趋势线是统计评估两个变量之间是否存在合理的统计关系的好方法。如果有的话,你还知道如何使用这些输出来进一步指导业务决策。而通过 k-means 聚类,你学会了处理三个或更多变量之间关系的方法,将数据分段。你使用集群分析来对组织中的员工进行分段,比较某些属性是否导致更高的离职可能性。

另外,我们解决了 COVID-19,这是一个复杂的数据主题,不符合正常的图表标准。你使用了替代轴来转换确诊病例总数和日期,以清晰展示数据故事。通过转换后的轴,你可以在世界各国之间进行艰难但清晰的比较。你还能够以紧凑动态的小区图表列举出美国每个州和地区的 COVID-19 病例。掌握了这一技术后,你可以快速调整小区脚手架的形状,以最佳方式适应可视化的空间。

最后,我们讨论了其他额外的统计概念以及使用分析扩展的最佳时机和不适合的时机。你已经了解了将统计语言与 Tableau 结合进行可视化的两种最流行方法,包括一种允许即时处理的用例。

此时,你也已经完成了旨在教授如何构建图表的章节的结论。现在你已经掌握了 Tableau Desktop 中设计的数据可视化最佳实践和分析技术的广泛基础,这些将帮助你共同创建动态分析,这也是下一章的重点。

第九章:构建动态分析

直到这一点,我们一直专注于识别正确的可视化方式来回答关键问题。您已经学会了在何时使用饼图,如何制作有效和多样化的条形图,以及处理不同数据类型的多种方法。每一章都对您理解良好的数据可视化至关重要,并为您提供了构建正确图表所需的工具。但现在,通过引入动态元素,您将进一步扩展这些知识。

我们将本章命名为“构建动态分析”,因为您将使用 Tableau 中的各种功能来操作可视化,改变数据显示方式,提供用户输入,并创建根据观众兴趣定制的图表。与本书中的其他策略不同,本章讨论的每一点都将导致可视化的多种(有时是无限的)排列组合。我们将为您提供基础理念和动态元素的构建模块,供您将其整合到自己的数据项目中。我们希望您从本章中学会如何有效地为观众和使用情景增加交互性和定制性。

在第一个案例研究中,您将探索如何构建多种图表变体,以满足观众需求的参数。在第二个案例研究中,您将使用参数操作创建基于用户交互改变的动态图表。最后,您将使用集合操作来深入到各种日期级别,并创建可展开和折叠的表格。

参数

在本书中我们已经几次介绍了参数(特别是在第一章),当我们使用简单的参数将柱状图限制在商户类别的前 N(在我们的案例中为 10)个类别时。在我们深入讨论之前,让我们简单回顾一下。

Tableau 中的参数 是您可以在可视化中使用的动态输入字段。您可以将它们设置为以下字段类型:浮点数,整数,字符串,布尔值,日期和日期时间。它们允许您或您的观众选择存在于数据集之外的变量。这些变量可用于更改可视化方式显示的方式,设置字段值,或作为复杂的过滤器,仅举几例。

此外,您可以定义与它们相关的默认行为。您可以将它们设置为静态列表——可以是手动输入或从字段派生,也可以是值范围(适用于日期和数字),或允许它们自由输入相同数据类型的任何条目。在接下来的策略中,我们将探索利用参数的示例,无论是以明显的还是不明显的方式。

使用参数更改度量和维度:办公室必备案例研究

在 Tableau 中使用参数的最流行方法之一是将其用作观众定义希望查看的度量的一种方式,以及通过选择的维度显示图表。

作为一家办公用品商店,OE 正在管理数以万计的 SKU,涵盖多个人群,从在当地店铺购买的个人到具有固定订单的企业客户。因此,公司高管对跟踪许多关键指标感兴趣。如果您为每一个建立图表,您将会得到许多仪表板和报告。您如何避免报告泛滥呢?

让我们更详细地看看如何利用参数,以便您可以用相同类型的图表表示许多类型的分析。

策略:使用参数来改变柱状图中的度量。

进一步深入我们的场景,想象一下 OE 销售团队希望能够比较许多指标——即销售额、利润比率、订单数量和产品类型的不同子类别的数量。这个请求看起来可能是无害的,但请想象一下,这个请求应该放在一个销售仪表板上。如果每个度量标准的四个柱状图都放在一个仪表板上,几乎没有空间用于其他内容。当然,您可以将图表切换为表格,但正如我们讨论过的,表格不允许进行与柱状图所提供的相同视觉比较。因此,参数将作为观众选择要显示的度量的控制器。

小贴士

基本参数可以在可视化中使用,而不需要成为计算字段的一部分,但是大多数参数,特别是在更复杂的技术中,将需要在一个或多个计算字段中使用。

  1. 创建一个名为**[选择一个度量]**的参数,并将其数据类型设置为整数。将“允许的值”选项设置为列表。在列表中输入以下值:

    显示为
    1 销售额
    2 利润比率
    3 # 订单
    4 数量
    小贴士

    我们建议将这些类型的参数创建为整数。这样做时,整数会作为参数控制器中的“显示为”选项别名,但计算将基于值进行评估。在计算中,整数比字符串处理更快,也会使您的计算字段更短,创建速度更快。

  2. 创建一个名为**[选择的度量]**的计算字段。使用一个 case 语句,输入以下内容:

    //Selected Metric
    CASE [Select A Metric]
    WHEN 1 THEN SUM([Sales])
    WHEN 2 THEN SUM([Profit])/SUM([Sales])
    WHEN 3 THEN COUNTD([Order ID])
    WHEN 4 THEN SUM([Quantity])
    END
    
    小贴士

    记住,计算字段需要是行级或聚合的。因为[利润比率]和[# 订单]需要预先聚合,所以另外两个度量值[销售额]和[数量]被包括为聚合。

  3. 将[选择的度量]拖放到列架上,并将[子类别]拖放到行架上。右键单击[子类别],按降序排列[选择的度量]。

  4. 双击标题编辑表格的标题,然后通过使用“插入”功能在编辑标题对话框中输入以下内容:

    <Parameters.Select A Metric> by Subcategory
    
  5. 在左下角右键单击[选择一个度量]参数,并选择显示参数。使用参数控件,注意柱状图随度量变化而变化,并且子类别保持按降序排序(图 9-1)。

使用参数更改度量的柱状图

图 9-1. 使用参数更改度量的柱状图

通过使用参数和一个计算字段,您现在已经创建了四个柱状图。这种可能性使您的观众能够在他们浏览仪表板中共享的数据时选择最具影响力的图表。

小贴士

当您使用参数在多个度量之间切换时,您会注意到数字格式会发生变化,但并非每个度量都完全一样。在 Tableau 中,每个字段只能有一种默认的数字类型,因此一个常见的解决方法是创建另一个计算字段,以匹配所需的数字格式。

策略:使用正则表达式函数动态格式化参数化度量

为了使您的可视化更加用户友好和直观,我们始终建议使数字匹配其表示的数据类型和格式。回想一下我们之前所说的,当观众阅读图表时,会有内部对话。为什么不在适当时包括一个美元符号或百分比呢?

创建匹配度量类型的格式化计算的一种方法是使用正则表达式(regex)。这些用于在文本字符串中查找并有时提取或替换模式。正则表达式函数在许多编程语言中很流行,在 Tableau 中也有几种。例如,我们将使用REGEX_REPLACE()以及ROUND()(四舍五入函数)和STR()(将数字转换为字符串的函数)来构建格式良好的数值标签:

  1. 创建名为**[Formatted Label]**的计算字段:

    //Formatted Label
    CASE [Select A Metric]
    WHEN 1 THEN "$" +
    (REGEXP_REPLACE(STR(ROUND([Selected Metric],0)),"(\d)(?=(\d{3})+$)","$0,"))
    WHEN 2 THEN STR(ROUND(ROUND([Selected Metric],4)*100,2))+"%"
    WHEN 3 THEN REGEXP_REPLACE(STR(ROUND([Selected Metric],0)),
      "(\d)(?=(\d{3})+$)","$0,")
    WHEN 4 THEN REGEXP_REPLACE(STR(ROUND([Selected Metric],0)),
      "(\d)(?=(\d{3})+$)","$0,")
    END
    
    小贴士

    虽然我们没有时间详细讨论正则表达式,但足以描述在前面代码中显示的重复模式。(\d)(?=(\d{3})+$)查找连续三个数字的任何模式。$0在找到该模式后插入逗号。这是为了将转换为字符串的数字添加逗号分隔符而完成的。

  2. 将计算字段拖到标签中,并使用参数控件更改度量。您的图表现在应与图 9-2 匹配。

正则表达式已应用于柱状图标签,以根据选择的度量格式化数字

图 9-2. 正则表达式已应用于柱状图标签,以根据选择的度量格式化数字

策略:使用参数改变柱状图的维度

如果你的观众也想要一种方法来将条形图从比较子类别转变为比较州、客户或地区,你可以应用类似的技术,使用参数创建一个动态维度:

  1. 创建一个名为**[切片方式]**的整数参数,并创建一个名为**[选择的维度]**的计算字段:

    数值 显示为
    1 子类别
    2
    3 客户
    4 地区
    //Selected Dimension
    CASE [Slice By]
    WHEN 1 THEN [Sub-Category]
    WHEN 2 THEN [State]
    WHEN 3 THEN [Customer Name]
    WHEN 4 THEN [Region]
    END
    
  2. 双击行架上的 [子类别] 以编辑显示的字段。然后删除子类别并替换为 [选择的维度],然后按 Enter 键。

    小贴士

    当你通过编辑可视化来更改使用的字段时,它将保留已放置在其上的任何格式和排序。在这里,我们正在使用这种技术来保留按所选度量排序的字段。

  3. 双击标题,用 [切片方式] 替换 [子类别]。显示参数并在不同维度之间切换。你也可以使用这个新参数更新标题。你的最终可视化应与图 9-3 相匹配(#this_bar_chart_allows_the_user_to_change)。

这个条形图允许用户更改指标和标题

图 9-3. 这个条形图允许用户更改指标和标题

恭喜!你现在已经通过使用两个参数和几个计算字段创建了可能达到 16 种不同的条形图。同时,你也为你的观众提供了多种选项来分析他们的数据。

使用参数在折线图中设置时间段和日期聚合:Office Essentials 案例研究

现在 OE 的高管们拥有了高度可定制的条形图,以更好地理解他们的销售情况,他们提出了额外的问题。他们想要随时间推移来看数据的趋势,但不太确定如何提出他们所寻找的内容,因为这取决于他们使用数据的目的。有时候,他们希望在双周报告中看到每周的数据,有时候在特定促销期间,他们希望每天看到数据,有时候他们想要看到每月的数据。

所有这些都是合理的场景和分析数据的方式,但每一种听起来都像是一个单独的图表。有简化的解决方案吗?通过参数,你可以再次将所有这些数据简化为一个图表,如图 9-4 所示,让观众选择他们想要用来分析数据的时间部分。

这个折线图允许用户更改日期显示级别

图 9-4. 这个折线图允许用户更改日期显示级别

策略:使用参数来更改折线图中的日期

在这个策略中,你将创建图 9-4 中的折线图:

  1. 创建一个名为**[显示方式]**的整数参数:

    数值 显示为
    1 每天
    2 每周
    3 每月
  2. 创建三个自定义日期字段,从订单日期字段开始:[Days Date Value]、[Week Numbers Date Value] 和 [Months Date Value]。请记住,您可以通过右键单击[Order Date]字段,使用日期精度的下拉列表,并选择日期值来创建这些字段。

  3. 创建一个名为**[选择的日期]**的计算字段:

    //Selected Date
    CASE [Display By]
    WHEN 1 THEN [Order Date (Days)]
    WHEN 2 THEN [Order Date (Week numbers)]
    WHEN 3 THEN [Order Date (Months)]
    END
    
  4. 右键单击并拖动[选择的日期]到列架上,选择第一个选项,选定的日期(连续)。将SUM([Sales])拖到行中。显示[Display By]参数,并在不同的时间值之间切换。通过使用参数显示匹配的标题,如图 9-5 所示。

此时,您可能会质疑为什么我们不使用 Tableau 中的内置日期层次特性,以便观众可以通过各种日期级别进行下钻和上升。我们发现,这种体验通常不够直观,会导致过度钻取、过多选项,或者在截断数据并显示不够准确的情况下。

实际上,在这个视图中,当我们切换到周视图时,2019 年 12 月 29 日这一周的数据似乎下降了很多,但这仅因为这一周的数据仅包含了三天。通常情况下,当我们构建这些图表时,我们还会添加隐藏的日期过滤器,以确保无论选择了哪个时间段,都能显示完整的时间。

此折线图包含根据所选时间部分更改的过滤器

图 9-5. 此折线图包含根据所选时间部分更改的过滤器

策略:添加隐藏的日期过滤器以防止截断的时间部分

为了防止截断日期部分,您可以添加更多作为过滤器的计算字段。这些将适当地限制数据,确保观众查看完整的时间段。询问后,您已找到每个时间切片(日常、每周、每月)的最受欢迎的时间窗口。对于日常,大多数最终用户希望查看最多最近的 30 天。对于每周,他们希望回顾过去的 13 周,对于每月,他们查看过去的 12 个月。

按照前一战略的图表继续进行,现在您将实施这种动态过滤:

  1. 创建一个计算字段,用于识别数据集中最新的日期:

    //Maximum Date
    {MAX([Order Date])}
    
    小贴士

    当编写固定的 LOD 表达式时,如果应用于整个数据集,则不必包括修饰符fixed。这是一个省时的方法,可以轻松地识别 LOD 正在计算的内容。

  2. 创建一个名为**[限制日期]**的计算字段:

    //Limit Date
    CASE [Display By]
    WHEN 1 THEN [Order Date (Days)]>= DATEADD('day',-14,[Maximum Date])
      AND [Order Date]<=[Maximum Date]
    WHEN 2 THEN [Order Date (Week numbers)]
      >=DATEADD('week',-13,DATETRUNC('week',[Maximum Date]))
    AND [Order Date (Week Numbers)]
      <=DATEADD('week',-1,DATETRUNC('week',[Maximum Date]))
    WHEN 3 THEN [Order Date (Months)]
      >=DATEADD('month',-12,DATETRUNC('month',[Maximum Date]))
      AND [Order Date (Months)]
      <=DATEADD('month',-1,DATETRUNC('month',[Maximum Date]))
    END
    
    小贴士

    每当您构建限制日期的计算字段时,我们始终建议以编程方式识别最新的日期。LOD 是这样做的一种简便方式,但您也可以改变方式,使其成为用户输入(另一个参数)。

  3. 将[限制日期]字段拖放到您的筛选架上,并选择 True。

  4. 作为最后的修饰,构建一个计算字段,解释每个选择的时间部分显示多少数据。将其拖放到详细信息中,然后添加到您的标题中:

    //Time Period Description
    CASE [Display By]
    WHEN 1 THEN 'last 30 days'
    WHEN 2 THEN 'last 13 weeks'
    WHEN 3 THEN 'last 12 months'
    END
    

现在,您已经为观众提供了可以根据不同的时间部分和流行时间段定制的图表(如图 9-5 所示)。您还为观众建立了防护栏。他们不会发现自己在比较截断的数据周之间,当他们在以后回顾数据时,图表将随时间更新。

使用参数操作来更改趋势度量:SAGE 数字营销案例研究

SAGE 数字营销希望进一步发展允许最终用户灵活选择其指标的概念。现在,他们不仅仅允许用户从下拉列表中选择,还希望将该功能直接集成到可视化中。您如何构建一个可视化,使用户能够点击一个指标以自动显示更多信息?

要使此功能正常工作,您将依赖于参数操作。这些操作最早在 Tableau 2019.2 中引入,允许最终用户通过使用仪表板或工作表操作来注入(或设置)参数值。仪表板和工作表操作将在第十二章中更深入地描述,因此现在知道操作是指定条件的一种方式(如在图表中点击条形),并作为结果发生的事情足够了。最基本的操作是过滤操作:用户点击东部地区,仪表板中的周围图表将过滤到东部地区。通过包含参数操作,用户现在可以点击东部地区,并设置一个参数为东部地区。

策略:使用参数操作和度量名称动态更改度量

在这个策略中,我们将构建一个可视化,用户可以点击其中一个指标来显示信息:

  1. 创建一个包含点击数、转化数、转化率、成本、每次点击成本、每次转化成本、收入、每次转化收入和广告支出回报率(ROAS)的 KPI 的单一工作表,使用[度量名称]和[度量值]。

    一组基本的 KPI

    图 9-6. 一组基本的 KPI
  2. 现在创建一个名为**[营销指标]**的字符串参数。将“当前值”设置为 1,“允许值”设置为全部。

    小贴士

    尽管我们建议使用整数作为度量选择参数,但在使用度量名称和参数操作时,必须使用字符串数据类型。这是因为度量的名称(点击)设置为当前值。

  3. 创建一个计算字段,显示选择了哪个营销指标:

    //Selected Marketing Metric
    CASE [Marketing Metric]
    WHEN 'Clicks' THEN SUM([Clicks])
    WHEN 'Conversions' THEN SUM([Conversions])
    WHEN 'Conversion Rate' THEN [Conversion Rate]
    WHEN 'Cost' THEN SUM([Cost])
    WHEN 'Revenue' THEN SUM([Revenue])
    WHEN 'Cost per Click' THEN [Cost per Click]
    WHEN 'ROAS' THEN [ROAS]
    WHEN 'Rev. per Conversion' THEN [Rev. per Conversion]
    END
    
  4. 创建一个水平条形图,显示按服务区域划分的所选营销指标。将 KPI 工作表和条形图都添加到一个新的仪表板中。

  5. 创建仪表板操作以通过选择仪表板→操作来更改参数。在操作对话框中,单击添加操作→更改参数。

  6. 在编辑参数对话框中,如图 9-7 所示,设置功能,使得营销关键绩效指标成为源——即与之交互将导致变化的工作表。将营销度量设为目标参数,其值将发生变化。参数中将要放入的字段值是测量名称。

    参数操作配置屏幕

    图 9-7. 参数操作配置屏幕

    现在,当用户希望基于任何这些指标查看柱状图时,他们可以直接点击指标,如图 9-8 所示。

用户选择点击时的输出(顶部),以及用户选择转化率时的输出(底部)

图 9-8. 用户选择点击时的输出(顶部),以及用户选择转化率时的输出(底部)

使用参数操作查看每日和 7 天平均值:SAGE 数字营销案例研究

数字营销世界中有趣的一点是,每天都会发生大量数据波动。根据竞争对手的活动、潜在客户及其他外部因素,您的业务指标可能会显示一系列值。

为了帮助弥补这一点,SAGE 数字营销要求在其报告中添加一个移动平均线,以平滑数据。移动平均采用数据点及其之前一定数量的数据点来计算值。这样可以为数据添加平滑效果,因为过去x个数据点的高低值被平均。但是,SAGE 的高管们也想看到实际值。

如何同时表示实际值和移动平均值?

策略:计算动态更改的 7 天移动平均参考线,具体是通过日期选择

使用前一个策略中的相同数据集,您将引入参数操作以动态更改移动平均线:

  1. 创建一张显示按天分组的收入线图。

  2. 创建一个名为**[选择的日期]**的参数,并将其设为包含所有可允许值的日期字段:

  3. 创建一个名为**[时间窗口]**的计算字段:

    //Time Window
    [Date]>=DATEADD('day',-7,[Selected Date])
    AND [Date]<=[Selected Date]
    
  4. 创建另一个名为**[时间窗口收入]**的计算字段:

    //Time Window Revenue
    IF [Time Window]
    THEN [Revenue]
    END
    
  5. 将[时间窗口收入]拖动到详细信息中作为总和。使用此字段创建一个参考线,显示平均值。将标签更改为自定义。取消选择“显示高亮或选定数据点的重新计算线”。

  6. 创建另一个名为**[时间窗口日期]**的计算字段:

    //Time Window Date
    IF [Time Window]
    THEN [Date]
    END
    
  7. 将[时间窗口日期]拖动到详细信息中作为最小值。

    提示

    在此,我们将日期作为聚合的方式拖拽,以避免线图上的线变成点。当试图向具有不希望干扰的表格计算的图表添加维度时,这种方法也可能会有所帮助。

  8. 创建一个参考区间,从最小时间窗口日期到最大时间窗口日期,并将阴影设置为浅绿色。

  9. 创建一个名为**Change Date**的工作表操作,当用户悬停在图表上时,将所选日期设置为 DAY([Date])。

    现在,您已经建立了一个图表,满足了观众的两个条件:每日报告和选择时间段的平滑平均值(图 9-9)。

带有指定点的七日移动平均参考线的线图

图 9-9. 带有指定点七日移动平均参考线的线图

集合和集合操作

在书的早期,您对集合操作有了一些基本的第一手经验,但我们还没有花时间深入探讨。在本节中,我们将从解释“集合”开始。在 Tableau 中,它是一个基于维度(或多个维度)的计算字段,您可以根据条件定义成员。这些条件可以是手动选择,例如列表,也可以基于计算的条件或值,或者可以基于字段或公式进行顶部或底部分组。实际上,创建集合的选项与使用维度(蓝色字段)作为过滤器时可用的选项相匹配。集合还可以组合,这意味着您可以使用两个条件创建维度的子组。

一个结合两个集合及其结果的实际例子是构建一个按销售额前十名和按销量销售前十名的客户集合。这两组可以通过三种方式组合使用:

两组中的所有成员

如果客户既在销售额前十名中,又在销量前十名中,该客户将被包括在内。

两组中的共享成员

客户同时在前十名中。

除了共享成员

这从另一组中减去了一组。在这种情况下,如果按销售额排名前十的客户减去按销量排名前十的客户,您将得到那些销售额高但销量不高的客户。

作为行级计算,当您使用集合时,可以将其视为在幕后创建布尔值以对数据进行分类。在 Tableau 中,集合在显示方式上具有独特功能。首先,您可以将集合用作维度,这将构建一个“包含”和“不包含”头,并在相应组中表示成员。您还可以将集合用作筛选器,将数据筛选到整个“包含”或“不包含”组,或者筛选到“包含”组中的成员。这意味着您可以使用集合动态显示符合集合条件的维度值或整个集合本身。最后,您可以公开集合控件,并让最终用户将其用作选项列表。

现在,关于集合操作,这是在 Tableau 2018.3 中首次引入的。通过集合操作,您正在采取第一种类型的集合,从中手动从选项列表中选择成员,而不是作为一次性任务,根据用户的交互添加和减少成员。这具有强大的影响,因为您正在赋予最终用户创建数据的临时分组的能力。最终用户还可以动态定义是“包含”还是“不包含”集合的成员,这对于筛选非常有用。正如您在第一章中看到的,集合操作的常见用例之一是根据交互动态更改数据的粒度。

在接下来的两个策略中,我们将扩展使用集合操作进行数据钻取,并将其与筛选和自定义格式化结合,生成引人入胜且直观的用户体验。

使用集合操作进行数据下钻和筛选:数字营销案例研究

SAGE 在收到来自最终用户的有趣请求后,正在回顾其数字营销数据。高管们通常喜欢查看每周业绩,但有时,特别是如果某周在用户参与方面表现特别突出,他们会喜欢深入了解每日量,并分离出可能有助于业绩的任何内容。与我们之前讨论过的概念不同,在这种情况下,他们希望有灵活性,可以根据兴趣钻取数据,而不是仅显示所有每日数据或预筛选的子集。

这提出了一个有趣的问题。您会如何解决它呢?让我们更详细地看一下如何通过实施集合操作来解决这个问题,这允许用户选择一个数据点并查看该点内的更详细数据。

策略:在折线图中从周到日期进行钻取

从新工作表开始,按照以下步骤介绍下钻交互性:

  1. 创建两个自定义日期字段,一个是日期在日级别上,另一个是日期在周级别上。将周级别的计算拖动到标记卡上。

  2. 根据每周日期创建一个集合。单击“全部”按钮以选择所有数值,并命名该集合**包含的日期集合**

  3. 创建一个名为**Drill Date**的集合操作,当选择时运行,配置为“添加到集合中的值”,清除时“从集合中删除所有值”。

  4. 创建一个基于集合的计算维度,并将其放置在[日期]字段上。

    //Date to Show
    IF [Included Dates Set]
    THEN [Date (Days)]
    ELSE [Date (Week numbers)]
    END
    

    到此为止,您建立的互动将导致周日期标记变更为每日标记。但是,这两者仍将在视图中可见。此策略的最后一部分是为日期添加一个过滤器,以确保您正在进行钻取并将其过滤到每日视图。

  5. 创建一个名为**[Filter Date]**的计算字段:

    //Filter Dates
    IF {COUNTD(IF [Included Dates Set] THEN [Date (Days)] END)}>=1
    THEN [Included Dates Set]
    ELSE TRUE
    END
    
    提示

    此计算确定包含在集合中的日期数量。如果集合中有一个或多个日期,则计算将过滤以仅包括其中的日期。否则,如果集合中有 0 个或 NULL 成员,则整个折线图将显示。

  6. 通过构建一个计算字段来为工作表添加一些最终格式化,以动态更改数据粒度时进行动态更改;这将使用与日期过滤器相同的逻辑。将其作为属性添加到详细信息中。

    // Title Date Part
    IF {COUNTD(IF [Included Dates Set] THEN [Date (Days)] END)}>=1
    THEN 'Day'
    ELSE 'Week'
    END
    
    提示

    将格式化字段作为属性添加将确保在从一个日期级别更改到另一个日期级别时,标记选择仍然保持高亮显示。否则,在选择标记后,该值将不再是其一部分,会导致标记取消选择。

    使用此逻辑,您现在部署了一个可以动态从周变为天的折线图,如图 9-10 所示。这种技术和互动遵循最终用户的分析流程。有人可以进来,检查每周的数据,然后迅速钻取到特定周,查看更细粒度的每日数据。

按周的折线图(左),选择周后,数据钻取到每日(右)

图 9-10. 按周的折线图(左),选择周后,数据钻取到每日(右)

除了使用集合操作动态地深入研究时间部分外,它们也可以用于深入研究表格。有人曾对你说过:“我想看到这个区域的更多细节吗?”当他们这样做时,通常意味着您拥有分层数据,他们希望看到数据细分。他们希望拥有一张表格,在这张表格中,他们可以“展开”一个类别,以便根据需要查看其子成员。与 Tableau 内置的层次结构不同,集合操作使您能够让用户选择一个类别,从而提供更详细的信息,使他们能够在同一视图中查看较少关注的类别的聚合信息和特定类别的细分数据。

在我们的营销数据中,这个问题表现为用户希望深入研究感兴趣的服务区域,然后视觉审查与每个邮政编码相关的指标。他们不希望为那些兴趣较少的领土添加额外的邮政编码详细信息。

策略:展开数据表的一部分

在这个策略中,您将构建允许数据表通过集合操作展开和折叠的交互性:

  1. 创建一个显示按服务区域分组的成本、点击次数、每点击成本、转化、转化率和每转化收入的数据表。

  2. 创建一个名为**[选定服务区域]**的集合,基于[服务区域],并包括集合中的所有值。

  3. 创建一个名为**[显示邮政编码]**的计算字段,并将其放置在行架上的[服务区域]右侧:

    //Show Zip Code
    IF [Selected Service Area]
    THEN [ZIP]
    ELSE [Service Area]
    END
    
  4. 基于新集合创建一个集合操作,并配置该操作在选择时运行。配置操作以“分配值到集合”,并在清除选择时“从集合中移除所有值”。

    现在,当用户点击服务区域时,表格将动态展开以显示该服务区域的邮政编码。为了完成,我们建议添加以下最后的触摸。

  5. 创建一个名为**[钻取符号]**的计算字段:

    //Drill Symbol
    IF [Selected Service Area]
    THEN '▼'
    ELSE '►'
    END
    
  6. 创建一个名为**[邮政编码标头]**的计算字段:

    //Zip Code Header
    IF [Selected Service Area]
    THEN [ZIP]
    ELSE 'Total'
    END
    
  7. 将新的计算字段拖放到行架上,将[钻取符号]放置在[服务区域]后,将[显示邮政编码]放置在[钻取符号]后。右键单击[显示邮政编码]并隐藏标题。右键单击标题并选择隐藏字段标签行。根据需要调整行间隔和格式。现在您的可视化应该类似于图 9-11。

按服务区域聚合的营销指标(上),以及单击扩展按钮以显示北部邮政编码的图表(下)

图 9-11。按服务区域聚合的营销指标(上),以及单击扩展按钮以显示北部邮政编码的图表(下)

虽然添加额外的格式细节可能需要一些时间,但当我们说值得时,请相信我们。这些小设计决策累计起来形成良好的用户体验(我们将在第十二章中更详细地探讨)。并且您已经增加了更为熟悉于您的受众的功能。

集合操作带给可视化的功能和交互性是用户熟悉且喜欢的。实施这些类型的功能和功能最终将导致您的受众对您开发的内容做出更积极的响应。由于增加了这种交互性,他们也很可能更加投入其中。

动画

动画 是数据可视化方案中的一个较新概念。这种技术最初可以说是由汉斯·罗斯林的 Gapminder 首次流行化,展示了全球所有国家在过去 50 年间出生人数和预期寿命之间的关系如何变化。随着用于创建可视化的软件工具的演进,动画变得越来越普遍。

动画独特之处在于它们允许可视化开发者展示更复杂的主题,如随时间的变化、过渡、排名/顺序的变化或情感/叙述背景。通过直接“播放”数据,变化从观众身上卸载并直接放入视觉中。在这里需要注意的一点是:当使用动画时,我们强烈建议有人在场描述其展开的故事。因为动画通常需要讲述者,我们认为它最适合在演示的背景下而不是自助数据产品中使用。

Tableau 提供两种使用动画的方式。首先是通过页面架构。该功能允许用户“翻页”,或者根据架构上的维度构建不同的视图。想象一下,您有一本书,每一页代表一天。使用页面架构,您可以添加控制器以浏览每一页,甚至可以自动翻转它们。

Tableau 中使用动画的第二种方法是动画标记。当此功能打开时,如果由于过滤或交互而导致标记位置变化,则会自动进行动画显示过渡。这在用户进行选择时可以吸引注意力,或者可以识别数据本身已经被过滤的情况下非常有用。

竞争对手分析研究:使用动画比较排名表现

对于大多数品牌或产品来说,有竞争是很自然的。在任何一天,您的公司都在争取吸引消费者的最多关注度。衡量客户意识的一种流行方式是比较网页浏览等参与度指标。传统的分析方法可能是通过按天绘制页面浏览量,看看您的公司表现如何,然后再看看您的竞争对手。但是如果您想了解每天市场份额的动态变化,那么动画可以帮助展示同行之间的移动和变化,并讲述您的组织的表现故事。

在下一个策略中,我们将使用来自 SAGE 的另一个数据集。该数据集具有几个竞争对手和一个目标公司(您),根据页面浏览量定义其每日排名的指标。

策略:构建一个动画颠簸图

在第三章中,您学习了如何构建一个颠簸图,该图根据度量值排名的维度并绘制排名随时间变化的情况。在这个例子中,您将通过引入自定义的高亮和动画,进一步改进颠簸图:

  1. 构建一个颠簸图,显示每个竞争对手的每日排名。

    提示

    记住,凸显图通常是双轴图表;第一个轴标记是圆圈,第二个轴标记是线条。如果您的度量是连续的,请反转轴,使 1 位于图表顶部。

  2. 创建一个基于[Competitor]字段的参数**[Comparison]**,并从列表中删除 You。

  3. 创建一个名为**[Highlight Color]**的计算字段,用不同颜色着色 You、Comparison Competitor 和所有 Others。将其放置在 Marks card 的颜色上:

    // Highlight Color
    IF [Competitor]='You'
    THEN 'You'
    ELSEIF [Comparison]=[Competitor]
    THEN 'Comparison'
    ELSE 'Other'
    END
    
  4. 右键单击并将[日期]作为离散字段拖放到页面架上。配置控制器以显示所有标记的历史记录,包括轨迹和不透明标记。

    通过动画,您现在可以讲述品牌的故事,从第 6 名开始,途中取得一些进展,并在时间段的一半左右达到第 4 名的高峰,并最终在第 5 名结束。同样,您可以直观地看到竞争者 5 在时间段结束时向顶点发起强烈冲击(如图 9-12 所示)。

一个替代凸显图通常被称为racing bar chart。这种图表将指标的排名进行动画化,以便随时间查看位置变化,就像赛道上的赛车手一样争夺位置。

初始排名与竞争对手(顶部)和其余数据(底部)

图 9-12。初始排名与竞争对手(顶部)和其余数据(底部)的比较

策略:创建赛车条形图

使用相同的数据集,创建一个新的工作表,并执行以下操作:

  1. 创建一个水平条形图,包括 Rank 和 Page Views。

  2. 使用页面架逐日翻页。

  3. 将先前策略中的[Highlight Color]计算字段放置在颜色上。

  4. 不要启用页面架的历史记录。

    这种类型的动态图表利用时间内的位置变化,同时保持测量的幅度。图 9-13 显示,尽管您的品牌在页面浏览中排名第六,但所有竞争者都非常接近。然而,竞争者 5 后来主导了所有人,将您留在包尾。

初始排名与竞争对手(顶部)和最终排名(底部)

图 9-13。初始排名与竞争对手(顶部)和最终排名(底部)

结论

在本章中,您已经看到参数有多么强大。它们允许直接用户输入,并与计算字段结合使用,实现复杂的过滤和交互。它们非常有用,可以减少图表的繁殖,并在图表设计中提供灵活性(记得您是如何通过下拉菜单将线状图从月度数据更改为周度数据的)。直接用户输入意味着您的观众的行为可以定义可视化的输出——从而生成高度定制的最终可视化效果。

你也直接与集合进行了更多的工作,并看到它们带来的增强互动性。如果你的用户要求钻取功能,可以使用钻取作为一个关键词,考虑如何通过集合操作增强你的图表。最后,你已经看到动画如何将静态图表变得更有吸引力。通过运动和动作,数据故事更容易讲述,更令人兴奋。本章的技术组合将在提升你的数据产品分析能力和用户体验方面发挥重要作用。在 Tableau 中构建的精细数据产品可能会应用一个或多个这些工具以达到最大效果。

在下一章中,你将学习如何丰富你现有的数据集,填补日期和数值的空白,并构建复杂的可视化效果。

第十章:高级数据建模

有时候你想要制作一种图表类型,这在 Tableau 的默认功能中却难以实现。不要担心:只要有耐心和一些超越常规的思考,你可以在 Tableau 中制作任何类型的图表。

在本章中,你将探讨 Tableau Desktop 中数据建模的不同方法。当我们使用术语数据建模时,我们指的是包括可能不适用于标准可视化的额外数据。我们将讨论几种数据建模技术,包括使用表计算、混合、联合和连接。每种技术都有其适用的时机和场合。如果你对这些技术还不熟悉,不用担心;我们将在本章的案例中详细阐述这些差异。

在每种情况下,你都在权衡仪表板的性能和设计。有些权衡不会影响速度。其他情况下,特别是当你向可视化添加额外标记或向数据集添加行列时,可能会显著降低速度。

在你深入研究之前,我们将通过一些实际示例为你奠定理解的基础。

除了两种策略之外,其余都使用了 Tableau 的 Sample – Superstore 数据集。其他示例使用了销售管道数据和超市数据集的修改版本。本章不会为使用情况提供单一的线性故事。每种情况都是独立的。因此,我们将在每种策略中设定场景。

数据建模

数据建模可能是 Tableau 中最高级的概念。数据建模——有时也称为数据密集化(这是其中的一个子集)——是一种增加可视化中显示数据量的技术。

数据密集化最常用于创建曲线图,但数据建模还有许多其他实际用途。我们只会讨论其中几种可能性。最常见的数据建模类型是填充潜在缺失值(域填充)。这种方法如此常见,以至于你在第六章中已经使用过它!除了填充缺失值,你还可以在系列的开头或结尾添加更多数值(域完成)。域填充和域完成都不必复杂;实际上,在我们的第一个策略中,我们将向你展示如何同时进行这两种操作。

随着技能的提升,你会尝试开发超越 Tableau Desktop 基本功能的独特解决方案。记住,任何可视化本质上都只是点、线和多边形的组合。如果你无法在 Tableau 中制作基本图表,你可以使用数据建模重新定义你的可视化。

我们可以通过至少三种方式执行数据建模:联合数据源、连接数据源或进行分桶/范围密集化。对于大多数可视化,你可以使用其中任何一种方法。每种方法都有其权衡,但都会向现有数据源添加更多数据以创建你的可视化。

数据建模的最简单方法是union或附加数据源到其自身。这样可以复制你正在处理的所有数据,但将数据源附加到自身的过程是所有方法中最简单的。例如,如果你想要将数据加倍,并且正在使用 Sample – Superstore 数据集,你只需联合订单即可。这种方法的缺点是你至少需要再次加载所有数据进行联合。如果你处理大量数据(一百万条或更多记录),这可能不是最好的方法。

第二种方法是简单地将感兴趣的数据源与一个占位数据集连接起来。这个占位数据集通常很简单,通常是一个单列,行数从 1 开始,逐步增加,直到需要进行分析的整数为止。这种连接也会有效地使你的数据加倍。然而,通过使用提取功能,Tableau 只会对数据进行单次快照,而不会像联合操作那样复制数据。从性能上看,这种方法是三种方法中最高效的一种。

在这种情况下,如果你正在使用 Sample – Superstore 数据集,并希望将其复制五次,你首先需要创建一个新的占位数据集,如下所示:

placeholder
1
2
3
4
5

然后,你可以通过使用自定义连接,其中 1 = 1(我们将在本章后面向你展示如何做到这一点),将数据集连接到 Sample – Superstore。如果你需要将数据复制 100 次,你只需有 101 行,每行从 1 开始以 1 的增量计数。在数据建模时,这是我们的方法。

最后一种方法需要你创建一个连接到一个补充数据源的连接,该数据源包含两行:第一行是第一个值,最后一个值是你希望在视图上复制的数据源的最大次数。然后,你可以使用分段和表格计算来填充缺失的值。从性能角度来看,这种方法通常效率最低,因为数据建模是通过表格计算完成的。这些类型的计算在可视化渲染时完成,通常返回速度最慢。

在这种情况下,与前述连接示例一样,如果你正在使用 Sample – Superstore 数据集,并希望将其复制五次,你首先需要创建新的占位数据。这次,占位数据要简单得多:

placeholder
1
5

之后,你将像连接示例一样连接到数据。这是方法分歧的地方。从那里,你需要使用分段和一些我们不会讨论的其他步骤来填充值 2、3 和 4。如果你对这种技术感兴趣,可以阅读 Ken Flerlage 的一篇优秀博客文章

正如前文所述,我们将在本章讨论联合和连接方法。 值得注意的是,bin/table 计算方法在 Tableau 社区中非常流行,并且仍然是许多人进行数据建模的方法。 我们主要放弃这种技术的原因是 Tableau 在创建数据提取方面有了显著改进,而原始方法允许通过绕过显著增加数据源的方法进行工作。 我们发现,与 bin/table 计算方法相比,使用简单的连接在复制数据超过 100 次时可以提高性能高达 20 倍。

策略:创建一个具有数据致密性的日历

您的经理希望看到一个热力图,显示每年每天的盈利能力。 为此,您决定将可视化呈现为一个日历形式。 唯一的挑战是:您没有全年每天的销售数据,导致日历中有很多空白。

通过这种策略,我们将向您展示如何创建一个四年盈利日历。 在此示例中,您将学习如何使用 Sample - Superstore 数据集执行基本数据致密化以填充缺失值。 让我们从查看 Tableau 默认生成的内容开始;请查看图 10-1。

没有数据建模的日历

图 10-1. 没有数据建模的日历

您可以看到,Tableau 仅在存在数据的地方返回单元格。 例如,如果我们查看 2017 年 1 月 1 日或 2017 年中,它们不会显示出来。 这是因为我们的数据集中没有这些日期的数据。 我们通过这种策略的目标是填补这些缺失值,以便我们的可视化效果如预期般呈现:

  1. 按以下步骤构建日历:

    1. 将[Order Date]的年份和[Order Date]的工作日添加到列中。

    2. 将[Order Date]的月份和[Order Date]的星期添加到行中。右键单击行上的 WEEK(Order Date)。

    3. 将[Order Date]的日期添加到文本和 SUM(Profit)添加到颜色,然后将标记类型更改为方形。 结果见图 10-2。

      更详细查看列、行和标记卡

    图 10-2. 更详细查看列、行和标记卡
  2. 这一步非常简单。 右键单击行或列架上的任何维度,并选择显示缺失值(见图 10-3)。 这将填充从最小到最大的所有值。

    显示缺失值选项

    图 10-3. 显示缺失值选项

    如您在图 10-4 中所见,从 2017 年 1 月 3 日到 2020 年 12 月 30 日的所有值均已填充。 但是,如果您想显示 2017 年 1 月 1 日、2017 年 1 月 2 日和 2020 年 12 月 31 日,您需要扩展我们的方法。 通过一些 Tableau 技巧,我们可以通过将图层叠加到彼此上来完成这一点。

    从最小值到最大值的填充日历

    图 10-4. 从最小值到最大值的填充日历
  3. 要格式化现有的可视化图表,右键单击它,并将工作表的背景填充设置为无。同时将文本颜色更改为深灰色。

  4. 构建背景表如下:

    1. 创建一个名为**[Order Date Domain]**的计算字段。如果数据集中的日期等于最早的日期,则返回最早日期的 1 月 1 日;如果日期等于最晚日期,则返回最晚日期所在年的 12 月 31 日:

      // Order Date Domain
      IF [Order Date] = {MIN([Order Date])}
      THEN DATETRUNC("year", [Order Date])
      ELSEIF [Order Date] = {MAX([Order Date])}
      THEN DATEADD("year", 1, DATETRUNC("year", [Order Date]))-1
      ELSE [Order Date]
      END
      
    2. 创建一个用于背景的新表。按照[Order Date Domain]日期字段的步骤 1 和 2 操作。显示缺失值后,您会注意到值现在从 2017 年 1 月 1 日到 2020 年 12 月 31 日。

    3. 通过选择自定义分歧调色板并设置颜色为#E1E1E1 来编辑颜色。然后将阶梯颜色设置为 2 个单位。这将创建一个全灰色的表格(图 10-5)。

      背景表

    图 10-5. 背景表

    使用计算完成了域填充,通过“添加”日期到您的数据集中。然后使用显示缺失值来执行域完成。

  5. 对于这个日历,您将将两个可视化图层叠在一起:

    1. 如果您还没有仪表板,请创建一个新的仪表板并添加一个垂直容器。将背景表添加到容器中,并将表格适应整个容器。

    2. 在背景视图上添加一个浮动容器。将顶层添加到顶部容器中。隐藏所有标题,然后调整顶部容器的大小以匹配背景层。您可以通过匹配两个表格之间的左、顶部、宽度和高度来匹配大小。

    最终结果是两个看起来像一个完整日历的可视化图表(图 10-6)。

最终结果:两层表格

图 10-6. 最终结果:两层表格

使用此策略,您通过单一计算和显示缺失值应用了域填充和域完成。这是数据稠密化的最简单版本。在本章的其余部分,您将学习更复杂的数据建模版本。

策略:创建圆角柱状图

对于这个策略,您将创建一个按子类别销售总结的报表。起初,您可能会想:“这看起来很容易”,但是如果您的利益相关者希望看到一种非常特定类型的图表:圆角柱状图呢?您知道这对于解释并不理想,但同意这是一个摆脱通常得到的乏味柱状图的方法。

圆角柱状图策略的最终输出

图 10-7. 圆角柱状图策略的最终输出

在这个策略中,您将学习如何制作圆形条形图,如图 10-7 所示,但更重要的是,您将开始学习数据建模的基础知识。通过数据建模,您可以向数据集添加更多数据,以构建出色的解决方案。正如前面提到的,这可以通过三种方式之一来完成:联合操作、连接和表计算。

对于这种圆形条形图策略,以及下一节参考第六章中学到的经验,我们将使用联合操作。再次强调,我们可以通过其他技术来完成这一操作,但我们将从我们认为最简单的选项开始:

  1. 让我们从连接到 Sample – Superstore 数据集开始。而不是使用您拥有的任何快速连接,选择 Microsoft Excel 并找到 Sample – Superstore.xls。连接后,点击并拖动订单表到数据源。结果如图 10-8 所示。

    连接到数据集的订单选项卡

    图 10-8. 连接到数据集的订单选项卡

    您所做的事情非常典型。但我们还没有完成数据窗格的工作。

  2. 让我们使用与连接窗格中选定的订单表相同的订单表,并将其与已添加到数据源窗口的订单数据联合,如图 10-9 所示。

    将订单与订单联合

    图 10-9. 将订单与订单联合

    通过将订单数据与自身联合,我们实际上创建了第二层数据以便操作。这个重复的数据层不仅提供了在 Tableau 中工作的更大灵活性,同时也要求我们始终跟踪每一层。您不断需要问自己,第一层数据发生了什么?第二层数据又如何?如果您能同时追踪这两层,您就已经在成为 Tableau Desktop 的高级专业人士的道路上迈出了重要的一步。

    那么,如何跟踪这两层数据呢?当您将数据源联合在一起时,Tableau 会在数据集中创建两个新字段来帮助跟踪这些层:[Sheet] 和 [表名]。在构建数据时,您可以通过向右滚动屏幕看到 [Sheet] 和 [表名](参见图 10-10)。

    联合后,[Sheet] 和 [表名] 维度被添加

    图 10-10. 联合后,[Sheet] 和 [表名] 维度被添加

    对于我们的策略,您将使用 [表名] 维度来跟踪每个层面的情况。

  3. 单击 Sheet 1. 在开始构建之前,将 [销售额] 添加到列和 [表名] 添加到行。您将看到我们有两个 [表名] 的成员:Orders(我们的第一层)和 Orders1(我们的第二层,Tableau 在名称末尾添加了 1)。您还会注意到销售额相等。这是因为我们的层是相同的。

    数据建模的一半是将数据整理好。另一半是跟踪数据在可视化中的位置。

  4. 现在我们有两层数据,我们必须考虑我们的圆形条形图实际上是什么:它只是两条重叠的线。我们需要控制每条线的起始和结束。我们可以通过我们的两个数据层来做到这一点。让我们考虑图 10-6 中的最终产品。我们主要条形的起始点是零。我们需要一层数据等于零。另一层数据需要达到总销售额。

    让我们构建一个称为**[Bars]**的计算来完成这个任务:

    // Bars
    IF [Table Name] = "Orders"
    THEN 0
    ELSE [Sales]
    END
    

    您还有我们的背景条形,其整体长度等于每个[Sub-Category]的最大销售额。创建一个名为**[Background]**的计算:

    // Background
    IF MIN([Table Name]) = "Orders"
    THEN MIN(0)
    ELSE WINDOW_MAX(SUM([Sales]))
    END
    
  5. 要构建可视化效果,请创建一个新工作表,并将视图从标准更改为整个视图。

    1. 将[Sub-Category]添加到行中。

    2. 将[Sales]总和添加到行中。将数据转换为离散值。然后将数字格式设置为货币并右对齐文本。图 10-11 显示了此步骤后的视图。

      格式化后的销售离散总和视图

      图 10-11. 格式化后的销售离散总和视图
    3. 将[Table Name]添加到标记卡的详细信息中。

    4. 将[Bars]计算添加到列中,将标记类型更改为线性,并调整大小为最大值的约 75%。图 10-12 显示了此步骤后的视图。

      将 Bars 计算添加到行后的视图

      图 10-12. 将 Bars 计算添加到行后的视图
    5. 将[Background]计算添加到列中。确保标记类型设置为线性。在[Bars]和[Background]之间创建双轴。右键单击[Background]轴,选择“将标记移至后面”。(根据您使用的 Tableau 版本,可能需要将[Table Name]的标记类型更改为线性,而不是详细信息。)

    6. 从两个标记卡中删除[Measure Names]。编辑[Background]标记卡上颜色的不透明度为 25%。图 10-13 显示了此时的可视化效果。

      格式化背景标记卡颜色后的视图。

      图 10-13. 格式化背景标记卡颜色后的视图。
    7. 通过隐藏轴线、删除网格线、零线、轴标尺和列分隔线来格式化视图。格式化您的工具提示。

    完成这些步骤后,您已经创建了最终产品(图 10-14)。

提示

需要知道并非所有数据源都能在 Tableau 中创建联合。有关完整列表,请参阅 Tableau 的联合帮助文档

一个格式化的圆形条形图

图 10-14. 一个格式化的圆形条形图

策略:创建手风琴表格

您构建了很多表格,因为您的受众要求快速获取数字。您使用层次结构允许用户通过数据上下钻取。但您经常听到的一个普遍抱怨是,当用户展开表格时,他们看到了太多信息,无法比较一个层次和下一个层次。

例如,假设用户想要查看图 10-15 中办公用品的利润率。用户需要向上钻取层次以获取数字。

Tableau 中的标准层次结构

图 10-15. Tableau 中的标准层次结构

减少认知复杂性的一种替代方法是手风琴表格。在高层次上,您只看到顶层信息。在图 10-16 中,这意味着仅查看类别级别的值。

类别级别概览

图 10-16. 类别级别概览

然而,如果您的用户想要查看有关办公用品的详细信息,他们可以打开手风琴并在不泄露过多信息的情况下理解更低一级的细节,如图 10-17 所示。

使用手风琴表格来钻取到办公用品类别并查看子类别的表现

图 10-17. 使用手风琴表格来钻取到办公用品类别并查看子类别的表现

当我们构建可钻取的表格时,通常会使用手风琴表格。那么这是如何完成的呢?

  1. 对于这种策略,我们将使用与前一策略相同的 Samples – Superstore 数据源。如果您未连接到此数据源,请按照“策略:创建圆角条形图”的步骤 1 和 2 进行连接。

  2. 不要选择标准或整体视图,而是将视图大小设置为适合宽度。构建可视化如下:

    1. 将[Category]添加到行中。

    2. 将[Category]添加到[Table Name]的右侧行。确保 Orders 成员出现在 Orders1 之前。

    3. 在数据窗格中右键单击[Category]并创建一个新集。将该集命名为**[Category Set]**。暂时不要选择任何值。

    4. 创建一个名为**[Arrow]**的箭头计算:

      // Arrow
      IF [Table Name] = "Orders"
      AND NOT [Category Set]
      THEN "►"
      ELSEIF [Table Name] = "Orders"
      AND [Category Set]
      THEN "▼"
      ELSE ""
      END
      

      当手风琴展开时显示向下箭头,当手风琴关闭时显示向右箭头。将[Arrows]放置在[Table Name]的右侧行。

    5. 创建一个名为**[Level]**的计算字段。此计算将根据我们处理的数据层次显示[Category]或[Sub-Category]:

      // Level
      IF [Table Name] = "Orders"
      THEN [Category]
      ELSE [Sub-Category]
      END
      

      将[Level]放置在[Arrow]的右侧行。

    6. 将[Measure Names]添加到列中,并将[Measure Values]添加到标记卡上的文本。仅包括您感兴趣的指标。例如,我们使用 SUM(Sales)、SUM(Profit)、[Profit Ratio]和 COUNTD(Orders)。

      如果[Profit Ratio]和 COUNTD(Order ID)不存在,您可以创建以下计算字段:

      // Profit Ratio
      SUM([Profit])/SUM([Sales])
      
      // Total Orders
      COUNTD([Order ID])
      

      您现在已经有一个完全建立的表格。

    7. 通过右键单击每个,并取消选择显示标题的方式,隐藏[类别]和[表名]维度。

    8. 通过删除行带、零线、轴标尺和网格线来格式化您的表格。添加行分隔线,使其与图 10-18 中的视图匹配。

      隐藏类别和表名标题及格式后的手风琴

    图 10-18. 隐藏类别和表名标题及格式后的手风琴
  3. 当您仅希望在选择时显示数据时。为此,您需要创建一个筛选器。创建一个名为**[Filter]**的计算:

    // Filter
    [Table Name] = "Orders"
    OR [Category Set]
    

    将筛选器添加到筛选架上并选择 True。图 10-19 显示了此阶段的可视化。

    添加筛选器计算后的手风琴

    图 10-19. 添加筛选器计算后的手风琴
  4. 在将可视化添加到仪表板后,从顶部菜单选择仪表板 → 操作 并添加一个操作。或者,您可以通过从顶部菜单选择工作表 → 操作 在工作表上添加操作。

    选择更改集合值以添加一个集合操作。在选择时,将一个值分配给类别集合,当选择被清除时,移除所有值。点击“确定”。然后再次点击“确定”。这些选项显示在图 10-20 中。

继续测试您的表格,选择家具。您会注意到,您的表格会展开,显示四个子类别的信息,如图 10-21 所示。现在,您将能够在不向观众展示过多信息的情况下深入了解和分析您的数据。

将集合操作添加到类别集合计算中

图 10-20. 将集合操作添加到类别集合计算中

打开家具类别后的手风琴表格

图 10-21. 打开家具类别后的手风琴表格

策略:创建销售漏斗

数据为现代销售团队提供动力和销售激励,而他们最想看到的最常见的可视化是销售漏斗。销售漏斗显示了销售周期中从阶段到阶段的转化率。

在这种策略中,您将在图 10-22 中创建销售漏斗。您将使用包含 1,000 条销售机会记录、机会价值以及管道阶段的模拟销售数据。您的销售管道包括六个阶段,但这在不同组织之间可能有所不同。这些阶段分别是潜在客户、领导、合格、机会、谈判和关闭。每笔交易都必须经过每个阶段。

销售漏斗

图 10-22. 销售漏斗

销售漏斗是一种非标准的数据可视化。虽然有一些方法可以在没有数据建模的情况下创建漏斗,但是这些技术的最大问题是漏斗各阶段的区域最终被误表示。此外,对销售漏斗的普遍反驳是,漏斗是一个可以用一系列条形图代替的隐喻。这是完全正确的。然而,当我们考虑我们的受众及其如何与数据互动时,有时销售漏斗的隐喻是他们理解管道转化的确切可视化工具。而且在 Tableau 中创建比例正确的具有正确区域的销售管道是不可能的,除非稍作数据建模。

这将是第一个使用连接的数据模型。我们将使用连接四次复制数据:每个销售多边形的每个角落一个。以下是步骤:

  1. 在记事本或任何文本编辑器中,通过输入以下内容创建您的建模数据源:

    Model
    1
    2
    3
    4
    

    将文件保存为 funnel_model.csv

  2. 在建模数据时,您需要连接到两个数据源:销售数据源和建模数据。您还需要使用自定义连接将这两个源连接在一起:

    1. 连接到 funnel_model.csv 数据源。单击并拖动 funnel_model.csv 到这里拖动表格部分。

    2. 将另一个数据源连接到销售阶段数据。单击并拖动 sales_stage_datafunnel_model.csv 数据源。

    3. 要将两个数据源合并在一起,您需要编辑连接。为两个数据源创建自定义关系计算,并将每个值设置为 1(图 10-23)。

    为 *sales_stage_data.csv* 数据源创建自定义关系

    图 10-23. 为 sales_stage_data.csv 数据源创建自定义关系

    您的数据源连接将从红色警告标志变为橙色线条。此线表示两个数据源之间的关系。数据准备好进行分析。创建一个新表开始构建我们的销售漏斗。

  3. 要确定并填写销售漏斗的值,我们需要编写漏斗部分的顺序代码。使用 case 语句按阶段名称创建一个名为 **[排序]** 的计算:

    // Sort
    CASE [Stage]
    WHEN "Prospect" THEN 1
    WHEN "Lead" THEN 2
    WHEN "Qualified" THEN 3
    WHEN "Opportunity" THEN 4
    WHEN "Negotiations" THEN 5
    WHEN "Closed" THEN 6
    END
    

    在这个例子中,我们的阶段按照潜在客户、领导、合格、机会、谈判、以及关闭的顺序排列。

  4. 计算销售机会的总价值如下:

    1. 创建一个名为 **[总价值]** 的计算:

      // Total Value
      RUNNING_SUM(SUM([Value]))
      

      我们将使用这个计算来确定整个管道中机会的总价值。

    2. 在创建漏斗图表的过程中,您需要计算每个阶段的价值,但还需要计算下一个阶段的价值。创建一个名为 **[下一个价值]** 的计算:

      //Next Value
      IFNULL(LOOKUP([Total Value] ,1), [Total Value])
      
    3. 也许你不希望漏斗的各个阶段相互接触。你可以通过添加填充来解决这个问题。与其在阶段之间硬编码填充,不如创建一个名为**[padding]**的浮动参数。我们给我们的参数分配了一个值为 1.05。建议的值范围从 1(无填充)到 1.3(大量填充)。

    4. 创建一个名为**[size]**的计算,为你的数据模型分配值。这将有助于创建你漏斗的侧面:

      //size
      IF [Model] = 1
      OR [Model] = 2
      THEN 2
      ELSE 1
      END
      
  5. 创建两个计算,一个用于x坐标,一个用于y坐标,如下所示:

    1. 对于x坐标,创建一个名为**[x]**的计算:

      //x
      CASE MIN([Model])
      
      WHEN 1 THEN [Total Value]
      WHEN 2 THEN -[Total Value]
      WHEN 3 THEN -[Next Value]
      WHEN 4 THEN [Next Value]
      END
      
    2. 对于y坐标,创建一个名为**[y]**的计算:

      //y
      
      FLOAT([size]) - ([Sort]*[padding])
      

      在这种情况下,[size]只是漏斗的总高度,而[sort] * [padding]将指定销售漏斗每个部分的起始位置。

  6. 现在你已经有了创建漏斗的计算,你可以开始构建漏斗图表。最终你会创建一个双轴图表,因此这只是可视化的一部分,但如果你能够构建漏斗,那么最后的步骤将变得非常容易:

    1. 将标记类型更改为多边形。然后将[Stage]添加到颜色中,将[Model]作为路径的维度。

    2. 将[y]添加到行中。更改聚合为平均值。不要忘记平均聚合,这对后续步骤至关重要!

    3. 将[x]作为列的维度添加到表中。右键单击编辑表计算。因为你正在处理嵌套计算,你有两个表计算需要编辑。对于[Next Value]计算,设置“计算使用”选项为特定维度,然后仅选择阶段复选框。从“排序顺序”列表中,选择自定义排序,在你创建的[Sort]计算上执行升序排序,使用最小作为聚合类型。对于[Total Value]表计算,使用相同的设置,这在图 10-24 中显示。

      漏斗图表的 x 计算字段的表格计算

      图 10-24. 漏斗图表的 x 计算字段的表格计算
    4. 删除所有线条和分隔线,并隐藏标题。然后点击颜色并删除多边形周围的边框。编辑阶段的颜色。

      有三种选项可以为各个阶段着色:保持颜色不变,因为你已经利用漏斗的形状来编码变化;使用离散的颜色来强调每个阶段是独立的;使用自定义的顺序颜色调色板(如前所述,这将信息双重编码)。结果如图 10-25 所示。

      格式化的漏斗图表的前半部分

    图 10-25. 格式化的漏斗图表的前半部分
  7. 通过添加文本和标签来为漏斗增加上下文。为此,你需要构建一个在图表上居中标签的计算:

    1. 创建一个名为**[Center Label]**的计算:

      //Center Label
      IF [Model] = 1 THEN 0 END
      

      因为您对数据进行了四次建模,所以只需为数据模型中的单个点计算总计。在这种情况下,您将计算模型维度等于 1 时的值。

      在列中添加[Center Label]。默认聚合是求和,您无需更新此项。使用[x]和[Center Label]的求和创建同步双轴;不要忘记从两个标记卡中删除[Measure Names]。完成轴设置后,将标记类型更改为文本。

      将[Stage]添加到标签中。

    2. 您将希望显示管道中每个阶段的值。请记住,无论机会处于哪个阶段,它都将通过每个前期阶段。这意味着我们需要将每个阶段的值回滚到上一个阶段,即使这些数据在我们的数据集中技术上并不存在。我们可以通过表格计算来实现这一点。

      创建一个名为**[Stage Value Label]**的计算:

      //Stage Value Label
      RUNNING_SUM(SUM(IF [Model] = 1 THEN [Value] END))
      

      这将为模型值添加标签,其值等于 1。

      由于您的值将分别为千元和百万元,因此无需显示到最接近的美元。您可能更喜欢在千位数和百万位数中显示KM。您可以通过自定义计算来实现这一点:

      //Stage Value Suffix
      IF [Stage Value Label] > 1E6
      THEN "$" + LEFT(STR(ROUND([Stage Value Label]/1E6,2)),4) + "M"
      ELSEIF [Stage Value Label] > 1E3
      THEN "$" + LEFT(STR(ROUND([Stage Value Label]/1E3,0)),4) + "K"
      ELSE "$" + STR(ROUND([Stage Value Label]))
      END
      

      这个计算将四舍五入到低于十亿的值。

      在 Marks 卡上的文本中添加[Stage Value Suffix]。编辑表格计算,选择特定维度,然后选择阶段复选框。您还需要添加自定义排序。使用 Minimum 作为聚合的排序计算进行降序排序。此表格计算显示在图 10-26 中。

      这个表格计算的结果实际上是 Tableau 的一个伟大的隐藏技巧。我们正在对表格进行表格计算!Tableau 经常建议“表格(横向)”和“表格(纵向)”。但从来没有“表格(上)”选项。这证明你可以做到;你只需要使用自定义排序。

      漏斗计算中标签的表格计算和自定义排序

      图 10-26. 漏斗计算中标签的表格计算和自定义排序
    3. 创建一个名为**[% Closed]**的计算,显示每个阶段关闭的机会百分比:

      //% Closed
      WINDOW_MIN([Stage Value Label])/[Stage Value Label]
      

      将[% Closed]添加到文本,然后编辑表格计算。将两个[% Closed]表格计算设置为与步骤 7b 中的表格计算匹配,并按最小降序排序。

    4. 格式化文本以匹配图 10-27,包括将[% Closed]更改为百分比显示。[Stage]应该比[Stage Value Suffix]字体小。将[% Closed]格式化为最小、最轻色的字体。

漏斗标签的文本编辑器

图 10-27. 漏斗标签的文本编辑器

图 10-28 展示了生成的漏斗图。它显示了从阶段到阶段的变化,同时保持了实际漏斗的外观和感觉。您在这个图表中投入了很多精力。您可能不需要在每个创建的图表中投入这种程度的努力,但在某些情况下,您的观众可能会希望得到更加精致、信息图表般的图表。在这些情况下,您可能需要使用数据建模。

除了学习如何应用数据建模原则,您还学会了执行一个表计算,该计算将会上升(而不是下降)到一个表格。记住,在建模数据时,您需要考虑每个层次发生的情况。在本例中,您需要考虑模型维度的所有四个成员将会发生什么。您已经为每个阶段的四个角建模了数据。您还通过使用IF语句控制标签显示位置。

此使用占位符数据来建模可视化的方法可以用于先前的策略。为此,您只需对两行数据进行建模。但有时我们的数据建模不涉及创建用于连接的占位数据集;有时我们只需将数据连接回我们现有的数据源即可。

最终的漏斗图

图 10-28. 最终的漏斗图

Market Basket Analysis

Market basket analysis 是零售商、餐厅和制造商用来发现产品之间关联的技术。市场篮子分析寻找在交易中经常一起出现的物品组合。通过理解交易,您可以了解客户的行为。

在 Tableau 中,篮子分析不是一个开箱即用的分析方法。要完成这种分析,我们需要使用数据建模。但是对于这个数据模型,我们将把数据源的一个实例与数据的一个副本版本相关联。当您将数据建模到自身时,您将会将数据指数增长。好消息是:Tableau 的逻辑层使关系变得简单,因此您的数据不会变得混乱。逻辑层是在 Tableau 中处理数据的两种方法之一。从 Tableau Desktop 2020.2 开始,Tableau 允许用户在逻辑层和物理层上构建交互。

使用 Tableau 称为noodle relationships的逻辑层,您可以将任何数据源拖放到画布上,并允许数据源根据工作表上的分析级别具有灵活的关系。您无需为关系指定连接类型,而是 Tableau 会根据字段和工作表上的分析类型自动选择适当的连接类型。在某些情况下,Tableau 可能会使用关系将数据类型连接在一起;其他时候可能不会使用这些关系。这完全取决于您工作簿中的分析。图 10-29 展示了一个逻辑表的示例。

来自 Tableau,这是逻辑表的一个示例

图 10-29. 来自Tableau,这是逻辑表的一个示例。
提示

对于更详细的关系工作,请参阅这篇Tableau 帮助文章

将关系视为两个表之间的合同。当您使用这些表的字段构建可视化时,Tableau 使用该合同构建查询,并进行适当的连接,从表中引入数据。

与逻辑表不同,物理表在分析开始前使用连接将两个表中的数据合并到一个表中。与逻辑模型不同,合并表可能导致数据重复,来自一个或两个表的数据被过滤,或者数据中添加 NULL 行。连接可以让您更好地控制数据,但也需要您准确理解操作数据的方式及其可能产生的后果。在我们的许多示例中,我们将使用物理表。图 10-30 显示了一个示例。

来自 Tableau,这是物理表的一个示例

图 10-30. 来自Tableau,这是物理表的一个示例。

策略:篮子分析

在进行篮子分析时,您通常需要计算三个指标:支持度、置信度和提升度。这些指标彼此有一定的依赖关系。其中,提升度最重要。提升度是一个比率,表示两个项目在单个交易中出现的几率与两个项目在独立交易中出现的几率之比。

让我们来看一个例子。假设我们有一个包含 100 笔交易的数据集。在其中 25 笔交易中,顾客购买了活页夹;有 10 笔交易是购买紧固件;而有 5 笔交易同时包含了活页夹和紧固件。假设我们的假设是活页夹提升(增加)了紧固件的销售。

支持度通过计算同时购买两个项目的出现百分比来计算—在这种情况下为 5/100,即 5%。

置信度是包括两个项目的所有购买次数除以紧固件交易次数的比率—在这种情况下为 5/10,或者 0.5。置信度还可以通过支持百分比除以紧固件交易百分比来计算—在这种情况下为 5%/10%,即 50%。

最后,我们可以计算提升度,即置信度除以活页夹交易百分比—在这种情况下为 0.5/0.25,即 2.0。因此,对于活页夹对紧固件的提升度—或反之—我们的最终数字是 2.0。这意味着如果您知道客户正在购买活页夹,那么购买紧固件的概率是 2.0,即两倍。

提升值大于 1 表示项目彼此依赖。等于 1 的值表示没有关系。小于 1 的值表示两者之间存在负面影响,可能意味着两者是彼此的替代品。

对于这种策略,我们将使用逻辑表格 — 尽管对于物理表格,流程几乎相同。要完成购物篮分析,通常需要大量信息来比较产品。样本 – 超级商店数据集有 9,994 行数据,1,849 种产品和 5,009 个交易。这些信息并不足以在产品级别进行购物篮分析。对于 1,849 种产品,我们可能需要接近 100,000 个交易来进行有意义的分析。因此,我们可以将购物篮分析转移到更高级别:子类别级别。在我们的购物篮分析中,我们将确定哪些子类别对其他子类别提供了提升:

  1. 打开 Tableau 并添加数据源。连接到样本 – 超级商店数据集,然后点击并拖动订单表到数据视图中(参见图 10-31)。

    连接到样本 – 超级商店中的订单表

    图 10-31. 连接到样本 – 超级商店中的订单表

    接下来,从连接面板的表格中选取同样的订单表,并将其拖放到数据面板上。这些数据源将尝试通过一根连接线连接,如图 10-32 所示。由于您使用了同一数据集两次,Tableau 将要求您选择用于连接的字段。让我们将[订单 ID]与 Orders 表上的 [订单 ID] 进行连接。同时,将 [子类别] 连接到 [子类别],但更改等于符号为小于或等于符号。不多说了,这种符号变更将创建一个更清晰的最终可视化,仅显示矩阵分析的交叉部分,而不是整个矩阵。

    请记住,我们将在子类别级别进行购物篮分析。如果我们进行产品级别的分析,您将连接到产品。您无需进行其他连接,即使数据是相同的。

    编辑相同数据源之间的逻辑关系。请注意子类别上的小于或等于符号

    图 10-32. 编辑相同数据源之间的逻辑关系。请注意子类别上的小于或等于符号

    当您完成创建这些连接后,可以进入新的工作表。

  2. 您会注意到,在此数据连接中,您的数据面板上的每个字段都重复出现 — 一个是初始订单数据集的,另一个是您加入的订单数据集的。Tableau 将加入的订单数据集重命名为 Orders1,以帮助澄清数据源。这也是您在字段名称中看到一半度量和维度带有 (Orders1) 后缀的原因。

    1. 将 [子类别] 添加到列中,将 [子类别 (Orders1)] 添加到行中。您会注意到 Abc 只显示在对角线上的一半字段上(参见图 10-33)。

      添加维度到行和列后的市场篮分析

      图 10-33。在行和列中添加维度后的市场篮分析
    2. 在市场篮分析中,支持是包含xy的总交易数除以总交易数。创建一个名为**[支持]**的计算:

      // Support
      COUNTD([Order ID])/MIN({COUNTD([Order ID])})
      

      如果您在问自己应该使用哪个订单 ID:没关系。因为我们在[订单 ID]上加入了数据集,它们将是相同的。我们个人更喜欢较短的版本,因为这样更容易阅读我们的函数。

      请注意,我们使用 LOD 计算来返回整个数据集中的总订单数。在 Tableau 的一个特殊情况中,由于使用了COUNTD()函数,无法使用表计算来计算总订单数。

    3. 置信度通过计算包含xy的总交易量并除以仅包含x的交易量来计算。有几种编写此计算的方法,但在此示例中,我们将使用[支持]计算来创建**[置信度]**计算:

      // Confidence
      [Support]/
      MIN(
          {FIXED [Sub-Category] : COUNTD([Order ID])}
          /
          {COUNTD([Order ID])}
      )
      
    4. Lift通过将置信度计算除以包含y的订单比例来计算。创建一个名为**[Lift]**的计算:

      // Lift
      [Confidence]
      /
      (COUNTD([Order ID])/MIN({FIXED [Sub-Category (Orders1)]
        : COUNTD([Order ID])}))
      

      创建了[Lift]计算后。将[Lift]添加到标记卡上的文本。然后将标记类型更改为正方形,并将[Lift]也添加到颜色中。结果是图 10-34。

      在文本和颜色中添加[Lift]后的市场篮分析

      图 10-34。在添加[Lift]到文本和颜色后的市场篮分析

      如果您仔细观察分析,您会注意到纸张和复印机之间存在非常高的关联性。这可能是有道理的!那么桌子和复印机呢?每个人都需要买一个桌子来配合复印机吗?也许是为了把复印机放在桌子上。或者也许我们没有足够的数据来做这种推断。也许有意义的是,我们在显示数据之前在每个单元格中有一个最小订单数。

  3. 假设我们至少需要 10 个订单才能显示一个单元格。我们可以添加一个过滤器,但这只会使该单元格消失。如果单元格是不同的颜色并且文本被省略,会更好。我们可以通过参数和几种不同的颜色来做到这一点:

    1. 创建一个名为**[最小订单]**的整数参数,并将其值设置为 10。

    2. 创建一个名为**[Lift | Color]**的计算:

      // Lift | Color
      IF COUNTD([Order ID]) >= [Min Orders]
      THEN [Lift]
      ELSE -1
      END
      

      将[Lift | Color]拖动到替换 Lift。编辑颜色以将调色板更改为绿-蓝-白分散(或您喜欢的任何调色板)。点击应用。然后编辑蓝色以设置为#D3D3D3。选择使用全色范围和反转复选框。在高级设置下,将范围硬编码设置为从-1 到 5(这在实际生活中是很多的)。将中心固定为 0。图 10-35 展示了颜色设置。

      市场篮分析上的[Lift | Color]的颜色设置

      图 10-35. [Lift | Color]的市场篮分析的颜色设置
    3. 创建一个名为**[提升 | 标签]**的新标签计算:

      // Lift | Label
      IF COUNTD([Order ID]) >= [Min Orders]
      THEN [Lift]
      END
      

      点击并拖动[Lift | Label]以替换[Lift]。结果视觉效果如图 10-36 所示。

      市场篮分析,调整以显示每个单元格至少 10 个订单

    图 10-36. 调整后的市场篮分析,以显示每个单元格至少 10 个订单

    你已完成了市场篮分析,并且仅显示具有足够订单的单元格。现在你有足够的订单来说明纸张和复印机之间的提升非常高!(附注:虽然我们在示例中使用了仅为 10 的阈值,但在实际情况下,您可能希望将其接近 100 甚至 300——没有理由在任何关系上返回假阳性。)

    如果你想在这里完成你的分析,你可以。你可能想为每个单元格添加行和列分隔符。但我们不会停在这里。

  4. 这个图表的一个令人沮丧的地方是标签在顶部!我们希望标签在左侧(右对齐)和底部(顶对齐)。我们该怎么做呢?好吧,我们必须稍微欺骗 Tableau:

    1. 双击行并输入**MIN(0.0)**来创建一个临时计算。这将显著改变我们的图表类型。不要惊慌!首先注意到我们的图表现在每个单元格都有方块;这与我们选择的标记类型 Square 相匹配!接下来,注意我们在[子类别]成员旁边添加了一个轴;参见图 10-37。

      如果你看到这个,请不要惊慌!这是你的图表在第 4a 步之后应该看起来的样子。

      图 10-37. 如果你看到这个,请不要惊慌!这是你的图表在第 4a 步之后应该看起来的样子。
    2. 将标记类型从方块更改为甘特图。通过在 Marks 卡片上输入**MIN(1.0)**创建一个临时计算。然后将此计算添加到大小。这将改变条形的深度。通过将滑块调整到最大尺寸来编辑宽度。

    3. 编辑 MIN(0.0)轴,并将轴的范围设置为 0 到 1;然后隐藏轴。

    4. 点击文本按钮,然后将文本对齐到中心和中间。

    5. 删除所有网格线、轴线和轴标尺。

    6. 添加与背景匹配的行和列分隔符。稍微调整 Marks 卡片上的大小,以匹配行分隔符。

    7. 右对齐[子类别]成员。顶部对齐[子类别(订单 1)]成员。最后,隐藏行和列的标签字段,以获得图 10-38 中显示的视觉效果。

使用样本-超级商店数据集的子类别的我们的市场篮分析

图 10-38. 使用样本-超级商店数据集的子类别的我们的市场篮分析

在这个策略中,您学习了如何将数据建模到自身。这使您能够进行市场篮分析。除了构建矩阵之外,您还能够计算每个子类别的提升。为此,您不能使用表计算,而必须使用 LOD 计算。您还学会了如何通过使用甘特图在可视化的底部放置类似网格的标签。

最终,我们的最终产品是一个非常干净的矩阵,显示了所有类别的提升。通过增加每个单元格之间的间距,我们的观众可以快速追踪他们正在比较的两个子类别,并确定总提升。

策略:构建多维瀑布图

在本章中,我们通过表计算、联合和连接解决了数据建模的问题。通过这些技术,您将能够解决 90%的问题。我们遇到的最后一个独特但一贯的问题是使用多个度量计算最终指标的财务报表。

例如,如果您正在创建损益表,收入减去商品成本就是毛利润。毛利润减去营业费用就是利息和税前利润(EBIT)。如果您考虑指标的流动性质,您几乎可以将它们视为瀑布。许多人也喜欢将这些可视化为瀑布图。瀑布图仅用于会计;它们用于分析从供应链到人力资本的所有内容。

对于这个策略,我们将使用 Sample – Superstore 的修改版本。这个修改后的数据源有几个额外的列,包括 MSRP(制造商建议零售价)、促销成本、制造成本、运输成本和管理成本。与大多数教程不同,在那里您使用单一度量和单一维度创建瀑布图,我们希望您使用多维度来可视化这个瀑布图。

使用多维度会使您的数据处于不理想的状态,不适合 Tableau。理想情况下,您应该通过使用 SQL、Tableau Prep、Alteryx、Python 或 R 等工具将所有测量数据旋转成一组维度和值。但由于数据源的原因,有时候您无法这样做。因此,我们想向您展示如何在使用多维度时创建瀑布图。不过,这种方法也有好消息:即使难以使用,您实际上可以构建更灵活的可视化。通过这种技术,您的瀑布图是完全可定制的:您可以在瀑布的任意点创建总计,将标签放置在特定的柱形图上,或者仅需很少的努力就可以更新标签。

使用多维度的瀑布图

图 10-39. 使用多维度的瀑布图

例如,如果您查看图 10-39,您会注意到,我们不仅为 MSRP 和利润的起始和结束值设置了完整的条形,还为销售总额包含了一个总数。在这个策略中,我们将重新创建这个示例,并为销售地区添加一个过滤器。请记住,我们将进行一些数据建模,因此您需要将您的文本编辑器方便地用于构建自定义数据集。

您需要创建一个占位符数据集的原因是,您的唯一可持续单表解决方案选项将是使用[测量名称]和[测量值]。根据我们目前的限制条件,您将不得不对[测量值]应用表计算。

在我们开始构建解决方案之前,让我们看看图 10-40,看看如果您仅使用[测量名称]和[测量值]且没有额外的计算,您能达到多远。

一个无法使用[测量名称]和[测量值]解决的瀑布图解决方案

图 10-40. 一个无法使用[测量名称]和[测量值]解决的瀑布图解决方案

要创建带有多个措施的瀑布图,您需要创建一个非常简单的辅助数据源:

  1. 查找并连接到样本 - 超级商店 - 修改后的数据源。没什么特别的。

  2. 要构建我们的解决方案,我们将进行数据混合。但是我们并不需要一个特别有趣的数据集用于混合。

    混合 允许您在同一张表上放置来自多个数据源的措施或维度。如果您想要阅读更多信息,建议从 Tableau 关于混合的帮助部分开始。

    对于我们的示例,我们正在处理七个单独的措施。我们需要建立一个新的数据源来支持这些措施。在您的文本编辑器中,输入以下内容:

    Values
    1
    2
    3
    4
    5
    6
    7
    

    然后将文件保存为values.csv。这七个值最终将分配给我们感兴趣的每一个措施。

  3. 创建一个新的数据源连接,并连接到values.csv。您无需将数据源连接在一起。事实上,我们希望它们是两个完全不同的数据源。

  4. 在我们开始构建计算之前,我们只想告诉您,我们将要做一些略显非正统的事情;我们将从我们修改后的超级商店数据中包含措施,并将它们添加到 Values 数据源的计算中。这在 Tableau 早期版本中非常常见,早在 LOD 计算或能够连接多个数据源之前。

    通过这个可视化,我们将创建一个甘特标记类型。在甘特图中,我们需要确定每个甘特条的起始点并指定条的长度。此外,我们将使用一条线连接所有的条。为此,我们需要三个单独的计算。除了专门用于甘特条的计算外,我们还将使用控制图表标签和条形颜色的计算 —— 从技术上讲,这种颜色可以适用于任何图表类型。

    1. 点击 Values 数据源。然后点击并将[Values]拖动到 Marks 卡片的详细信息上。确保[Values]设置为维度而不是聚合。更改标记类型为甘特。

    2. 使用 Values 数据源,而不是 Sample – Superstore — Modified 数据源,创建一个名为**[标签]**的新计算。键入并保存以下内容:

      // Labels
      CASE MIN([Values])
      WHEN 1 THEN "MSRP"
      WHEN 2 THEN "Promo Costs"
      WHEN 3 THEN "Sales"
      WHEN 4 THEN "Manufacturing Cost"
      WHEN 5 THEN "Transportation Cost"
      WHEN 6 THEN "Administrative Cost"
      WHEN 7 THEN "Profit"
      END
      

      因为我们将在数据源上完成混合,关键是我们使用聚合函数,因此在[Values]周围包装了MIN()函数。我们将围绕[Values]维度的每个成员构建一系列计算。

      点击并将[标签]添加到列。右键单击列架上的[标签]并编辑排序。选择手动并调整值以匹配[标签]中显示的顺序。

    3. 使用 Values 数据源,而不是 Sample – Superstore — Modified 数据源,创建一个名为**[起始]**的新计算。键入并保存以下内容:

      // Start
      CASE MIN([Values])
      WHEN 1 THEN 0
      WHEN 2 THEN SUM([Orders (Sample - Superstore - Modified)].[MSRP])
      WHEN 3 THEN 0
      WHEN 4 THEN SUM([Orders (Sample - Superstore - Modified)].[Sales])
      WHEN 5 THEN SUM([Orders (Sample - Superstore - Modified)].[Sales])
        + SUM([Orders (Sample - Superstore -
      Modified)].[Manufacturing cost])
      WHEN 6 THEN SUM([Orders (Sample - Superstore - Modified)].[Sales])
        + SUM([Orders (Sample - Superstore -
      Modified)].[Manufacturing cost]) + SUM([Orders (Sample - Superstore
        - Modified)].[Transportation Costs])
      WHEN 7 THEN 0
      END
      

      您应该注意到的第一件事是,我们有从 Orders(Sample – Superstore – Modified)开始的度量。

      对于[MSRP]、[Sales]和[Profit],这些条只是总值。将这些值设为零。所有其他值都属于瀑布图。

      将此计算添加到行。您可能会收到一个错误提示,询问您应如何混合数据(您不需要担心混合),因为它是在全局级别进行的。此时,您的可视化将类似于图 10-41。

      我们的瀑布图添加 Start 到 Rows 货架后

      图 10-41. 我们的瀑布图添加 Start 到 Rows 货架后
    4. 使用 Values 数据源,创建一个名为**[条形]**的新计算,以确定甘特条的长度。键入并保存以下内容:

      // Bars
      CASE MIN([Values])
      WHEN 1 THEN SUM([Orders (Sample - Superstore
        - Modified)].[MSRP])
      WHEN 2 THEN SUM([Orders (Sample - Superstore
        - Modified)].[Promo Costs])
      WHEN 3 THEN SUM([Orders (Sample - Superstore
        - Modified)].[Sales])
      WHEN 4 THEN SUM([Orders (Sample - Superstore
        - Modified)].[Manufacturing cost])
      WHEN 5 THEN SUM([Orders (Sample - Superstore
        - Modified)].[Transportation Costs])
      WHEN 6 THEN SUM([Orders (Sample - Superstore
        - Modified)].[Admin Costs])
      WHEN 7 THEN SUM([Orders (Sample - Superstore
        - Modified)].[Profit])
      END
      

      将此计算添加到大小。图表将开始正确显示。

      将[条形]添加到 Marks 卡片的标签上。将文本对齐到中心和中间。

    5. 再次使用 Values 数据源,创建一个名为**[颜色]**的新计算。键入并保存以下内容:

      // Color
      CASE MIN([Values])
      WHEN 1 THEN SIGN(SUM([Orders (Sample - Superstore
        - Modified)].[MSRP]))
      WHEN 2 THEN SIGN(SUM([Orders (Sample - Superstore
        - Modified)].[Promo Costs]))
      WHEN 3 THEN SIGN(SUM([Orders (Sample - Superstore
        - Modified)].[Sales]))
      WHEN 4 THEN SIGN(SUM([Orders (Sample - Superstore
        - Modified)].[Manufacturing cost]))
      WHEN 5 THEN SIGN(SUM([Orders (Sample - Superstore
        - Modified)].[Transportation Costs]))
      WHEN 6 THEN SIGN(SUM([Orders (Sample - Superstore
        - Modified)].[Admin Costs]))
      WHEN 7 THEN SIGN(SUM([Orders (Sample - Superstore
        - Modified)].[Profit]))
      END
      

      使用颜色,我们将使用符号计算。如果值为正,返回 1;如果为负,返回–1;如果为 0,则返回 0。在我们的混合计算中,我们需要对每个值执行此操作,但结果将是一致的。

      将[颜色]添加到 Marks 卡片的颜色上。现在您的可视化看起来像图 10-42。

      我们的瀑布图添加条长度和标签后

      图 10-42. 在添加条长度和标签后的瀑布图表

      我们快要完成了:我们只需要添加一条线来帮助眼睛协调所有的值。

    6. 最后一次,使用值数据源,创建一个名为**[Line]**的新计算。输入并保存以下内容:

      // Line
      CASE MIN([Values])
      WHEN 1 THEN SUM([Orders (Sample - Superstore - Modified)].[MSRP])
      WHEN 2 THEN SUM([Orders (Sample - Superstore - Modified)].[MSRP])
        + SUM([Orders (Sample - Superstore -
      Modified)].[Promo Costs])
      WHEN 3 THEN SUM([Orders (Sample - Superstore - Modified)].[Sales])
      WHEN 4 THEN SUM([Orders (Sample - Superstore - Modified)].[Sales])
        + SUM([Orders (Sample - Superstore -
      Modified)].[Manufacturing cost])
      WHEN 5 THEN SUM([Orders (Sample - Superstore - Modified)].[Sales])
        + SUM([Orders (Sample - Superstore -
      Modified)].[Manufacturing cost]) + SUM([Orders (Sample - Superstore
        - Modified)].[Transportation Costs])
      WHEN 6 THEN SUM([Orders (Sample - Superstore - Modified)].[Sales])
        + SUM([Orders (Sample - Superstore -
      Modified)].[Manufacturing cost]) + SUM([Orders (Sample - Superstore
        - Modified)].[Transportation Costs])
      + SUM([Orders (Sample - Superstore - Modified)].[Admin Costs])
      WHEN 7 THEN SUM([Orders (Sample - Superstore - Modified)].[Profit])
      END
      

      您将使用这个计算来帮助您的观众跟踪瀑布图中的值。将此度量添加到起始柱的左侧。从这个[Lines] Marks 卡中移除[Color]和[Bars]。将大小更改为最大值的四分之一。点击路径并将标记类型更改为 Jump。

      右键单击起始轴并创建一个同步的双轴图表。这将使您到达图 10-43,但还有几个步骤要走。

      在添加一条线帮助您的观众跟踪其值后的瀑布图表

      图 10-43. 在添加一条线帮助您的观众跟踪其值后的瀑布图表
    7. 基本上就完成了。但清理细节可能是有道理的:

      • 隐藏右侧的起始轴。

      • 删除[Lines]轴标签。

      • 将行和列的分隔线设置为无。

      • 将零线设置为无。

      • 将列轴标尺和轴刻度设置为非常深灰色。

      • 隐藏行的字段标签。

      格式化的结果,显示在图 10-44 中,是一个光辉的瀑布图表,看起来好像来自单一的数据源。

我们的瀑布图表

图 10-44. 我们的瀑布图表

虽然这个可视化看起来很棒,您可能想知道我们是否可以过滤这个可视化。答案是肯定的。有两种解决方案可供考虑。我们可以使用标准过滤器,或者可以使用参数构建过滤器。

让我们来看看标准过滤器。转到 Orders(Sample – Superstore – Modified)数据集。点击并将[Region]拖动到过滤器中。选择 Central 然后显示过滤器。您将注意到在图 10-45 中显示了标准的四个区域,但还有一个 Null 值。由于我们的混合,这个 Null 值出现了。如果您的观众能处理 Null 选项,那么您的可视化就完成了!

我们带有区域过滤器的瀑布图表

图 10-45. 我们带有区域过滤器的瀑布图表

但是,如果您的观众不满意显示空值,我们可以使用参数作为过滤器。右键单击[Region],选择创建 → 参数。命名参数为**[Region Parameter]**。在参数列表中添加一个名为 All 的额外选项,并将 All 成员放置在参数列表的第一个位置,如图 10-46 所示。

在设置我们的[Region Parameter]时,它应该看起来像。

图 10-46. 在设置我们的[Region Parameter]时,它应该看起来像。

创建一个名为**[Region | TF]**的新计算:

CASE [Region Parameter]
WHEN "All" THEN TRUE
ELSE [Region] = [Region Parameter]
END

添加[Region | TF]到过滤器并选择 True。然后显示[Region Parameter]。

恭喜您——您现在拥有了由参数驱动的过滤器,不包括空标签。

在这个策略中,您学会了如何使用简单的混合技术创建使用多个度量值的可视化。这种混合技术非常简单,但要求您使用一种不常用的方法。在我们的下一个策略中,我们将向您展示通过地图可能的新技巧。

策略:使用地图图层的分层标记但不制作地图

在 Tableau 2020.4 中,Tableau 引入了地图图层。使用地图图层有一些限制:例如,纬度的值需在–180 和 180 之间。但是,地图图层解锁了在同一工作表上分层超过两种标记类型的能力。

在这个策略中,我们将向您展示如何使用地图图层创建多层次可视化,如图 10-47 所示。这种可视化将涵盖您在本书中学到的许多概念。您将创建一个按子类别分组的小多个销售。您将使用文本图层提供摘要信息。您将使用区域图可视化去年销售,使用线条和两个圆形图层可视化今年销售。您将使用自定义形状创建坐标轴和标签。

从 Tableau 2020.4 中使用地图图层的小多个区域和线条图

图 10-47. 从 Tableau 2020.4 中使用地图图层的小多个区域和线条图

对于这种策略,您将首先构建一系列计算,然后从顶层向底层构建可视化。我们的许多计算将会重复,因为我们将为当前年销售和去年销售计算版本:

  1. 按以下方式构建您的计算:

    1. 创建一个名为**[Sales | CY]**的计算,用于计算今年销售额:

      // Sales | CY
      IF YEAR([Order Date]) = {MAX(YEAR([Order Date]))}
      THEN [Sales]
      ELSE 0
      END
      
    2. 创建一个名为**[Sales | PY]**的计算,用于计算去年销售额:

      // Sales | PY
      IF YEAR([Order Date]) = {MAX(YEAR([Order Date])) - 1}
      THEN [Sales]
      ELSE 0
      END
      
    3. 创建一个名为**[Sales | Delta]**的计算,用于计算销售额的年度同比变化百分比。您将将其用作文本,提供上下文信息:

      // Sales | Delta
      (SUM([Sales | CY]) - SUM([Sales | PY])) / SUM([Sales | PY])
      

      将默认格式更改为百分比,且没有小数。当值为正时,箭头指向上。当值为负时,箭头指向下。

    4. 创建一个 LOD 计算称为**[Sales | CY | Sub Mo]**,用于按子类别和月份计算今年销售额:

      // Sales | CY | Sub Mo
      {
          FIXED [Sub-Category], MONTH([Order Date]):
          SUM([Sales | CY])
      }
      
    5. 创建一个 LOD 计算称为**[Sales | CY | Sub Mo]**,用于按子类别和月份计算去年销售:

      // Sales | PY | Sub Mo
      {
          FIXED [Sub-Category], MONTH([Order Date]):
          SUM([Sales | PY])
      }
      
    6. 因为销售值可能大于 180,因此不会在我们的“地图”上显示,我们需要对数值进行归一化处理。创建一个名为**[Sales | CY | Sub Mo | Norm]**的计算:

      // Sales | CY | Sub Mo | Norm
      [Sales | CY | Sub Mo]/
      {FIXED [Sub-Category] : MAX(MAX([Sales | CY | Sub Mo]),
        MAX([Sales | PY | Sub Mo]))}
      
    7. 对于去年销售,完成相同的归一化处理。创建一个名为**[Sales | PY | Sub Mo | Norm]**的计算:

      // Sales | PY | Sub Mo | Norm
      [Sales | PY | Sub Mo]/
      {FIXED [Sub-Category] : MAX(MAX([Sales | CY | Sub Mo]),
        MAX([Sales | PY | Sub Mo]))}
      
    8. 你将按子类别和月份绘制值。为了在地图上绘制这个图表,我们需要使用一个叫做 MAKEPOINT() 的函数。这个工作函数将任何值绘制到地图上。你需要在这个函数下指定两个值。通过创建一个名为 **[Sales | CY | MP]** 的新计算字段来创建地图层:

      // Sales | CY | MP
      MAKEPOINT(
              [Sales | CY | Sub Mo | Norm],
              MONTH([Order Date])
      )
      
    9. 通过创建一个名为 **[Sales | PY | MP]** 的新计算字段来复制前一年的值。

      // Sales | PY | MP
      MAKEPOINT(
              [Sales | PY | Sub Mo | Norm],
              MONTH([Order Date])
      )
      
    10. 为小多个计算标签的占位符。MAKEPOINT() 计算可以使用数据源中的值编码,或者你可以硬编码数据。你需要在 1.1(略高于图表之上)和 6.5(6 月和 7 月之间)处硬编码头部。创建一个名为 **[Sub-Category | MP]** 的计算字段:

      // Sub-Category | MP
      MAKEPOINT(1.1, 6.5)
      
    11. 为轴标签创建占位符。你可以在 MAKEPOINT() 函数中混合值。指定 -0.05 以便值显示在轴线下方。你还会交替标签,以便它们每隔一个月显示一次:

      // Month | MP
      MAKEPOINT(
              -.05,
              IF MONTH([Order Date]) % 2 = 0 THEN MONTH([Order Date]) END
      )
      
    12. 要匹配轴点,你需要标签,可以通过以下计算创建:

      // Month Labels
      LEFT(DATENAME('month', [Order Date]),1)
      
    13. 对于我们的最后两个计算,我们需要为小多个指定网格。你在 Chapter 4 中看到了这些计算:

      // Cols
      (INDEX() - 1) % 4
      // Rows
      ((INDEX() - 1) - [Cols])/4
      

      经过 14 次计算,我们准备好构建这个可视化图表了!

  2. 按照以下方式构建我们的基础(以及我们的汇总标签);许多计算将会重复,因为我们将计算当前年销售和前一年销售的版本:

    1. [Sub-Category] 维度有 17 个成员。在这个可视化中,你只需要 16 个。将 [Sub-Category] 拖放到筛选架上,并排除复印机。由于策略中不想解决的一些缺失数据,你需要过滤复印机。

    2. 要添加第一个地图层,请将 [Sub-Category | MP] 拖放到标记卡的详细信息中。如果目前一切顺利,你会看到一个蓝点,位于圣多美和普林西比岛的北部。别担心,完成后这不会显示在你的“地图”上。

      将标记类型从自动更改为文本。

    3. 要添加标签,请在文本中添加 [Sub-Category]、[Sales | CY] 的总和、[Sales | PY] 的总和和 [Sales | Delta]。然后按以下格式排列:在第一行放置 [Sub-Category],字体大小为 15,字体颜色默认。在第二行,放置 [Sales | CY] 的总和,字体大小为 11,字体颜色默认。在第三行,放置 [Sales | Delta] 和 [Sales | PY] 的总和,并在两个度量值之间输入 **from**(两侧有空格),如图 Figure 10-48 所示。

      子类别标签的文本格式化

      图 10-48. 子类别标签的文本格式化

      当你在文本编辑器中点击确认后,你会立即注意到一堆重叠的文本。

    4. 现在,您将开始构建网格。在Columns shelf[Longitude (generated)]的右侧双击,并键入**[Cols]**计算。按 Enter 键。将[Cols]计算从连续更改为离散。

      编辑[Cols]表格计算。选择特定维度子类别。然后按销售总和降序创建自定义排序顺序。

    5. 为了通过双击[Rows]Rows shelf上重复相同的过程,请编辑表格计算并编辑行的两个嵌套表格计算,使用特定维度,选择子类别,然后按销售总和降序排序。请记住,你需要对行计算中的两个表格计算都执行此操作。

      结果如 Figure 10-49 所示,是地图上标签的网格。

      在 Rows shelf 上添加并格式化[Rows]计算后的小倍数进展

      Figure 10-49. 在 Rows shelf 上添加并格式化[Rows]计算后的小倍数进展

      现在让我们展示一些神奇的东西。我们最终的可视化实际上不会是地图(尽管它在地图上)。您可以通过从顶部菜单选择地图背景地图 来关闭地图,显示标准图表!

    6. 编辑[Latitude (generated)]轴并设置范围从–.5 到 1.5。编辑[Longitude (generated)]轴并设置范围从–1 到 14。现在,Figure 10-50 显示了我们可视化的潜力。

      在关闭地图图层并编辑轴之后显示的小倍数进展

      Figure 10-50. 在关闭地图图层并编辑轴之后您的小倍数

      您已完成第一层,但现在是时候添加第二层了。这里的问题是:你不能在看不到地图视图的情况下添加额外的图层。这意味着我们需要重新打开地图图层。从顶部菜单选择地图背景地图

  3. 为当前年份的蓝色点添加一个图层:

    1. 在您重新打开地图图层后,单击并将[Sales | CY | MP]计算拖放到地图可视化中。在此过程中,将会出现添加标记层的选项。将您的字段放在标注上。这将向您的可视化添加另一地图层。默认情况下,您添加的任何图层都会添加到可视化顶部。您可以通过查看Marks cards来查看这一点,并看到新字段位于您的[Sub-Category | MP]层上方,如 Figure 10-51 所示。

      在添加第一层后我们的 Marks 卡片

      Figure 10-51. 在添加我们的第一层后我们的 Marks 卡片

      您可以通过单击标题并将值拖动到[Sub-Category | MP]层下方轻松更改图层。您还可以通过单击下拉菜单,选择重命名,并键入**Blue Circles**来重命名图层为Blue Circles

      将标记类型从自动更改为圆圈。

    2. 将[子类别]添加到 Blue Circles 层的详细信息中。双击[Blue Circles]标记卡创建一个临时计算,并键入**MONTH([订购日期])**

    3. 编辑点的大小,使其大约为最大值的 20%。图 10-52 显示了此时的可视化效果。

      我们第 3 步之后的可视化

    图 10-52. 我们第 3 步之后的可视化
  4. 要在蓝色圆圈后面添加白色圆圈,通常需要按照步骤 3 创建圆圈的相同步骤。这一层将使蓝色点和灰色线条看起来不接触:

    1. 点击并拖动您的[Sales | CY | MP]计算到地图可视化中。将该层移动到底部。将该层的名称更改为**White Circles**

    2. 将[子类别]和 MONTH([订购日期])添加到详细信息中。

    3. 将标记类型更改为圆圈。将圆圈的大小更改为最大值的约 25%。这应该是左侧标记的位置。将标记的颜色更改为白色,并设置不透明度为 85%。

  5. 添加连接点的线条;这些步骤看起来与步骤 3 和 4 非常相似,但有一些小的变化:

    1. 最后一次,点击并拖动[Sales | CY | MP]添加一个标记层。将该层移动到底部并更改名称为**Gray Lines**

    2. 将[子类别]和 MONTH([订购日期])添加到详细信息中。

    3. 将标记类型更改为线条。将线条的大小更改为最大值的约 10%。将标记的颜色更改为中灰色,并设置不透明度为 85%。

      将两个点和一条线图层叠在一起,形成一个单一的、连贯的线图效果,如图 10-53 所示。但是,正如你所知道的,它并不是。让我们通过一个区域图表为这条线图增加一些上下文。

    第 5 步之后的可视化—请注意,线条和点看起来像一个单一组件

    图 10-53. 第 5 步之后的您的可视化—请注意,线条和点看起来像一个单一组件
  6. 当我们创建图表时,我们喜欢展示尽可能多的上下文。可以通过添加一个显示去年销售额的层来实现:

    1. 这次,通过点击并拖动[Sales | PY | MP]并添加一个标记层,引入前一年的销售额。将该层移动到底部并更改名称为**PY Area Chart**

    2. 像一张损坏的唱片,将[子类别]和 MONTH([订购日期])添加到详细信息中。

    3. 将标记类型更改为区域。将颜色更改为浅灰色。

  7. 对于我们的最后一层,我们将创建一个看起来像定制轴的图层:

    1. 找到[Month | MP]并添加一个新的层。将该层移动到底部并更改名称为**Axis**

    2. 将[子类别]和 MONTH(Order Date)添加到详细信息中。将我们的自定义计算,[Months Label],添加到层上的文本中。

      将标记类型更改为形状。编辑形状,并在“细箭头”文件夹中选择指向上的箭头。将文本标签格式化为显示在底部中心。您现在已完成构建部分;Figure 10-54 显示了结果可视化。

    完成构建后的您的可视化

    图 10-54. 完成构建后的您的可视化
  8. 要完成可视化,从顶部菜单中选择地图 → 背景地图 → 无。

  9. 格式化可视化如下:

    • 隐藏所有标题。

    • 关闭网格线。

    • 删除列上的零线。

    • 将行上的零线设置为黑色实线。

    • 将行和列分隔线更改为最粗的白色线。

  10. 禁用选择并格式化工具提示:

    1. 使用地图图层,您可以通过单击每个图层标题栏上的下拉菜单并选择禁用选择 (Figure 10-55) 来禁用可视化中任何值的选择。禁用所有图层的选择。

    2. 对于每个图层,您可以控制工具提示。我们建议关闭子类别 | MP 和轴图层的工具提示。对于蓝色圆圈、白色圆圈、灰线和 PY 区域图表图层,建议显示月份名称及其相关值。

      在格式化工具提示后,您的可视化应与 Figure 10-56 中的相匹配。

禁用地图图层上的选择

图 10-55. 禁用地图图层上的选择

此策略的可视化结果

图 10-56. 此策略的可视化结果

在这种策略中,您学会了如何通过使用地图图层构建可视化。您可以使用 MAKEPOINT() 在地图上指定值。您还学到,可以使用相同数据构建图层来构建自定义组件,例如带有点的折线图。您还了解到,使用地图图层可以在无需进行复杂数据建模的情况下使用多种标记类型。

结论

正如其标题所示,本章主要讨论了重塑数据以创建新颖可视化的方法。通过数据建模,您不一定要创建数据的聚合,而是在数据中填充数据。这种填充可以通过多种方式进行:通过表计算、连接或与同一数据源的混合。您还了解了在何种情况下可能希望将数据集连接到自身。最后,我们看了地图图层如何将可视化推向新的高度。

我们所有的示例仅仅触及到了每种数据建模类型的表面。每种数据建模类型都有更多可能性。我们并不打算展示每一种类型,而是为您提供了围绕数据建模概念的重要介绍。如果您能理解如何对数据进行建模,就能构建任何高级图表类型。

在下一章中,我们将借鉴这里和前几章节展示的一些概念,开始使用它们来构建一系列可视化,这些可视化组合在一起构建了交互式视觉系统。我们暂时不称其为仪表板甚至数据产品,因为我们将专注于用于仪表板构建的组件,而不一定是仪表板本身。

进一步阅读

第十一章:高级交互

截至目前为止,在本书中,我们已经讨论了使用动作来构建动态可视化(第九章)以及使用数据建模来扩展我们的视觉宇宙(第十章)。动态可视化是我们的受众所期待的。当他们点击一个数值时,他们期望可视化有所反应。

然而,很多时候,我们并没有设计我们的可视化来响应这些动作。作为开发者,我们可以预见我们受众的行为并围绕他们的直觉进行设计。我们可以使用简单数据源的数据建模,以及交互来构建视觉系统。这些系统将看起来像按钮、动态图例甚至是表头。

在本章中,我们将通过向您展示如何构建增强受众使用数据方式的视觉系统,将 Tableau 带入另一个层次。本章不涉及特定行业用例,而是向您展示如何通过结合第九章和第十章的原则来构建高级交互类型。

使用参数和参数动作进行表格切换:超级商店案例研究

你再次与办公用品公司合作。你的最终用户希望能够看到三种图表类型:描述销售情况的一种,描述时间内利润率的一种,以及按产品类别显示利润的另一种。你的用户希望一次只看到一个图表。你决定使用参数和表格切换来解决这个问题。

在第九章的第一个策略中,你学会了如何使用参数来更新指标。你也可以使用同一个参数来改变显示的表格,通过在过滤器中使用参数。图 11-1 展示了使用列表参数显示三种图表类型中的一种的示例。

使用参数进行表格切换。从左上角顺时针:从参数激活的销售表,从参数激活的利润表,参数中的选项,从参数激活的利润比例表

图 11-1. 使用参数进行表格切换。从左上角顺时针:从参数激活的销售表,从参数激活的利润表,参数中的选项,从参数激活的利润比例表

除了使用下拉选项更新参数(如第九章中讨论的),你还可以在表上使用参数动作来驱动仪表板的变化。图 11-2 展示了这个选项。

从图 11-1 中的销售和利润表,但使用按钮执行表格切换

图 11-2. 销售和利润表,来自图 11-1,但使用按钮执行表格交换

如果仪表板空间紧张但仍想以某种方式容纳所有表格,则强烈建议使用表格交换,并使用指标按钮进行操作。

在前三个策略中,您将学习如何创建示例中显示的图 11-2。每个策略将使用“Sample – Superstore”数据集。对于第二个策略,您还需要一个文本编辑器来构建自定义数据集。

策略:使用基于参数的表格交换

在此策略中,您将使用参数创建一个表格交换。您将在后续策略中扩展输出:

  1. 要构建表格交换的三个可视化效果,请连接到“Sample – Superstore”数据集,然后按照以下步骤操作:

    1. 要构建销售可视化(图 11-3),请将[Sales]的总和添加到行架上。在列架上添加[Order Date]的离散年份。将标记类型更改为条形图。通过将行轴尺规设置为无和列轴尺及刻度设置为黑色来格式化表格。

      用于表格交换的销售表

      图 11-3. 用于表格交换的销售表
    2. 要构建利润可视化(图 11-4),创建一个新表。将[Profit]的总和添加到行架上。在列架上添加[Order Date]的离散年份。将标记类型更改为面积图。通过将行轴尺规设置为无和列轴尺及刻度设置为黑色来格式化表格。

      用于表格交换的利润表

      图 11-4. 用于表格交换的利润表
    3. 要构建利润比例可视化(图 11-5),创建另一个新表。将[Profit Ratio]添加到列架上。如果没有此计算,可以创建它:

      // Profit Ratio
      SUM([Profit])/SUM([Sales])
      

      将[Category]添加到行架上。将标记类型更改为条形图。通过将列轴尺规设置为无和行轴尺及刻度设置为黑色来格式化表格。

      用于表格交换的利润比例可视化

    图 11-5. 用于表格交换的利润比例可视化
  2. 创建一个名为**[Names Parameter]**的字符串参数。创建一个包含三个值的列表:Sales,Profit 和 Profit Ratio,如图 11-6 所示。这些值与您刚创建的三个表格相对应。

    用于表格交换的名称参数

    图 11-6. 用于表格交换的名称参数
  3. 将表格和参数放置在仪表板上:

    1. 如果尚未创建仪表板,请创建一个新的仪表板。

    2. 在仪表板上,添加一个垂直容器。

    3. 将名称参数添加到垂直容器中(分析 → 参数 → 名称参数)并隐藏标题。

    4. 在垂直容器内,在名称参数下方添加一个水平容器。

    5. 在水平容器内添加销售、利润和利润率表格。

    6. 隐藏所有表格的标题。如果不这样做,所有的标题将显示出来,技术将无法正常工作。

    不要调整表格的尺寸,因为这会固定任何一张表格的宽度,破坏我们的表格切换。同时,不要均匀分布这些表格在容器中。结果将类似于图 11-7。

    在我们的仪表板中,在添加任何筛选器之前,注意到所有的可视化都是活动的

    图 11-7. 在我们的仪表板中,在添加任何筛选器之前进行的表格切换,注意所有的可视化都是活动的。
  4. 为每个表格创建筛选计算,如下所示:

    1. 要创建销售参数筛选器,请创建一个名为**[名称参数 | 销售]**的计算,并键入以下内容:

      // Names Parameter | Sales
      [Names Parameter] = "Sales"
      

      转到销售表。将参数设置为销售。将[名称参数 | 销售]计算添加到筛选架,并将筛选器设置为 True。

    2. 要创建利润参数筛选器,请创建一个名为**[名称参数 | 利润]**的计算,并键入以下内容:

      // Names Parameter | Profit
      [Names Parameter] = "Profit"
      

      转到利润表。将参数设置为利润。将[名称参数 | 利润]计算添加到筛选架,并将筛选器设置为 True。

    3. 要创建利润率参数筛选器,请创建一个名为**[名称参数 | 利润率]**的计算,并键入以下内容:

      // Names Parameter | Profit Ratio
      [Names Parameter] = "Profit Ratio"
      

      转到利润率表。将参数设置为利润率。将[名称参数 | 利润率]计算添加到筛选架,并将筛选器设置为 True。

    当返回到你的仪表板时,你会注意到你的仪表板现在只显示单个表格 —— 由你的参数选择的表格(图 11-8)。

由于参数设置为销售,销售可视化正在表格切换上显示

图 11-8. 由于参数设置为销售,销售可视化正在表格切换上显示。

在这个策略中,你学会了如何通过使用参数来进行表格切换。表格切换允许你通过隐藏当前不相关的表格与多个可视化进行交互。尽管这很好,但是我们的观众每次想要切换表格时都需要点击两次。而在一个重视速度和互动性的世界中,将其变成一次点击交互可能更好。

策略:使用参数动作表格切换

你将创建一个补充数据源,并使用它来驱动参数动作。然后,使用此数据源创建一个看起来像按钮的表格;这些显示在图 11-2 中。格式设置以及参数动作将使可视化感觉非常互动:

  1. 打开你的文本编辑器并创建一个新的数据源:

    Values
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    

    使用与第十章中数据建模相同的技术,创建一个具有 10 个数据点的单列称为 Values。技术上,您只需要三个点,但我们喜欢添加更多,以防将来需要更多更新——更好地未来保护。将此文件保存为values.csv

  2. 连接到您刚创建的新数据源values.csv

  3. 构建此可视化所需的三个计算:

    1. 使用 Values 数据源,创建一个名为**[Names]**的计算。这将把整数转换为名称:

      // Names
      CASE [Values]
      WHEN 1 THEN "Sales"
      WHEN 2 THEN "Profit"
      WHEN 3 THEN "Profit Ratio"
      END
      

      此计算将驱动所有我们的参数更新。

    2. 创建一个名为**[Active Name]**的计算。此计算将返回一个经过格式化的突出显示名称:

      // Active Name
      IF [Names] = [Names Parameter]
      THEN [Names]
      END
      
    3. 创建一个名为**[Inactive Names]**的计算。此计算将返回未被参数名称选中的名称。您还需要格式化此值:

      // Inactive Names
      IF [Names] != [Names Parameter]
      THEN [Names]
      END
      
  4. 按以下方式构建可视化:

    1. 创建一个名为**Name Swap**的新表。

    2. 将标记类型更改为文本。

    3. 将[Inactive Names]和[Active Name]添加到文本中。

    4. 将[Values]添加为 Marks 卡片上[Inactive Names]和[Active Name]上方的一个维度。

    5. 将[Names]添加到 Marks 卡片上[Active Name]和[Inactive Names]下方。

    6. 编辑文本。将[Inactive Name]和[Active Name]放在同一行上。将[Inactive Names]度量值更改为浅灰色。将[Active Name]度量值字体更改为 Tableau Semibold。在文本后面,添加两个下划线值(__),并将下划线颜色设为与可视化背景相匹配的白色。请参见图 11-9 以获取视觉样式。

    7. 关闭工具提示。

      格式化名称交换表上的文本

      图 11-9。格式化名称交换表上的文本
    8. 将[Values]添加为 Filters 的一个维度,并将范围设置为 1 到 3。

      如果将[Names]参数更改为 Profit,结果是图 11-10。通常情况下,文本标记会非常靠近彼此,但我们使用了两个下划线来在文本之间添加间距。

      在添加格式化后的名称交换表

    图 11-10。在添加格式化后的名称交换表
  5. 使用我们在第一个策略中创建的仪表板,在名称参数上方的垂直容器中添加名称交换表。隐藏表的标题,然后从仪表板中删除 Names 参数。调整表的高度以便所有值都清晰可读——大约是 60 像素高。

  6. 通过选择仪表板 → 操作,然后选择新操作 → 更改参数来添加新的参数操作。将参数命名为**Names Update**。在仪表板上,当您的观众点击名称交换表上的名称时,使用名称维度更新 Names 参数。当他们取消选择时,保留当前值。有关设置的详细信息,请参见图 11-11。

    图 11-12 显示了最终结果。

Names Parameter 的参数操作

图 11-11. Names Parameter 的参数操作

我们的参数操作表格交换的最终结果

图 11-12. 我们的参数操作表格交换的最终结果

在这个策略中,你学会了如何创建一个格式良好的工作表,看起来和感觉像一个参数,但—多亏了参数操作—也像一个参数一样工作。

策略:自动取消选择标记

最终结果是根据选择的值更新的表格交换。但是还有一个令人讨厌的挑战:每次选择一个值时,这些值会变成蓝色高亮显示。如果你的表格能自动关闭这个选择,那将会很好。通过在跨仪表板和工作表上使用筛选器操作,这可以通过一些 Tableau 的技巧来完成。

这个技巧是我们经常使用的东西。每当我们创建仪表板时,我们都使用这个技巧,因为它使我们的仪表板看起来更像应用程序,而不是商业智能仪表板:

  1. 你需要在values.csv数据源中创建两个计算:

    1. 创建一个名为**[TRUE]**的计算,其值等于真布尔值:

      // TRUE
      TRUE
      
    2. 创建一个名为**[FALSE]**的计算,其值等于假布尔值:

      // FALSE
      FALSE
      

    对于这个策略,我们将使用你在“策略:使用参数-操作表格交换”中创建的名称交换表。将[TRUE]和[FALSE]计算添加到标记卡的详细信息中。

  2. 转到包含你用于表格交换操作的名称交换表的仪表板。选择仪表板 → 操作。在对话框中,点击添加操作 → 筛选器。

    将你的筛选操作命名为**Names Reset**。从你的仪表板中选择名称交换表。在我们的示例中,显示在图 11-13 中,我们的仪表板称为仪表板操作。将“运行操作”设置为选择。

    从这里开始,你需要将目标表格从仪表板更改为表格本身。这是一个关键步骤。如果你在仪表板上运行操作,操作将不起作用。设置你的筛选器以在清除选择时显示所有值。

    在最后的“目标筛选器”部分,选择添加筛选器,然后将源字段设置为 TRUE,目标字段设置为 FALSE。点击确定,然后在操作菜单上也点击确定。

来自名称交换表格的仪表板上的筛选操作到名称交换表格本身

图 11-13. 名称交换表在来自名称交换表本身的仪表板上的筛选操作

最终结果是通过按钮驱动的表格交换。但是在按下按钮后,表格不再突出显示;参见图 11-14。

不带筛选操作来取消选择标记的参数操作(左)和带有筛选操作来自动取消选择标记的参数操作(右)

图 11-14。没有筛选动作取消标记的参数动作(左)和自动取消标记的参数动作(右)

使用参数和参数动作创建多选参数:Superstore 案例研究

当我们使用参数和参数动作时,我们首先会认为它们只能用于从列表中选择一个值。但是参数也可以用作存储信息的输入。我们可以通过将参数与视图上的维度写回到同一个参数来实现这一点。

再次,您的观众希望看到更多的图表——这一次是按州的销售业绩分析。他们还希望您允许按段落进行分析。通常情况下,您可以使用多选过滤器,但他们表示希望有更多的交互性。在这个策略中,您将学习如何使用参数作为输入工具。

例如,考虑右侧的可视化效果在图 11-14 中。可视化效果包含[Category]作为一个维度。想象我们有一个值包含 Furniture 的参数,我们可以更新它,但我们希望更新后的值变成 Furniture, Office Supplies 或 Furniture, Technology。我们可以通过创建一个包含该类别参数的计算来实现。这个计算可能会是这样的:

// Hypothetical Calculation
[Parameter] + ", " + [Category]

我们可以利用这种假设性的计算反馈到同一个参数中去。这个过程可以在不丢失参数现有信息的情况下,向参数中添加信息。

Tableau 名人堂禅宗大师 Jonathan Drummey 在一篇详细的文章中详细介绍了这个过程,该文章链接在“Further Reading”中。

为什么需要多选参数?嗯,参数只允许单一输入,并且这些输入的格式非常固定。对于参数,您可以选择下拉菜单、开放字段、滑块或单选按钮选择器,如图 11-15 所示。但有时您需要更多。有时您的观众需要定制。

Tableau Desktop 中现有的参数显示选项

图 11-15。Tableau Desktop 中现有的参数显示选项

策略:创建一个多选参数

在这个策略中,你的任务是创建一个允许多选的参数。在可视化效果中,你将有可用的开关值,这些开关将过滤你创建的另一个表格。虽然这是参数作为数据源的一个用例,但还有很多很多用例,我们在“Further Reading”中提供链接。

对于这个策略,您将使用 Sample – Superstore 数据集。想象一下,您是一个负责南部地区的分析师,任务是为销售代表团队提供动态表格,审查第一季度销售情况。不幸的是,这些销售代表对技术不是很精通,使用下拉菜单有困难。他们希望有一个快速的方法来切换多个值的开关。您的解决方案如图 11-16 所示。

自动取消选择标记策略的最终解决方案

图 11-16. 自动取消选择标记策略的最终解决方案

要构建此解决方案,您需要按照以下步骤进行操作:

  1. 构建一个基础可视化(图 11-17)如下:

    1. 将[State]添加到行架上。

    2. 将[测量名称]添加到列中。

    3. 将[测量值]添加到过滤器中。选择[销售]总和,[利润]总和和[利润率]。

    4. 将标记类型更改为正方形。

    5. 将[测量值]添加到文本和颜色中。

    6. 右键单击用于颜色的[测量值]并选择使用单独的图例。

    7. 使用“策略:使用基于参数的表交换”中描述的过程将[销售]和[利润]的颜色设置为白色。

    8. 将[利润率]的颜色设置为金绿色。

    9. 为南部地区添加一个过滤器。

    10. 将[Order Date]添加到过滤器中,更改为季度作为日期部分,并过滤为 Q1。

    11. 按[Profit Ratio]对[State]进行降序排序。

      在添加任何基于参数的过滤器之前的基础可视化

    图 11-17. 在添加任何基于参数的过滤器之前的基础可视化
  2. 创建一个字符串参数,但称为**[MultiParam]**。删除“当前值”文本框中的任何值,并允许来自我们数据源的所有值(图 11-18)。通过保持参数为空,我们目前不会选择任何值。

    空的多选参数

    图 11-18. 空的多选参数
  3. 对于此示例,您将使用[Segment]维度来驱动参数操作。但是为了这样做,您需要构建一个可视化,如图 11-19 所示。首先创建一个名为**选择段**的新表。

    1. 将[Segment]添加到行架上。

    2. 双击列架并输入**MIN(0.0)**。再次双击并创建另一个 MIN(0.0)的临时计算。

    3. 将左侧 MIN(0.0) Marks 卡片上的标记类型更改为自定义形状。将自定义形状更改为开放圆圈。

    4. 将右侧 MIN(0.0) Marks 卡片上的标记类型更改为圆形。将不透明度更改为 40%。这将为图 11-19 中显示的开放气泡效果添加[Segment]维度到标记卡的标签。

      用于驱动参数更新的表格。在此示例中,Consumer 和 Corporate 段是活跃的。

      图 11-19. 用于驱动参数更新的工作表。在此示例中,Consumer 和 Corporate 分段处于活动状态。
    5. 创建一个同步的双轴。编辑轴以从–1 到 10 的范围。然后隐藏轴线。

    6. 从颜色中移除[Measure Names]。隐藏[Segment]的标题。将行和列的分隔符设置为无。将零线、网格线和轴标尺设置为无。可能需要调整形状的大小。最后,关闭工具提示。

      图 11-20 展示了到目前为止的进展。

      第 3 步后的选择分段表

    图 11-20. 第 3 步后的选择分段表
  4. 创建如下计算,用于识别成员是否在参数中:

    1. 创建名为**[On/Off]**的计算。这个计算是一个布尔值,使用CONTAINS()函数查找[MultiParam] 参数中的[Segment] 成员——目前该参数为空!

      // On/Off
      CONTAINS([MultiParam], [Segment] + ", ")
      
    2. 将此计算添加到两个标记卡的颜色中。

    3. 展示[MultiParam]参数,并输入**Consumer,**(逗号后带有一个空格)。这将激活 Consumer 并更改颜色。然后添加到参数中**Corporate,**(逗号后也有一个空格)。这将激活 Consumer 和 Corporate。

    4. 编辑颜色,将 True 值设置为绿色,将 False 值设置为暖灰色。

  5. 创建**[Param Action]**计算,用于驱动选择/取消选择操作。我们将此计算应用于参数操作:

    // Param Action
    IF CONTAINS([MultiParam], [Segment] + ", ")
    THEN REPLACE([MultiParam], [Segment] + ", ", "")
    ELSE [MultiParam] + [Segment] + ", "
    END
    

    如果[Segment]的成员在[MultiParam]参数中,则该计算将移除该值。如果不在参数中,则会将该值添加到 MultiParam 字符串中。

    将此计算添加到选择分段表的所有标记卡的详细信息中。

  6. 根据“策略:自动取消选择标记”的第 1 步,创建[TRUE]和[FALSE]计算。将这些计算添加到标记卡的详细信息中。您的可视化现在应该与图 11-18 相匹配。

  7. 将可视化内容和选择分段表添加到仪表板中。隐藏两个仪表板的标题。

  8. 设置参数操作,以便在参数表上选择数值时,MultiParam 表会根据[Param Action] 计算进行更新;参见图 11-21。

    MultiParam 参数的参数操作

    图 11-21. MultiParam 参数的参数操作
  9. 按照“策略:自动取消选择标记”的第 2 步进行操作,这样一点击,标记就会从选择分段表中取消选择;参见图 11-22。

    自动取消选择标记的过滤操作

    图 11-22. 自动取消选择标记的过滤操作

    您的参数动作现在正常工作,但需要更新您的表格工作表以应用来自多参数的过滤器。在表可视化中添加开/关并选择 True。现在您已经构建了交互式的视觉系统(图 11-23)。

在这个策略中,您学会了可以将参数用作数据源,通过将参数应用回自身。存储和添加参数值可以使可视化具有严肃的交互性。

多选参数策略的最终解决方案

图 11-23. 多选参数策略的最终解决方案

使用参数动作交换指标:办公室必备案例研究

参数和参数动作非常强大。如前一策略所示,您可以使表格看起来像参数,并像参数一样操作。您还可以使表格看起来像按钮,具有比 Tableau 基本功能更强大的功能。

您的观众喜欢您展示的互动性。因此,他们现在希望通过使用按钮来滚动浏览各种指标。这次,您决定使用单独的表格看起来像按钮,并提供您的观众所需的互动性(图 11-24)。

使用表格作为按钮

图 11-24. 使用表格作为按钮

在这种情况下,假设您是一名用户体验设计师,致力于为客户构建先进的界面。您希望一次显示一个指标,但有四个指标要显示。您决定创建自己的选项旋转木马。

策略:使用表格作为按钮

在这个策略中,您将创建按钮,这些按钮将更改参数并更新度量:

  1. 创建一个名为**[Select Metric]**的整数参数,并选择一个值列表。输入与指标数量相同的值。在本例中,我们交换四个指标:总销售额、总利润、利润率和每笔订单的总销售额。在值中,键入 1 到 4,如图 11-25 所示。更新显示为列表,显示这四个指标的名称。

    步骤一的整数参数

    图 11-25. 步骤一的整数参数
  2. 创建以下基础可视化计算:

    1. 创建一个名为**[Metric]**的计算。我们将使用四个指标来匹配我们的四个参数值:

      // Metric
      CASE [Select Metric]
      WHEN 1 THEN SUM([Sales]) //Total Sales
      WHEN 2 THEN SUM([Profit]) //Total Profit
      WHEN 3 THEN SUM([Profit])/SUM([Sales]) //% Margin
      WHEN 4 THEN SUM([Sales])/COUNTD([Order ID]) // $ per order
      END
      
    2. 我们的可视化包含百分比和美元总额。因为无法更改格式,所以需要创建一个专门用于显示美元的维度。复制并编辑计算。将名称更改为**[Metric ($)]**,并更新计算:

      // Metric ($)
      CASE [Select Metric]
      WHEN 1 THEN SUM([Sales]) //Total Sales
      WHEN 2 THEN SUM([Profit]) //Total Profit
      WHEN 4 THEN SUM([Sales])/COUNTD([Order ID]) // $ per order
      END
      

      编辑 [Metric ($)] 的默认格式设置为美元,不带小数。

    3. 通过复制和编辑计算来构建百分比标签。将名称更改为**[Metric (%)]**,并按以下方式更新:

      // Metric
      CASE [Select Metric]
      WHEN 3 THEN SUM([Profit])/SUM([Sales]) //% Margin
      END
      

      编辑[Metric (%)]的默认格式,使其成为无小数的百分比。

    4. 通过创建一个名为**[Metric Name]**的计算来创建将指标与参数绑定的标签:

      // Metric Name
      CASE [Select Metric]
      WHEN 1 THEN "Total Sales"
      WHEN 2 THEN "Total Profit"
      WHEN 3 THEN "Percent of Margin"
      WHEN 4 THEN "Sales per Order"
      END
      
  3. 构建您的基本可视化,显示在图 11-26 中:

    1. 创建一个名为**Viz**的表。

    2. 将[Segment]和[Metric]添加到列中。

    3. 将[Region]添加到行中。

    4. 将[Metric (%)]和[Metric ($)]放在文本上并左对齐文本。

    5. 格式化您的可视化,关闭行条纹但添加行分隔符。

    6. 增加行之间的间距,并将条形的大小更改为行高总大小的约 60%。

    7. 将[Metric Name]添加到颜色,并将不透明度设置为 40%。

    8. 关闭工具提示。

      我们将使用参数值更新的基本可视化

    图 11-26. 我们将使用参数值更新的基本可视化
  4. 创建一个名为**Left**的新左箭头表。

    1. 创建一个名为**[Left]**的计算来创建标签:

      // Left
      "◄"
      

      将计算添加为文本的维度。

    2. 创建一个名为**[Subtract Value]**的计算,以更新您的[Select Metric]参数:

      // Subtract Value
      IF [Select Metric] = 1
      THEN 4
      ELSE [Select Metric] - 1
      END
      

      将计算添加到详细信息中。

    3. 根据“策略:自动取消选择标记”中的步骤 1,将[TRUE]和[FALSE]添加到详细信息中。

    4. 从可视化中删除工具提示,将轴尺、网格线、零线和分隔线设置为无。

  5. 创建一个名为**Right**的新右箭头表。

    1. 通过调用计算[Right]创建右箭头标签:

      // Right
      "►"
      

      将计算添加到文本中。

    2. 创建一个名为**[Add Value]**的计算以更新您的[Select Metric]参数:

      // Add Value
      IF [Select Metric] = 4
      THEN 1
      ELSE [Select Metric] + 1
      END
      

      将计算添加为详细信息的维度。

    3. 根据“策略:自动取消选择标记”的步骤 1,将[TRUE]和[FALSE]添加到详细信息中。

    4. 从可视化中删除工具提示,并将轴尺、网格线、零线和分隔线设置为无。

    左右表的结果显示在图 11-27 中。

    用于表分页策略的左右表

    图 11-27. 用于表分页策略的左右表
  6. 如下所示创建文本显示表,显示在图 11-28 中:

    1. 创建一个名为**[Metric Name]**的表。

    2. 将[Metric Name]添加到文本,并对齐到中间中心。

    3. 将[Metric Name]添加到颜色中。

    4. 关闭工具提示。

    5. 格式化您的可视化,删除任何线条或分隔符。

    6. 更新颜色(可选)。

      添加到表之前的指标名称表

    图 11-28. 添加到表之前的指标名称表
  7. 构建您的仪表板:

    1. 创建一个新的仪表板;例如,我们使用的是 400 × 300。

    2. 在仪表板上添加垂直容器。

    3. 将 Viz 添加到垂直容器内的仪表板中。同时删除自动添加的任何图例或参数。

    4. 在垂直容器中,在 Viz 上方添加一个水平容器。在容器周围添加浅灰色边框。将容器的高度设置为 40 像素。

    5. 将左侧、度量名称和右侧表格添加到水平容器中。隐藏所有标题。适当排序并去除每个表格的填充。

    6. 将左侧和右侧表格的宽度固定为 40 像素。

    7. 将 [度量名称] 的背景格式设置为比背景略深的颜色。

  8. 您需要为左侧和右侧箭头表格添加参数操作:

    1. 在左侧表格中,通过使用 [减去值] 来更新 [选择度量] 参数;参见 图 11-29。

      减去值参数操作

      图 11-29. 减去值参数操作
    2. 在右侧表格中,通过使用 [添加值] 计算来更新 [选择度量] 参数;参见 图 11-30。

      添加值参数操作

    图 11-30. 添加值参数操作
  9. 对于左侧和右侧表格,按照 “策略:自动取消选择标记” 的第二步操作来关闭标记选择。

    图 11-31 展示了最终的可视化效果。

表格作为按钮策略的最终可视化

图 11-31. 表格作为按钮策略的最终可视化效果

在这个策略中,您学习了如何将表格转换为交互式组件,以帮助驱动仪表板上的变化。这是通过参数和参数操作完成的。当您增加标记取消选择功能时,仪表板从商业智能工具转变为全功能应用程序。

为表格添加分页和参数,参数操作:Superstore 案例研究

在先前的策略中,我们介绍了使用页面作为按钮的概念。虽然这可能是一个小事情,但我们认为这解锁了我们仪表板设计的许多惊人可能性。在下一个策略中,您将学习如何添加表格分页并构建适合分页的 UI。

毫无疑问,您通过增加到仪表板的惊人互动性赢得了观众的青睐。但现在,您被分配了迄今为止最困难的任务:CEO 要求您构建可以以她想要的速度运行的表格。挑战在于仪表板由于标记过多而渲染速度慢。解决方案是:创建一个带有任何网页开发者都会羡慕的 UI 的分页。

有时候我们在 Tableau 中的表格太长了,有时候我们想要将表格合并成一个单独的表格。我们可以通过分页来实现这一点!当你思考这个问题时,你会发现,我们在网页上与之交互的大多数表格都有分页;这是一个微妙的暗示,作为开发者,我们应该设计带有分页的表格。图 11-32 展示了一个示例。

表格分页示例及其他自定义功能的示例

图 11-32. 表格的分页示例及其他自定义功能的示例

在下一个策略中,您的任务是构建一个具有分页功能的表格。您将需要显示每位客户的总销售额、总利润、利润比率和总订单数。此外,您的团队已同意,在您的仪表板上唯一显示的滚动条应该是 Web 浏览器上的滚动条。因此,您的仪表板不应有任何滚动条。

您的任务是构建一个可视化界面,每次显示 15 位客户的详细信息,并提供导航箭头和交互式页面计数器。您将使用 Sample – Superstore 数据集完成这一任务。您将在图 11-33 中重新创建表格和可视化组件。

表格分页策略的输出

图 11-33. 表格分页策略的输出

策略:添加表格分页

这种策略需要四张表:一张用于表格,一张用于数字显示,一张用于左箭头,一张用于右箭头。您将从表格开始设置,然后转移到箭头,最后创建显示:

  1. 连接到 Sample – Superstore 数据集。

  2. 建立基础表格:

    1. 将[客户名称]添加到行中。

    2. 按照[客户名称]的销售总额降序排序。

    3. 如果没有,请创建一个名为**[利润比率]**的计算:

      // Profit Ratio
      SUM([Profit])/SUM([Sales])
      
    4. 创建一个名为**[总订单数]**的计算:

      // Total Orders
      COUNTD([Order ID])
      
    5. 将[度量名称]添加到列中。

    6. 将[度量值]添加到文本中。在[度量值]标记卡上放置 SUM(Sales)、SUM(Profit)、利润比率和总订单数。

    7. 删除行间隔和所有线条,只保留行分隔线。

    8. 格式化客户名称,使其与表格中的文本字体样式匹配。如图 11-34 所示,在这个阶段表格的样子。

    添加分页前的表格

    图 11-34. 添加分页前的表格
  3. 创建一系列参数,用于驱动表格的变化:

    1. 创建一个名为**[显示行数]**的整数参数,用于指示要显示的行数(参见图 11-35)。例如,你可以指定为 15,但稍后可以更改。

      设置显示行数参数

      图 11-35. 设置显示行数参数
    2. 在此过程中,同时创建一个名为**[页码]**的第二个参数,用于指示页码。将参数中的整数设为 1,并确保允许所有值,如图 11-36 所示。

      设置页码参数

      图 11-36. 设置页码参数
    3. 创建一个名为**[Customer Name | Index]**的计算。此函数只是应用INDEX()函数来对客户进行排序和排名:

      // Customer Name | Index
      INDEX()
      

      此计算对于构建其他计算非常方便。

      小贴士

      而不是在计算中硬编码值(如要显示的总行数),请使用参数。这将允许您快速更改数值,而无需打开计算。

    4. 您的下一个计算称为**[Page | Customer Name | Index]**。这将计算应显示在哪一页的行:

      // Page | Customer Name | Index
      ((([Customer Name | Index] - 1) - (([Customer Name | Index] - 1)
        % [rows to show]))/[rows to show]) +1
      
    5. 现在,您只需创建一个计算来显示应显示的页面。根据页面参数创建一个基于布尔值的计算,称为**[Page Number | TF]**

      // Page Number | TF
      [Page | Customer Name | Index] = [page number]
      
    6. 将[Page Number | TF]添加到表格工作表的筛选器中,并选择 True。现在您将看到来自第 1 页的 15 行。这基于显示行和页码参数。这留下了您在图 11-37 中看到的可视化效果。

    添加页面号码筛选后的表格

    图 11-37. 添加页面号码筛选后的表格

    现在您的表格上的筛选器已经工作,您唯一需要做的是通过箭头或页面显示更新参数!

  4. 首先创建名为**Left Arrow**的新表格:

    1. 创建一个特设计算,并将◄添加到文本中。将文本对齐到中心中间。将字体设置为 Arial,并将大小更改为 12。

    2. 创建一个名为**[Page | -]**的计算。此计算将从页面编号的值中减去一个值,除非您已达到最低编号:

      // Page | -
      IF [page number] = 1
      THEN 1
      ELSE [page number] - 1
      END
      

      将[Page | -]添加到标记卡的详细信息中。

    3. 从“策略:自动取消选择标记”的第 1 步开始,将[TRUE]和[FALSE]计算添加到详细信息中。

    4. 关闭左箭头工作表的工具提示。将任何行或行分隔线设置为无。

  5. 通过创建名为**Right Arrow**的新表格来构建右箭头:

    1. 创建一个特设计算,并将►添加到文本中。将文本对齐到中心中间。将字体设置为 Arial,并将大小更改为 12。

    2. 创建一个名为**[Page | +]**的计算。此计算将在页面编号的值上加 1,除非您已达到最大页数:

      // Page | +
      IF [page number] = FLOOR({COUNTD([Customer Name])}/[rows to show]) +1
      THEN FLOOR({COUNTD([Customer Name])}/[rows to show]) + 1
      ELSE [page number] + 1
      END
      

      将[Page | +]添加到标记卡的详细信息中。

    3. 根据“策略:自动取消选择标记”的第 1 步骤,添加[TRUE]和[FALSE]计算到详细信息中。

    4. 关闭右箭头工作表的工具提示。将任何行或行分隔线设置为无。结果如图 11-38 所示。

      完成步骤 4 和 5 后的左箭头和右箭头表格

    图 11-38. 在完成步骤 4 和 5 后的左箭头和右箭头表格
  6. 页面导航器是仪表板上最复杂的组件。您需要显示选定的页面、周围的页面,并使其交互。此外,选定的页面可能并不总是位于五个页面列表的中间,因此我们需要确保能在正确的时间突出显示正确的页面:

    1. 开始一个名为**Display**的新表。将[客户名称]添加到标记卡的详细信息中。按销售总额降序排序。

    2. 将[客户名称 | 索引]添加到列中。将测量值更改为离散。编辑表计算,选择特定维度,选择客户名称。使用自定义排序,并选择按销售总额降序排列。

      这意味着我们的分页将基于销售总额!每个索引值都是一个[客户名称],按销售总额排序。

    3. 创建一个名为**[Label Page Number Active]**的计算:

      // Label Page Number Active
      IF [Page Number | TF]
      THEN [page number]
      END
      

      将此计算添加到标签中。确保计算是离散的。这将仅显示活动页面。最终我们将格式化此文本。编辑嵌套表计算的表计算;选择特定维度并选择客户名称。务必对这两个计算都执行此操作。

    4. 创建一个名为**[Label Page Number Inactive]**的计算:

      // Label Page Number Inactive
      IF NOT [Page Number | TF]
      THEN [Page | Customer Name | Index]
      END
      

      将此计算添加到文本中。如第 6c 步中那样,编辑嵌套表计算的表计算;选择特定维度并选择客户名称。务必对这两个计算都执行此操作。

    5. 单击以编辑文本。将两个尺寸放在同一行。对于[Label Page Number Not],选择较浅的灰色,Tableau Book,大小 12. 对于[Label Page Number],选择黑色,Tableau Semibold,大小 12. 文本应类似于图 11-39。

      格式化[Label Page Number Active]和[Label Page Number Inactive]以显示为整数。

      页面数字的文本

      图 11-39. 页面数字的文本

      这将留下您在图 11-40 中看到的结果。

      第 6e 步后的分页显示

      图 11-40. 第 6e 步后的分页显示
    6. 从“策略:自动取消选中标记”的第 1 步,将[TRUE]和[FALSE]计算添加到详细信息中。

    7. [客户名称 | 索引] 显示所有客户,但我们实际上不需要显示所有客户。我们只需要显示每页的第一个客户。因为最后一页可能只包含那一个单独的客户,这样做是最好的。

      编写名为**[Page n | 0]**的以下公式:

      // Page n | 0
      ([Customer Name | Index] % [rows to show]) - 1
      

      将[Page n | 0]转换为离散值并放置在筛选器上。编辑筛选器的表计算。选择特定维度和客户名称。编辑筛选器以从筛选器选项中选择 0。这将导致图 11-41 中的可视化效果。

      在添加筛选器仅显示每页第一个成员后,您的分页显示

      图 11-41. 在添加筛选器仅显示每页第一个成员后的分页显示
    8. 最后这部分是最难的。您需要知道显示哪些页面。这是关于设置范围:一个下界和一个上界。您将通过两个计算来完成:

      创建**[阈值 | bottom]**计算:

      // threshold | bottom
      IF [page number] < 3
      THEN 1
      ELSEIF [page number] > FLOOR({COUNTD([Customer Name])}/[rows to show]) - 1
      THEN FLOOR({COUNTD([Customer Name])}/[rows to show]) - 3
      ELSE [page number] - 2
      END
      

      并创建一个**[阈值 | top]**计算:

      // threshold | top
      IF [page number] > FLOOR({COUNTD([Customer Name])}/[rows to show]) - 1
      THEN FLOOR({COUNTD([Customer Name])}/[rows to show]) + 1
      ELSEIF [page number] < 3
      THEN 5
      ELSE [page number] + 2
      END
      

      为了方便,建立一个单一计算来定义上下界,并称该计算为**[阈值 | tf]**

      // threshold | tf
      [Page | Customer Name | Index] >= MIN([threshold | bottom])
      AND
      [Page | Customer Name | Index] <= MIN([threshold | top])
      

      将[阈值 | tf]添加到 Filters shelf。编辑表格计算,选择特定维度,并选择客户名称。然后编辑筛选器并选择 True。

    9. 现在您只需通过移除行分隔线和隐藏标题来格式化。将文本对齐到中间。关闭工具提示。您的可视化应该类似于图 11-42。

    完成第 6 步后我们的分页显示

    图 11-42. 完成第 6 步后我们的分页显示
  7. 构建仪表板:

    1. 创建一个新的仪表板,并将大小设置为宽 400,高 500。

    2. 在仪表板中添加一个垂直容器。

    3. 将表格添加到容器中,并使表格适应整个视图。

    4. 在垂直容器中的表格下方添加一个水平容器。

    5. 将左箭头、显示和右箭头添加到容器中。将所有对象设置为适应整个视图。隐藏表格的标题。

    6. 移除与三个表格相关的所有内部和外部填充。

    7. 在容器周围设置边框。

    8. 固定容器的高度为 40。

    9. 固定左右箭头的宽度为 40。

    10. 为每个箭头添加背景颜色。您的仪表板应类似于图 11-43。

      第 7 步后您的分页仪表板

    图 11-43. 第 7 步后的分页仪表板
  8. 添加到左箭头、显示和右箭头的仪表板操作:

    1. 从您的仪表板中选择仪表板 → 操作 → 添加操作 → 更改参数。选择 Pagination 仪表板中的 Left Arrow 表,并使用[Page | -]计算,在选择时不进行聚合,如图 11-44 所示。

      表格分页的左箭头参数操作

      图 11-44. 表格分页的左箭头参数操作
    2. 从 Pagination 仪表板中选择 Right Arrow 表,并使用[Page | +]计算,在选择时不进行聚合,如图 11-45 所示。

      表格分页的右箭头参数操作

      图 11-45. 表格分页的右箭头参数操作
    3. 参数操作将用于显示。使用[标签页码未激活]在选择时无聚合地更新页码参数,如图 11-46 所示。

      表格分页的页面显示操作

    图 11-46. 表格分页的页面显示操作
  9. 创建三个单独的筛选操作,分别用于每张表:左箭头、右箭头和页面显示。按照“策略:自动取消选择标记”的第 2 步为每张表应用筛选操作。最终结果显示在图 11-47 中。

表格分页策略的第 2 页

图 11-47. 表格分页策略的第 2 页

在这种策略中,您学到了如何通过参数操作连接表格和参数。它帮助解锁了使用基本 Tableau 无法实现的增强型 UI。

这种用例的一个精彩扩展是将刚刚创建的相同计算应用于具有相同行维度但显示不同可视化的第二张表。使用相同的[页码 | TF]计算,您可以同步显示数值。事实上,稍作格式化,您可以使其看起来像是一个单一的,统一的可视化。

例如,在图 11-48 中,我们添加了按类别销售的柱状图。通过应用相同的排序和筛选条件,我们能够将这两张表放在一个容器中显示,看起来就像是一个统一的表。

这种方法有一些缺点:您必须保留固定的排序。只要您的用户知道这一点,这是可以接受的。这意味着您需要关闭我们的排序控件。您可以从顶部菜单逐张地选择工作表,然后取消选中“显示排序控件”。

当您使用分页时,两张格式良好的表可以创建看起来像单个可视化的内容

图 11-48. 当您使用分页时,两张格式良好的表可以创建看起来像单个可视化的内容

这就是分页的威力。当您可以同步几张表时,您可以开始逐层添加多个形状像表格一样的视觉组件,但实际上是复杂的仪表板,提供简明和信息丰富的见解。

创建动态的、单击即可进行深入研究:超级商店案例研究

对于本章的大部分内容,我们使用参数和参数操作来驱动仪表板的变化。参数只是可用于构建交互式、动态视觉系统的几种仪表板操作中的一种。在本章的最终策略中,您将构建动态的钻取功能,允许您的受众同时进行过滤和导航。例如,在您的表格中 Figure 11-47,您的受众可能对 Clay Ludtke 订购的特定产品有疑问。

在本章中,您设计了一些令人惊叹的数据产品,但现在您的受众希望能够钻取到每个客户的订单详情。在这个策略中,我们将向您展示在处理表格时用于满足受众需求的技术。

典型的分析师可能会说:转到另一个仪表板,然后从单独的筛选器中选择 Clay Ludtke。但是您可以通过单击现有仪表板上的一个按钮来执行此操作,从而使您的受众保持无缝体验。Figure 11-49 展示了一个示例。

顶级可视化(左)和点击 Clay Ludtke 客户后的产品级详细信息(右)

图 11-49。顶级可视化(左)和点击 Clay Ludtke 客户后的产品级详细信息(右)

策略:构建钻取交互性

在这个策略中,您将构建两个仪表板:一个显示顶级客户信息,作为我们仪表板的顶层,另一个显示客户订单的详细信息。这两个仪表板都不会显示可见的筛选器,但我们将使用一系列操作,允许您的受众转移到并自动过滤产品级仪表板,然后只需两次点击返回主仪表板:

  1. 连接到 Sample – Superstore 数据集。

  2. 通过创建名为**Table**的新工作表来构建顶级可视化。

    1. 根据“策略:添加表格分页”第 2 步,创建[TRUE]和[FALSE]计算。

    2. 通过创建名为**[Detail]**的新计算来添加箭头:

      // Detail
      1
      
    3. 将[Detail]拖入[Measure Values]标记卡中。右键单击 SUM(Detail)并选择格式。在数字格式化下,选择自定义,然后键入“►”。这将使所有值变为右箭头。

    4. 根据“策略:自动选择标记”第 1 步,创建**[TRUE]****[FALSE]**计算。将这些计算添加到标记卡的详细信息中。

  3. 通过创建一个名为**Top Level**的 700 × 800 仪表板来构建您的顶级仪表板。将表格添加到您的仪表板中。您的仪表板应如 Figure 11-49 中左侧的图像所示。

  4. 构建您的详细级别可视化。创建两张表,一张称为**Map**,另一张称为**Product**

    1. 对于详细视图中显示的地图表,如 图 11-50,执行以下操作:

      • 将 [城市] 和 [州] 添加到详细信息中。这应该生成纬度和经度,并创建地图。

      • 将 [销售额] 添加到标记卡上的大小和标签。

      • 将 [客户名称] 添加到标记卡的详细信息中。

      • 编辑地图表的标题,并替换为 [客户名称] 维度。

        我们详细视图的地图表

      图 11-50. 我们详细视图的地图表
    2. 对于详细视图中显示的产品表,如 图 11-51,执行以下操作:

      • 将 [产品名称] 添加到行中。

      • 将 [测量名称] 添加到列中。

      • 将 [测量值] 添加到文本中。

      • 筛选 [测量名称] 以仅显示 SUM(Sales)、SUM(Profit) 和 Profit Ratio。

      • 编辑地图表的标题,并替换为 [客户名称] 维度。

        我们详细视图的产品表

    图 11-51. 我们详细视图的产品表
  5. 构建你的顶层仪表板:

    1. 创建一个 700 × 800 的仪表板,名为 **详细级别**

    2. 添加一个垂直容器。

    3. 将你的地图和产品表添加到垂直容器中。

    4. 将地图的高度设置为 400。

    5. 在地图上方添加一个水平容器。

    6. 在水平容器中,添加一个文本框,键入 **客户详细**。将字体更改为 Tableau Bold,大小为 15。

    7. 在水平容器中,客户详细文本右侧添加一个导航对象。

    8. 编辑导航按钮。导航到你在步骤 3 中创建的顶层仪表板。将标题编辑为 **返回**。将文本颜色改为黑色,背景改为无。这样可以使你的观众回到顶层时具有互动性。

    9. 编辑水平容器的高度,并将其设置为 50. 到此时,你的仪表板应该类似于 图 11-52。

      显示所有客户的详细仪表板

    图 11-52. 显示所有客户的详细仪表板
  6. 目前你的详细仪表板上的两个可视化图表没有按客户进行筛选。你需要通过使用一个设置参数来添加这个功能:

    1. 前往地图表。在数据选项卡上,右键单击客户名称,选择创建 → 集合。命名集合为 **客户名称集合**,选择第一个客户,Aaron Bergman。然后点击确定。

    2. 转到地图工作表。将 [客户名称] 集合拖动到筛选架上。重复操作以添加到产品工作表。

  7. 通过在工作表上添加三个操作(设置操作以筛选到特定客户,转到操作以进入详细工作表,以及筛选操作以自动取消选择标记),为你的顶层仪表板增加互动性。在顶部菜单中,选择仪表板 → 操作。

    1. 在“操作”菜单中,选择“添加动作” → “更改集合值”。根据图 11-53,从顶层仪表板选择“Table”表。选择后,更新客户名称集合。当您选择时,分配值给集合。清除时,将所有值添加到集合中。点击“确定”。

    顶层仪表板上的客户名称设置动作

    图 11-53. 顶层仪表板上的客户名称设置动作
    1. 在“操作”菜单中,选择“添加动作” → “转至仪表板”。从顶层仪表板选择“Table”表。然后将详细仪表板选择为目标仪表板(参见图 11-54)。

      顶层仪表板的转至仪表板动作

    图 11-54. 顶层仪表板的转至仪表板动作

    最后,在“Table”表上添加一个过滤动作。请参照“策略:自动取消选定标记”的第 2 步,为每张表应用过滤动作。

    结果是三个动作同时发生。设置动作选择集合中的客户。这会过滤详细仪表板上的表格。转到仪表板动作让您的观众一键转至详细仪表板。而过滤动作则重置标记,这样当您的观众从详细仪表板返回顶层仪表板时,不会高亮显示任何标记。

    测试交互性,通过点击顶层仪表板上的箭头之一。这将直接将您导航至详细仪表板,显示关于特定客户的具体详情。查看完客户信息后,点击“返回”即可返回顶层仪表板。

    在此策略中,您在同一张表上应用了多个仪表板动作。通过这样做,您能够构建一个观众可以轻松导航的直观数据产品。

结论

在本章中,您以多种方式使用了参数。在第一种策略中,您使用参数和过滤器创建了一种称为表格交换的操作。

无论是展示一个微妙的技巧,将“按钮”与辅助数据源连接起来,从而驱动参数选择和表格交换,还是展示如何使用参数作为数据源并存储数值,本章突显了 Tableau 的一些最佳特性。

这一章,或许比其他任何章节都更集成了 Tableau 的几个关键功能。这些功能要求您使用多个工作表,并以一种使它们看起来像单一组件的方式进行格式化。虽然它们看起来很简单,但您会发现构建这些交互式系统需要时间。尽管花费了一些时间,但它们为您的受众提供了使用仪表板时更加流畅的体验。这非常重要;作为开发者,我们的工作是付出额外的努力,以便让我们的受众能够拥有高效的工作体验。我们能够让流程更加流畅,他们就能更快地获得关键的见解,与数据进行互动,并持续使用产品。

在下一章中,我们将继续通过探索仪表板设计来构建交互式组件。

进一步阅读

第十二章:构建仪表板和数据产品

在大部分的书中,我们专注于创建各种图表类型。在本章中,我们将把重点从创建图表类型转移到构建和开发对我们观众有用的仪表板。在本章中,你将学习如何将工作表和组件组合成视觉系统,并学习如何格式化它们,以给你的观众带来最佳的体验。

仪表板设计

良好的仪表板设计始于了解你的观众、他们使用数据的背景,以及决策带来的后果。对于初学者开发者来说,典型的仪表板创建过程从创建几个工作表开始,然后决定将这些工作表放在仪表板上。当开发者创建仪表板时,他们会添加一个新的仪表板,将工作表拖到仪表板上,进行一些手动调整大小,添加标题,显示一些筛选器,然后完成。

如果你无法理解这个过程,那么你可能已经开发数据产品很长时间,忘记了你刚开始时的感觉。那么,初学者开发者在仪表板创建过程中出了什么问题呢?

好吧,事情是这样的。那个初学者开发者做了以下的事情:

  • 只考虑了他们的视角下的数据,因此每个工作表中的信息对开发者来说是直观的

  • 使用了 1000 × 800 的仪表板默认大小,并未考虑这个产品是否被执行指导委员会或只有移动设备访问权限的销售人员使用

  • 使用了默认的间距和格式,这使得他们的受众更难理解所提供的信息

  • 未考虑信息应该呈现的顺序以及如何应用筛选器

如何避免这些错误?很简单:了解你的观众,并与他们一起迭代地工作和开发。不要忘记提醒自己和你的观众,这不仅仅是一个仪表板——它是一个不断演变的数据中心产品。

是的,你必须把你的仪表板看作一个产品。任何开发者的失败在于把仪表板视为“完成”。对我们来说,只有一种类型的完成仪表板,那就是已经不再使用并且可以丢弃的仪表板。我们不喜欢完成的仪表板,因为这意味着大量的努力被扔进了垃圾桶!

了解你的观众

那么,如何避免你的数据产品永远丢失?再次,了解你的观众。我们通过提问的方式来做到这一点。以下是我们向观众提问的样本问题:

以人为本

  • 这个产品的观众群体有多大(以总人数计)?

  • 告诉我他们在组织中的角色。

  • 他们最经常讨论哪些见解?

  • 用户在什么时候和何地访问这个产品?

  • 用户会多频繁地与这个产品互动?

  • 你的观众将使用什么类型的设备与产品互动?

  • 使用这些数据后将做出什么类型的决策?

以指标为中心

  • 您试图回答哪些关键问题?

  • 您的观众关注哪些指标?

  • 当您开始跨不同维度比较这些指标时,这些指标的行为/外观是否有所不同?

数据聚焦

  • 指标最频繁以何种粒度查看?

    • 当前周期与上一个完整周期

    • 日、周、月、年

  • 他们对数据有多深入?

    • 他们专注于顶层指标吗?

    • 他们是否深入到行级信息?

  • 决策何时通常停留在数据上(并过渡到数据调查)?

注重安全

  • 在数据产品中呈现的数据中,每个单一观众成员能看到多少?

    • 所有的仪表板?

    • 某些部分?

    • 是否定制给个人?

如果您能完全理解您的观众将如何与您的产品互动,那么它在更长时间内能够维持下去的可能性就会大大提高。

仪表板类型

当我们创建仪表板时,我们将每个仪表板所需的组件分为四类:静态、精选、探索和移动。一个仪表板不一定专属于一类。一个仪表板可能仅静态,因为它用于幻灯片供管理委员会使用。另一个仪表板可能依赖于静态的月度 KPIs,但用户可以深入到行级数据以探索和理解 KPIs 的构成。

静态

静态可视化的组成部分不需要额外的过滤或切片。这些视觉效果就是所见即所得。虽然 KPI 与静态组件最相关,但这些组件不仅限于 KPI。如果您每周或每月审查信息,并且这些审查使用相同的数据而没有交互性,则您拥有一个静态仪表板。图 12-1 和 12-2 展示了示例。

在这个静态仪表板中,一个优秀的设计突出了销售团队的目标进展。没有过滤器,只有针对观众的指导性视图。 (仪表板由 Ludovic Tavernier 提供。)

图 12-1. 在这个静态仪表板中,一个优秀的设计突出了销售团队的目标进展。没有过滤器,只有针对观众的指导性视图。 (仪表板由 Ludovic Tavernier 提供。)

这个静态仪表板使用小多图来快速突出关键指标及其模式,以便观众快速理解。 (仪表板由 Spencer Baucke 提供。)

图 12-2. 这个静态仪表板使用小多图快速突出关键指标及其模式,以便观众快速理解。 (仪表板由 Spencer Baucke 提供。)

在数据可视化领域,人们对使用静态仪表板有所抵触,因为它们本质上是报告。然而,我们与许多客户合作,他们利用 Tableau 创建定制的 PowerPoint 演示文稿或报告。我们应该接纳观众与数据互动的方式。我们的工作首先是满足观众的需求,然后慢慢改变他们的习惯。

创建静态数据产品确实有其好处。当您创建一个纯静态数据产品时,您的观众很可能已经信任所呈现的数据。无论是向财富 100 强公司的高级管理层呈现财务数据,还是向小型咨询公司呈现社交媒体博客文章的审核,静态都带来了隐含的信任。

探索性的

探索性仪表板 本质上是静态仪表板的完全相反。这些类型的数据产品通常包含最粒度化的数据报告,并包含大量过滤器。探索性仪表板的目的不是驱动洞察,而是驱动搜索。图 12-3 展示了一个示例。

This exploratory dashboard uses multiple filters and drill-downs to showcase insights

图 12-3. 这个探索性仪表板使用多个过滤器和钻取来展示洞察

在大多数情况下,您的受众对交易信息感兴趣,比如,“Sean Miller 在 10 月 12 日订购了哪些产品?”谁会对这样一个详细的问题感兴趣?一个客户服务代表即将致电 Sean Miller 关于他刚提交的支持票据!

关于创建探索性仪表板最常见的抱怨是它们有太多的过滤器或速度太慢(因为它们显示大量信息)。您可以告诉观众这是获取数据粒度访问权的一种折衷,但有加速事物的解决方案!探索性信息通常显示在一个非常大的表格中。这意味着 Tableau 需要渲染大量的标记!为了加快速度,我们建议使用表格分页来构建在第十一章中介绍的钻取互动。

探索性仪表板的创建目的要么是提供交易信息,要么是帮助观众建立对任何静态或策划数据产品的信任。随着信任的建立,您会发现您的观众在仪表板的探索部分花费的时间越来越少。

还有一个原因使得用户可能会使用探索性仪表板:你没有为他们提供执行工作所需的相关洞察。通过了解您的受众并围绕其需求构建解决方案,可以避免这种最糟糕的情况。

策划的

如果我们必须排名仪表板类型,我们将把策划的仪表板 排在最重要的位置。策划的数据产品是互动的,允许任何用户——在一定程度上——探索和学习所呈现的信息。

策划好的仪表板(图 12-4)代表了当你将用户置于设计中心时所产生的输出。作为这个数据产品的开发者,你已经了解了用户如何与数据交互以及根据所呈现的信息做出的决策类型。因为你比你的观众更频繁地与数据交互,所以你知道数据中存在的故事,并以可视化形式分享这些故事。这也使你能够建立适当的保护措施。

这个策划好的仪表板为观众提供了检查的见解,同时也引导用户浏览

图 12-4. 这个策划好的仪表板为观众提供了检查的见解,同时也引导用户浏览

一个设计精良的策划好的数据产品与精心策划的博物馆展览没有什么不同。我们是什么意思?想想你的经历;当你走进一个博物馆展览时,你会看每一个组成部分吗,读每一张卡片,观看每一个视频吗?不会!相反,你可能会进入一个展览并观察房间的整体主题;你可能会看七到十个视觉组件,并通过阅读两三个细节深入了解。其他人是否会沿着你走过的确切路径走?不会!但是其他人是否会以类似的理解离开展览?是的!

这就是你需要在你的策划好的仪表板中做的事情。你需要让数据说话,但是帮助引导观众通过数据,突出关键的故事,这是你的工作。如果你的观众中有人想深入了解,让他们去吧,但是通过限制他们与数据交互的特定粒度或限制他们可以互动的筛选器数量来提供保护措施。

如果你没有建立保护措施,个人将会p-hack。这个术语在统计学中很流行,简单来说就是错误使用数据来寻找可能看起来显著的模式,同时低估这些相关性实际上可能不存在于数据中。你可能在电视上见过一些这样的虚假相关性。例如,人均奶酪消费量与因被床单缠绕而死亡的人数之间存在显著关系。真的!看看图 12-5。

一个虚假相关的例子来自 Tyler Vigen 的虚假相关项目,使用了美国农业部和疾病控制与预防中心的数据

图 12-5. 一个虚假相关的例子来自 Tyler Vigen 的虚假相关项目,使用了美国农业部和疾病控制与预防中心的数据。

您的工作是确保与数据产品互动的每个人都能带走相同的故事。您最不希望看到的情况是有人在您的数据产品中搞破坏,并因洞察产生不必要的不和谐。

移动

我们最后一种仪表板类型是移动仪表板。正如我们从一开始提到的那样,这些仪表板类型并不是互斥的。但是当我们考虑移动仪表板和数据产品时,它们在设计上与所有其他媒体类型有根本不同。因此,在本讨论中,我们将它们单独分析,以便更深入地探讨以下部分。

移动仪表板设计

开发移动仪表板中最难的事情之一是要做对。我们面临的第一个挑战是我们的视口将非常窄。我们可以通过构建一个长形式的仪表板来满足部分受众的需求,这个仪表板可以通过滚动进行导航。在过去的十年里,我们从人类身上学到的一件事情就是,他们喜欢在手机上滚动和扫描。数十亿美元的社交媒体组织通过坚持简单的用户界面建立起来,使他们的受众能够永远地进行扫描和滚动。您应该在移动仪表板中采纳这种设计风格。

当然,让我们的用户使用移动仪表板意味着您不能同时显示三到五个关键绩效指标。您可以堆叠这些指标或包含一个水平滚动条。在您的表格中,这意味着只显示三到五列信息(可能更少)。

虽然这可能会限制您呈现的信息,但实际上它会使您的设计更加直接,并迫使用户告诉您他们确切需要看到什么。如果您问:“您真正需要看到什么?”您可能会听到:“嗯,我只对这一列感兴趣”,或者“我甚至不看所有这些内容。”

设计细节

当涉及到设计您的移动仪表板时,您需要牢记仪表板组件的间距。您希望将它们放置在可以利用扫描和滚动设计模型的位置上。如果您的视觉元素缺乏适当的间距,用户将很快失去兴趣。除了间距之外,我们建议使用简化的颜色调色板。这意味着使用四到五种离散的颜色和一个渐变色调色板。

与桌面版本相比,移动仪表板意味着丢失了许多细节。例如,如果您使用具有每个值标签的折线图,那么您可能无法获得这种空间。另一个上下文的丢失是工具提示。虽然您可以轻松使用鼠标悬停在值上,但在移动设备上并非如此。如果您使用散点图或折线图,获取您要查找的值可能需要几次点击。这并不是说您不能使用工具提示,但您当然不能依赖您的观众像在鼠标悬停时那样轻松地查找信息。事实上,如果您使用工具提示,可能值得添加文本,明确告知您的观众可以通过轻触获取工具提示信息。

在本节中,我们将为您提供三个构建移动仪表板的优秀示例。但首先,理解 Tableau 在何时渲染可用的移动仪表板而不是桌面或平板视图是非常重要的。如果为您的观众创建了移动视图,则屏幕尺寸为 500 像素或更小时,仪表板将渲染为移动视图。

设置移动仪表板非常简单。如果您正在使用最新版本的 Tableau Desktop,Tableau 会自动为您添加移动仪表板。这种移动视图的设计非常随意。如果您是一个初学者开发者,只是在视图上放置工作表,那么它运行得非常好。但如果您已经努力设计了一个桌面仪表板,它很可能无法完全符合您的期望。可以通过查看 Figure 12-6 中的简单但格式化的桌面仪表板自动转换为 Figure 12-7 的移动仪表板来体现这一点。

在桌面上显示四个关键绩效指标和一个表格的格式化仪表板

Figure 12-6. 在桌面上显示四个关键绩效指标和一个表格的格式化仪表板

毫无疑问,如果您希望保留桌面版本中的任何格式,您将需要在重新格式化移动版本时付出相同的努力。一个简单的方法是堆叠我们的关键绩效指标,而不是将它们并排放置,如 Figure 12-8 中所示。如果您真的想节省空间,您可以使用按钮技术来滚动查看这四个关键绩效指标。

在这个自动生成的移动仪表板中,灰色轮廓框表示活动视口

Figure 12-7. 在这个自动生成的移动仪表板中,灰色轮廓框表示活动视口

这是一个完全定制的移动仪表板。灰色轮廓框表示活动视口。

Figure 12-8. 这是一个完全定制的移动仪表板。灰色轮廓框表示活动视口。

如果你在使用表格—这很可能—你不可能将标准表格适合移动仪表板。回顾一下图 12-6 中的表格。对于你的移动观众,这种表格是无效的。实际上,你只有空间来显示三到五列的信息,这取决于这些列的复杂性和宽度。

一个简单的解决方案是交换你的列和行,然后将筛选器放置在你的新列值上。如果你在使用图 12-6 中的表格,这意味着日期移到行上,子类别移到列上,并且通过单独的子类别筛选你的数据。如果你将其用作筛选器,技术上你不需要将子类别放在列上,但我们(安和卢克)更喜欢这样做,因为它为显示的数据提供了一个标签(除了筛选器)。图 12-9 显示了结果。

虽然我们还没有提到,但你正在创建两个不同的表格,并且—根据设备类型—显示其中一个。这看起来很简单,但一个挑战是你的仪表板上所有工作表必须处于默认(桌面)仪表板视图。

在此移动仪表板表格中,列的总数有限

图 12-9。在此移动仪表板表格中,列的总数有限。

策略:在桌面和移动设备上显示不同的可视化效果

在这个策略中,你将学习如何在不同的设备上显示不同的表格。你将使用 Sample – Superstore 数据集来构建这种互动性:

第一部分:连接

  1. 连接到 Sample – Superstore 数据集。

  2. 使用[订单日期]添加一个提取过滤器。将范围设置为 2017 年 1 月 1 日至 2020 年 10 月 27 日。这将使我们能够模拟数据,就像今天是 10 月 27 日一样。

  3. 如果计算不存在,请创建名为**[边缘]**的计算:

    // Margin
    SUM([Profit])/SUM([Sales])
    
  4. 将边缘的默认数字格式更改为百分比,不显示小数。

  5. 将默认颜色更改为红绿白三色调色板。使用完整的颜色范围,将起始设置为–0.25,结束设置为 0.40,中心设置为 0,如图 12-10 所示。

    边缘的默认颜色格式化

    图 12-10。边缘的默认颜色格式化
  6. 如果计算不存在,请创建名为**[总客户]**的计算:

    // Total Customers
    COUNTD([Customer Name])
    
  7. 将默认颜色设置为自定义的白色-白色分离调色板,步骤为两步。这将使所有值显示为白色。

  8. 重复为[销售]和[利润]指标进行颜色格式化。

  9. 创建名为**[完整月份]**的布尔计算。如果上报的最后日期是月末,则只返回最近的一个月:

    // Full Months
    [Order Date] < DATETRUNC("month", {MAX([Order Date]) + 1})
    
  10. 创建名为**[最近 12 个月]**的布尔计算。这是一个我们将用来返回最近 12 个月数据的表格计算:

    // Last 12
    LAST() < 12
    

第二部分:创建桌面表格

  1. 创建一个名为 **桌面表格** 的新工作表。

  2. 从订单日期创建一个自定义日期。选择月/年作为详细级别。将名称保留为订单日期(月/年)。

  3. 将订单日期(月/年)添加到列中。

  4. 将 [子类别] 和 [Measure Names] 添加到行中。

  5. 将标记类型更改为正方形

  6. 将 [Measure Values] 添加到颜色和文本中。

  7. 在 [Measure Values] 卡中包括总客户数、销售额、利润和利润率。

  8. 右键单击分配给颜色的 [Measure Values] 并选择使用单独的图例。

  9. 将 [Full Months] 计算添加到过滤器中,并选择 True。

  10. 将 [Last] 添加到过滤器中。编辑表格计算。使用特定维度并选择订单日期(月/年)。编辑过滤器并选择 True。现在您应该只显示最近的 12 个月数据。

  11. 隐藏列和行的字段标签。

第三部分:创建移动表格

  1. 复制桌面表格工作表。将新工作表命名为 **移动表格**

  2. 交换行和列。

  3. 右键单击列上的 [子类别] 并选择显示过滤器。

  4. 将您的过滤器类型更改为单值滑块。

第四部分:创建桌面仪表板

  1. 创建一个新的仪表板。这次保持默认的大小设置。

  2. 将桌面表格工作表添加到仪表板中。调整工作表的宽度以适应仪表板。

  3. 从仪表板中删除图例。

  4. 将标题更改为 **子类别详细信息**

    完成此步骤后,您的可视化效果将类似于 图 12-11。

    一个非常简单的带有表格的桌面仪表板

    图 12-11. 一个非常简单的带有表格的桌面仪表板
  5. 由于您需要在桌面仪表板上某处包含移动表格以便在移动仪表板上呈现,您需要有创意。有两种流行的方法:

    • 浮动每个移动工作表到您的仪表板上(在本例中仅移动表格),并将 xy 位置设置为 -1,高度和宽度设置为 1。尽管这有效,但很难控制仪表板。

    • 在仪表板上添加一个浮动垂直容器,如 图 12-12 所示。然后将所有仅用于移动的工作表添加到容器中(在本例中是移动表格工作表和子类别过滤器)。然后调整垂直容器,使其位于桌面视口之外,将 x 位置设置为 1200,y 位置设置为 0,宽度设置为 375,高度设置为 800。

    我们更喜欢第二种方法,因为它允许我们跟踪将添加到移动视图的工作表。当您添加工作表时,您无需在此容器中进行格式设置,因为大部分格式将被重置。

在桌面仪表板上的浮动容器外面

图 12-12. 在桌面仪表板上的浮动容器外面

第五部分:创建移动仪表板

  1. 如果您的 Tableau 版本还没有添加移动仪表板,请添加一个手机设备。默认情况下,Tableau 已将桌面表格带入移动视图。

  2. 单击“解锁”图标旁边的“手机”以编辑移动仪表板。

  3. 从手机设备仪表板中移除桌面表格。

  4. 调整“移动表格”工作表的大小并隐藏标题。您的仪表板现在将类似于图 12-13。

一个简单仪表板的手机视图,带有表格。请注意,从移动到桌面,这两个仪表板是不同的。

图 12-13。一个简单仪表板的手机视图,带有表格。请注意,从移动到桌面,这两个仪表板是不同的。

在这种策略中,您学到有时需要为移动仪表板构建完全不同的视图。在构建这些视图时,所有工作表都需要放在默认仪表板上。否则,您将无法将它们添加到您的移动视图中。如果您想改进移动视图上滑块筛选器的交互性,您可以重新创建该操作。最后,请记住,任何必要的格式化必须在感兴趣的仪表板上完成。

如果非要用两个词来描述移动仪表板的关键,我们会选择“受众”和“简约”。首先,了解您的受众以及他们真正需要的信息。了解他们为什么以及如何使用数据!其次,保持您的移动仪表板简单。个人可以获取的信息有限。将焦点缩小到关键信息。如果保持界面简单,应该使受众能够轻松浏览和滚动获取见解。

可访问性

良好的仪表板设计是可访问性设计。在本节中,我们讨论了初学者开发者面临的两个常见挑战:为包括视觉障碍(在本例中是色盲)和学习障碍(在本例中是失读症)的个体设计。

我们对失读症的挑战非常了解,因为本书的一位作者患有轻度失读症。我们在阅读和写作时试图保持积极,对错误也持轻松态度——但毫无疑问,失读症在沟通时非常令人沮丧。

尽管我们将本章节的部分归类为“可访问性”,但这里涵盖的许多概念是设计行业的标准。它们成为标准是因为所有用户的需求,但我们将详细解释这些标准,让您了解它们的来源。

失读症

让我们从理解失读症开始。患有这种学习障碍的人在阅读时有解码字母和单词的困难。患有失读症的个体在识别词类时面临挑战。此外,大约5%至 10%的人口患有失读症

重要的是要记住,阅读困难并不是一种二元的学习障碍。它是一个连续谱。对于一些人来说,单词和字母处于不断变化的状态。对于较轻微的病例,单词或单词的部分会翻转。这可能表现为个体花费更多时间阅读或拼写困难,但也可能更极端,表现为发音困难或解决数学问题。

那么我们如何在我们的数据可视化中缓解阅读困难呢?让我们从字体开始。

字体类型

尽管阅读困难通常被刻板地认为是字母和单词混淆,但它也涵盖了在可视化中使用的任何符号,因此理解它不仅限于单词。但单词确实很重要,是为阅读困难者创建无障碍设计的一个很好的起点。

在创建仪表板时,我们有许多字体可供选择。这些字体通常分为五类:无衬线、衬线、展示、手写和等宽字体。

注意

如果您正在寻找更多资源,请查看 Luz Rello 和 Ricardo Baeza-Yates 的“适合阅读困难者的好字体”以及英国阅读困难协会网站

衬线字体在笔画末端有小装饰。当字体大小小于 12 时,衬线字体更适合普通读者使用。仪表板上最常见的衬线字体包括 Times New Roman、Garamond、Georgia、Palatino、Merriweather 和 Source Serif Pro,如图 12-14 所示。

几种最常见的衬线字体

图 12-14. 几种最常见的衬线字体

无衬线字体在笔画末端没有小装饰。研究表明,对于阅读困难者来说,与衬线字体相比,无衬线字体更易阅读。如图 12-15 所示,仪表板上最常见的无衬线字体包括 Arial、Verdana、Century Gothic、Trebuchet、Calibri、Open Sans、Helvetica 和 Tableau 字体。即便是 Comic Sans 也是可以接受的选择(没错,你没看错)。

几种最常见的无衬线字体

图 12-15. 几种最常见的无衬线字体

展示字体,如图 12-16 所示,通常设计用于短格式用途,如标题、标志或标题。这些字体通常包含独特的装饰特征。展示字体可能包含衬线或无衬线元素。尽管这些字体通常具有图形特性,它们通常不适合阅读困难者,因此我们建议避免使用展示字体。

一些装饰展示字体的示例

图 12-16. 几种装饰展示字体的示例

有趣的是,许多阅读困难者发现与手写字体类似的字体比衬线字体更易于阅读。如图 12-17 所示,这里是一些例子。

手写字体示例

图 12-17. 手写字体示例

等宽字体 使用具有相同宽度的字符。等宽字体曾经在打字机上使用,因为每次打一个字符时,需要移动相同的距离。这些字体也曾用于早期的计算机,因为它们需要较少的图形内存。在垂直对齐数字时,等宽字体效果最佳(尽管大多数字体设置数字值为等宽)。一些最受欢迎的等宽字体包括 Courier New、Consolas、Fixed Sys、Menlo 和 Source Code Pro。

尽管许多字体都很简单直接,但许多显示字体使用等宽字体来增强其图形性质。如果您看看以下三种字体——Courier New、Arial 和 Times New Roman——只有等宽字体 Courier New 完美地垂直对齐字符。等宽字体的示例显示在图 12-18

字体方程

等宽字体示例

图 12-18. 等宽字体示例

当为用户选择时,您应该选择无衬线字体而不是衬线字体,但有些事情可以使衬线字体更有效。

选择最佳字体

如果我们必须选择一个字体,基于包括眼动跟踪在内的研究,我们建议您为用户使用 Arial 字体。这是否意味着我们只使用这种字体?绝对不是。我们还有其他的格式化建议可以让您的字体对您的受众更友好。

无论您选择哪种字体,一些额外的建议可以帮助增强您的仪表板的可读性:确保您的字体足够大,并注意字体样式。

首先,使用至少 12 点的字体。如果您没有问题阅读大小为 8 点(或更小)的字体,请记住,您的受众并不像您一样体验文本。很多时候,我们在构建仪表板和数据产品之后才选择字体大小。您应该考虑相反的做法:在构建工作表时坚持使用较大的字体,然后围绕较大的文本开发您的设计。

其次,考虑字体样式。仅仅选择一个易于访问的字体并不意味着您已经制作了一个易于访问的可视化效果。您选择的字体样式也很重要。粗体字对于患有阅读障碍的读者可能很有用,但应避免使用斜体、下划线和全大写等其他格式。斜体和下划线使文本更难追踪,因为它们会使字符更加密集。全大写倾向于将字符简化为一个块状,从而增加阅读难度。

患有阅读障碍的读者更喜欢较暗的字体,但不是黑色。对比度使得文字更容易阅读。这也是我们在仪表板上使用的专业技巧之一:与其将所有字体都设为相同颜色,我们有时会将标题设置为基础文本的略暗版本。例如,我们的基础字体可能是十六进制码 #666666(RGB 102, 102, 102),实际上更接近中灰色调。而我们的标题则是 #494949(RGB 73, 73, 73),是略暗但不是非常深的灰色。

当你改变字体颜色时,另一个有趣的现象出现了,就像在 图 12-19 中看到的那样。使用较浅的色调会使你的字体看起来更细!

改变颜色后字体变得更轻

图 12-19。改变颜色后,字体变得更轻

每一行使用 Chivo 字体,大小为 16。但是字体颜色是不同的。在很多情况下,你可以把顶部行作为标题,底部行作为标准文本。在你的字体层级中,用户会对它们进行不同的处理。

文本对齐

除了做出聪明的字体选择外,你还必须对齐文本。左对齐文本通常最易于阅读,尽管在水平条形图等图表中也有例外情况。我们将文本(无论是左对齐、右对齐还是居中对齐)对齐,以便轻松地扫描和找到我们寻找的见解。如果文本没有对齐,那么扫描和解析细节将变得更加困难。

另外,尽量保持文本的水平对齐,而不是垂直对齐。垂直方向的文本更难阅读。即使对于专业读者来说,有些人也需要扭头才能读标签!虽然你可能无法在每一个可视化中都做到这一点,但至少应该考虑一下。

让我们看看 图 12-20。在左上角,文本是左对齐的,你可以很快地读出子类别。但是从文本末尾到边框的距离有所不同。这没问题,除非某个值的空白过多。例如,艺术标签到边框的距离可能太大了,因为空白比实际文本占用的空间还多。

在右上方,你会看到文本是右对齐的。这也是一个不错的选择,因为文本和边框之间的间距是一致的。在开发时,一致性是目标!

然而,在左下方的图表使用的是居中对齐的文本。这其实是两种世界中最糟糕的结合。一开始就不一致,并且文本与边框之间的间距也不一致。应该避免这种样式。

四个版本的条形图,具有不同的文本对齐方式:左对齐(左上)、右对齐(右上)、居中对齐(左下)和垂直对齐(右下)

图 12-20. 四个不同文本对齐方式的柱状图版本:左对齐(左上角)、右对齐(右上角)、居中对齐(左下角)和垂直对齐(右下角)

最后,在右下角,我们使用了垂直文本来标注子类别标签。这种文本比每个柱状图顶部的数值更难阅读。我们尽力使标题尽可能清晰易读。如果我们将它们水平旋转,它们将完全不可见。这也是为什么水平柱状图比垂直柱状图更有价值的一个原因。

接下来,让我们考虑间距。

单词之间的间距

通常来说,单词之间的间距(即单词之间的空间)应该是字母之间间距的至少 3.5 倍。虽然在 Tableau 中很少能够控制字距(即字符之间的距离),但可以在字母之间添加空格。

但是如果你选择这样做,你必须非常注意单词之间的间距。新手开发者通常在字母之间使用一个空格,在单词之间使用两个空格。这是不正确的。你应该在单词之间留下三到四个空格,根据字体的不同情况而定,特别是如果你选择用全大写书写标题时。

请考虑这个例子:

第 1 行:The Best Stock Market in US History

第 2 行:THE BEST STOCK MARKET IN US HISTORY

第 3 行:T H E  B E S T  S T O C K  M A R K E T  I N  U S  H I S T O R Y

第 4 行:T H E   B E S T   S T O C K   M A R K E T   I N   U S   H I S T O R Y

第 5 行:T H E    B E S T    S T O C K    M A R K E T    I N    U S    H I S T O R Y

第 1 行是用粗体 Arial 字体显示的,实际上对于患有阅读障碍的用户来说是最容易阅读的。第 2 行全部大写,并使用标准间距,可能是第二难读的字体。通过使用全大写,您的观众失去了(所有小的、不完美的空白)这些使单词更易于阅读的“齿缝”。

在第 3 行,我们在每个字母之间添加了一个空格,并在每个单词之间添加了两个空格。这可以说是最难阅读的一行。虽然我们通过全大写使字母之间的边缘变得更加明显,但每个单词之间的两个空格不足以区分单词。

这里有一个测试供你参考:重写第 2 行。计时看看添加每个单词之间额外空格需要多长时间。然后打出第 3 行,看看添加一个额外空格需要多长时间。比看起来更难!

行 4 和行 5 都是更好的选择。虽然两者都是每个单词之间使用一个空格,但分别在每个单词之间使用了三个和四个空格。如果我们重新审视这里的关键原则,单词之间的间距,很明显为什么我们应该使用 3.5 倍的字母之间间距:这样可以保持我们的文本对所有用户的可读性。

标题

对于你的标题,请使用比基础字体大至少 20%的字号。如果需要进一步强调文本,请使用粗体。

行长度

文本设计中一个极度被低估的特征是单行文本中应该包含的字符数。这一点对初学者开发者来说很容易被忽略。如果他们在仪表板上添加文本,并且文本横跨整个仪表板的长度,他们就会添加文本!不管仪表板的宽度是 300 像素还是 1400 像素。他们添加文本,然后点击确定!事实上,任何一行文本的长度都应该大约是 60 到 70 个字符。想想报纸吧——使用那些小字体——排版者并不会把文本包裹到整张纸的长度;他们添加栏目。

想想看。如果我们回到上一段的开头,那行文本长度应该不超过这个:

“文本设计中一个极度被低估的特征是字符数”

这是 69 个字符!

关于这个话题的我们的建议是:追踪单行文本中有多少字符是真的很难。一般来说,我们的指导是格式化,使得每行有八到十二个单词。在文本编辑器中,而不是按回车键,请使用左右填充。这将使文本换行比手工操作容易得多。如果您正在设计长篇执行仪表板,这尤其有用。

查看图 12-21 中的示例。您会注意到以下内容:

  • 尽管使用全大写字体,我们在每个单词之间添加了三个空格。

  • 所有显示的文本大约有 80 个字符宽。

图 12-21。这个仪表板文本使用少于 80 个字符长的行

图 12-21。这个仪表板文本使用少于 80 个字符长的行

行间距

在 Tableau 中控制行间距是非常困难的。理想情况下,行与行之间的间距应为特定行高的 1.5 倍。目前在 Tableau 中唯一控制行间距的方法是为每一行添加回车换行,然后在下一行添加一个单字符(我们使用下划线),并将其颜色与背景匹配。将单字符的字体大小设置为标准文本行高的 50%。这非常繁琐,但可以得到非常好的效果。以下是创建 1.5 倍行间距的示例:

这行字体大小为十八号,而

_

下划线大小为九号。设置

_

下划线以匹配背景。

嘿,我们的建议并不都是省时的!有时候只是知道在 Tableau 中可以做什么和不能做什么是好的。

填充

正如我们之前提到的,阅读障碍并不仅仅影响文本。数字和符号也同样适用。这意味着您的可视化可能会影响到阅读障碍的观众。如果有一个功能在 Tableau 的所有用户中显著未被使用,那就是填充。正如您在之前的章节中看到的那样,删除填充可以使多个可视化看起来像一个单一的图表类型。但我们也可以利用填充在我们的视觉效果之间提供适当的间距,从而增加可读性。填充为您的可视化提供了必要的空间,让关键洞见脱颖而出。

布局选项卡上提供了填充选项,如在添加工作表到仪表板后显示的图 12-22,您可以选择同步内部和外部填充,或者单独更改顶部、左侧、右侧或底部填充。如果希望工作表独立显示,可以使用“所有边均等”选项更改填充。如果要格式化容器中的两个对象,可以取消选中“所有边均等”,并相应调整。还可以调整容器的填充。

外部填充增加了工作表边框外的空间,而内部填充则在工作表边框与工作表中详细信息之间增加空间。如果同时使用内部和外部填充并更改工作表的背景颜色,则内部填充将与所选颜色匹配,而外部填充将保持透明,并显示工作表后面的内容。

默认情况下,Tableau 在可视化中添加了 4 像素的外部填充。这是不够的。一般情况下,我们会在外部添加 10 或 20 像素的填充,内部添加 5 或 10 像素的填充(是的,这么多!)。我们的填充通常的规则是先添加过多的填充,然后再逐步减少。例如,您可能希望从 50 像素的填充开始。如果选择逐渐增加填充,请一直增加到感觉不适为止,然后再多加一点以确保安全。

展示销售关键绩效指标的布局选项卡显示了外部和内部填充。注意,Tableau 使用默认的外部填充为 4。

图 12-22. 展示销售关键绩效指标的布局选项卡显示了外部和内部填充。注意,Tableau 使用默认的外部填充为 4。

在开发过程中,请务必将文本对齐与填充配对使用。这两者结合起来为增加仪表板的可读性提供了强大的工具。

让我们看看图 12-23,这个例子在每个可视化上保持了标准的 4 像素填充,但组件之间没有间距。我们已经很好地将关键绩效指标左对齐和数值右对齐,但仍然感觉有点局促。

一个没有额外内部或外部填充的仪表板–只有默认设置

图 12-23. 一个没有额外内部或外部填充的仪表板–只有默认设置。

让我们在这个可视化中添加一些外边距。这将有助于将 KPIs 与表格及彼此分开。此外,我们将背景颜色更改为浅灰色。 图 12-24 显示了这一操作的结果。

具有额外的 10 像素外边距和背景颜色更改的仪表板

图 12-24. 具有额外的 10 像素外边距和背景颜色更改的仪表板

现在 KPIs 明显与它们的迷你图相关联。然而,每个 KPI 和表格的文本直接靠近其边框,这使得文本难以阅读。如果在 KPIs 和表格中各增加 10 像素的内边距,文本就会与边框分离,提高可读性。我们还会在 KPIs 和表格周围添加一个边框。这个边框的颜色只比背景色稍暗。结果是 图 12-25。

具有 10 像素外边距、10 像素内边距、背景颜色更改以及围绕 KPIs 和表格的轮廓线的仪表板

图 12-25. 具有额外的 10 像素外边距、10 像素内边距、背景颜色更改以及围绕 KPIs 和表格的轮廓线的仪表板

使用这些技术,我们已经为我们的仪表板添加了适当的间距以增强可读性。关于这个仪表板的最后一个值得注意的注意事项是:所有字体的颜色都是中灰色,#666666,具体来说。

背景颜色

我们已经讨论了如何格式化字体颜色,但同样重要的是考虑你在可视化中使用的背景颜色。最好避免白色背景以满足阅读障碍人群。相反,使用浅灰色背景。一般来说,你希望你的数据产品有对比度——只是不要像黑色文本在白色背景(或反之)那样极端对比度。

让我们将前面的例子进一步完善,将文本的背景颜色更改为浅灰色。 图 12-26 展示了这一变化。

将背景颜色更改为浅灰色可以增强可读性

图 12-26. 将背景颜色更改为浅灰色可以增强可读性

写作风格

如果你必须在你的仪表板上包含文本,只需记住以下几点:

  • 在你的文本中保持简洁。

  • 提供清晰的指导和叙述。

  • 避免双重否定。

  • 在产品中使用一致的语言。

如果你遵循本节讨论的保护栏,为阅读障碍用户设计的仪表板,你不是在为一组人设计可访问的仪表板,而是在提升产品对所有用户的可读性。

列表

关于字体样式的最后一条建议:当你犹豫不决时,为最终用户制作一个列表。列表非常有效,因为它使内容更易消化,因为你把它分成了块。想想看,如果我们把所有这些段落缩减成这么容易阅读的东西,理解起来会简单得多!

表 12-1. 字体样式提示

要做 避免
- 使用至少大小 12 号字体 - 下划线
- 深色但不是黑色的字体 - 斜体
- 粗体 - 全大写
- 制作列表

颜色与视觉障碍

在视觉人群中,90%至 95%具有正常的色觉。对于剩下的 5%至 10%,他们对颜色的看法有所不同。事实上,色盲源于 X 染色体上的隐性特征。由于男性只有一个 X 染色体,这种隐性特征的存在是显性的。结果是大约 8%的男性但只有约 0.64%的女性受到这种特征的影响。这对男性与女性的视力有深远影响。了解到大约 20 个用户中会有一个受到您仪表板上颜色选择的影响,更深入地了解颜色选择是值得的。

注意

为了帮助那些阅读黑白打印格式内容的人,接下来的几张图片在在线完整彩色

最常见的色觉障碍类型是绿红色盲。这种障碍影响 6%的男性和 0.4%的女性。这种障碍的观众被认为是绿色弱者,这意味着与典型视觉相比,许多红色、橙色、黄色和绿色会变暗。

最常见的色盲形式是红绿色盲。受影响的人难以区分红色和绿色色调,因为缺乏或突变红色或绿色视网膜光感受器。红绿色盲影响 1%的男性和 0.01%的女性。这影响了个体在红-黄-绿色谱中区分颜色的能力。与红绿色盲类似,绿红色盲影响红-黄-绿色谱,但他们感知的平均颜色更接近青色。

还存在其他类型的色觉障碍,如图 12-27 所示,但大多数受影响的人都在于绿色。那么对开发者来说意味着什么?红-白-绿色和红-黄-绿色的分散配色方案最有可能被错误查看。这意味着我们从本章一开始分享的仪表板并不是最佳选择(当然,约 5%的人通过自己的经验知道这一点,还有另外 10%的人了解到这种色盲概念)。

视觉类型分解及每个人群的预估百分比(来源:维基百科)

图 12-27. 视觉类型分解及每个人群的预估百分比;来源:维基百科

所以,你能做些什么来做出更好的颜色选择呢?这其实很简单:检查你的调色板和可视化是否易于辨别,如果不是的话,就将调色板更换为更易于识别的颜色。实际上,让我们看看图 12-28,看看我们的移动仪表板在四种视觉类型中的表现。

如果你视力正常,你会发现对于绿红色盲和红绿色盲,红色和绿色仍然很明显,但绿红色盲视角将红色和绿色结合起来,形成更像温暖粉红色和橄榄绿色调的视图。

正如我们之前所说,除了影响红绿色的其他色盲形式还存在。例如,蓝黄色盲和蓝黄色异常。这影响到不到 1% 的男性人口和不到 0.01% 的女性人口。图 12-29 展示了以这种方式看待我们移动仪表板的人们。

顺时针从左上角开始:标准视觉、绿红色盲、红绿色盲和红绿色盲的移动仪表板视图

图 12-28. 顺时针从左上角开始:标准视觉、绿红色盲、红绿色盲和红绿色盲的移动仪表板视图

我们移动仪表板在蓝黄色异常(左)和蓝黄色盲(右)视角下的显示

图 12-29. 我们移动仪表板在蓝黄色异常(左)和蓝黄色盲(右)视角下的显示

在您开发仪表板时,我们建议您使用像Coblis这样的工具来分析颜色选择,以模拟色盲效果!

由于许多公司喜欢使用交通灯的方式来制作调色板,那么有哪些替代方案呢?Tableau 的默认橙蓝色调色板几乎适用于所有类型的色盲,但大多数公司希望将红色用于负面指标。我们发现将红色转换为蓝色并保留绿色最为成功。

当我们创建自己的调色板时,我们对每种颜色进行了详细分析。当我们选择用于“Workout Wednesday”的调色板时,我们不仅选择了基础值,还考虑了使用浅色和深色的色调,增加透明度,并考虑了各种色觉缺陷的影响。图 12-30 展示了我们的分析。

为“Workout Wednesday”创建的调色板,突出显示了如何使用颜色以及颜色在不同视觉类型下的显示方式

图 12-30. 为“Workout Wednesday”创建的调色板,突出显示了如何使用颜色以及颜色在不同视觉类型下的显示方式

如果您经常使用相同的调色板,我们强烈建议创建类似图 12-30 的东西来辅助颜色分析。选择完美的调色板来消除所有颜色问题是不可能的。但是创建像这样的表格将允许开发人员从中选择大量调色板,并能快速分析颜色选择。

如果您开始开发自己的调色板,我们建议使用coolers.coLuke 为 Tableau public 开发的 Palette Creator 工具来创建和分析调色板。这个工具允许您选择颜色并查看它们在改变颜色值时的外观,因此您可以在选择值后避免错误。

格式一致性

在本章的最后一节,我们想谈谈一些小事情:在仪表板上正确处理这些细节是必要的。这个列表并不包括我们在创建仪表板时关注的所有细节,但强调了最重要的优先事项。

四舍五入数字

我们并不固守仪表板的默认格式,而是一直关注确保数字的格式正确和一致。一个轴所需的精度水平与工具提示所需的精度水平是不同的。考虑一下图 12-31 中的例子。

查看利润(%)轴,您将看到标签显示到小数点后第三位的精度。对于这个轴来说,这是一个非常精确的值。在 50.000%和 50%之间没有意义上的区别,两者表达的是同样的数值。此外,额外的数字是多余的信息,可能会分散您的最终用户的注意力,而不是集中在关键的洞察力上。

在创建任何数值标签时,请问自己一个问题:我的听众能清楚表达 0.001 和 0.002 之间的区别吗?如果答案是否定的,请更改精度水平,并问同样的问题。在这种情况下:我的听众能清楚表达 0.01 和 0.02 之间的区别吗?重复这个过程,直到找到适当的详细水平。

如果您发现自己在努力满足某些观众所需的看似不必要的精确度,并展示值以便您的观众快速发现洞察力,可以考虑将高度精确的值保留在工具提示中,而在视图本身上表达适当但更适合的详细水平。您可以在图 12-31 中看到这一点:折扣的详细水平在轴上是最接近的百分比,而在工具提示中是最接近的十分之一的百分比。

在超市数据集中,根据制造商显示利润和折扣的百分比的散点图,突出显示正确的轴标签

图 12-31. 超市数据集中按制造商分析的利润和折扣百分比的散点图,突出显示适当的轴标签
提示

要在工具提示上显示更精确的数值,而不是视图本身,有时候你需要复制相同的度量并放置在详细信息中。

轴与标签

当您开发数据产品时,您的目标是减少冗余——即重复呈现的信息。我们在可视化中经常看到的一个冗余是标签(以及比例尺的编码)。

让我们考虑一个简单的条形图,显示子类别销售额(图 12-32)。该可视化为相同销售值提供了三个编码级别。

带有条形标签、轴标签和颜色编码的条形图

图 12-32. 带有条形标签、轴标签和颜色编码的条形图

首先,我们有我们的条长度——实际上非常有用。我们添加了一个轴来帮助提供条的比例。但我们随后添加了第二种编码,通过添加更精确的物理标签。在此之上,我们添加了第三种编码,使用颜色显示销售额。我们对相同值有太多编码(事实上可能会更糟——我们还可以将[Sales]放在大小上)。

我们的目标是减少冗余(尤其是与我们的比例有关)。为此,您首先应该从颜色中移除[Sales]。从这里开始,您有两种编码比例的方式:您可以选择使用轴,也可以选择使用标签。许多新手开发人员两者都使用,但您不需要两者,因为它们的作用是一样的:仅仅是为了显示条的长度!

我们个人建议在条形上放置标签,而不是轴,就像在图 12-33 中所示的那样,因为您的观众更有可能想要了解条形的实际值,而不是相对值。我们的意思是,您的观众更想知道手机和椅子的确切价值,而不是说两者都大约为 33 万美元,但椅子略低于手机。

如果您选择在条形上放置标签,您将不需要轴(以及伴随轴的标尺和网格线)。

仅带有标签标记的条形图

图 12-33. 仅带有标签标记的条形图

如果您选择轴,则需要网格线;请参阅图 12-34。对于两者而言,您应该有一个定义明确的基准,展示条形的起点!

仅带有轴标签的条形图

图 12-34. 仅带有轴标签的条形图

最后,你必须问问自己,你想展示什么:轴还是标签?这将帮助你减少图表中的冗余。

字体样式

在我们看来,最大的挑战之一是确保从一张表到另一张表,从一个仪表板到另一个仪表板的字体样式保持一致。我们一直在问自己:我的坐标轴上的字体是否相同?标题呢?还有那些标记标签?有太多的标签要检查了!

您的排印选择几乎是无限的,并且可能会让您感到不知所措。如果您曾涉足排印领域,您将知道在选择字体样式时可能需要考虑数十个因素。然而,目标不是深陷于仪表板的细枝末节中。相反,您应专注于能够帮助驱动字体类型选择的高级场景。

当我们选择字体时,我们将选择以下类别之一:

  • 标题

  • 字幕

  • 标题

  • 副标题

  • 通用文本

  • 坐标轴标签

  • 坐标轴标题

  • 关键业绩指标(KPI)

  • 主要标记

  • 次要标记

  • 行标题和表格文本

  • 列标题

对于这些选项的每一个,您都必须决定使用哪种字体,以及字号和颜色。一般来说,我们建议您坚持使用 Tableau 字体。您可以使用多种字体样式。如果您发现自己使用不同的字体集,请最多使用一到两种字体,并始终从您组织的现有品牌标准出发。

制作风格指南后,请尽量遵循,但请记住:这只是帮助你的指南。规则总有例外。

提示

如果您需要使两张表格式完全相同,请右键单击已经格式化的选项卡,然后选择复制格式(图 12-35)。然后右键单击需要格式化的选项卡,选择粘贴格式。

右键单击选项卡以复制格式

图 12-35. 右键单击选项卡以复制格式

在整个本章中,我们的仪表板显示了一个显眼的问题。其中一些人立刻意识到,因为他们是色盲,能立即识别出糟糕的颜色选择。一些人意识到使用红色和绿色的挑战。对于其他人来说,您可能一直在不犹豫地进行。

结论

本章的目标不是提供构建仪表板时必须考虑的全面清单,而是让您开始思考构建数据产品(如仪表板)时必须考虑的一些组成部分。您不仅需要为受众创建可视化效果,还需要根据受众的背景构建它,以使其有意义。

在本章的第一部分中,您探讨了仪表板的类型。您创建的仪表板类型将取决于您的受众。您使用的视觉类型将由所需的仪表板类型决定。要确定您创建的仪表板类型,您应该首先通过提问来同情您的受众,看看他们当前如何使用将驱动您的数据产品的数据。

根据他们的需求,他们可能希望有静态、探索性、精选或移动仪表板。静态仪表板提供少量的互动性,并且通常专注于关键绩效指标。探索性仪表板通常装载有各种过滤器,但允许用户针对数据提出具体问题。精选仪表板允许用户与仪表板互动,但互动性由您作为作者控制。

移动仪表板与之前的仪表板选项并非互斥,但通常需要被视为一种独立类型,因为您的受众将完全不同于其他选项与它们互动。尽管移动仪表板呈现的信息较少于桌面仪表板,但它们很可能会与静态或精选仪表板类似。虽然您在移动仪表板上必须呈现较少的信息,但由于空间限制,您通常可以创作出最佳作品,因为这些限制迫使用户告诉您什么是最重要的。这使您能够创建一个专注于重要内容而非很少使用的花哨内容的仪表板!

此外,我们仅讨论了两个可访问性考虑因素:对于可能患有阅读障碍的人群的字体选择,以及对于与大多数人群不同的颜色感知的人群的颜色选择。尽管字体和颜色选择对于那些有阅读障碍或色觉障碍的人群非常有用,但使您的数据产品更具可访问性的原则实际上只是无障碍的通用实践,不受任何障碍的影响。

在本章的最后部分,我们讨论了专注于一些细节以改进您的仪表板的三个示例:在图表元素上显示适当的精度、减少标签的冗余以及保持文本格式的一致性。虽然这三种方法不能涵盖在格式化您的仪表板时需要考虑的所有设计元素,但它们是清理您设计的最关键的三个因素之一。

本章讨论了您可以立即在仪表板上执行的操作,而下一章则涵盖了关于仪表板开发未来趋势的内容。

第十三章:更广泛的 Tableau 生态系统

本书到目前为止的大部分内容都集中在如何以及为什么创建各种图表和可视化上。我们已经提升了你的可视化技能,现在你知道如何处理各种数据和分析类型。你还学会了如何通过专注于最终用户体验和互动性来思考你的可视化产品。

本章内容有所不同。我们不再专注于案例研究和策略,而是希望你退后一步,更全面地考虑如何处理数据进行视觉分析。具体来说,我们将提供关于何时何地准备数据以及如何打造一流分析平台的指导。最后,我们将通过分享一些即将出现的趋势来结束本章。

数据准备:何时何地进行

在整本书中,你一直受到照顾。我们提供了相对清晰的数据集,其中已经包含了准备好进行分析的关键信息。虽然这是有意为之,为了给你提供学习机会,但这并不总是可行或现实的。分析师经常必须努力收集重要数据,清理数据使其可读,并为可视化重塑数据。在第十一章中,我们提供了在 Tableau Desktop 内保持这一工作流程的策略,但这并不总是可能的。

当数据清理的任务成为一项单独的工作时,知道何时转换到其他工具,以及如何转换,就变得很重要。以下是一些必要或推荐从 Tableau Desktop 中移除数据清理的示例:

  • 将多个数据源与多个数据粒度结合。这种情况在市场分析中经常出现。分析师必须理顺来自不同平台的数据,这些平台具有不同的维度水平。对于处理这类数据的分析师来说,分别准备数据源,并识别一个共同的聚合级别,然后通过联合操作将它们组合起来至关重要。

  • 生成行 ID 或排名。虽然可以使用 Tableau 生成排名和索引,但这只能通过表计算完成,并依赖于工作表内的数据。如果你需要在数据集的每一行上添加行 ID,或者创建多个排名,应在可视化之前完成此操作。

  • 连接两个截然不同的来源系统,例如来自 API 的数据和来自电子表格的数据。虽然 Tableau Desktop 具有执行跨数据库连接的功能,但并非每种数据源都支持这种功能。一个很好的例子是来自 API 的数据,比如内置的 Google Analytics 连接器,其中包含有关网站流量的信息,以及来自 Excel 电子表格的数据,其中包含与流量目标相关联的目标。

  • 复杂数据清洗或在你的数据上使用高级统计/数学分析。在第九章中,我们概述了何时在 Tableau Desktop 之外进行数学分析的示例。如果你的数据符合这种情况,你很可能可以将这些过程与接下来列出的准备工具结合起来。

电子表格:Microsoft Excel

在没有提及 Microsoft Excel 的业务分析书籍是不可能的。由于这个工具的广泛使用和健壮性,数据专业人员很可能在过去使用它来进行数据准备和/或数据存储。专业人员通常从 Excel 开始,然后通过数据生态系统转向像 Tableau 这样更强大的工具。电子表格适合分析师,因为它们提供对底层数据的完全控制。可以使用公式、宏或简单地手动进行清理。同样,分析师可以构建数据透视表来预先聚合他们的数据,或者从多个系统复制和粘贴数据到一个源中。

那么,什么时候应该将电子表格用作数据准备工具呢?有两种真实的情况可以使用 Excel:当这是你唯一拥有的工具时,或者当你正在进行超快速的单次分析时。如果 Excel 是您唯一可用的工具,我们强烈建议使用它来帮助塑造您的数据。它具有几个有用的功能和公式,可以在分析之前清理您的数据。我们发现它在特定的金融功能方面特别有用,在 Tableau Desktop 中没有涵盖,并且需要 Python 或 R 中的几行代码来构建。正如所述,您还可以将数据从多个源复制粘贴到单个电子表格中,因此如果没有其他组合方式,这变得成为一个明显的解决方案。我们也可以接受它以极端的即兴方式使用。如果您正在为静态分析构建子集表或知道您以后不需要参考数据清理的方式,这可能是一个很好的解决方案。大多数人都可以在 Excel 中运作,并且该工具的普及性使得相对容易搜索解决方案或教程来完成任务。

除了这两种用例之外,我们强烈建议并鼓励您尝试下面提到的其他工具。Excel 目前无法处理大型数据集(超过一百万条),并鼓励我们试图避免的行为——修改源数据。在 Excel 中,没有真正的方法来以程序方式重复数据清洗任务,因此通过 Excel 向大众部署经过清洗的数据集是不现实的。

传统数据准备:SQL

SQL(Structured Query Language,结构化查询语言)可以说是最流行的编程语言,当然也是最流行的查询语言,它是用来组合和查询关系数据库中数据的主要方式,如图 13-1 所示。事实上,Tableau 就是基于 SQL 构建的;它将您的拖放交互(Tableau 称之为VizQL)翻译成针对数据源的 SQL 查询。在我们的分析师生涯开始时,SQL 通常被认为是商业智能开发者和分析师在其角色中取得有效成果所必备的最关键和必要的技能之一。

精通 SQL 技能的从业者受益于能够创建推迟聚合和数据清理至源头的数据集。在许多大型企业中,它仍然是创建数据集(通常称为报表表)的主要工具。从与 Tableau 一起工作的角度来看,它可以将许多复杂的计算字段或纯净化任务抽象到“后端”,从而使分析师能够专注于在数据集上构建分析。

什么时候应该考虑使用 SQL?如果您的数据已存储在关系数据库中,并且您的组织已经采纳了建立数据仓库和/或报表数据库的想法,那么您应该使用 SQL。如果您的数据已存储在这些类型的数据库中,使用 SQL 将允许您创建新的数据对象(表或视图),以便 Tableau 可视化可以依赖这些数据对象。在这些环境中,通常将数据准备任务分为两个角色:可视化设计师和数据工程师。因此,具备 SQL 技能在很多情况下可以转交给数据工程师。

用于从 Google 数据中添加维度的示例 SQL 查询

图 13-1. 用于从 Google 数据中添加维度的示例 SQL 查询

使用 SQL 准备数据的缺点是什么?最常见的问题通常是时间——无论是在收集需求还是开发正确的查询上都是如此。在那些将数据准备和分析分开的组织中,可视化设计师常常需要等待数据工程师构建数据集以供使用。这种瀑布式的方法还使得适应分析需求的变化变得僵化,并且减慢了迭代分析的过程,而在这个过程中,与数据工作可以实际上影响到识别分析中最重要的方面。编程或代码也会对您的过程产生黑匣子效应。解开构建的查询并向业务最终用户解释它们通常非常困难。我们发现,这个过程往往会导致缺乏信任的数据集。

现代数据准备:ELT 工具

准备数据的另一种方法是使用ELT 工具ELT是数据工程的一个缩写,代表提取、转换、加载——从源系统提取数据,通过编程(SQL)进行转换,然后加载到用于分析的数据库或数据仓库中。ELT 将加载和转换步骤颠倒过来,利用现代计算机硬件将数据暂时加载到内存(RAM)中,然后利用该硬件将转换后的数据推送到其最终位置。此外,大多数 ELT 工具具有更友好的用户界面,更少依赖编码,更多依赖工具和小部件(如图 13-2 中所示)。Tableau 本身也有一个名为 Prep Builder 的 ELT 工具,这是 Tableau Desktop 用户在准备数据方面需求增加的结果。

使用 ELT 工具的最佳时间是什么时候?在处理数据时有两个引人注目的理由可以依赖 ELT 工具:缺乏集中式数据库和开发迭代速度。如果您无法访问数据库,ELT 工具可以作为临时解决方案或虚拟数据库,允许您混合、组合和重塑数据。在业务领域中我们可以看到两个极端的情况:一方面是依赖云应用和互操作性的中小型企业,另一方面是极大型组织,分析师与源应用程序或数据库分隔多个组织层次,必须依靠系统的平面文件导出。

Alteryx 中用于构建第十章数据的数据准备工作流程

图 13-2. Alteryx 中用于构建第十章数据的数据准备工作流程

ELT 工具也受益于更快的开发时间。因为用户可以拖放工具,测试它们的输出,然后重新设计,所以解决方案通常很快就能找到。ELT 工具通常还具有数据概要分析功能,一种用于总结和显示数据范围的方法,内置其中。因此,当与全新的数据源一起工作时,将数据引入其 ELT 工具的分析师可以获得牢固的理解,并在可视化之前进行初步探索。此外,原本复杂或长的 SQL 查询变成了分析师的一系列工具。而且由于数据经过预处理并依赖于商品硬件,不会对源系统造成性能负担或影响。这些工具还允许分析师在各个步骤上做注释,并最终呈现出流程图,更容易向最终业务用户沟通。最后,分析师还可以从中导出重复步骤,以供其他工作流程使用,消除了重复开发或编码的需求。

我们刚刚表扬了 ELT 工具的优点,但它们的缺点是什么呢?与其他数据工程和开发策略相比,这些工具的生命周期较短,目前缺乏版本控制和健壮的协作解决方案。通常一个人必须负责从头到尾的数据清洗过程,并负责维护最终的工作流程。在快速迭代的情况下,这可能会导致组织内部摩擦。对于专门的企业数据团队而言,使用 ELT 工具可能被视为“影子 IT”,或者绕过正式流程。这也可能与现有的更广泛的企业战略发生冲突。我们建议通过将 ELT 工具定位为优秀的原型使用来缓解可能带来的紧张局势。将这些工具定位为原型工具有很大的好处;业务用户可以得到他们需要的分析,数据工程团队也有了强大的需求。

回顾

我们列出的三个选项并不全面,但涵盖了清理和准备数据的最常见方法。由于每种策略都有其利弊,我们鼓励您探索可能最适合您环境的选项。同时,考虑这些策略可以相互配合——这是一种综合方法,将人们对数据访问的需求置于首位。

建设蓬勃发展的分析平台

如果我们还没有说得足够多,重申分析和可视化只是更大画面的一部分。尽管它们非常重要,因为这是利益相关者理解数据并做出决策的地方,但如果数据不普遍可用、准备好进行分析并且可扩展消费,那么这些决策是无法做出的。在其核心,Tableau Desktop 是一个数据阅读器;它消耗任何你输入的数据。它并不是在任何组织中实现良好分析的万能解决方案。

相反,要拥有一个蓬勃发展的分析平台,数据从业者,特别是数据领导者,需要意识到整个数据管道,并考虑在每个主要步骤中所需的互补技术。当我们考虑数据分析管道时,我们将其分为六个部分,以可视化作为最后一环(图 13-3)。

数据分析管道,从原始数据到可视化

图 13-3. 数据分析管道,从原始数据到可视化

首先,重要的是考虑您的数据来自何处。 对于许多组织而言,这是许多不同的应用程序、数据库和外部数据源的混合。 所有相关信息很少完全驻留在一个记录系统中。 想想您自己的个人健康或财务记录:它们是否都存在于一个门户中? 很可能不是,因为随着时间的推移,您可能会更改医疗提供者或银行。 组织也面临同样的问题:技术的变化、依赖第三方和组织无关的数据(如人口统计信息)意味着数据存在于不同的来源中。

要创建一个繁荣的分析文化,最常见的做法通常是将所有这些数据源集中到一个单一位置。 有两种竞争理论指示如何管理集中式数据:数据湖和数据仓库。 对于数据湖,目标是从源系统摄取尽可能多的数据,直接将其倾倒到数据湖中,并且在后续流程中担心清理和组织数据。 数据湖通常是一种非结构化数据存储形式,如 Apache Hadoop,它可以处理许多文件类型,并且不要求数据以行和列的形式存储。 在数据仓库中,数据被编目、组织,并经过初始清洗以便整齐存储和访问。 传统上,数据仓库中的数据以关系格式(行和列)存储,但最近的技术允许存储非结构化或半结构化数据(如 JSON 文件)。

取决于您选择数据湖还是数据仓库,接下来的步骤可能会类似。 在数据湖中,由于没有预先清洗,因此您的组织很可能会根据需要为分析和报告清洗数据,并且可能还有另一层数据存储(通常称为数据仓库)。 图 13-4 展示了数据湖的常见实践。

带有数据仓库的示例数据湖,这些数据仓库从中央数据源中提取数据

图 13-4. 带有数据仓库的示例数据湖,这些数据仓库从中央数据源中提取数据

在数据湖场景中,准备数据(第 4 步,如图 13-3 所示)由数据仓库的所有者管理。 数据会根据需要进行清洗和准备,以便进行分析。

如果您的组织有数据仓库,数据存储时很可能会经过基本的清理和合理化过程。大多数数据源符合架构,数据将被分离并归一化到相互关联的表中,数据字段将被分配类型(如数字、文本或布尔值)。在这里,需要更多的前期工作来摄取和存储数据,但回报是所有使用者都在使用相同质量的基础数据。此外,数据仓库可能会为报告和分析开发一些表,这些表可以包括将不同的数据源和数据表合并到高度非规范化的表中,专为查询和分析而设计。尽管如此,新型数据库技术(Snowflake 是一个很好的例子)正在模糊数据湖和数据仓库之间的界限,允许组织将数据倾入关系数据库,而无需进行大量的正式处理和组织。

无论您的组织选择如何集中其数据,下一步对两种情况都是功能上相同的。数据进一步清理、处理和精炼以供查询和分析。这是 SQL 和 ELT 工具发挥作用的地方。数据工程师添加业务逻辑,创建强大的数据集,并对数据进行重塑以进行视觉分析。最终,无论数据存储在何处,都接近完成并可用于视觉分析。

进入第 5 步,即创建可信数据。在此步骤中,不使用任何技术,而是将数据集交还给利益相关者和领域专家以验证准确性。在此步骤中,可能会生成数据字典来正式定义字段和计算。此步骤经常在过程中被忽视,因为每个人都渴望进入第 6 步,即可视化和分析,但我们在这里提醒您。这一步骤在避免数据源扩散和建立围绕信任的强大稳定数据平台方面至关重要。一个繁荣的数据分析平台包括这一步骤,确保经验丰富的分析师和设计师以及业务用户都可以信任数据,并真正采取行动。

在数据认证之后,我们来到了最后一步,即数据的可视化和分析。在这一步骤中,我们已经讨论了如何创建引人注目和有影响力的可视化,但并没有讨论如何分享它们。在这一步骤中,拥有某种平台来存储和目录它们至关重要(图 13-5)。在使用 Tableau 时,这意味着 Tableau Server 或 Tableau Online——一种允许存储 Tableau 可视化和数据源,并通过 Web 浏览器(或移动应用程序)访问的软件应用程序,包括用户权限和安全性。虽然我们没有深入探讨细节,但重要的是要注意,在建立这种类型的环境时,关键是确保它能够处理访问数据产品的内容和用户量。幸运的是,Tableau Server 是一个高度可扩展的环境,能够管理成千上万的用户和仪表板。

一个市场机构的示例数据平台

图 13-5. 一个市场机构的示例数据平台

正如你刚刚见证的,创建一个全面的和最佳实践的分析平台需要正确的技术、流程和心态的结合。如果你刚刚开始你的分析之旅,我们鼓励你审视自己的数据生态系统,找出改进或增加透明度的任何机会。虽然没有标准答案,但像前面提到的那些组成部分或概念会引领你走向成功之路。

未来趋势

我们希望通过探索可视化和分析中未来的趋势来结束本章。尽管可视化长期以来一直是支持数据分析的概念,在过去的 10 到 15 年里,与商业组织进行可视化的实践因商品硬件和数字化数据的普及而迅速流行起来。考虑到它相对年轻,前景充满了令人兴奋的机会。

数据新闻和数据叙事的兴起

首先是将叙事或叙述融入业务分析的理念。如果你超越了商业智能,你会发现数据新闻在数据可视化领域占据了重要位置。这里,视觉传达的重点不在于传达业务关键绩效指标,而在于使用图表支持引人入胜的叙述。记者们利用动画、注释文本和空白(滚动)来更好地强调和传达他们的主题。

这些技术未来有望渗透到商业世界中。随着观众变得更加数据精通(能够理解可视化和数据),设计师将能够进一步将叙事融入他们自己的可视化中。此外,随着机器学习和人工智能的进步,自动生成的叙事也在视野之内。

然而,我们并不认为该领域技术的进步会消除可视化设计师和/或熟练解读图表以供观众的需求。这些角色可能仍然是关键角色,但其转变是从手动开发或生成洞察力,转向更为程序化的方法。

而且,我们认为这些角色的普及将继续推动另一个最近的趋势:数据素养计划的开发和部署。这些计划旨在确保所有业务用户都具有基本的数据基础理解:图表类型和基本统计分析。在撰写本文时,Tableau 已经开始大力倡导这一概念,并向其客户提供免费信息。

在未来几年,数据和分析可能会在几乎每个角色中被充分认可,并扩展到包括更广泛的支持和培训计划。数据、业务智能和分析是“技术性”的,并属于组织的 IT 部门的观念将完全被剥离。

人类工作流中的分析

下一个即将到来的趋势是“分析随处可及”,特别是在操作流程中。对于销售经理、客户服务代表、产品负责人或项目经理等非技术角色,数据的需求日益增长。拥有数据和见解后,每一方可以做出更明智的决策,并通常更有利地为其利益相关者(内部或外部)服务。目前,我们看到大多数用户会前往单独指定的区域(如 Tableau Server)来获取他们所需的信息。未来,我们预见这些界限将变得模糊,使必要的分析存在于他们当前的工作流程中。

这种趋势的一个明显例子是 Salesforce 在 2019 年收购 Tableau 软件,Salesforce 是一家主要的软件组织,拥有丰富的基于云的客户关系管理(CRM)应用程序。Salesforce 的巨大收购表明,一个强大的分析和可视化平台,直接嵌入到客户账户信息存储的位置,对其日常支持的组织至关重要。与其 Einstein 产品的增长一样(专注于预测分析和机器学习),收购 Tableau 导致了高度分析和数据导向工具更进一步和更完整地融入到人类工作流中。

在未来几年,我们认为这一趋势将继续增长,并且业务智能中心或隔离存储所有报告和仪表板的库与日常运营应用程序之间的界限将进一步模糊。在不久的将来,各种类型的员工可能会开始利用交互式分析,在他们大部分时间所在的地方推动更好的决策制定和信息收集。

作为产品的分析

过去三年显示出显著增长的最终趋势是以分析为产品的理念。这是一种完全拥有和管理的产品,以各种行业的形式向客户销售,既可以作为现有企业的增值高级服务,也可以作为独立的产品。想象一下一个拥有电子健康记录(EHR)应用程序的医院。目前,这用于存储和访问患者的健康信息,但我们也看到它包含分析功能,以帮助医疗从业者——从提供操作洞察力,如容量和效率,到更全面的视角,比如对患者的全面关怀。

我们认为,衡量这些类型指标并进行这些类型分析的角色很快将被组织分开,并由支持该任务的软件重新捕获。我们可以肯定地说,这种转变已经开始发生。

除了增强为客户提供包括分析在内的服务外,视觉分析将(已经)成为一个独立的可以购买的产品。许多领域已经定期接受这种类型的处理,从零售营销趋势到大型社交媒体和技术公司如 Facebook 的广告洞察和消费者行为。

在同一思路下,还有作为服务提供的集成分析的理念。像 TrackMaven(用于营销分析)这样的组织承诺将所有相关数据源集成到一个统一平台,并构建报告和分析,被认为是各种渠道和目标中最佳的。这些组织还具有极大的优势——从各自客户的大量数据消费中,意味着它们还可以提供聚合的绩效见解,并构建各自领域的比较基准。这项任务是单个组织不太可能独自完成的,因为它需要竞争对手的合作和广泛的数据共享。相反,通过选择这些服务,这些组织获得了数据共享作为极大的好处。

结论

本章重点讨论了三个主要主题:何时何地准备数据,构建最佳数据平台以及分析未来的趋势。

您已经学会了三种准备数据的方法。我们为您提供了函数何时需要与可视化过程分离的示例。现在您应该对您手头的工具感到自信,并有能力表达选择每个工具的优缺点。最重要的是,我们希望您了解到并不是一种最佳方法。通常情况下,组织内会混合使用这三种方法,以帮助实现您希望达到的分析结果。

您还学习了最佳数据分析平台的各个层次——从原始数据开始,逐步向上工作直到可视化的点。您还了解到数据可以以两种主要方式之一存储,以帮助促进这种类型的平台——数据湖和数据仓库——以及与之相关的各种好处。

我们已经讨论了数据可视化和分析中的三个趋势:数据叙事、人类工作流内的分析,以及作为产品的分析。在您拓展和发展自己的可视化技能时,我们鼓励您看待数据新闻学作为创新和发展自己数据产品的一种方式。另外,我们挑战您深思仪表板和数据产品应该驻留的位置,并分享了这样一个结论性的想法:在未来(为了效率和最大化收益),我们认为它们应该与办公人员的日常操作驻留在同一应用程序中。

最后,我们说分析本身正在成为一种产品——这种产品正在从分析师和商业智能专业人员中分离出来,成为一个完全独立的产品。它可以被添加到现有的应用程序中,以增强它们的价值,或者作为来自数据聚合器的独立产品,允许组织进行必要的比较和与竞争对手的基准分析,进一步了解自己所在的行业。

第十四章:行业框架

在本书的最后一章中,我们希望涉及一些核心行业,这些行业依赖于分析,以及掌握每个行业的关键策略和技术。在整本书的过程中,我们有意向您展示了涵盖各种行业的案例研究和策略。然而,现在我们希望退后一步,分享我们在职业生涯中学到的成功处理每个行业的方法论。

我们在这一章的目标是为您提供一个与利益相关者合作的框架,并分享构建有意义的分析和数据产品所必需的关键原则。我们希望这些知识作为指南,并帮助您在角色扮演中航行。特别是,我们将讨论以下行业的框架和策略:

  • 医疗保健

  • 教育

  • 物流

  • 市场营销

  • 销售

  • 零售

  • 金融

在引导您了解这些行业的过程中,我们鼓励您看到它们之间的相似之处以及您可能能够获取并应用到自己情景中的技术。

医疗保健

医疗保健是一个引人入胜的行业,涵盖了各种类型的组织,从提供护理的提供者,到管理索赔和处理福利的保险承保人(付款人),再到制药和医疗设备制造商。医疗保健行业的核心是改善健康和健康结果的驱动和必要性。这一指导原则的副产品是强调患者护理以及持续的运营效率(降低成本)和增加创新。了解这些概念对于为利益相关者提供洞察力至关重要。

在患者护理方面,分析通常以健康标志物如慢性疾病、社会经济区分如联邦或州级保险覆盖,或生活阶段为基础进行分割。在这里,通常会发现不同类型的比率用于表达指标。

其中一个是每千患者(PP)比率。PP 比率是一种用通俗语言表达频率的方式,其中最常见的一种是在 1,000 人中存在某种疾病或每 1,000 人中可用的医院床位数。这种比率的独特之处在于,通过对 1,000 进行计算,该数字成为受影响个体的类比值。它还用于突出显示较小的数字;例如,影响 1%人口的疾病变成了每 1,000 人中的 10 位患者。

这类指标通常随时间趋势变化,并添加目标或阈值以帮助衡量其表现。以医院床位的 PP 比例为例。目标可能是每千人保持 100 张床位的可用性,旨在确保医疗服务的可及性;同时追踪当前的容量,并设定阈值,以便当 PP 数低于 10 时,采取额外措施以确保能够为人群提供服务。

您可能会遇到的另一种类型的指标是绩效测量。该测量具有一个分子,表示受绩效测量目标影响的人群,以及一个分母,表示适用于该测量的患者总数。这些是用于评估和确保保持质量指标的常见测量标准。

举例来说,医疗有效性数据和信息集(HEDIS)是评估医疗计划绩效的极为流行的方法;它在护理领域构建比率,并进行比较基准设置。这些指标通常以 0 到 100 的数字范围表示,代表措施的符合度。一个例子是成年人 BMI 评估(ABA),该评估衡量了 18 至 74 岁成员中在门诊就诊并测量体重指数(BMI)的比例。这些措施非常重要,因为它们通常每年向管理机构报告,并展示付款方和提供者的关键绩效指标。在分析这些指标时,比较可用基准、不同服务人群之间的变化以及用清晰的“命中或未中”的术语表达它们是很重要的。

由于您将遇到的大多数指标都是比率或率,它们非常适合用于基于时间的比较线图。通常,这些时间范围更广泛(每月、每季度、每年),以允许充分的数据收集和事件发生。由于保险行业的原因,它们通常会滞后,并且在三个或更多个月内可能尚未最终确定,因为索赔正在最终确定和付款。因此,在这个领域,显示长期的数据范围非常重要,通常至少两年。同样重要的是表达百分点差异和百分比差异(变化率)——前者用于轻松传达变化的幅度,后者用于表达该变化的速度。

最后,在医疗保健行业中,掌握受保护健康信息PHI)的概念非常重要。PHI 指的是任何涉及个体可识别健康信息的内容,通常是一个主要的关注点。必须始终考虑到这一点,以确保数据没有分解到足以识别某个数据点代表一个人,并且数据泄露也不能提供有关个人的信息。因此,数据存储需要额外的预防措施和安全指南,分析通常只以聚合形式表达。与利益相关者合作时,识别什么是和什么不是 PHI 以及确定必要的聚合水平以实现洞察和匿名性是非常重要的。

教育

我们习惯将教育行业分为两种实践:初中和高中教育以及高等教育。初中和高中教育 涵盖从小学到高中毕业的阶段,而高等教育 则包括大学和学院。我们将它们分开是因为它们具有非常不同的数据点和重要的测量标准。

小学、中学和高中

对于从幼儿园到高中阶段的所有内容,最重要的分析通常与评估(或标准化测试)有关。评估通常是半年或一年一度进行的,衡量学生的知识掌握程度是否达到国家或州的标准。这些值不仅用于传达单个学生的掌握水平,而且聚合在一起,显示课程、教职员工和学区的有效性。它们也经常成为公立学校可能获得资金量的关键绩效指标。

评估数据呈现了自己的一系列挑战。首先,因为它通常由学区之外的机构管理,所以不容易与学区内的其他关键应用程序(如学生信息系统)集成。因此,人口统计元素、出勤率和成绩历史不容易直接与最终分数联系起来。其次,数据通常以过于聚合的导出形式存在,结构不佳。不良的数据结构意味着在进行彻底分析之前,数据必须经过预处理,通常是将数据透视(将列转换为行)。此外,过度聚合表现为仅在年级水平(而不是个别学生)或单个学校提供结果。这种过度聚合使得教职员工和管理层难以编制出一个全面的学区视图,同时识别真正改进的领域。

要释放评估数据的力量,我们建议按照每位学生的个人水平获取评估结果。然后旋转数据,以便以前是列的指标现在作为维度出现(一个很好的例子是评估科目)。最后,使用已知的一项关键信息,即学生 ID,将来自其他记录系统的信息进行匹配。区域管理员希望能够看到区域、学校、年级和教师层面的结果,并希望能够比较低层次聚合中的同行,以准确定位改进机会。旋转数据还允许更轻松地将学生人口统计信息与评估数据匹配起来。

解锁评估数据价值的最后一步是形成学生群体(通常基于毕业年份),允许查看和分析学生群体整个教育生涯的过程。这种洞察力在识别课程中的任何差距以及跟踪长期社会经济因素影响和变化方面非常有力(例如,享受免费或减价午餐的学生与其他学生的比较)。

大学和大学

中等院校内的数据和分析与前 12 年完全不同。在这里,重要因素主要集中在注册和毕业上。注册 处于前沿,因为它决定了将收到多少学费以及应如何分配。毕业 是成功教学的关键指标,也决定了学校在同行中的声誉。

在这个领域内的挑战是处理长度和起始日期各异的独特学术日历。为了处理这类数据,我们通常会根据学期注册的第一个日期进行标准化,并将所有图表表达为“自注册开始以来的天数”。这些比较可以有助于跨时间和学年进行比较。由于注册是可预测的,通常会使用前几年来设定目标。

物流

没有比物流更注重时间的行业了。在这里,利益相关者会要求进行各种与时间相关的分析,因为他们的最终目标是确保事物在流程中顺畅运行,通常是确保货物按时到达。由于这个行业运行在保持一切都在时间服务配额内的概念上,日内结果和更小时间组件(分钟和秒)的比较变得尤为重要。

此外,随着物联网(IoT)的发明,物流通常会被大量的传感器和遥测数据所淹没。这些数据还可以用于另一个关键要素:优化。优化在这个行业中有多个方面,从优化车队和利用员工的效率,到优化路线本身以减少成本和因效率低下而造成的损失。

在物流领域进行有效分析意味着允许大量的时间分析,并提供多种比较模式。与前一周同一天或前一年同一天的表现进行比较,特别是在这些比较时段的同一时间点上,是至关重要的。利益相关者通常不希望朝向目标或工作日结束,而是希望与过去的表现进行比较。通过这种比较,利益相关者可以更轻松地识别任何即时问题,并进行微调和反应。

营销

自数字营销大规模引入以来,没有任何其他行业比营销更有可能面临多个和分散的数据来源。此外,由于大多数营销渠道是外部管理的,如社交媒体或基于搜索引擎的广告,营销人员对最初收集用于分析的数据的方式和内容控制最少。营销利益相关者必须做到最重要的一点是将所有数据组合成一个完整和全面的图片。正因如此,营销分析中最大的挑战是数据工程。必须涉及强大的数据管道和工程元素,以确保所有数据能够合理化和消费。

一旦数据合理化,接下来出现的问题是这个行业中大量的 KPI 指标。这些指标可分为三大类:基于数量,例如总点击次数或转化次数;基于参与度影响力,例如转化率;以及涉及市场活动整体效果的最后一类,例如广告支出回报率(ROAS)。利益相关者通常希望一次看到所有这些指标,导致数据展示混乱且密集。我们建议通过提供两种类型的分析来解决这个问题:一种专注于深入研究单个指标,另一种旨在探索两个或多个指标之间的关系(比如散点图)。

营销中可能面临的最后一个挑战是将离线数据或机构数据与营销活动相关联。如前所述,广告领域中最具吸引力的指标之一可能是 ROAS,这意味着能够直接或间接地将收入与广告支出等同起来是很重要的。这可能以多种方式构成挑战。首先,这可能限制数字营销活动与收入的粒度比较;简单地说,您可能无法直接将营销活动与特定的收入事件对等。此外,收入与广告之间存在一定的滞后性,因此测量和监控广告变化如何反映在滞后收入指标中非常重要。

销售

我们广泛定义销售为客户购买产品之前和之前发生的任何活动。对于初次购买,这是识别和追踪潜在客户,与客户之间进行的参与活动,以及最终互动是否以销售结束。对于持续的客户,这是他们增加购买频率的频率,并保持销售关系的完整性。

在销售分析中,绩效几乎总是有一个外部配额或目标,通常与季度(或月度)财务日历挂钩。常见的分析涉及衡量达到目标的差距或距离。还有强调利用过去的经验来预测未来的趋势。历史数据对于添加到购买习惯或个别销售经理或部门的效果的度量标准也变得至关重要。您将在同行群体中看到很多比较和排名,这与竞争激烈和快节奏的环境相一致。

利益相关者将通过他们的销售管道和个别团队成员来衡量效果。他们将密切关注这一点,因此常见的做法是建立简单的移动仪表板来满足这些指标。

零售

零售消费品 是另一个长期利用分析来衡量业绩和运营效率的行业。交易级别数据长期以来一直可用,并成为大多数零售分析的基石。在这个行业中,利益相关者的重点是维持或增长收入,确保可预测的客户增长和活动。由于零售业具有高度季节性,组织通常使用去年的表现作为目标和预期结果的基准。还有强调将数据聚合起来,以提供顶层绩效摘要,同时具备按产品线或地理区域进行性能过滤的能力。

在零售业中,更复杂的分析包括客户信息,以深入了解他们的购买行为,并确定有效的营销策略。这里有客户交易的完整历史数据库,以及更多个人信息(可能来自奖励计划),可以混合使用来生成客户人物画像,并定义关键指标,如客户生命周期价值。

此外,从零售运营的角度来看,库存数据被广泛用于监控产品的流入和流出速度,衡量产品离开货架的速度,并提供关于热销商品(销售迅速的商品)和滞销商品的见解。由于现金常常被囤积在库存中,这些组织对于库存的平衡有清晰的理解至关重要。

金融

财务,我们将讨论的最后一个行业,涉及到组织中资金流动相关的一切。由于组织的这个部门与金钱关系密切,常见的会计概念如资产负债表、损益表、现金流量表和损益表通常是需要提供的分析的基础。这些信息为财务高管提供了他们渴望的高层次信息,用于评估组织的财务健康状况、评估任何风险并进行财务规划。

在具有更高财务分析成熟度的组织中,这种分析扩展到更深层次,了解各个成本中心对这些数字的影响。在这个能力上,他们可以就正在开发的新产品或新部门做出战略指导的决策。

此外,财务部门作为理解任何未解决付款和债务的中心。他们通常负责将发票和付款进行对应,这些数据通常存储在不同的应用程序中,并捕捉诸如支付时间和资金来源等关键指标。

结论

在本章中,您已了解了与关键行业相关的框架以及处理它们各自利益相关者的方法:

  • 对于医疗保健行业,关键考虑因素涉及数据隐私。这个行业依赖于描述护理质量和护理效果的度量标准。

  • 对于教育部门,您现在了解了初等/中等教育和高等教育优先事项之间的差异,以及两组都能够汇总和分解数据以评估绩效的重要性。

  • 对于物流业务,现在重点在于时间。这个行业专注于日内运营,并确保一切运行顺畅和服务截止时间的达成。通常这意味着以历史数据作为运营节奏的基准,并快速识别可能失控的任何流程。

  • 对于销售部门,目标是了解客户的整个生命周期,从最初接触点到销售,并能够对沿途发生的事情进行分类和量化。由于销售通常是一个竞争激烈的环境,进行同行间的比较以评估个人和团队的表现是很常见的。

  • 对于零售业来说,交易数据是大多数分析的基础,用以描述业绩或收入以及客户增长,这两者都具有高度季节性。在这个行业中,更精细化的分析还包括库存,以理解各种产品的销售速度,确定销售良好和滞销产品的适当库存水平。

  • 对于财务而言,几乎每一项分析都可以与会计相关联。通过专注于基本会计原理,你可以描述组织内资金流动,从而掌握这一行业的语言。此外,通过提供与支付时间、资金分配和款项类型相关的更多风险和规划指标,你将帮助利益相关者获得更广泛的理解。

posted @ 2025-11-19 09:22  绝不原创的飞龙  阅读(15)  评论(0)    收藏  举报