GUIDE

月报和日流水对不上?不同粒度的表怎么对账

2026.03.02·阅读 4 分钟
更新于 2026.03.25

做财务核对经常遇到一个问题:一张表是按月汇总的,另一张是每天一行的流水。两边用的是同一个主键(比如"月份"),但粒度不一样——月报每月一行,日流水同一个月有二三十行。想把日流水加起来看看跟月报对不对得上,传统方法是用 SUMIFS 或者做透视表。

现在 Data Diff Lab 新增了"不同粒度对账"模式,自动检测哪边粒度更细,聚合后再比对。不需要你手动写公式或者做透视表。

什么是"粒度不同"?

◆ 常见场景

月报 vs 日流水:月报每月一行(收入 158,000),日流水同月有 5 行(28000 + 35000 + 42000 + 31000 + 22000 = 158,000)

订单汇总 vs SKU 明细:订单表一行(总金额 5,800),明细表按 SKU 拆 3 行(2000 + 1800 + 2000 = 5,800)

部门预算 vs 项目支出:部门级一行总额,项目级有多行拆分

共同点:主键相同(月份、订单号、部门),但一边的行数更多。

实操:月报 vs 每日流水,4 步搞定

下面用一个完整示例走一遍,示例 Excel 可以下载跟着做。

数据说明

两张表都以"月份"为关联字段。月报表(A表)每月一行,有收入、支出、订单数、退款金额四个字段。日流水表(B表)同月有多行(按日拆分),字段名相同。其中 2 月的支出故意设了差异(月报 86,800 vs 流水合计 87,300,差 500),7 月只有日流水没有月报。

📎示例文件:财务月报 + 每日流水(含预期结果)↓ 下载 .xlsx
Sheet 1:财务月报(粗粒度,6行)
月份收入支出订单数退款金额
2025-01158,00095,2004203,200
2025-02142,50086,8003802,800
… 共 6 个月(1月 ~ 6月)
月报每月 1 行,其中 2 月支出 86,800 和流水合计 87,300 差 500。
Sheet 2:每日流水(细粒度,27行)
月份日期收入支出订单数退款金额
2025-0101-0328,00017,00075500
2025-0101-0835,00020,20090800
2025-0101-1542,00026,000115900
… 1月共 5 行,2~6月各 4 行,7月 2 行(月报无此月)
每月有多行日明细,7 月只有流水没有月报(会被标为"细粒度独有")。

操作步骤

打开 Data Diff Lab,选模式 不同粒度对账(第三个卡片)
上传示例文件:A 选 Sheet"财务月报",B 选 Sheet"每日流水"(不用管谁粗谁细,工具自动判断)
设置主键:A.月份 ↔ B.月份。设好后上方会提示"检测到 B表 是细粒度侧(平均每主键 4.5 行)"
添加聚合对比规则(4条):
· B(细) 收入 SUM → vs A(粗) 收入,误差 0.01
· B(细) 支出 SUM → vs A(粗) 支出,误差 0.01
· B(细) 订单数 SUM → vs A(粗) 订单数,误差 0.01
· B(细) 退款金额 SUM → vs A(粗) 退款金额,误差 0.01
点"开始对账",结果一目了然

预期结果

▼ 对账结果预览

nmwks.com/data-reconcile — 不同粒度对账结果
7
总行数
5
完全一致
1
值不一致
0
粗侧独有
1
细侧独有
状态主键A(粗):收入B(细):收入_sum差值A(粗):支出B(细):支出_sum差值
✓一致2025-01158000158000095200952000
≠不一致2025-0214250014250008680087300500
✓一致2025-0317500017500001085001085000
✓一致2025-04163000163000099000990000
✓一致2025-0518950018950001153001153000
✓一致2025-0617100017100001048001048000
细侧独有2025-077500045000

结果显示:1月、3~6月全部一致,2 月支出差 500(月报 86,800 vs 流水聚合 87,300),7 月只在流水表有(月报缺这个月)。

和模式二"汇总 vs 明细"有什么区别?

对比项模式二:汇总 vs 明细模式三:不同粒度
用户需要做什么手动指定谁是汇总、谁是明细不用管,工具自动检测
上传方向汇总放左边,明细放右边(有顺序要求)随便放,工具自己判断
配置步骤分两步:先配聚合,再配对比一步完成:选细侧列 + 聚合方式 + 粗侧对应列
适用场景一张是汇总,一张一定是明细不确定谁粗谁细,或两边都有一定重复

