Vorab, Schleifen beeinflussen die Performance. Deshalb sollten sie nur dann eingesetzt werden, wenn es unumgänglich ist. Überall da, wo Dir PQ einen Parameter mit each anbietet
Bsp = Table.AddColumn(Quelle, „Neue Spalte“, each [Column1] * [Column1])
durchläuft PQ ja von Haus aus jede Zeile.
Zur Funktion selbst:
Die Funktion List.Generate ist vergleichbar mit for-Schleifen aus anderen Programmiersprachen.
Ihre Syntax:
List.Generate(initial as function, condition as function, next as function, optional selector as nullable function) as list
Die Funktion liefert als Rückgabewert eine Liste (as List)
Sie erwartet 3 Parameter garantiert + einen optionalen Parameter. Alle Parameterangaben, bis auf den jeweils letzten, müssen mit Komma beendet werden.
- initial ist der Startwert
im Bsp.: () => Startwert,
wobei der Startwert mit 0 initialisiert wurde - condition ist die Abbruchbedingung
im Bsp.: _< Maxwert,
wobei der Unterstrich als Platzhalter für den letzten, Wert von Startwert steht, der die next-Anweisung durchlaufen hat.
List.Generate wird solange ausgeführt, wie die Bedingung wahr ist.
und dieser muss < als der (mit 13 initialiserte Maxwert) sein - next gibt an, um welchen Wert der jeweils zuletzt iterierte Startwert erhöht/ermindert werden soll.
im Bsp.: _+2, (nach jedem Durchlauf um 2 erhöhen) - selector ist ein optionaler Parameter, der jedoch eine Funktion aufrufen muss!
im Bsp 2.: _*_ (sprich: aktueller Wert mal aktuellem Wert)
Beipiel 1 (ohne optionalem Parameter)

Erläuterung:
(initial): Beim 1. Durchlauf ist der Startwert 0.
(condition): Die Schleife wird solange ausgeführt, wie
die Bedingung (_< Maxwert – lies: aktueller Wert ist kleiner 13) wahr ist.
(next): Er wird bei jedem weiteren Durchlauf durch die Anweisung _+2
jeweils um 2 erhöht. (auch Verminderung ist möglich)
Die Ausgabe ist somit: 0, 2, 4, 6, 8, 10, 12

Beispiel 2 (mit optionalen viertem Funktionsparameter – _*_)

_*_ sieht vielleicht nicht aus wie eine Funktion, ist aber eine. _*_ bedeutet nichts anderes als: Multipliziere den aktuellen Wert (_) mit sich selbst,
oder anders ausgedrückt: aktueller Wert mal aktuellem Wert.
Jetzt erhalten wir eine ganz andere Ausgabe, nämlich:
0 * 0 = 0
2 * 2 = 4
4 * 4 = 16
6 * 6 = 36
8 * 8 = 64
10 * 10 = 100 und
12 * 12 = 144

Statt _*_ können wir auch jede andere beliebige Funktion übergeben, die etwas mit dem aktuellen Wert (_) in deren Parameter anfangen kann und deren Rückgabewert dann in der Liste gespeichert wird.
Beispiel 3 (Verwendung von Variablen und eine benutzdefinierte Funktion aufrufen)

Die Ausgabe:

Schreibe einen Kommentar