Wer Adressdaten erfasst, nutzt oder verwaltet, kennt das Phänomen: Straßennamen enden mit „str.“ oder „strasse“ oder „-Str.“. Das ist ein Hindernis, wenn Adressen auf Duplikate überprüft werden müssen. Noch gravierender wird es, wenn mehrere Listen mit Adressdaten in ein CRM- oder ERP-System zu importieren sind. Spätestens dann erweist sich die konsistente Schreibweise von Straßennamen als unerlässlich. Denn die Daten müssen abgeglichen und Duplikate vermieden werden. Mit Hilfe von Power Query lässt sich die Genauigkeit und Zuverlässigkeit der Adressdaten sicherstellen. Die Anweisung List.Accumulate sowie Mapping spielen hierbei die Hauptrollen. Das sind die Schritte:
Schritt 1: Eine Mapping-Tabelle anlegen
In der folgenden Tabelle namens tblAdressen soll die Schreibweise der Straßennamen vereinheitlicht werden, damit die Adressdaten in anderen Systemen fehlerfrei weiterverarbeitet werden können.
Die Spalte Straße weist mehr als eine Ungereimtheit auf. Ersetzt werden sollen:
- »str.« durch »straße«,
- »strasse« durch »straße«,
- »-Str.« durch »-Straße«
Für den Fall, dass später weitere abweichende Schreibweisen auftauchen, lege ich eine Mapping-Tabelle an. In ihr kann ich bei Bedarf noch neue Varianten ergänzen, bin also flexibel. Die Tabelle bekommt den Namen Mapping und hat die beiden Spalten Alt und Neu.
TIPP: Wer mehr zur korrekten Schreibweise von Straßennamen erfahren möchte, wird hier fündig:
https://www.duden.de/sprachwissen/rechtschreibregeln/strassennamen
https://www.sekada.de/din-5008/din-lexikon-a-z/artikel/12-tipps-um-strassennamen-immer-korrekt-nach-din5008-zu-schreiben/
Schritt 2: Beide Tabellen in Power Query einlesen und bearbeiten
- Ich klicke in die Tabelle Mapping und wähle die Befehlsfolge Daten > Aus Tabelle/Bereich.
- Im Power Query-Editor ändere ich die Datentypen beider Spalten auf Text.
- Dann wähle ich Start > Schließen & Laden in … Nur Verbindung erstellen.
- Als nächstes setze ich den Cursor in die Tabelle tblAdressen und wähle wiederum Daten > Aus Tabelle/Bereich.
- Den Abfragenamen ändere ich um in Adressen.
Nun erstelle ich eine neue benutzerdefinierte Spalte, in der alle in der Tabelle Mapping hinterlegten Ersetzungsvarianten durchgespielt werden.
- Dazu wähle ich Spalte hinzufügen > Benutzerdefinierte Spalte.
- Ich benenne die Spalte Straße NEU und füge dann folgenden M-Code ein:
=List.Accumulate( List.Numbers(0, Table.RowCount(Mapping)),
[Straße],
(Ausgangstext, Zeilennummer) =>
Text.Replace(Ausgangstext, Mapping[Alt]{Zeilennummer}, Mapping[Neu]{Zeilennummer}))
Hinweis: Die Zeichenfolge »Straße« muss durch den jeweiligen Spaltennamen ersetzt werden.
- Anschließend ändere ich noch die Abfolge der Spalten, in dem ich die Spalte Straße NEU gleich rechts neben Straße ziehe.
Ausblick für alle, die mehr wissen wollen
Wer sich nicht nur für die Lösung, sondern auch für deren Funktionsweise interessiert, erfährt das im nächsten Power-Query-Rezept. Dort erkläre ich, wie aus der Anweisung Text.Replace() eine Funktion entsteht und wie List.Accumulate mit dieser Funktion arbeitet.