本文为您介绍如何使用 LOD 表达式。
LOD 是 Level of detail 的简称,为详细级别表达式功能。详细级别指数据聚合粒度的层次,不同的级别代表着数据不同的聚合度和粒度。
LOD 表达式能够处理在一个可视化视图中包含多个数据详细级别的问题。如果分析过程中需要添加一个维度,其明细程度高于或者低于已有视图的可视化明细程度,但又不希望改变现有图形展示内容,就可采用详细级别表达式功能。
关于 LOD 表达式内如何引用字段
产品支持以下两种字段引用格式,用户可根据实际需求自行选择。更多说明详见数据源字段和数据集字段。
由于 LOD 函数的查询对性能影响较大,因此单个图表中最多同时查询 5 个及以下的含 LOD 函数的字段,当图表中的 LOD 函数字段超过 5 个时,图表将无法保存。
LOD 表达式具有以下结构:{[FIXED | INCLUDE | EXCLUDE] < 维度声明 > : < 聚合表达式 >}
{filter=true:fixed <维度声明> : <聚合表达式>}filter=true:可选参数,若添加此参数,筛选器中设置的维度筛选条件(如地区、颜色等)和指标筛选条件(如销售额 > 1000 等),都会作用于 fixed 函数的聚合计算过程filter=true,则 fixed 函数的计算将忽略所有筛选器,直接基于全部原始数据进行表达式 |
|---|
sum({include |
sum({include [地区]:sum([销售额])}) |
sum({include [地区]:avg([销售额])}) |
sum({fixed [地区]:avg([销售额])}) |
sum({exclude [地区]:avg([销售额])}) |
sum({avg( |
sum({fixed:avg( |
sum({include [地区]:sum([销售额])+sum([数量])}) |
sum({fixed [地区]:sum([销售额])+avg([数量])}) |
avg({ include case when [细分]='公司' then 1 else 0 end: sum([销售额])+max([数量])}) |
sum({fixed [地区]:avg([销售额])}+[折扣]) |
sum({include [地区]:avg([销售额])}+[折扣]) |
表达式 |
|---|
{fixed [地区]:avg([销售额])} |
{ fixed case when [细分]='公司' then 1 else 0 end: sum([销售额])+max([数量])} |
{ fixed case when [细分]='公司' then 1 else 0 end: sum([销售额])} |
{ fixed case when [细分]='公司' then 1 else 0 end: sum([销售额])} |
FIXED 详细级别表达式使用指定的维度计算值,而不引用视图中的维度。
{fixed **省份**:sum(**利润**)}
维度为 **省份** 加 **城市**,但由于 FIXED 详细级别表达式不考虑视图详细级别,因此只使用计算中引用的维度,在本例中为 **省份**。出于此原因,您可能会看到各省份中单个城市的值是相同的。
我们经常会遇到“客户购买频次”分析,通过查看客户购买次数的数量和分布,来分析客户的复购黏性。
命题:客户的购买频率分布,即购买过一次、两次、三次……的顾客分别多少。
客户 id:uniq(订单 id)}在视图中,我们使用了购买频次和顾客的计数。这是用一个数值去区分另一个数值,LOD fixed 可以轻松地把一个度量转化为维度,这是 include 和 exclude 不能做的。
“表范围详细级别表达式”只是省略了维度限定,其实就是没有维度声明的 fixed 详细级别表达式。因此,我们可以把“表范围详细级别表达式”视为最简单的详细级别表达式。

INCLUDE 函数可以对聚合函数进一步细分,更精准地进行计算。其包含两个参数,表达式为 {INCLUDE [维度a]:聚合函数([指标b])},意为根据维度 a 将指标 b 聚合计算。
例如,表达式 {INCLUDE [客户 id]:avg([销售额])}意为,根据客户 id 计算平均销售额。在应用场景中,将 [地区] 放到维度上,下图三个指标分别代表的含义为:
在计算过程中,首先计算出每个客户的平均销售额(该客户销售总额/该客户订单数量),再对该地区中每个客户的销售额求算术平均(平均销售额加总/客户数量)。
以东北为例,先计算东北里面每个客户 id 对应的平均销售额,再计算东北里面全部客户平均销售额的平均值为 1547.5217。
EXCLUDE 详细级别表达式声明要从视图详细级别中忽略的维度。
EXCLUDE 详细级别表达式对于“占总计百分比”或“与总体平均值的差异”方案非常有用。
以下详细级别表达式从 [销售额] 的总和计算中排除 [省/自治区]: {exclude [省/自治区]:sum([销售额])}
{exclude [省/自治区]:sum([销售额])} 为对应地区的销售额总和。
在进行机房配额管理时,需要按照 psm 分组,获取 psm 下各机房近 7 天的容量最大值,并按照 psm进行分组求这个最大值之和,同时展现最大值总和,以评估各 psm 和机房总配额容量。
针对此类需要二次聚合的场景,可以使用 LOD 函数进行处理。
本案例中,已有每天各 psm 各机房的配额数据,但使用资源每天会波动,而保险起见,实际给予的配额应大于近 7 天的最大资源配额(每个 psm 下有多个机房)。
因此在本案例中,聚合的思路如下:
{fixed [机房-演示],[psm-演示]:max([cpu配额])}说明
依据机房和 psm 字段聚合,求 cpu 配额字段的最大值。由于筛选选定了最近 7 天,所以求出结果为最近 7 天的最大值。



背景 :如图所示为一张订单粒度的数据集,具有每笔订单的详情数据,包括订单 ID、订单发生的省份、订单金额等。
需求:根据省份聚合,计算各省份的总销售额(付款金额之和),并查看此数据(即各省销售额)的分布。分布:查看在0(20w、20)40w、40(60w、60)80w、80~100w、100w以上这些区间内的分布,即销售额在这些区间内的省份数量。
本案例的难点在于,数据集是订单粒度的,而需求查看的分布数据是省份粒度。因此需要依据省份聚合后,再做二次处理,查看分布数据。
聚合的思路如下:




