power query基礎(chǔ) (3.3):深入淺出 Power Query 的 "let…in" 語(yǔ)法:深入ETL流程核心
原創(chuàng) 速六財(cái)易 速六財(cái)易 2024-04-28 11:36 天津 聽(tīng)全文
我們?cè)谑褂肞ower Query時(shí),會(huì)發(fā)現(xiàn)它使用"let…in"的結(jié)構(gòu)塊來(lái)組織代碼,這篇文章我們開(kāi)始深入講解 "let…in" 結(jié)構(gòu),如何高效運(yùn)用它來(lái)操縱和轉(zhuǎn)換數(shù)據(jù),以及如何利用語(yǔ)法嵌套來(lái)構(gòu)建復(fù)雜的數(shù)據(jù)變換邏輯。
"let":定義數(shù)據(jù)轉(zhuǎn)換步驟
"let" 關(guān)鍵字定義的部分是一個(gè)步驟的序列,其中每一行都會(huì)創(chuàng)建一個(gè)新的查詢步驟,Power Query 使用等號(hào)進(jìn)行賦值,左邊是查詢步驟的名字(可以自由命名),右邊是M函數(shù)操作或?qū)ζ渌汛嬖诓樵儗?duì)象的操作,M函數(shù)或者其他查詢對(duì)象通常返回單個(gè)的數(shù)據(jù)對(duì)象,因此每一個(gè)查詢步驟被賦予了某一個(gè)數(shù)據(jù)對(duì)象的值。
因此,這些查詢步驟,實(shí)質(zhì)上是局部變量,可以用來(lái)存儲(chǔ)從源數(shù)據(jù)中提取的結(jié)果、被清洗或轉(zhuǎn)換后的數(shù)據(jù)集合,或是中間計(jì)算結(jié)果。通過(guò)命名這些變量,我們能夠清晰地追蹤每一個(gè)數(shù)據(jù)轉(zhuǎn)換步驟,同時(shí)確保我們的數(shù)據(jù)處理流程具有可讀性和可維護(hù)性。
例如,可以有這樣的 "let..in.." 代碼段:
let
SourceData = Excel.CurrentWorkbook(){[Name="SalesData"]}[Content],
CleanedData = Table.SelectRows(SourceData, each [Sales] <> null),
FormattedData = Table.TransformColumnTypes(CleanedData, {{"Date", type date}})
in
FormattedData
在上述代碼中,我們看到有三個(gè)定義的數(shù)據(jù)轉(zhuǎn)換步驟,它們分別代表從Excel工作簿加載數(shù)據(jù),清洗空值以及格式化日期列等處理。
"in":輸出最終結(jié)果
“in”關(guān)鍵字指定了我們想要返回的最終數(shù)據(jù)對(duì)象,通常是我們進(jìn)行的數(shù)據(jù)轉(zhuǎn)化之后的結(jié)果,也就是我們想要的數(shù)據(jù)。
在 "let" 之后的所有變換操作中,"in" 作為終結(jié)點(diǎn),標(biāo)志著數(shù)據(jù)準(zhǔn)備好提供給下一階段的處理,可能是加載到Power BI的數(shù)據(jù)模型中,也可能是供其他Power Query查詢引用。
嵌套 "let…in":構(gòu)建高級(jí)數(shù)據(jù)邏輯
進(jìn)階的用法中,“l(fā)et...in” 語(yǔ)法本身允許嵌套使用,這提供了構(gòu)建復(fù)雜數(shù)據(jù)邏輯和自定義函數(shù)的強(qiáng)大能力。嵌套 "let...in" 結(jié)構(gòu)使我們可以在局部范圍內(nèi)創(chuàng)造臨時(shí)的數(shù)據(jù)處理邏輯,而不影響外部環(huán)境。這在創(chuàng)建自定義函數(shù)或需要臨時(shí)變量來(lái)處理復(fù)雜轉(zhuǎn)換時(shí)尤其有用。這一步分比較復(fù)雜,這里僅做介紹,可以不掌握,后面隨著M函數(shù)學(xué)習(xí)的深入,再回過(guò)頭來(lái)掌握.
舉個(gè)例子:
let
計(jì)算模型 = (input) =>
let
Step1 = input * 2,
Step2 = Step1 + 99
in
Step2,
Result = List.Transform({1, 2, 3}, each 計(jì)算模型(_))
in
Result
在這個(gè)例子中,我們定義了一個(gè)名為計(jì)算模型的自定義函數(shù),它內(nèi)部使有自己的 "let...in" 結(jié)構(gòu);然后在外部我們可以在同一個(gè)查詢中調(diào)用這個(gè)函數(shù)來(lái)轉(zhuǎn)換列表中的每個(gè)元素。
結(jié)論
"let...in" 是 Power Query M 語(yǔ)言的精髓,是數(shù)據(jù)轉(zhuǎn)換的基礎(chǔ)。無(wú)論是處理簡(jiǎn)單清洗任務(wù)還是設(shè)計(jì)復(fù)雜的數(shù)據(jù)模型,"let...in" 語(yǔ)法都體現(xiàn)出其靈活性和強(qiáng)大的功能。通過(guò)嵌套使用,我們甚至可以創(chuàng)建復(fù)雜的計(jì)算邏輯,使得Power Query成為處理現(xiàn)代商業(yè)數(shù)據(jù)的理想工具。