https://zhuanlan.zhihu.com/p/81535007
星友們在知識星球(PowerBI星球)提出的問題中,關於空值的運算經常被提及。平時接觸到的源數據常常有空值,比如Excel數據中的空白單元格,powerquery中會顯示為null,大多數時候,我們並不能簡單粗暴的刪除其中的空值,而是需要在PQ中對數據進一步運算整理。
如果對空值直接進行運算,得到的還是空值,這可能並不是我們期望的結果,那么本文就提供一個空值運算的思路。
假設數據如下,
首先測試一下PowerQuery中null的運算結果,比如兩列相加,直接用“+”,新建列,
結果如下:
null+數字=null
null參與運算的結果也都成了null。
這是因為在PowerQuery運算中:null+數字=null
那么如何能讓null+數字=數字呢,可能大家想到的一個辦法是null使用0來替換,這樣確實能得到正確的結果。
但是null畢竟和0是有差別的,假設都替換為0,然后又出現兩列相乘的需求,是不是又悲劇了:(
下面就說一個不用替換的方法:使用List類函數。
依然以兩列相加為例,相加用List.Sum函數,
結果如下,
null+數字=數字
這樣的結果是不是就舒服多了!
這樣就做到了:null+數字=數字,從這個運算結果來看,null在List.Sum運算中默認為0。
那如果相乘呢,可以使用List.Product函數,
null*數字=數字
在這個乘法運算中,null*數字=數字,null在其中又相當於是1啦。
我們還可以進一步測試最大值和最小值,其結果如下:
List.Max(null,數字)=數字
List.Min(null,數字)=數字
是不是感覺很奇怪?
其實無論null和數字進行何種運算,其結果都是數字,null就像壓根不存在一樣,不參與數字運算,把它當成真空就好。
所以在List類函數的運算中,null才是真正實現了做自己,無論與數字怎么運算,最終的結果都是數字。
總結
以加法為例(其他類型的運算與加法類似):
如果你想要的結果是null+數字=null,直接使用運算符號"+";
如果你想要的結果是null+數字=數字,使用List.Sum函數;
最后友情提醒,List運算的結果上載到數據模型后默認為文本型,所以上載前請先在PowerQuery中將其更改為數值型哦。