Power Query三大容器實作系列 - (5/7) 關於List的索引值

除了使用[向下切入]或點開超連結的操作來執行擷取List元素之內容的查詢步驟外,也可以透過程式碼的編輯來達到相同的目的。這時候就一定要懂得List索引值的概念了。

關於List的索引值

基本上,在M語言裡的任何一個List,其元素都有一個對應的索引編號,猶如陣列(Array)的註標(subscript)一般,第1個元素的索引編號是0、第2個元素的索引編號是1、第3個元素的索引編號是2、…依此類推,只要憑藉著這個索引編號值,簡稱索引值,便可以輕鬆取得該元素的內容。所以,延續先前[向下切入]的查詢話題,若要擷取List裡的元素,則原本透過[向下切入]操作所產生的程式碼,其實僅透過程式碼的編撰,並不需要經由功能選單操作產生新查詢步驟,也能夠順利向下切入深化資料,輕鬆擷取查詢內容。而擷取List內容的運算式,其寫法是在Lit輸出的運算式之後,添增一對由大括號符號所含括的List索引值即可。

例如:

let

    來源 = {"蘋果","柳丁","葡萄","鳳梨","火龍果","香蕉"}{4}

in

    來源

所以,當您要萃取出清單裡的第5個元素內容 "火龍果" 時,便可透過{4}而取得此List索引值為4的內容。

List裡還有List

再接再厲,我們再看看另一個內容豐富的嵌套式清單:

其程式碼為:

所謂清單裡還有清單,若List裡包含了多組也是List資料型態的元素,則每一對大括號所囊括的List,彼此之間亦以逗點作為分隔。這麼冗長的程式碼實在也不易解讀,特別以圖解的方式來呈現其巢串的結構。

若要擷取裡面的第0元素,則執行步驟的程式碼可以寫成:

= 清單{0}

查詢結果則是「商務智慧」。

若要擷取裡面的第2素,則執行步驟的程式碼可以寫成:

= 清單{2}

查詢結果則是「205」。

至於擷取裡面的第1元素,執行步驟的程式碼為:

= 清單{1}

查詢結果也是一個清單,內含5個元素(3個文字資型態、2個清單資料型態)。

若要再往下探勘,從上述的清單裡再向下切入深化擷取第0個元素,可以輸入以下程式碼:

= 清單{1}{0}

查詢結果則是「程式設計」。

若要擷取裡面的第2素,則執行步驟的程式碼可以寫成:

= 清單{1}{2}

查詢結果則是「資訊服務」。

若要擷取裡面的第1素,則執行步驟的程式碼可以寫成:

= 清單{1}{1}

而此查詢結果又是另一個清單,此清單裡有7個元素,因此,若要再深入探索該清單裡的第2個元素,程式碼便是:

= 清單{1}{1}{2}

而此查詢結果仍是一個清單,此清單裡有6個元素。

所以,若有再向下切入,截取其第5的元素的需求,則可以寫成:

= 清單{1}{1}{2}{5}

而此查詢結果是一個文字型態的內容「Publisher」。

List的擴展與轉換

當點按清單的擴展按鈕,會將清單裡的每一個元素擴展到資料表裡的每一列。而針對List的內容,通常可以轉換為Record,也可以轉換為Table;List要進行合併時可以使用List.Combine函數;List要進行拆分時可以使用List.Split()函數;List的彙算則可運用List.Sum、List.Average、List.Count、List.Min、List.Max等函數。不過,初學者也不必太慌張,甭急著想要一次學好所有的函數,只要每學會一個不會忘掉一個,就很厲害了!函數的相關資源與說明,可以查訪微軟官方網站與文件,網路上的一些部落格也都很有幫助,與至於函數的使用時機與應用也是一種經驗的累積,就舉一反三多學多問囉!

 

前一篇:<<Power Query三大容器實作系列 - (4/7) 向下切入:深化(擷取)容器裡的內容>>
下一篇:<<Power Query三大容器實作系列 - (6/7) Record(記錄)的建立編輯與轉換>>