Tableau:详细级别表达式(LOD表达式)
在Tableau中,除了有行级别表达式(也叫数据源级)和视图级别表达式(也叫可视化级别)之外,还有详细级别表达式。行级别表达式和视图级别表达式的计算粒度都是确定的。行级别表达式只能在数据源中的每一行上引用非聚合的计算;而视图级别表达式只能在视图功能区定义的维度上对数据源中的数据进行聚合。而详细级别表达式可以跳出这两个限制,在更精细或更粗略,甚至固定维度上进行聚合。另外,行级别表达式和视图级别表..
在Tableau中,除了有行级别表达式(也叫数据源级)和视图级别表达式(也叫可视化级别)之外,还有详细级别表达式。行级别表达式和视图级别表达式的计算粒度都是确定的。行级别表达式只能在数据源中的每一行上引用非聚合的计算;而视图级别表达式只能在视图功能区定义的维度上对数据源中的数据进行聚合。而详细级别表达式可以跳出这两个限制,在更精细或更粗略,甚至固定维度上进行聚合。
另外,行级别表达式和视图级别表达式会在数据源中增加相应的数据,而详细级别表达式不会产生对应的数据。
Tableau中的详细级别表达式主要包括三种:Include型表达式、Exclude型表达式和Fixed型表达式。以下仍然以Tableau中的【超市】数据为例。
1.Include型详细表达式
Include型表达式是指除了视图级别表达式指定的维度外,还可以在更精细的维度上进行计算。但是这个更精细的计算的值并不会显示出来。假设创建如下的Include型表达式【每个客户的销售额】和视图级别表达式【客户平均销售额】:
之后将【地区】拖拽到【行】中,将上述两个表达式拖拽道【列】中,并将【每个客户的销售额】的度量设为平均值。然后以“文本表”的形式展示数据,结果如下:
从上述结果可以发现,这两个计算字段的结果是一样的。基于这个结果可以推断出:当把【地区】拖拽到视图去之后,【每个客户的销售额】这个计算字段已经将每个【地区】中的数据按照【客户 ID】对每个客户的销售额进行了汇总处理(虽然这一层中间结果没有显示出来)。之后将【每个客户的销售额】改为“均值”度量后会直接在这些汇总后得到的结果上进行计算。
在上述Include型表达式中,【客户 ID】已经是数据源中相当精细的维度了。而当Include型表达式中涉及到的维度高于视图级别表达式中的维度时,Include型表达式已经失效了。假设现有如下Include型表达式:
将【子类别】拖拽到【列】中,将【每个类别的销售额】和【销售额】拖拽到【行】中,仍然以‘文本表’的形式显示结果,具体如下:
从以上结果可以看出,这两个字段的输出结果是相同的,这个时候Include型表达式已经没有意义了,数据并没有按照【类别】进行汇总。这也是Include型和Fixed型的不同的一点。所以,Include型表达式的详细级别只能比视图级别更精细或者相同。
2. Exclude型详细表达式
Exclude型表达中指定的维度会从视图级别表达式中的维度上剔除。先来看看各个【地区】的总【销售额】,其结果如下:
创建Exclude型表达式【忽略类别销售额】,具体如下:
将【地区】及【类别】拖拽到【行】中,将【忽略类别销售额】拖拽到【列】及【标签】中,以“条形图”的形式展示,具体结果如下:
我们可以发现,上述每个【地区】每个【类别】的销售额与每个【地区】的总【销售额】的结果是一样的,这就是Exclude型相详细级别表达式。另外,还有一个问题,点击【列】中的【忽略类别销售额】可以发现其使用的聚合函数为ATTR,这主要是因为忽略一个聚合维度一定会产生重复值,用ATTR来指明实际上未发生聚合。
同时,如果在视图级别表达式中并未出现Exclude型表达式中指定的排除维度,或者视图级别表达式中有比Exclude型表达式中指定的维度更精细的维度时,Exclude型表达式失效。
3. Fixed型表达式
Fixed型表达式会忽略视图级别表达中指定的所有维度,只遵照Fixed型表达式中指定的维度进行聚合。使用Fixed型表达式时,无论视图上提供了多少维度,最后进行都只在Fixed型表达式提供的数据上进行计算。假设创建一个Fixed型表达式【类别销售额】,如下:
将【地区】和【类别】拖拽到【行】中,将【类别销售额】拖到【列】中,然后以“文本表”的形式展示数据,具体结果如下:
Fixed类型表达式还有一个特殊用途,当Fixed 后面不加任何维度,或者连Fixed都省略的时候,这就构成了表级别的详细表达式。假设创建一个【总销售额】的表达式,如下。这个表达式会对表中的所有数据求和。
将【地区】和【类别】拖拽到【行】中,将【总销售额】拖拽到【列】中,仍然以‘文本表’的形式展示结果,具体如下:
Fixed型表达式的结果一定是一组重复值,从结果上看,Fixed型表达式的结果与视图完全无关,依据Fixed表达式就可以完全确定其结果。如果Fixed型表达式中指定了维度,那么这个表达式的作用就是按照在该维度上进行聚合操作,以【类别销售额】为例,与其等价的SQL语句为:select 类别,sum(销售额) from ** group by 类别;如果没有指定维度字段,则直接按照表达式对该字段的所有数据进行聚合操作,以【总销售额】为例,与其等价的SQL语句为:select sum(销售额) from **。
其他关于详细级别表达式的内容可以参考另一篇博客:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)