Zum Inhalt springen

Wertigkeiten im Access erstellen


merlin3011

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Der Hans
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.?

Link zu diesem Kommentar
Auf anderen Seiten teilen

@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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...