DAX度量值按其他度量过滤后总计计算异常求助
DAX度量总计错误的修正方案
问题原因
你的License Usage度量是行级判断逻辑:仅在当前行/用户的筛选上下文下,判断是否近90天有活动,返回1或空白。但总计行的筛选上下文是整个数据集,此时CALCULATE([Activity Date NEWEST], ...)会计算全局最近活动日期是否在90天内,导致总计行要么返回1要么空白,而非统计符合条件的行/用户总数。
修正方案
方案1:迭代聚合(推荐,兼顾明细与总计)
使用COUNTX遍历用户/行,在每个独立上下文下判断条件后统计数量,确保明细和总计结果一致:
License Usage = // 统计近90天有活动的唯一用户数(替换dimUsers[UserID]为你的用户唯一标识列) COUNTX( VALUES(dimUsers[UserID]), IF( NOT(ISBLANK( CALCULATE( MAX('PBI Activity'[Date]), KEEPFILTERS(DATESINPERIOD(dimCalendar[Date], TODAY(), -90, DAY)) ) )), 1, BLANK() ) )
- 若需统计活动行数而非用户数,将
VALUES(dimUsers[UserID])替换为'PBI Activity'即可。
方案2:简化筛选写法
直接筛选出符合条件的用户集合,再统计行数:
License Usage = VAR ThirtyDaysAgo = TODAY() - 90 RETURN COUNTROWS( FILTER( VALUES(dimUsers[UserID]), CALCULATE(MAX('PBI Activity'[Date])) >= ThirtyDaysAgo ) )
方案3:保留行级1/空白,同时总计正确
如果需要明细行显示1(符合条件)/空白(不符合),总计行显示统计数量,可使用HASONEVALUE判断上下文:
License Usage = VAR ThirtyDaysAgo = TODAY() - 90 VAR CurrentUserActivity = CALCULATE(MAX('PBI Activity'[Date])) VAR RowResult = IF(CurrentUserActivity >= ThirtyDaysAgo, 1, BLANK()) VAR TotalResult = COUNTX( VALUES(dimUsers[UserID]), IF(CALCULATE(MAX('PBI Activity'[Date])) >= ThirtyDaysAgo, 1, BLANK()) ) RETURN IF(HASONEVALUE(dimUsers[UserID]), RowResult, TotalResult)
关键注意事项
- 确保
dimCalendar与PBI Activity表之间存在正确的日期关联关系 - 使用
VALUES(dimUsers[UserID])可避免同一用户多次活动被重复计数,若需统计所有活动行则替换为事实表
内容的提问来源于stack exchange,提问作者SherlockSpreadsheets
相关产品推荐
相关产品推荐

