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:

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:

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