Power Pivot使用DAX计算累计和时所有季节库存值相同问题
DAX销售季节维度累计库存计算数值重复问题修复
问题现象
- 计算目标:针对
SATISSEZON(销售季节)维度,计算库存字段DSSTOK的累计运行总和 - 初始编写的DAX度量值如下,无法满足维度拆分计算需求:
CALCULATE([first value];FILTER(ALL('MerchDate'); 'MerchDate'[Date]<=MAX(DATALAR[Date])))
- 调整逻辑后所有季节维度对应的库存数值完全一致,调整后代码如下:
CALCULATE(SUM([DSSTOK]) ;FILTER(ALL(MerchTarih); MerchTarih[HAREKETTARIHI]<=MAX(DATALAR[HAREKETTARIHI])) ;VALUES(UrunListesi[Pr_Detail]) ;VALUES(Lokasyonlar[LOKASYONKODU]) ;ALLSELECTED(SatisSezonu[SATISSEZONU]))
问题根因
- 代码中
ALLSELECTED(SatisSezonu[SATISSEZONU])语句会清除当前单元格上下文对销售季节的筛选,导致每个季节单元格计算时都会拉取所有选中季节的全量库存数据,是所有季节数值完全一致的核心原因 - 日期筛选部分使用
ALL(MerchTarih)会清除日期表上所有维度的原有筛选上下文,破坏了产品、位置、季节等维度和日期维度的联动关系 - 手动使用
VALUES()限定维度筛选的写法鲁棒性差,可视化维度调整时容易出现上下文匹配异常
修复方案
使用以下DAX度量值替换原有代码即可(如果本地Power BI/SSAS环境使用分号作为参数分隔符,将代码中逗号替换为分号即可):
累计库存 = CALCULATE( SUM(DATALAR[DSSTOK]), FILTER( ALLSELECTED(MerchTarih[HAREKETTARIHI]), MerchTarih[HAREKETTARIHI] <= MAX(DATALAR[HAREKETTARIHI]) ), ALLSELECTED(UrunListesi), ALLSELECTED(Lokasyonlar) )
调整点说明
- 将日期筛选的
ALL(MerchTarih)替换为ALLSELECTED(MerchTarih[HAREKETTARIHI]),仅清除日期列本身的筛选,保留其他维度的筛选上下文,同时累计范围仅覆盖用户选中的日期区间,不会拉取全量历史数据 - 删除错误的
ALLSELECTED(SatisSezonu[SATISSEZONU])语句,保留销售季节维度的原生筛选上下文,每个季节单元格只会计算对应季节范围内的累计值 - 移除手动硬编码的
VALUES()维度限定,DAX会自动继承当前可视化行列的维度筛选上下文,度量值可适配不同维度组合的展示需求
内容的提问来源于stack exchange,提问作者umur biber
相关产品推荐
相关产品推荐

