跳转至

归因指标规则说明

概述

多维归因功能并非支持所有指标,系统会按照一套规则逐步判定一个指标是否可以进行多维归因分析。判定过程分为两步:黑名单排除 → 归因规则匹配。

判定流程

指标 → 黑名单校验(不可归因?)→ 归因规则匹配(ADD / MUL / DIV / MIX)→ 是否在已启用规则中
  1. 先检查是否命中黑名单,命中则直接判定为不支持归因

  2. 未命中黑名单后,按优先级依次匹配归因规则:加法(ADD) → 乘法(MUL) → 除法(DIV) → 混合(MIX)

  3. 匹配到的规则类型必须在后台配置 enabled_attribution_rules 中才最终生效(默认只启用 ADD,配置 ALL 可启用全部)


一、不支持归因的指标(黑名单)

以下类型的指标会被黑名单规则拦截,不可进行多维归因:

1. 原子指标:聚合函数不在白名单中

原子指标的表达式中使用的聚合函数,只有以下四种允许归因:

允许的聚合函数 说明
SUM 求和
COUNT 计数
COUNT_DISTINCT / COUNTDISTINCT 去重计数

如果使用了其他聚合函数(如 AVGMAXMINPERCENTILE 等),则不支持归因。

示例: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 包含 DIVALL 才能生效。默认配置仅启用 ADD。