Quick BI中lod函数之lod_exclude
一、lod函数简介
LOD函数的全称是详细级别表达式(Level Of Detail Expressisons)。它主要是为了克服一些表达式之间计算颗粒度不一致的问题。比如,要计算第一季度各月销售收入占比,这里分子计算颗粒度为’月’,但是分母的计算颗粒度却为’季度’,这时就有可能用到lod函数。
在Quick BI中lod函数有三个,如下:
lod_fixed{<声明维度>:<聚合表达式>[:过滤条件]}
lod_ include{<声明维度>:<聚合表达式>[:过滤条件]}
lod_exclude{<声明维度>:<聚合表达式>[:过滤条件]}
这三个函数最主要的作用,就是在新建计算字段时,规定内部过滤条件、限定外部过滤条件,指明了分组依据。下面详细介绍一下这三个函数。
二、lod_exclude函数介绍
lod_exclude{维度1[,维度2]…:聚合表达式:[过滤条件]}
- 维度1[,维度2]...:声明维度,指定聚合表达式要去除的一个或多个维度。使用逗号分隔各个维度。必须。
- 聚合表达式:聚合表达式是所执行的计算,用于定义目标维度。
- 过滤条件:内部过滤条件,对数据表进行过滤的条件,非必须。
lod_exclude的执行逻辑:先按内部和外部过滤条件进行过滤,若外部过滤字段属于声明维度则无效,然后进行聚合计算,形成一张虚表,所以lod_exclude函数返回的是一张表,通常需要聚合后才能使用。由于这里是去除声明的维度,因此并没有指定分组维度,所以返回的表只有一行。
三、数据表---《销售单据表》
月份 | 区域 | 客户 | 订单号 | 金额 |
1月 | 南区 | 南A | d001 | 100 |
1月 | 南区 | 南B | d002 | 200 |
1月 | 南区 | 南C | d003 | 300 |
1月 | 北区 | 北A | d004 | 350 |
1月 | 北区 | 北B | d005 | 200 |
2月 | 南区 | 南A | d006 | 200 |
2月 | 南区 | 南C | d007 | 300 |
2月 | 北区 | 北A | d008 | 300 |
2月 | 北区 | 北B | d009 | 200 |
3月 | 南区 | 南B | d010 | 150 |
3月 | 南区 | 南B | d011 | 300 |
3月 | 北区 | 北B | d012 | 450 |
3月 | 北区 | 北B | d013 | 300 |
3月 | 北区 | 北C | d014 | 250 |
四、应用示例
1、示例一:lod_exclude基础用法
- 总金额 = sum([金额])
- 月总金额 = lod_exclude{[区域]:SUM([金额])}
- 北区月总金额 = lod_exclude{[区域]:sum([金额]):[区域]='北区'}
- 北B客户月总金额 = lod_exclude{[区域]:SUM([金额]):客户='北B'}
2、示例二:计算平均订单金额与月平均订单金额之差
- 平均订单金额 = AVG([金额])
- 月平均订单金额 = lod_exclude{[区域]:avg([金额])}
- 季度平均订单金额 = lod_exclude{[月份],[区域]:avg([金额])}
- 平均订单金额与月平均订单金额之差 = avg([金额]) - avg(lod_exclude{[区域]:avg([金额])})
五、小结
Lod_exclude函数
1、接受外部过滤条件,但是若外部过滤字段属于声明维度则无效。
2、没有指明分组依据,所以返回的表只有一行。