前言
在Power BI中,我們經常需要對資料進行聚合計算,比如求和、求平均、求最大值等。
Power BI提供了一系列的聚合函數,可以用來對錶中列的值進行聚合然後返回一個值。這些函數通常只需要一個引數,就是要聚合的列名。如SUM(‘銷售表’[銷量]),就是求銷售表裡的銷量總和。
但是有時候,我們需要對更復雜的表示式進行聚合計算,而不是單純的一列。今天就來學一下迭代函數解決這類問題。
為了便於理解,本文結合excel分別做兩個例子,一個excel版本,一個BI版本,對比學習。
本文範例資料表及BI模型構成
銷售表如下:
產品表如下:
BI資料模型
聚合函數只接受單列參照(劃重點),而迭代函數可以支援多列計算而聚合
聚合函數: SUM(‘銷售表’[銷量])
迭代函數: SUMX(表,表示式)
以X為結尾的聚合函數非常強大和靈活,它們可以讓我們對複雜的表示式進行聚合計算,而不受列或資料型別的限制。它們也可以和其他的表函數配合使用,比如FILTER、RELATEDTABLE等,來實現更多的功能。
SUMX、COUNTX、MINX、MAXX、PRODUCTX等等
以X為結尾的聚合函數有很多種,它們的區別在於最後的聚合方式不同。例如,SUMX是求和,MINX是求最小值,MAXX是求最大值,COUNTX是計數等等。它們的用法和語法都很類似,只要掌握了其中一個,就可以很容易地使用其他的。
日常工作中如果我們要計算一個銷量,那麼SUM(銷售表[銷量])就是計算銷售表中銷量列的所有值的和。
但是有時候,我們需要對更復雜的表示式進行聚合計算,而不是單純的一列。比如,我們想要計算每個產品的總銷售額,但是銷售表中又沒有產品的售價時,這個表示式涉及到兩個表:銷售表和產品表,它們之間有一個關聯關係。如果我們直接用SUM函數來計算銷售總和,就會得到錯誤的結果,因為SUM函數不能處理這樣的表示式(因為涉及多列運算)。這時候,我們就需要用到以X為結尾的聚合函數。
假設現在我們有兩張資料來源表。
目標是求得對應各個產品的總銷售額。
銷售表如下:
產品表如下:
如果是在excel中,我們可以根據產品名,用vlookup去匹配產品表中的產品售價,然後通過售價與銷量相乘得到總的銷售金額
然後透視表彙總結果
通過excel的實現中,最關鍵的其實就是新增列,然後通過新增列的值去求和在彙總。
產品銷售金額 = SUMX('銷售表','銷售表'[銷量]*RELATED('產品表'[售價]))
通過迭代函數只需要一行程式碼。第二引數可以是表示式,這裡的related函數相當於上面excel中的vlookup,使得匹配上的值和銷售進行了相乘(這裡大家可以理解為在bi中我們新增了一個虛擬行去替代excel中我們新增的兩列,而SUMX函數針對虛擬的行,
逐行進行表示式的計算,最後針對彙總的虛擬行,進行了SUM求和)
最後,在bi中新建一張表,拉到值內,和excel中是一樣的效果。
其他,以X結尾的迭代函數,也和SUMX類似,大家可以舉一三反,多在自己的業務中應用,來提高對這類函數的認識和熟練度。