何为详细级别
详细级别,英文Level of detail,Tableau用它来描述计算发生的级别,或者说计算在哪个层级发生。由于BI工具的相似性,在Power BI里也可以用类似的思想对计算进行描述,但Power BI并没有与之对应的专门的词汇。不过,理解详细级别对理解Power BI的计算仍然很有帮助,本文以Power BI为例介绍Tableau中的详细级别和详细级别表达式所传递的思想,理解它可以帮助你加深对BI工具计算过程的理解。
详细级别用来描述计算在哪个级别发生,最常见的两种详细级别是:- Row Level of detail 行详细级别
- Visual Level of detail 视觉详细级别
行详细级别
行详细级别的计算发生在数据源所在表的每一行,并且不进行聚合运算。一个典型的行级别运算可以表示为下面的计算列:Sales by row = SuperStore[Unit Price]*SuperStore[Quantity]
公式在Superstore的每一行计算单价和数量的乘积,得到每行的销售额,保存在一个新的列中。因为计算发生在最底层的明细级别,所以行详细级别的计算粒度最高,聚合度最低(没有聚合)。在DAX中,我们称之为受行上下文筛选的计算。需要注意的是,并不是所有在计算列进行的运算都是行级别运算,比如这个公式:Sum of Sales = SUM(SuperStore[Sales])
聚合函数SUM忽略行上下文,所以公式得到的是所有销售额的总和,这是一个聚合运算,不是行级别运算。视觉详细级别
将度量值或计算列拖入画布,视觉级别的计算就发生了。如果把上文定义的SuperStore[sales by row]计算列拖入画布,选择卡片图,结果显示为一个值。视觉详细级别的计算受所有维度筛选器的共同影响,因为本例中没有其他筛选器,所以它不受任何维度的影响,聚合度最高。你可以向画布或黄色区域增加筛选器,这将改变视觉详细级别将产品类别加入画布,修改图表类型为条形图,现在[sales by row] 的视图详细级别变为产品类别,即,被来自产品类别的筛选上下文影响。由于我们可以在画布中自由的对维度进行添加和组合,所以视觉详细级别可以有非常多的变化,从聚合度最高的单个值到明细级别,用一张图形象的表示:可以看出,从金字塔的顶端到底端,不同的数据详细级别对应了不同的分析需求。看到这里,你可能会发现一个共性,这些分析都是可以直接通过拖拽的方式生成,这可以回答一些简单问题,但是无法解决稍微复杂一些的问题。比如,按产品类别计算平均销售额很容易,如果我们要在当前视图中查看每个子类别的平均销售额并只显示出最大的那个,就不是那么容易了。原因是虽然图表显示的还是By类别的平均值,但发生计算的级别已经下降到了子类别粒度而不是默认的类别粒度。或者,如果需要按薪酬区间统计人数,由于区间这个维度本身不包含在原始数据中,计算的详细级别也会发生变化。想回答这类问题,DAX给我们提供了一个很好的理论框架和一套函数作为工具,而Tableau借助的是图形用户界面和详细级别表达式(LOD Expression)详细级别表达式
详细级别表达式从Tableau 9.0开始加入,在Tableau历史上这被视为一次里程碑式的更新。为什么详细级别表达式如此重要?因为它提供了这样一种可能性:允许用户在不修改视图(图表)的情况下,在计算中指定所需的详细级别,聚合度可以高于和低于当前视图使用的详细级别。也就是说你可以独立于图表所使用的详细级别,自定义另外一套详细级别来执行计算。
实现了这一功能,才真正打开了分析复杂问题的大门。以刚才的平均销售额为例,在没有详细级别表达式之前,必须向视图中加入子类别这个维度才能实现,而借助详细级别表达式,就可以将计算发生的级别定义在公式中。详细级别表达式的关键字类型一共有三种:EXCLUDE、INCLUDE和FIXED,它们以不同的方式改变详细级别的计算范围。Include:以较低的详细级别进行计算
将计算级别指定为低于视觉级别的维度。上面的例子使用Include将平均值的计算从类别维度下移到了子类别。Exclude:以较高的详细级别进行计算
忽略指定的级别后进行聚合,一个典型场景是计算每个类别占总计的百分比,分母使用Exclude忽略类别筛选,始终返回总计值。Fixed:指定确切的详细级别
FIXED参与的聚合运算只考虑所列出的维度,忽略其他条件。比如当需要从订单表中找出每个顾客的首次交易记录时,就需要使用FIXED. 它可以明确定义计算发生的聚合级别。与 INCLUDE 和 EXCLUDE 不同,该关键字可独立于可视化内容所用的维度之外来实现这一目标。FIXED 表达式结果的粒度可能会比可视化详细级别更低或更高,具体取决于 FIXED维度和可视化详细级别之间的关系。由于FIXED忽略其他筛选的特性,使用它定义的度量可以直接转化为维度,很多用过Tableau的Power BI用户都觉得这种度量转维度的操作十分方便,其实Power BI里完全可以执行类似的操作,只不过目前没有图形界面辅助,手工操作的步骤比较繁琐。以上是关于Tableau详细级别表达式的简要介绍,想了解详细介绍可以参考Tableau的官方文档和白皮书,参考文献的链接在文章末尾列出。有奖竞猜
各位读者,如果你是Power BI用户,文章到这里并没有结束,还有一个很重要的问题是:如何在Power BI中实现详细级别表达式这三个关键字的功能?
下面我们模拟一个最简单的情形,提出三个问题,请你用DAX给出解法,基于Orders表定义如下三个LOD表达式,请用DAX给出对应的解:- {EXCLUDE [Customer ID] : SUM([Sales])}
- {INCLUDE [Customer ID] : SUM([Sales])}
- {FIXED [Customer ID] : SUM([Sales])}
- 了解详细级别表达式白皮书
- How Level of Detail Expressions Work in Tableau
- Create Level of Detail Expressions in Tableau
- What's new in Tableau 9.0? Part 2 – Level of Detail Expressions
- 【Tableau】详细级别表达式LOD_详尽入门(1)