跳转至

基础指标计算逻辑

概述

基础指标的定义中主要需要包含数据集、统计方式、指标日期标识和半累加指标的配置。本文将详细讲解每个配置的作用以及他们之间的运作机制。

image.png

计算机制

常规基础指标

常规的基础指标是指没有开启半累加指标配置的基础指标。这类指标在查询时,会执行以下几个步骤:

image

image

基于该数据模型,存在指标订单毛利润,其定义如下

指标定义配置: ● 数据集:订单表 ● 统计方式: SUM( [订单表/订单金额] - [商品维度表/成本] ) ● 指标日期标识:[订单表/下单时间]

查询 指标日期=2024-09-30商品品类=电子产品 的 订单毛利润

  1. 根据指标订单毛利润,确定查询的数据集为订单表

  2. 根据查询环境中使用到的维度,确定需要使用商品维度表订单表来进行查询,将商品维度表中用到的数据与订单表关联。

  3. 将查询环境中的筛选作用于扩展后的订单表

  4. 指标日期根据配置转换为[订单表/下单时间],筛选 [扩展表/下单时间]=2024-09-30

  5. 商品品类维度转换为[商品维度表/商品品类],筛选[扩展表/商品品类]=订单毛利润

  6. 基于筛选后的数据,执行指标的统计方式定义,SUM([扩展表/订单金额]-[扩展表/成本])

半累加基础指标

半累加指标是一种特殊的基础指标。之所以称之为半累加指标,原因在于该指标在运算时,只会将满足特定条件的数据进行聚合。

举个例子,在银行行业进行数据分析时,用户存款金额是银行的一个重要分析指标。银行会每日0点生成一份用户存款快照数据,表结构如下:

日期 账户ID 存折号 存款金额

需要注意的是:①每个用户可能会有多个存折;②用户销户后便不再更新其记录

业务分析时,希望可以按月份开户行查看用户存款金额,以了解每个月每个行的存款业绩。

首先,每个月的用户存款金额不能像常规的指标一样将直接存款金额相加,因为如果直接相加,你会发现,用户的存款金额会变得很大。其根本原因是存款表是每日快照表,对于快照表的使用,我们应当甄别哪些可以聚合而哪些不可以。

以当前的存款快照数据为例,其中:

对于日期而言,不同日期的数据无法叠加。譬如不能将昨日的存款和今日的存款加和。

对于存折号或账户ID而言,是可以叠加的。譬如我们可以看不同支行的存款汇总数据,该数据集即将多个账户ID和存折号的数据进行了加和。"

在指标平台中,可以通过配置半累加指标来实现上述的场景。

image.png

  • 不可累加维度:即哪些维度在聚合时,不同的值不能放到一起聚合;基于上述的案例,[日期]是不可累加的。

  • 窗口分组:先将数据按窗口进行分组,再在窗口内选取满足的不可累加数据。(**目前不建议使用窗口分组功能**)

  • 窗口选择:选择范围内的最大值或最小值。

当我们了解了半累加指标适用的场景后,我们来看半累加指标是如何运作的

image

image

指标定义配置 数据集:存款记录

统计方式:

SUM([存款记录/存款金额])

指标日期标识:[存款记录/日期]

半累加指标:开启

不可累加维度:日期

窗口选择:最大值

查询以指标日期(月)开户行名称作为分组,查询存款余额,希望看到每个月、每个开户行下的全部用户存款总额。

  1. 根据指标存款余额,确定查询的数据集为存款记录

  2. 根据查询环境中使用到的维度,确定需要使用账户维度表开户行维度表存款记录来进行查询,将两个维度表中中用到的数据与订单表关联。

  3. 由于指标是半累加指标,先获取查询环境中是否使用到了[存款记录/日期],发现查询中使用到了该维度,执行该字段的筛选。

注意

这里需要注意一个逻辑,查询时使用指标日期开户行名称是用于分组维度,而不是筛选;但是在运行时,我们可以认为他们是生成了多个组合的筛选值,对指标进行筛选。指标在每个维度值的组合条件下,依次计算生成指标结果。

以上只是将分组转化为筛选的逻辑理解,并不代表真实的代码构筑实现。

  1. 筛选指标日期(月)=2024-09月,对步骤2中的扩展数据集进行过滤,只保留[存款记录/日期]=2024-09月的数据行。

  2. 执行半累加数据过滤:半累加的不可累加维度为[存款记录/日期],且选取最大值;则在步骤3过滤后的数据结果上,仅保留[存款记录/日期]= MAX([存款记录/日期])的数据行。

  3. 执行其他的筛选条件,开户行名称的筛选在步骤4之后执行。

  4. 基于过滤后的数据,运算指标,生成指标结果。

总结

image