归因指标规则说明
概述
多维归因功能并非支持所有指标,系统会按照一套规则逐步判定一个指标是否可以进行多维归因分析。判定过程分为两步:黑名单排除 → 归因规则匹配。
判定流程
-
先检查是否命中黑名单,命中则直接判定为不支持归因
-
未命中黑名单后,按优先级依次匹配归因规则:加法(ADD) → 乘法(MUL) → 除法(DIV) → 混合(MIX)
-
匹配到的规则类型必须在后台配置
enabled_attribution_rules中才最终生效(默认只启用ADD,配置ALL可启用全部)
一、不支持归因的指标(黑名单)
以下类型的指标会被黑名单规则拦截,不可进行多维归因:
1. 原子指标:聚合函数不在白名单中
原子指标的表达式中使用的聚合函数,只有以下四种允许归因:
| 允许的聚合函数 | 说明 |
SUM |
求和 |
COUNT |
计数 |
COUNT_DISTINCT / COUNTDISTINCT |
去重计数 |
如果使用了其他聚合函数(如 AVG、MAX、MIN、PERCENTILE 等),则不支持归因。
示例:avg([t_order/amount]) → 不支持;sum([t_order/amount]) → 支持
2. 派生指标:包含多层时间限定(PreAggs)
如果派生指标定义中包含 preAggs(预聚合/多层时间限定),则不支持归因。
示例:一个派生指标在时间限定的基础上又叠加了一层聚合(如"月均日订单量"),属于多层时间限定。
3. 派生指标:包含衍生(Indirection)
如果派生指标定义中包含 indirection(间接衍生,如同环比),则不支持归因。
示例:配置了"上月同期"衍生的指标 → 不支持。
4. 复合指标:表达式中包含函数调用
如果复合指标的公式表达式中包含函数调用(CALL_OP 类型节点),则不支持归因。
示例:IF([指标A] > 100, [指标B], [指标C]) → 包含 IF 函数,不支持。
二、支持归因的指标及归因类型
通过黑名单校验后,系统会进一步判定指标的归因类型。归因类型决定了因子拆分时使用的分析方法。
1. 加法归因(ADD)
适用范围:大多数指标的默认归因方式。
-
原子指标:聚合函数为 SUM / COUNT / COUNT_DISTINCT 的原子指标,通过黑名单后即匹配加法规则
-
派生指标:带有普通时间限定(period)但无 preAggs 和 indirection 的派生指标
-
复合指标:表达式中仅包含
+、-运算的复合指标
示例:[订单量] + [退款订单量] → 加法归因
2. 乘法归因(MUL)
- 复合指标:表达式中仅包含
*运算的复合指标
示例:[客单价] * [客户数] → 乘法归因
3. 除法归因(DIV)
- 复合指标:表达式中仅包含
/运算的复合指标
示例:[总金额] / [订单数] → 除法归因
4. 混合归因(MIX)
- 复合指标:表达式中包含
+、-、*、/中的多种运算组合
示例:[单价] * [数量] + [运费] → 混合归因
三、后台配置
归因规则类型是否生效由 Nacos 配置项控制:
# 默认值:仅启用加法归因
enabled_attribution_rules=ADD
# 启用加法和除法
enabled_attribution_rules=ADD,DIV
# 启用所有归因类型
enabled_attribution_rules=ALL
即使指标通过了规则匹配,如果匹配到的归因类型不在配置的启用列表中,仍然会返回"不支持归因"。
四、判定流程图
┌──────────────┐
│ 输入指标 │
└──────┬───────┘
│
┌──────────▼──────────┐
│ 指标类型判断 │
└──┬───────┬───────┬──┘
│ │ │
┌──────▼──┐ ┌──▼───┐ ┌─▼────────┐
│ 原子 │ │ 派生 │ │ 复合 │
└──┬──────┘ └──┬───┘ └──┬────────┘
│ │ │
┌────────▼────┐ ┌──▼─────────▼──────────┐
│ 聚合函数是否 │ │ 是否包含 preAggs / │
│ 在白名单中? │ │ indirection / 函数? │
└──┬──────┬───┘ └──┬────────────┬───────┘
│ │ │ │
是 │ 否 │ 否 │ 是 │
│ │ │ │
│ ┌───▼───┐ │ ┌──────▼──────┐
│ │ 不支持 │ │ │ 不支持 │
│ └───────┘ │ └─────────────┘
│ │
└───────┬───────┘
│
┌──────────▼──────────┐
│ 复合指标:分析 │
│ 表达式运算符 │
│ ┌─────────────────┐ │
│ │ 仅 +- → ADD │ │
│ │ 仅 * → MUL │ │
│ │ 仅 / → DIV │ │
│ │ 混合 → MIX │ │
│ └─────────────────┘ │
│ 原子/派生 → ADD │
└──────────┬──────────┘
│
┌──────────▼──────────┐
│ 归因类型是否在 │
│ enabled_attribution │
│ _rules 配置中? │
└──┬──────────────┬───┘
是 │ 否 │
│ │
┌──────▼──────┐ ┌───▼───┐
│ 支持归因 │ │ 不支持 │
└─────────────┘ └───────┘
五、常见问题
Q: 为什么 SUM 类的原子指标可以归因,但 AVG 类不行?
A: 多维归因的核心是将整体指标值拆分到各维度上,要求指标值具有可加性。SUM/COUNT 满足"整体 = 各部分之和",而 AVG/MAX/MIN 不满足,拆分后数学上无法还原整体值。
Q: 带时间限定的派生指标(如"本月订单量")可以归因吗?
A: 可以。只要该派生指标没有多层时间限定(preAggs)和衍生(indirection),就不会被黑名单拦截,可正常进行归因。
Q: 复合指标 [指标A] / [指标B] 能归因吗?
A: 取决于后台配置。该指标匹配除法归因(DIV)类型,需要 enabled_attribution_rules 包含 DIV 或 ALL 才能生效。默认配置仅启用 ADD。