PQ: Gemischtes Datum/Zeit-Format zu nur Datum

Kalendarische Daten mit Uhrzeit in einer Spalte in gemischtem Landesformat (DE und US) zu nur Datum (DE)

  Wis­sens­stand: Lev­el 1 ⇒ Ein­steiger in PQ, keine/kaum Erfahrung   

In einem Forum wurde von einem Fragesteller die Auf­gabe zur Diskus­sion gestellt, wie Datum- und Zeit-Ein­träge unter­schiedlich­er Gebi­ets­for­matierun­gen (hier: DE und US) in ein ein­heitlich­es For­mat als nur Datum im heimis­chen For­mat dargestellt wer­den kön­nen. Zum Zeit­punkt der Erstel­lung dieses Beitrages lag eine Lösung in VBA vor, die dur­chaus prak­tik­a­bel ist und in vie­len Fällen auch die erste Wahl sein kann. In manchen Unternehmen ist jedoch VBA/Makro aus guten Grün­den unter­sagt bzw. deak­tiviert. Da bietet es sich an, über Pow­er Query als Lösung nachzu­denken.

Ich habe die Text-basierte Auf­stel­lung in eine Excel-Tabelle über­tra­gen und als Basis für zwei mögliche Lösun­gen mit Pow­er Query ver­wen­det. Laden Sie dieses File hier herunter. Bei­de von mir vorgestell­ten Lösun­gen sind gle­ich­w­er­tig, weit­ere Ansätze sind natür­lich auch denkbar.

Begin­nen Sie damit, die Dat­en in eine „intel­li­gente” Tabelle/Liste zu for­matieren. Danach importieren Sie die Dat­en in den Pow­er Query-Edi­tor. Anschließend stellt sich das dann so dar:

Direkt nach dem Import

Der erste Arbeitss­chritt wird sein, die Dat­en der Spalte1 als Daten­typ: Text zu for­matieren. Als Ein­steiger wer­den sie gewiss im Reg­is­ter Home und Gruppe Trans­formieren den Daten­typ entsprechend ändern. Wenn Sie exper­i­men­tier­freudig sind, kön­nen Sie direkt nach dem Import die Bear­beitungszeile dahinge­hend ändern, dass sie das let­zte Argu­ment type any in type text (Klein­schrei­bung!) ändern. Das geht zwar nicht schneller, führt aber gewiss zum Gewinn neuer Erken­nt­nisse. 😉 

Möglichkeit 1

Um das Datum von der Uhrzeit zu tren­nen, gibt es (natür­lich) mehrere Möglichkeit­en. Auch in älteren Ver­sio­nen des Pow­er Query funk­tion­iert garantiert die Meth­ode, die Spalte nach Trennze­ichen zu teilen. Das funk­tion­iert, weil die Uhrzeit in jedem Falle durch ein Leerze­ichen vom Datum getren­nt ist. Gehen Sie also in der Gruppe Trans­formieren über Spalte teilen | Nach Trennze­ichen und wählen Sie statt des Vorschlages Dop­pelpunkt das Leerze­ichen. Anschließend löschen Sie (aus Grün­den der Über­sichtlichkeit) die abge­tren­nte Spalte mit der Uhrzeit. Ich sel­ber bin (in der Ver­sion 2019) fol­gen­den Weg gegan­gen: Trans­formieren | Textspalte | Extrahieren | Text vor Trennze­ichen und gebe im Textfeld Trennze­ichen über die Tas­tatur ein Leerze­ichen ein. Damit erre­iche ich, dass keine zusät­zliche Spalte mit der Uhrzeit gener­iert wird.

