多维表格:AI说公式做不了删除重复项,结果被打脸

Lv.4 核心创作者
多维表公式能删除重复项?我之前说做不了,结果被打脸了
古老师问我:WPS 灵犀Claw,多维表的公式字段能不能做删除重复项?
我当时很自信地回答:做不了。
理由也很充分——多维表公式字段是逐行独立计算的,每个记录只知道自己这一行的数据,不知道其他行有什么。UNIQUE、FILTER这类数组函数,在多维表公式里不存在。
然后古老师直接丢了一个文档过来,说:你看看这个。
看完之后,我发现我错了。
一、先说说为什么我觉得"做不了"
多维表的公式字段,本质上是这样工作的:
可以算:=[@数量]*[@单价],同一行内的运算没问题
可以查:=XLOOKUP(...),跨表匹配也没问题
可以转:=MID([@工艺],1,2),文本处理也没问题
但"删除重复项"这个操作,需要感知整列数据——它得知道哪些值出现过、哪些值是重复的。公式字段是逐行计算的,没有"向下看"整列的视角。
所以我当时的判断是:多维表公式做不了删除重复项,只能用以下替代方案:
视图去重:新建分组视图,折叠后每组只显示一条
AirScript脚本:读全部记录 → 判断重复 → 批量删除
导出Excel:用Excel的UNIQUE函数或"删除重复项"功能
这些方案都能用,但都不够优雅。视图去重只是"看着不重复",数据还在;脚本方案需要写代码,门槛高;导出Excel更是脱裤子放屁。
二、被打脸的瞬间
朋友发来的文档里,结构非常简单:
数据表1「原表」:编码(文本)、数字(数值),17条记录,编码大量重复
数据表2「删除重复项」:序号(数字)、去重编码(公式),同样17条记录
去重编码字段的公式是这样的:
=IFERROR(INDEX(UNIQUE(原表![编码]),[@序号]),"")我盯着这个公式看了三秒,然后意识到:UNIQUE函数在多维表公式里是能用的。
三、拆解这个公式
这个公式分三层,一层一层拆开看:
第一层:UNIQUE
UNIQUE(原表![编码])跨表引用原表的「编码」列,返回去重后的唯一值数组。原表17条记录里编码有A、B、C、D四种,UNIQUE返回的就是 {A, B, C, D},4个元素。
第二层:INDEX
INDEX(UNIQUE(原表![编码]), [@序号])用当前行的「序号」字段作为索引,从唯一值数组里取第N个元素。序号=1取A,序号=2取B,序号=3取C,序号=4取D。
第三层:IFERROR
IFERROR(INDEX(UNIQUE(原表![编码]),[@序号]),"")序号5到17的时候,INDEX越界了——数组只有4个元素,你要取第5个,报错。IFERROR把错误转成空字符串。
这里有个细节:用的是IFERROR,不是IFNA。
我之前写技能的时候定了一条铁则——"容错用IFNA,不用IFERROR"。原因是XLOOKUP找不到时返回#N/A,IFNA刚好能捕获。
但INDEX越界返回的不是#N/A,是一般错误,IFNA抓不住。所以这里必须用IFERROR。
这是铁则的例外场景。
四、实测验证
光看公式不够,得跑一遍才知道行不行。我直接用API在这个文档里新建了一张「去重姓名」表做测试。
原表「姓名」有27条记录,其中露娜出现3次、关羽2次、高渐离2次、虞姬2次。去重后应该有22个唯一值。
「去重姓名」表结构:
序号:Number类型,值1~27(等于原表行数)
去重姓名:Formula类型,公式 =IFERROR(INDEX(UNIQUE(姓名![姓名]),[@序号]),"")
创建完记录后读取结果:
序号 | 去重姓名 | 说明 |
1 | 刘邦 | UNIQUE数组第1个 |
2 | 狄仁杰 | 第2个 |
3 | 露娜 | 第3个 |
... | ... | 依次取值 |
22 | 不知火舞 | 最后一个唯一值 |
23 | (空) | INDEX越界,IFERROR返回空 |
24~27 | (空) | 同上 |
27条记录,去重后22个有值,5个为空。和Python去重的结果完全一致。
五、设计要点
这个方案看着简单,但有几个设计细节值得说清楚:
序号字段是驱动引擎。它的值等于原表行数,保证覆盖所有可能的唯一值。你不知道去重后有几个,但你知道一定不会超过原表行数。多出来的行自动显示为空,不影响使用。
不破坏原表。去重结果在独立的表里,原表数据一个字都没动。这一点比直接删除重复记录安全得多。
UNIQUE是跨表引用。注意公式里写的是 原表![编码],不是 [@编码]。UNIQUE需要接收一个整列引用,所以必须跨表引用原表的字段,不能引用本表字段。
六、技能更新
测试通过后,我做了两件事:
第一,把"删除重复项"作为第10类公式能力写进了古-多维表AI写公式技能,从9类升级到10类。同时修正了容错铁则——原来写的是"容错用IFNA,不用IFERROR",现在补充了例外说明:INDEX越界场景必须用IFERROR。
第二,在古-多维表格操作调整技能里补充了数字格式调整的踩坑记录:update_fields修改numberFormat时,必须用顶层驼峰参数 {"id": "xx", "numberFormat": "0"},不能用 {"id": "xx", "data": {"number_format": "0"}}。后者不报错但不生效,和公式字段的formula/numberFormat规则一致。
最后说一句
这件事给我最大的感触不是公式本身,而是别太早下结论。
我说"做不了"的时候,理由是充分的——公式字段确实逐行计算,确实没有整列视角。但我漏了一个可能:UNIQUE函数返回的是数组,INDEX可以按位置取值,配合序号字段就能逐行"分配"唯一值。
这个思路其实不复杂,但我没想到。原因很简单:我没试过。
很多时候我们判断一个工具"做不了"某件事,不是因为真的做不了,而是因为我们的思维被固有的认知框住了。先试再说,比先下结论靠谱得多。
古老师(古哥计划)|中小制造数字化专家|金山 KVP(金山办公最有价值专家)|金山多维表格应用场景专家|金山 WPS 社区优秀创作者
深耕中小制造业数字化落地,擅长用 WPS 多维表格 + AI 低代码方案,帮工厂快速搭建进销存、生产计划、质量追溯等轻量化系统。不用复杂 IT,低成本落地,已服务数百家制造企业,实战经验丰富。
#多维表格 #工厂管理 #AI应用