人生没有彩排
每一天都是现场直播

在PowerBI中以先进先出规则计算商品出库成本

先进先出(FIFO)是企业管理中广泛应用的库存计价方法,尤其在财务核算和成本分析中扮演着重要角色。本篇文章将介绍如何在PowerBI中按先进先出规则计算商品出库成本。

问题描述

按先进先出规则,计算商品出库成本。例如:对于P002商品,它的总出库数量为11,其中10个用的是1月2日入库的,单价为1,最后1个用的是1月5日入库的,单价为2,因此P002的出库成本即为12。

具体问题如下图所示:

本案例的初始数据如下:


入库:

入库日期 商品编码 入库数量 采购单价
2021年1月1日 P001 10 1
2021年1月4日 P001 5 1
2021年1月2日 P002 10 1
2021年1月5日 P002 20 2
2021年1月3日 P003 10 1

出库:

出库日期 商品编码 出库数量 销售单价
2021年1月1日 P001 5 3
2021年1月2日 P002 10 3
2021年1月3日 P001 1 3
2021年1月6日 P001 1 3
2021年1月6日 P002 1 3

若需其它辅助表等,可自行创建并建模。

解题要点

因为DAX中并不支持递归,因此在面对先进先出等场景时,需要找到一种数学上能计算的方法来处理。

假设总出库数量为:100,那么本案例的计算思路如下表所示:


日期 入库数量 累计入库数量 100-累计入库+入库数量 MAX(MIN(入库数量, 100-累计入库+入库数量), 0)
2025/1/1 10 10 100 10
2025/1/2 30 40 90 30
2025/1/3 20 60 60 20
2025/1/4 15 75 40 15
2025/1/5 26 101 25 25
2025/1/6 12 113 -1 0
2025/1/7 5 118 -13 0
2025/1/8 10 128 -18 0
2025/1/9 20 148 -28 0
2025/1/10 30 178 -48 0

解决方案

首先,从入库与出库两个表中提取一个商品维表,并与入库与出库这两个表连接关系,数据模型如下图所示:

然后,创建如下度量值:

出库成本 = 
SUMX(
    VALUES('商品表'[商品编码]),
    CALCULATE(
        VAR OutNum = SUM('出库'[出库数量])
        VAR EnterTable = '入库'
        RETURN
        SUMX(
            EnterTable,
            VAR CurDate = '入库'[入库日期]
            VAR CurPrice = '入库'[采购单价]
            VAR CurNum = '入库'[入库数量]
            VAR CumEnterNum = SUMX(FILTER(EnterTable,'入库'[入库日期]<=CurDate),'入库'[入库数量])
            VAR Result = IF(CumEnterNum-CurNum<OutNum,MIN(CurNum,OutNum-CumEnterNum+CurNum))*CurPrice
            RETURN
            Result
        )
    )
)

然后创建一个矩阵,并将商品维表中的商品编码字段作为行标签,再将上面的度量值以及出库表的出库数量字段一起放入矩阵的值字段即可,如下图所示:

总结

以上方法仅供参考,若有更优雅的解决方案,欢迎留言讨论,或者加入我们的技术交流群,一起享受这种思维碰撞的快乐吧!

PBI/DAX技术交流群(QQ):344353627

赞(0) 打赏
版权声明:本文为夕枫的原创文章,著作权归作者所有,未经允许不得转载
文章名称:《在PowerBI中以先进先出规则计算商品出库成本》
文章链接:https://www.ximaple.com/posts/1161.html
订阅评论
提醒
guest
0 评论
最新
最久 最赞
内联反馈
查看所有评论

觉得文章有用的话就支持一下吧~

感谢您的打赏支持,我将持续输出有价值的内容!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册

Operation don't support