Delen via


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

Diagram van een tabel waarmee de expressie wordt gevisualiseerd met een primitieve waarde, een functie en een record.

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:

Diagram van een tabel waarmee de expressie wordt gevisualiseerd met verschillende primitieve waarden en geneste records.

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