跳到主要内容

设计指标平台

需求

设计统一的指标管理平台,解决:

  • 同一指标多处口径不一致
  • 新指标开发周期长(依赖数据工程师)
  • 指标缺乏文档和负责人

架构设计

指标模型

指标类型定义示例
原子指标不可再拆的基础度量SUM(amount)
派生指标原子指标 + 维度 + 时间近7天_APP端_GMV
复合指标多个指标运算转化率 = 下单UV / 访问UV
# 指标定义示例(YAML DSL)
metrics:
- name: gmv
display_name: 交易额
type: atomic
expression: SUM(payment_amount)
source_table: dwd_order_detail
filters:
- order_status = 'paid'
dimensions:
- channel
- category
- region
owner: analytics-team
tags: [核心指标, 交易]

核心模块

1. 指标注册中心

字段说明
指标 ID全局唯一标识
指标名称中文名 + 英文名
计算逻辑SQL 表达式
数据源DWD/DWS 表名
维度支持下钻的维度列表
负责人口径变更审批人
更新频率T+1 / 实时 / 小时级

2. 指标计算引擎

-- dbt 模型示例:物化指标
-- models/metrics/daily_gmv.sql
{{ config(materialized='incremental', unique_key='stat_date || channel') }}

SELECT
stat_date,
channel,
category,
region,
SUM(payment_amount) AS gmv,
COUNT(DISTINCT user_id) AS pay_users,
SUM(payment_amount) / COUNT(DISTINCT user_id) AS arpu
FROM {{ ref('dwd_order_detail') }}
WHERE order_status = 'paid'
{% if is_incremental() %}
AND stat_date >= (SELECT MAX(stat_date) FROM {{ this }})
{% endif %}
GROUP BY stat_date, channel, category, region

3. 指标查询 API

-- 语义层查询(类 Headless BI)
-- 用户只需指定"指标 + 维度 + 筛选条件"
SELECT
channel,
METRIC('gmv'),
METRIC('pay_users'),
METRIC('arpu')
WHERE
stat_date BETWEEN '2024-01-01' AND '2024-01-31'
AND region = '华东'
GROUP BY channel

常见面试问题

Q1: 如何解决指标口径不一致?

答案

  1. 统一定义:所有指标在指标平台注册,唯一 SQL 口径
  2. 引用机制:BI 工具、报表、API 都从指标平台取数,不允许自建口径
  3. 变更审批:口径变更需负责人审批,自动通知下游消费者
  4. 版本管理:保留历史口径版本,支持回溯

Q2: 指标平台和 BI 工具的关系?

答案

  • 指标平台是语义层(定义指标 What),BI 工具是展示层(展示指标 How)
  • 指标平台提供统一的指标计算结果,BI 工具消费这些结果做可视化
  • 避免每个 BI 看板自己写 SQL 算指标(容易不一致)

相关链接