!ZEIT! – Zeiteingaben ohne Trennzeichen (2)

073827 in 07:38:27 als Zeit umwandeln, Teil 2

 

Den ersten Teil dieser Trilo­gie kön­nen Sie hier lesen.
Den drit­ten Teil dieser Trilo­gie kön­nen Sie hier lesen.

  Wis­sens­stand: Lev­el 2 ⇒ Solides Basiswis­sen in PQ, etwas Erfahrung   


Als Zahl, naturgemäß unterschiedliche Länge

In dieser Auf­gabe auf der Basis des Files Zeiten_2.xlsx  habe ich mich auf die Excel-Ver­sion der Dat­en beschränkt. Es sind die gle­ichen Werte wie in den vorheri­gen Übun­gen. Nur sind „natür­lich” alle führende Nullen durch Excel ent­fer­nt wor­den, denn der Daten­typ ist hier Zahl und nicht Text. Nach der For­matierung als Tabelle und dem Import in Pow­er Query stellt sich der Edi­tor so dar:

Gleiche Zeitangaben wie gehabt, nur als Zahl statt als Text

Gle­iche Zei­tangaben wie gehabt, nur als Zahl statt als Text

Das Ziel vor Augen, dass hier die gle­ichen „echt­en” Zeit­en gener­iert wer­den sollen wie in den vorheri­gen Übun­gen im ersten Teil sollte sie vielle­icht etwas nach­den­klich machen. Offen­sichtlich müssen ja je nach Länge der Zif­fer­n­folge keine (also 0) bis 3 bzw. 5 Nullen vor die dargestellte Zahl platziert wer­den, damit der Weg über das Teilen der Spalte erfol­gre­ich sein wird. Und genau so ist es auch.

Ver­suchen Sie gerne, wiederum die Zeile mit dem geän­derten Typ bei den angewen­de­ten Schrit­ten zu ent­fer­nen. Es nutzt nichts, die Zahlen bleiben im derzeit­i­gen For­mat und der aktuellen Länge. 😕

Der ein­fach­ste und wohl auch am ehesten zu ver­ste­hende Weg beste­ht darin, die Zahlen in Text umzuwan­deln und anschließend min­destens die benötigte Anzahl von Nullen davor zu schreiben. Und auch wenn es einige Schritte mehr sind als bei ein­er Formel-Lösung, das Ganze ist auch hier erfreulicher­weise in der GUI (in der grafis­chen Benutzer-Ober­fläche) mit eini­gen Mausklicks mach­bar.

Ändern Sie zu Beginn den Daten­typ der einzi­gen Spalte in Text, soweit noch nicht geschehen. Über­legen Sie, wie die max­i­male Anzahl von voranzustellen Nullen ist, unab­hängig von der jew­eili­gen Zahl in der Zelle. Ich denke wir sind uns einig, dass es max­i­mal 3 bzw. 5 Nullen sind um zum Ergeb­nis zu kom­men, damit 4 bzw. 6 Zeichen in der Spalte sein wer­den. Im Reg­is­ter Spalte hinzufü­gen wählen Sie in der Gruppe All­ge­mein das Sym­bol Benutzerdefinierte Spalte. Geben Sie im großen Textfeld Benutzerdefinierte Spal­tenformel nach dem bere­its einge­fügten und nicht zu löschen­den = diesen Text genau so ein: "00000":

Diese Formel füllt eine Spalte mit 5 Nullen

Diese Formel füllt eine Spalte mit 5 Nullen

In der ersten der bei­den Dateien wer­den Sie wahrschein­lich nur 3 Nullen ver­wen­den, aber selb­st wenn Sie hier die 5 Nullen eingeben ist das nicht schädlich oder gar falsch. Mehr dazu gle­ich. – Durch die bei­den äußeren mit eingegebe­nen Anführungsze­ichen " wird aus den 3 bzw. 5 Zif­fern ein Text und die schein­bar über­flüs­si­gen Nullen wer­den nicht automa­tisch gelöscht. Nach einem Klick auf OK wird eine neue Spalte erzeugt, wo auss­chließlich diese Zeichen­folge in voller Länge enthal­ten ist.

