2、需求调研:如何与业务方沟通,明确指标定义、口径、维度与粒度
很多做实时指标的人,一上来就撸代码。选 Flink、搭 Kafka、写 SQL,忙得不亦乐乎。结果呢?上线第一天业务方就炸了:「这个数不对啊!」「口径跟我们理解的不一样!」「为什么昨天和今天的数据对不上?」
嗯,我踩过这个坑,而且不止一次。后来我总结了一句话:实时指标的成败,在需求调研阶段就已经决定了。代码写得再漂亮,需求没对齐,全是白费。
核心原则:需求调研不是「记录需求」,而是「翻译需求」。把业务语言翻译成技术语言,把模糊概念翻译成可计算的定义。
2.1 需求调研的四要素:定义、口径、维度、粒度
我跟业务方沟通时,脑子里始终绷着四根弦。少了任何一个,后面都会出问题。
| 要素 | 业务方常说的 | 我们需要明确的 |
|---|---|---|
| 定义 | 「我要看用户活跃数」 | 什么叫「活跃」?打开APP算?登录算?还是有点击行为才算? |
| 口径 | 「跟昨天对比一下」 | 是日环比?周同比?还是累计值?去不去重? |
| 维度 | 「按地区看看」 | 省份?城市?还是更细的区县?用户注册地还是IP归属地? |
| 粒度 | 「我要实时数据」 | 秒级?分钟级?还是小时级?延迟容忍度是多少? |
你看,业务方一句话,背后藏着这么多细节。我个人的习惯是,每次沟通都拿这张表去对,逐条确认,不留模糊地带。
2.2 定义:把「感觉」变成「公式」
业务方说「我要看订单转化率」。听起来很明确对吧?但一深挖就发现,每个人理解的「转化」都不一样。
- 是「下单」算转化,还是「支付成功」才算?
- 退款订单算不算?
- 刷单的要不要剔除?
- 同一个用户下了多单,算一次转化还是多次?
我曾经在一个电商项目中,跟运营团队开了三次会才把「转化率」的定义敲定。最后写成了这样:
指标名称:支付转化率
定义:当日支付成功订单数 / 当日下单订单数
排除条件:
- 剔除测试账号(user_id 以 'test_' 开头)
- 剔除金额为 0 的订单
- 剔除支付后 30 分钟内全额退款的订单
计算周期:自然日(00:00:00 - 23:59:59)
更新频率:每 5 分钟刷新一次
你看,写清楚之后,开发、测试、业务三方都没有歧义。这就是「定义」的力量。
小技巧:让业务方在定义文档上签字确认。不是不信任,而是防止后面换人了或者「我当初不是这个意思」。白纸黑字,大家都安心。
2.3 口径:统一「怎么算」
口径问题,说白了就是「算法」问题。同一个指标,口径不同,结果天差地别。
举个最常见的例子——去重。
业务方说「我要看今天的独立访客数」。你按 user_id 去重了,结果发现很多用户没登录,user_id 是 null。那这些算不算?
我遇到过的情况是:运营团队用设备 ID 去重,产品团队用 user_id 去重,两个数字差了 30%。两边都觉得自己是对的,最后拉我过去仲裁。
所以,口径必须明确到字段级别:
| 口径项 | 说明 | 示例 |
|---|---|---|
| 计算字段 | 用哪个字段做聚合 | user_id、device_id、order_id |
| 去重规则 | 是否去重,按什么去重 | 按 user_id 去重,null 值单独统计 |
| 时间窗口 | 滚动窗口还是滑动窗口 | 滚动 1 小时、滑动 5 分钟 |
| 数据源 | 从哪个表/流取数 | 订单流、埋点日志、业务库 |
注意:口径一旦确定,不要轻易改。改口径意味着改代码、改历史数据、改对比基准。我曾经因为口径没对齐,导致一个月的报表全部重跑,那滋味……你懂的。
2.4 维度:决定「怎么看」
维度是业务方分析数据的「切面」。维度选得好,分析效率翻倍;维度选得乱,报表变成天书。
我一般会问业务方三个问题:
- 你平时最常用的筛选条件是什么?(比如:时间、地区、渠道)
- 你希望看到哪些对比?(比如:今天 vs 昨天、A渠道 vs B渠道)
- 有没有需要下钻的场景?(比如:从省份下钻到城市,再到区县)
然后我会把这些维度整理成一张「维度表」:
维度名称:地区
层级结构:国家 -> 省份 -> 城市 -> 区县
数据来源:用户注册信息表
更新频率:每日同步
空值处理:标记为「未知地区」
维度名称:渠道
枚举值:自然搜索、付费广告、社交媒体、直接访问、其他
数据来源:埋点参数 utm_source
更新频率:静态枚举,季度评审
这里有个坑——维度值的变化。比如渠道名称改了,或者地区划分调整了。如果不处理好,历史数据和新数据就对不上了。我建议在维度表里加一个「生效时间」字段,支持缓慢变化维度(SCD)的处理。
2.5 粒度:决定「多快」和「多细」
粒度是实时指标最敏感的话题。业务方总说要「实时」,但你真的能做到秒级吗?成本扛得住吗?
我一般会跟业务方算一笔账:
| 粒度 | 数据量(日均) | 存储成本 | 计算延迟 | 适用场景 |
|---|---|---|---|---|
| 秒级 | ~1亿条 | 高 | < 5秒 | 风控、实时大屏 |
| 分钟级 | ~2000万条 | 中 | < 1分钟 | 运营监控、报警 |
| 小时级 | ~300万条 | 低 | < 10分钟 | 日报、趋势分析 |
你看,秒级和小时级的成本差了不止一个数量级。业务方如果只是看个趋势,完全没必要上秒级。我通常会建议:核心指标用秒级,辅助指标用分钟级,分析类指标用小时级。这样既满足了实时性,又控制了成本。
我的经验:不要承诺「实时」,要承诺「延迟上限」。比如「数据延迟不超过 10 秒」,而不是「实时更新」。给自己留点余量,也给业务方一个明确的预期。
2.6 需求调研的完整流程
说了这么多,到底怎么落地?我总结了一个五步法:
- 预沟通:拿到业务方的初步需求,自己先过一遍,标记出模糊点。
- 正式会议:拉着业务、产品、开发三方一起,逐条确认定义、口径、维度、粒度。
- 输出文档:把确认结果写成《指标定义说明书》,发给所有人确认。
- 原型验证:用少量数据快速跑一个 Demo,让业务方看到实际效果。
- 签字确认:业务方在文档上签字,作为后续开发的基线。
这一步走扎实了,后面开发、测试、上线都会顺畅很多。我见过太多项目,需求调研只花了半天,后面返工花了两周。你说哪个划算?
2.7 需求调研的核心逻辑图
下面这张图,是我每次做需求调研时都会参考的框架。它把整个流程串起来了:
你看,整个流程是环环相扣的。从业务方的原始需求出发,拆解成四要素,然后输出文档,最后验证确认。每一步都走扎实了,后面才不会翻车。
2.8 避坑指南
最后,分享几个我踩过的坑,希望能帮你少走弯路:
- 不要相信「跟之前一样」——每次都要重新确认,因为业务逻辑可能已经变了。
- 不要忽略异常值——null、0、负数、重复数据,都要明确处理方式。
- 不要假设业务方懂技术——用业务语言沟通,用例子说明,而不是甩一堆技术术语。
- 不要一次性确认太多指标——一次聚焦 3-5 个核心指标,确认透彻了再继续。
我曾经在一个项目中,业务方说「跟上次一样就行」。结果上线后发现,上次的指标口径已经改了三次了,业务方自己都忘了。从那以后,我每次都会把历史文档翻出来,逐条对一遍。麻烦是麻烦了点,但总比返工强。
需求调研这件事,说白了就是「把丑话说在前面」。前期多花点时间,后期就能少加很多班。嗯,这个道理,我是在加了很多次班之后才真正明白的。