在 Power BI 的 DAX 中,ALLEXCEPT()
是一個非常重要的函數,用來實現**“在保留部分篩選條件的前提下,移除其他所有篩選器”**,它常用于 同比、占比、累計匯總 等分析中。
? 一、ALLEXCEPT 是什么意思?
函數全稱:
ALLEXCEPT(table, column1, column2, …)
作用:
保留你指定的列的篩選器,移除該表中其他列上的所有篩選器。
🔍 二、語法結構
ALLEXCEPT(<table>, <column1>, <column2>, ...)
參數 | 說明 |
---|---|
table | 要移除篩選器的表 |
column1, column2 | 你想保留篩選上下文的字段 |
📊 三、為什么需要 ALLEXCEPT?
有時我們想要做分組內的匯總或對比,但又不想被其他字段干擾,這時就可以用 ALLEXCEPT。
🎯 四、使用示例
🔸 示例 1:按“產品類別”保留篩選,計算每個類別的總銷售額
Category Sales =
CALCULATE(
? SUM(Sales[Amount]),
? ALLEXCEPT(Sales, Sales[Category])
)
這個公式的意思是:
忽略所有其他篩選條件,僅按Category
來分組求和。
非常適合后續計算占比!
🔸 示例 2:計算某城市銷售額占該省的比例
城市銷售額占比 =
DIVIDE(
? SUM(Sales[Amount]),
? CALCULATE( SUM(Sales[Amount]), ALLEXCEPT(Sales, Sales[Province]) )
)
意思是:
分母計算該省的總銷售額,忽略城市等其他篩選,
從而得到該城市在本省中的占比。
🔸 示例 3:分產品類別計算最大銷售額(忽略其他篩選)
Max Sales Per Category =
CALCULATE(
? MAX(Sales[Amount]),
? ALLEXCEPT(Sales, Sales[Category])
)
🧠 五、與其他函數對比
函數名 | 作用 |
---|---|
ALL() | 移除所有篩選器 |
REMOVEFILTERS() | 與 ALL 類似,但語義更清晰,不返回值集合 |
ALLEXCEPT() | 保留指定列的篩選器,移除該表中其他所有列的篩選器 |
📌 六、常見應用場景
場景 | 使用 ALLEXCEPT 的目的 |
---|---|
同一類別下求匯總 | 保留 Category ,忽略其他干擾篩選 |
省內各城市占比 | 保留 Province ,忽略城市等其他篩選 |
某字段分組內的最大/平均值 | 保留分組字段,忽略其他上下文 |
構建環比/同比時排除時間篩選 | 搭配 DATEADD 等函數使用 |
? 總結一句話:
ALLEXCEPT 可以讓你保留一個或多個字段的分組邏輯,同時移除其他字段的篩選影響,是做“分組內匯總”、“占比計算”的利器。