详细级别表达式(LOD)是我学习Tableau路上迄今最大的拦路虎,在做零售的会员分析时,我不断地重读官方指南扩展LOD前后的知识,不断练习在试错中改进。在上一篇数据练习的基础上,我想这一篇总结一下理解和应用Tableau之LOD的关键。

我总结,理解LOD的关键有三个:

  • 什么是LOD?(详细级别)区分 行级别与视图级别;
  • 理解LOD表达式的功能,及LOD表达式与维度、度量的关系;
  • 理解不同类型LOD表达式在Tableau操作中的位置

 

一、LOD表达式与视图详细级别

1、何为详细级别(LOD)

首先回顾一下上一篇的重点,什么是LOD?LOD=level of detail,代表数据的详细级别,不同的详细级别,对应不同的数据聚合度和颗粒度。最高的数据颗粒度就是行级别的数据,最低的颗粒度则对应着一个完全聚合的数值;中间的数据颗粒度就是常用的视图可视化详细级别(Viz LOD)。

一般来说,在Tableau中,一个视图对应着一个视图详细级别,比如我们把year、area、profits三个字段加入视图,那么视图的详细级别就是每年每个区域的利润额汇总。在主视图详细级别之外,我们可以使用LOD表达式,引入另一个详细级别的数据。

关键词:详细级别……增加维度……标记数量增加

在 Tableau 中,我们将主可视化聚合级别称为其“详细级别”……向视图中添加维度来增加标记数量的过程称为设置详细级别。……某些情况下,向视图中添加度量可能会增加视图中标记的数量。但这与更改视图的详细级别不同。

说到这里,我们说一下官方帮助中的一句话:“放在(下图方框中)任何位置中的维度和集字段组成视图详细级别。”因为维度和集字段会形成可视化聚合视图。

1 calculations_lod_shelves

更改详细级别,需要增加维度(维度或集字段);而不是度量。

2、LOD表达式与视图详细级别

看一下下面的图,LOD能方便快捷地帮助我们返回另一个详细级别的数据聚合——不管是高于当前的视图详细级别,还是低于当前的视图详细级别,从而实现在一个视图详细级别中包含两个数据详细级别的数据。

Screen Shot 2018-10-20 at 13.54.48

LOD表达式并不是一种详细级别,而是在当前视图详细级别增加另外的详细级别聚合的计算语法。它和表计算不同的是,LOD计算是基于数据源的,因此每一个LOD表达式都会从数据源引用一次并计算;而且LOD计算的优先级比表计算要高。

在之前的数据中,我们都没有做筛选器,下面,我们看一下筛选器对LOD计算的影响。

 

二、筛选和操作的顺序

初学者不能充分的领会LOD表达式,特别是fixed 和 include/ exclude的区别,一个重要的原因是没有清楚它们在整个操作顺序中的位置( the Order of Operations)。关于操作顺序,不妨看一下下图,我用浅色代表筛选器,深色表示维度和表达式等。

筛选器和操作顺序.png

这个筛选器和操作顺序里,关键是LOD表达式的相对位置——Fixed LOD表达式在维度筛选器之前,而include /exclude LOD在维度筛选器之后。所谓的include和exclude,是基于当前视图的维度的,在当前视图中增加一个新维度,或者排除一个已有的维度。

也就是,fixed按照语法中指定的维度(如果没有维度,则为表范围所有数据,比如{ MIN([profits])}  ),在可视化之前执行数据的聚合,而不引用视图中的任何其他维度;而include /exclude则是从维度筛选器基础上,纳入不在视图中的维度include把不在视图中的维度引用到视图数据中,但不改变视图本身,或者排除视图中的维度exclude把视图中的维度排除后计算,但不改变视图本身的维度引用

结果就是,fixed LOD返回的聚合结果,聚合度可以比当前视图高,也可以低;而exclude返回的结果聚合度必然比当前视图的详细级别高,include则相反。

Screen Shot 2018-10-20 at 13.54.48

于是就可以理解官方的介绍,“借助详细级别表达式,无需实际将这些维度拖入可视化内容中, 您即可确定在计算中使用的详细级别(即维度)。 您可以独立于可视化详细级别, 定义应以什么详细级别来执行计算。”——不拖拽字段影响视图,又通过LOD表达式背后引用数据。视图是用户看的见的,计算则是隐藏其后的逻辑。

FIXED 详细级别表达式使用指定的维度计算值,而不引用视图详细级别,也就是说,不引用视图中的任何其他维度。FIXED 详细级别表达式还会忽略除上下文筛选器、数据源筛选器和数据提取筛选器之外的所有筛选器。
示例:{ FIXED [Region] : SUM([Sales]) }
官方参考请参见 FIXED 详细级别表达式

