何为详细级别
详细级别,英文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]计算列拖入画布,选择卡片图,结果显示为一个值。视觉详细级别的计算受所有维度筛选器的共同影响,因为本例中没有其他筛选器,所以它不受任何维度的影响,聚合度最高。

详细级别表达式
详细级别表达式从Tableau 9.0开始加入,在Tableau历史上这被视为一次里程碑式的更新。为什么详细级别表达式如此重要?因为它提供了这样一种可能性:允许用户在不修改视图(图表)的情况下,在计算中指定所需的详细级别,聚合度可以高于和低于当前视图使用的详细级别。也就是说你可以独立于图表所使用的详细级别,自定义另外一套详细级别来执行计算。
实现了这一功能,才真正打开了分析复杂问题的大门。以刚才的平均销售额为例,在没有详细级别表达式之前,必须向视图中加入子类别这个维度才能实现,而借助详细级别表达式,就可以将计算发生的级别定义在公式中。
Include:以较低的详细级别进行计算
将计算级别指定为低于视觉级别的维度。上面的例子使用Include将平均值的计算从类别维度下移到了子类别。
Exclude:以较高的详细级别进行计算
忽略指定的级别后进行聚合,一个典型场景是计算每个类别占总计的百分比,分母使用Exclude忽略类别筛选,始终返回总计值。Fixed:指定确切的详细级别
FIXED参与的聚合运算只考虑所列出的维度,忽略其他条件。比如当需要从订单表中找出每个顾客的首次交易记录时,就需要使用FIXED. 它可以明确定义计算发生的聚合级别。与 INCLUDE 和 EXCLUDE 不同,该关键字可独立于可视化内容所用的维度之外来实现这一目标。FIXED 表达式结果的粒度可能会比可视化详细级别更低或更高,具体取决于 FIXED维度和可视化详细级别之间的关系。
有奖竞猜
各位读者,如果你是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)