写在最前
很早以前写过一篇关于Tableau详细级别表达式的博客,具体可以参考https://blog.csdn.net/yeshang_lady/article/details/104945361。前序博客重点在于介绍三种详细级表达式,这篇博客主要介绍使用详细级别表达式时的注意事项。
1 LOD表达式与非聚合运算
在未支持详细表达式之前,Tableau表达式中并不能同时支持聚合计算和非聚合计算。如下图:
上述表达式会提示:“无法将聚合和非聚合参数与此函数混用”。而有了详细级别表达式之后,就可以实现上述功能了,如下图:
所以LOD表达式的组成部分中有聚合函数,但Tableau却将LOD表达式看作一个非聚合函数。使用上述计算字段构建如下工作表:
使用上述工作表可以实现各个类别销售额占比的统计,其对应的SQL伪代码如下:
select 类别,sum(销售额/sum_销售额)
from
(select sum(销售额) as sum_销售额 from 示例-超市) a --{sum([销售额])} 计算过程
join 示例-超市
group by 类别
既然LOD表达式可以看作一个非聚合函数,那么LOD表达式就可以继续执行一些聚合操作。具体举例如下:
2 LOD表达式的计算
这一部分主要对详细级别表达式的具体结果进行分析。首先构建如下两个工作表分别计算各个类别产品和各个年份的总销售额数据,具体如下:
各个类别产品的销售额:
各年份总销售额:
创建如下详细级别表达式:
构建如下工作表:
从上述结果中可以看到,【类别销售额】在各个年份上的计算结果完全相同,并且各个年份中各个类别的销售额的计算数据均为整张表中的数据,视图详细级别【订单日期 年】字段并没有限制住Fixed型表达式的计算范围。
另创建如下详细级别表达式:
构建如下工作表:
该工作表(标号2)中各个地区计算的【总销售额_FIXED_省】的值不完全相同。这与上述工作表(标号1)中的按年份计算得出的【类别销售额】完全相同的情况完全不同。结合这两个工作表来分析视图详细级别的作用。具体如下:
- 在第1张工作表中的视图详细级别字段【订单日期 年】中的每个年份都包含三个类别产品的销售数据,具体如下:
- 在第2张工作表中的视图详细级别字段【区域】中,每个区域仅包含部分省份,具体如下(部分截图)。而这些省份刚好也出现在工作表2中对应区域的子图中。
为了构建的Fixed型详细级别表达式【总销售额_FIXED_YEAR_REGION】:
构建如下工作表:
这里仅以【子类别】为【标签】的数据进行说明。从图中可以看到,【标签】对应的【总销售额_FIXED_YEAR_REGION】的值是由22个数据聚合而成。对细分类型为公司,子类别为标签的数据进行如下,可以看到公司-标签的【订单日期年】和【区域】的组合共有22种: