Wyrażenia, wartości i wyrażenie let
Zapytanie języka formuł Power Query M składa się z kroków wyrażeń formuł, które tworzą zapytanie mashupu. Wyrażenie formuły można ocenić (obliczone), dając wartość. Wyrażenie let hermetyzuje zestaw wartości, które mają być obliczane, przypisane nazwy, a następnie używane w kolejnym wyrażeniu, które następuje po instrukcji in . Na przykład wyrażenie let może zawierać zmienną Source, która jest równa wartości Text.Proper i zwraca wartość tekstową w odpowiednim przypadku.
Wyrażenie Let
let
Source = Text.Proper("hello world")
in
Source
W powyższym Text.Proper("hello world")
przykładzie wartość jest obliczana na wartość "Hello World"
.
W następnych sekcjach opisano typy wartości w języku.
Wartość pierwotna
Wartość pierwotna jest wartością jednoczęściową, taką jak liczba, wartość logiczna, tekstowa lub null. Wartość null może służyć do wskazywania braku jakichkolwiek danych.
Typ | Przykładowa wartość |
---|---|
Plik binarny | 00 00 00 02 // liczba punktów (2) |
Data | 5/23/2015 |
DateTime | 23.05.2015 12:00:00 |
DateTimeZone | 5/23/2015 12:00:00 -08:00 |
Czas trwania | 15:35:00 |
Wartość logiczna | true i false |
Null (zero) | null |
Liczba | 0, 1, -1, 1.5 i 2.3e-5 |
Text | "abc" |
Czas | 12:34:12 |
Wartość funkcji
Funkcja jest wartością, która po wywołaniu z argumentami generuje nową wartość. Funkcje są zapisywane przez wyświetlenie listy parametrów funkcji w nawiasach, a następnie symbol przechodzi do =>, a następnie wyrażenie definiujące funkcję. Aby na przykład utworzyć funkcję o nazwie MyFunction , która ma dwa parametry i wykonuje obliczenia na parametrze parameter1 i parametr2:
let
MyFunction = (parameter1, parameter2) => (parameter1 + parameter2) / 2
in
MyFunction
Wywołanie funkcji MyFunction zwraca wynik:
let
Source = MyFunction(2, 4)
in
Source
Ten kod generuje wartość 3.
Wartości danych ustrukturyzowanych
Język M obsługuje następujące wartości danych ustrukturyzowanych:
Uwaga
Dane ustrukturyzowane mogą zawierać dowolną wartość języka M. Aby wyświetlić kilka przykładów, przejdź do sekcji Dodatkowe przykłady danych strukturalnych.
List
Lista to uporządkowana od zera sekwencja wartości ujęta w nawiasy klamrowe { }. Znaki nawiasu klamrowego { } są również używane do pobierania elementu z listy według pozycji indeksu. Aby uzyskać więcej informacji, przejdź do pozycji Wartości listy.
Uwaga
Dodatek Power Query M obsługuje nieskończony rozmiar listy, ale jeśli lista jest zapisywana jako literał, lista ma stałą długość. Na przykład {1, 2, 3} ma stałą długość 3.
Poniżej przedstawiono kilka przykładów listy.
Wartość | Typ |
---|---|
{123, true, "A"} | Lista zawierająca liczbę, logiczną i tekstową. |
{1, 2, 3} | Lista liczb |
{ {1, 2, 3}, {4, 5, 6} } |
Lista liczb |
{ [CustomerID = 1, Name = "Bob", Phone = "123-4567"], [CustomerID = 2, Name = "Jim", Phone = "987-6543"] } |
Lista rekordów |
{123, true, "A"}{0} | Pobierz wartość pierwszego elementu na liście. To wyrażenie zwraca wartość 123. |
{ {1, 2, 3}, {4, 5, 6} }{0}{1} |
Pobierz wartość drugiego elementu z pierwszego elementu List. To wyrażenie zwraca wartość 2. |
Nagraj
Rekord jest zestawem pól. Pole to para nazwa/wartość, w której nazwa jest wartością tekstową unikatową w rekordzie pola. Składnia wartości rekordów umożliwia pisanie nazw bez cudzysłowów, formularz nazywany również identyfikatorami. Identyfikator może przyjmować następujące dwie formy:
identifier_name, takich jak OrderID.
#"nazwa identyfikatora", taka jak #"Dzisiejsze dane to: ".
Poniżej znajduje się rekord zawierający pola o nazwach "OrderID", "CustomerID", "Item" i "Price" z wartościami 1, 1, "Fishing rod" i 100.00. Znaki nawiasu klamrowego [ ] oznaczają początek i koniec wyrażenia rekordu i są używane do pobierania wartości pola z rekordu. W poniższych przykładach pokazano rekord i sposób uzyskiwania wartości pola Element.
Oto przykładowy rekord:
let Source =
[
OrderID = 1,
CustomerID = 1,
Item = "Fishing rod",
Price = 100.00
]
in Source
Aby uzyskać wartość elementu, należy użyć nawiasów kwadratowych jako Source[Item]
:
let Source =
[
OrderID = 1,
CustomerID = 1,
Item = "Fishing rod",
Price = 100.00
]
in Source[Item] //equals "Fishing rod"
Table
Tabela to zestaw wartości zorganizowanych w nazwane kolumny i wiersze. Typ kolumny może być niejawny lub jawny. Za pomocą #table można utworzyć listę nazw kolumn i listy wierszy. Tabela wartości jest listą na liście. Znaki nawiasu klamrowego { } są również używane do pobierania wiersza z tabeli według pozycji indeksu (przejdź do pozycji Przykład 3 — Pobierz wiersz z tabeli według pozycji indeksu).
Przykład 1 — tworzenie tabeli z niejawnymi typami kolumn
let
Source = #table(
{"OrderID", "CustomerID", "Item", "Price"},
{
{1, 1, "Fishing rod", 100.00},
{2, 1, "1 lb. worms", 5.00}
})
in
Source
Przykład 2 — tworzenie tabeli z jawnymi typami kolumn
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
Oba poprzednie przykłady tworzą tabelę o następującym kształcie:
OrderID | CustomerID (Identyfikator klienta) | Towar | Cena |
---|---|---|---|
1 | 1 | Wędka | 100.00 |
2 | 1 | 1lb. robaki | 5.00 |
Przykład 3 — pobieranie wiersza z tabeli według pozycji indeksu
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}
To wyrażenie zwraca następujący rekord:
Pole | Wartość |
---|---|
Identyfikator zamówienia | 2 |
Identyfikator klienta | 1 |
Produkt | 1lb. robaki |
Cena | 5 |
Dodatkowe przykłady danych ustrukturyzowanych
Dane ustrukturyzowane mogą zawierać dowolną wartość języka M. Oto kilka przykładów:
Przykład 1 — lista z wartościami [Primitive](#_Primitive_value_1), [Function](#_Function_value) i [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
Ocenianie tego wyrażenia można wizualizować jako:
Przykład 2 — rekord zawierający wartości pierwotne i zagnieżdżone rekordy
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
Ocenianie tego wyrażenia można wizualizować jako:
Uwaga
Chociaż wiele wartości można zapisywać dosłownie jako wyrażenie, wartość nie jest wyrażeniem. Na przykład wyrażenie 1 oblicza wartość 1; wyrażenie 1+1 oblicza wartość 2. To rozróżnienie jest subtelne, ale ważne. Wyrażenia to przepisy na ocenę; wartości to wyniki oceny.
Wyrażenie If
Wyrażenie if wybiera między dwoma wyrażeniami na podstawie warunku logicznego. Na przykład:
if 2 > 1 then
2 + 2
else
1 + 1
Pierwsze wyrażenie (2 + 2) jest zaznaczone, jeśli wyrażenie logiczne (2 > 1) ma wartość true, a drugie wyrażenie (1 + 1) jest zaznaczone, jeśli jest to fałsz. Wybrane wyrażenie (w tym przypadku 2 + 2) jest obliczane i staje się wynikiem wyrażenia if (4).