Power Query wird langsam? Deine Abfrage braucht 10 Minuten zum laden? Das ist lösbar!
Das klassische Problem: Performance-Probleme entstehen meist durch:
- Zu viele Transformationen (20+ Steps!)
- Filter zu spät (erst am Ende statt am Anfang!)
- Große Datenmengen ohne Optimierung
- Fehlerhafte Quellverbindungen (Network Timeouts!)
- Ungünstige M-Code Patterns
Die Lösung: Performance-Audit durchführen → Bottlenecks finden → Optimieren!
In diesem Tutorial lernst du: Wie du Power Query Performance-Probleme diagnosierst & optimierst für Blitzgeschwindigkeit!
1. Performance Probleme erkennen – Die Symptome
| Symptom | Ursache | Lösung |
|---|---|---|
| Sehr lange Ladezeit (>1min) | Zu viele Zeilen/Spalten? Teure Operationen? | Filter früh, Spalten entfernen, Transformationen vereinfachen |
| Fehler nach einigen Minuten | Timeout! Server antwortet nicht | Größere Query Timeout setzen oder Split in mehrere Queries |
| RAM ausgelastet (Excel friert ein) | Zu viele Daten im Memory | Weniger Spalten, Split groß Queries, Load to Power Pivot |
| Fehler: "Not Enough Memory" | Zu viele Zwischenresultate | Berechnet Columns reducen, Load to Data Model, Smaller chunks |
| Inkonsistente Fehler (manchmal OK, manchmal Fehler) | Netzwerk instabil oder Server belastet | Query Timeout erhöhen, Server-Load prüfen, Connection testen |
Die Wahrheit: 80% der Performance-Probleme = Filter oder Transformationen an falscher Position!
2. Die Top 5 Performance-Killer
1. Filter zu spät (am Ende statt am Anfang!)
❌ FALSCH (Langsam!):
🟢 RICHTIG (Schnell!):
let
Source = Csv.Document("riesige_datei.csv"), ← 10 Millionen Zeilen!
AddedCols = Table.AddColumn(Source, "Calc", each ...), ← Mit 10M!
SplitCols = Table.SplitColumn(AddedCols, ...), ← Noch 10M!
PivotData = Table.Pivot(SplitCols, ...), ← JETZT 10M pivotieren!
FilteredData = Table.SelectRows(PivotData, each [Region]="Nord") ← Erst hier filtern!
in
FilteredData
🟢 RICHTIG (Schnell!):
let
Source = Csv.Document("riesige_datei.csv"),
FilteredData = Table.SelectRows(Source, each [Region]="Nord"), ← SOFORT filtern!
AddedCols = Table.AddColumn(FilteredData, "Calc", each ...), ← Mit nur 100K
SplitCols = Table.SplitColumn(AddedCols, ...),
PivotData = Table.Pivot(SplitCols, ...)
in
PivotData
2. Zu viele Spalten laden (du brauchst nicht alle!)
✅ Best Practice: Nur Spalten laden die du brauchst!
NICHT: Alle 50 Spalten aus DB
SONDERN: Table.SelectColumns(Source, {"ID", "Name", "Umsatz", "Datum"}) ← Nur 4!
3. Komplexe Transformationen (Pivot, Unpivot, etc.) auf großen Daten
Pivot mit 10 Millionen Zeilen = Horror!
Lösung: Erst filtern/aggregieren → Dann Pivot auf kleineren Daten!
Lösung: Erst filtern/aggregieren → Dann Pivot auf kleineren Daten!
4. Fehlerhafte Data Type Änderungen
Problem: Table.TransformColumnTypes auf großer Tabelle = langsam!
Bessere Lösung: M-Code Manual Type Change für kritische Spalten nur!
Bessere Lösung: M-Code Manual Type Change für kritische Spalten nur!
NICHT: Table.TransformColumnTypes(Source, {{"A", type text}, {"B", type number}, ...})
SONDERN: Nur kritische Spalten in Applied Steps!
5. Keine Query Folding (Die M-Code wird nicht auf Source übertragen!)
Query Folding = Magic! Wenn Power Query die Transformationen zur Datenquelle "pusht"
→ Server macht die Arbeit (schnell!) statt Excel (langsam!)
Problem: Viele M-Code Funktionen brechen Query Folding ab!
→ Server macht die Arbeit (schnell!) statt Excel (langsam!)
Problem: Viele M-Code Funktionen brechen Query Folding ab!
3. Query Folding verstehen – Die Game-Changer
Query Folding = Power Query sendet Filter/Transformationen zur Datenquelle statt lokal zu verarbeiten!
Wie erkennst du Query Folding?
In Power Query Editor:
- Step auswählen in Applied Steps
- Rechtsklick → "View Native Query" (wenn verfügbar!)
- Wenn native Query angezeigt wird → Query Folding aktiv! ✅
- Wenn "View Native Query" grayed out → Query Folding broken! ❌
Query Folding breakers (vermeiden!):
❌ Text.Combine() – Broken!
❌ Table.AddColumn() mit komplexer Formel – Broken!
❌ List.Transform() – Broken!
❌ Custom Functions – Often broken!
✅ Table.SelectRows() (Filter) – Wird "gefolded"!
✅ Table.SelectColumns() (Spalten) – Wird "gefoldet"!
✅ Table.Sort() – Wird "gefolded"!
4. Fallstudie 1: 10M Zeilen Verkaufsdaten – Vor & Nach Optimierung
Szenario: Datenbank mit 10 Millionen Verkaufszeilen
VORHER (Langsam – 5 Minuten!):
NACHHER (Optimiert – 10 Sekunden!):
Resultat: 5 Minuten → 10 Sekunden! 🚀 (99% schneller!)
VORHER (Langsam – 5 Minuten!):
| Step | Problem | Zeilen |
|---|---|---|
| 1. Source (DB Query) | Alle 10M Zeilen mit 30 Spalten | 10M ❌ |
| 2. Add custom Column | Komplexe Berechnung auf 10M | 10M 🐌 |
| 3. Pivot Region | Pivot 10M Zeilen! | 10M 🔥 |
| 4. Filter Region | ZU SPÄT! | 9.9M |
NACHHER (Optimiert – 10 Sekunden!):
| Step | Optimierung | Zeilen |
|---|---|---|
| 1. Source (DB Query mit Filter!) | Nur Region="Nord" + nötige Spalten | 100K ✅ |
| 2. Select Columns | Nur 5 Spalten brauchen | 100K ✅ |
| 3. Add Custom Column | Jetzt nur auf 100K! | 100K ✅ |
| 4. Pivot Region | Viel kleinere Daten | 100K ✅ |
Resultat: 5 Minuten → 10 Sekunden! 🚀 (99% schneller!)
5. Best Practices für Performance-Optimierung
✅ Tipp 1: Filter immer am Anfang!
Regel: Wenn du in Datenquelle filtern kannst (SQL WHERE, etc.) → TU ES!
Dann nur noch kleine Daten transformieren!
Dann nur noch kleine Daten transformieren!
✅ Tipp 2: Spalten früh selektieren!
Nach dem Filter: Table.SelectColumns() → Nur nötige Spalten!
10M Zeilen × 30 Spalten vs. 10M Zeilen × 5 Spalten = großer Unterschied!
10M Zeilen × 30 Spalten vs. 10M Zeilen × 5 Spalten = großer Unterschied!
✅ Tipp 3: Query Folding aktivieren!
Komplexe M-Code Funktionen vermeiden → Query Folding bleibt aktiv!
View Native Query prüfen ob Folding noch funktioniert!
View Native Query prüfen ob Folding noch funktioniert!
✅ Tipp 4: Aggregation VOR großen Transformationen!
Statt 10M Zeilen zu pivotieren → Erst aggregieren (GROUP BY) → Dann Pivot auf 1000 Zeilen!
✅ Tipp 5: Query Timeout erhöhen (für große Daten)!
Power Query Options → Data Load → Query Timeout (Default 10 Minuten)
Für sehr große Operationen → 30 Minuten oder mehr!
Für sehr große Operationen → 30 Minuten oder mehr!
6. Debugging Performance – Schritt-für-Schritt
Die Checkliste:
Schritt 1: Applied Steps durchgehen
Schritt 2: Query Folding prüfen
Schritt 3: M-Code Analysis
Schritt 4: Restrukturieren
- Klick auf jeden Step → Zeilen zählen in Vorschau
- Wo "explodiert" die Zeilenzahl?
- Wo wird's langsam?
Schritt 2: Query Folding prüfen
- View Native Query verfügbar?
- Wo bricht Folding ab?
Schritt 3: M-Code Analysis
- Advanced Editor öffnen
- Query Folding breaker identifizieren
- Vereinfachen oder anders schreiben
Schritt 4: Restrukturieren
- Filter am Anfang?
- Spalten selektieren?
- Aggregation VOR Pivot/Unpivot?
7. Häufige Performance-Fehler & Lösungen
❓ F: Query lädt stunden! Was tun?
A: Emergency Fixes:
- Escape drücken um Query zu canceln
- Last Step removeen (Applied Steps panel)
- Query Timeout erhöhen (Options)
- Aber: Applied Steps analysieren um echtes Problem zu finden!
❓ F: "Not Enough Memory" Fehler!
A: Die Lösung:
- Schnell: Excel neustarten → Memory freigeben
- Mittelfristig: Weniger Spalten laden, Kleinere Datenmengen
- Langfristig: Load to Power Pivot statt Worksheet → Komprimierung!
❓ F: Manchmal schnell, manchmal langsam (inkonsistent!)
A: Wahrscheinlich Netzwerk/Server:
- Server ist belastet? → Zu Spitzenzeiten langsamer
- Netzwerk-Lag? → Test mit kleinerer Query
- Connection ist intermittent? → IT-Team kontaktieren!
❓ F: Kann ich Performance messen (nicht raten)?
A: JA! Tools:
- Power Query profiler: Performance analyzer in Advanced Editor
- DAX Studio: Kostenlose Tool für Timing
- SQL Profiler: Wenn DB-Quelle, was wird auf Server ausgeführt?
8. Deine nächsten Schritte
- Applied Steps durchgehen: Welcher Step dauert lange?
- Query Folding prüfen: "View Native Query" aktiviert?
- Top 5 Killer identifizieren: Welche trifft zu?
- Restrukturieren: Filter am Anfang? Spalten selekt?
- Testen: Ist es schneller?
- Query Timeout erhöhen: Wenn nötig
- Load to Power Pivot: Für große Datenmodelle
Checkliste für Power Query Performance
- Ich kenne die Performance-Symptome
- Ich verstehe die Top 5 Performance-Killer
- Ich weiß was Query Folding ist
- Ich kann Query Folding prüfen ("View Native Query")
- Ich weiß welche M-Code Funktionen Folding brechen
- Ich platziere Filter am Anfang (nicht am Ende!)
- Ich selektiere Spalten früh
- Ich aggregiere VOR Pivot/Unpivot
- Ich kann Performance-Probleme diagnostizieren
- Ich optimiere Power Query für Production Use
Mit Performance-Optimierungen wird Power Query zur Turbine! 🚀⚡
Keine Kommentare:
Kommentar veröffentlichen