Delen via


Evaluatiemodel

Het evaluatiemodel van de Power Query M-formuletaal wordt gemodelleerd na het evaluatiemodel dat vaak wordt gevonden in spreadsheets, waarbij de volgorde van berekeningen kan worden bepaald op basis van afhankelijkheden tussen de formules in de cellen.

Als u formules hebt geschreven in een spreadsheet zoals Excel, worden de formules aan de linkerkant mogelijk herkend in de waarden aan de rechterkant wanneer deze worden berekend:

Evaluation Model 1

Evaluation Model 2

In M kan een expressie verwijzen naar eerdere expressies op naam en het evaluatieproces bepaalt automatisch de volgorde waarin naar expressies wordt verwezen.

Laten we een record gebruiken om een expressie te produceren die gelijk is aan het bovenstaande spreadsheetvoorbeeld. Wanneer u de waarde van een veld initialiseert, verwijst u als volgt naar andere velden in de record door de naam van het veld:

[
    A1 = A2 * 2,
    A2 = A3 + 1,
    A3 = 1
]

De bovenstaande expressie evalueert naar de volgende record:

[
    A1 = 4,
    A2 = 2,
    A3 = 1
]

Records kunnen worden opgenomen in, of genest, binnen andere records. U kunt de opzoekoperator ([ ]) gebruiken om toegang te krijgen tot de velden van een record op naam. De volgende record heeft bijvoorbeeld een veld met de naam Verkoop met een record en een veld met de naam Totaal dat toegang heeft tot de velden FirstHalf en SecondHalf van de record Sales:

[
    Sales = [ FirstHalf = 1000, SecondHalf = 1100 ],
    Total = Sales[FirstHalf] + Sales[SecondHalf]
]

De bovenstaande expressie evalueert naar de volgende record:

[
    Sales = [ FirstHalf = 1000, SecondHalf = 1100 ],
    Total = 2100
]

U gebruikt de operator voor de positionele index ({ }) om toegang te krijgen tot een item in een lijst met de bijbehorende numerieke index. De waarden in een lijst worden aangeduid met behulp van een op nul gebaseerde index vanaf het begin van de lijst. De indexen 0 en 1 worden bijvoorbeeld gebruikt om te verwijzen naar de eerste en tweede items in de onderstaande lijst:

[
    Sales =
        {
            [
                Year = 2007,
                FirstHalf = 1000,
                SecondHalf = 1100,
                Total = FirstHalf + SecondHalf // equals 2100
            ],
            [
                Year = 2008,
                FirstHalf = 1200,
                SecondHalf = 1300,
                Total = FirstHalf + SecondHalf // equals 2500
            ]
        },
    #"Total Sales" = Sales{0}[Total] + Sales{1}[Total] // equals 4600
]

Luie en gretige evaluatie

Lijst-, record- en tabellidexpressies , evenals expressies (Ga naar expressies, waarden en let-expressies), worden geëvalueerd met behulp van luie evaluatie. Dat wil gezegd, ze worden geëvalueerd wanneer dat nodig is. Alle andere expressies worden geëvalueerd met behulp van gretige evaluatie. Dat wil gezegd, ze worden onmiddellijk geëvalueerd wanneer ze tijdens het evaluatieproces worden aangetroffen. Een goede manier om hier rekening mee te houden is dat het evalueren van een lijst- of recordexpressie een lijst- of recordwaarde retourneert die weet hoe de lijstitems of recordvelden moeten worden berekend, wanneer dit wordt aangevraagd (door opzoek- of indexoperators).