我们已经学过的计算类型
如果想要解释明白表计算, 那我就得先解释明白表计算里边当中的这个表字. Tableau当中的计算我们已经介绍过了基本计算, 也介绍过了LOD, 那么我们在介绍新的计算之前, 先稍微回顾一下之前已经学过的这两种计算.
基本计算
基本计算就是一种在一列的基础上, 我们额外创建一列的计算. 这一列的结果呢是基于我们数据当中已经存在的一列. 你比如, [Sales]*10, 在Sales这一列的基础上乘以10, 得到一个新的列. 再或者, 我们有一个日期列 [Order Date], 我们在Order Date的基础上计算这个日期所在月份的月初或者是月末.
LOD计算
基本计算的基本特征: 一行对应一行
如果我以左边的表格为例, Column C: 10 Times Sales是Column B Sales乘以10
如果我们Column C的第一行1000. 首先基础计算只对应一行, 也就是Column B Sales等于100 那一行. 它既不考虑100上边那一样, 也不考虑100下边那一行.
这个非常好理解
左边的案例就是一个简单的LOD. 如果和前边简单计算进行对比我们就能发现, LOD不再只关注一行, 而是要把所有行都考虑到, 然后再进行一个聚合, 根据LOD表达式里边的要求进行计算.
比如在FIXED: MAX([Sales]) 当中, 我们的LOD计算要考虑到数据源当中[Sales]这一列的每一行, 然后再进行计算, 找到那个最大值900
接下来我要着重再提一点
如果我打乱Sales这一列的顺序, LOD的结果会不一样吗?
在左边的这个截图当中, 我把300, 400, 200这三行的顺序调换了一下, 但是这时候你会发现,这一列的最大值还是900, 即使我把900从最后一行掉到第一行, 那么这个结果还是不会发生变化. 就像是一个班级里边最高的同学, 无论你给他安排到哪坐着,他始终是全班最高的.
那么到这里我们就可以看出对LOD来讲, 最重要的是范围, 而范围内部的顺序完全无所谓
接下来我们就要来到表计算了. 在讲表计算之前, 我们先要知道两个知识点
第一个知识点就是, 数据的存储是无序的.
和你想象的不一样, 数据是随机存储在我们的硬盘和内存里的, 它们在存储的时候并不是规规矩矩码好的. 那么理解了这一点,你就能明白数据内在是没有顺序的. 换句话说, 每一行数据和另一行数据之间没有一定的顺序必须谁在前谁在后. 而这个顺序只有在你把它们提取出来查询的时候才存在.
换句话说, 数据的顺序是使用者赋予的. 你认为一月份应该排在二月份前边, 这是人类制定的规则, 但是在计算机的世界里, 1月份和2月份是平等的, 不存在谁前谁后这一说
在理解了第一个知识点之后, 我们就来到了第二个知识点: 在表计算的这个名字当中什么是表?
储存无序, 表格有序
虽然数据的存储是无序的, 但是数据的查询是有序的. 以上边这两个截图为例. 这是两张完全不同的表, 即使它们的数值都是完全一样的, 但是因为顺序不同, 所以它们就是不同的表.
那么在表计算当中, 这个表就是你在Tableau当中已经创建了一个数值确定, 顺序确定的表格. 注意哈, 我指的可不是数据源, 因为数据源是储存数据的, 而数据的储存是无序的. 但是在Tableau里, 你要给它展示出来, 那这个展示会根据你的要求进行排序
总结一下在了解了上边这两个知识点之后, 你应该大概能猜到了, 你要想创建一个表计算,你得现在Tableau里边创建一个表才行
一个简单的表计算: Running Total
如果再用文字讲的话就太干了, 我接下来用一个例子开始来认识这个全新的计算类型, 表计算
左边的这个截图是一个再简单不过的表计算, 在这个表计算里Year, Sales是表
而Running Sum of Sales Along Table (Down) 就是那个表计算
这个计算在2021年返回的是2021年的sales
在2022年计算的是2021年加上2022年的Sales
在2023年是2021加上2022加上2023年的sales总和
到了这里, 我要开始讲组成一个表计算的所有要素了.
表: 你需要有这么一个表, 这个表不能是一行, 肯定是多行, 这就是表计算的第一个要素
范围: 我们表当中的第一行是2021年, 从2021年一直计算到2024年, 这就是范围, 我们不是从第二行开始算, 而是从第一行开始的, 从第一行到第二行然后一直到最后一行, 每一行都包括在内了, 越往下, 包含的行数越多, 这就是范围
顺序: 顺序是指我们的数据是按照时间顺序排列的, 注意哈, 这里的顺序指的是表当中数据的顺序
方向: 方向是表计算当中的最后一个要素, 在上边的这个截图当中, 我们所看到的计算方向是从自上而下的, 而不是自下而上的, 否则的话, 2,326,534就不会出现在最后一行而是应该出现在第一行了
写到这里我想你已经可以看出表计算和我们之前学过的计算有什么不一样,以及在定义一个表计算的时候, 我们需要考虑哪些元素了. 如果你的表计算和预期的结果不符, 那么一定是这些元素当中的一个出了问题.
我之所以没有直接开始像其他教程一样直接开始写怎么设置表计算, 介绍有哪几种表计算就是因为很多同学还根本没弄明白表计算和其他计算到底有什么区别. 有的可能LOD都还没捂热乎呢. 可能搞不好需要用表计算的时候还在那憋LOD呢. 那你能不出问题么.
我在这一课还想强调的是, 表计算是跟着你所创建的表走的. 没有表就没有表计算. 因为表不确定, 你数据的顺序就没法确定, 你表计算的方向就没法确定, 所以表是根本, 计算是附属. 很多同学没有明白这一点. 即使你的表计算是一个表达式, 但是如果你的表变了, 即使是同样的表达式, 得到的也将是完全不同的结果