運算式、值與 let 運算式
Power Query M 公式語言查詢是由建立混搭查詢的公式運算式步驟組成。 公式運算式可進行評估 (計算),並提供值。 let 運算式會封裝要計算的一組值、指派名稱,然後在 in 陳述式的後續運算式中使用。 例如,let 運算式可能會包含一個 Source 變數,與 Text.Proper 的值相等,並產生適當大小寫的文字值。
Let 運算式
let
Source = Text.Proper("hello world")
in
Source
在上述範例中,Text.Proper("hello world")
會評估為 "Hello World"
。
下一節會描述語言中的實值型別。
基本值
基本值是只有一個部分的值,例如數字、邏輯、文字或 null。 null 值可以用來表示沒有任何資料。
類型 | 範例值 |
---|---|
二進位 | 00 00 00 02 // 點的數量 (2) |
Date | 5/23/2015 |
Datetime | 2015 年 5 月 23 日 上午 12:00:00 |
DateTimeZone | 2015 年 5 月 23 日 上午 12:00:00 -08:00 |
持續時間 | 15:35:00 |
邏輯 | true 與 false |
Null | null |
數值 | 0、1、-1、1.5 和 2.3e-5 |
Text | "abc" |
Time | 下午 12:34:12 |
函式值
「函式」是一個值,其會在使用引數叫用函式時,產生新的值。 函式撰寫方式是在括弧中列出函式的參數,其後跟隨前往符號 =>,之後則是定義函式的運算式。 例如,建立稱為 MyFunction 的函式,其包含兩個參數,並會在 parameter1 和 parameter2 上執行計算:
let
MyFunction = (parameter1, parameter2) => (parameter1 + parameter2) / 2
in
MyFunction
呼叫 MyFunction 會傳回結果:
let
Source = MyFunction(2, 4)
in
Source
此程式碼會產生值 3。
結構化資料值
M 語言支援下列結構化資料值:
注意
結構化資料可以包含任何 M 值。 若要查看數個範例,請前往其他結構化資料範例。
清單
清單是以零為基礎的數列,以大括弧字元 { } 括住。 大括弧字元 {} 也會用來根據索引位置來擷取清單中的項目。 如需詳細資訊,請前往列出值。
注意
Power Query M 支援無限的清單大小,但若清單是以常值的方式撰寫,則會有固定長度。 例如,{1, 2, 3} 的固定長度為 3。
下列是一些清單範例。
值 | 類型 |
---|---|
{123, true, "A"} | 包含數字、邏輯和文字的清單。 |
{1, 2, 3} | 數字清單 |
{ {1, 2, 3}, {4, 5, 6} } |
數字清單的清單 |
{ [CustomerID = 1, Name = "Bob", Phone = "123-4567"], [CustomerID = 2, Name = "Jim", Phone = "987-6543"] } |
記錄清單 |
{123, true, "A"}{0} | 取得清單中第一個項目的值。 這個運算式會傳回值 123。 |
{ {1, 2, 3}, {4, 5, 6} }{0}{1} |
從第一個清單項目取得第二個項目的值。 這個運算式會傳回值 2。 |
記錄
記錄是一組欄位。 欄位是一種名稱值對,其中名稱是欄位記錄中唯一的文字值。 記錄值語法允許在不使用引號的情況下撰寫名稱,此形式也稱為識別項。 識別項可以採用下列兩種形式:
identifier_name,例如 OrderID。
#"識別項名稱",例如 #"Today's data is: "。
下列是一筆記錄,其包含名為 "OrderID"、"CustomerID"、"Item" 和 "Price" 的欄位,其值則分別為 1、1、"Fishing rod" 和 "100.00"。 方括弧字元 [ ] 則表示記錄運算式的開頭和結尾,並會用來從記錄取得欄位值。 下列範例會顯示記錄及如何取得 Item 欄位值。
以下為範例記錄:
let Source =
[
OrderID = 1,
CustomerID = 1,
Item = "Fishing rod",
Price = 100.00
]
in Source
若要取得 Item 的值,您可以使用方括弧,例如 Source[Item]
:
let Source =
[
OrderID = 1,
CustomerID = 1,
Item = "Fishing rod",
Price = 100.00
]
in Source[Item] //equals "Fishing rod"
Table
資料表是一組整理為具名資料行和資料列的值。 資料行類型可以是隱含或明確。 您可以使用 #table 來建立資料行名稱清單和資料列清單。 值的資料表是在一個清單中的清單。 大括弧字元 { } 也可以用來透過索引位置,從資料表擷取資料列 (請移至範例 3 ‒ 透過索引位置從資料表取得資料列)。
範例 1 - 使用隱含資料行類型建立資料表
let
Source = #table(
{"OrderID", "CustomerID", "Item", "Price"},
{
{1, 1, "Fishing rod", 100.00},
{2, 1, "1 lb. worms", 5.00}
})
in
Source
範例 2 ‒ 使用明確資料行類型建立資料表
let
Source = #table(
type table [OrderID = number, CustomerID = number, Item = text, Price = number],
{
{1, 1, "Fishing rod", 100.00},
{2, 1, "1 lb. worms", 5.00}
}
)
in
Source
之前的兩個範例都會建立包含下列圖形的資料表:
OrderID | CustomerID | 項目 | 價格 |
---|---|---|---|
1 | 1 | Fishing rod | 100.00 |
2 | 1 | 1 lb. worms | 5.00 |
範例 3 ‒ 透過索引位置從資料表取得資料列
let
Source = #table(
type table [OrderID = number, CustomerID = number, Item = text, Price = number],
{
{1, 1, "Fishing rod", 100.00},
{2, 1, "1 lb. worms", 5.00}
}
)
in
Source{1}
這個運算式會傳回下列記錄:
欄位 | 值 |
---|---|
OrderID | 2 |
CustomerID | 1 |
項目 | 1 lb. worms |
Price | 5 |
其他結構化資料範例
結構化資料可以包含任何 M 值。 以下列出一些範例:
範例 1 - 包含 [Primitive](#_Primitive_value_1) 值、[Function](#_Function_value) 和 [Record](#_Record_value) 的清單
let
Source =
{
1,
"Bob",
DateTime.ToText(DateTime.LocalNow(), "yyyy-MM-dd"),
[OrderID = 1, CustomerID = 1, Item = "Fishing rod", Price = 100.0]
}
in
Source
評估此運算式的方式可以視覺化如下:
範例 2 - 包含基本值和巢狀記錄的記錄
let
Source = [CustomerID = 1, Name = "Bob", Phone = "123-4567", Orders =
{
[OrderID = 1, CustomerID = 1, Item = "Fishing rod", Price = 100.0],
[OrderID = 2, CustomerID = 1, Item = "1 lb. worms", Price = 5.0]
}]
in
Source
評估此運算式的方式可以視覺化如下:
注意
雖然許多值都可以直接在字面上撰寫成運算式,但值不是運算式。 例如,運算式 1 會評估為值 1,運算式 1+1 則會評估為值 2。 這種差異很輕微,但很重要。 運算式是評估的配方;值則是評估的結果。
If 運算式
if 運算式會根據邏輯條件,在兩個運算式之間進行選取。 例如:
if 2 > 1 then
2 + 2
else
1 + 1
若邏輯運算式 (2 > 1) 為 true,則會選取第一個運算式 (2 + 2);若為 false,則會選取第二個運算式 (1 + 1)。 選取的運算式 (在此案例中為 2 + 2) 會進行評估,並成為 if 運算式的結果 (4)。