任务教程 · 核对与稽核

KNIME 两张表对账找出差异

系统导出的明细和台账对不上,要查清楚哪些是这边多的、哪些是那边多的、哪些两边都有但金额不一致。这是稽核和对账最常见的一件事。

对账要的是三份结果,不是一份

很多人用 VLOOKUP 做对账,只能得到「匹配上的」,配不上的那些悄悄消失了 – 而配不上的恰恰才是要查的。

结果业务含义
两边都有,金额一致正常,不用管
两边都有,金额不一致差异明细。要逐条查原因
只在左表有台账有、系统没有。可能是漏录或已作废
只在右表有系统有、台账没有。可能是漏登记
Joiner 可以一次给出后三份。它的输出方式能拆成三个端口:匹配上的、左表未匹配的、右表未匹配的。这正是对账要的形态 – 不需要跑三遍。

节点串

台账左表
系统明细右表
先各自清洗
String Manipulation统一关联键
Joiner拆三个输出
Math Formula算金额差
左表独有直接输出
右表独有直接输出

关键在两处:关联之前必须统一关联键,关联之后要把三个输出都用上。

分步看差异是怎么被分出来的

点上一步下一步。琥珀色是这一步的重点。

台账和系统明细

左表四条,右表四条。肉眼已经能看出有问题,FA-002 的编号后面多了一个空格,FA-003 两边金额不同,FA-005 只在一边有。

台账(左表)系统明细(右表)
资产编号台账金额资产编号系统金额
FA-00186000FA-00186000
FA-002 4200FA-0024200
FA-00363000FA-00361000
FA-0047800FA-00512000

先把编号里的空格去掉

两张表各接一个 String Manipulation,对关联列做 strip()这一步不做,FA-002 会被判成两边都独有 – 凭空多出两条假差异,还漏掉一条真匹配。人工填报的数据里这种情况极常见。

处理前处理后不做会怎样
「FA-002 」「FA-002」被当成和「FA-002」不同的两个编号

匹配上的走一个口,两边独有的各走一个口

关联列选资产编号,输出方式选拆成多个表。三个端口的内容一目了然 – 不需要自己再筛。

输出端口内容条数
匹配上的FA-001、FA-002、FA-0033
左表独有FA-004(台账有,系统没有)1
右表独有FA-005(系统有,台账没有)1

匹配上的这一支再比金额

Math Formula 算 $台账金额$ - $系统金额$,再用 Row Filter 筛出不等于零的。FA-003 差 2000 – 这就是要去查原因的那一条。

资产编号台账金额系统金额差额
FA-00186000860000
FA-002420042000
FA-00363000610002000

这才是一次完整的对账结果

三份分别写进同一个 Excel 的不同工作表,交给业务逐条核。总条数要对得上 – 左表 4 条等于匹配 3 条加左表独有 1 条,右表同理。

清单内容条数
金额不一致FA-003,差 20001
台账有系统无FA-0041
系统有台账无FA-0051

四个容易出事的地方

  1. 关联列类型不一致,一条都配不上。左表编号是文本、右表是数字,全部匹配失败,输出空表还不报错。对账时这个后果特别严重 – 你会以为两边完全对不上。关联前看两边列名旁的类型图标。
  2. 关联列有重复,行数暴涨。右表同一个编号有两条记录,左表每行会变成两行,差异清单跟着翻倍。关联前先确认关联键在两边是否唯一,不唯一就要么补上第二个关联列,要么先去重。
  3. 只用了匹配那一个输出。这是最常见的错。配不上的行被静默丢弃,而它们恰恰是对账要找的东西。养成对条数的习惯:三个输出的条数加起来必须和源表对得上。
  4. 金额有小数,差额是 0.0000001。浮点数比较不能直接判等于零。用绝对值小于某个容差来筛,比如小于 0.01 算一致。

换成你的场景要改哪里

要改的地方怎么改
关联键换成你的业务主键。一列不足以唯一标识就选多列
要比的字段不止金额的话,每个字段各算一次差,或者用 Column Expressions 一次算完
容差金额比对建议设容差,别直接判等
输出形态三份写进同一个工作簿的不同工作表,交付时最方便

对账结果条数对不上

先把三个输出的条数加起来和源表比。多了是关联键重复,少了是有输出没用上。

iModel 专属客服
在线留言或电话联系
在线留言

留下您的问题和联系方式,我们会在一个工作日内回复。

手机与邮箱至少填一项

4008568196 拨打此号码联系我们

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码