Registriert seit: 22.09.2024
Version(en): 2010, 2021
Nachtrag: Hier noch ein stark vereinfachtes Beispiel zum Ausprobieren: ab XL2010
tblData_Sort.zip (Größe: 17,36 KB / Downloads: 6)
Knobbi38
Registriert seit: 10.04.2014
Version(en): Office 2019
(11.02.2026, 20:16)knobbi38 schrieb: Nachtrag:
Hier noch ein stark vereinfachtes Beispiel zum Ausprobieren: ab XL2010
Knobbi38 Hallo, warum muss das ein gezipptes Beispiel sein?
Gruß Jörg stolzes Mitglied im ----Excel-Verein
Im Wort FEHLER steckt auch das Wort HELFER!
FEHLER helfen dir. Nimm deine FEHLER an und lerne aus ihnen. Wenn du es zulässt, dann werden sie dich stärken
Im Wort
Registriert seit: 12.07.2025
Version(en): 2021
(11.02.2026, 20:16)knobbi38 schrieb: Hier noch ein stark vereinfachtes Beispiel zum Ausprobieren: ab XL2010 Ja, da bist Du in die gleiche Falle getappt die wir in diesem Thread schon zweimal hatten: Der Comparer "de-DE_phoneb" liefert keine stabile Sortierung. Wenn Du mehrere Göthe und Goethe hast, dann werden diese per Zufall je nach Anordnung in der Quelle durcheinander ausgegeben. Wenn man das in eine korrekte Reihenfolge bringen will, dann muss man ihn einpacken und ggf. 2mal vergleichen.
tblData_Sort.xlsx (Größe: 24,46 KB / Downloads: 7)
Andreas.
Registriert seit: 09.01.2022
Version(en): Microsoft 365
Zitat:Der Comparer "de-DE_phoneb" liefert keine stabile Sortierung. Ich denke, dieses Aussage ist nicht korrekt. Vielmehr liegt es daran, das die PQ-Engine die Schrittfolge optimiert, damit aber tlws. falsche Ergebnisse produziert. Durch das vorherige einfügen eines Index, oder das Covern der Sortierung durch Table.Buffer, wird das vermieden. Laut Ken Puls kann es vorkommen, dass beide Maßnahmen notwendig sind. Mir ist es in solchen Fällen sogar schon passiert, dass wenn ich die Schritte einzeln durchgehe, um die Ergebnisse zu kontrollieren, mir alles richtig angezeigt wird und das Problem nur auftritt, wenn die Abfrage von außen aktualisiert wird. Da war ich vor Jahren froh, als die KI noch nicht helfen konnte, dass Ken das Problem kannte und mir mit seinen Tipps helfen konnte.
Folgende(r) 1 Nutzer sagt Danke an ws-53 für diesen Beitrag:1 Nutzer sagt Danke an ws-53 für diesen Beitrag 28
• Kuwer
Registriert seit: 22.09.2024
Version(en): 2010, 2021
12.02.2026, 12:48
(Dieser Beitrag wurde zuletzt bearbeitet: 12.02.2026, 12:50 von knobbi38.)
Jockel schrieb:Hallo, warum muss das ein gezipptes Beispiel sein? Warum nicht?
Registriert seit: 12.07.2025
Version(en): 2021
(12.02.2026, 12:13)ws-53 schrieb: Vielmehr liegt es daran, das die PQ-Engine die Schrittfolge optimiert, damit aber tlws. falsche Ergebnisse produziert. Ja, das Sortierungsproblem ist mir bekannt, aber in diesem Fall kommt das nicht zum Tragen: Stell in Windows die Sortierung auf Telefonbuch und sortiere mit Excel => gleiches Problem. (Hatte ich das nicht auch schon gesagt? ... Denke schon.) Andreas.
Registriert seit: 22.09.2024
Version(en): 2010, 2021
12.02.2026, 13:30
(Dieser Beitrag wurde zuletzt bearbeitet: 12.02.2026, 13:31 von knobbi38.)
Nachtrag zu #21 Hier noch die beiden Ergänzungen mit Buffer und Index, damit mal damit auch ein wenig spielen kann:
tblData_Sort_1.zip (Größe: 21,72 KB / Downloads: 3)
Knobbi38 PS: Im Beispiel von Andreas (#23) wird der PowerQuery-Code leider nicht mehr in XL2010 angezeigt - Kompatibilitätswarnung!
Registriert seit: 12.07.2025
Version(en): 2021
(12.02.2026, 13:30)knobbi38 schrieb: Hier noch die beiden Ergänzungen mit Buffer und Index, damit mal damit auch ein wenig spielen kann: Ja, ist immer noch falsch:
Hier die Datei:
tblData_Sort_1.xlsx (Größe: 25,42 KB / Downloads: 4)
Und hier der Comparer den Du mit Deinem Excel 2010 nicht siehst: Code: // ComparerDIN5007_2 let func = (optional ignoreCase as nullable logical) as function => let ic = ignoreCase ?? false, baseComparer = if ic then Comparer.OrdinalIgnoreCase else Comparer.Ordinal, comparer = (x as nullable text, y as nullable text) as number => let res = Comparer.FromCulture("de-DE_phoneb", ic)(x, y) in if res=0 then baseComparer(x, y) else res in comparer, documentation = [ Documentation.Name = "ComparerDIN5007_2", Documentation.Description = "Comparer to perform a stable sort as described in DIN 5007-2", Documentation.LongDescription = Documentation.Description, Documentation.Category = "Table", Documentation.Source = "andreas.killer@gmx.net", Documentation.Version = "1.1", Documentation.Author = "Andreas Killer", Documentation.Examples = {[ Description = "", Code = " = Table.Sort(Source, (x, y) => ComparerDIN5007_2(false)(x[Land], y[Land])) or = TableComparerSort(Source,{{""Land"", Order.Ascending, ComparerDIN5007_2(false)}})
ignoreCase: To ignore the spelling or not. The default value for ignoreCase is false. ", Result = ""]}] in Value.ReplaceType(func, Value.ReplaceMetadata(Value.Type(func), documentation))
Statt = Table.Sort( Indexed, (x,y) => Comparer.FromCulture("de-DE_phoneb", false)(x[Nachname], y[Nachname])) dies = Table.Sort( Indexed, (x,y) => ComparerDIN5007_2 ()(x[Nachname], y[Nachname])) verwenden. Ich weiß nicht ob Deine Power Query Version die documentation schon kann, wenn nicht dann schnibbel Dir die paar Zeilen relevanten Code einfach raus. Oder mach es anders nach.  Andreas.
Registriert seit: 09.01.2022
Version(en): Microsoft 365
Deine 3 Beispiele der de-DE_phoneb-Sortierung zeigen bei mir identische Sortierfolgen. Das spricht dann wieder eher für meine Aussage. Denn in den 3 Beispielen gibt es ja für PQ keinen Grund die Schrittfolgen zu optimieren. Somit werden auch ohne Index und Table.Buffer bei mir immer das gleiche Sortierergebnis angezeigt. Aber hier noch eine Methode, habe ich mir vom Copilot basteln lassen, wie: "Comparer.FromCulture("de-DE_phoneb", false)" auch für das gruppieren verwendet werden kann. Code: let Quelle = Excel.CurrentWorkbook(){[Name="Quelle"]}[Content], #"Geänderter Typ" = Table.TransformColumnTypes( Quelle, {{"ID", Int64.Type}, {"Vorname", type text}, {"Nachname", type text}} ), Sortiert = Table.Sort( #"Geänderter Typ", (x,y) => Comparer.FromCulture("de-DE_phoneb", false)(x[Nachname], y[Nachname])),
//let Compare = Comparer.FromCulture("de-DE_phoneb", false), DistinctNames = List.Buffer(List.Distinct(Sortiert[Nachname])), AddGroupKey = Table.AddColumn( Sortiert, "GroupKey", (r) => let current = r[Nachname], rep = List.First( List.Select( DistinctNames, (n) => Compare(current, n) = 0 ) ) in rep, type text ), Grouped = Table.Group(AddGroupKey, {"GroupKey"}, {{"Rows", each _, type table}} ), #"Expanded {0}" = Table.ExpandTableColumn(Grouped, "Rows", {"ID", "Vorname", "Nachname"}, {"ID", "Vorname", "Nachname"}) in #"Expanded {0}"
Registriert seit: 12.07.2025
Version(en): 2021
(13.02.2026, 14:12)ws-53 schrieb: Aber hier noch eine Methode, habe ich mir vom Copilot basteln lassen, wie: "Comparer.FromCulture("de-DE_phoneb", false)" auch für das gruppieren verwendet werden kann. Und da meinst Du das ist besser?  Ich habe auch div. Code von den KI's generieren lassen, IMHO alles Schrott. Noch ein Nachtrag zu dem Comparer.FromCulture, das Ding ist großer Mist. Man könnte ja auf die Idee kommen das man einfach mal mit de-AT sortieren könnte um die österreichische Sortierung zu bekommen, oder mal mit en-US oder irgendeine andere Sprache. Pustekuchen! Man kann auch Comparer.FromCulture("xx-yy", false) sortieren, keine Fehlermeldung und da kommt der gleiche Blödsinn bei raus. Andreas.
|