Soll in Power Query der Inhalt einer Spalte verändert werden, sind dafür auf der Registerkarte Transformieren verschiedene Befehle verfügbar. Allerdings gibt es dort keine Option, die unterschiedliche Werte einer vorhandenen Spalte durch einen bestimmten Wert oder durch nichts ersetzt. Viele behelfen sich dann, indem sie zuerst die gewünschten Werte in einer zusätzlich Hilfsspalte generieren und anschließend die Originalspalte löschen.
Doch solche Bereinigungsprozesse lassen sich mit Hilfe der Funktion Table.TransformColumns einfach erledigen – ohne jede Hilfsspalte.

Transformationen auf mehreren Spalten inklusive Typumwandlung sehr performant in nur einem Schritt durchführen
Angenommen, eine Liste enthält eine Spalte Status, deren Inhalte aus verschiedenen Vorsystemen stammen. Diese sind leider uneinheitlich gepflegt wie z. B. „offen“, „neu“, „in Bearbeitung“, „in Prüfung“ usw. und so nicht brauchbar. Die Spalte soll deshalb vollständig geleert oder mit „tbd.“ überschrieben werden, um den Status in einem späteren Verarbeitungsschritt neu zu belegen.
So geht’s …
Ich markiere die Spalte Status und wähle im Register Transformieren [1] einen typischen Transformationsschritt aus, beispielsweise unter Format [2] > Präfix hinzufügen [3]. Anschließend gebe ich beispielsweise den Präfix „X“ ein [4].

Ein Transformieren-Befehl wie Präfix hinzufügen erzeugt einen typischen Code mit der Funktion Table.TransformColumns
Auf diese Weise erhalte ich den nötigen M-Code zur Transformation der Spalte. In dieser Anweisung wird mit Hilfe des Wörtchens each für jede Zeile die danach folgende Anweisung ausgeführt. Mit dem Unterstrich _ wird auf den jeweiligen Wert zugegriffen und hier mit dem Buchstaben „X“ am Anfang verkettet.
Die Funktion Table.TransformColumns mit einer Anweisung zur Transformation der Spalte Status
Möchte ich die Spalte leeren oder mit einem bestimmten Text belegen, ersetze ich den Ausdruck „X“ & _ , der dem each folgt, mit dem Schlüsselwort null oder mit einem festen Text, beispielsweise „tbd.“ .

Jeder Wert in der Spalte Status wird mit null (also vollständig geleert) oder dem festen Text „tbd.“ belegt
Tipp: Um den Schritt nachvollziehen zu können, benenne ich den Schritt Präfix hinzugefügt rechts unter Angewendete Schritte beispielsweise um in Status bereinigt.
In diesem Fall sollen in der Spalte Status nicht alle Werte geändert werden, sondern nur bestimmte. Beispielsweise soll nur der Wert „neu“ in „tbd.“ geändert werden.
So gehe ich vor …
Wie in Szenario 1 benutze ich den erstellten M-Code und ersetze den Ausdruck „X“ & _ durch eine if-Anweisung: each if _ = „neu“ then „tbd.“ else _. Diese prüft, ob der aktuelle Wert (dargestellt durch Unterstrich _) gleich „neu“ ist und ersetzt in diesem Fall den Text durch „tbd.“. Andernfalls wird der aktuelle Wert (_) beibehalten.

Transformationsschritt wird mit einer if-Anweisung versehen, um nur bestimmte Werte zu ersetzen
Tipp: Diese Anweisung kann natürlich beliebig erweitert werden, beispielsweise durch Hinzufügen einer or-Anweisung: each if _ = „neu“ or _ = „offen“ then „tbd.“ else _
Die Spalte Datum wurde nicht immer korrekt gepflegt. An manchen Stellen befinden sich Texte in der Spalte. Bevor der Datentyp für diese Spalte geändert wird und dies zu Fehlern führen würde, wird sie mit einer Art wenn-Fehler-Funktion geprüft (try … otherwise).

Nicht korrekte Datumsangaben führen zu Fehlern bei der Umwandlung der Spalte in Datumsformat und sollen daher geleert werden
So gehe ich vor …
Wie in Szenario 1 benutze ich den erstellten M-Code. Diesmal ersetze ich den Spaltennamen von Status in Datum und den Ausdruck „X“ & _ durch each try Date.From(_) otherwise null. Mit Hilfe der try-Anweisung wird in diesem Fall geprüft, ob eine Umwandlung in ein Datum möglich ist. Falls nicht, wird der Eintrag geleert.
Zusätzlich kann mit der Transformationsanweisung auch gleich der passende Datentyp mitgegeben werden, in diesem Fall date.

Mit Hilfe der try-Anweisung wird eine Fehlerprüfung vorgenommen und fehlerhafte Daten werden mit der otherwise-Anweisung korrigiert
Sollen auf mehreren Spalten Transformationen vorgenommen werden, so ist auch dies in einem Schritt möglich. Die Funktion Table.TransformColumns erlaubt eine Liste mit Transformationsschritten, die jeweils in geschweiften Klammern und kommagetrennt gelistet werden. So können beispielsweise sowohl die Spalte Status als auch die Spalte Datum in einem Rutsch bereinigt werden.

Die Funktion Table.TransformColumns erlaubt eine Liste {..} von Transformationsschritten
Alle Szenarien lassen sich mit wenigen Handgriffen in einem Schritt mit Hilfe der Funktion Table.TransformColumns umsetzen. Dabei wird der bestehende Spalteninhalt gezielt ersetzt, ohne jegliche Hilfsspalte.
Zusatz-Tipp: Natürlich kann ich auch jederzeit einen benutzerdefinierten Schritt einfügen und mit folgendem Code jeden beliebigen Ersetzungsprozess ausführen.

