Uttryck, värden och let-uttryck

En fråga i formelspråket Power Query M består av steg för formeluttryck 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 in-instruktionen. Ett let-uttryck kan till exempel innehålla en källvariabel som är lika med värdet för Text.Proper() och ger ett textvärde med rätt skiftläge.

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ärdetyperna i språket.

Primitivt värde

Ett primitivt värde är ett värde med en enskild del, till exempel tal, logik eller null. Ett null-värde kan användas för att indikera frånvaro av data.

Typ Exempelvärde
Binär 00 00 00 02 // antal punkter (2)
Date 2015-05-23
DateTime 2015-05-23 00:00:00
DateTimeZone 2015-05-23 00: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 24: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 visa 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  
  
Calling the MyFunction() returns the result:  
  
let  
    Source = MyFunction(2, 4)  
in  
    Source  

Den här koden ger värdet 3.

Strukturerade datavärden

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

Anteckning

Strukturerade data kan innehålla godtyckliga M-värden. Några exempel finns i Ytterligare exempel med strukturerade data.

Lista

En lista är en nollbaserad sorterad sekvens med värden inom klammerparenteser { }. Tecknen { } för klammerparenteser används även för att hämta ett objekt från en lista baserat på indexposition. Se [Listvärde](#_List_value).

Anteckning

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.

Här följer några exempel på listor.

Värde Typ
{123, true, "A"} Lista som innehåller ett tal, ett logiskt värde och text.
{1, 2, 3} Lista med tal
{
{1, 2, 3},
{4, 5, 6}
}
Lista med en lista med tal
{
[CustomerID = 1, Name = "Bob", Phone = "123-4567"],
[CustomerID = 2, Name = "Jim", Phone = "987-6543"]
}
Lista med poster
{123, true, "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 format som även kallas identifierare. En identifierare kan ha följande två format:

  • identifier_name, till exempel OrderID.

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

Följande är en post som innehåller fält med namnen "OrderID", "CustomerID", "Item" och "Price" med värdena 1, 1, "Fishing rod" respektive 100,00. Hakparenteser [ ] 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 exemplen nedan visas en post samt hur du hämtar värdet för fältet Item.

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 med värden som är 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 med rader. En tabell med värden är en lista i en lista. Klammerparenteser { } används också för att hämta en rad från en tabell baserat på indexposition (se Exempel 3 – Hämta en rad från en tabell baserat på 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 Objekt Pris
1 1 Fiskespö 100,00
2 1 1 lb. maskar 5,00

Exempel 3 – Hämta en rad från en tabell baserat på 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
OrderID 2
CustomerID 1
Objekt 1 lb. maskar
Pris 5

Ytterligare exempel med strukturerade data

Strukturerade data kan innehålla godtyckliga M-värden. Här är några exempel:

Exempel 1 – Lista med värdena [Primitive](#_Primitive_value_1), [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:

Listexempel 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:

Listexempel 2

Anteckning

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

If-uttryck

If-uttrycket väljer mellan två uttryck baserat på ett logiskt villkor. 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).