财务核算、开票回款时,事实表往往只有商品编码或客户名称,单价、品名、客户编码却在价目表、客户主数据里;同一商品中途调过价时,还要按下单日所在的生效区间取当时单价,不能用现价去算旧订单。

如果靠 Excel 的查找引用或手工对照,精确编码还勉强能做,一遇历史价区间、客户名称多写一个「有」字,公式就会断、对错行,也无法形成可复跑的对账底稿。

DT-Bot 的 「匹配填充」 算子专为解决此类按键从另一张表把字段填过来而设计。它支持精确匹配、区间匹配、名称近似匹配,并可限定仅填充空值。目标表行数不变;写了输出表名则另存新表,不写输出名就在原表加列。

一、 核心能力与适用场景

「匹配填充」算子聚焦于目标表行集合不变、按键补列,覆盖以下四项核心能力:

核心能力 解决什么业务问题 典型业务场景
精确匹配 两边键值能对上时,把查找表里的指定列填到目标表。 订单只有 SKU,从价目表把单价、品名填过来才能出账。
区间匹配 同一键有多段生效日、失效日,按目标表日期落在哪一段取值。 商品中途调价,按下单日落在「生效日~失效日」之间的单价核算旧订单。
名称近似匹配 两边名称不完全一致时,按近似对上后再补编码或属性。 订单上的客户名称和主数据差一个字,对上之后补客户编码、入账。
仅填充空值 目标列已有值的行不覆盖,只补空单元格。 考勤表部门有的已填、有的为空,只把空的部门从花名册补上。

二、 边界指南:它与相近算子有何区别?

在构建数据工作流时,理解算子之间的职责边界至关重要:

比较维度 「匹配填充」算子 「新增列」算子 「表格合并」算子 「缺失填充」算子
主要定位 按键从另一张表把已有字段填过来 在本表(或跨表取数后)新建计算列 多表合成一张新表 在本表空单元格里填常数或沿轴传播
输出机制 不写输出名则在原表加列;目标表行数不变 就地加列,行数不变 源表只读,写出新表 默认就地改源表,行数不变
典型动作 精确/区间/近似匹配后填列;可仅填空 空列、常量列、本表乘除、序号列 上下拼行、左/内/右/全连接 用上行、常数、均值等填空
如何选择 “订单行不能少,只要把价目里的单价贴过来” “明细已有单价、数量,要新建金额=单价×数量” “华东、华北两张订单要拼成一张总表” “合并单元格导出后,空着的地区用上面最近非空往下填”

三、 提示词编写规范与公式

「匹配填充」算子支持自然语言直接表达,建议遵循以下标准的三要素编写公式:

【按哪一列(键)匹配】 + 【从哪张表取哪些列】 + 【填到哪张表(及是否仅填空 / 输出名)】

总体架构:按 “键” 匹配,从 “哪张表” 里面把 “哪些列” 填到 “哪张表” 。

1. 目标表范围表达

  • 点名目标表与查找表:写清填到哪张表、从哪张表取数,例如 填到 “订单表”、从 “价目表” 里面;
  • 输出可选:输出 “订单表_填充” 则另存;不写则在目标原表上加列。

2. 核心操作动作表达

  • 精确匹配:按 “SKU” 匹配;
  • 区间匹配:把 “下单日” 落在 “生效日” ~ “失效日” 之间的 “单价” 填到;
  • 名称近似:按 “客户名称” 近似匹配;
  • 仅填空:在动作后追加 仅填充空值。

3. 可复制示例

按 “SKU” 匹配,从 “价目表” 里面把 “单价” 、 “品名” 填到 “订单表” ,输出 “订单表_填充” 。

对应三段:键是 SKU;从价目表取单价、品名;填到订单表并另存「订单表_填充」。去掉最后一句,就在「订单表」上加列。

四、 核心功能与图解实战

以下结合真实企业数据场景,展示「匹配填充」在不同需求下的处理效果:

场景 1:精确匹配(对上编码,把字段填过来)

业务背景:财务核算销售金额、毛利时,订单明细只有商品编码,单价和品名在价目表里,对上之后才能出账。订单行一条都不能少。

【处理前:订单表】

订单号 SKU
1 A01
2 A02

【处理前:价目表】(查找表,只读)

SKU 单价 品名
A01 10 水杯
A02 20 毛巾

【执行提示词】

按 “SKU” 匹配, 从 “价目表”里面把 “单价” 、 “品名” 填到 “订单表” 。

【处理后:订单表(就地加列)】

