Modello di valutazione

Il modello di valutazione del linguaggio delle formule M di Power Query è progettato sulla base del modello di valutazione comunemente presente nei fogli di calcolo, in cui l'ordine dei calcoli può essere determinato in base alle dipendenze tra le formule nelle celle.

Se sono state scritte formule in un foglio di calcolo, ad esempio Excel, è possibile riconoscere le formule a sinistra che dopo il calcolo consentiranno di ottenere i valori a destra:

Evaluation Model 1

Evaluation Model 2

In M un'espressione può fare riferimento a espressioni precedenti in base al nome e il processo di valutazione determina automaticamente l'ordine di calcolo delle espressioni a cui si fa riferimento.

Verrà ora usato un record per produrre un'espressione equivalente all'esempio del foglio di calcolo precedente. Quando si inizializza il valore di un campo, si fa riferimento ad altri campi all'interno del record in base al nome del campo, come indicato di seguito:

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

L'espressione precedente restituisce il record seguente:

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

I record possono essere contenuti in altri record, ovvero annidati. È possibile usare l'operatore di ricerca ([ ]) per accedere ai campi di un record in base al nome. Il record seguente, ad esempio, include un campo denominato Sales contenente un record e un campo denominato Total che accede ai campi FirstHalf e SecondHalf del record Sales:

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

L'espressione precedente restituisce il record seguente:

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

Per accedere a un elemento in un elenco in base al relativo indice numerico, usare l'operatore di indice posizionale ({ }). Ai valori all'interno di un elenco viene fatto riferimento usando un indice in base zero dall'inizio dell'elenco. Ad esempio, gli indici 0 e 1 vengono usati per fare riferimento al primo e al secondo elemento nell'elenco seguente:

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

Valutazione lazy e eager

Per le espressioni di membro List, Record e Table, così come le espressioni let (andare a Espressioni, valori ed espressione let), viene usata la valutazione lazy. Ovvero, vengono valutate all’occorrenza. Tutte le altre espressioni vengono valutate usando la valutazione eager. Ovvero, vengono valutate immediatamente quando vengono rilevate durante il processo di valutazione. Un modo efficace per tenere conto di questa differenza consiste nel ricordare che la valutazione di un'espressione elenco o record restituirà un valore di elenco o record che sa come devono essere calcolati gli elementi dell'elenco o i campi del record, quando richiesto (dagli operatori di ricerca o di indice).