Dela via


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 Text.Proper("hello world") utvärderas 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.

Typ Exempelvärde
Binära 00 00 00 02 // antal punkter (2)
Datum 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

Anropa MyFunction returnerar 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. Om du vill se några exempel går du till 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. Mer information finns i Listvärden.

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 Typ
{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", Phone = "123-4567"],
    [CustomerID = 2, Name = "Jim", Phone = "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 fältvärdet 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 Source[Item]:

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

Register

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 föregående exempel skapar en tabell med följande form:

OrderID CustomerID Artikel Pris
1 1 Metspö 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
OrderID 2
CustomerID 1
Artikel 1 lb. maskar
Pris 5

Ytterligare strukturerade dataexempel

Strukturerade data kan innehålla valfritt M-värde. Nedan 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:

Diagram över en tabell som visualiserar uttrycket med ett primitivt värde, en funktion och en post.

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:

Diagram över en tabell som visualiserar uttrycket med flera primitiva värden och kapslade poster.

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