You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:40:25