报表需求评审该问清楚哪几件事——别等上线才发现理解错了
本文目录
先说结论
评审要问清楚的核心是五件事:为什么要(业务目标)、算什么(指标口径)、怎么看(维度粒度)、多久更新(时效与回溯)、给谁看(权限与生命周期)。
其中“为什么要”永远排第一。业务方描述的是他想到的方案,不是他真正的问题。搞清楚他拿报表做什么决策,你才能判断这个需求提得对不对,甚至给出更好的方案。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
报表开发最亏的返工,不是SQL写错了改SQL,而是理解错了推倒重来——表结构、ETL、前端配置全部白做。而理解错误几乎都能追溯到需求评审那一刻没问到位。我带过的新人里,十个有九个吃过这个亏:接到需求兴冲冲就开写,上线后业务方说“这不是我要的”。面试官问这道题,考的是你的需求分析能力——报表开发里,问对问题比写对SQL更能决定交付质量。
第一问:为什么要——需求背后的决策是什么
我在某短剧出海公司接到过一个需求:“做一张各国家每小时充值金额的实时报表。”如果直接照做,就是一个实时链路的活。但我多问了一句“这个报表你们打算怎么用”,答案是:投放同学想在新剧上线当天判断要不要追加投放预算。顺着这个目标聊下去,真正需要的是新剧上线后的分时段ROI对比(对比同类剧的历史同期曲线),而不是全量国家的充值流水——最终交付的报表和最初的描述完全不是一张,但业务方非常满意。
这一问还有一个作用:判断需求值不值得做。说不清楚决策场景的报表,上线后大概率没人看,白白增加维护负担——后面讲报表治理时你会看到,每一张“先做了再说”的报表都是未来的下线成本。
第二问:算什么——口径要抠到字
业务方嘴里的每个名词都可能有歧义,评审时要逐个抠。以“订单量”为例:
-- “订单量”至少有四个口径分歧点,评审时逐个确认:
SELECT COUNT(*) FROM dwd_trade_order_di
WHERE dt = '${bizdate}'
AND order_status = ? -- 1. 含不含未支付?含不含已取消/已退款?
AND order_type = ? -- 2. 含不含0元单、测试单、补偿单?
-- 3. 按下单时间还是支付时间归属到“这一天”?
-- 4. 一单多商品,算1单还是算N个子单?
-- 评审产出:每个名词落成一句无歧义的定义,写进需求文档
-- 例:“订单量=支付成功且未全额退款的主订单数,按支付时间归属”
确认口径时有个高效技巧:拿真实数据当场对。跑一个昨天的数给业务方看,“按这个口径昨天是8,432单,和你的预期一致吗?”数字对上了,口径大概率理解一致;对不上,当场就能发现分歧,而不是上线以后。
第三问:怎么看——维度、粒度和展示形态
维度决定表设计,粒度决定数据量和成本,这两个问不清楚,底层表就没法设计。要确认的具体是:需要哪些维度(国家/渠道/版本…)、需要下钻到什么粒度(到天还是到小时?到渠道还是到素材?)、要不要看趋势(决定保留多长的历史)、期望的展示形态(看板、明细表还是推送到群里的日报消息)。
这里有个经验:业务方倾向于“维度越多越好、粒度越细越好”,但每多一个维度,宽表行数可能翻几倍。我的做法是评审时当场跑一个粒度成本估算,把数字摆出来一起做取舍:
-- 评审现场花两分钟估算粒度成本,用数字代替争论
SELECT
COUNT(DISTINCT country) AS country_cnt, -- 30
COUNT(DISTINCT channel) AS channel_cnt, -- 20
COUNT(DISTINCT creative_id) AS creative_cnt, -- 8000+
COUNT(DISTINCT country, channel) AS grain_channel, -- 渠道粒度日行数
COUNT(DISTINCT country, channel, creative_id) AS grain_creative -- 素材粒度日行数
FROM dwd_ad_stat_di WHERE dt = '${bizdate}';
-- “到素材粒度行数是渠道粒度的50倍,查询明显变慢,
-- 你的决策真的用得到素材级吗?”——多数时候对方会主动收敛
第四问和第五问:时效回溯、权限生命周期
| 问题 | 为什么要问 | 不问的后果 |
|---|---|---|
| 更新频率:日更/小时/实时 | 决定离线还是实时链路,成本差一个量级 | 把日更需求做成实时,白烧钱 |
| 几点前必须出数 | 决定调度基线和依赖优化 | 9点开会的报表10点才产出 |
| 要不要历史数据回溯 | 决定是否要补跑历史分区 | 上线后被要求补一年历史,链路没留 |
| 口径变了历史怎么办 | 决定重刷策略 | 新旧口径混着看,趋势失真 |
| 谁能看:部门/角色/行级 | 决定权限方案,后补很痛苦 | 敏感数据(收入)全员可见 |
| 用多久:长期/项目期 | 决定要不要进正式资产管理 | 一次性报表跑三年没人下线 |
“几点前必须出数”这个问题特别容易漏。同样一张日报,早上8点要和中午12点要,对上游链路的要求完全不同——前者可能要求你优化整条依赖链的调度。这个要求上线后才提出来,就是一次被动的性能攻坚。
评审产出:一页纸需求确认单
五件事问完,落成一页纸的需求确认单,发给业务方确认后再开工。这不是官僚流程,是双方的“合同”——上线后扯皮时它是依据,更重要的是写的过程会逼你发现还没问清的点。
# 报表需求确认单(一页纸模板)
1. 业务目标:谁、在什么场景、用它做什么决策
2. 指标清单:每个指标一句无歧义的口径定义(引用指标字典编码)
3. 维度与粒度:维度列表 + 最细粒度 + 历史保留时长
4. 时效:更新频率 + 最晚产出时间(SLA) + 是否回溯历史
5. 权限与生命周期:可见范围 + 预计使用时长 + 负责人
6. 验收标准:口径核对样例数据(昨天的数=多少,双方签字确认)
# 第6条是关键:用真实数字验收,而不是用文字描述验收
面试高频追问
追问一:业务方自己也说不清楚需求怎么办?
说不清是常态,不能停在“等你想清楚再来”。我的做法是用原型代替问答:根据我的理解快速做一个只有样例数据的demo(BI里拖一个假看板,半小时的事),拿着它跟业务方聊“是不是这个意思”。人对着具体的东西提意见的能力,远强于凭空描述需求的能力。两轮迭代下来需求基本就清楚了,比来回开三次评审会快。
追问二:评审时确认过的口径,上线后业务方又要改,怎么办?
先区分是“当初理解偏了”还是“业务变了”。前者看确认单:如果确认单上写清楚了且对方确认过,那属于变更而非返工,重新走排期——这就是确认单的价值,它让变更有成本,倒逼业务方评审时认真对待。后者是正常的业务演进,评估影响面(历史要不要重刷、其他报表是否引用了同一口径)后按变更流程做,同步到指标字典。态度上都不要抱怨,但流程上必须留痕。
追问三:你怎么看待“业务方要什么就做什么”这种服务模式?
短期是服务态度好,长期是双输。业务方不了解数据现状和成本,照单全收的结果是报表越堆越多、口径越来越乱、真正重要的需求被淹没。数据团队的价值不是执行速度,而是用数据视角帮业务把问题定义对。我的原则是:态度上不说“不”,方案上给选项——“你要的这个成本很高,基于同样的目标我建议这样做,效果一样成本一半”,用专业判断赢得话语权。这也是报表开发从“工具人”走向“合作伙伴”的关键一步。
实战踩坑:一个没抠的名词,返工两周
在某出海硬件品牌时,我接过一个“各渠道设备激活报表”的需求,评审时双方都觉得“激活”这个词不言自明,没有展开确认。我按数据团队的惯例口径(设备首次开机联网)开发上线。两周后渠道运营找过来:他们说的激活是“设备绑定了App账号”,因为渠道结算按绑定算——两个口径差了快20%,涉及和渠道的费用结算,性质很严重。最后底层表加字段、ETL重写、历史数据重跑,前后花了两周返工。从那以后我评审时养成一个习惯:对每一个核心名词都问一句“你说的XX,精确地说是指什么?”哪怕听起来再显然。显然的词最危险,因为双方都不会去确认它。
教训:需求评审里最大的风险不是复杂的逻辑,而是双方都以为对方理解一致的“常识词”。口径确认宁可啰嗦,不可默契。
总结
报表需求评审五问:为什么要(决策场景)、算什么(口径抠到字,用真实数据当场对)、怎么看(维度粒度和成本一起谈)、多久更新(时效和回溯)、给谁看用多久(权限和生命周期)。产出一页纸确认单,用样例数据验收。面试时讲出“用demo代替问答”“用数字确认口径”这两个实操技巧,再带上返工的踩坑故事,这道题就能答出经验的厚度。
下一篇进入技术深水区:一张宽表撑起几十张报表——报表底层的宽表到底怎么设计?
你因为需求理解偏差返工过最惨的一次是什么?评论区聊聊~
关注「Wood聊大数据」| 9年大数据老兵,聊技术、聊职场、聊成长