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 source variabel som är lika med värdet för 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:
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:
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).