格致GEZHI · GZ
3F · 工作室工作室

只放做出来的东西:平台级项目、飞书技能包、技术点拆解,外加白皮书与在线演示。

工作室UNIT S13 · 数字对不上:三次数据对账复盘

STUDIO · SPEC SHEET · UNIT S13

数字对不上:三次数据对账复盘

数据工程设计 胡安更新于 2026-09

角色独立开发(业务+技术)
场景数据平台 正确性
技术栈SQL 口径 · fixture 校验 · 行数门槛
成果分项和=总数恒等式钉死口径

定位:数据系统的信任,是被几次「数字对不上」救回来的

这套平台是给人看数、拿数做决策的。功能错误用户会报障,数字错误用户不会报——他只是默默不再相信这张表。所以这个项目里最宝贵的反馈,全部来自用户拿着真实业务数据来对账:「这个数应该是 36,479,你算出 36,749」「这个料号明明有数据,为什么查不到」「还是 259 条,不对」。这篇把三次典型对账复盘成方法。

案例一:「实时物料数」之争——先定口径,再谈对错

指标卡上的实时物料数,先后出现过两个版本:先做的是按业务规则去重的口径,用户验收时说和手工账对不上;换成全表行数 COUNT(*) 之后,又花了三轮才让所有相关数字(明细行、去重数、其他行兜底)在新口径下互相咬合——最后用测试夹具断言「各分项之和等于总数」,才算封版。

教训:对账前先问「这个数的口径是什么」,口径之争没有对错,只有选择。而口径一旦选定,必须用一个机器可验证的恒等式(分项和 = 总数)钉死,否则每次改代码都会悄悄漂移。

案例二:「筛选之后数字暴增」——判定和筛选必须分离

一个专用分析场景,用户选了某个筛选条件后,某个统计数字不降反升。查下来是 SQL 写法问题:用户的筛选条件被混进了「专用判定」——本该在全量数据上做的有效性判定,被先用筛选条件过滤了一遍。筛选面越窄,判定通过的占比反而越高,数字自然暴增。

修复后的铁律写进了代码注释:用户的筛选只过滤展示计数,一切判定(去重、有效性、状态归类)永远在全量数据上做。这条后来成为所有聚合 SQL 的评审标准。

案例三:「20155343 查不到」——用真数据走查,别信抽样

半成品查询上线后,用户拿了一批真实料号来验,其中一个按业务知识应该能查到对应印制板,系统却查不到。抽样测试全绿、真实数据漏网——根因在匹配路径的覆盖盲区(单一路径匹配漏掉了间接关联)。修复方向是双路径匹配 + 用用户提供的整批真实料号做回归集。

从此这个项目的测试数据有一条新规矩:功能验收必须带一批用户真实数据走查,样例数据只能证明代码没写错,证明不了业务没漏。

一条制度性防线:数字会撒谎,门槛不会

对账解决「算法错」,还有一类问题是「数据本身坏」:上游同步故障时源表从 218 万行缩到几万行,照常重建物化表就是把坏数据原样端给用户。后来给重建任务加了行数门槛——源数据低于基线直接拒绝重建、保留旧表、告警等人。宁可给旧数据,不给错数据,这条守卫此后再没让坏数据上线过。

价值与可复用方法

三次对账沉淀成四条可复用规则:口径先行并用恒等式钉死;判定与筛选分离;验收必带用户真实数据走查;数据任务全部带行数门槛。方法都不新鲜,新鲜的是执行密度——数据产品的信任就是这样一条一条「对上了」攒出来的。