关于前端:精读15-大-LOD-表达式-上

2次阅读

共计 4244 个字符,预计需要花费 11 分钟才能阅读完成。

通过上一篇 精读《什么是 LOD 表达式》的学习,你曾经了解了什么是 LOD 表达式。为了坚固了解,联合场景温习是最无效的伎俩,所以这次咱们联合 Top 15 LOD Expressions 这篇文章学习 LOD 表达式的 15 大利用场景,因篇幅限度,本文介绍 1~8 场景。

1. 客户下单频次

各下单次数的顾客数量是多少?

柱状图的 Y 轴显然是 count([customerID]),因为要统计 以后维度下的客户总数

这里插一句,对于柱状图的 Y 轴,在 sql 里就是对 X 轴 group by 后的聚合,因而 Y 轴就是对 X 轴各项的汇总。

柱状图的 X 轴要表白的是以何种粒度拆解,比方咱们是看各城市数据,还是看各省数据。在这个场景下也不例外,咱们要看 各下单次数下的数据 ,那么如何把下单次数转化为维度呢?

咱们须要用 FIX 表达式制作一个维度字段,示意各顾客下单次数。很显然数据库是没有这个维度的,而且这个维度须要依照客户 ID group by 后,依照订单 ID count 聚合能力失去,因而能够利用 FIX 表达式:{fixed [customerID] : count([orderId]) } 形容。

2. 阵列剖析

当咱们看年客户销售量时,即使是逐年增长的,咱们也会有一个疑难: 每年销量中,首单在各年份的顾客别离奉献了多少?

因为关系到老客忠诚度和新客拓展速度,新客与老客差距过大都不好,那咱们如何让 2021 年的柱状图依照 2019、2020、2021 年首单的顾客分层呢?这就是阵列剖析。

咱们要画一个柱状图,X、Y 轴别离是 [Year]sum([Sales])

为了让柱状图分层,咱们须要一个示意色彩图例的维度字段,比方咱们拖入已有的性别维度,每根柱子就会被划分为男、女两块。但问题是,咱们制作并不存在的“首单年份维度”?

答案是利用 FIX 表达式:{fixed [customerID] : min([orderDate]) }

3. 日利润指标

剖析 每年各月份的盈利、亏损天数散布 。如下图:

列是年到月的下钻,比拟好实现,只有拖入字段 [year] 并下钻到月粒度,移除季度粒度即可。

行是“高收益”、“正收益”、“亏损”的透视图,值是在以后月份中天数。

那么如何计算高收益、亏损状态呢?因为最终粒度是天,所以咱们要按天计,首先就要失去每天的利润总和,这些两头过程能够利用 LOD 的字段来实现,即创立一个 日利润字段(profitPerDay){fixed [orderDate] : sum([profit]) }

因为咱们对利润总量不敏感,只心愿拆分为三个阶段,所以利用 IF THEN 生成一个新字段 日利润指标(dailyProfitKPI)IF [profitPerDay] > 2000 THEN "Highly Profitable" ELSEIF [profitPerDay] <= 0 THEN "unprofitable" ELSE "profitable" END

所以创立的 [dailyProfitKPI] 指标是个维度,即如果以后行所在的天利润汇总如果大于 2000,值就是 “Highly Profitable”。所以在行上拖入 count(distinct [orderDate]),把 [dailyProfitKPI] 拖入行的色彩透视即可。

4. 占总体百分比

LOD 表达式的一大特色就是计算跨具体级别的占比,比方咱们要看 欧洲各国的销量在全世界占比

显然这个图里所有国家之和不是 100%,因为欧洲加起来也才不到百分之二十,然而在以后具体级别下,是拿不到寰球总销售量的,所以咱们能够利用 FIX 表达式来实现:sum([sales]) / max({sum([sales]) })

这里解释两点:

  1. 之所以用 max 是因为 LOD 表达式只是一个字段,并没有聚合形式,运算必须在雷同具体级别下进行,因为总销量只有一条数据,所以咱们用 max 或者 min 甚至 sum 都行,后果都是一样的。
  2. 如果不加维度限度,就能够省略“fix”申明,所以 {sum([sales]) } 实际上就是 FIX 表达式,它示意 {fixed : sum([sales]) }

5. 新客增长趋势

看着年客户增长趋势图,你有没有想过,这个趋势图必定永远是向上的?也就是说,看着趋势图朝上走,不肯定阐明业务做得好。

如果公司每年都比去年倒退的好,每年的新增新客数应该要比去年多,所以 每年新客增长趋势图 才比拟有意义,如果你看到这个趋势图的趋势朝上,阐明每年的新客都比去年多,阐明公司解脱了惯性,每年都取得了新的增长。

所以咱们要加一个筛选条件。新增一个维度字段,当这一单客户是往年新客时为 true,否则为 false,这样咱们筛选时,只看这个字段为 true 的后果就行了。