INCLUDE
除了视图中的任何维度之外,INCLUDE 详细级别表达式还将使用指定的维度计算值。
在纳入不在视图中的维度时,INCLUDE 详细级别表达式最有用。
示例:{ INCLUDE [Customer Name] : SUM([Sales]) }
官方参考请参见 INCLUDE 详细级别表达式

EXCLUDE
EXCLUDE 详细级别表达式从表达式中显式移除维度,也就是说,这些表达式从视图详细级别中去除维度。在排除视图中的维度时,EXCLUDE 详细级别表达式最有用。
示例:{EXCLUDE [Region]: SUM([Sales])}
官方参考请参见 EXCLUDE 详细级别表达式

 

三、LOD不同类型的语法

详细级别表达式具有以下结构:

{ [FIXED | INCLUDE | EXCLUDE]  <维度声明>   <聚合表达式>}

  • FIXED | INCLUDE | EXCLUDE 是定界关键字,制定了LOD的范围;
  • <维度声明>,指定聚合表达式要联接到的一个或多个维度。使用逗号分隔各个维度。
  • : 冒号用于分隔维度声明与聚合表达式。
  • <聚合表达式>,聚合表达式是所执行的计算,用于定义目标维度。

1、Fixed: 指定确切的详细级别

在可视化图形中没有的维度,使用FIXED最好不过。

详细级别表达式还为完全独立于可视化详细级别,创建聚合级别提供了可能;此前 这一功能只能通过自定义 SQL 来实现。

“FIXED 关键字可让我们明确定义计算的聚合级别。 与 INCLUDE 和 EXCLUDE 不同, 该关键字可独立于可视化内容中所用的维度来实现这一目标FIXED 表达式结果的粒度可能会比可视化详细级别更低或更高,具体取决于 FIXED 维度和可视化详细级别之间的关系。”

屏幕快照 2017-08-13 下午11.34.30.png

这个在“标记”使用最好不过了,把可视化内容之外的维度,通过fixed表达式执行计算,然后通过“标记”的颜色或者文本等方式添加到可视化图形中。从而增加可视化的展示维度。

在十大LOD表达式中,第一个是计算客户订单量的分布,使用了fixed指定customer ID维度,然后计算Order ID的计数。fixed LOD表达式返回一个数组,把它作为维度。

Screen Shot 2018-10-22 at 07.20.34

Screen Shot 2018-10-22 at 07.20.45

2、Exclude: 以较高的详细级别进行计算

EXCLUDE 关键字的关键点在于: Tableau 会先从可视化详细级别中删除排除的维度并执行计算,假设该维度完全不存在。 然后将相关结果直观显示出来。

我在做品类分析时遇到一个问题,我要计算每个品类的占比(总额百分比),同时希望在维度筛选之后,占比依然不变;可是表计算不能实现我的目的(表计算的优先级低于维度,维度筛选之后,表计算重新按照可视的维度计算)。(这个在15大LOD用法中有案例)

于是,我就需要锁定计算品类占比时的分母,就可以使用exclude表达式,在视图级别中删除这个维度,从而计算全部分类的聚合,这样比例成为唯一值,而不会在筛选部分分类时发生变化。

屏幕快照 2017-08-13 下午11.38.06.png
使用exclude表达式,将视图中的「一级分类」字段排除在计算之外

下面,我们可以看一下exclude的执行逻辑,换句话说,它可以上钻数据的分类

屏幕快照 2017-08-13 下午11.41.13
使用 EXCLUDE 详细级别表达式将从计算中排除指定的维度。

3、 Include: 以较低的详细级别进行计算

参考Exclude,Include正好相反,它在可视化图形中向下分解更细的维度,颗粒度更高。它可以解决此前我遇到的问题,也就是此前[profit]/[sum]    和 sum([profit])/sum([sales])的不同之处。

(2018/8/30) 更低的详细级别(low level of detail ),意味着更低的聚合度,更高的颗粒度。

四、注意

  • {}大括号代表详细级别表达式,也代表数组的概念,因此,即便在大括号中冒号后面使用了sum等聚合函数,它依然是聚合之后的一个数字,作为数组中的一个数字而非聚合;所以我之前经常出现报错,我误以为大括号后面有一个sum,大括号就是一个聚合值;
  • 区分筛选器和筛选。

 

完整的LOD学习,请按照以下顺序阅读:

  1. 【Tableau】详细级别表达式_从0到1的入门
  2. 【Tableau】详细级别表达式_位置与语法
  3. Tableau|LOD详细级别表达式终极实操
2017年8月21日 修改V2.0
2017年8月23日 修改V2.2
8 May 2018 小修小补 V2.3
21 Oct 2018 修订