https://zhuanlan.zhihu.com/p/67441847
累計求和問題,之前已經介紹過(有了這幾個公式,你也可以快速搞定累計求和),主要是基於比較簡單的情形,針對所有的數據進行累計求和。
現實中的需求並不總是這么簡單,稍微復雜一點的是按類別求累計,以帕累托分析為例,模擬數據如下,
這次不是按全部產品進行累計求和,而是在每一個產品類別內部進行累計求和,進而計算出類別內的累計占比。
根據之前學過的知識,其實也可以計算出來,這里直接給出另一種更簡潔且性能更優的方式,新建列,
累計銷售額 類別 =
CALCULATE(
SUM('產品表'[銷售額]),
'產品表'[銷售額]>=EARLIER('產品表'[銷售額]),
ALLEXCEPT('產品表','產品表'[產品類別])
)
結果如下,
累計占比 類別 =
DIVIDE(
[累計銷售額 類別],
CALCULATE(
SUM('產品表'[銷售額]),
ALLEXCEPT('產品表','產品表'[產品類別])
)
)
這樣就可以輕松進行產品類別內部的20/80分類或者ABC分類了。
ALLEXCEPT保留的過濾器,可以只有一列,也可以保留多列,再看下面的例子,
這是一張工資表,我們要計算出每名員工截至當月,本年累計的工資數。
這里就是按照員工和年度來求累計,新建列的DAX如下,
本年累計工資 =
CALCULATE(
SUM('工資表'[每月工資]),
'工資表'[年度月份]<=EARLIER('工資表'[年度月份]),
ALLEXCEPT('工資表','工資表'[年度],'工資表'[姓名])
)
ALLEXCEPT函數中有兩個參數列,就是保留了這兩個過濾器,結果如下,
累計工資對每名員工分別求累計,並在新的一年重新開始計算,正是需要的結果。
ALLEXCEPT函數是不是很好用呢?