AW: jetzt auch noch sortiert...
04.03.2022 11:24:05
ChrisL
Hi Luschi
Guter Punkt. Buffer scheint des Rätsels Lösung.
Ich muss zugeben, dass ich mich bei Aussagen zum Speichermanagement ausserhalb meiner Komfortzone bewege. Aber ich versuche trotzdem meine Erkenntnisse aufgrund einer kurzen Recherche zu Table.Buffer() zu vermitteln.
https://docs.microsoft.com/en-us/powerquery-m/table-buffer
Auto-Translate:
Puffert eine Tabelle im Arbeitsspeicher und isoliert sie während der Auswertung von externen Änderungen. Die Pufferung ist oberflächlich. Es erzwingt die Auswertung aller skalaren Zellwerte, lässt aber nicht skalare Werte (Datensätze, Listen, Tabellen usw.) unverändert.
Beachten Sie, dass die Verwendung dieser Funktion dazu führen kann, dass Ihre Abfragen schneller ausgeführt werden oder nicht. In einigen Fällen kann dies dazu führen, dass Ihre Abfragen langsamer ausgeführt werden, da die zusätzlichen Kosten für das Lesen aller Daten und das Speichern im Speicher sowie die Tatsache, dass die Pufferung ein Downstream-Folding verhindert, hinzukommen.
Table.Buffer kann also die Laufzeit beschleunigen oder verlangsamen. Kommt drauf an.
Bezogen auf die Aufgabe scheint mir folgender Beitrag interessant:
https://community.powerbi.com/t5/Desktop/How-do-I-buffer-my-table-in-Power-Query/m-p/778115
In meinen Laien-Worten ausgedrückt:
PQ hat seine eigenen Wege zur Optimierung. Das Ignorieren von Sortierungen im Rahmen von Gruppierungen scheint eine solche automatische Performance-Optimierung zu sein.
Mit Table.Buffer nimmt man die automatische Dynamik raus. Die Tabelle wird quasi "statisch" in den Speicher geladen.
Fazit:
Wäre die Sortierung nicht ignoriert worden, hätte man im ursprünglichen Lösungsansatz einfach direkt nach Einlesen der Quelle sortiert und alles wäre gut gewesen.
Quelle = Excel.CurrentWorkbook(){[Name="tab_Daten"]}[Content],
#"Sortierte Zeilen" = Table.Sort(Quelle,{{"Proj", Order.Ascending}}),
...
Indem man die Tabelle "buffert" und damit "statisch" macht, löst man das Problem.
Quelle = Excel.CurrentWorkbook(){[Name="tab_Daten"]}[Content],
#"Sortierte Zeilen" = Table.Buffer(Table.Sort(Quelle,{{"Proj", Order.Ascending}})),
...
cu
Chris