在学习LOD表达式的过程中,我们频繁的遇到计算的相关问题。LOD表达式和表计算什么区别?如何选择合适的计算?操作顺序(查询管道)到计算的影响是什么?只有全面的了解了计算的相关知识,才能更好的用好LOD表达式和表计算。

本文中,会结合Tableau官方文档,总结三种计算的区别与使用建议。

1、Tableau的计算

Tableau有三种计算:基本计算、LOD表达式计算和表计算。每种计算适合于不同的情形,最难的是如何选择正确的计算方式。

三种计算的区别

  • 通过“计算字段”增加的新字段,会作为数据源的一部分;
  • “表计算能够为每个数据分区(单元格、区、表)输出多个值,而基本和 LOD 表达式则只能为每个数据分区或分组输出单一值。”比如total计算,根据分区和寻址,返回多个值。

计算在数据源和分析中的位置

  • 基本计算和LOD表达式是向数据源查询的计算,返回一个结果集,是在数据源层面计算的。统称为custom calculation, 生成的结果是custom filed(自定义字段) ,字段在哪里?字段是在数据源层面的。
  • 基本计算和LOD计算是在数据源层面的计算,部分字段具有全局意义,比如创建一个成本字段,[cost]=[sales]-[profits],这个行级别字段在商品明细行级别是有意义的,在聚合后也有意义;但是大部分不像维度或度量字段具有全局的意义,这些自定义字段的意义受限于视图。计算字段,比如sum([cost])=sum([sales])-sum([profits]),通过把聚合计算加入视图,可以让Tableau自己决定在哪个层面执行聚合;再比如创建LOD计算字段,{fixed [customer ID]: avg([sales])},虽然也会在数据源层面创建,但是行级别的这个字段是没有意义的,只有在会员详细级别或相关的视图级别上才有意义。
  • 表计算table calculation 是对视图详细级别(viz level of detail )聚合结果的二次计算,既然是视图详细级别,它要求的数据必须是聚合计算。它生成的是什么?是结果集,而且立刻在视图上显示。并没有在数据源层面创建字段或者有所影响。

表计算的独特用法。

某些方案下只有表计算有效。这些方案包括:

  • 排名
  • 递归(例如,累计总计)
  • 移动计算(例如,移动平均)
  • 内部行计算(例如,期间对照计算)

我们用一个思维导图来表示三种计算的区别,可以如下:

 

表计算

2、如何选择计算

最难的地方,最重要的地方,是如何选择适合的计算方法,在Tableau的博客中给出了详细的指南。简单的说,如下三点:

  • 特殊用法、数据齐全,则优选表计算,因为表计算更快,与数据源无关;
  • 多个数据详细级别,使用LOD表达式;
  • 使用基本字段增加新字段,比如比率、达成度等。

如何选择计算类型

在这个基础上,我们详细说明在选择时的思考过程。

A、判断是否属于特殊计算,如果属于以下特别计算,只能使用表计算

表计算和其他计算最大的区别,在于它能以一个表达式,在每个数据分区(单元格、区、表)返回多个数值。清晰地理解这一点,才能明白为什么只有表计算才能满足下列特别需求:

  • 排序 ranking
  • 递归 Recursion
  • 移动计算 Moving Calculation
  • 行内计算 Inter-row calculation

这几个计算,都是返回多个值,最简单的比如排序,一个rank()可以为视图中的一百行数据返回100个数值,这是基本计算和LOD计算做不到的。

什么是递归(recursion)?就是在计算中自己引用自己,大家可以看这个“德罗斯特效应”示例图。比较典型的使用就是累计求和,total。
更多介绍,可以参考这篇英文博客,Cumulative Total  

递归 德罗斯特效应

移动计算Moving Calculation,包括移动平均计算,更多介绍,可以参考Wikipedia。

 

B、没有A的情况,如果视图详细级别具有所有的相关数据,那么就直接使用表计算。

在判断是否视图具有所有数据时,一定要区分聚合数据和非聚合数据,比如我们有一个各个子分类销售额的散点图,需求是计算各子分类的总额百分比,貌似我们拥有相关的数据,其实不在一个详细级别,总额百分比需要计算聚合的占比,散点图的数据不是聚合,需要先执行聚合(颗粒度降低)。

如果视图层面没有需要的数据,怎么办?其实应该首先把相关的数据字段拖入视图,如果数据颗粒度完整,重新尝试表计算。常见的表计算已经在快速表计算预设了。

Screen Shot 2018-10-03 at 08.30.32.png

C、如果拖入现有字段不能解决问题,那么就需要通过增加新字段解决,如果只有一个聚焦点,选择基本计算,或者有两个聚焦点,选择LOD计算。

当然,很多时候,需要在生成新字段之后,返回到表计算。因此上面的简图可以这样表达。

如何选择计算类型 升级

3、总结

根据上述的总结和个人经验,做了一个对比表,后期在不断完善和升级。

Screen Shot 2018-10-03 at 08.32.51.png

另外说明以下,应该在学习LOD之前,先学习如何选择不同的计算。

 

参考:

推荐阅读英文blog,A Handy Guide to Choosing the Right Calculation for Your Question,或者阅读中文翻译(思维导图未翻译,可以参考上图)

选择计算方法 盗图 英文.png

 

Tableau-TC系列

3 Oct 2018 update
7 Oct 2018 修改图片错误/感谢 「爱上深呼吸」