19.07.2017, 12:14
(Dieser Beitrag wurde zuletzt bearbeitet: 19.07.2017, 12:38 von friedensbringer.)
Hallo zusammen,
ich hoffe ihr könnt mir bei einem Problem weiterhelfen und zwar geht es um eine Performanceverbesserung in einer Datei mit sehr vielen Zeilen.
Wenn ich das endlich hinbekommen würde wäre ich sehr froh, weil es diese Fälle immer wieder einmal gibt und ich regelmäßig an der Performance dieser Dateien verzweifle.
Ich habe beiliegend eine entsprechende Beispieldatei hochgeladen, damit man genau sieht worum es mir hier geht.
Aufgrund der zulässigen Größe für Anhänge musste ich diese ein wenig einschränken. Die verschiedenen Varianten habe ich im oberen Bereich für jeweils vier Zeilen eingefügt,
man kann das zu Testzwecken natürlich in den Spalten C-K bis ganz nach unten kopieren.
Die Datei mit 200.000 Zeilen habe ich hier auf Google Drive hochgeladen.
In der aktuellen Datei werden SVERWEISE gemacht, diese auf verschiedene Tabellenblätter, (in der tatsächlichen Anwendung teilweise sogar auf andere Dateien - was nochmals Performance frisst).
Der Schlüssel ist in diesem Fall immer die Kundennummer. Der SVERWEIS schaut zB so aus (grün markiert):
=SVERWEIS($A2;Umsatz!$A:$E;3;FALSCH)
Da es sich bei der Originaldatei um > 200.000 Zeilen handelt dauert dies mehrere Stunden und es kann auch sein dass die Abfrage überhaupt abgebrochen wird.
Bei der Beispieldatei mit ca. 10.000 Zeilen wird der Performanceunterschied aber wie weitem nicht so krass ausfallen.
Jetzt habe ich einige Ansätze gefunden, dass man das mit einem SVERWEIS macht aber die Daten in allen Datenquellen vorher nach
dem Schlüsselfeld (also in meinem Fall der Kundennummer) sortiert und dann den SVERWEIS "modifiziert" und mit WAHR sucht, da dies deutlich performanter ist.
Damit man hier tatsächlich wieder den korrekten Datensatz erhält wird das so gemacht (blau markiert):
=WENN(SVERWEIS($A8;Umsatz!$A:$E;1;WAHR)=$A8;SVERWEIS($A8;Umsatz!$A:$E;3;WAHR);"")
Soweit ist das für mich noch ganz verständlich und das funktioniert auch extrem viel schneller.
Jetzt haben sich (zum Glück) schlauere Leute als ich ganz intensiv mit diesem Thema auseinandergesetzt
und auch getestet wie lange unterschiedliche Varianten dauern und die empfehlen aus Performancegründen
eigentlich durchgängig INDEX / VERGLEICH mit sortierten Daten.
http://www.exceluser.com/blog/727/excels...sults.html
http://analystcave.com/excel-vlookup-vs-...rformance/
Ich bekomme aber leider einfach die entsprechenden INDEX / VERGLEICH Abfragen nicht hin.
Irgendwie stehe ich (leider) mit dieser sehr praktischen Funktion ein wenig auf "Kriegsfuß" weil ich sie einfach nicht so wirklich durchschaue.
So habe ich es jetzt einmal gelöst (orange markiert):
=INDEX(Umsatz!$C:$C;VERGLEICH($A14;Umsatz!$A:$A;1))
Auch das geht deutlich schneller. In der angegebenen Website steht aber noch folgendes (für die bestmögliche getestete Performance):
INDEX-MATCH in Two Formulas, Sorted Data
Finally, this trial uses separate formulas for INDEX and MATCH:
B3: =INDEX(Data,$G3,B$1)
G3: =MATCH($A3,Code,1)
Here, we can modify cell G3 to give us an exact match:
G3: =IF(INDEX(Code,MATCH($A3,Code,1))=$A3, MATCH($A3,Code,1), NA())
In other words, using the two-formula INDEX-MATCH approach against sorted data can be significantly faster than using either VLOOKUP or the one-formula INDEX-MATCH technique, and is best practice.
Net Calculation Time for Approximate Match: 0.391
Net Calculation Time for Exact-Match Version: 0.438
Ich hoffe ihr könnt mir da weiterhelfen das so wie dort in rot angegeben hinzubekommen.
---- Nur noch am Rande erwähnt:
Es gibt für diese großen Abfragen auch ein Excel-Addin welches SQLite verwendet. Funktioniert ebenfalls ausgezeichnet,
da ich das aber nicht auf jedem Client ein AddIn installieren möchte würde ich das lieber anders lösen. Aber vielleicht hilft es ja jemandem.
http://archive.is/vG8CG
Es scheint hier generell sehr viele Informationen zu diesem Thema zu geben, aber leider oft nur englisch btw. etwas dürftig oder ohne Beispieldatei erklärt:
http://www.goodly.co.in/perform-faster-v...arge-data/
https://fastexcel.wordpress.com/2012/03/...1-vlookup/
Generell wäre für mich auch noch interessant zu wissen wie ihr solche Sachen löst?
SQL? Power-Query? Power-Pivot? Power-BI?
Vielen Dank für eure Hilfe und lg
Olli
ich hoffe ihr könnt mir bei einem Problem weiterhelfen und zwar geht es um eine Performanceverbesserung in einer Datei mit sehr vielen Zeilen.
Wenn ich das endlich hinbekommen würde wäre ich sehr froh, weil es diese Fälle immer wieder einmal gibt und ich regelmäßig an der Performance dieser Dateien verzweifle.
Ich habe beiliegend eine entsprechende Beispieldatei hochgeladen, damit man genau sieht worum es mir hier geht.
Aufgrund der zulässigen Größe für Anhänge musste ich diese ein wenig einschränken. Die verschiedenen Varianten habe ich im oberen Bereich für jeweils vier Zeilen eingefügt,
man kann das zu Testzwecken natürlich in den Spalten C-K bis ganz nach unten kopieren.
Die Datei mit 200.000 Zeilen habe ich hier auf Google Drive hochgeladen.
In der aktuellen Datei werden SVERWEISE gemacht, diese auf verschiedene Tabellenblätter, (in der tatsächlichen Anwendung teilweise sogar auf andere Dateien - was nochmals Performance frisst).
Der Schlüssel ist in diesem Fall immer die Kundennummer. Der SVERWEIS schaut zB so aus (grün markiert):
=SVERWEIS($A2;Umsatz!$A:$E;3;FALSCH)
Da es sich bei der Originaldatei um > 200.000 Zeilen handelt dauert dies mehrere Stunden und es kann auch sein dass die Abfrage überhaupt abgebrochen wird.
Bei der Beispieldatei mit ca. 10.000 Zeilen wird der Performanceunterschied aber wie weitem nicht so krass ausfallen.
Jetzt habe ich einige Ansätze gefunden, dass man das mit einem SVERWEIS macht aber die Daten in allen Datenquellen vorher nach
dem Schlüsselfeld (also in meinem Fall der Kundennummer) sortiert und dann den SVERWEIS "modifiziert" und mit WAHR sucht, da dies deutlich performanter ist.
Damit man hier tatsächlich wieder den korrekten Datensatz erhält wird das so gemacht (blau markiert):
=WENN(SVERWEIS($A8;Umsatz!$A:$E;1;WAHR)=$A8;SVERWEIS($A8;Umsatz!$A:$E;3;WAHR);"")
Soweit ist das für mich noch ganz verständlich und das funktioniert auch extrem viel schneller.
Jetzt haben sich (zum Glück) schlauere Leute als ich ganz intensiv mit diesem Thema auseinandergesetzt
und auch getestet wie lange unterschiedliche Varianten dauern und die empfehlen aus Performancegründen
eigentlich durchgängig INDEX / VERGLEICH mit sortierten Daten.
http://www.exceluser.com/blog/727/excels...sults.html
http://analystcave.com/excel-vlookup-vs-...rformance/
Ich bekomme aber leider einfach die entsprechenden INDEX / VERGLEICH Abfragen nicht hin.
Irgendwie stehe ich (leider) mit dieser sehr praktischen Funktion ein wenig auf "Kriegsfuß" weil ich sie einfach nicht so wirklich durchschaue.
So habe ich es jetzt einmal gelöst (orange markiert):
=INDEX(Umsatz!$C:$C;VERGLEICH($A14;Umsatz!$A:$A;1))
Auch das geht deutlich schneller. In der angegebenen Website steht aber noch folgendes (für die bestmögliche getestete Performance):
INDEX-MATCH in Two Formulas, Sorted Data
Finally, this trial uses separate formulas for INDEX and MATCH:
B3: =INDEX(Data,$G3,B$1)
G3: =MATCH($A3,Code,1)
Here, we can modify cell G3 to give us an exact match:
G3: =IF(INDEX(Code,MATCH($A3,Code,1))=$A3, MATCH($A3,Code,1), NA())
In other words, using the two-formula INDEX-MATCH approach against sorted data can be significantly faster than using either VLOOKUP or the one-formula INDEX-MATCH technique, and is best practice.
Net Calculation Time for Approximate Match: 0.391
Net Calculation Time for Exact-Match Version: 0.438
Ich hoffe ihr könnt mir da weiterhelfen das so wie dort in rot angegeben hinzubekommen.
---- Nur noch am Rande erwähnt:
Es gibt für diese großen Abfragen auch ein Excel-Addin welches SQLite verwendet. Funktioniert ebenfalls ausgezeichnet,
da ich das aber nicht auf jedem Client ein AddIn installieren möchte würde ich das lieber anders lösen. Aber vielleicht hilft es ja jemandem.
http://archive.is/vG8CG
Es scheint hier generell sehr viele Informationen zu diesem Thema zu geben, aber leider oft nur englisch btw. etwas dürftig oder ohne Beispieldatei erklärt:
http://www.goodly.co.in/perform-faster-v...arge-data/
https://fastexcel.wordpress.com/2012/03/...1-vlookup/
Generell wäre für mich auch noch interessant zu wissen wie ihr solche Sachen löst?
SQL? Power-Query? Power-Pivot? Power-BI?
Vielen Dank für eure Hilfe und lg
Olli
WIN 10 64-Bit Pro / EXCEL Microsoft Office 365 ProPlus 64-Bit