如何用DAX实现2022至2023年的跨年度累计余额计算?
跨年度累计余额计算解决方案
问题根源
你当前的DAX公式里,period_end被固定为DATE(2023,1,31),这意味着不管报表中选中哪个月份,计算范围都会锁定到2023年1月底,所以所有行都只显示截至该日期的最终余额,无法按月份动态展示累计。
修正后的DAX公式
你需要动态获取当前筛选上下文的日期作为结束节点,同时固定起始日期为2022年1月1日,以下是两种可行的写法:
写法1:使用DATESBETWEEN简化筛选
Balance BRL = VAR Period_Start = DATE(2022, 1, 1) -- 获取当前上下文的最后一天(比如报表行显示2022年5月,这里就是2022-5-31) VAR Current_Period_End = MAX('Calendar'[Date]) RETURN CALCULATE( -- 合并所有需要累计的度量值,减少重复CALCULATE 'Fact_balance_cash'[realized_application] + 'Fact_balance_cash'[realized_investiments] + 'Fact_balance_cash'[realized_balance] + [Forecast_R], -- 筛选从起始日到当前上下文结束日的所有日期 DATESBETWEEN('Calendar'[Date], Period_Start, Current_Period_End) )
写法2:使用FILTER自定义筛选范围
如果需要更灵活的日期逻辑,可以用FILTER:
Balance BRL = VAR Period_Start = DATE(2022, 1, 1) VAR Current_Period_End = MAX('Calendar'[Date]) RETURN CALCULATE( 'Fact_balance_cash'[realized_application] + 'Fact_balance_cash'[realized_investiments] + 'Fact_balance_cash'[realized_balance] + [Forecast_R], FILTER( ALL('Calendar'), 'Calendar'[Date] >= Period_Start && 'Calendar'[Date] <= Current_Period_End ) )
关键说明
MAX('Calendar'[Date])会根据报表的筛选上下文动态变化:比如当报表按月份展示时,每个月份行对应的Current_Period_End就是该月的最后一天,从而实现逐月累计的效果。- 合并多个度量值的加法到同一个CALCULATE中,比多次调用CALCULATE更高效。
内容的提问来源于stack exchange,提问作者Arnold Souza
相关产品推荐
相关产品推荐

