做过好几场的培训,在讲到表计算的时候,会说是基于视图内数据的计算,讲到LOD计算的时候会说是基于计算公式中指定维度的内容进行的汇总计算,类似于后台专门做了一个表。这样的解释也没有什么错的,但是可能学员们在理解上总是有点小问题。今天正好想到这个问题,就用文字再重新梳理下表计算与其他计算的区别。
两种计算最重要的区别是发生的环节不同。用如下的图来说明:
其中
步骤1:代表Tableau基于视图上的内容产生query发到数据库中
步骤2:数据库基于query的内容算出相应的计算结果。我们的聚合计算、LOD的计算发生在这里。
步骤3:Tableau会产生一个临时表,该临时表记录了视图数据内会使用的维度和度量信息。
步骤4:步骤3的内容加载到Tableau后,基于该数据再进行表计算
步骤5:呈现可视化视图
很明显从该计算中能得出,LOD或者其他计算的发生环节在Tableau产生query中,根据这些计算产生临时表,在这些临时表的基础上进行表计算。这也就解释了,为啥你筛选掉了一些数据,表计算的结果就变化了。
用个简单的例子说明下,例如:计算每个省份的销售额占比。这里我们看到四川的销售额占比为2.508%
然而,当我用了个地区的筛选后,筛选里拿掉了东北和华北。这时再看到四川的销售额占比。明显销售额占比变大了,因为我的分母里面拿掉了东北和华北数据内容。
这个问题接下来就转变为,我们怎么让分母永远变成全国的,这个分母的数据不会根据筛选而变化。这时候,救世主一样的LOD就出现了。我们可以写成fix:sum(销售额)。如下截图:
这时候,我相信有小伙伴会问,为啥要有min,不写为什么会报错?fix针对于所有的字段内容算出整体的销售,你可以想象下类似于针对于底层的表新增了一个字段,这个字段内容是整体的销售额数字。基于此,分母按照每个维度计算汇总时候,只要拿一个数据出来即可,这里就用min和max,average都行的。分母即按照每个维度计算出销售额,sum(销售额)。
以上内容也许有不完善的地方,欢迎大家补充。