使用自定義M函數(shù)「打包」數(shù)據(jù)處理流程

M函數(shù)有很多的用途,其中之一就是將數(shù)據(jù)處理流程定義成自定義M函數(shù),可以理解成將處理步驟「打包」。

在執(zhí)行從文件夾合并文件前需要對(duì)文件執(zhí)行一些固定操作(提升標(biāo)題等、刪除空行、空列、替換值)時(shí),可以先單獨(dú)對(duì)一份文件進(jìn)行清洗,然后將清洗流程定義成自定義函數(shù)。對(duì)其他文件的轉(zhuǎn)換操作就可以直接調(diào)用自定義函數(shù)一次性完成了。

假設(shè)一共有4個(gè)月的銷量數(shù)據(jù),現(xiàn)在需要將他們合并進(jìn)行匯總分析。

觀察1月份數(shù)據(jù),第1、2行加載到Power Query后將會(huì)顯示成null,需要通過(guò)篩選去掉,另外出于某種原因D列是空列,因此需要?jiǎng)h除。同時(shí)為了更好的分析各產(chǎn)品情況,我們需要將數(shù)據(jù)進(jìn)行逆透視處理。

每個(gè)月的數(shù)據(jù)都符合以上特點(diǎn),同樣需要?jiǎng)h除前2行、刪除D列、逆透視。

不使用自定義函數(shù)的話,可以選擇將?各月的數(shù)據(jù)分別執(zhí)行以上步驟,再追加合并。

但既然流程是重復(fù)的,那么在Power Query中就可以實(shí)現(xiàn)自動(dòng)化。

一、從文件夾

先執(zhí)行從文件夾合并數(shù)據(jù)

↑?獲取數(shù)據(jù)>文件夾


↑?點(diǎn)擊“轉(zhuǎn)換數(shù)據(jù)”進(jìn)入PowerQuery編輯器


↑ 選擇第1、2列,刪除其他列


這里保留第 2 列文件名,因?yàn)槭纠形募藬?shù)據(jù)的月份。

↑ 添加自定義列Excel.Workbook([Content])


展開(kāi)自定義列以后可以看到,每個(gè)月份的數(shù)據(jù)已經(jīng)包含在【Data】列里面了

這時(shí)候我們可以保留【Name】和【Data】列,同時(shí)將1月份的數(shù)據(jù)添加為新的查詢。

↑ 點(diǎn)擊Table字樣,右鍵彈出菜單中選擇作為新查詢添加


將1月份的數(shù)據(jù)添加為新的查詢,是為建立自定義函數(shù)提供處理樣本。接下來(lái)我們對(duì)1月份的數(shù)據(jù)進(jìn)行數(shù)據(jù)清洗操作,然后將這些操作「打包」成自定義函數(shù),方便重復(fù)調(diào)用。

二、應(yīng)用數(shù)據(jù)清理流程

接下來(lái)在新生成的查詢中,應(yīng)用數(shù)據(jù)清洗步驟:

↑ 使用刪除行功能,刪除最前面2行


↑ 將第一行提升為標(biāo)題


↑?選中【客戶編號(hào)】右鍵選擇逆透視其他列


經(jīng)過(guò)以上步驟,1月份的數(shù)據(jù)處理整體流程就完成了。從視圖>高級(jí)編輯器中可以看到整個(gè)流程所產(chǎn)生的M代碼

三、定義函數(shù)及調(diào)用

接下來(lái)只需要將1月份數(shù)據(jù)處理的流程定義成函數(shù)進(jìn)行調(diào)用即可。

自定義函數(shù)的第一步是:在let 語(yǔ)句前方輸入定義參數(shù)的語(yǔ)句:

(DataTable)=>

找出參數(shù) DataTable 能替代的地方,將之前的步驟刪除,并用變量名替代之前的M代碼部分。修改后的M代碼如下:

(DataTable)=>

let刪除的頂端行 = Table.Skip(DataTable,2),提升的標(biāo)題 = Table.PromoteHeaders(刪除的頂端行, [PromoteAllScalars=true]),更改的類型 = Table.TransformColumnTypes(提升的標(biāo)題,{{"客戶編號(hào)", Int64.Type}, {"堅(jiān)果", Int64.Type}, {"毛巾", Int64.Type}, {"Column4",typeany}, {"沐浴露", Int64.Type}, {"巧克力", Int64.Type}, {"收納盒", Int64.Type}, {"水杯", Int64.Type}, {"糖果", Int64.Type}, {"洗潔精", Int64.Type}, {"洗衣液", Int64.Type}}),逆透視的其他列 = Table.UnpivotOtherColumns(更改的類型, {"客戶編號(hào)"},"屬性","值")

in? ? 逆透視的其他列

這里我們對(duì)所有月份數(shù)據(jù)的處理是從刪除頂端行開(kāi)始的,所以刪除的頂端行之前的步驟都可以刪除。并將 Table.Skip 函數(shù)的第一個(gè)參數(shù)改為變量名 DataTable。

點(diǎn)擊確定,可以看到對(duì)1月數(shù)據(jù)處理的流程已經(jīng)被轉(zhuǎn)變成了函數(shù),函數(shù)名為【Data】。

在查詢中通過(guò)自定義列調(diào)用 Data 函數(shù)提取1-4月份數(shù)據(jù)。

↑?在自定義列中輸入Data,智能填充會(huì)自動(dòng)提供自定義函數(shù)


↑?在自定義列中輸入=Data([Data])


最后展開(kāi)【自定義】列,刪除【Data】列,提取【Name】列的日期數(shù)據(jù)即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容