Jet­zt wer­den sie vielle­icht zu Recht sagen, dass das ja je nach Größe der Zahl zu viele Nullen sind. Richtig, aber das macht rein gar nichts. Klick­en Sie nun zuerst auf die Über­schrift Benutzerdefiniert und anschließend mit Strg oder Shift in die Über­schrift Zeit. Sie befind­en sich ja noch im Menü Spalte hinzufü­gen, hier in der Gruppe Aus Text ein Klick auf Spal­ten zusam­men­führen. Da sich Pow­er Query die Rei­hen­folge des Markierens der jew­eili­gen Spalte merkt, wer­den auch erst die Nullen und dann die Zahlen in ein­er neuen Spalte zusam­menge­führt. Aus­nahm­sweise respek­tiert es PQ, dass in der Spalte Zeit Zahlen und keine Texte ste­hen; in den meis­ten Fällen ist das nicht möglich. Das Ergeb­nis sieht nun so aus:

Die führenden Nullen und die Zahlen sind zusammengeführt

Die führen­den Nullen und die Zahlen sind zusam­menge­führt

Die Spalte Zusam­menge­führt enthält nun als Text jene Dat­en, die anschließend zu ein­er kor­rek­ten Uhrzeit umge­wan­delt wer­den sollen. In Excel wür­den sie nun mit der Formel =RECHTS(C2, 4) die 4 recht­en Zeichen der Zelle extrahieren. In Pow­er Query wech­seln Sie zum Reg­is­ter Start, markieren die Spalte Zusam­menge­führt und anschließend Spalte teilen. Wählen Sie Nach Anzahl von Zeichen und geben ‑wie  gehabt- eine 4 in das Textfeld ein. Allerd­ings aktivieren Sie jet­zt die Auswahl Ein­mal, so weit rechts wie möglich und erst danach OK. Löschen Sie den automa­tisch ange­fügten let­zten angewen­de­ten Schritt (Geän­dert­er Typ), und erin­nern Sie sich, dass sie genau diese Sit­u­a­tion, diese Darstel­lung vorher schon ein­mal hat­ten. Sie kön­nten also auch die Spalte Zusammengeführt.2 nach 2 Zeichen teilen und dann wieder über das Menü Trans­formieren zu ein­er einzi­gen Spalte mit dem Dop­pelpunkt als Trennze­ichen zusam­men­fü­gen.

Wieso eigentlich „kön­nten”? Das ist ein legit­imer Weg, der auch gut nachvol­lziehbar ist. Also tun Sie das. Das restliche Vorge­hen ken­nen Sie aus den ersten bei­den Übun­gen des vorheri­gen Beitrags. Bleibt nur noch eines: Markieren Sie die ersten 3 Spal­ten jew­eils durch einen Klick in die Über­schrift und löschen Sie die Spal­ten auf beliebige Weise. Damit ist das Ziel erre­icht.

In der Tabelle mit den Sekun­den (Tabelle2) wer­den sie erst ein­mal den gle­ichen Weg gehen, dieses Mal aber garantiert mit den 5 Nullen in der 2. Spalte. Dann wer­den sie wiederum die 6 let­zten Zeichen/Ziffern separi­eren, wenn auch auf eine andere Weise. Wech­seln Sie zum Reg­is­ter Trans­formieren und dort in der Gruppe Textspalte Extrahieren | Let­zte Zeichen und bei Anzahl geben Sie die 6 ein. Nach dem OK bleibt es bei 1 Spalte mit 6 Zif­fern. Klick­en Sie nun in die Über­schrift Zusam­menge­führt, dann F2 um dort Zeit als neue Über­schrift zu schreiben. Und belassen Sie es erst ein­mal dabei.

Und jet­zt stelle ich Ihnen ein Trick vor, den ein Helfer-Kol­lege aus einem Forum (danke Jörg) her­aus­ge­fun­den hat. Wech­seln Sie zum Reg­is­ter Trans­formieren, Gruppe Textspalte | For­mat | Bere­ini­gen. Sie sehen, dass sie nichts sehen. Weisen Sie diese Spalte nun den Daten­typ: Zeit zu. Bin­go! Ein­er aus mein­er Sicht tre­f­fliche Meth­ode, die auch mit kalen­darischen Dat­en funk­tion­iert (da hat­te es Jörg näm­lich gefun­den und erprobt).

Nun wer­den Sie in dieser Abfrage die ersten bei­den Spal­ten markieren und beispiel­sweise mit Entf löschen, in der Abfrage Tabelle1 markieren Sie die ersten 3 Spal­ten und nach einem Klick in eine der markierten Über­schriften bietet im Kon­text-Menü die Auswahl Spal­ten ent­fer­nen an.