Auch ohne einen Transformationsschritt über das Menüband auszuführen und abzuändern, lässt sich ein solcher Schritt über Klick auf das fx erstellen
Interessiert an weiteren Tipps zu Power Query?
Wer sein Wissen zu Power Query systematisch auf- und ausbauen will, kann dazu einen meiner Online-Kurse nutzen. Auf dieser Seite ist das aktuelle Angebot zu finden.
Kürzlich erhielt ich den Hilferuf einer Anwenderin, weil sie in Excel mit Power Query nicht auf die Daten in einer anderen Arbeitsmappe zugreifen konnte. Sie wurden im Navigator nicht angezeigt. Die Ursache war schnell gefunden: Die betreffende Tabelle mit den Rohdaten lag auf einem ausgeblendeten Arbeitsblatt.
Eigentlich war die Idee gut, das Blatt mit den Rohdaten auszublenden, damit sie nicht versehentlich geändert oder gelöscht werden. ABER: Standardmäßig zeigt Power Query beim Zugriff auf eine andere Arbeitsmappe ausgeblendete Blätter im Navigator-Fenster nicht an.
Muss jetzt das ausgeblendete Blatt erst eingeblendet werden, um es in Power Query auswerten zu können? Nein. Hier kommt eine Anleitung, mit der es trotzdem gelingt.

Nach dem Ausblenden wird das Blatt Rohdaten im Navigator von Power Query nicht angezeigt; auch auf die dort enthaltene Tabelle tbl_Umsatz kann nicht zugegriffen werden
Es sollte mal wieder schnell gehen und dabei bleib das Festlegen der Datentypen auf der Strecke. Doch spätestens beim nächsten Datenimport rächt sich das. Denn unsachgemäß eingestellte oder bei erneuten Importen nicht überprüfte Datentypen erhöhen das Risiko von Fehlern und Datenverfälschungen. Hier zwei typische Beispiele:
1) In der Abfrage wurden die Datentypen sauber definiert: der Spalte mit der Mengenangabe wurde Ganze Zahl zugewiesen. Beim Import der nächsten Monatsdaten enthält die Spalte mit den Mengenangaben plötzlich Werte mit Dezimalstellen. Die werden automatisch abgeschnitten, da Ganze Zahl eingestellt ist. Eine Verfälschung der Daten ist die Folge.
2) Für die Spalte Menge wurde Ganze Zahl festgelegt, aber beim nächsten Import stehen in der Spalte Menge solche Einträge wie 1 Kiste oder 1 Karton. Das hat Fehler zur Folge, die das Aktualisieren der Daten behindern.
Dies zeigt, dass die Kontrolle der Datentypen in zwei Schritten erfolgen muss: 1) beim Aufbau der Abfrage und 2) beim Import neuer Daten. WIE das geht, zeige ich in diesem Beitrag.
WeiterlesenKürzlich hatte ich im Kurs eine spannende Diskussion zum Entfernen von Spalten. Die Frage war: Was tun, wenn sich nach dem Entfernen mehrerer Spalten herausstellt, dass es eine zu viel war? Den Abfrageschritt löschen? Oder lässt der sich nachträglich noch bearbeiten?
Meine Antwort: „Kommt drauf an“! Nämlich darauf, WIE die Spalten entfernt wurden. Das klingt vielleicht ein wenig rätselhaft, aber keine Sorge, ich erkläre es gleich.
Was ergibt sich, wenn die Zahl 2,5 gerundet wird? Excel liefert mit der Funktion RUNDEN das Ergebnis 3, Power Query hingegen 2.
Der Grund dafür: In Power Query wird bei Werten genau in der Mitte zwischen zwei ganzen Zahlen standardmäßig auf die nächste gerade Zahl auf- oder abgerundet. Aus 2,5 wird somit 2, aus 1,5 wird ebenfalls 2.
Wie Power Query beim Runden tickt und wie es auf kaufmännisches Runden umgestellt werden kann, beschreibe ich in diesem Rezept.
Fehlende Werte – sog. null-Werte – sind oft der Grund, dass Berechnungen gar nicht oder nicht korrekt erfolgen können. In meinem Blogbeitrag Power Query: Falsche Ergebnisse bei leeren Zellen vermeiden habe ich erklärt, wie beim Addieren und Subtrahieren von Zahlen sichergestellt wird, dass auch Zellen mit null korrekt berechnet werden – in dem Fall mit Hilfe der Funktion List.Sum.
Im heutigen Blogbeitrag zeige ich, wie mit Hilfe des COALESCE-Operators ?? störende null-Werte auf einfache Art behandelt werden. Die vielfältige Verwendbarkeit des COALESCE-Operators demonstriere ich anhand von drei Beispielen: 1) Ermitteln des Saldos von Einnahmen und Ausgaben, 2) Berechnen eines rabattierten Betrags und 3) Auswerten von Messreihen.
Wer kennt das nicht: Bereits nach wenigen Tagen erinnert man sich kaum noch daran, warum ein bestimmter Schritt in eine Power Query-Abfrage eingebaut wurde oder wozu eine spezielle Hilfsabfrage dienen soll. Noch schlimmer: Jemand verlässt das Team und hinterlässt einen Dschungel unkommentierter Abfragen. Wie lässt sich jetzt der Ablauf von Abfragen herausfinden oder gar ändern?
Die Lösung heißt Dokumentation. Doch mal ehrlich: Wer macht das schon gern? Daher zeige ich hier drei Methoden, wie das möglichst mühelos gelingt.