订阅更新

指标口径管理

数仓建模手册 第 6 题 约 4 分钟读完

本文目录
  1. 总结
  2. 最真实的数仓痛点
  3. 指标的分类体系
  4. 口径不一致的三大根因与解法
  5. 治理三步法

总结

记忆点内容
口径问题根因定义不统一、SQL各写各的、数据源不同
指标三层原子指标 → 派生指标 → 复合指标
治理三步建指标字典 → 收口汇总层 → 技术卡控
核心原则一个指标,一个SQL定义,一个取数出口

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

进阶 | 大数据面试 · 数仓建模系列

面试真题
你们公司有没有遇到过指标口径不一致的问题?是怎么解决的?

最真实的数仓痛点

技术问题好解决,口径问题要命。我相信做过数据开发的都经历过这种场景:运营说「昨天GMV是500万」,财务说「不对,是480万」,老板看大屏又是510万。三个人看的三张报表,同一个指标三个数字。

这不是Bug,这是口径不一致——大家对「GMV」的定义不一样。运营算的是所有已下单金额(含未支付),财务算的是已支付且未退款的金额,大屏算的是已支付金额(含退款中的)。名字一样,SQL不一样,数字当然不一样。

Wood的实战经验
我在做广告归因的时候,ROI这个指标就出过问题。投放团队算的ROI用的是「7日归因收入/当日花费」,管理层看的是「当日收入/当日花费」。归因窗口不同,ROI差了3倍,开会差点吵起来。
后来统一定义为「7日归因ROI」和「当日ROI」两个独立指标,各自有明确的SQL口径。核心教训:口径不同就是不同的指标,绝对不要复用名字。

指标的分类体系

原子指标(最底层):一个不可再拆分的度量+聚合方式。比如SUM(order_amount)、COUNT(DISTINCT user_id)。原子指标必须有唯一的SQL定义,这是口径一致的基石。

派生指标(原子+限定条件):在原子指标上加时间范围、业务过滤条件。比如「近7日GMV = SUM(pay_amount) WHERE dt >= 近7天 AND status = 'paid'」。

复合指标(多个指标计算):两个及以上指标的运算。比如「客单价 = GMV / 下单用户数」、「ROI = 收入 / 广告花费」。

口径不一致的三大根因与解法

根因表现解法
定义不统一同一个名字不同含义建立指标字典,统一定义
取数逻辑不同不同报表各自写SQL收口到同一张汇总表,统一取数
数据源不同A报表用DWD,B报表用ODS所有报表统一从DWS/ADS取数

治理三步法

第一步:建指标字典。每个指标必须包含:指标名称、英文名、业务定义、计算逻辑(具体SQL)、所属主题、负责人、数据来源。

第二步:收口汇总层。所有下游报表不允许直接查DWD/ODS,必须从DWS/ADS统一取数。一个指标只有一个SQL出口,口径想不一致都难。

第三步:技术卡控。指标SQL模板化,变更走审批流程;新增报表必须关联已有指标,不能自己造;定期巡检对比不同报表的同名指标数值。

面试加分提示
这道题是区分「做过数仓」和「只学过数仓」的分水岭。面试官想听的不是理论,而是你处理过的真实混乱:
「我们之前遇到过口径问题。运营和财务看的GMV差了20万,排查后发现运营的报表直接查的DWD层,包含了未支付订单;财务查的ADS层,过滤了未支付。解决方案是把GMV拆成两个指标:下单GMV和支付GMV,各自在DWS层有明确定义,所有报表统一从DWS取数。上线后再没出现过口径扯皮的问题。」
这种回答有场景、有原因、有方案、有结果,满分。
刷题进度保存在当前浏览器