按区域实现Running Total的DAX度量异常问题求助
解决DAX运行总计按Region切片失效的问题
我创建了一个Running Total度量,原本按月份切片能正常展示运行总计。现有dimRegion维度表与事实表为一对多关系,将切片维度替换为Region后,所有区域的Running Total数值完全相同,无法实现预期效果。当前使用的DAX代码如下:
YTD := VAR Year = ( MAX ( 'Target'[Year] ) ) VAR MaxMonthNumber = CALCULATE ( MAX ( 'fact'[MonthNumber] ), 'fact'[Year] = Year ) VAR MinMonthNumber = MIN ( 'dimMonthNames'[MonthNumber] ) VAR ShowData = ( MinMonthNumber <= MaxMonthNumber ) VAR Result = IF ( ShowData, CALCULATE ( SUM ( 'fact'[FeeUSD] ), FILTER ( ALLSELECTED ( 'fact' ), 'fact'[MonthNumber] <= MAX ( 'dimMonthNames'[MonthNumber] ) ), 'fact'[Year] = Year ) ) RETURN Result
现有Region、Year、Month三个切片器(默认全选),需要修改代码使度量支持按Region切片并正确展示运行总计。
问题根源
原代码中ALLSELECTED('fact')会清除Region的筛选上下文,导致所有区域计算时都调用全选状态下的事实表数据,最终数值一致。同时直接筛选事实表的MonthNumber,容易忽略维度关联的上下文逻辑。
修改后的DAX代码
YTD := VAR CurrentYear = MAX('Target'[Year]) VAR CurrentMonthNum = MAX('dimMonthNames'[MonthNumber]) VAR MaxAvailableMonth = CALCULATE( MAX('fact'[MonthNumber]), 'fact'[Year] = CurrentYear, ALLSELECTED('dimRegion') ) VAR ShowData = CurrentMonthNum <= MaxAvailableMonth VAR Result = IF( ShowData, CALCULATE( SUM('fact'[FeeUSD]), 'dimMonthNames'[MonthNumber] <= CurrentMonthNum, 'fact'[Year] = CurrentYear, ALLSELECTED('dimRegion') ) ) RETURN Result
修改说明
- 保留Region筛选:用
ALLSELECTED('dimRegion')替代直接清除事实表筛选,确保Region切片器的选择能作用于计算逻辑,每个区域独立计算自身的运行总计。 - 通过维度表筛选月份:直接筛选
dimMonthNames的MonthNumber,利用维度表与事实表的关联自动匹配数据,避免手动筛选事实表导致的上下文丢失。 - 简化逻辑:去掉冗余的
MinMonthNumber变量,直接用当前月份与可用最大月份做比较,逻辑更清晰。
更简洁的替代方案(推荐)
如果存在包含完整日期信息的dimDate维度表,可使用DATESYTD函数简化代码:
YTD_Simplified := VAR CurrentDate = MAX('dimDate'[Date]) VAR MaxAvailableDate = CALCULATE( MAX('fact'[Date]), ALLSELECTED('dimRegion') ) VAR ShowData = CurrentDate <= MaxAvailableDate VAR Result = IF( ShowData, CALCULATE( SUM('fact'[FeeUSD]), DATESYTD('dimDate'[Date]), ALLSELECTED('dimRegion') ) ) RETURN Result
内容的提问来源于stack exchange,提问作者user3061338
相关产品推荐
相关产品推荐

