如何在Matrix Visual中获取筛选月份的账户最新余额?
问题描述
我有一张名为Reconciliation的表,包含Date ID、Account ID和Balance字段,数据如下:
| Date ID | Account ID | Balance |
|---|---|---|
| 20240101 | A | 100 |
| 20240201 | A | 200 |
| 20240301 | B | 300 |
另有一张与Date ID关联的日期表Date。我需要创建一个度量值,返回筛选月份对应最后日期的账户余额,期望的Matrix Visual效果如下:
| ------- | 202401 | 202402 | 202403 |
|---|---|---|---|
| A | 100 | 200 | 200 |
| B | 300 |
我尝试了以下DAX公式,但账户A的3月余额显示空白:
LastBalance = CALCULATE(SUM(Reconciliation[Balance]), Reconciliation[Date ID] = MAX(Reconciliation[Date ID]))
实际得到的结果:
| ------- | 202401 | 202402 | 202403 |
|---|---|---|---|
| A | 100 | 200 | * |
| B | 300 |
求解决账户A最后月份余额为空的问题。
解决方案
原公式的问题在于:MAX(Reconciliation[Date ID])仅读取当前筛选上下文(如202403月份)中Reconciliation表的日期,而账户A在3月无数据,导致MAX返回空白,最终CALCULATE无匹配结果。
需要调整逻辑:针对每个账户,找到不晚于当前筛选月份最后一天的最大有效日期,再取该日期的余额。以下是修正后的DAX度量值:
LastBalance = VAR CurrentMonthEnd = EOMONTH(MAX('Date'[Date]), 0) VAR LastValidDate = CALCULATE( MAX(Reconciliation[Date ID]), FILTER( ALLSELECTED(Reconciliation), Reconciliation[Account ID] = MAX(Reconciliation[Account ID]) && Reconciliation[Date ID] <= CurrentMonthEnd ) ) RETURN CALCULATE( SUM(Reconciliation[Balance]), Reconciliation[Date ID] = LastValidDate && Reconciliation[Account ID] = MAX(Reconciliation[Account ID]) )
逻辑说明
CurrentMonthEnd:通过日期表获取当前筛选月份的最后一天,确保月份范围判断准确LastValidDate:针对当前账户,筛选出所有不晚于当前月末的最大日期——即使账户在当前月份无数据,也会取最近的历史日期- 最后返回该有效日期对应的账户余额
如果你的Date ID是整数格式(如示例中的20240101),需要将EOMONTH的结果转换为整数匹配格式,调整后的代码如下:
LastBalance = VAR CurrentMonthEnd = FORMAT(EOMONTH(MAX('Date'[Date]), 0), "YYYYMMDD") + 0 VAR LastValidDate = CALCULATE( MAX(Reconciliation[Date ID]), FILTER( ALLSELECTED(Reconciliation), Reconciliation[Account ID] = MAX(Reconciliation[Account ID]) && Reconciliation[Date ID] <= CurrentMonthEnd ) ) RETURN CALCULATE( SUM(Reconciliation[Balance]), Reconciliation[Date ID] = LastValidDate && Reconciliation[Account ID] = MAX(Reconciliation[Account ID]) )
使用上述度量值后,即可实现期望效果:账户A在3月显示最近的2月余额,账户B显示3月余额。
内容的提问来源于stack exchange,提问作者MasterSmack
相关产品推荐
相关产品推荐

