你好,我是小必,感謝與你在這裡相遇。
今日內容:Power Query中關於替換功能
如上圖所示,將左側的數據替換成右側的數據。即將左側的學科列的「算術」與「數數」的內容替換成「數學」。
如果通過Power Query中的滑鼠操作的方法,可以使用【轉換】選項卡下中的替換值的內容,分別進行兩次替換成想要的內容。如圖所示:
再執行一次上面的步驟即可完成所有的替換。再看一下上面的步驟生成的公式:
替換1 = Table.ReplaceValue(源,"算術","數學",Replacer.ReplaceText,{"學科"}),替換2 = Table.ReplaceValue(替換1,"數數","數學",Replacer.ReplaceText,{"學科"})雖然可以將上面的兩個公式嵌套到一起去,但是還是顯得十分地麻煩與冗長。
再來查看一下關於Table.ReplaceValue函數的語法:
function (table as table,oldValue as any,newValue as any,replacer as function,columnsToSearch as list) as table從上面的該函數的語法可以看出,輸出的結果為一個表,第一個參數是一個table,也就是源是一個表,要替換的內容為any,可以是任意類型,替換後的類型也是一個any,第4個參數比較有意思的是一個function,也就是說第4個參數可以是無限擴展的。在上面的通過滑鼠操作的生成的第4個參數是一個替換器Replacer.ReplaceText。那麼不考慮這個替換器,在手工書寫M的時候還可以自己構造一個函數做為替換器。
故上面的替換的兩個步驟可以寫成一個公式,即:
= Table.ReplaceValue(源,{"算術","數數"},"數學",(x,y,z)=>if List.Contains(y,x) then z else x,{"學科"})這個公式很有意,也十分地巧妙。但是對於初學者來說,該公式中定義的第4個參數為一個function,理解起來不是特別地好理解。上述公式中的x指的是當前的操作的行,y為要替換的list列表,即:{"算術","數數"},而z為替換後的新值。所以這三個值都是變量。List.Contains(y,x)這一部分是判斷當前的學科的值是否在y中被包含,List.Contains是按y的類型來決定的,返回的結果邏輯值,如果包含,那麼返回TRUE,否則返回FALSE。如:第2行中學科的值為「算術」,為上述公式中的x,判斷y中是否包含x,即「算術」是否在list列表{「算術」,「數數」}中出現過,而「算術」正好出現過,所以結果為TRUE。再根據IF函數來判斷,如果List.Contains的結果為TRUE,則返回結果為「數學」,如果為FALSE,也就是說不包含時,返回結果為當前的學科的值。
在Power Qeury中的M公式中,經常會出現的一個條件判斷語句:
除此之外,還有一個與之相匹配的的語句,也叫容錯語句。類似於Excel中的iferror函數。
需要注意的是這兩個語句都是小寫的形式,一定要注意。