(Forum) PQ: Datum ohne Trennzeichen zu „echtes” Datum

Quelle:  https://www.herber.de/forum/messages/1994116.html
Stand: 17.10.2024 15:45

Bitte beacht­en Sie die hier beschriebene Beson­der­heit in Sachen des Her­ber-Forums.

Hier der Eröff­nungs­beitrag aus dem Forum:


Hal­lo zusam­men,

ich bekomme in ein­er PQ in ein­er Spalte die Datums mit dem For­mat „131123” was 13.11.2023 bedeutet.

Kann ich daraus mit Date.FromText ein Datum gener­ieren?
Ich habe es mit

Date.FromText(„13112023”, [Format=„ddmyy”, Culture=„de-DE”])

pro­biert, was einen Fehler bringt.

Liegt es daran, dass das Jahr nur zweis­tel­lig ist?

Gruß Tommes


Nein, es liegt nicht daran, dass das Jahr nur aus den let­zten 2 Zif­fern gebildet wer­den soll… 😉 Und in der Muster-Formel (oben) bezieht sich der Fragesteller auf einen einstel­li­gen Minuten- und nicht zweis­tel­li­gen Monatswert!

Aber viele Wege führen nach Rom, zwei davon zeige ich hier auf. Die Voraus­set­zung ist allerd­ings, dass die Zif­fer­n­fol­gen, welche das Datum darstellen sollen, in Pow­er Query im Daten­for­mat Text for­matiert und garantiert 6‑stellig sind (also bei Tag und Monat mit eventuell führen­der Null).

Und ich gehe kon­se­quent davon aus, dass in PQ der auszuw­er­tende Text nicht per Hand in die Funk­tion eingegeben wer­den soll (wie im ersten Beitrag aufge­führt), son­dern sin­nvoller­weise aus ein­er Spalte (hier: Spalte1) geholt wird.

In der Tabelle ist eine Spalte mit ein­er Formel erstellt wor­den und eine weit­ere mit ein­er selb­st definierten Funk­tion (UDF, siehe zweit­er 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 Funk­tio­nen wer­den prinzip­iell wie die inte­gri­erten M-Funk­tio­nen ver­wen­det. Mehr dazu: hier im Blog.


Und hier, beim Stich­wort last but not least find­en Sie noch einen Hin­weis, wo und wie Sie Antworten auf eventuelle Fra­gen oder auch die aus­gear­beit­ete Datei bekom­men kön­nen. Grundle­gen­des zum The­ma M-Code lesen Sie hier im Blog nach.

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