Utvärderingsmodell

Utvärderingsmodellen för Power Query M-formelspråket modelleras efter den utvärderingsmodell som vanligtvis finns i kalkylblad, där beräkningsordningen kan fastställas baserat på beroenden mellan formler i cellerna.

Om du har skrivit formler i ett kalkylblad, till exempel Excel, kanske du känner igen formler till vänster resulterar i värdena till höger när de beräknas:

Evaluation Model 1

Evaluation Model 2

I M kan ett uttryck referera till tidigare uttryck efter namn, och utvärderingsprocessen avgör automatiskt i vilken ordning refererade uttryck beräknas.

Nu ska vi använda en post för att skapa ett uttryck som motsvarar kalkylbladsexemplet ovan. När du initierar värdet för ett fält refererar du till andra fält i posten med namnet på fältet enligt följande:

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

Uttrycket ovan utvärderas till följande post:

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

Poster kan finnas i, eller kapslas, i andra poster. Du kan använda uppslagsoperatorn ([ ]) för att komma åt fälten i en post efter namn. Följande post har till exempel ett fält med namnet Försäljning som innehåller en post och ett fält med namnet Total som kommer åt fälten FirstHalf och SecondHalf i försäljningsposten:

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

Uttrycket ovan utvärderas till följande post:

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

Du använder positionsindexoperatorn ({ }) för att komma åt ett objekt i en lista med dess numeriska index. Värdena i en lista refereras till med hjälp av ett nollbaserat index från början av listan. Indexen 0 och 1 används till exempel för att referera till de första och andra objekten i listan nedan:

[
    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
]

Lat och ivrig utvärdering

List- , post- och tabellmedlemsuttryck samt let-uttryck (Gå till uttryck, värden och let-uttryck) utvärderas med hjälp av lat utvärdering. Det vill sägs att de utvärderas när det behövs. Alla andra uttryck utvärderas med ivrig utvärdering. De utvärderas alltså omedelbart när de påträffas under utvärderingsprocessen. Ett bra sätt att tänka på detta är att komma ihåg att utvärdering av ett list- eller postuttryck returnerar ett list- eller postvärde som vet hur dess listobjekt eller postfält behöver beräknas när det begärs (av uppslags- eller indexoperatorer).