【Power BI】精要 之 Power Query

  Power Query 最重要的就是M函數編寫,M函數是Power Query的函數語法,可以幫助我們靈活地完成數據導入、整合、加工處理等數據處理工作。M函數佔據了Query數據處理能力的80%,界面操作僅僅佔20%。

數據類型

  先介紹一下M函數的基本表達式:let…in…。單行註釋符爲‘//’,多行註釋符爲‘/……/’。例:

let   //let用於封裝計算結果, 併爲計算結果命名。
Source = Text.Proper("hello world")
in    //in用於顯示結果。
Source
/*通過let語句將Text.Proper(“hello world”)函數的計算結果封裝到名叫Source的變量中,
 再通過in語句顯示Source變量的內容“hello world” 。*/

  再介紹M函數基本變量類型:

類型 EG.Value
Type Example value
Binary 00 00 00 02 // number of points (2)
Date 5/23/2015
DateTime 5/23/2015 12:00:00 AM
DateTimeZone 5/23/2015 12:00:00 AM -08:00
Duration 15:35:00
Logical true and false
Null null
Number 0, 1, -1, 1.5, and 2.3e-5
Text “abc”
Time 12:34:12 PM

  除了Power Query指定的內置函數,Power Query 用戶還可以自定義函數。這裏業介紹一下Power Query 的自定義函數。自定義函數:函數名 = (參數1,參數2,參數3……) => 函數運算表達式**※通過調用函數得到的函數返回值稱爲函數值**。例:

//自定義“MyFunction”函數
let
MyFunction = (parameter1, parameter2) => (parameter1 + parameter2) / 2
Final = MyFunction(2,4)
in
Final
/*以上代碼執行結果爲3,先在let中創建名爲MyFunction的自定義函數,函數有parameter1和parameter2兩個參數,
函數的運算表達式爲(parameter1 +parameter2) / 2,之後在let中使用2與4兩個參數調用MyFunction函數, 
MyFunction函數將運算結果返回給變量Final,最後在in中顯示Final變量的內容3。*/

數據結構

  Power Query裏的數據是非關係型數據,是結構化數據,包含:列表(List)、記錄(Record)、表(Table)。先說列表(List):列表是擴在花括號中的一組數據,列表中每個數據都有屬於自己的序號以便自己能夠被檢索到,列表中的數據序號從0開始按照排列順序依次整數遞增,大列表內還可以嵌套子列表、記錄等。花括號除了用來括起列表內的所有數據還用來指定列表內數據的序號,通過指定數據序號可以從列表內找到並獲取所需的數據值。
在這裏插入圖片描述
  Power Query記錄用來定義字段和給字段賦值,一個字段由字段名以及字段內的值組成,字段名是唯一
的文本值,是字段的標識符。字段名可以不用引號引用,字段名有兩種表達形式:

不加"“的表達形式、例如OrderID
加#和”"的表達形式、例如#“Today’s data is:”
記錄中的內容寫在[]括號內, []括號同樣用於在記錄中取特定字段的值。
在這裏插入圖片描述

  表(Table是由行列數據構成的,可以使用隱式或顯示方式定義字段(列)的數據類型。使用#table建表時,可以使用列表或者記錄來定義列名,並使用嵌套列表來定義表中的數據,嵌套列表的大列表內包含所有定義單行用的子列表,而每個子列表則用來定義一行數據。花括號{}可以用來索引查找指定行的數據。

在這裏插入圖片描述
在這裏插入圖片描述
其他的數據結構在這裏插入圖片描述

  另外,再說一說if表達式。它通過對邏輯條件進行判斷來對兩個表達式進行選擇。語法結構:

if 2 > 1 then
2 + 2
else
1 + 1
/*在上述案例中,因爲判斷條件2>1的邏輯值爲真,所以執行
第一個表達式2+2,所以執行結果爲4,如果判斷條件改爲
2<1,則其判斷條件的邏輯值爲假,所以會執行第二個表達
式1+1,此時的執行結果爲2.*/

M函數的計算方式及運算符

計算方式
  M函數的計算方式與Excel單元格相互間引用計算的方式類似,其計算順序是根據計算單元中每個元素間的依賴關係決定的。例如類似下邊Excel單元格間的相互引用計算方式1:

在這裏插入圖片描述
在M函數中便可以寫成如下形式,它與Excel單元格的區別在於M函數中的A1、 A2、 A3是記錄
中的元素,而Excel中的A1、 A2、 A3是單元格地址。
在這裏插入圖片描述

  在M函數中還可以進行更爲複雜的元素間的引用計算。例如下邊例子中的#"Total Sales"就是引用同一個記錄中嵌套的列表內的第一個記錄內的Total字段,以及第二個記錄內的Total字段,將這兩個值相加得到的。計算方式2:

在這裏插入圖片描述

運算符
  一個完整的計算表達式由計算數與運算符兩部分組成,例如在計算表達式1+2中, 1和2是計算數而+就是運算符。 M函數中運算符的含義有時取決於參與計算的計算數的數據類型,下邊是主要運算符的案例列表供大家參考。

在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

數據類型轉換、錯誤處理

數值類型

在這裏插入圖片描述

文本類型

在這裏插入圖片描述

邏輯類型

在這裏插入圖片描述

日期、時間、日期時間以及時區類型

在這裏插入圖片描述

錯誤處理

  在M函數中, 當某個表達式無法得到正確的計算結果時我們可以用“error” 來發生錯誤事件。用“error” 發生的錯誤事件可以用“Try” 表達式來獲取, 並對其進行處理及顯示詳細錯誤信息。
  “Try” 表達式可以將由error發生的錯誤信息封裝在一個記錄內。EG:

try error "negative unit count"
/*上例會生成一個由[HasError]、 [Error]以及[Meesage]三個字段構成的
記錄, 字段中的值用來對錯誤進行解釋說明。*/

  一般情況下上述案例中, “Try” 表達式執行後產生的記錄內容如下:(但也可以使用“otherwise” 運算符來重新定義Try的顯示結果。try error "negative unit count" otherwise 42 // equals 42)

[
HasError = true,
Error =
[
Reason = "Expression.Error",
Message = "negative unit count",
Detail = null
]
]

  Try的實際應用案例:

let Sales =
[
ProductName = "Fishing rod",
Revenue = 2000,
Units = 1000,
UnitPrice = if Units = 0 then error "No Units"
else Revenue / Units
],
textUnitPrice = try Number.ToText(Sales[UnitPrice]),
Label = "Unit Price: " &
(if textUnitPrice[HasError] then textUnitPrice[Error][Message]
else textUnitPrice[Value])
in
Label
/*執行結果爲"Unit Price: 2",若將Sales記錄中的Units改爲0,則顯示結果爲"Unit Price: No Units"。*/

  上面從數據類型、結構,M函數計算方式和運算符,數據類型轉換、錯誤處理等方面介紹了 Power Query的重點內容。通過掌握上面的要點,多練習,便能更好的掌握 Power Query,提高 Power Query數據處理能力。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章