PowerBI中显示SKU时按产品组代码计算TTM销量的实现方法
我在计算库存周转天数时,采用过去12个月(TTM)销量除以365得到日均销量。这个计算在产品组代码(PRODUCT GROUP CODE)层级展示时正常,能看到不含规格的产品组整体TTM情况,但将TTM销量字段加入SKU/物料代码(ITEM CODE)表后,系统会自动按单个SKU计算,无法呈现产品组级别的汇总视图。
需求是:即使在SKU或物料代码表中展示,TTM销量公式也始终在产品组代码级别执行,原公式如下:
TTM SOLD = CALCULATE ( 'Sales Invoice Transactions'[Sales Invoice Quantity], DATESINPERIOD ( 'Date'[Date], LASTDATE ( 'Date'[Date] ), -12, MONTH ) )
我尝试过用REMOVEFILTERS或ALLEXCEPT调整,但结果始终是全公司的TTM总销量,错误公式示例:
TTM SOLD = CALCULATE ( 'Sales Invoice Transactions'[Sales Invoice Quantity], DATESINPERIOD( 'Date'[Date], LASTDATE( 'Date'[Date]), -12, MONTH), ALLEXCEPT(PRODUCTGROUPCODE) )
场景示例
每个SKU归属对应产品组,按产品组计算近3个月平均销量时结果符合预期,但按SKU列表展示时,系统会按单个SKU计算平均值。我希望所有SKU行都显示对应产品组的整体平均值:
| 产品组 | SKU | 1月销量 | 2月销量 | 3月销量 |
|---|---|---|---|---|
| Caps | Cap1 | 2 | 1 | 1 |
| Caps | Cap2 | 5 | 4 | 5 |
| Caps | Cap3 | 6 | 5 | 4 |
| Screws | Screw1 | 3 | 2 | 3 |
| Screws | Screw2 | 2 | 3 | 2 |
| Boxes | Box1 | 5 | 4 | 5 |
比如Caps组的3个月总销量为(2+5+6)+(1+4+5)+(1+5+4)=33,平均销量为33/3=11,我希望Cap1、Cap2、Cap3这三行的平均销量都显示11,而非各自单独计算的结果。
解决方案
问题出在ALLEXCEPT的参数使用错误:该函数需要传入表名,再指定要保留筛选的列,而非直接传入列名。以下是两种可行的DAX公式:
方法1:使用ALLEXCEPT保留产品组筛选
假设包含产品组和SKU的表名为Product,公式如下:
TTM SOLD = CALCULATE ( 'Sales Invoice Transactions'[Sales Invoice Quantity], DATESINPERIOD ( 'Date'[Date], LASTDATE ( 'Date'[Date] ), -12, MONTH ), ALLEXCEPT ( 'Product', 'Product'[PRODUCT GROUP CODE] ) )
该公式会移除Product表中除PRODUCT GROUP CODE之外的所有筛选,确保计算始终基于当前产品组的范围。
方法2:使用REMOVEFILTERS移除SKU筛选
直接移除SKU/物料代码的筛选,保留产品组的筛选条件:
TTM SOLD = CALCULATE ( 'Sales Invoice Transactions'[Sales Invoice Quantity], DATESINPERIOD ( 'Date'[Date], LASTDATE ( 'Date'[Date] ), -12, MONTH ), REMOVEFILTERS ( 'Product'[ITEM CODE] ) )
两种方法都能实现:在SKU视图中,每个SKU行显示的是其所属产品组的TTM总销量,而非单个SKU的销量。
内容的提问来源于stack exchange,提问作者eeebeats

