Auswertungsmodell

Das Auswertungsmodell der Power Query M-Formelsprache ist nach dem in Tabellenkalkulationen üblichen Auswertungsmodell aufgebaut, bei dem die Reihenfolge der Berechnungen anhand von Abhängigkeiten zwischen den Formeln in den Zellen bestimmt werden kann.

Wenn Sie Formeln in eine Kalkulationstabelle wie Excel geschrieben haben, können Sie erkennen, dass die Formeln auf der linken Seite bei der Berechnung zu den Werten auf der rechten Seite führen:

Evaluation Model 1

Evaluation Model 2

In M kann ein Ausdruck mit einem Namen auf frühere Ausdrücke verweisen, und der Auswertungsprozess bestimmt automatisch die Reihenfolge, in der die referenzierten Ausdrücke berechnet werden.

Wir verwenden einen Datensatz, um einen Ausdruck zu erstellen, der dem obigen Tabellenbeispiel entspricht. Bei der Initialisierung des Wertes eines Feldes verweisen Sie wie folgt mit dem Namen auf andere Felder innerhalb des Datensatzes:

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

Der obige Ausdruck wird in den folgenden Datensatz ausgewertet:

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

Datensätze können innerhalb anderer Datensätze enthalten, oder in ihnen geschachtelt sein. Sie können den Suche-Operator ([ ]) verwenden, um über den Namen auf die Felder eines Datensatzes zuzugreifen. Der folgende Datensatz enthält beispielsweise ein Feld mit dem Namen „Sales“, das einen Datensatz enthält, und ein Feld mit dem Namen „Total“, das auf die Felder „FirstHalf“ und „SecondHalf“ des Datensatzes „Sales“ zugreift:

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

Der obige Ausdruck wird in den folgenden Datensatz ausgewertet:

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

Sie können den Positionsindex-Operator ({ }) verwenden, um auf ein Element in einer Liste nach dem numerischen Index zuzugreifen. Auf die Werte in einer Liste wird mit einem nullbasierten Index am Anfang der Liste verwiesen. Beispielsweise werden die Indizes 0 und 1 verwendet, um auf die ersten und zweiten Elemente in der Liste unten zu verweisen:

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

Verzögerte und sofortige Auswertung

Die Auswertung von List-, Record- und Table-Elementausdrücken sowie von let-Ausdrücken (siehe Ausdrücke, Werte und der let-Ausdruck) erfolgt anhand der verzögerten Auswertung. Das heißt, sie werden bei Bedarf ausgewertet. Alle anderen Ausdrücke werden mit sofortiger Auswertung ausgewertet. Das heißt, sie werden sofort ausgewertet, wenn sie im Auswertungsprozess auftreten. Sie können sich das so vorstellen: Durch das Auswerten eines Listen- oder Datensatzausdrucks wird eine Liste oder ein Datensatzwert zurückgegeben, der bzw. dem bekannt ist, wie seine Listenelemente oder Datensatzfelder bei Bedarf berechnet werden müssen (durch Suche- oder Indexoperatoren).