Power BI Power Query 認識M語言中的結構性數據


使用Power Query進行數據分析的時候,我們除了經常使用基礎數據類型之外,還需要使用到結構性數據,在Power Query中我們主要接觸的結構性數據包括:列表、記錄和表。

 

我們首先在Power Query中建立一個空查詢

打開Excel2016,依次點擊“數據/從其他源/空白查詢”,如果你當前正處於Power Query 編輯器中,那么可以在Power Query界面右側找到“新建源/其他源/空查詢”按鈕

1 1

 

首先我們來創建一個列表,在公式編輯欄中輸入內容:

= {1, 2, 3}

1

我們得到一個列表,請注意圖中左側各個結構性數據的圖標顯示異同。列表具有如下特征:

1、使用成對的花括號標識

2、列表中各個元素使用英文逗號分隔

3、列表中的元素不一定是相同數據類型,例如下面的列表包含數字和字符

1

4、列表中的元素可以使用基本數據類型,也可以嵌套使用結構性類型,例如下面的列表嵌套了一個列表元素

1

 

接下來我們來看記錄,通過前面的方式我們重新創建一個空查詢,然后在公示欄輸入如下的公式

= [ A = {1,11}, B =2, C = {3} ]

1

我們得到了一個記錄,記錄的特點如下:

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

通過觀察以上函數的結構可以發現:

1、表的數據內容通過Table.FromRows函數的第一個參數指定,該參數是一個使用列表作為其元素的列表(嵌套列表)

2、表的標題通過Table.FromRows函數的第二個參數指定,該參數是一個字符串元素構成的列表。

 

表雖然沒有簡寫的標識符,但是創建表的函數有個簡寫方式,如下

= #table({"x", "x^2"}, {{1,1}, {2,4}, {3,9}})

1

標題列表作為函數的第一個參數,嵌套列表作為函數的第二個參數

 

最后需要討論一下如何訪問結構性數據內部的元素

對於列表和表數據類型,可以通過表達式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]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM