先进先出(FIFO)是企业管理中广泛应用的库存计价方法,尤其在财务核算和成本分析中扮演着重要角色。本篇文章将介绍如何在PowerBI中按先进先出规则计算库存商品的库存成本。
问题描述
按先进先出规则,计算库存商品的库存成本。计算过程如下图所示:
具体问题如下图所示:
本案例的初始数据如下:
入库:
日期 | 商品 | 入库 | 采购单价 |
---|---|---|---|
2022年7月1日 | 苹果 | 10 | 3 |
2022年7月2日 | 苹果 | 20 | 2 |
2022年7月15日 | 香蕉 | 30 | 2 |
出库:
日期 | 商品 | 出库 |
---|---|---|
2022年7月1日 | 苹果 | 7 |
2022年7月6日 | 苹果 | 12 |
2022年7月9日 | 苹果 | 5 |
若需其它辅助表等,可自行创建并建模。
解题要点
因为DAX中并不支持递归,因此在面对先进先出等场景时,需要找到一种数学上能计算的方法来处理。
假设总出库数量为:100,那么本案例的计算思路如下表所示:
日期 | 入库数量 | 累计入库数量 | MAX(累计入库-100, 0) | MIN(MAX(累计入库-100, 0), 入库数量) |
---|---|---|---|---|
2025/1/1 | 10 | 10 | 0 | 0 |
2025/1/2 | 30 | 40 | 0 | 0 |
2025/1/3 | 20 | 60 | 0 | 0 |
2025/1/4 | 15 | 75 | 0 | 0 |
2025/1/5 | 26 | 101 | 1 | 1 |
2025/1/6 | 12 | 113 | 13 | 12 |
2025/1/7 | 5 | 118 | 18 | 5 |
2025/1/8 | 10 | 128 | 28 | 10 |
2025/1/9 | 20 | 148 | 48 | 20 |
2025/1/10 | 30 | 178 | 78 | 30 |
解决方案
首先,数据模型如下图所示:
然后,创建如下度量值:
库存成本 =
SUMX(
'入库',
VAR OutNum = CALCULATE(SUM('出库'[出库]),'出库'[商品]=EARLIER('入库'[商品]))
VAR CumInNum = CALCULATE(SUM('入库'[入库]),'入库'[日期]<=EARLIER('入库'[日期]),ALLEXCEPT('入库','入库'[商品]))
RETURN
IF(CumInNum-OutNum>0,MIN(CumInNum-OutNum,'入库'[入库])*'入库'[采购单价])
)
然后创建一个矩阵,并将入库表中的商品字段作为行标签,再将上面的度量值放入矩阵的值字段即可,如下图所示:
总结
以上方法仅供参考,若有更优雅的解决方案,欢迎留言讨论,或者加入我们的技术交流群,一起享受这种思维碰撞的快乐吧!
PBI/DAX技术交流群(QQ):344353627