订单号 SKU 单价 品名 变更说明
1 A01 10 水杯 按 SKU=A01 从价目表填入
2 A02 20 毛巾 按 SKU=A02 从价目表填入

逻辑详解:目标表仍是 2 行,只是在右侧追加「单价」「品名」;价目表本身不被改写。需要保留原订单表时,在提示词末尾加上 输出 “订单表_填充”。


场景 2:区间匹配(同一商品多段生效日,按下单日取值)

业务背景:同一商品中途调过价,核算历史订单必须按下单日所在的生效区间取当时单价,不能用现价去算旧单。

【处理前:订单表】

订单号 SKU 下单日
1 A01 3月10日
2 A01 6月20日

【处理前:价目表】(查找表,只读)

SKU 生效日 失效日 单价
A01 1月1日 3月31日 10
A01 4月1日 (空) 12

【执行提示词】

按 “SKU”匹配, 从 “价目表” 里面把 “下单日” 落在 “生效日” ~ “失效日” 之间的 “单价” 填到 “订单表” 。

【处理后:订单表(就地加列)】

订单号 SKU 下单日 单价 变更说明
1 A01 3月10日 10 3月10日落在 1月1日~3月31日
2 A01 6月20日 12 6月20日落在 4月1日起的后一段

逻辑详解:两行订单的 SKU 相同,但下单日落在不同区间,因此单价分别取 10 与 12;订单行数仍为 2,不会按价目表行数膨胀。


场景 3:名称近似匹配(客商名称不完全一致)

业务背景:订单上的客户名称和客户主数据不完全一致(多写了「有」),财务对客商、开票回款时要对上之后才能补客户编码、入账。

【处理前:订单表】

订单号 客户名称
1 华为技术有有限公司
2 阿里巴巴集团有有限公司

【处理前:客户主数据表】(查找表,只读)

客户名称 客户编码
华为技术有限公司 C01
阿里巴巴集团有限公司 C02

【执行提示词】

按 “客户名称” 近似匹配,从 “客户主数据表” 里面把 “客户编码” 填到 “订单表” 。

【处理后:订单表(就地加列)】

订单号 客户名称 客户编码 变更说明
1 华为技术有有限公司 C01 名称近似对上主数据「华为技术有限公司」
2 阿里巴巴集团有有限公司 C02 名称近似对上主数据「阿里巴巴集团有限公司」

逻辑详解:目标表「客户名称」单元格保持原样,只追加「客户编码」;行数仍为 2。两边名称完全一致时应走精确匹配,不必写「近似」。


场景 4:仅填充空值(已有部门不被覆盖)

业务背景:考勤表部分行已经写了部门,部分行为空;花名册里有完整部门。财务只希望补上空格子,不能把考勤表里已经核对过的部门改掉。

【处理前:考勤表】

工号 姓名 部门
001 张三 (空)
002 李四 销售部

【处理前:员工花名册表】(查找表,只读)

工号 部门
001 人事部
002 销售部

【执行提示词】

按 “工号” 匹配,从 “员工花名册表” 找,把 “部门” 填到 “考勤表” ,仅填充空值。

【处理后:考勤表(就地更新目标列)】

工号 姓名 部门 变更说明
001 张三 人事部 原为空,按工号补上人事部
002 李四 销售部 原已有值,仅填空时不覆盖

逻辑详解:目标表行数仍为 2;「仅填充空值」只改空单元格。若不写这句,已有「部门」也会按查找表重写。

五、 常见问题与操作贴士(FAQ)

Q1:为什么执行后没有多出一张「订单表_填充」?

答:未写 输出 “……” 时,算子默认在目标原表上加列(或写入已有目标列),工作空间不会复制一张新表。需要保留填充前的订单底稿时,请显式写出输出表名。

Q2:匹配不上时,会不会把订单行删掉,或把价目表多出来的行拼进来?

答:不会。目标表行数、行序保持不变;对不上的行在新填列上为空。查找表只读,不会因为价目表多 SKU 就往订单表加行。若要把两张表按键拼成一张可增行的新表,请用「表格合并」的连接,而不是本算子。

Q3:连续跑两次填充,第二次会怎样?

答:就地加列后,目标表已经带有上一轮写入的「单价」「品名」等列。再次运行时,未写「仅填充空值」可能覆盖这些列;写了「仅填充空值」则只补仍为空的格子。换一种匹配规则前,请确认当前列是要覆盖还是要另存新表,避免把已核算的单价冲掉。

六、 关联算子导航