前言:
此刻大家对“网络计划表算法”都比较注重,看官们都想要了解一些“网络计划表算法”的相关资讯。那么小编也在网摘上收集了一些有关“网络计划表算法””的相关资讯,希望同学们能喜欢,兄弟们快快来学习一下吧!接昨日的设计需求,再次强制类似这样的Excel表单运算是不推荐的,只是很多中小工厂的信息化不完善的一种补充;
接上文《全自动MRP物料需求运算报表》-01
生产计划排程表和BOM物料清单都有了,如果需要实现按BOM分解订单的需求,就需求找到对应的BOM中的零件,BOM表的物料明细表一般都会有非常多数据,也就是所有零件的BOM明细都在里面,要实现根据下达订单找到BOM的就需要用到筛选函数。
根据需求找到对应BOM明细
计划排程表中已经有零件A和C,BOM表明中有A、B、C三个零件(这里为方便截图),三个零件和三百个零件的原理一样,只要最小模型的算法验证成功,就可以复制到数据大的模型中。
录入函数:=FILTER(B3:D13,B3:B13=F3)
可以实现对排程表中的A订单进行分解。如果需要继续对别的订单分解的话,需要用到高阶函数。
合并多次筛选的结果
上面已经筛选出单个零件A的结果,现在需要筛选出第二个零件A的结果,因为这是动态数组一对多函数,所以无法向下填充,对于类似这样的一对多返回一个区域的函数,需要用到一个经典的思路:
DROP+REDUCE+LAMBDA+VSTACK+FILTER 的组合,这个组合初学者很难理解,其实只需要记得固定“格式”套路即可;
=REDUCE("",F3:F7,LAMBDA(x,y,VSTACK(x,
X代表“”空
Y代表零件列表中的:A/A/A/A/C,每运算一次会产生类似上面说到的录入函数:=FILTER(B3:D13,B3:B13=F3)的结果,这里的Y代表一个数据区域,一共有5个元素,代表会运算5次。
VSTACK,就会通过X,Y的每一次运算结果合并成为一个垂直数组。
上面的话如果一时不能理解,只需要强记上面的格式即可;
加上Y就可以把这个公式的函数写完:
=REDUCE("",F3:F7,LAMBDA(x,y,VSTACK(x,FILTER(B3:D13,B3:B13=y))))
注意这里没有用DROP去除第一行,所以第一行出现了错误,另外这个公式的Y值注意替换一下,也就是把原来的:
原来:=FILTER(B3:D13,B3:B13=F3)
变更:=FILTER(B3:D13,B3:B13=Y)
所以最后的公式就是:
=DROP(REDUCE("",F3:F7,LAMBDA(x,y,VSTACK(x,FILTER(B3:D13,B3:B13=y)))),1)
完成后的效果如下图,但是这个公式只是验证数据的最小模型,不是最佳模型,因为订单的行数不可能只有5个元素,可能会有更多,当Y值变大的或变小的时候如何动态调整。
设计动态的”Y”值
为了应对生产计划排程中的“Y”值的变化,需要对这个“Y”值做一个通配性设计。把Y值的结果变成这样,录入函数:
=FILTER(F3:F30000,F3:F30000<>"")
这个函数的目的就是筛选生产计划排程表中的零件A列不等于空的数值,这样只要数据没有超过30000行都可以动态更新了,无需更改或者填充函数了。替换Y值后函数变成:
=DROP(REDUCE("",FILTER(F3:F30000,F3:F30000<>""),LAMBDA(x,y,VSTACK(x,FILTER(B3:D13,B3:B13=y)))),1)
重新录入排程表中的订单数,变更成A/B/C,可以发现分解表中的物料需求不需要更新填写公式了,实现了一键填充。
最后就是为了让BOM物料明细表中也能动态更新,只需要把范围再次扩大就可以了,这里扩大为300000行。一般中小企业所有零件的BOM加起来一般不会超过30W行;
=DROP(REDUCE("",FILTER(F3:F30000,F3:F30000<>""),LAMBDA(x,y,VSTACK(x,FILTER(B3:D300000,B3:B300000=y)))),1)
未完待续……
本节知识点:
FILTER 筛选函数,此函数特别厉害必需掌握,一对多的神器
记住并理解固定合并多个一对多数据的套路的公式:
“=REDUCE("",F3:F7,LAMBDA(x,y,VSTACK(x,”
动态Y值可以配合FILTER筛选不为空的结果,这样就形成了动态联动;
我是古哥:
从事制造行业18年,在企业运营、供应链管理、智能制造系统等方面具有丰富的实战经验。企业智能化,柔性化计划运营管理专家,擅长通过企业流程优化规范,企业管理、导入计划运营提升企业效率;对提高企业准时交货率,降低企业库存,输出智能制造人才有丰富的经验。学习PMC生产计划,关注古哥计划!
标签: #网络计划表算法