Expressies, waarden en let-expressie
Een Power Query M-formuletaalquery bestaat uit formule-expressiestappen waarmee een mashupquery wordt gemaakt. Een formule-expressie kan worden geëvalueerd (berekend), wat een waarde oplevert. Met de let-expressie wordt een set waarden ingekapseld die moeten worden berekend, toegewezen namen en vervolgens gebruikt in een volgende expressie die volgt op de in-instructie . Een let-expressie kan bijvoorbeeld een bronvariabele bevatten die gelijk is aan de waarde van Text.Proper en een tekstwaarde oplevert in het juiste geval.
Expressie toestaan
let
Source = Text.Proper("hello world")
in
Source
In het bovenstaande Text.Proper("hello world")
voorbeeld wordt geëvalueerd naar "Hello World"
.
In de volgende secties worden waardetypen in de taal beschreven.
Primitieve waarde
Een primitieve waarde is een enkele waarde, zoals een getal, logische waarde, tekst of null. Een null-waarde kan worden gebruikt om aan te geven dat er geen gegevens zijn.
Type | Voorbeeldwaarde |
---|---|
Binary | 00 00 00 02 // aantal punten (2) |
Datum | 5/23/2015 |
Datum en tijd | 23-5-2015 12:00:00 uur |
DateTimeZone | 23-5-2015 12:00:00 -08:00 |
Duur | 15:35:00 |
Logisch | waar en onwaar |
Null | Nul |
Aantal | 0, 1, -1, 1,5 en 2.3e-5 |
Sms verzenden | "abc" |
Tijd | 12:34:12 PM |
Functiewaarde
Een functie is een waarde die, wanneer deze wordt aangeroepen met argumenten, een nieuwe waarde produceert. Functies worden geschreven door de parameters van de functie tussen haakjes weer te geven, gevolgd door het gaat-naar-symbool =>, gevolgd door de expressie die de functie definieert. Als u bijvoorbeeld een functie met de naam MyFunction wilt maken die twee parameters heeft en een berekening uitvoert op parameter1 en parameter2:
let
MyFunction = (parameter1, parameter2) => (parameter1 + parameter2) / 2
in
MyFunction
Als u MyFunction aanroept, wordt het resultaat geretourneerd:
let
Source = MyFunction(2, 4)
in
Source
Deze code produceert de waarde 3.
Gestructureerde gegevenswaarden
De M-taal ondersteunt de volgende gestructureerde gegevenswaarden:
Notitie
Gestructureerde gegevens kunnen elke M-waarde bevatten. Als u een aantal voorbeelden wilt zien, gaat u naar Aanvullende gestructureerde gegevensvoorbeelden.
List
Een lijst is een geordende reeks waarden op basis van nul tussen accolades { }. De accolades { } worden ook gebruikt om een item op indexpositie op te halen uit een lijst. Ga naar Lijstwaarden voor meer informatie.
Notitie
Power Query M ondersteunt een oneindige lijstgrootte, maar als een lijst als letterlijk is geschreven, heeft de lijst een vaste lengte. {1, 2, 3} heeft bijvoorbeeld een vaste lengte van 3.
Hier volgen enkele lijstvoorbeelden.
Weergegeven als | Type |
---|---|
{123, true, "A"} | Lijst met een getal, een logische en tekst. |
{1, 2, 3} | Lijst met getallen |
{ {1, 2, 3}, {4, 5, 6} } |
Lijst met getallen |
{ [CustomerID = 1, Name = "Bob", Phone = "123-4567"], [CustomerID = 2, Name = "Jim", Phone = "987-6543"] } |
Lijst met records |
{123, true, "A"}{0} | Haal de waarde van het eerste item in een lijst op. Deze expressie retourneert de waarde 123. |
{ {1, 2, 3}, {4, 5, 6} }{0}{1} |
Haal de waarde van het tweede item op uit het eerste lijstelement. Deze expressie retourneert de waarde 2. |
Opnemen
Een record is een set velden. Een veld is een naam/waardepaar waarbij de naam een tekstwaarde is die uniek is binnen de record van het veld. Met de syntaxis voor recordwaarden kunnen de namen zonder aanhalingstekens worden geschreven, een formulier dat ook wel id's wordt genoemd. Een id kan de volgende twee vormen aannemen:
identifier_name zoals OrderID.
#"id-naam" zoals #"De gegevens van vandaag zijn: ".
Hier volgt een record met velden met de naam 'OrderID', 'CustomerID', 'Item' en 'Price' met de waarden 1, 1, 'Fishing rod' en 100,00. Vierkante accolades [ ] geven het begin en einde van een recordexpressie aan en worden gebruikt om een veldwaarde op te halen uit een record. In de volgende voorbeelden ziet u een record en hoe u de waarde van het veld Item opgeeft.
Hier volgt een voorbeeldrecord:
let Source =
[
OrderID = 1,
CustomerID = 1,
Item = "Fishing rod",
Price = 100.00
]
in Source
Als u de waarde van een item wilt ophalen, gebruikt u vierkante haken als Source[Item]
:
let Source =
[
OrderID = 1,
CustomerID = 1,
Item = "Fishing rod",
Price = 100.00
]
in Source[Item] //equals "Fishing rod"
Tabel
Een tabel is een set waarden die zijn ingedeeld in benoemde kolommen en rijen. Het kolomtype kan impliciet of expliciet zijn. U kunt #table gebruiken om een lijst met kolomnamen en een lijst met rijen te maken. Een tabel met waarden is een lijst in een lijst. De accolades { } worden ook gebruikt om een rij op indexpositie op te halen uit een rij (ga naar voorbeeld 3 : een rij ophalen uit een tabel op indexpositie).
Voorbeeld 1: een tabel maken met impliciete kolomtypen
let
Source = #table(
{"OrderID", "CustomerID", "Item", "Price"},
{
{1, 1, "Fishing rod", 100.00},
{2, 1, "1 lb. worms", 5.00}
})
in
Source
Voorbeeld 2: Een tabel maken met expliciete kolomtypen
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
In beide vorige voorbeelden wordt een tabel met de volgende vorm gemaakt:
OrderID | CustomerID | Artikel | Prijs |
---|---|---|---|
1 | 1 | Hengel | 100.00 |
2 | 1 | 1 lb. wormen | 5.00 |
Voorbeeld 3: Een rij ophalen uit een tabel op indexpositie
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}
Deze expressie retourneert de volgende record:
Veld | Weergegeven als |
---|---|
Order-id | 2 |
CustomerID | 1 |
Artikel | 1 lb. wormen |
Price | 5 |
Aanvullende voorbeelden van gestructureerde gegevens
Gestructureerde gegevens kunnen elke M-waarde bevatten. Hieronder volgen een aantal voorbeelden:
Voorbeeld 1: Lijst met [Primitieve](#_Primitive_value_1)-waarden, [Functie](#_Function_value) en [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
Het evalueren van deze expressie kan worden gevisualiseerd als:
Voorbeeld 2: Record met primitieve waarden en geneste records
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
Het evalueren van deze expressie kan worden gevisualiseerd als:
Notitie
Hoewel veel waarden letterlijk als een expressie kunnen worden geschreven, is een waarde geen expressie. De expressie 1 resulteert bijvoorbeeld in de waarde 1; de expressie 1+1 resulteert in de waarde 2. Dit onderscheid is subtiel, maar belangrijk. Expressies zijn recepten voor evaluatie; waarden zijn de resultaten van de evaluatie.
If-expressie
De if-expressie selecteert tussen twee expressies op basis van een logische voorwaarde. Voorbeeld:
if 2 > 1 then
2 + 2
else
1 + 1
De eerste expressie (2 + 2) wordt geselecteerd als de logische expressie (2 > 1) waar is en de tweede expressie (1 + 1) is geselecteerd als deze onwaar is. De geselecteerde expressie (in dit geval 2 + 2) wordt geëvalueerd en wordt het resultaat van de if-expressie (4).