简单说:如果你明确知道谁是汇总表,用模式二;如果不想分辨或者两边都有重复行,用模式三更省事。

聚合方式怎么选?

添加对比规则时需要选择聚合方式,常用的四种:

SUM(求和):最常用。金额类字段几乎都选 SUM——日流水的收入求和后应该等于月报的收入总额。适用于:收入、支出、销售额、退款金额、数量等可累加的数值。

COUNT(计数):统计细侧有多少行。比如月报上写"1月订单数 420",你想确认日流水表里 1 月确实有 420 行记录。注意 COUNT 统计的是行数,不是某个字段的值——如果日流水表里订单数字段记录的是每天的订单数(不是每行代表一个订单),那应该用 SUM 而不是 COUNT。

MAX / MIN(最大值 / 最小值):用于校验极值。比如月报记录了"当月最高日销售额",你想确认跟流水表的 MAX 是否一致。这种场景不常见,但在质检和风控报表中偶尔用到。

同一次对比可以混合使用不同的聚合方式。比如收入和支出用 SUM,订单数用 COUNT,最高日销售额用 MAX——在添加规则时逐条设置即可。

其他粒度场景

除了月报 vs 日流水,这些场景也适用:

订单级 vs SKU 级:订单表一行一个订单总金额,明细表一行一个 SKU。主键选"订单号",细侧金额 SUM 后和粗侧对比。电商运营核对发货数据时经常遇到这种情况。

年度预算 vs 月度执行:年预算一行,月度执行 12 行。主键选"年份"或"部门"。财务部年终核算必做。

客户汇总 vs 交易明细:客户维度一行总消费额,交易维度有多行。主键选"客户ID"。CRM 系统导出数据常见这种格式差异。

仓库汇总 vs 出入库流水:仓库报表按 SKU 汇总库存变动,流水表每次出入库一行。主键选"SKU 编码",数量用 SUM。

常见踩坑和解决方案

主键不完全匹配

一边写"2025-01",另一边写"2025年1月"或"Jan 2025"——虽然表达的是同一个月,但文本不一致,工具会判断为"两边都找不到对方"。解决方法:上传前在 Excel 里统一主键格式。最简单的方式是用 TEXT 函数把日期统一成 YYYY-MM 格式。

数据类型不一致

A 表的金额是纯数字(158000),B 表的金额带了千分位逗号("158,000")或货币符号("¥158,000")。带格式符号的字段会被当成文本而不是数字,导致求和结果为 0 或报错。解决方法:在 Excel 里先把格式统一——选中列,右键"设置单元格格式",选"数值"。

细侧有空值行

流水表里有几行的金额是空白(不是 0)。SUM 会忽略空值,所以结果可能看起来"一致"但实际上少算了几行。如果怀疑有这种情况,可以额外加一条 COUNT 规则——如果 COUNT 的行数比预期少,说明有空行。

误差容忍度怎么设

默认误差 0.01 适合精确匹配。但有些场景需要更宽松的容忍度:金额涉及外币换算时,汇率精度可能导致小数点后几位不同,可以把误差设为 0.5 或 1;百分比字段因为四舍五入的差异,可以设 0.01(即 1%)。关键原则:误差设太大会漏掉真正的差异,设太小会产生大量"假差异"。

用 Excel 的 SUMIFS 手动做要多久?

如果不用工具,传统方法是这样的:在月报表旁边新建一列,写公式 =SUMIFS(流水表!C:C, 流水表!A:A, A2),把日流水的金额按月份求和,再跟月报的值做减法看差异。每个对比字段都要写一列 SUMIFS,4 个字段就要写 4 列。然后还要处理"细侧独有"的情况(月报没有但流水有的月份),这需要额外用 COUNTIF 检查。

一张 6 个月的小表,手动操作大概需要 15-20 分钟。但如果是一年 12 个月、10 个对比字段、上千行流水,公式复杂度和出错概率都会急剧上升。Data Diff Lab 把这些逻辑内置了——你只需要选字段和聚合方式,30 秒出结果。

工具判断粒度的方法:看哪边的"同一主键出现的行数"更多。比如 A 表每个月份 1 行,B 表每个月份 4~5 行,那 B 就是细粒度。如果两边差不多,工具会选行数更多的那边。
ESC