Bitte beachten Sie die hier beschriebene Besonderheit in Sachen des Herber-Forums.
Quelle: https://www.herber.de/forum/messages/1994441.html
Stand: 22.10.2024 19:00
Hier der Eröffnungsbeitrag aus dem Forum:
Hallo
ich würden gerne eine Tabelle nach Spalten sortieren, mit dem Datum Aufsteigend
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 Daten sollen in eine neue Tabelle geschrieben werden
Danke vorab
Stefan
Meine Interpretation von Stefans Bitte um Lösung: Jede einzelne Zeile der Quelldaten soll spaltenweise nach Datum aufsteigend sortiert werden; bei gleichem Datum-Wert entscheidet der Anhang nach dem #-Zeichen über die Reihenfolge. Und ich gehe auch davon aus, dass der Aufbau der Lösungstabelle dem der Quelldaten gleichen soll.
Zugegeben, mein M-Code ist nicht unbedingt „leichte Kost“ und vielleicht nicht ganz so einfach nachvollziehbar wie die erste Lösung mit der Formel neuer Genaration. Dennoch bin ich der Überzeugung, dass Power Query in sehr vielen Fällen wegen der schrittweisen Abarbeitung deutlich besser nachvollziehbar und bei Bedarf auch besser anpassbar ist als eine „Bandwurmformel“.
Und noch dieser von mir öfter einmal vorgebrachte Hinweis: Auch in PQ kann ich extrem komprimierten Code schreiben, aber das würde IMHO dem Gedanken, dass in Power Query so gut wie fast alles mit Mausklicks zu erledigen 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 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.