Udostępnij za pośrednictwem


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ą źródłową, która jest równa wartości Text.Proper i zwraca wartość tekstową we właściwym 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:

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