编者按在我学习 Tableau 过程中,详细级别表达式是最大的拦路虎。这篇博客,最早写于 2018 年 8 月,一年时间做了几次重大修改,并增加了续篇。
LOD 表达式是 Tableau 学习过程中特别重要的一关,迈过去,Tableau 的可视化可以变化无穷,根据需要产生非常多的变化。对于缺乏 BI 基础的初学者而言,理解详细级别表达式的难点不在于语法,而在于充分理解它的背景知识(详细级别、聚合度、颗粒度)和它在可视化分析中的位置(多种详细级别的对比)。近期重新梳理自己的学习过程,把几个重点的节点做分析,希望帮到更多的 Tableau 学习者。
注:非特别说明,“详细级别表达式”、“LOD 表达式”均指 Fixed、Include 和 Exclude 三种 LOD 表达式。
理解详细级别与详细级别表达式
一1详细级别、聚合度、颗粒度
理解详细级别表达式(LOD Expression),首先要理解什么是详细级别(LOD=Level of Detail)。详细级别是数据聚合度/颗粒度的层次,英文简单易懂,Level of Detail;不同的 Level,代表不同的数据聚合度、不同的颗粒度。Tableau 通过把维度字段、系统自定义的表达式加入到视图,从而决定视图数据的详细级别,之后通过预设的视图表达出来。
维度、系统预设的表达式(比如表计算)、用户自定义的表达式(比如自定义的集合字段、LOD 表达式)本质上返回的都是一个数据集合,这些数据集合的详细级别,通过不同的视图表达出来。
如何理解上述的过程?为此,我们先要了解何为聚合度和颗粒度。不同于面向行数据的 Excel,Tableau 面向大数据的数据分析和展现,因此我们所看见的数据绝大多数都是聚合的,这就需要我们非常熟悉每个视图代表的数据的聚合程度。这个聚合程度在 Tableau 中用聚合度 Aggregation 或者颗粒度 Granularity 表示。
在 Excel 中,看数据明细;在 Tableau 中,看数据的聚合程度。
Tableau 的不同的 LOD 详细级别,对应的是不同数据的聚合度和颗粒度。
我们换一个形象的说法来表达什么是“详细级别”、聚合、颗粒度。
假定全公司的 HR 薪酬数据是一座冰山,上面是尖尖的数据之巅,下面是沉没在海平面之下的详细到每个人、每天、每项工作的薪酬计算的庞杂数据。通过下面的图,我们可以形象地设想,冰山之巅,就是聚合度最高、颗粒度最低的数据,也是详细级别最低的数据,比如总公司、全年度的薪酬发放金额——可能仅仅是一个绝对值数字而已(数值完全聚合,不能再进一步聚合,可以理解为一个散点图中的一个点)。而越往下,数据的聚合度越低,颗粒度最高,数据的详细级别也就最高,最高颗粒度的数据可能是员工的考勤数据和发放明细(数值完全解聚)。
数据可视化和分析的过程,伴随着数据不断的聚合和解聚,以及数据详细级别的变化。这就是可视化分析的魅力。
在 Tableau 中,每增加一个维度,就意味着数据的详细级别在向下移动,在视图中的标记就会增加,比如说,我们在部门、实发金额的基础上增加其他维度到视图中,视图中的标记就会越来越多,数据颗粒度、详细程度越来越高。比如下面的图片,每增加一个维度或者度量字段,数据的详细级别就会从上向下移动,数据的颗粒度就会增加一层。
维度 | 度量 | 说明 |
部门 | 实发金额 | 各部门实发金额的对比 |
部门、薪酬分类 | 实发金额 | 各部门、各个薪酬分类的实发金额聚合 |
部门、薪酬分类 | 实发金额、实付金额 | 各部门、各个薪酬分类中实发金额和实付金额的聚合 |
部门、员工、薪酬分类 | 实发金额、实付金额 | 各部门、各个员工,各个薪酬分类中实发、实付金额聚合 |
分月、部门、员工、薪酬分类 | 实发金额、实付金额 | 各个月份中,各部门、各个员工,各个薪酬分类中实发、实付金额聚合 |
在 Tableau 中,如何判断操作能引起“视图详细级别”(Viz Level of Detail)的变化?最简单的方法就是看视图中标记的数量。
通常,只要把维度字段或者集字段拖入到视图,Tableau 会根据“可视化详细级别”(Viz LOD)对数据进行聚合,从而引起详细级别的变化。(PS:维度字段拖入到筛选器、工具提示中,可视化的数据范围等会发生变化,但是不会引起详细级别变化。)
2
冰山之喻与详细级别表达式(LOD Expression)
在理解了聚合度、颗粒度之后,我们看一下 LOD Expression 的必要性。
针对上面数据,我们问的每个问题,都对应着一个或者多个 Level of Detail。
简单的问题,比如“看一下各部门年度薪酬总额的对比”,这是一个 Level 的数据,用柱状图可视化,每个柱代表一个部门,通过看高矮对比金额的差异。
如果问题难一点,比如说,“看一下各部门中员工平均薪酬的对比”,继续使用柱状图,柱子依然代表部门,高度代表什么呢?代表员工平均薪酬。可是平均薪酬需要依赖于每个员工的薪酬总额取平均,这个问题的详细级别 Level of Detail 和之前的部门薪酬不在一个级别 Level 上。因此,这个可视化包含了两个不同颗粒度的数据:每个员工的薪酬总额、部门的薪酬平均。这就意味着,我们不能通过一次操作来完成,而需要使用额外的方法增加另一个数据级别。一个视图默认是一个详细级别(Level of Detail),当我们需要展现两个 Level of Detail 时,就需要用到 LOD Expression。LOD 表达式帮助我们解决一个视图中包含多个详细级别的问题。
LOD 表达式的作用是什么?借用上面的冰山的比喻,抽象地说明什么是 LOD Expression。数据是整座冰山,冰山中有我们能看到的各种要素(比如部门、员工、日期等),可视化的部分是在海平面之上的部分。最简单的可视化方式就是把冰山下的要素直接“拖拽”到上面,不管加入多少要素,最终 Tableau 会确定性的返回对应的一个详细级别。而遇到上面的复杂问题,我们需要在 Tableau 返回的确定性的详细级别之外,引用另一个详细级别的数据,同时不想让这个详细级别的要素(维度)出现在可视化的层面,应该如何?
这时 Tableau LOD 提供了一个上升或者下降的通道,实现了“引用但不可见”(比如 Include),或者“可见但局部不引用”(Exclude),甚至可以不受视图和维度筛选影响,直接使用 fixed 指定引用。“引用但不可见”,就是使用 LOD 表达式,可以(在目前的维度基础上)引用冰山一下的字段,让它直接的出现在可视化中,同时不影响可视化原有的框架表达。同样,也就出现一个下降的通道,可以把部分不需要的字段,通过 Exclude 排除掉,同时又不影响冰上可见的部分。
Tableau 详细级别的多种类型与详细级别表达式
二
上面我们介绍了什么是详细级别,也简要介绍了详细级别表达式的作用。这里我们需要特别强调的是,详细级别表达式,并不是独占详细级别(LOD)这个词汇!在 Tableau 中存在多种详细级别,理解它们的相互区别和联系,才能更好的理解详细级别表达式的作用。
简单的说,“详细级别表达式”,只是用来更清晰地处理有关详细级别问题的一种表达式。处理什么问题?处理在一个可视化视图中包含多个数据详细级别的问题(多个详细级别,意味着多个数据聚合度/颗粒度)。
LOD Expressions represent an elegant and powerful way to answer questions involving multiple levels of granularity in a single visualization.
LOD 表达式是回答有关单一视图中包含多个数据颗粒度级别问题的,简洁而强大的方法。
1
Level of Detail 详细级别的多种类型
在介绍 LOD 表达式的类型之前,我们先看看 Tableau 有哪些重要的“详细级别”类型。以我目前有限的理解,Tableau 有三种主要类型的数据详细级别,结合下面的图片,可以看到它们各自的位置。
Table Calc Level of Detail(表计算详细级别)
Viz Level of Detail (视图详细级别,Viz=visualization 视图)
Row Level of Detail(行级别详细级别)
这些详细级别和数据的聚合度、颗粒度对应;越往上,对应的聚合度越高、颗粒度越低。我们最常见的是视图详细级别,表计算是在视图详细级别基础上的二次计算,因此它的聚合度不会低于视图级别;而视图详细级别是行级别的聚合,因此聚合度高于行级别。
我们可以通过两个散点图代表两个极端,当散点图默认只有一个点的时候,详细级别就是下图左上角的位置——数据完全聚合,最低的颗粒度,最低的详细级别;当数据解聚,所有的数据点都转化为数据点,就是右下角的位置——数据完全解聚,最高的颗粒度,最高的详细级别。
这里有一个关键的问题:为什么是三种,而不是包含“详细级别表达式”的四种详细级别?这是我这个小白花了很久才明白的事情:
“LOD 表达式”本身不是一种详细级别,而是一种关于 LOD 的语法表达式,它不会脱离当前的视图详细级别而单独构建视图;通过它,在原有的“视图详细级别”基础上,增加新的详细级别数据。理解了这一点,是理解 LOD Expression 在可视化分析中位置的关键要点。
为了更好的理解,我们在上图的基础上增加了 LOD 的示例图,这里要特别注意两条蓝色的线条,它的意思可以理解为,把 LOD 表达式生成的结果返回到视图层面,从而完成 LOD 表达式的使命——在一个视图中提现多个详细级别的数据。
2
LOD 详细级别表达式的作用
我们了上面介绍了理解详细级别的基础概念:颗粒度和聚合度;并分析了多种详细级别和详细级别表达式的位置。如果用一句话,通俗的讲解 LOD 表达式,不妨用这句话来概括。 “如果分析过程中需要添加一个维度,其明细程度高于或者低于已有视图的可视化明细程度,但又不希望改变现有图形展示内容,可采用详细级别表达式功能。”
相比之下,英文的介绍理解起来稍微有点生涩。官方如此介绍:
详细级别表达式(LOD Expression)提供了对视图详细级别(Viz)之外的数据计算聚合的简单方法,实现在可视化中以任意的方式组合这些数据。
Level of Detail Expressions provide a way to easily compute aggregations that are not at the level of detail of the visualization. You can then integrate those values within visualizations in arbitrary ways.
如果要深刻地理解 LOD 的作用,一个很好的方法是查看“15 大详细级别表达式”查看 LOD 可以实现的功能。比如说:
o 客户订单频率;
o 阵列分析
o 新客户争取率
o 各个销售代表的平均最大额交易数额
o 对比销售分析
为了让更多的人能更好的看懂 LOD 的实际用法,我还结合 LOD 的官方指南和分析方法,做了 15 大 LOD 表达式用法的中文解读。
理解详细级别表达式的关键经验
三
在理解上述的背景知识之后,就可以认真学习详细级别表达式的语法规则了,官方的白皮书讲述的非常清晰。我在这里补充几个关键点,尤其对于初学者大有益处。
1
大括号的语法意义{}
在这里特别需要说明的一个概念是:数组。它代表的是一组数的集合,比如班级中每位同学的身高组成一个数组。在数学中经常中经常用大括号表示,Office 的表格也是用大括号。
比如,用这样的一个数组表示五名同学的身高: {1.69,1.70,1.61,1.81,1.73}。
这是 Tableau 官方教程和帮助文章中,应该给初学者说明的事情,毕竟大部分业务出身来学习 Tableau 的人没有这方面的基础,比如像我。
理解了这个,就明白了为什么总是提示“聚合和非聚合不能混合”,为什么 Fixed LOD 结果可以作为维度,为什么详细级别表达式可以计算每个顾客的平均消费金额。
简单的说,{Fixed [year] : Sum([sales])} 这个表达式,返回的结果是 {1,2,35,499,99} 这样的一组数据,而不是我们习以为常的一个静态数值。
数组不能和数值求
LOD 的大括号
2LOD 表达式在 Tableau 操作中的位置
在理解详细级别表达式的语法之后,还需要结合三种表达式在 Tableau 操作顺序中的位置,才能选择合适的表达式解决实际的问题。
Fixed 可以理解为绝对表达式,它返回的数组仅和语法指定的维度有关,与视图无关,因此特别适合做计算字段并参与到复杂的运算中;而 Include 和 Exclude 可以理解为相对表达式,它们一方面受限于视图中已有的维度,另一方面受限于语法中指定的维度。
特别重要的是,Fixed LOD 表达式先于维度筛选器,这就意味着如果要时计算结果免于筛选器的影响,就要使用这个类型;而 Include 和 Exclude LOD 表达式要受限于视图中的维度,因此操作顺序就要低于维度筛选器。
比如,在下图的 {Min(Profit) } 增加了筛选器,你发现仅保留 2017 年数据时,{Min(Profit) } 结果依然是存在于 2016 年的最小值 1 。
和 Fixed 特立独行的绝对不同,Include 和 Exclude 是相对聚合,也就是说,它们如何影响视图详细级别,是受视图中的维度影响的。
总结
在这里,我们并没有长篇大论 LOD 的语法和规则,而是重点介绍理解 LOD 表达式的背景知识,希望每个人能结合官方的白皮书和语法说明,更好地理解 LOD 表达式的用法,从而制作出变化多端的可视化报表。
全部0条评论
快来发表一下你的评论吧 !