使用Power Query進行數據分析的時候,我們除了經常使用基礎數據類型之外,還需要使用到結構性數據,在Power Query中我們主要接觸的結構性數據包括:列表、記錄和表。
我們首先在Power Query中建立一個空查詢
打開Excel2016,依次點擊“數據/從其他源/空白查詢”,如果你當前正處於Power Query 編輯器中,那么可以在Power Query界面右側找到“新建源/其他源/空查詢”按鈕
![]() |
![]() |
首先我們來創建一個列表,在公式編輯欄中輸入內容:
= {1, 2, 3}
我們得到一個列表,請注意圖中左側各個結構性數據的圖標顯示異同。列表具有如下特征:
1、使用成對的花括號標識
2、列表中各個元素使用英文逗號分隔
3、列表中的元素不一定是相同數據類型,例如下面的列表包含數字和字符
4、列表中的元素可以使用基本數據類型,也可以嵌套使用結構性類型,例如下面的列表嵌套了一個列表元素
接下來我們來看記錄,通過前面的方式我們重新創建一個空查詢,然后在公示欄輸入如下的公式
= [ A = {1,11}, B =2, C = {3} ]
我們得到了一個記錄,記錄的特點如下:
1、使用成對的中括號標識
2、記錄中的各個元素之間使用英文逗號分隔
3、記錄實際是鍵值對的集合,其中的每個元素是一個鍵值對,元素鍵值對表達式,左側是該元素的鍵名,右側是該元素的值,中間使用等號連接
A = {1,11}
4、記錄中,每個元素的值可以使用基礎數據類型,也可以使用結構性數據類型
最后我們來看看表,表的創建我們需要借助於函數才能創建,PQ里面沒有為表配置像列表和記錄那樣的簡寫符
PQ里面有很多的M函數可以創建表,其基本的結構是Table.FromXXX,這里我使用Table.FromRows來創建個一個表,其他函數,請查官方文檔
= Table.FromRows({ {1, "Bob", "123-4567"},{2, "Jim", "987-6543"}},{"CustomerID", "Name", "Phone"})
通過觀察以上函數的結構可以發現:
1、表的數據內容通過Table.FromRows函數的第一個參數指定,該參數是一個使用列表作為其元素的列表(嵌套列表)
2、表的標題通過Table.FromRows函數的第二個參數指定,該參數是一個字符串元素構成的列表。
表雖然沒有簡寫的標識符,但是創建表的函數有個簡寫方式,如下
= #table({"x", "x^2"}, {{1,1}, {2,4}, {3,9}})
標題列表作為函數的第一個參數,嵌套列表作為函數的第二個參數
最后需要討論一下如何訪問結構性數據內部的元素
對於列表和表數據類型,可以通過表達式x{y}的形式來訪問子元素:
1、x是列表,y是整數:y表示位置索引,訪問的是列表x中的第y+1個元素,如果不存在則返回錯誤
2、x是表,y是整數:y表示行索引,訪問的是表x中的第y+1行,如果不存在則返回錯誤
3、x是表,y是記錄:記錄y中鍵值與表x列名相同,且值對應相等的行記錄,未找到返回錯誤
{"a","b","c"}{0} // "a"
#table({"A","B"},{{0,1},{2,1}}){0} // [A=0,B=1]
#table({"A","B"},{{0,1},{2,1}}){[A=2]} // [A=2,B=1]
可以使用x{y}?表達式,在未找到結果是,返回空值,但是如果找到了多個匹配項,仍然會返回錯誤
{true, false}{2}? // null
#table({"A","B"},{{0,1},{2,1}}){[B=3]} // null
#table({"A","B"},{{0,1},{2,1}}){[B=1]} // error
對於記錄數據類型,可通過表達式x[y]形式訪問子元素,同樣它也有x[y]?的形式
1、x是記錄,y單元素鍵名:找出記錄x中鍵名為y的值,如果未找到鍵名將返回錯誤
[A=1,B=2][B] // 2 [A=1,B=2][C] // error [A=1,B=2][C]? // null
2、x是記錄,y是多元素記錄:
[A=1,B=2][[B]] // [B=2] [A=1,B=2][[C]] // error [A=1,B=2][[B],[C]]? // [B=2,C=null]








