从 Excel 到 iModel · 第 3 章

VLOOKUP 替代:iModel 里怎么做表关联

VLOOKUP 替代,在 iModel 里对应的是 Joiner 节点。但真正需要转过来的不是操作,是三处认知错位 – 按列名而不是列号匹配、一对多会变多行、以及没匹配上的记录不会静默消失。

VLOOKUP 替代,指的是把 Excel 里用 VLOOKUP、XLOOKUP 或 INDEX MATCH 完成的表关联,改成用可视化节点来做。在 iModel 中承担这个职责的是 Joiner 节点,它按列名匹配两张表,并把结果输出为一张新表。

操作层面的转换不难,半小时就能上手。真正需要花时间的是三处认知上的差异,本章第三节会逐个讲。

这个问题通常是这样被描述的

「我有一张订单表,只有门店编号,没有门店名字。门店名字在另一张表里。以前我在订单表右边加一列写 VLOOKUP,把名字拉过来。现在这张订单表有二十多万行,一拖公式电脑就卡半天,而且每次源文件换了我还得重新拖一遍。」

这是 VLOOKUP 最典型的用法:用一张表里的编号,去另一张表里换取对应的信息。数据库里管这叫「关联」,Excel 里叫「查找引用」,说的是同一件事。

本章用一套虚构的订单数据演示。三张表:订单表有订单号、门店编号、商品编号、数量、下单日期;门店表有门店编号、门店名称、城市;商品表有商品编号、商品名称、品类、单价。目标是把三张表拼成一张能直接看的宽表。

关键事实

Excel 对应函数VLOOKUP、XLOOKUP、INDEX + MATCH
iModel 对应节点Joiner
节点库位置Manipulation → Column → Split & Combine
匹配依据列名(不是列号,插入列不会影响结果)
输入端口两个(左表、右表)
输出端口可配置为三个:匹配上的、左表未匹配的、右表未匹配的
一对多时的行为展开为多行(VLOOKUP 只取第一条)
常见搭配节点Row FilterColumn FilterGroupBy

VLOOKUP 替代:三处需要转过来的认知

Joiner 的操作比 VLOOKUP 简单 – 选两张表、选按哪一列匹配、选连接方式,三步。会卡住的地方不在操作,在下面三个概念差异。

错位一:按列名匹配,不按列号

VLOOKUP 的第三个参数是列号,一个数字。VLOOKUP(A2, 门店表!A:C, 2, 0) 里的 2 意思是「取查找区域的第二列」。

这个写法的问题是它和列的位置绑死了。有人在门店表里插了一列,第二列不再是门店名称,你的公式还在跑,返回的却是错的东西 – 而且不报错。

Joiner 按列名匹配和取值。门店表里插多少列都不影响,因为你指定的是「门店编号」这个名字,不是「第一列」这个位置。

错位二:一对多会变成多行

这是转换期最容易被当成 bug 的地方。

VLOOKUP 不管右表里有几条匹配,永远只返回找到的第一条,左表一行还是一行。Joiner 不是 – 右表里如果有三条记录匹配上,输出就是三行。

为什么这是对的

假设一个门店编号在门店表里出现了三次(比如历史上改过名字,三条记录没清理干净)。VLOOKUP 给你一个名字,你不知道还有两条;Joiner 给你三行,你立刻发现源数据有重复。

换句话说,行数变多不是 Joiner 出错,是它把 VLOOKUP 一直在替你隐藏的问题显示出来了。真正该做的是回头处理源数据的重复,可以用 Duplicate Row Filter

错位三:没匹配上的记录不会消失

这一条对做审计和对账的人最重要。

VLOOKUP 找不到时返回 #N/A。因为一整列 #N/A 很难看,标准做法是套一层 IFERROR 变成 0 或空白。

然后这些没匹配上的记录就静默消失了。月底数对不上,你知道少了,但不知道少在哪 – 因为它们已经被处理成 0 了,混在正常数据里。

Joiner 的做法不同:它可以配置成三个输出端口,第一个是匹配上的,第二个是左表里没匹配上的,第三个是右表里没匹配上的。没匹配上的记录被单独输出到另一条线上,你能直接点开看是哪些。

这一条为什么值钱

「这个数是怎么来的」是审计、复核、交接时唯一有用的东西。一个把异常静默吞掉的流程,出问题时你只能重头查;一个把异常单独放出来的流程,出问题时你直接看那一路的输出就行。

VLOOKUP 替代:在 iModel 里的五步

