乐趣区

关于前端:精读什么是-LOD-表达式

LOD 表达式在数据分析畛域很罕用,其全称为 Level Of Detail,即具体级别。

精读

什么是具体级别,为什么须要 LOD?你肯定会有这个问题,咱们来一步步解答。

什么是具体级别

能够尝试这么提问:你这个数据有多具体?

失去的答复可能是:

  1. 数据是汇总的,道歉看不到细节,不过如果您正好要看总销量的话,这儿都给您汇总好了。。
  2. 具体?这间接就是原始表数据,30 亿条,这够具体了吧?如果感觉还不够具体,那只好把业务过程再拆分一下从新埋点了。

具体水平越高,数据量越大,具体水平越低,数据就越少,就越是汇总的数据。

人很难在具体水平很高的 30 亿条记录里看到有价值的信息,所以数据分析的过程也能够看作是 对数据汇总计算的过程,这背地数据具体水平在逐步升高

BI 工具的具体级别

如果没有 LOD 表达式,一个 BI 查问的具体水平是齐全固定的:

  • 如果表格拖入度量,没有维度,那就是最高具体级别,因为最终只会汇总出一条记录。
  • 如果折线图拖入维度,那后果就是依据这个维度内别离聚合度量,数据更具体了,具体粒度为以后维度,比方日期。

如果咱们要更具体的数据,就须要在维度上拖入更多字段,直到达到最具体的明细表级别的粒度。然而同一个查问不可能蕴含不同具体粒度,因为具体粒度由维度组合决定,不可扭转,比方上面表格的例子:

 行:国家 省 城市
列:GDP

这个例子中,具体级别限定在了城市这一级汇总,城市下更细粒度的数据就看不到了,每一条数据都是城市粒度的,咱们不可能让查问后果里呈现依照国家汇总的 GDP,或者看到更具体粒度的每月 GDP 信息,更不可能让城市粒度的 GDP 与国家粒度 GDP 在一起做计算,算出城市 GDP 在国家中占比。

然而,相似下面例子的需要是很多的,而且很常见,BI 工具必须想出一种解法,因而诞生了 LOD:LOD 就是一种表达式,容许咱们在一个查问中形容不同的具体粒度

从表达式计算来看具体级别

表达式计算必须限定在同样的具体粒度,这是铁律,为什么呢?

试想一下上面两张不同具体粒度的表:

总销售额

10000

各城市销售额

 北京 3000
上海 7000

如果咱们想在各城市销售额中,计算奉献占比,那么就要写出 [各城市销售额] / [总销售额] 的计算公式,但显然这是不可能的,因为前者有两条数据,后者只有一条数据,根本无法计算。

咱们能做的肯定是数据行数雷同,那么无论是 IF ELSE、CASE WHEN,还是加减乘除都能够依照行粒度进行了。

LOD 给了咱们跨具体粒度计算的能力,其本质还是将数据具体粒度对立,但咱们能够让某列数据来自于一个齐全不同具体级别的计算:

 城市 销售额 总销售额
北京 3000  10000
上海 7000  10000

如图表,LOD 能够把数据加工成这样,即尽管总销售额与城市具体粒度不同,但还是增加到了每一行的开端,这样就能够进行计算了。

因而 LOD 能够依照任意具体级别进行计算,将最终产出“贴合”到以后查问的具体级别中。

LOD 表达式分为三种能力,别离是 FIXED、INCLUDE、EXCLUDE。

FIXED

{fixed [ 省份] : sum([GDP]) }

依照城市这个固定具体粒度,计算每个省份的 DGP,最初合并到以后具体粒度里。

如果当初的查问粒度是省份、城市,那么 LOD 字段的增加逻辑如下图所示:

可见,实质是两个不同 sql 查问后 join 的后果,外部的 sum 示意在 FIXED 表达式内的聚合形式,内部的 sum 示意,如果 FIXED 具体级别比以后视图具体级别低,应该如何聚合。在这个例子中,FIXED 具体级别较高,所以 sum 不起作用,换成 avg 成果也雷同,因为合并具体级别是,是一对多关系,只有合并时多对一关系才须要聚合。

最外层聚合形式个别在 INCLUDE 表达式中发挥作用。

EXCLUDE

{exclude [ 城市] : sum([GDP]) }

在以后查问粒度中,排除城市这个粒度后计算 GDP,最初合并到以后具体粒度中。

如果当初的查问粒度是省份、城市、节令,那么 LOD 字段的增加逻辑如下图所示:

如图所示,EXCLUDE 在以后视图具体级别的根底上,排除一些维度,所失去的具体级别肯定会更高。

INCLUDE

{include [ 城乡] : avg([GDP]) }

在以后查问粒度中,额定加上城乡这个粒度后计算 GDP,最初合并到以后具体粒度中。

这类的例子比拟难了解,且在 sum 状况下个别无实际意义,因为计算结果不会有差别,必须在相似 avg 场景下才有意义,咱们还是联合下图来看:

这就是 avg 算不准的问题,即不同具体级别计算的平均值是不同的,但 sum、count 等不会随着具体级别变动而影响计算结果,所以当波及到 avg 计算时,能够通过 INCLUDE 表达式指定计算的具体级别,以保证数据口径准确性。

LOD 字段怎么用

除了下面的例子中,间接查出来展现给用户外,LOD 字段更罕用的是作为两头计算过程,比方计算省份 GDP 占在国内占比。因为 LOD 曾经将不同具体粒度计算结果合并到了以后的具体粒度里,所以如下的计算表达式:

sum([GDP]) / sum({fixed [ 国家] : sum([GDP]) })

看似是跨具体粒度计算,其实没有,理论计算时还是一行一行来算的,前面的 LOD 表达式只是在逻辑上依照指定的具体粒度计算,但最终会放弃与以后视图具体粒度统一 ,因而能够参加计算。

咱们前面会持续解读 tableau 整顿的 Top 15 LOD 表达式业务场景,更深刻的了解 LOD 表达式。

总结

LOD 表达式让你轻松创立“脱离”以后视图具体级别的计算字段。

或者你会纳闷,为什么不被动扭转以后视图具体级别来实现同样的成果?比方新增或缩小一个维度。

起因是,LOD 往往用于跨具体级别的计算,比方算局部绝对总体的占比,计算当条记录是否为用户首单等等,更多的场景会在下次精读中解读。

探讨地址是:精读《什么是 LOD 表达式》· Issue #365 · dt-fe/weekly

如果你想参加探讨,请 点击这里,每周都有新的主题,周末或周一公布。前端精读 – 帮你筛选靠谱的内容。

关注 前端精读微信公众号

<img width=200 src=”https://img.alicdn.com/tfs/TB165W0MCzqK1RjSZFLXXcn2XXa-258-258.jpg”>

版权申明:自在转载 - 非商用 - 非衍生 - 放弃署名(创意共享 3.0 许可证)

退出移动版