Power BI中忽略日期过滤器的DAX度量值累计总计实现求助
解决Power BI中基于日期的累计交易金额度量问题
问题核心
原度量_turnover_chart中使用了REMOVEFILTERS('calendar'),会完全清除日历表的筛选上下文,导致后续添加的日期累计筛选('calendar'[cal_posted_date] <= MaxDate)无法生效。
解决方案
直接重构累计逻辑,将日期筛选整合到申请编号的获取环节:
_turnover_cumulative = VAR MaxDate = MAX('calendar'[cal_posted_date]) -- 获取截止到当前日期的所有TRAN类型申请编号 VAR applNos = CALCULATETABLE( DISTINCT(combined_apps[appl_appl_no]), combined_apps[table_type] = "TRAN", 'calendar'[cal_posted_date] <= MaxDate ) -- 计算上述申请编号对应的所有TRAN交易金额总和 RETURN CALCULATE( SUM(combined_apps[tran_amount]), combined_apps[appl_appl_no] IN applNos, combined_apps[table_type] = "TRAN" )
逻辑说明
- 通过
MaxDate获取当前行上下文的最大日期(即表格每行对应的日期) - 筛选出截止到该日期的所有
table_type = "TRAN"的申请编号 - 基于这些编号计算所有关联交易金额的总和,自然得到累计值
可选优化(复用原度量)
如果需要保留原度量的复用性,可修改原度量使其响应日历的日期上下文:
_turnover_chart = VAR CurrentDateRange = IF( ISBLANK(MAX('calendar'[cal_posted_date])), ALL('calendar'), -- 无日期筛选时取全部数据 'calendar'[cal_posted_date] <= MAX('calendar'[cal_posted_date]) -- 有日期筛选时取截止到当前日期的范围 ) VAR applNos = CALCULATETABLE( DISTINCT(combined_apps[appl_appl_no]), combined_apps[table_type] = "TRAN", CurrentDateRange ) RETURN CALCULATE( SUM(combined_apps[tran_amount]), combined_apps[appl_appl_no] IN applNos, combined_apps[table_type] = "TRAN" )
此时累计度量可简化为:
_turnover_cumulative = CALCULATE( _measures[_turnover_chart], ALLSELECTED('calendar') -- 保留外部筛选(如2023年10月的筛选) )
内容的提问来源于stack exchange,提问作者Gray Meiring
相关产品推荐
相关产品推荐