▲ nach oben …

Wenige Schritte, aber „programmiert”

Für „nor­male” Anwen­der sind die bish­er gezeigten Wege gewiss gut geeignet. Cracks, die Formeln lieben oder für das Pro­gram­mieren schwär­men, wer­den an der Lösung in der Formel-Sprache „M” gewiss ihre Freude haben. Nehmen Sie zum nachvol­lziehen dieser Lösung gerne eine der bei­den unbear­beit­eten Excel-Arbeits­blät­ter als Grund­lage. Wie gehabt, als Tabelle for­matieren und in Pow­er Query importieren. Mein Ziel ist es, mit möglichst weni­gen Mausklicks in der grafis­chen Ober­fläche auszukom­men, sich also auf eine Formel zu konzen­tri­eren und damit das Ganze etwas „schlanker” zu gestal­ten. Ich selb­st ziehe es dabei aber vor, die Formel nicht auf ein unles­bares Maß zu schrumpfen son­dern lieber die eine oder andere Funk­tion mehr zu ver­wen­den und dafür auch später klar nachvol­lziehen zu kön­nen, was da warum geschehen ist. 💡 

Nach dem Import sieht Ihr Edi­tor ja so aus:

Gleiche Zeitangaben wie gehabt, nur als Zahl statt als Text

Gle­iche Zei­tangaben wie gehabt, nur als Zahl statt als Text

Reg­is­ter Spalte hinzufü­gen, Benutzerdefinierte Spalte. Als Neuer Spal­tenname kön­nen Sie gerne wieder Zeit eingeben. Ich werde jet­zt mit Ihnen schrit­tweise die Formel entwick­eln, begreifen ist hier aus mein­er Sicht wichtiger als (nur) abschreiben. Und ich werde auch Fehler aufzeigen, die ich in der Anfangszeit gemacht habe. Dann sehen Sie auch gle­ich, welch­er Ausweg in diesen Fällen sin­nvoll und hil­fre­ich ist.

Ich beginne damit, diesen Text in das Feld Benutzerdefinierte Spal­tenformel zu schreiben: = "00000" & [Zeit]. Den [Feld­na­men] füge ich per Dop­pelk­lick im recht­en Kas­ten (Ver­füg­bare Spal­ten) in die Formel ein. Da ja ganz unten neben einem grü­nen Häkchen ste­ht dass keine Syn­taxfehler erkan­nt wor­den ist, sollte ein Klick auf OK einen Erfolg zeit­i­gen. Naja, in jed­er Zeile der neuen Spalte ste­ht ein Wert. Nur nicht erwarte; 😕 hier ste­ht Error, also „Fehler”. Klick­en Sie auf das Error der Zeile 1 und ihnen wird eine Erk­lärung einge­blendet:

Die eingeblendete, "schlanke" Erklärung des Fehlers

Die einge­blendete, „schlanke” Erk­lärung des Fehlers

Als erstes wirk­lich alles lesen, denn ver­ste­hen ist sehr wichtig; und anschließend den zulet­zt einge­fügten angewen­de­ten Schritt (Zeit 1) im recht­en Seit­en­bere­ich löschen. Damit ist dann auch die Fehlerbeschrei­bung ver­schwun­den. Sie haben gele­sen, dass Pow­er Query nicht so ein­fach Zahlen­werte mit Tex­ten verbinden kann. Und Sie erin­nern sich, dass ich weit­er oben von ein­er Aus­nahme gesprochen hat­te, als Text und Zahl ver­bun­den wor­den sind. Darum Klick­en Sie auf das Zah­n­rad  im recht­en Seit­en­fen­ster bei Hinzuge­fügt Benutzerdefinierte … und sie befind­en sich wieder im Formel-Edi­tor. Als erstes werde ich den abgeän­derten Spal­tenna­men wieder auf Zeit ändern. Anschließend sorge ich per Formel dafür, dass der Inhalt der Spalte Zeit in einen Text umge­wan­delt wird. Ich ändere die Funk­tion nun so ab:
"00000" & Text.From([Zeit])

