从最简单的LOD计算开始: 零精度LOD计算

我们首先从数据集级别的LOD计算开始.当你把整个数据集统统考虑进去的时候, 你没有任何精度, 我管这个叫零精度. 因为你只知道一个总数, 其他什么都不知道

比如我不管什么区域, 也不管哪个订单, 我就是想要把整个数据源里边所有的销售额加起来, 就是那个总和. 你给我100行数据, 我就想知道这100行的sales加起来是多少. 你给我100万行, 那我就想把这个100万行的sales加起来. 这是最简单粗暴的计算, 也是精度最低的计算, 因为这个总数没有任何精度.

接下来我以整个数据的所有销售额总和为例, 来解释一下LOD的语法.

{FIXED: SUM([Sales])}

LOD的最外层是尖括号{ }, 这告诉Tableau这个计算是一个LOD 计算
FIXED: fix是固定的意思, FIXED就是锁定在这个精度的意思
请注意FIXED的后边什么都没有然后就直接冒号了: 这代表我并没有精度要求. 换句话说, 你对Tableau的要求是包含所有数据.
SUM([Sales]): 计算[Sales]这一列数据的数值的总和

这个表达式返回的结果就是, 无论数据当中有多少行, 把每行的[sales]这一列的数据加在一起

LOD的语法解析

对于LOD表达式来说, 你可以将其简单的分为冒号前和冒号后. 冒号前主要是要求锁定的精度. 冒号后边是计算方式.

在下边这个动图里我们可以看到, 整个数据源当中, 所有订单的销售额总和是2,326,534. 我们创建完LOD之后的总和也是2,326,534. 这表明两者的结果一致

一般情况下,当我把Region添加到Filter之后, 结果会出现变化. 正常的Sum(Sales)返回的结果会随着Filter的变化而变化,但是我们创建的LOD Total Sales确并不会.它不会受到filter的影响

在上边这个动图的结尾, 我留了一个小彩蛋,那就是在Tableau当中, 当我把LOD Total Sales前边的SUM切换成Avg之后, Tableau中的显示结果并没有发生变化. 这里就有了两个问题?

第一: 为什么数值没有变化?

第二: 为什么我在LOD里边已经有SUM了,当我把它拖拽到Tableau中外边就又加了一个SUM呢?

这两个问题我将在后边一并揭晓

练习

到了这里, 你就可以进行我们之前所讲过的第一个练习. 使用LOD计算出整个数据集当中最早和最晚的订单日期也就是[order date]

难度升级:区域级别的总销售额 Region Level Total Sales

如果你认为到这里LOD就结束了的话,那你就太天真了. 我在前边所展示的是LOD最最简单的使用情景, 接下来我们要开始探索LOD更复杂的情况.

在之前的部分, 我们在LOD计算FIXED部分的后边并没有包含任何东西, 而是直接就加了引号. 那没有加任何东西的含义也就是没有控制精度. 没有精度就是所有数据,有多少算多少.

现在我们将对这个要求进行升级: 我需要知道每个区域的总销售额, 并将这个数值锁定. 那么在之前LOD计算的基础上, 我们需要在FIXED的后边加入列[Region]. LOD计算也就变成了:

{FIXED [Region]: SUM([Sales])}

从表达式的本身来看, 通过在Fixed后边添加[Region], 我们将精度从全数据集调整到了区域级别. 我们所计算的是每个区域的总销售额.

接下来, 我把SUM 改变成AVG, 然我们看看计算会有什么变化

当我们创建好LOD Region Total Sales之后, 此时我们还不太能看出它和我们之前的普通计算SUM([Sales]) 有什么区别. 那么我们从最简单的情况开始探索.

首先我把它拖拽到文字卡片上. 它显示的结果还是2,326,534 没有变化.

在这里可以非常明显的看到AVG(LOD Region Total Sales)的数值非常大, 而之前的AVG(Sales) 数值非常小

此时左侧的LOD 代表的是每个区域的总销售额, 我们给这个计算取平均值, 它返回的四个区域的总销售额的平均值. 它的背后是这张图

那么我们再来看AVG(Sales) 由于我们没有指定任何图表的精度. 那么之前SUM(Sales)的结果是把数据当中每一行的销售额加起来, 那现在替换成AVG就是把数据当中每一行的销售额加在一起, 再除以一共多少行所得到的平均值. 那么这个平均值代表的是什么呢?

它所代表的是每一行数据加起来[sales]这一列的平均值. 而每一行sales代表什么呢? 代表的是一个订单下, 一种产品的销售额. 一百万行的[sales]都加起来 再除以一百万行