數據不規範?Power Query中這個M函數你應該掌握

2021-01-13 Excel聚焦

Table.AddFuzzyClusterColumn是Power Query的表函數之一,它可以對數據進行模糊匹配並分組,從而規範數據源中的數據,什麼意思呢?

一個簡單的例子,比如地名「北京」,在數據源中它可能是「北京」,「北京市」,「Beijing」甚至「北平」,而該函數需要解決的,就是由數據錄入不規範,數據本身的標準不統一等原因導致的這種數據雜亂的問題。

為解決此問題,多數情況下,簡單替換的方法顯然不切實際,而該M函數可以使其規範化,這在數據清洗中特別實用。

幸運的是,自PowerBI Desktop上次更新(2020年8月)以來,已增加了對該函數的支持,下文講解其具體用法。

基本用法

對於基本用法,我想引用文檔中的舉例的數據進行說明。首先我們有一個簡單的表,裡面包含英文城市溫哥華和西雅圖(如下),你可以留意到其中的單詞大小寫不一,且存在拼寫錯誤(如seattl):

現在,我們回到Table.AddFuzzyClusterColumn函數,其用法如下:

Table.AddFuzzyClusterColumn(

源表, //【必要】

目標列列名, //【必要】

規整後的列名, //【必要】

其他參數 //【可選】

因此,針對以上數據,添加步驟,編寫M語句如下:

= Table.AddFuzzyClusterColumn( #"Changed Type", "Location", "Location_Cleaned" )

這樣,我們就可以得到如下結果,數據得到完美規範:

是不是很厲害!

上面只是基本的用法,利用該函數的可選參數,還有更強大的功能。

進階用法

在進階用法中,會在基本用法的基礎上講解參數的原理和使用方法,此外,處理的數據也改為文檔中未涉及的中文文本。

首先利用以下M語句模擬一個火車站站名不規範的簡易數據表:

---

let

DATA =

Table.FromRecords(

{

[ID = 1, Location = "北京西站"],

[ID = 2, Location = "北京西站"],

[ID = 3, Location = "廣州東站"],

[ID = 4, Location = "廣州東站"],

[ID = 5, Location = "廣州東火車站"],

[ID = 6, Location = "西九龍站"],

[ID = 7, Location = "西九龍站"],

[ID = 8, Location = "西九龍火車站"],

[ID = 9, Location = "香港西九龍站"],

[ID = 10, Location = "HK West Kowloon Railway Station"]

},

type table [ID = nullable number, Location = nullable text]

)

in

DATA

---

數據如下,當然你也可以手動先做好這個數據:

按上文使用Table.AddFuzzyClusterColumn的方式,此處使用第一個可選參數【Culture】。

文檔對該參數的定義是「允許根據區域性特定規則對記錄進行分組」,其實就是該函數默認處理對象是英文字符,如果是其他語言,就應該使用Culture指明要處理的語言。

於是編寫M代碼如下:

= Table.AddFuzzyClusterColumn( DATA,//源表名 "Location", "Location_Cleaned",[Culture="cn-ZH"] )

這樣我們得到如下效果:

現在北京西站這個名稱得到了規範,空格問題得到處理。

但如何處理「廣州東站zhan」這種混雜了拼音的記錄呢?答案是使用強大的【Threshold】參數。

Threshold參數的範圍為0到1.0,默認值是0.8,數值為1代表原數據不做任何處理,其越低代表其在糾正數據時,對數據本身的容錯率越高。

此處將該參數設定為0.6後就解決了此問題。

註:此處你還可以增加IgnoreSpace= true參數顯式地忽略空格。

= Table.AddFuzzyClusterColumn( DATA, "Location", "Location_Cleaned", [ Culture="cn-ZH",Threshold=0.6 ] )

效果如下:

到此我們發現以上方法,還未能解決表中第六行至第十行的命名雜亂問題,PQ沒有足夠的依據去智能地給他們歸類,因為PQ並不清楚西九龍是香港的一個地名,當然更不可能了解"HKWest Kowloon Railway Station"的含義。

為解決此問題,該函數引入了【TransformationTable】參數,這將允許我們自定義一個轉換表,以使得PQ可以按照轉換表的定義來規範數據,從而徹底解決此類問題。

首先,定義轉換表TRANS_TABLE:

= Table.FromRecords({ [From = "西九龍站", To = "香港西九龍站"], [From = "西九龍火車站", To = "香港西九龍站"], [From = "HK West Kowloon Railway Station", To = "香港西九龍站"] }, type table [From = nullable text, To = nullable text] )

轉換表如下:

然後參數中引用該表:

= Table.AddFuzzyClusterColumn(DATA, "Location", "Location_Cleaned", [ Culture="cn-ZH", Threshold=0.6,TransformationTable=TRANS_TABLE ] )

這樣我們就完美地解決了問題。效果如下:

總結

Table.AddFuzzyClusterColumn函數在數據源不規範時十分有用,掌握它的用法就可以輕鬆處理這類問題,但對於企業BI解決方案而言,通過ETL等方式從源頭上解決數據雜亂的問題才是最規範的做法。

知識連結

小必老師新書《Excel人力資源實戰寶典》即將上架。

該書全書彩印,從人力資源管理中的招聘,培訓,員工關係,績效,薪酬,假期與考勤,薪酬與福利,人力資源規劃各個模塊出發,學入淺出地講解Excel操作,公式函數,數據透視表,圖表,Power Query的應用,絕對是你工作中的好幫手。集多年實際經驗,案例豐富,題材新穎,HR職場必備。

相關焦點

  • Power Query 閃開,最牛的Excel合併公式來了
    插入數據透視表 - 對日期進行月、日分組  - 把月拖到篩選標籤中 -  添加切片器:月蘭色分享兩種高能方法,一種是power Query轉換,第二種是用函數公式。一、使用Power Query 1、效果演示
  • Excel也能玩轉大數據,Power Query了解一下?
    手工粘貼再透視的話,最主要的問題就是Excel不支持100萬行以上的數據,所以你連享受Excel文檔卡死的資格都沒有。話說回來,雖然我學了這玩意兒,但是在實務中真正用到的次數卻屈指可數,導致我每次使用的時候都要回頭把之前學的東西再撿一遍,也許是自己涉及這個數據量級的項目不多吧。
  • 【課程推薦】Power Query for Excel
    這是因為我們獲得的數據不規範/格式不同/多個來源/......,造成了必須進行中間的數據清洗過程。而這個數據清洗過程是花費時間和精力最多的,同時也造成了分析過程的複雜化。而且,無論你學習多少Excel技能,掌握多少Excel函數,這個過程的工作都不會得到很大改善。
  • 製作的函數曲線圖不規範?這裡告訴你
    在科技論文中,函數曲線圖的使用頻率是非常高的。函數曲線圖為線條圖的一種,是指在坐標系中將某參量的一系列數據用光滑線或折線的形式勾畫出的圖樣。函數曲線圖具有說明性強、圖面簡潔、篇幅較小、繪製容易、使用方便等特點,可以直觀地反映出某參量隨另一參量變化的趨勢。
  • 匯總csv文件其實很簡單,用excel三步即可搞定,並且支持數據更新
    Hello,大家好,今天跟大家分享下我們如何快速的匯總多個csv文件,這個也是之前一個粉絲問道的問題,前幾天忙沒時間寫,今天就跟大家分享下Csv文件常見於我們從系統中導出的文件,或者是下載的一些網頁的數據,因為是從系統中導出的文件,他們的格式都是一摸一樣的,匯總多個csv文件與合併多個excel工作薄十分類似,下面就讓我們來看下他是如何操作的
  • 提取Excel單元格中的英文、漢字、數字,用Power Query輕鬆解決!
    日常工作中都會遇到一些不規範的數據,對於數據的提取是個頭疼的事情,今天教大家用Power Query快速提取你想要的內容,超簡單,又實用的技巧。1、提取英文在只有中英文混合的自字符串中我們可以這樣提取英文。A 定位表格位置,點擊數據-獲取和轉換-從表格,這時候數據自動加載到Power Query編輯器中。
  • 揭開PQ的面紗:初識Power Query!
    01 PQ的主要操作步驟 PQ可以搜索數據源,創建連接,然後按照可滿足你需求的方式調整數據(例如刪除列、更改數據類型或合併表格等);調整數據之後,可以共享或創建報表等。
  • PQ-數據轉換10:一維表和二維表,透視及逆透視
    小勤:前面你的很多個關於PowerQuery的內容裡都涉及到逆透視,這到底是什麼意思呢?
  • 如何寫好JavaScript函數?
    }4、函數參數最理想的參數數量是零,其次是一(單參數函數),再次是二(雙參數函數),應儘量避免三(三參數函數)。有足夠的理由才能使用三個以上參數。如果函數需要三個以上參數,就說明其中一些參數應該放在一個對象中了。
  • 使用信息函數快速分辨excel中的文本數據與數字數據
    我們在實際工作中,當我們手工錄入excel數據的時候,有些人會粗心大意,容易將鍵盤中的英文字母當然數字錄入到excel表格中,比如我們需要輸入金額2020元,結果由於粗心將數據錄入成202o元,當我們對這樣的數據進行計算的時候,就會出現錯誤,當我們需要檢查大量這樣的數據的時候,我們可能就會使用到功能強大的函數
  • 僅需4步,讓excel自動幫你匯總數據,學會它,在家辦公多睡2小時
    Hello,大家好,不知道大家是不是已經開啟在家辦公模式了呢?今天有一個粉絲問到如何在excel中實現自動匯總多個工作薄的效果,因為在家辦公本來效率就低,每天都要一次次的複製粘貼,十分耗費時間,問我有沒有是快速的方法其實對於這樣的問題,我們使用power query即可輕鬆搞定,實現將excel文檔放在指定的文件夾中,然後回到匯總表中點擊一下刷新即可自動匯總數據。
  • 根據出生日期計算年齡,方法有很多,Power Query更簡單明了
    之前我們分享過三種根據出生日期計算年齡的方式,其中的DATEDIF函數計算的最為準確,可是你是否知道,Power Query計算年齡也很有一套,而且也很簡單,下面就讓我們一起來操作一下吧。將日期數據導入Power Query數據編輯器,然後添加列,選擇日期中的「年限」,得出來的是既定日期與當前日期的差值,而且是以「日」為單位的,我們需要將其進行轉化,選中剛才的新增列,在轉換下面的日期與時間列選擇持續時間中的「總年數」,其中的向上捨入就是函數中的ROUNDUP(即不管小數點後是多少,都向前進1)。
  • Excel中排序的4種超級技巧,你確定都掌握嗎? - Excel函數公式
    排序,可以說是每天都要使用的技巧,但是部分親掌握的並不好,甚至不會使用,那麼,如何有效的進行排序呢?一、常規(命令)排序。目的:對銷量進行升序或降序排序。方法:1、選定需要參與排序的目標單元格。2、【數據】-【排序】。
  • 學習反比例函數你必須掌握反比例函數K的幾何意義才能快速秒殺!
    最近講解到關於反比例函數的相關內容時,有學生抱怨反比例函數與幾何問題結合起來考察相關較難,那麼我們今天就一起來看看「反比例函數K的幾何意義」,先了解一下不一樣的反比例函數,掌握必要的解題技巧,接下來我們一起來看看相關內容吧!
  • Power歌詞翻譯 Power中英文歌詞全文
    gonna take it lying down baby  那並不意味著我就會隨便和你歡愉 寶貝  Oh I'm a machine when I do it  當我沉浸其中 就像臺機器停不下來  I'll be catching fire gasoline when I do it  當我沉浸其中 我激情難卻 活力無限
  • 掌握這15個Excel函數技巧,你也可以成為別人眼中的高手!
    Excel的靈魂在於數據的分析與統計,而分析與統計就離不開函數或公式,今天要給大家分享的15個函數公式,是工作中常用的,可以直接套用。一、從身份證號碼中提取出生年月。函數1:Text。方法:在目標單元格中輸入公式:=COUNTIFS(C4:C10,M4,I4:I10,">"&N4)。解讀:當多個條件同時符合時,此條數據才被統計,當然也可以實現單條件計數的功能。
  • MySQL中按周統計數據
    MySQL中估計沒有這樣的by week的函數。有按照天統計簡單,按照月統計也簡單,我們只要把日期截取一下轉為YYYY-MM的字符串然後再分組聚合就可以了。但是他要按照周來統計,確實有點難度。但是MySQL這麼成熟的資料庫軟體了,也不能說實現不了吧。說幹就幹,開整。
  • 提分秘籍,銳角三角函數必考題型總結,不轉別後悔
    溫馨提示:本題考查了非負數的性質、特殊角的三角函數值,解答本題的關鍵是掌握幾個特殊角的三角函數值.對於特殊角的三角函數值,要掌握兩個方面:(1) 已知一個特殊角,要知道這個特殊角的三角函數值;(2) 已知一個特殊角的三角函數值,則要知道這個特殊角的度數。變式練習2.
  • EXCEL中"IF"函數的嵌套用法
    而正確的方式應該是使用「大於等於」和「小於等於」符號來進行判斷。他的使用方法是:IF(判斷條件,條件為真時的返回值,條件為假時的返回值)例如,在昨天的結束時間的計算公式為:if(D2<F2,Text(0,"[h]:m:s"),Text(D2-F2,"[h]:m:s")該公式的解釋為: