2018 — 2026蒸汽教育 · 八周年

两张仪表盘的营收对不上,数据岗面试怎样先把口径说清楚?

从 dbt 语义层和 Power BI 数据模型的实践出发,用订单、部分退款和跨日数据演示如何定义营收、验收数据粒度,并向业务解释两个数字。

两位分析者把各自的交易记录汇到同一张蓝色口径卡
📅 时效更新资料核对至 2026-11-12。文中的案例、数字和示例回答用于练习。

把指标争议练成数据岗面试回答

带一份已有分析或仪表盘,练习把定义、可复算样本和业务选择放到同一页。

销售的仪表盘说昨天营收 180 元,客服的表说 150 元。面试官让你判断谁算错了。一个真实的数据岗可能需要先把“昨天”和“营收”解释清楚。dbt 文档介绍了集中管理、复用指标的语义层,Microsoft Learn 则说明了事实表和维度表如何组织报表模型。工具能降低重复定义的成本,指标选择依然要由了解业务的人作出。 dbt 语义层 · Power BI 星型模型

先写出指标要帮助谁做哪项决定

销售团队可能在看某天支付的订单额,用来评估活动带来的成交。客服团队可能要理解已经从顾客手上收取并扣除退款的金额,用来复核当天客户争议。用不同指标可以各自做事,不能在周会上只给它们都写一个“营收”标题。先问报表用来做日常运营、订单贡献还是正式财务对账,核对时区、刷新时间、有效状态和税费是否包含。

假如公司要统一一个经营周报数字,先找有权确认定义的人。分析师可以拿出候选口径与差异样本,写清受影响报表和历史比较规则。财务确认合适口径以后,把名称、公式和负责人写进说明。若你在练习题里没有权限做决定,可以说出哪一个解释符合当前业务用途,并标明需要确认的项。

用四条交易复算两个数字

假设只看同一时区且款项以人民币计。十一月十日有订单甲支付 100 元、订单乙支付 80 元。同日乙退款 30 元。次日甲退款 20 元。当天支付额是 180 元,当天按退款实际发生日扣减的净流入是 150 元。假如按订单支付日回溯最终净额,等次日退款记入之后,十日订单的净额变为 130 元。三个数都有不同的定义和查看时间。

日期事件金额
十日甲支付100
十日乙支付80
十日乙部分退款30
十一日甲部分退款20

让对方指出哪张报表把退款归到发生日、哪张按原订单归属。对结果做一个手算检查,说明如果十一日回看十日,哪张报表会变化。重要的是把口径切换的影响变成可预期的行为。别用一个“含退款”的标签含混带过是否追溯。

数据粒度决定哪些连接会重复计算

支付表可能一行一笔支付,退款表一行一笔退款,订单表一行一个订单。如果一个订单分两次退款,将支付表直接连退款表后再汇总支付额,订单金额可能被重复加。可以按目标口径先将退款聚合到订单或日期,或者将支付和退款建成带符号的事件流再按日期汇总。选择的过程要解释每张表一行表示什么、主键是否唯一,以及没有退款的订单还能不能留下。

再增加一个测试,把乙的 30 元拆为 10 和 20 两次。预期支付额仍是 180,按发生日扣减仍是 150。假如 SQL 输出支付额变成 260,就说明连接粒度错了。另一个测试是部分退款之后取消订单,按事实事件与按最终状态统计可能不同。别盲目过滤掉所有已取消订单。应先问该指标是以当时发生的支付和退款为依据,还是以目前订单状态为依据。

把定义写成别人可以实现的说明

给经营周报指标写一份简短的定义,至少列出用途、数据来源、粒度、时间口径、币种、退款归属与异常处理。比如“支付发生日净流入,使用已确认支付与已确认退款事件,支付为正,退款为负,按业务时区自然日聚合。退款迟到时按照事件发生日回填,记录最近更新时间。”这里的名称和定义对应一个具体决策。若组织已采用集中管理工具,可把定义映射到实际模型,仍保留一份由业务与技术共同核对的记录。

若定义改了,需要回答历史同比怎么看。可以同时保留原始历史和按新规则重算的版本,标注变更日期。若原始数据不足以重算,明确有哪些历史区间不能直接比较。面试官问到交付时,也可以说会更新下游报告和文档,并请原报告使用者核对一项已知案例。这样定义从一页说明进入实际使用流程。

演示用例时让对方能改动条件

给面试伙伴一张交易表,请他增加一条跨时区退款或把同一订单拆成两笔支付。你负责说出哪一列日期要变、哪项汇总保持以及怎么重跑对账。随后让他假装是销售负责人,问为什么同一天对外汇报有两个数字。可以回答“180 是支付成交,150 是按当天退款扣减后的流入。用于活动成交用前者,做当天运营对账用后者,正式收入仍看公司确认的财务口径。”这让听众知道哪个数能用于哪个决定。

如果手里已有 BI 项目,可以补三个很小的附件:指标定义、交易样本和一条能让原报表失败的测试。记录需要谁确认、哪一页受影响和变更后怎么看。面试时展示这三个东西,比只放一个截图更方便对方验证你会怎样处理定义争议。

对账之前确认两份报表看到的时间是否相同

设想销售报表每天六点刷新,客服报表每小时更新。午后处理了一笔退款,客服下午已经看见,销售页面要第二天才更新。此时把两份数拉到相同截止时点,才能看出差异来自刷新还是定义。可以让两份查询都固定一个数据截至时间,再拿当天的四条样本重算。若无法重现某一旧快照,就给业务说明能核对的日期范围,并建议今后保留刷新时间、数据版本与结果摘要。

再增加一个跨币种分支。假设乙用另一种货币支付,表里两个金额直接相加就失去意义。业务可能按交易日换算,也可能用于当天实际结算,二者需要明确汇率来源和日期。面试问题若没有提供汇率,可以先分别汇总币种并标出待确认,避免凭假设给精确总量。这样能够分开算得出数字和数字能够用在哪里。即使本轮只用人民币模拟,定义页仍可以写明当前范围,以及未来扩展前要新增哪些字段。

用一份发布说明完成最后的交接

假设决定将默认仪表盘从“订单净额”换成“当日净流入”,可以写明改动日期、指标名称、新旧公式、看历史的方法,以及受到影响的下游。让销售团队知道原始活动成交指标仍可在哪里查看,让客服知道新页面如何识别退款发生日。切换前挑一天并行核算,按交易样本逐条确认三种定义的结果。切换当天让一个实际报表用户做一次复核,比如打开昨天详情,指出哪一笔退款使两个指标分开。

面试官也可能追问:“财务说我就要一个数字。”可以先确认其正式用途和适用规范,按组织认可的权威来源处理;如果同时有运营报表需求,就在业务使用处把标签和说明补清。数据候选人无需替财务做会计判断,但可以把输入、字段、测试结果与未决点组织起来,让负责人快速作决定。练习提交时附一个具体的变更记录,避免只说团队开会统一了口径。

在交接页上保留每个定义的负责人与更新时间。

常见问题(FAQ)

两张图不同,先查 SQL 还是先问业务?

先找清图表标签、时间、粒度和用途,再抽样重算。从技术和口径两侧同时排除。

两种营收指标可以同时保留吗?

可以为不同使用场景分别命名、说明定义,并让报表使用者知道应该用哪一个。

用同一个模型就不会有口径争议了吗?

模型可以复用计算,但定义、来源、版本和历史变更仍需要负责人确认。

参考资料与官方说明
把指标争议练成数据岗面试回答

带一份已有分析或仪表盘,练习把定义、可复算样本和业务选择放到同一页。