EXCEL|Power Query实例讲解背景介绍:我们的运营部门根据他们的缺货状态给了一份发货计划。这份发货计划是靠invoice#来管控的。即一个invoice#里的货齐了才能发走。一个invoice#里对应很多个SKU,一个SKU的在库数量会分摊在不同的invoice里。那么,如何根据现有库存数量,按照先建的invoice先出货的原则,来合理分配库存到对应的invoice里。原表如下图所示。比如第一个SKU型号ACC000058,10票的发货数量见发货量一列。这个SKU总的库存数是125.那么这125个库存数量能满足几票的发货数量呢?如何快速对应出来呢?1)我们先将表格内容按照SKU升序,INVOICE_No升序的方式进行排序。然后添加到查询编辑器里。如下图所示。2)加个全局索引。加这个索引列的意义是锁死原始业务优先级,防止 Power Query 运算乱序,全局绝对锚点。3)加一个组内索引。这个索引项的目的是限定 SKU 分组内的排队先后,精准实现组内顺序累加。首先我们对表格进行分组依据操作,如下图所示,分组后的列名命名为分组明细。4)结果如下图所示。我们先不要点开table,而是直接添加一个自定义列,公式如下,这一步相当于增加了一个组内索引。= Table.AddIndexColumn([分组明细], "组内索引", 1, 1, Int64.Type)5)在输出的结果上分别点击分组明细和组内索引的table上的左右箭头,获取所有需要的列。结果如下图所示。6)计算本组内累计发货(滚动求和)。添加自定义列,命名为SKU累计发货,然后输入以下公式:let
当前SKU =[SKU],
当前组内序号 =[组内索引],
筛选本组前面行 = Table.SelectRows(#"删除的列"//这个双引号里的名称就是上一操作步骤的名称, each[SKU] = 当前SKU and[组内索引] <= 当前组内序号)
in
List.Sum(筛选本组前面行[发货量])
操作内容如下图所示。
7)上一步结果如下图所示。实现了同一个型号每行发货量的累加。
8)计算每行可用库存数。要实现的是如果在库存充足的情况下,每行可用库存数=发货数量。
公式如下:
=List.Min({ List.Max({0,[库存数量]- ([累计发货量] - [发货量])}), [发货量] })
操作如下图所示。
9)上一步的操作结果如下图所示。一行只要可用库存数量=发货数,那就是库存可以满足这个型号这票的发货需求的。
9)添加一列占用库存情况说明。实现这样的效果:如果满足可发货数量,则显示为库存充足;不足的显示部分占用库存;库存完全耗完后的行直接显示无库存。添加一列条件列,条件格式如下图所示。
9)最终结果如下图所示。这样我们很容易就能筛选出库存满足出货数量的行数。当然,咱们还可以进一步用之前学的内容提炼出哪些invoice是100%有货,可以优先排产的。知识点在这里。这里就不加介绍了。
10)关闭并上载后的结果如下图所示。
如果这样的操作比较多,可以建立一个模版,每次只许修改原始数据,可以通过刷新直接出来结果,省去重复操作的麻烦。
好了,今天就这样吧,大家周末愉快。
原创不易,大家多给鼓励,感谢!