Alle Funk­tio­nen in Pow­er Query sind „case sen­si­tive”, die Groß- Klein­schrei­bung ist also exakt zu beacht­en! Und nach der Ergänzung der Formel sieht das Ergeb­nis schon erhe­blich bess­er aus. Kein Fehler, son­dern ähn­lich wie in der let­zten Auf­gabe eine lange Zif­fer­n­folge mit führen­den Nullen. Und diese Spalte muss nun noch geteilt bzw. gekürzt wer­den. Und die Über­schrift dieser Spalte ist Zeit.1, weil in ein­er Liste jede Über­schrift ein­ma­lig sein muss.

Wenn Sie (noch) nicht so firm sind, wer­den sie nun eine weit­ere Benutzerdefinierte Spalte erstellen, um diese Zif­fer­n­fol­gen auf 6 bzw. 4 Zeichen zu kürzen. Das würde dann in der Sprache M so gehen:
= Text.End([Zeit.1], 6)

… Wobei sie naturgemäß bei den Zeit­en ohne Sekun­den nach dem Kom­ma eine 4 statt der 6 ver­wen­den wür­den. Wenn Sie es nun genau wis­sen wollen, kön­nen Sie diesen Formel-Teil natür­lich auch die bish­erige Formel ein­bauen. Das würde sich dann so darstellen:
= Text.End("00000" & Text.From([Zeit]), 6)

… und sie sehen, selb­st das ist auch ganz über­sichtlich und kein „Band­wurm”. Jet­zt stellt sich die Frage, wie prag­ma­tisch sie sind, ob sie eventuell diese erar­beit­en Dat­en noch auf eine andere Weise weit­er­ver­ar­beit­en oder lieber doch mit eini­gen Mausklicks weit­er­ma­chen wollen. Diesen let­zt­ge­nan­nten Weg ken­nen Sie bere­its, der braucht nicht noch ein­mal disku­tiert zu wer­den. Sie teilen die Spalte nach gewün­schter Länge und löschen die über­flüs­sige Spalte links des gewün­scht­en Ergeb­niss­es oder Sie gehen den Weg über Trans­formieren, Textspalte | Extrahieren | Let­zte Zeichen, wo dann keine „über­flüs­sige” Spalte erzeugt wird.

Wenn Sie für weit­ere Fälle des Lebens mit Pow­er Query gewapp­net sein wollen und auch gerne exper­i­men­tieren, bietet sich eine Formel-Lösung auf diesem Wege an: Erst ein­mal natür­lich wieder eine neue Benutzerdefinierte Spalte (und wenn es zu Testzweck­en ist) und dann diese Formel:
= Time.FromText([Zeit.1])

Im Prinzip auch hier: kurz und knack­ig. Und trauen Sie sich nun zu, das Ganze in eine einzige Formel/Funktion zu pack­en? Ver­suchen Sie es gerne, sie kön­nen mit so ein­er Übung nur gewin­nen! 


Nur wenn Sie ganz wis­sens­durstig sind, hier Klick­en …
= Time.FromText(Text.End("00000" & Text.From([Zeit]), 6))

Wie gesagt, ein kleines Exper­i­ment. Und ich über­lasse es Ihnen, die Sinnhaftigkeit, den Hin­ter­grund zu erkun­den. So viel kann ich Ihnen hier aber schon ver­rat­en: Solch eine Formel werde ich sel­ten in der Real­ität ein­set­zen, für Anwen­der im Lern-Sta­di­um ist sie aus mein­er Sicht nicht trans­par­ent genug. Aber als Option biete ich das meinen Kun­den natür­lich an. Für Sie kann die Formel allerd­ings ein echt­es Bon­bon sein.

Und noch ein Hin­weis: Die Funk­tio­nen, welche hier in der Sprache M ver­wen­det wor­den sind, kön­nen Sie hier direkt an der Quelle nach­le­sen. Und wenn Sie Google Chrome als Brows­er ver­wen­den, dann wird der englis­che Text auch recht ordentlich über­set­zt. Auch wenn das Wort „table” ab und zu ein­mal zu „Tisch” statt „Tabelle” über­set­zt wird, wer der englis­chen Sprache nicht so ganz mächtig ist, kann hier eine gute Hil­festel­lung erfahren.

Den ersten Teil der Trilo­gie kön­nen Sie hier anse­hen und den drit­ten Teil find­en Sie hier im Blog.

▲ nach oben …

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

Dann würde ich mich über einen Beitrag Ihrer­seits freuen …

Dieser Beitrag wurde unter Datum & Zeit, Foren-Q&A, Power Query abgelegt und mit , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.