In meinem Blogbeitrag vom 22. März 2023 habe ich List.Accumulate benutzt, um automatisiert die Ersetzungen vornehmen zu lassen, die für die einheitliche Schreibweise von Straßennamen erforderlich sind.
Genau das ist der Kern von List.Accumulate. Diese Power Query-Funktion erlaubt es, eine Aktion über eine Liste von Werten mehrfach auszuführen – wie eine Schleife in der Programmierung.
List.Accumulate gehört zu den komplexeren Funktionen von Power Query. Wie sie arbeitet, zeige ich an einem einfachen Beispiel: Ergebnisse beim Würfeln werden mit List.Accumulate summiert.
Der Aufbau von List.Accumulate
List.Accumulate hat drei Argumente:
- eine Liste mit Werten,
- einen Startwert und
- eine Anweisung in Form einer Funktion.
Wozu wird hier eine Funktion benötigt und was ist eine Funktion?
- Funktionen werden benötigt, um Schritte wiederzuverwenden.
- Wie hier in List.Accumulate soll eine Anweisung mehrfach ausgeführt werden, aber mit jeweils anderen Parametern.
- Die Parameter werden in Klammern der Anweisung vorangestellt und innerhalb der Anweisung verarbeitet.
Funktionsweise von List.Accumulate anhand eines einfachen Beispiels mit Würfeln
Im Beispiel der Würfelergebnisse sieht die Arbeit von List.Accumulate wie folgt aus:
Erster Durchlauf:
Die Funktion wird mit dem Startwert 0 als Gesamt und dem ersten Listeneintrag – hier 2 – als Aktuell aufgerufen.
Das Ergebnis ist 0 + 2 = 2.
Die 2 dient als Startwert für den zweiten Durchlauf.
Zweiter Durchlauf:
Gesamt: 2, Aktuell: 4; das Ergebnis ist 2 + 4 = 6.
Dritter Durchlauf:
Gesamt: 6, Aktuell: 1; das Ergebnis ist 6 + 1 = 7.
Das Ganze endet dann nach mehreren Durchläufen mit dem letzten Listenelement.
Gesamt: 20 ist dann das Ergebnis von List.Accumulate.
List.Accumulate beim Vereinheitlichen der Schreibweise von Straßennamen
Beim Bereinigen der Straßennamen habe ich List.Accumulate nicht zum Summieren, sondern zum Ersetzen verwendet. Dazu habe ich verschiedene Ersetzungstexte in einer Mapping-Tabelle hinterlegt. Diese Mapping-Tabelle durchläuft List.Accumulate zeilenweise für jeden Straßennamen und stößt einen möglichen Ersetzungsprozess an.
Wie die Mapping-Tabelle aufgebaut ist und welche Ergebnisse List.Accumulate liefert, ist in meinem Beitrag vom 22. März 2023 nachzulesen.