(Forum) PQ: Datum-Bereiche (sehr speziell) sortieren

Quelle:  https://www.clever-excel-forum.de/Thread-Sortierproblem–41296
Stand: 10.10.2024 19:00

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


Hal­lo, ich habe ein Prob­lem, ich hab jet­zt alles pro­biert, ich bekomme
es ein­fach nicht hin.

Mir hat jemand eine Liste vorgeben mit Datum­szeiträu­men

ich möchte das jet­zt sortieren, dass die Maß­gabe das linke Datum ist und dann der Rei­he nach erst 2024 dann weit­er mit 2025, jet­zt ist alles durcheinan­der

Danke für Euere Hil­fe

27.08.–31.08.2024
28.02.–10.03.2024
28.03.–01.04.2024
28.04.–06.052024
28.07.–03.08.2024
28.09.–11.10.2024
28.12.–02.01.2025
28.12.–02.01.2025
28.12.–07.01.2024
29.02.–05.03.2024
29.03.–01.04.2024
29.06.–07.07.2024
29.09.–04.10.2024
29.09.–05.10.2024
29.09.–05.10.2024
29.09.–06.10.2024
30.04.–07.05.2024
30.05.–08.06.2024
30.05.–12.06.2024
30.06.–06.07.2024
30.09.–09.10.2024
30.12.–02.01.2025
30.12.–02.01.2025
30.12.–02.01.2025
31.03.–07.04.2024
31.08.–14.09.2024

Ange­hängte Dateien
https://www.clever-excel-forum.de/attachment.php?aid=53572


Dass die Dat­en aus Spalte A keine kalen­darischen Dat­en son­dern Text sind, sollte für erfahrene User offen­sichtlich sein. Und dass ein Sortieren unter diesen Bedin­gun­gen nicht erfol­gsver­sprechend ist, bedarf kein­er Erk­lärung. Der IMHO sin­nvoll­ste Weg ist, den je­weiligen „von“ und „bis“-Wert in ein­er eige­nen Spalte darzustellen, welch­er dann auch als kor­rek­tes Datum for­matiert ist.

Hin­weis: Wenn im Laufe dein­er Lösungs­find­ung neue Forderun­gen aufgestellt wer­den oder sich die Aus­gangslage verän­dert, finde ich das bei zahlen­den Kun­den gar nicht schlimm, denn der Aufwand und damit die Bezahlung steigen. In Foren sollte sich ein Fragesteller gefäl­ligst umfänglich so viele Gedanken machen, dass die kosten­lose Hil­fe nicht immer wieder von vorn begin­nen muss. Ich halte mich hier im (kosten­losen Blog) stets an den Stand der Dinge, den ich zu Beginn mein­er Lösungs­find­ung erkenne.

Wie in fast allen Fällen erstelle ich in diesem Blog eine PQ-Lösung so, dass diese möglichst trans­par­ent ist und somit gut nachvol­l­zo­gen wer­den kann. Das kann in vie­len Fällen bedeuten, dass der eine oder andere Schritt mehr gegan­gen wird. „Who cares“ 😉 Mausklicks sind für User ein­fach­er und weniger fehlerträchtig als möglichst konzen­tri­ert­er Code. Hier nun der M‑Code:

let
    Quelle = Excel.CurrentWorkbook(){[Name="Tabelle2"]}[Content],
    #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type text}}),
    // Prinzipiell ist dieses dann das "von"-Datum, wenn auch ohne Jahreszahl
    #"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"Geänderter Typ", "Spalte1", Splitter.SplitTextByDelimiter("-", QuoteStyle.csv), {"Spalte1.1", "Spalte1.2"}),
    // Die Überschrift ist besser…
    #"Umbenannte Spalten" = Table.RenameColumns(#"Spalte nach Trennzeichen teilen",{{"Spalte1.2", "bis"}}),
    // Jetzt als korrektes Datum
    #"Geänderter Typ1" = Table.TransformColumnTypes(#"Umbenannte Spalten",{{"bis", type date}}),
    // Numerischer Wert, da bei jahresübergreifenden Zeiträumen 1 Jahr beim "von"-Wert subtrahiert werden muss
    #"Jahr eingefügt" = Table.AddColumn(#"Geänderter Typ1", "Jahr", each Date.Year([bis]), Int64.Type),
    #"Umbenannte Spalten1" = Table.RenameColumns(#"Jahr eingefügt",{{"Jahr", "numJahr"}}),
    // An Text (Spalte1.1)  kann nur Text angehänt werden
    #"Hinzugefügte benutzerdefinierte Spalte1" = Table.AddColumn(#"Umbenannte Spalten1", "txtJahr", each Text.From([numJahr])),
    // Gleich in das Datum-Format umwandeln und bei Bedarf 1 Hahr subtrahieren; Das Spaltenformat ist aber NICHT Datum!
    #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Hinzugefügte benutzerdefinierte Spalte1", "von", each if Date.From([Spalte1.1] & [txtJahr]) < [bis]
then Date.From([Spalte1.1] & [txtJahr])
else Date.From([Spalte1.1] & Number.ToText([numJahr]-1))),
    // Jetzt ein echtes Datum
    #"Extrahiertes Datum" = Table.TransformColumns(#"Hinzugefügte benutzerdefinierte Spalte",{}),
    // Reihenfolge der Markierung beachten!
    #"Andere entfernte Spalten" = Table.SelectColumns(#"Extrahiertes Datum",{"von", "bis"}),
    // Es sah nur nach dem Typ Datum aus … 😀
    #"Geänderter Typ2" = Table.TransformColumnTypes(#"Andere entfernte Spalten",{{"von", type date}}),
    // So habe ich den Fragesteller verstanden, eventuell jedoch die Spalte "bis" stattdessen sorteiern.
    #"Sortierte Zeilen" = Table.Sort(#"Geänderter Typ2",{{"von", Order.Ascending}})
in
    #"Sortierte Zeilen"

… und den Fehler in der Ergeb­nis-Abfrage Zeile 154 (vor dem Sortieren) soll­ten Sie in den Roh­dat­en, also der Excel-Tabelle (A155) beheben, der Aufwand in Pow­er Query wäre für diesen einen „Aus­rutsch­er“ gewiss zu hoch, wenn auch mach­bar!


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 Allgemein veröffentlicht. Setze ein Lesezeichen auf den Permalink.