用前面那三张表演示,把订单表关联上门店名称。

  1. 拖入两个 Excel Reader 节点,分别读订单表和门店表,各自执行一次确认数据读进来了。
  2. 拖入 Joiner 节点,把订单表接到上面那个输入端口(左表),门店表接到下面那个(右表)。左右顺序会影响后面的连接方式,先按这个来。
  3. 双击 Joiner 打开配置,在匹配条件里选择:左表的「门店编号」对应右表的「门店编号」。
  4. 选连接方式。想保留全部订单(哪怕匹配不上门店)就选左连接;只要能匹配上的就选内连接。判断标准见下一节的对照表。
  5. 在输出设置里勾上把未匹配的行输出到单独端口,然后执行。执行完先看第二个端口有没有数据 – 有数据就说明源数据有问题,先处理它。

第五步是这一章最想让你养成的习惯。先看未匹配端口,再看主结果,这个顺序和 Excel 里「先看结果对不对」是反的,但它能省掉大量后期排查。

VLOOKUP 替代:该用哪个

场景Excel 做法iModel 做法该用哪个
临时查一个编号对应什么直接 VLOOKUP要建工作流Excel
每月固定关联同几张表每次重拖公式建一次,之后点执行iModel
二十万行以上拖公式明显卡顿正常处理iModel
需要知道哪些没匹配上套 IFERROR 后就看不见了单独端口输出iModel
右表可能有重复记录只取第一条,不告知展开为多行,问题暴露iModel
源表列的位置常变动列号写死,容易错按列名匹配,不受影响iModel
要向审计解释关联逻辑逻辑藏在公式里节点配置可见iModel
一次性核对,用完就扔几分钟搞定建流程反而慢Excel

第四列是这张表的重点。iModel 不是所有关联场景都更好 – 临时查一个值、一次性核对,Excel 又快又直观,没必要搬。

常见的适应难点

「行数怎么变多了」是最高频的第一反应。

接上第三节的错位二:Joiner 遇到一对多会展开成多行,而 VLOOKUP 永远保持左表行数不变。第一次看到订单表从 20 万行变成 20 万零几百行,本能反应是「工具算错了」。

它没算错。多出来的那几百行,对应的是右表里有重复记录的编号。Excel 时代这个问题一直存在,只是 VLOOKUP 帮你把它藏起来了。

判断方法:执行后对比输入输出的行数。数字不一致就去查右表的匹配列有没有重复值,用 Duplicate Row FilterGroupBy 数一下每个编号出现几次。

这个习惯养成之后,你会开始发现一些以前不知道存在的数据质量问题。这算好事,虽然刚开始会有点烦。

常见问题

可以,但要多加一步:在 Joiner 之前先对右表用 Duplicate Row Filter 按匹配列去重,只保留第一条。不过更推荐的做法是先搞清楚右表为什么会有重复 – VLOOKUP 默默取第一条这件事,在很多场景下其实是个隐患而不是特性。
是的。这三个 Excel 函数解决的是同一类问题 – 用一张表的值去另一张表取对应内容,区别只在语法和灵活度。在 iModel 里它们都对应 Joiner 节点,不需要区分。
看你要不要保留匹配不上的记录。做订单分析通常选左连接:所有订单都要保留,某个门店编号在门店表里找不到,那一行的门店名称留空,但订单本身不能丢。做已确认数据的核对可以用内连接:只要两边都有的记录。拿不准就先用左连接,它更接近 VLOOKUP 的行为。
两个。第一个 Joiner 把订单表和门店表关联,第二个把结果再和商品表关联。Joiner 每次处理两张表,多张表就串起来。串的顺序按数据量从大到小接为左表,通常更省内存。
不用改。Joiner 的匹配条件是左右各选一列,两列名字不同也可以对应上 – 比如左表叫「门店编号」,右表叫「store_id」,直接选就行。这一点比 VLOOKUP 要求查找值必须在区域第一列灵活得多。
通用。iModel 基于 KNIME 开源内核二次开发,Joiner 节点的行为一致,区别在于 iModel 的界面和参数是中文的。用 KNIME 的读者按英文名对照即可,节点手册里有完整的参数中英对照表

相关内容

本章讲的是「为什么和什么时候」。Joiner 每个参数具体怎么配、配置对话框里每个选项什么意思,在节点手册里:Joiner 节点中文说明

装好就能跟着做

iModel Analytics Studio 是开源版本,免费、不限功能与使用时长。Windows 与麒麟、统信环境都是双击安装,十分钟内可以装好并跑通本章的例子。

下载六章合订 PDF 完整版 · 34 页,含全部图表,无需留资。

想系统学一遍?可以从 数据分析入门教程KNIME 中文知识库 开始,也可以回到 本系列目录

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

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

手机与邮箱至少填一项

4008568196 拨打此号码联系我们

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码