Quelle: https://www.herber.de/forum/messages/1994116.html
Stand: 17.10.2024 15:45
Bitte beachten Sie die hier beschriebene Besonderheit in Sachen des Herber-Forums.
Hier der Eröffnungsbeitrag aus dem Forum:
Hallo zusammen,
ich bekomme in einer PQ in einer Spalte die Datums mit dem Format „131123” was 13.11.2023 bedeutet.
Kann ich daraus mit Date.FromText ein Datum generieren?
Ich habe es mit
Date.FromText(„13112023”, [Format=„ddmyy”, Culture=„de-DE”])
probiert, was einen Fehler bringt.
Liegt es daran, dass das Jahr nur zweistellig ist?
Gruß Tommes
Nein, es liegt nicht daran, dass das Jahr nur aus den letzten 2 Ziffern gebildet werden soll… 😉 Und in der Muster-Formel (oben) bezieht sich der Fragesteller auf einen einstelligen Minuten- und nicht zweistelligen Monatswert!
Aber viele Wege führen nach Rom, zwei davon zeige ich hier auf. Die Voraussetzung ist allerdings, dass die Ziffernfolgen, welche das Datum darstellen sollen, in Power Query im Datenformat Text formatiert und garantiert 6‑stellig sind (also bei Tag und Monat mit eventuell führender Null).
Und ich gehe konsequent davon aus, dass in PQ der auszuwertende Text nicht per Hand in die Funktion eingegeben werden soll (wie im ersten Beitrag aufgeführt), sondern sinnvollerweise aus einer Spalte (hier: Spalte1) geholt wird.
In der Tabelle ist eine Spalte mit einer Formel erstellt worden und eine weitere mit einer selbst definierten Funktion (UDF, siehe zweiter Code-Block).
let
Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type text}}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Geänderter Typ", "Datum (Formel)", each #date(2000 + Number.From(Text.End([Spalte1],2)),
Number.From(Text.Middle([Spalte1],2,2)),
Number.From(Text.Start([Spalte1],2)))),
#"Aufgerufene benutzerdefinierte Funktion" = Table.AddColumn(#"Hinzugefügte benutzerdefinierte Spalte", "Datum (UDF)", each ZuDataum([Spalte1]))
in
#"Aufgerufene benutzerdefinierte Funktion"
Und hier die UDF:
(DatumText as text) as date => let T = Text.Start(DatumText, 2), M = Text.Middle(DatumText,2,2), J = Text.End(DatumText,2), Datum = Date.From(T & "." & M & "." & J) // // Alternativ meine Präferenz: // Datum = Date.From(Text.Combine({T, M, J}, ".")) in Datum
Benutzerdefinierte Funktionen werden prinzipiell wie die integrierten M-Funktionen verwendet. Mehr dazu: hier im Blog.
Und hier, beim Stichwort last but not least finden Sie noch einen Hinweis, wo und wie Sie Antworten auf eventuelle Fragen oder auch die ausgearbeitete Datei bekommen können. Grundlegendes zum Thema M-Code lesen Sie hier im Blog nach.