(Forum) PQ: Spalten sortieren Spezial

Quelle:  https://www.herber.de/forum/messages/1994441.html
Stand: 22.10.2024 19:00

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


Hal­lo

ich wür­den gerne eine Tabelle nach Spal­ten sortieren, mit dem Datum Auf­steigend
https://www.herber.de/bbs/user/173086.xlsx

20.01.2023#E0001 18.01.2023#E0001 02.01.2023#E0002 18.01.2023#E0005 18.01.2023#E0006
17.01.2023#E0001 02.01.2023#E0002 24.07.2023#E0005 24.07.2023#E0013 25.07.2023#E0009
15.01.2023#E0001 09.05.2023#E0001 02.01.2023#E0002 09.05.2023#E0005 26.05.2023#E0013
02.01.2023#E0001 02.01.2023#E0002 19.01.2023#E0005 20.01.2023#E0013 20.01.2023#E0006

Die Dat­en sollen in eine neue Tabelle geschrieben wer­den

Danke vor­ab
Ste­fan


Meine Inter­pre­ta­tion von Ste­fans Bitte um Lösung: Jede einzelne Zeile der Quell­dat­en soll spal­tenweise nach Datum auf­steigend sortiert wer­den; bei gle­ichem Datum-Wert entschei­det der Anhang nach dem #-Zeichen über die Rei­hen­folge. Und ich gehe auch davon aus, dass der Auf­bau der Lösungsta­belle dem der Quell­dat­en gle­ichen soll.

Zugegeben, mein M-Code ist nicht unbe­d­ingt „leichte Kost“ und vielle­icht nicht ganz so ein­fach nachvol­lziehbar wie die erste Lösung mit der Formel neuer Gena­ra­tion. Den­noch bin ich der Überzeu­gung, dass Pow­er Query in sehr vie­len Fällen wegen der schrit­tweisen Abar­beitung deut­lich bess­er nachvol­lziehbar und bei Bedarf auch bess­er anpass­bar ist als eine „Band­wurm­formel“.

Und noch dieser von mir öfter ein­mal vorge­brachte Hin­weis: Auch in PQ kann ich extrem kom­prim­ierten Code schreiben, aber das würde IMHO dem Gedanken, dass in Pow­er Query so gut wie fast alles mit Mausklicks zu erledi­gen ist.

let
    Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
    #"Ersetzter Wert" = Table.ReplaceValue(Quelle,"",null,Replacer.ReplaceValue,{"Spalte1", "Spalte2", "Spalte3", "Spalte4", "Spalte5"}),
    #"Geänderter Typ" = Table.TransformColumnTypes(#"Ersetzter Wert",{{"Spalte1", type text}, {"Spalte2", type text}, {"Spalte3", type text}, {"Spalte4", type text}, {"Spalte5", type text}}),
    #"Hinzugefügter Index" = Table.AddIndexColumn(#"Geänderter Typ", "Index", 0, 1, Int64.Type),
    #"Entpivotierte andere Spalten" = Table.UnpivotOtherColumns(#"Hinzugefügter Index", {"Index"}, "Attribut", "Wert"),
    // Die Überschriften werden später nach dem Sortieren (!) neu generiert
    #"Entfernte Spalten" = Table.RemoveColumns(#"Entpivotierte andere Spalten",{"Attribut"}),
    #"Duplizierte Spalte" = Table.DuplicateColumn(#"Entfernte Spalten", "Wert", "Wert - Kopie"),
    #"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"Duplizierte Spalte", "Wert - Kopie", Splitter.SplitTextByDelimiter("#", QuoteStyle.csv), {"Wert - Kopie.1", "Wert - Kopie.2"}),
    // Spalte 'Wert - Kopie.1' muss (eventuell) händisch aud Datentyp 'Datum' geändert werden
    #"Geänderter Typ1" = Table.TransformColumnTypes(#"Spalte nach Trennzeichen teilen",{{"Wert - Kopie.1", type date}, {"Wert - Kopie.2", type text}}),
    #"Sortierte Zeilen" = Table.Sort(#"Geänderter Typ1",{{"Index", Order.Ascending}, {"Wert - Kopie.1", Order.Ascending}, {"Wert - Kopie.2", Order.Ascending}}),
    #"Entfernte Spalten1" = Table.RemoveColumns(#"Sortierte Zeilen",{"Wert - Kopie.1", "Wert - Kopie.2"}),
    // Für jeden Index (anfangs: Zeilöe) eine fortlaufende Numerierung erstellen
    #"Gruppierte Zeilen" = Table.Group(#"Entfernte Spalten1", {"Index"}, {{"Data", each _, type table [Index=number, Wert=text]}}),
    #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Gruppierte Zeilen", "Benutzerdefiniert", each Table.AddIndexColumn([Data], "Spalte", 1, 1)),
    #"Entfernte Spalten2" = Table.RemoveColumns(#"Hinzugefügte benutzerdefinierte Spalte",{"Data"}),
    #"Erweiterte Benutzerdefiniert" = Table.ExpandTableColumn(#"Entfernte Spalten2", "Benutzerdefiniert", {"Wert", "Spalte"}, {"Wert", "Spalte"}),
    #"Präfix hinzugefügt" = Table.TransformColumns(#"Erweiterte Benutzerdefiniert", {{"Spalte", each "Spalte " & Text.From(_, "de-DE"), type text}}),
    #"Pivotierte Spalte" = Table.Pivot(#"Präfix hinzugefügt", List.Distinct(#"Präfix hinzugefügt"[Spalte]), "Spalte", "Wert"),
    #"Entfernte Spalten3" = Table.RemoveColumns(#"Pivotierte Spalte",{"Index"})
in
    #"Entfernte Spalten3"

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, Verschiedenes, Datentyp anpassen, Datum & Zeit, Entpivotieren, Foren-Q&A, Power Query, Spalten bearbeiten abgelegt und mit , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.