考点 2.3.5 Create a calculated field (e.g. string, date, simple artihmetic)
Tableau支持很多种不同类型的计算, 这些计算都有自己特定的表达式. 因此在开始学习计算之前, 非常有必要了解你所输入的计算公式到底是什么类型的计算. 而更重要的是, 如果达到你想要的效果, 你需要什么样的计算.
Tableau中都有哪些计算类型
计算是Tableau的重中之重. 而且Tableau中有两种你在其他地方接触不到的概念, 分别是Table Calculation和Level of Detail Calculation.
Table Calculation中文翻译过来叫表计算, 而Level of Detail Calculation翻译过来叫详细级别表达式. 你要真是按照这两个中文名字来理解的话, 那真是一头雾水.
除了这两个Tableau的特色计算之外, Tableau里还有和Excel里差不多的基础计算. 所以总结起来就是基础计算, 表计算和 LOD计算.暂且不要试图用详细级别表达式这个让你薅头发的名字.
为了去理解它们之间的区别, 更重要的是, 为什么Tableau要创建这些不同的计算, 我们首先要从几个概念开始讲起. 把这些概念深深的植入你的脑海里.
这些概念分别是: 范围 Scope, 聚合 Aggregation, 顺序 Order.
从基础计算讲起
其实解释基础计算非常容易, 我如果把这个概念换一个名字叫Excel单元格计算的话, 你可能一下就明白了. 基础计算就是对一列当中的每一行的数据都进行同样的计算.
基础计算不涉及任何的聚合. 在下边的截图当中, 最右侧有两列分别是Quantity和Quantity+1. 而Quantity+1也非常容易理解, 就是在Quantity的数值上再加一而已.
如果你的计算是同一行之间一一对应的计算, 不会涉及其他行. 那么它就是一个基础计算.

范围 Scope
范围主要是指你所创建的计算背后, 需要参考多少行数据. 我以Sample Superstore 为例, 整个Sample Superstore作为Data Source一共有10,194行数据, 如果你要计算整个Data Source里的总销售额, 这10194行数据你就都需要用到. 但是如果你需要计算美国的总销售额, 那么美国的数据在整个10,194行数据中占了9,994行. 你所计算的每个数值背后都对应着你所采纳的数据的范围.
接下来我来讲讲在Tableau中存在的不同范围.
在最高一层是数据源, 这10,194行数据. 这是我们能利用的最多数据. 我把这个叫做Data Source Scope
接下来我们开始创建各个Worksheet. 在Worksheet里, 我们可以创建各种各样的Filter. 比如[Region]只包括Central这一个region, [Order Date]只包括2023年这一年等等. 当我们在Worksheet里添加了这些Filter之后, 我们在这个Worksheet里所能使用的数据就只剩下过滤后的数据了, 就不再是10,194行了. 这也就是当你添加完[Region]=Central和Year([order date]) = 2023 这两个Filter之后, 你再显示Region的时候, 所有其他Region消失的原因, 它们背后的数据已经不在你分析的数据的范围内了.
那么到了这里, 基础计算, 表计算和LOD计算就开始不一样了.
基础计算和表计算都受到Worksheet Scope的影响, 而LOD计算不会.
接下来我们看一个LOD和基础计算比较的例子,你就能看出来两者之间明显的区别. 在下边的截图里, 图表中数据一共有两行, 分别是All Sales和Sales. All Sales代表了整个数据源中所有订单的销售额, 一共是$2,326,534而Sales则代表了他们那一行所对应的消费者的销售额.
Ann Steele的销售额是$32
Ben Wallace的销售额是$16
在左侧的Filters, 你可以看到有一个叫做Filters City: Boynton Beach的部分, 这个部分限制了我们当前的所显示Customer有哪些. 那么我们可以很明显的看到, [All Sales]就没有受到City: Boynton Beach的影响, 显示的是所有顾客, 而[Sales]就受到了这个[city] Filter的影响, 只显示过滤之后的部分.

此刻我要介绍创建计算的第一原则: 如果你希望所创建的计算, 不受到你当前所施加的过滤器Filter的影响, 你需要创建的是一个LOD计算
聚合 Aggregation
接下来我们来到了计算的第三个因素: 聚合
聚合是一个术语, 但是我如果把它替换成合并的话, 你就会更容易理解一下. 聚合就是把多行数据合并成一行数据.
比如我十行销售数据, 那么最简单的就是销售额相加, 得到一行一个总和: 这就是SUM
我也可以数一下一共有多少行, 一共是十行, 那这就是COUNT.
用SUM除以COUNT, 就得到了AVG
这个转变的过程就是聚合.
基础计算没有聚合, 而Table和LOD计算都是聚合计算
如果聚合计算的范围只包括一行数据的话, 那么聚合计算的结果和基础计算的结果没有区别.
有的时候, SUM( [SALES] ) 就等于 [Sales]
顺序 Order
接下来, 我们开始介绍第二个需要考虑的因素: 计算的顺序. 如果你使用第一原则确定了你想要创建的计算不是一个LOD计算的话, 那么就剩下了基础计算和表计算. 而区分这两者之间的另一个关键因素就是顺序.
首先必须明确一点: 数据的存储是无序的, 而只有数据显示的时候才有顺序, 而且你想, 怎么定义顺序还不都是人自己定义的. 计算机怎么会知道你想要哪行数据显示在前, 哪行数据显示在后.
但是有些计算必须需要清晰的定义顺序才能执行. 我下边来举一个例子.

左侧的截图里的[Sales]是每个Customer的销售额. 而计算的第二列Running Total Sales是累计销售额. 这个累计销售额就是一个表计算.
这个表计算所计算的是累计总和. 在第二行, Running Total Sales显示的是左侧第一行的Sales加上第二行的Sales. 44,095 = 25,043 + 19,052
而到了第三行, Running Total Sales 59,213 = 25,043 + 19,052 + 15,117
在这个时候, 顺序就非常重要了, 哪一行数据出现在哪一行的上边就直接决定了计算的结果.
表计算是唯一需要考虑顺序的计算, 而其他两种则不用考虑.
顺序对于下边这种需要按照时间排序来显示累计销售额的分析至关重要, 它不是简单的数据叠加, 而是一种有序的叠加

至此我要介绍创建计算的第二原则: 如果你所希望创建的计算, 受到顺序的影响, 你需要创建的是一个表计算: Tableau Calculation
小结
基础计算: ✅Worksheet Scope ❌Aggregation ❌Order
表计算: ✅Worksheet Scope ✅Aggregation ✅Order
LOD计算: ❌Worksheet Scope ✅Aggregation ❌Order