那么这个字段怎么来呢?思路是,获取客户首单年份,如果首单年份与以后下单年份雷同,值为 true,否则为 false。

咱们利用 LOD 创立首单年份字段 [firstOrderDate]{fixed [customerId] : min([orderDate]) },而后创立筛选字段 [newOrExist]: IFF([firstOrderDate] = [orderDate], 'true', 'false')

6. 销量比照剖析

入下图条形图所示,右侧是每项依据抉择的分类的比照数据:

对比值计算形式是,用 以后的销量减去以后选中分类的销量 。置信你能够猜到,但前分类的销量与以后视图具体级别无关,只与用户抉择的 Category 无关。

如果咱们曾经有一个度量字段 – 选中分类销量 selectedSales,应该再排除以后 category 维度的烦扰,所以可用 EXCLUDE 表达式形容 selectedCategorySales: {exclude [category] : sum([selectedSales]) }

接下来是创立 selectedSales 字段。背景常识是 [parameters].[category] 能够取得以后选中的维度值,那咱们能够写个 IF 表达式,在维度等于选中维度时聚合销量,不就是选中销量吗?所以公式是:IF [category] = [parameters].[category] THEN sales ELSE 0 END

最初比照差别,只有创立一个 字段,表达式为 sum(sales) - sum(selectedCategorySales) 即可。

7. 均匀最高交易额

如下图所示,以后的具体级别是国家,但咱们却要展现每个国家均匀最高交易额:

显然,要求均匀最高交易额,首先要计算每个销售代表的最高交易额,因为这个具体级别比国家低,咱们能够利用 INCLUDE 表达式计算销售代表最高交易额 largestSalesByRep: {include [salesRep] : max([sales]) },并对这个度量字段求均匀即可。

从这个例子能够看出,如果咱们在一个较高的具体级别,比方国家,此时的 sum([sales]) 是依据国家具体级别汇总的,而疏忽了销售代表这个具体级别。但如果要展现每个国家的均匀最高交易额,就必须在销售代表这个具体级别求 max([sales]),因为是各国家的,所以咱们不必 {fixed [salesRep] },而是 {include [salesRep] },这样最终计算的具体级别是:[country],[salesRep],这样能力算出销售在每个国家的最高交易额(因为兴许某些销售同时在不同国家销售)。

8. 理论与指标

在第六个例子 – 销量比照剖析中,咱们能够看到销量绝对值的比照,这次,咱们须要计算理论销售额与指标的差距百分比:

如上图所示,左上角展现了理论与指标的差值;右上角展现了每个地区产品指标完成率;下半局部展现了每个产品理论销量柱状图,并用彩色横线标记出目标值。

左上角非常简单,[diffActualTraget]: [profit] - [targetProfit],只有将以后利润与指标利润相减即可。

右上角须要分为几步拆解。咱们的最终目标是计算每个地区产品指标完成率,显然公式是 以后实现产品数 / 总产品数。总产品数比较简单,在已有地区维度拆解下,计算下产品总数就行了,即 count(distinct [product]);难点是以后实现产品数,这里咱们又要用到 INCLUDE,为什么呢?因为地区粒度比产品粒度高,咱们看地区汇总的时候,就不晓得各产品的实现状况了,所以必须 INCLUDE product 维度计算利润指标差,公式是 [diffProductActualTraget]{include [product] : sum(diffActualTraget) },而后当这个值大于 0 就认为实现了指标,咱们能够再创立一个字段,即实现指标数,如果达成指标就是 1,否则是 0,这样便于求“以后实现产品数”:aboveTargetProductCount: IFF([diffProductActualTraget] > 0, 1, 0),那么以后实现产品数就是 sum([diffProductActualTraget]),所以产品指标完成率就是 sum([diffProductActualTraget]) / count(distinct [product]),将这个字段拖入指标,依照百分比格式化,就失去后果了。

总结

通过下面的例子,咱们能够总结出理论业务场景中几条应用心法:

  1. 首先对计算公式进行拆解,判断拆解后的字段是否数据集里都有,如果都有的话就完结了,阐明是个简略需要。
  2. 如果数据集里没有,而且发现数据具体级别与以后不符(比方要失去每个国家销量,但以后维度是城市),就要用 FIXED 表达式固定具体级别。
  3. 如果不是明确的依照某个具体级别计算,就不要应用 FIXED,因为不太灵便。
  4. 当计算时要跳过某个指定具体级别,但又要保留视图里的具体级别时,应用 EXCLUDE 表达式。
  5. 如果计算波及到比视图低的具体级别,比方计算均匀或者最大最小时,应用 INCLUDE 表达式。
  6. 应用 FIXED 表达式创立的字段也能够进行二次计算,正当拆解多个计算字段并组合,会让逻辑更加清晰,易于了解。

探讨地址是:精读《15 大 LOD 表达式 – 上》· Issue #369 · dt-fe/weekly

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

关注 前端精读微信公众号

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

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

正文完
 0