PowerBI DAX度量需求:按类别取最新库存值并汇总
PowerBI DAX度量:按类别提取最新库存并正确汇总
需求说明
需要创建DAX度量Latest Inventory,实现以下目标:
- 按类别提取**所选时间切片(或更早)**的最新库存值
- 跨类别汇总时,需包含所有类别各自的最新库存(不能仅保留全局最新日期有记录的类别)
- 支持年度、月度等时间层级的正确展示
示例数据
InventoryTable
| 类别 | 日期 | 库存 |
|---|---|---|
| A | 31.10.2023 | 15 |
| E | 31.10.2023 | 61 |
| A | 31.12.2023 | 1 |
| B | 31.12.2023 | 13 |
| A | 31.01.2024 | 39 |
| B | 31.01.2024 | 72 |
| B | 29.02.2024 | 38 |
| A | 31.03.2024 | 46 |
现有代码问题
你提供的DAX代码仅能正确计算单类别值,但汇总时仅保留全局最新日期有记录的类别,遗漏了那些最新记录早于全局日期的类别(比如示例中的E类别,在31.10.2023后无更新,汇总时会被忽略)。
解决方案
正确DAX度量代码
Latest Inventory = SUMX( VALUES('InventoryTable'[类别]), VAR MaxDateForCategory = CALCULATE( MAX('InventoryTable'[日期]), 'InventoryTable'[日期] <= MAX(DateTable[Date]) ) RETURN CALCULATE( SUM('InventoryTable'[库存]), 'InventoryTable'[日期] = MaxDateForCategory ) )
代码解释
- SUMX遍历类别:通过
VALUES('InventoryTable'[类别])获取所有唯一类别,SUMX会对每个类别单独计算后汇总,确保每个类别的最新值都被纳入统计 - 计算类别专属最新日期:对每个类别,用
CALCULATE(MAX('InventoryTable'[日期]), ...)筛选出所选时间范围内该类别的最新记录日期 - 提取对应库存值:根据每个类别的专属最新日期,取出对应的库存值,最终SUMX完成跨类别汇总
DateTable配置要点
- 确保
InventoryTable[日期]与DateTable[Date]建立多对一关系(InventoryTable为多端) - DateTable需包含完整的日期序列,并且设置好年度、月度等层级字段(可通过PowerBI自动生成日期表实现),这样在时间切片器或钻取操作时,能正确匹配时间范围
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

