181个子件哪种敢备库存?AI挖出5条公式,最短85个字符

Lv.4 核心创作者
🤯181个子件哪种敢备库存?AI挖出5条公式,最短85个字符
做PMC的,谁没在备库存上栽过跟头?
领导丢来一句"库存备足点",你就开始赌:这种料多备些,那种少备些。赌对了没人提,赌错了,要么仓库堆成山,要么产线等米下锅。
其实备不备、备多少,答案就藏在BOM里。我让AI一口气写了5条公式,517行BOM、181个子件,几秒钟分清谁共用、谁专用,最短一条只有85个字符。
一、先分清:共用件和专用件
原始数据是一张父子型BOM长表:父件编码、父件名称、子件编码、子件名称、单位、单位用量,一共517行。
同一个子件编码,会出现在好多父件下面。
判断标准一句话:被1个父件引用,是专用件;被多个父件一起用,是共用件。
先纠正一个叫法——行业里建议说"共用件",别叫"通用件"。万一你的客户是整车厂,"通用件"容易被听成通用零件,差之千里。
这517行里,181个唯一子件,专用件112个,共用件69个。被引用最多的一个子件,挂在32个父件下面。
PMC算这个干什么?安全库存策略。
备货风险越低
;专用件只伺候一个父件,父件一改款一停产,立马变
呆滞库存
。
说白了,共用程度就是备货的胆量:共用越广越敢备,专用件按单采购最稳。
二、方法1:条件计数直数(103字符,速度98)
场景:电子厂、包装厂、食品厂都一样,BOM里子件重复挂在不同父件下,要按子件汇总被引用次数。
AI的思路:先把子件编码去重,再回原列数每个编码出现几次,出现次数就是被几个父件引用。
公式:子件被引用次数与共用判定
=LET(c,UNIQUE(C2:C518),n,COUNTIF(C2:C518,c),HSTACK(c,XLOOKUP(c,C2:C518,D2:D518),n,IF(n=1,"专用件","通用件")))UNIQUE:把C列子件编码去重,拿出181个唯一子件
COUNTIF:拿这181个值回到C列数出现次数,一次引用就是一个父件
XLOOKUP:按编码补上子件名称
IF:次数等于1判专用件,大于1判通用件
103个字符,速度98分,全场最快。小提醒:公式里输出写的是"通用件",你抄的时候可以直接改成"共用件",跟行业叫法对齐。
三、方法2:分组聚合(85字符,全场最短)
AI的思路:既然是"按子件分组数父件",那就直接交给分组聚合函数,一条公式连判定带排序全包了。
公式:分组聚合一步到位
=LET(A,GROUPBY(C2:D518,A2:A518,COUNTA,,0,-3),HSTACK(A,IF(TAKE(A,,-1)=1,"专用件","通用件")))GROUPBY:按子件编码+名称两列分组,对父件列计数,计数结果就是被引用次数
第5参数填0:不出总计行,多一行总计判定列就乱套
第6参数填-3:按引用数从大到小排,共用最多的子件排最前面
TAKE:取出引用数那一列,等于1判专用件,否则通用件
85个字符,最短纪录,还自带降序排序。
四、方法3:排序定位(134字符,速度90)
AI的思路:排序让相同子件挨在一起,头尾位置一减,次数就出来了。
公式:排序后头尾定位差值
=LET(s,SORT(C2:C518),c,UNIQUE(s),f,MATCH(c,s,0),l,XMATCH(c,s,0,-1),n,l-f+1,HSTACK(c,XLOOKUP(c,C2:C518,D2:D518),n,IF(n=1,"专用件","通用件")))SORT:先排序,让相同子件在列里相邻
MATCH:找每个子件第一次出现的位置
XMATCH:第4参数填-1,从尾往头找最后一次出现的位置
尾减头加1:段长就是出现次数
五、方法4:组界差分(198字符,速度88)
AI的思路:不遍历,直接标记每一组的边界行号,首尾相减算次数,全程向量化。
公式:标记组界行号差分计数
=LET(s,SORT(C2:C518),e,(VSTACK(DROP(s,1),"")<>s)*1,pos,FILTER(SEQUENCE(ROWS(s)),e=1),st,VSTACK(1,DROP(pos,-1)+1),n,pos-st+1,c,INDEX(s,pos),HSTACK(c,XLOOKUP(c,C2:C518,D2:D518),n,IF(n=1,"专用件","通用件")))组界标记:下一行不等于当前行,说明一组结束
FILTER:把组界行号筛出来
首尾相减:每组结束行减开始行加1,就是组内行数
INDEX:按位置取出子件编码
向量味最浓,字符也最长,198个,适合喜欢一屏看懂整段逻辑的人。
六、方法5:逐个筛选遍历(133字符,速度70)
AI的思路:最笨也最直白——每个子件,去原列筛一遍、数一遍。
公式:遍历筛选逐个计数
=LET(c,UNIQUE(C2:C518),n,MAP(c,LAMBDA(x,ROWS(FILTER(A2:A518,C2:C518=x)))),HSTACK(c,XLOOKUP(c,C2:C518,D2:D518),n,IF(n=1,"专用件","通用件")))MAP:对每个唯一子件跑一遍自定义计算
FILTER+ROWS:筛出C列等于它的所有行,数行数就是被引用次数
谁都能看懂,还能顺手加复杂条件,但181个子件等于全列筛181遍,速度只有70分,大表慎用。
七、方法对比
排名 | 方法 | 长度 | 精简思路 | 推荐 |
1 | 条件计数直数 | 103 | 去重后条件计数,查找补名称,判断定 | ★★★★★ |
2 | 分组聚合 | 85 | 按子件分组数父件,负3降序,取末列判定 | ★★★★☆ |
3 | 排序定位 | 134 | 排序相邻,头定位尾定位,差值加1 | ★★★★☆ |
4 | 组界差分 | 198 | 标记组界行号,首尾相减,全程不遍历 | ★★★★☆ |
5 | 逐个筛选遍历 | 133 | 每个子件筛一遍数一遍,最直白最慢 | ★★★☆☆ |
五条公式结果完全一致:181个子件,专用112、共用69,最大引用数32。
要最快
,条件计数直数;
要最短
,分组聚合;要保源表顺序,选方法1、3、5;几十万行的大表,
别碰方法5
。
八、避坑清单
"被引用次数"的语义是子件出现在几个父件下,不是用量加总,判定以它等于1为准
同一父件下同一子件出现多行,条件计数会多计,先确认BOM里有没有重复行
分组聚合第5参数记得填0,不然冒出一行总计,判定列直接乱套
方法3、4依赖排序后同子件相邻,源数据乱序时差值会错
反向定位函数第4参数填-1才是从尾往头找,漏了永远找到第一次
合并类函数结果超32767字符会报错,这条链路用横向堆叠没事,别画蛇添足换长文本拼接
最后说一句
以前分共用专用,筛选按到手酸,181个子件要筛181遍;现在一条公式几秒出结果,共用数量直接告诉你备货的胆量有多大。
这是「AI写表格公式」日课第9天,每天一个PMC高频场景,AI写、我验,最后封装成技能。
你家BOM里,共用件多还是专用件多?评论区报个数。想要完整公式清单的,评论区扣「公式」。
术语解释
BOM(Bill of Materials,物料清单):一张表写清楚一个产品由哪些零件、材料组成,各用多少。
父子型BOM:一行记录"哪个父件用了哪个子件、用多少",一个产品拆成好多行,像家谱一层套一层。
共用件:被多个产品一起用的物料,比如同一种螺丝,几十个产品都在用。
专用件:只被一个父件用的物料,父件改款它就跟着报废。
呆滞库存:放在仓库里没人领、越放越贬值的物料。
安全库存:为防断货多备的那部分库存,备多了压钱,备少了停线。
动态数组函数:WPS表格里的新式函数,一条公式自动溢出一串结果,不用再拖几百行填充。
古老师(古哥计划)|中小制造数字化专家|金山 KVP(金山办公最有价值专家)|金山多维表格应用场景专家|金山 WPS 社区优秀创作者
深耕中小制造业数字化落地,擅长用 WPS 多维表格 + AI 低代码方案,帮工厂快速搭建进销存、生产计划、质量追溯等轻量化系统。不用复杂 IT,低成本落地,已服务数百家制造企业,实战经验丰富。
#AI写表格公式 #动态数组 #PMC #安全库存 #共用件
本文由 AI 辅助创作
工具:灵犀专业版
模型:GLM-5.3-Flash 超高