Power BI两日期间分配额求和问题:DAX度量值失效求助
修复DAX度量值问题
问题分析
原度量值存在两个核心问题:
- 语法错误:CALCULATE的第二个筛选条件括号位置错误,把
<=DteTo写在了函数外部,导致实际是将求和结果与DteTo做比较,而非筛选日期范围。 - 切片器冲突:两个切片器都使用主表的
DTETm列时,会互相筛选主表数据,导致SELECTEDVALUE('Master'[DTETm])无法正确获取独立的起始日期值。
修正方案
1. 基于独立日期表的标准版本
建议创建两个独立的日期表(比如DateFrom和DateTo,仅包含日期时间列,不与主表建立关系)作为切片器数据源,修正后的代码:
_DurationAllot = VAR DteFrom = SELECTEDVALUE('DateFrom'[DTETm]) VAR DteTo = SELECTEDVALUE('DateTo'[DTETm]) VAR vResults = CALCULATE( SUM(Master[Allotments]), Master[DTETm] >= DteFrom, Master[DTETm] <= DteTo ) RETURN vResults
2. 适配同列切片器的兼容版本
如果坚持使用主表DTETm列做两个切片器,可通过ALLSELECTED提取起止日期,避免筛选冲突:
_DurationAllot = VAR SelectedDates = ALLSELECTED(Master[DTETm]) VAR DteFrom = MINX(SelectedDates, Master[DTETm]) VAR DteTo = MAXX(SelectedDates, Master[DTETm]) VAR vResults = CALCULATE( SUM(Master[Allotments]), ALL(Master[DTETm]), // 清除主表日期列的筛选锁定 Master[DTETm] >= DteFrom, Master[DTETm] <= DteTo ) RETURN vResults
注:此方式需将切片器设置为多选,用户选择两个日期后,MIN和MAX会自动识别为起止范围。
消耗率计算扩展
若最终需计算消耗率(通常为Expense/Allotments),可在上述基础上扩展度量值:
_ConsumptionRate = VAR DteFrom = SELECTEDVALUE('DateFrom'[DTETm]) VAR DteTo = SELECTEDVALUE('DateTo'[DTETm]) VAR TotalAllot = CALCULATE( SUM(Master[Allotments]), Master[DTETm] >= DteFrom, Master[DTETm] <= DteTo ) VAR TotalExpense = CALCULATE( SUM(Master[Expense]), Master[DTETm] >= DteFrom, Master[DTETm] <= DteTo ) RETURN IF(NOT ISBLANK(TotalAllot) && TotalAllot <> 0, TotalExpense / TotalAllot, BLANK())
内容的提问来源于stack exchange,提问作者Draco
相关产品推荐
相关产品推荐

