Model oceny

Model oceny języka formuł Power Query M jest modelowany po modelu oceny często spotykanym w arkuszach kalkulacyjnych, gdzie kolejność obliczeń można określić na podstawie zależności między formułami w komórkach.

Jeśli formuły zostały napisane w arkuszu kalkulacyjnym, takim jak program Excel, możesz rozpoznać formuły po lewej stronie, co spowoduje, że wartości po prawej stronie zostaną obliczone:

Evaluation Model 1

Evaluation Model 2

W języku M wyrażenie może odwoływać się do poprzednich wyrażeń według nazwy, a proces oceny automatycznie określi kolejność, w jakiej są obliczane przywoływane wyrażenia.

Użyjmy rekordu, aby utworzyć wyrażenie, które jest równoważne z powyższym przykładem arkusza kalkulacyjnego. Podczas inicjowania wartości pola należy odwołać się do innych pól w rekordzie według nazwy pola w następujący sposób:

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

Powyższe wyrażenie daje w wyniku następujący rekord:

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

Rekordy mogą być zawarte w innych rekordach lub zagnieżdżone. Aby uzyskać dostęp do pól rekordu według nazwy, możesz użyć operatora wyszukiwania ([ ]). Na przykład następujący rekord zawiera pole o nazwie Sales zawierające rekord, a pole o nazwie Total (Suma), które uzyskuje dostęp do pól FirstHalf i SecondHalf rekordu Sales:

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

Powyższe wyrażenie daje w wyniku następujący rekord:

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

Operator indeksu pozycyjnego ({ }) służy do uzyskiwania dostępu do elementu na liście według jego indeksu liczbowego. Wartości na liście są określane przy użyciu indeksu opartego na zerach od początku listy. Na przykład indeksy 0 i 1 są używane do odwołowania się do pierwszych i drugich elementów na poniższej liście:

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

Leniwa i chętna ocena

Wyrażenia składowe list, rekordów i tabel, a także wyrażenia let (Przejdź do wyrażeń, wartości i wyrażenia let) są oceniane przy użyciu z opóźnieniem oceny. Oznacza to, że są one oceniane w razie potrzeby. Wszystkie inne wyrażenia są oceniane przy użyciu wyczekiwanej oceny. Oznacza to, że są one oceniane natychmiast po napotkaniu podczas procesu oceny. Dobrym sposobem, aby pomyśleć o tym, jest pamiętanie, że ocena wyrażenia listy lub rekordu zwróci listę lub wartość rekordu, która wie, w jaki sposób jego elementy listy lub pola rekordu muszą być obliczane po żądaniu (według operatorów wyszukiwania lub indeksu).