Power BI新建列函数问题:同组状态批量判定异常
问题分析
原DAX公式的核心错误在于判断逻辑未针对当前行所属的proposalsid组,而是对整个表的所有组进行全局判断:只要存在任意一个组包含"Approved"记录,所有行都会返回"Approved",完全忽略了单个组的独立状态判断。
正确解决方案
以下两种DAX写法均可实现需求,逻辑清晰且高效:
写法一:基于计数判断
NewStatusColumn = VAR CurrentProposalID = 'Agents Portal'[proposalsid] -- 判断当前组是否存在Approved记录 VAR HasApproved = CALCULATE( COUNTROWS('Agents Portal'), ALL('Agents Portal'), 'Agents Portal'[proposalsid] = CurrentProposalID, 'Agents Portal'[uwprop_statusname] = "Approved" ) > 0 -- 判断当前组是否全为Rejected(即无非Rejected记录) VAR AllRejected = CALCULATE( COUNTROWS('Agents Portal'), ALL('Agents Portal'), 'Agents Portal'[proposalsid] = CurrentProposalID, 'Agents Portal'[uwprop_statusname] <> "Rejected" ) = 0 RETURN IF(HasApproved, "Approved", IF(AllRejected, "Rejected", BLANK()))
写法二:基于组内状态集合判断
NewStatusColumn = VAR CurrentGroupStatuses = CALCULATETABLE( VALUES('Agents Portal'[uwprop_statusname]), ALLEXCEPT('Agents Portal', 'Agents Portal'[proposalsid]) ) RETURN -- 组内存在Approved则返回Approved IF("Approved" IN CurrentGroupStatuses, "Approved", -- 组内只有Rejected一种状态则返回Rejected IF(COUNTROWS(CurrentGroupStatuses) = 1 && "Rejected" IN CurrentGroupStatuses, "Rejected", BLANK()))
关键逻辑说明
- 两种写法均先锁定当前行所属的
proposalsid组,而非全局所有组 - 优先判断组内是否存在"Approved"(因为只要有一条Approved,整个组就标记为Approved)
- 若没有Approved,再判断组内是否全部为Rejected
- 其余情况返回BLANK()(可根据需求调整为其他默认值)
内容的提问来源于stack exchange,提问作者Nika Chaduneli
相关产品推荐
相关产品推荐