Eine direk­te Kon­vertierung dieser kalen­darischen Dat­en im gemis­cht­en Lan­des-For­mat (DE und US) ist nur in VBA möglich, meines Wis­sens nicht Pow­er Query. Mit ein­er Formel in ein­er benutzerdefinierten Spalte ist das aber gut mach­bar. Aktivieren Sie das Reg­is­ter Spalte hinzufü­gen und wählen Sie das Sym­bol Benutzerdefinierte Spalte. Es öffnet sich ein Dia­log-Fen­ster und dort tra­gen Sie die hier gezeigten Werte ein:

Diese Benutzerdefinierte Formel ist zielführend

Das ganze hier noch ein­mal in Textform: Bei Neuer Spal­tenname geben Sie als Über­schrift Datum ein. Und die Benutzerdefinierte Spal­tenformel sieht so aus:

= if Text.Contains([Spalte1], ".")
then Date.From([Spalte1])
else Date.From([Spalte1], "us-US")

Über­set­zt bedeutet das: Wenn der Wert der jew­eili­gen Zeile in Spalte1 einen Punkt enthält, dann soll der Wert aus Spalte1 direkt ver­wen­det wer­den, anson­sten eben­falls der Wert aus Spalte1, jedoch unter dem Aspekt, dass dieses Datum im US-For­mat vor­liegt.

Prinzip­iell ist damit das Ziel erre­icht. For­mal soll­ten jedoch noch zwei Schritte gegan­gen wer­den: Recht­sklick in die Spalte Datum und im Kon­textmenü Typ ändern | Datum und als prak­tisch let­zten Schritt wer­den Sie Spalte1 löschen; es wird ja nur das auf lokale Ver­hält­nisse angepasst Datum gebraucht. Schließen & laden oder Schließen & laden in…, um die Abfrage in ein Excel Arbeits­blatt zu spe­ich­ern.

▲ nach oben …

Möglichkeit 2

Diese Möglichkeit ist vielle­icht etwas „schlanker”, muss deswe­gen aber nicht bess­er sein. Sie wer­den die Dat­en natür­lich vom Excel-Arbeits­blatt in den Pow­er Query-Edi­tor importieren. Auch die Kon­vertierung dieser Spalte in den Daten­typ Text ist zum Vorge­hen der ersten Möglichkeit iden­tisch. Die Uhrzeit bleibt hier aber erhal­ten, obwohl das Ziel auch hier das reine Datum ist. Das wird in der fol­gen­den Formel bedacht.

Nun wer­den sie wieder eine Benutzerdefinierte Spalte erstellen und als Neuer Spal­tenname natür­lich wieder Datum schreiben. Die hier ver­wen­dete Formel stellt sich so dar:

= if Text.Contains([Spalte1], ".")
then DateTime.From([Spalte1])
else DateTime.From([Spalte1], "us-US")

Der eigentliche Unter­schied zur vorher aufgezeigten Formel ist, dass hier die Funk­tio­nen Date­Time und nicht Date ver­wen­det wurde. Und das Ergeb­nis ist naturgemäß auch vom Typ Datum und Zeit:

Die Rück­gabe der Formel ist vom Typ Datum und Zeit

Wech­sel zum Reg­is­ter Trans­formieren, Gruppe Aus Datum & Uhrzeit | Datum | Nur Datum oder Recht­sklick in die Über­schrift und dort Trans­formieren | Nur Datum. In jedem Fall hat die Ergeb­nis-Spalte bere­its den Daten­typ Datum, braucht nun also nicht mehr angepasst wer­den. Bleibt nur noch, die erste Spalte mit den Orig­i­nal-Dat­en zu löschen und diese Abfrage an der Wun­sch­po­si­tion zu spe­ich­ern.

▲ nach oben …

Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?

Dann würde ich mich über einen Beitrag Ihrer­seits z.B. 1,00€ bis 2,00€ freuen …

Dieser Beitrag wurde unter Datentyp anpassen, Datum & Zeit, Foren-Q&A, Ohne Makro/VBA, Power Query, PQ-Formeln (Sprache M), Spende/Donation, Text-Behandlung abgelegt und mit , , , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.