Uttryck, värden och let-uttryck

En Power Query M-formelspråkfråga består av formeluttryckssteg som skapar en kombinationsfråga. Ett formeluttryck kan utvärderas (beräknas), vilket ger ett värde. Let-uttrycket kapslar in en uppsättning värden som ska beräknas, tilldelade namn och används sedan i ett efterföljande uttryck som följer i -instruktionen. Ett let-uttryck kan till exempel innehålla en källvariabel som är lika med värdet text.Proper() och ger ett textvärde i rätt fall.

Let-uttryck

let
    Source = Text.Proper("hello world")
in
    Source

I exemplet ovan utvärderas Text.Proper("hello world") till "Hello World".

I nästa avsnitt beskrivs värdetyper på språket.

Primitivt värde

Ett primitivt värde är endelsvärde, till exempel ett tal, logiskt, text eller null. Ett null-värde kan användas för att indikera att det inte finns några data.

Type Exempelvärde
Binära 00 00 00 02 // antal punkter (2)
Date 5/23/2015
Datum/tid 2015-05-23 12:00:00
DateTimeZone 2015-05-23 12:00:00-08:00
Varaktighet 15:35:00
Logiskt sant och falskt
Null null
Antal 0, 1, -1, 1,5 och 2,3e-5
Text "abc"
Tid 12:34:12

Funktionsvärde

En funktion är ett värde som, när den anropas med argument, genererar ett nytt värde. Funktioner skrivs genom att ange funktionens parametrar inom parenteser, följt av symbolen goes-to =>, följt av uttrycket som definierar funktionen. Om du till exempel vill skapa en funktion med namnet "MyFunction" som har två parametrar och utför en beräkning på parameter1 och parameter2:

let
    MyFunction = (parameter1, parameter2) => (parameter1 + parameter2) / 2
in
    MyFunction

Om du anropar MyFunction() returneras resultatet:

let
    Source = MyFunction(2, 4)
in
    Source

Den här koden genererar värdet 3.

Strukturerade datavärden

M-språket stöder följande strukturerade datavärden:

Kommentar

Strukturerade data kan innehålla valfritt M-värde. Ett par exempel finns i Ytterligare strukturerade dataexempel.

List

En lista är en nollbaserad ordnad sekvens med värden som omges av klammerparentestecken { }. Klammerparentestecken { } används också för att hämta ett objekt från en lista efter indexposition. Se [Listvärde](#_List_value).

Kommentar

Power Query M stöder en oändlig liststorlek, men om en lista skrivs som en literal har listan en fast längd. Till exempel har {1, 2, 3} en fast längd på 3.

Följande är några listexempel .

Värde Type
{123, sant, "A"} Lista som innehåller ett tal, en logisk och text.
{1, 2, 3} Lista över tal
{
    {1, 2, 3},
    {4, 5, 6}
}
Lista över lista med tal
{
    [CustomerID = 1, Name = "Bob", Telefon = "123-4567"],
    [CustomerID = 2, Name = "Jim", Telefon = "987-6543"]
}
Lista över poster
{123, sant, "A"}{0} Hämta värdet för det första objektet i en lista. Det här uttrycket returnerar värdet 123.
{
    {1, 2, 3},
    {4, 5, 6}
}{0}{1}
Hämta värdet för det andra objektet från det första listelementet. Det här uttrycket returnerar värdet 2.

Post

En post är en uppsättning fält. Ett fält är ett namn/värde-par där namnet är ett textvärde som är unikt i fältets post. Syntaxen för postvärden tillåter att namnen skrivs utan citattecken, ett formulär som även kallas identifierare. En identifierare kan ha följande två formulär:

  • identifier_name till exempel OrderID.

  • #"identifierarnamn" som #"Dagens data är: ".

Följande är en post som innehåller fälten "OrderID", "CustomerID", "Item" och "Price" med värdena 1, 1, "Fiskespö" och 100.00. Klammerparentestecken [ ] anger början och slutet av ett postuttryck och används för att hämta ett fältvärde från en post. I följande exempel visas en post och hur du hämtar värdet för fältet Objekt.

Här är en exempelpost:

let Source =
        [
              OrderID = 1,
              CustomerID = 1,
              Item = "Fishing rod",
              Price = 100.00
        ]
in Source

Om du vill hämta värdet för ett objekt använder du hakparenteser som Källa[Objekt]:

let Source =
    [
          OrderID = 1,
          CustomerID = 1,
          Item = "Fishing rod",
          Price = 100.00
    ]
in Source[Item] //equals "Fishing rod"

Tabell

En tabell är en uppsättning värden ordnade i namngivna kolumner och rader. Kolumntypen kan vara implicit eller explicit. Du kan använda #table för att skapa en lista med kolumnnamn och en lista över rader. En tabell med värden är en lista i en lista. Klammerparentestecken { } används också för att hämta en rad från en tabell efter indexposition (gå till Exempel 3 – Hämta en rad från en tabell efter indexposition).

Exempel 1 – Skapa en tabell med implicita kolumntyper

let
  Source = #table(
    {"OrderID", "CustomerID", "Item", "Price"},
      {
          {1, 1, "Fishing rod", 100.00},
          {2, 1, "1 lb. worms", 5.00}
      })
in
    Source

Exempel 2 – Skapa en tabell med explicita kolumntyper

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

Båda exemplen ovan skapar en tabell med följande form:

OrderID CustomerID Artikel Pris
1 1 Fiskespö 100.00
2 1 1 lb. maskar 5.00

Exempel 3 – Hämta en rad från en tabell efter indexposition

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}

Det här uttrycket returnerar följande post:

Fält Värde
Ordernr 2
Customerid 1
Artikel 1 lb. maskar
Pris 5

Ytterligare strukturerade dataexempel

Strukturerade data kan innehålla valfritt M-värde. Här följer några exempel:

Exempel 1 – Lista med [Primitive](#_Primitive_value_1) värden, [Function](#_Function_value) och [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

Utvärdering av det här uttrycket kan visualiseras som:

List Example 1

Exempel 2 – Post som innehåller primitiva värden och kapslade poster

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

Utvärdering av det här uttrycket kan visualiseras som:

List Example 2

Kommentar

Även om många värden kan skrivas bokstavligen som ett uttryck är ett värde inte ett uttryck. Till exempel utvärderas uttrycket 1 till värdet 1; uttrycket 1+1 utvärderas till värdet 2. Denna distinktion är subtil, men viktig. Uttryck är recept för utvärdering. värdena är resultatet av utvärderingen.

If-uttryck

If-uttrycket väljer mellan två uttryck baserat på ett logiskt villkor. Till exempel:

if 2 > 1 then
    2 + 2
else
    1 + 1

Det första uttrycket (2 + 2) väljs om det logiska uttrycket (2 > 1) är sant och det andra uttrycket (1 + 1) väljs om det är falskt. Det valda uttrycket (i det här fallet 2 + 2) utvärderas och blir resultatet av if-uttrycket (4).