merlin3011 Geschrieben 10. Februar 2014 Teilen Geschrieben 10. Februar 2014 Hallo zusammen ich habe folgendes Problem: Vor mir liegt eine Liste mit Teilsummen. Wert 1 3200,00 € Wert 2 2560,00 € Wert 3 1000,00 € Wert 4 1600,00 € Wert 5 1374,00 € Wert 6 800,00 € Wert 7 700,00 € Wert 8 409,00 € Wert 9 400,00 € Wert 10 335,00 € Wert 11 200,00 € Wert 12 200,00 € Wert 13 131,00 € Wert 14 100,00 € Wert 15 50,00 € Summe = 13059,00 € Ich habe die Aufgabe alle Werte "automatisch" über eine Abfrage / VBA, zu markieren, die den meisten Umsatz machen, und in Summe 80% vom Gesamtumsatz. in diesem Beispiel sind 80% 10447,2 € Hier würde würden "Wert 1" bis "Wert 6" markiert werden müssen (in einer extra Spalte). Dies sind die Umsatzträchtigsten und ergibt ca. 80% vom Gesamtumsatz. Ich hoffe ihr versteht was ich meine. Danke im Voraus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 10. Februar 2014 Teilen Geschrieben 10. Februar 2014 Über genau eine Abfrage im Standard-SQL geht es nicht. Mit mehreren in VBA kombinierten Abfragen ist es machbar. Gruß Martin Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
merlin3011 Geschrieben 10. Februar 2014 Autor Teilen Geschrieben 10. Februar 2014 Dann mehrere, würde mir auch weiter helfen. Für einen Lösungsansatz wäre ich dankbar. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 10. Februar 2014 Teilen Geschrieben 10. Februar 2014 Was hast DU bisher als Ansatz? Hast du SQL Statements, die dir die Gesammtsumme berechnen und dir alle relevanten Daten liefern? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
merlin3011 Geschrieben 10. Februar 2014 Autor Teilen Geschrieben 10. Februar 2014 Ich habe mir meine Daten über SQL / VBA in locale Datenbanken geschrieben, eine für die Einzelwerte, eine für die Gesamtsumme, kann diese je nach bedarf anpassen. Die Einzelwerte hole ich über ne kleine Schleife aus ner großen DB, die andere is einfach ne Summe im Access. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pfadiopa Geschrieben 10. Februar 2014 Teilen Geschrieben 10. Februar 2014 Ich habe mir meine Daten über SQL / VBA in locale Datenbanken geschrieben, eine für die Einzelwerte, eine für die Gesamtsumme, kann diese je nach bedarf anpassen. Die Einzelwerte hole ich über ne kleine Schleife aus ner großen DB, die andere is einfach ne Summe im Access. Mir scheint es so, als wäre noch irgendwo ein Makro zum Speichern in Tabelle XXXX eingebaut. Da brauchst du nichts irgendwo speichern (siehe #2 von MartinSt) Über entsprechende Abfragen und VBA wird dir alles aktuell abgefragt. Da geht ein wenig "Hirnschmalz" für drauf und es geht bis in letzte Hirnwindung, aber es lohnt sich. Ich habe früher auch mal "quick and dirty" gearbeitet und musste erkennen, nichts geht über eine saubere Arbeit, die jeder nachvollziehen kann. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
merlin3011 Geschrieben 11. Februar 2014 Autor Teilen Geschrieben 11. Februar 2014 Das ist ja alles gut und schön, jedoch fehlt mir der Ansatz. Und das "zwischenspeichern" der Daten local, mache ich weil ich rede hier von über 10.000.000 Datensätzen und 12.000 Wertzuordnungen. Deswegen mache ich da eine "Vorsummierung der Werte". Eine Schleife die mir jeden Datensatz aufsummiert, läuft denke ich eine Ewigkeit. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 11. Februar 2014 Teilen Geschrieben 11. Februar 2014 SQL kennt Aggregatfunktionen zur Summierung. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
merlin3011 Geschrieben 11. Februar 2014 Autor Teilen Geschrieben 11. Februar 2014 das ist auch richtig, nun habe ich aber noch kein Ranking ???? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 11. Februar 2014 Teilen Geschrieben 11. Februar 2014 ich wiederhole mal: Hast du SQL Statements, die dir die Gesammtsumme berechnen und dir alle relevanten Daten liefern? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
merlin3011 Geschrieben 11. Februar 2014 Autor Teilen Geschrieben 11. Februar 2014 ja habe ich diese geben wie oben schon kurz gesagt die Werte in eine kleine Locale DB aus, einmal die gesamtsumme über alles und einmal die summierung je "Gruppe" Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 11. Februar 2014 Teilen Geschrieben 11. Februar 2014 Geh doch so vor wie du in #1 beschrieben hast: 1. du errechnest per SQL-Aggregatfunktion die Summe aller Umsätze bzw. x% davon 2. dann holst du per SQL alle Einzelumsätze in absteigender Reihenfolge 3. über diese iterierst du per VBA und summierst dabei die Einzelumsätze bis der Wert aus 1. erreicht ist, dann abbrechen 4. die in 3. durchlaufenen Daten tragen dann zu x% zum Gesamtumsatz bei Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
merlin3011 Geschrieben 11. Februar 2014 Autor Teilen Geschrieben 11. Februar 2014 ok #1 und #2 alles klar, und #3 schreibe ich wie im VBA??? sorry ich habe da noch nicht so viel erfahrung Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 11. Februar 2014 Teilen Geschrieben 11. Februar 2014 was ist denn das? Hausaufgabe, Aufgabe im Job oder privates Programmieren? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
merlin3011 Geschrieben 12. Februar 2014 Autor Teilen Geschrieben 12. Februar 2014 im JOB Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 12. Februar 2014 Teilen Geschrieben 12. Februar 2014 was hast du bisher an VBA Code? woran hängt es konkret? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
merlin3011 Geschrieben 13. Februar 2014 Autor Teilen Geschrieben 13. Februar 2014 An Veba habe ich einiges, um Daten zu analysieren, sortieren, und und und. Listen im und Export,... Es hängt daran das ich nicht weiß, wie ich den "Zähler" schreibe das der mir bis 80% addiert, die Werte wegschiebt, und mir dann in einer finalen Tabelle ablegt welche der wertgruppen zu den Top 80% gehören. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 14. Februar 2014 Teilen Geschrieben 14. Februar 2014 Zum besseren Verständnis formuliere ich die Frage nochmal deutlicher: Bitte poste mal den VBA-Code, den Du bisher zur Lösung dieser Fragestellung entwickelt hast. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Hans Geschrieben 14. Februar 2014 Teilen Geschrieben 14. Februar 2014 (bearbeitet) ok #1 und #2 alles klar, und #3 schreibe ich wie im VBA??? sorry ich habe da noch nicht so viel erfahrung Mit gefährlichem VBA-Halbwissen ungefähr so: UmsatzArray = Array(3200.00, 2560.00, 1000.00, 1600.00, 1374.00, 800.00, 700.00, 409.00, 400.00, 335.00, 200.00, 200.00, 131.00, 100.00, 50.00) Gesamtumsatz = 13059.00 UmsatzKumuliert = 0.00 Index = 0 Do While UmsatzKumuliert < Gesamtumsatz*0.8 UmsatzKumuliert = UmsatzKumuliert + UmsatzArray(Index) Index = Index + 1 Loop Ausgabe = "Die Werte " Do While Index >= 0 Ausgabe = Ausgabe & WertArray(Index) & ", " Index = Index - 1 Loop Ausgabe = Left(Ausgabe, Len(Ausgabe)-2) & " machen 80% des Umsatzes aus." Bearbeitet 14. Februar 2014 von Der Hans Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 14. Februar 2014 Teilen Geschrieben 14. Februar 2014 Sorry, wenn ich es ganz deutlich sage, aber ich glaube du hast keine Ahnung was man mit Datenbanken macht oder der gepostete Code hat nichts mit deinen vorherigen Fragen zu tun. Ich sehe in dem geposteten Code keinen Bezug zu einer Datenbank und keine SQL-Abfragen sondern du berechnest irgendwas auf einem statischen Array mit Bezug auf einen fixen Gesamtumsatz. In #12 hatte ich einen groben Lösungsansatz per SQL und Iteration mit VBA angedeutet, warum ignorierst du den? Außerdem hat das Problem ohne weitere Nebenbedingungen nicht zwingend eine eindeutige Lösung. Wenn du z.B. 3 Einzelumsätze von je 100 hast und sollst die bestimmen, die 50% des Gesatzumsatzes ergeben, dann ist jedes Paar von Einzelumsätzen eine korrekte Lösung. Gruß Martin Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Hans Geschrieben 14. Februar 2014 Teilen Geschrieben 14. Februar 2014 Sorry, wenn ich es ganz deutlich sage, aber ich glaube du hast keine Ahnung was man mit Datenbanken macht oder der gepostete Code hat nichts mit deinen vorherigen Fragen zu tun. Sorry, wenn ich es ganz deutlich sage, aber ich glaube du hast nicht bemerkt, dass ich nicht der Threadersteller bin. Ich sehe in dem geposteten Code keinen Bezug zu einer Datenbank und keine SQL-Abfragen sondern du berechnest irgendwas auf einem statischen Array mit Bezug auf einen fixen Gesamtumsatz. Anzunehmen, dass für ein Beispiel die gegebenen Beispieldaten genommen werden, ist nicht korrekt für einen Gedankenanstoß? Dass die Arrays vorher aus Datenbanken statt statisch gefüllt werden, sollte klar sein. In #12 hatte ich einen groben Lösungsansatz per SQL und Iteration mit VBA angedeutet, warum ignorierst du den? Ich habe extra erwähnt, dass es hier um gefährliches Halbwissen geht, daher nehme ich mal an, dass mein Ansatz von niemandem hier als allumfassende Lösung angesehen wird. Da der TE schrieb, dass die Abfrage der Daten aus der Datenbank kein Problem darstellt, habe ich diesen Sch Außerdem hat das Problem ohne weitere Nebenbedingungen nicht zwingend eine eindeutige Lösung. Wenn du z.B. 3 Einzelumsätze von je 100 hast und sollst die bestimmen, die 50% des Gesatzumsatzes ergeben, dann ist jedes Paar von Einzelumsätzen eine korrekte Lösung. S.o., der Codefetzen erhebt absolut keinen Anspruch auf irgendeine Art von Vollständigkeit. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
merlin3011 Geschrieben 14. Februar 2014 Autor Teilen Geschrieben 14. Februar 2014 Ausgangspunkt sind wie schon geschrieben, zwei Tabellen, eine mit dem 12.000 einzelwerten, die andere mit der gesamtsumme. Erstellen tu ich die ganz einfach mit einem: DoCmd.runsql "select... Into... Group...sum.." mehr steht da nicht, die ganzen anderen Codes drehen sich um einen anderen Programmteil. Also einfach als Ausgangspunkt zwei Tabellen annehmen. Hier frage ich mich einfach wie ich die summierung bis 80% hinbekomme. Das mit der habe ich schon gelesen. Nur wie schreibe ich das.? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 14. Februar 2014 Teilen Geschrieben 14. Februar 2014 @Der Hans ich hatte dich leider wirklich mit dem Threadersteller verwechselt, tut mir leid mit der Kritik. @merlin Im Code von der Hans siehst du die prizipielle Iteration mit der Abbruchbedingung beim Erreichen des Zielumsatzes. Wenn du den auf eine Iteration über das ResultSet des Querys übersetzt, hast du alles was du brauchst. Den Ansatz, separat die Summe in der DB zu speichern, finde ich nicht gut. Du bekommst die Summe wie schön gesagt über eine einfach SQL Aggregation und so wie du es lösen willst, musst du unnötig Aufwand treiben, um die Daten konsistent zu halten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
merlin3011 Geschrieben 16. Februar 2014 Autor Teilen Geschrieben 16. Februar 2014 Ok ich versuche das mal umzubasteln, auch wenn ich noch nicht weiß, wie ich meine 10.000.000 Datensätze in das UmsatzArray packen soll. Diese verändern sich ja bei jeder neuen Berechnung. Der Rest erscheint mir logisch und nicht so schwer. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 16. Februar 2014 Teilen Geschrieben 16. Februar 2014 Hallo du brauchst kein Array. Wenn du das Select Statement ausführst, dann erhältst du eine Menge von Ergebnissen. Über diese iterierst du analog, wie es "Der Hans" oben über das Array tut. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.