求助:计算净余额>0的用户唯一计数时DAX公式报错
解决DAX计算净余额>0的唯一用户计数报错问题
这个问题我之前也碰到过,核心原因是DAX对CALCULATE筛选器的逻辑有明确要求——你不能直接把聚合函数(比如SUM)放在筛选器的布尔表达式里,因为筛选器需要的是行级的判断条件,而SUM是针对一组行的聚合计算,没法直接对应到每一行的筛选逻辑,所以才会抛出那个错误。
下面给你两种可行的解决方案,都是先按用户分组计算净余额,再筛选出符合条件的用户后统计数量:
方法一:用SUMMARIZE分组计算后筛选
Distinct Users = VAR UserBalances = // 按用户分组,计算每个用户的总余额 SUMMARIZE(MyList, MyList[User], "TotalBalance", SUM(MyList[Balance])) VAR PositiveBalanceUsers = // 筛选出总余额大于0的用户组 FILTER(UserBalances, [TotalBalance] > 0) RETURN // 统计符合条件的用户数量 COUNTROWS(PositiveBalanceUsers)
这个方法逻辑很直观:先通过SUMMARIZE生成一个包含每个用户及其总余额的临时表,再用FILTER过滤出总余额大于0的记录,最后用COUNTROWS统计这些记录的数量,就是你要的唯一用户数。
方法二:用CALCULATE嵌套筛选用户上下文
Distinct Users = CALCULATE( DISTINCTCOUNT(MyList[User]), // 遍历每个唯一用户,计算其总余额并判断是否大于0 FILTER( VALUES(MyList[User]), CALCULATE(SUM(MyList[Balance])) > 0 ) )
这里的逻辑是:先用VALUES(MyList[User])获取当前上下文所有的唯一用户,然后对每个用户,通过嵌套的CALCULATE计算该用户的总余额(此时上下文会自动切换到单个用户),判断是否大于0,最后在这个筛选后的用户集合里执行DISTINCTCOUNT。
两种方法都能解决你的问题,你可以根据自己的模型复杂度和习惯选择使用。
内容的提问来源于stack exchange,提问作者KotiK
相关产品推荐
相关产品推荐

