在供应链管理和库存分析中,准确计算实际库存是至关重要的。本篇文章将介绍如何在PowerBI中计算一种采用保守策略的场景下的实际库存的计算方法。
问题描述
某公司正在进行促销活动,但为了避免库存积压,他们采取了保守的策略:如果当天的订单数量大于实际库存数量,那么就按实际库存发货,多余订单则退单处理。
以下是该公司的库存变动表,正数代表入库数量,负数则代表订单数量(应出库数量)。
要求:计算每天的实际库存量,库存不能为负数,最小为0。
换句话说就是:按日期升序累计“库存增减”字段,当累计值为负数时让其等于0,并从0继续累计。
具体问题如下图所示:
本案例的初始数据如下:
库存变动表:
日期 | 库存增减 |
---|---|
2023/3/5 | 39 |
2023/3/8 | 45 |
2023/3/10 | -55 |
2023/3/16 | 28 |
2023/3/18 | -65 |
2023/3/25 | -28 |
2023/3/28 | 16 |
2023/3/30 | -5 |
若需其它辅助表等,可自行创建并建模。
解题要点
在本案例中,由于库存最小为零,即累计值为负数时需要让其等于零,后面再从零开始累计,因此正常的累计值会比遇零重置的累计值多累加一部分数值,因此只需要减掉这一部分差值即可。
具体的计算逻辑可参考下表:
日期 | 库存增减 | 累计值 | MIN(过去的最小累计值,0) | 累计值 – MIN(过去的最小累计值,0) |
---|---|---|---|---|
2023/3/5 | 39 | 39 | 0 | 39 |
2023/3/8 | 45 | 84 | 0 | 84 |
2023/3/10 | -55 | 29 | 0 | 29 |
2023/3/16 | 28 | 57 | 0 | 57 |
2023/3/18 | -65 | -8 | -8 | 0 |
2023/3/25 | -28 | -36 | -36 | 0 |
2023/3/28 | 16 | -20 | -36 | 16 |
2023/3/30 | -5 | -25 | -36 | 11 |
解决方案
首先,数据模型如下图所示:
然后,创建如下度量值:
实际库存 =
VAR CurDate = MAX('库存变动表'[日期])
VAR BaseTbl =
FILTER(
ALL('库存变动表'[日期],'库存变动表'[库存增减]),
'库存变动表'[日期]<=CurDate
)
VAR AddAcc =
ADDCOLUMNS(
BaseTbl,
"Acc",
SUMX(
FILTER(BaseTbl,'库存变动表'[日期]<=EARLIER('库存变动表'[日期])),
'库存变动表'[库存增减]
)
)
VAR CurAcc = MAXX(FILTER(AddAcc,'库存变动表'[日期]=CurDate),[Acc])
VAR ClosestMinAcc = MIN(0,MINX(AddAcc,[Acc]))
RETURN
CurAcc-ClosestMinAcc
然后创建一个矩阵,并将日期字段作为行标签,再将上面的度量值以及库存增减字段一起放入矩阵的值字段即可,结果如下图所示:
其他方案
以下解决方案精选自技术交流群中的其他小伙伴,希望他们的独到见解和解决思路能够为大家提供更多启发,内容已征得同意,特此分享出来供大家参考和借鉴。
1、WT:
2、XSY:
总结
以上方法仅供参考,若有更优雅的解决方案,欢迎留言讨论,或者加入我们的技术交流群,一起享受这种思维碰撞的快乐吧!
PBI/DAX技术交流群(QQ):344353627