Udostępnij przez


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 tym przykładzie Text.Proper("hello world") jest obliczana wartość "Hello World".

W następnych sekcjach opisano typy wartości w języku.

Wartość pierwotna

Wartość pierwotna jest wartością jednoczęściową number, taką jak , logical, textlub 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
Tekst "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 jest parą 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
    ],
    GetItem = Source[Item] //equals "Fishing rod"
in
    GetItem

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:

Diagram tabeli, która wizualizuje wyrażenie z wartością pierwotną, funkcją i rekordem.

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:

Diagram tabeli, która wizualizuje wyrażenie z kilkoma wartościami pierwotnymi i zagnieżdżonych rekordów.

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).