PowerBI DAX创建Top25办公室标识列异常:全显示Yes如何修复?
修复PowerBI中DAX计算列IsTop25Office的问题
问题原因
你的DAX公式错误在于CALCULATE(COUNTROWS('Table'), ALL('Table'[officeName]))这部分:ALL('Table'[officeName])会清除当前行的办公室名称上下文,导致每个办公室计算的都是整个表的总行数,所有办公室的排名都为1,因此所有行都显示"Yes"。
正确公式写法
写法一(使用变量优化可读性)
IsTop25Office = VAR OfficeRowCount = CALCULATE(COUNTROWS('Table'), ALLEXCEPT('Table', 'Table'[officeName])) VAR OfficeRank = RANKX(ALL('Table'[officeName]), OfficeRowCount, , DESC, Dense) RETURN IF(OfficeRank <= 25, "Yes", "No")
ALLEXCEPT('Table', 'Table'[officeName]):保留当前行的officeName上下文,仅清除其他列的筛选,从而计算当前办公室的总行数。RANKX:基于所有唯一办公室名称,按各办公室的行数降序进行密集排名。- 最后根据排名是否≤25返回对应结果。
写法二(直接引用当前行上下文)
IsTop25Office = IF( RANKX( ALL('Table'[officeName]), CALCULATE(COUNTROWS('Table'), 'Table'[officeName] = EARLIER('Table'[officeName])), , DESC, Dense ) <= 25, "Yes", "No" )
EARLIER('Table'[officeName]):获取当前行的办公室名称,让CALCULATE仅计算该办公室的行数,确保排名逻辑正确。
实现动态筛选
如果需要支持动态调整前N个办公室,可创建一个整数参数(比如命名为TopN),然后将公式中的25替换为[TopN],即可通过参数控件实时调整筛选范围。
示例验证
针对你提供的示例数据,使用上述公式后会得到符合预期的结果:
| officeName | isTop25Office |
|---|---|
| Charlie LawGroup | Yes |
| Ruth's Dining | No |
| Charlie LawGroup | Yes |
| Trolly Dentist | Yes |
| McGiver Warehouse | No |
内容的提问来源于stack exchange,提问作者JLuu
相关产品推荐
相关产品推荐

