Hallo zusammen,
muss nach langer Zeit wieder in Access aktiv werden.
Bin auf der Suche nach der richtigen Zusammensetzung der Dsum Funktion.
Meine Tabelle sieht wie folgt aus siehe unten:
Würde gern im Feld "EUR_IE_KUM" über eine Aktualisierungsabfrage die kumulierten Werte aus EUR_IE pro Center/Abteilung/Jahr/Monat/Kostenart haben.
Irgendwie bekomme ich das nicht hin. DomSumme("EUR_IE";"SGK_IE_Monat"; "was muss hier folgen ?")
Vielen Dank
Center Abteilung Jahr Monat Kostenart EUR_IE EUR_IE_KUM
PP/FP FP 2022 1 Sonstige 8333 0
PP/FP FP 2022 2 Sonstige 8333 0
PP/FP FP 2022 3 Sonstige 8333 0
PP/FP FP 2022 4 Sonstige 8333 0
PP/FP FP 2022 5 Sonstige 8333 0
PP/FP FP 2022 6 Sonstige 8333 0
PP/FP FP 2022 7 Sonstige 8333 0
PP/FP FP 2022 8 Sonstige 8333 0
PP/FP FP 2022 9 Sonstige 8333 0
PP/FP FP 2022 10 Sonstige 8333 0
PP/FP FP 2022 11 Sonstige 8333 0
PP/FP FP 2022 12 Sonstige 8333 0
PP/K K 2022 1 Reisekosten 150000 0
PP/K K 2022 2 Reisekosten 150000 0
PP/K K 2022 3 Reisekosten 150000 0
PP/K K 2022 4 Reisekosten 150000 0
PP/K K 2022 5 Reisekosten 150000 0
PP/K K 2022 6 Reisekosten 150000 0
PP/K K 2022 7 Reisekosten 150000 0
PP/K K 2022 8 Reisekosten 150000 0
PP/K K 2022 9 Reisekosten 150000 0
PP/K K 2022 10 Reisekosten 150000 0
PP/K K 2022 11 Reisekosten 150000 0
PP/K K 2022 12 Reisekosten 150000 0
Hallo,
das sollte mit einer gruppierten Abfrage funktionieren. DomSumme ist hier fehl am Platz.
Und eine Aktualisierungsabfrage braucht es da auch nicht, solche Summen werden nicht gespeichert.
HI,
das ging ja schnell :-)
Gruppierte Abfrage meinst du einfach die Summenfunktion in der Abfrage ? Weiß nicht ob ich mit kumuliert etwas falsch betitelt habe. Vielleicht nennt es sich auch laufende Summe. Ich möchte dass ich für den Monat 1 die Summe aus Monat 1 habe und für Monat 2 die Summe aus Monat 1+2 , usw.
Für den ersten Block in meiner Tabelle wäre das dann:
PP/FP FP 2022 1 Sonstige 8333 8333
PP/FP FP 2022 2 Sonstige 8333 16666
PP/FP FP 2022 3 Sonstige 8333 24999
PP/FP FP 2022 4 Sonstige 8333 33332
PP/FP FP 2022 5 Sonstige 8333 usw.
PP/FP FP 2022 6 Sonstige 8333 usw.
PP/FP FP 2022 7 Sonstige 8333
PP/FP FP 2022 8 Sonstige 8333
PP/FP FP 2022 9 Sonstige 8333
PP/FP FP 2022 10 Sonstige 8333
PP/FP FP 2022 11 Sonstige 8333
PP/FP FP 2022 12 Sonstige 8333
Jau, das ist eine laufende Summe, schaust du hier (https://www.donkarl.com?FAQ3.11).
Morgen, danke für die Info.
Die Information im Netz habe ich schon gelesen.
Aber ich komme einfach mit der Formel nicht klar. Egal was ich probiere es kommt nicht das Ergebnis. Vielleicht kann mir ja einer für das genannte Tabellenbeispiel die Formel aufsetzen damit ich einmal verstehe wie ich die unterschiedlichen Kriterien zusammensetzen muss. Aktuell habe ich eine nicht funktionierende Version die so ist:
DomSumme("EUR_IE";"SGK_IE";"[Monat]"<=" & [Monat]")
Danke für die Hilfe
Hallo!
ZitatDomSumme("EUR_IE";"SGK_IE";"[Monat]"<=" & [Monat]")
Zum Testen/Fehlersuchen in VBA, da man das dort gut sieht:
const FilterMonat as long = 3
dim FilterString as String
FilterString = "[Monat]"<=" & FilterMonat"
debug.print FilterString ' <-- wäre das der erwartete SQL-Ausdruck?
debug.print DSum("EUR_IE","SGK_IE",FilterString )
(Filterausdruck habe inhaltlich inkl. Fehler übernommen)
Gruß
Josef
Danke Josef
bin leider noch kein VBA Nutzer. Kann mir aktuell nur über Abfragen und Formeln weiterhelfen.
@Beaker s.a. Vielleicht gibt es ja einen Vorschlag meine Formel zu korrigieren.
Danke
Schau dir das einmal genau an:
"[Monat]" <= " & [Monat]"
Daraus entsteht dann:
DomSumme("EUR_IE";"SGK_IE";False)
Hallo Sardus,
Na dann helf' ich dir mal auf die Sprünge.
Da dein Filter keine Bedingung "von aussen" (z.B. ein Formularfeld) benötigt
(es wird nur ein Tabellenfeld mit sich selbst verglichen), muss du den Filter-
string auch nicht zusammensetzen
DomSumme("EUR_IE";"SGK_IE";"[Monat]<=[Monat]")
Wenn du jetzt vielleicht z.B. zusätzlich nach der Kostenart (hat die keine ID?),
die im Form irgendwo angezeigt wird, filtern willst, sieht die Sache schon anders
aus
DomSumme("EUR_IE";"SGK_IE";"[Monat]<=[Monat] AND Kostenart = " & txtKostenart)
(txtKostenart ist das Feld auf dem Form)
gruss ekkehard
[Monat]<=[Monat]
Wird ziemlich gleich sein. ;)
Uups, Knoten im Hirn ;)
DomSumme("EUR_IE";"SGK_IE";"[Monat] <= " & [Monat])
Hi,
zumindest kommt jetzt ein Ergebnis. Leider macht er jetzt in jeder Zeile die Gesamtsumme aus "EUR_IE" aber ich möchte ja das er pro Kategorie und pro Jahr (Monat 1-12) jedes mal neu mit der laufenden Summe beginnt. Vielleicht traue ich der Funktion auch zu viel zu :-)
Zitatich möchte ja das er pro Kategorie und pro Jahr (Monat 1-12) jedes mal neu mit der laufenden Summe beginnt
Jetzt bist Du schon mal drei Schritte weiter: Du hast formuliert, was genau Du willst.
Wenn jetzt noch Kategorie in Deinen Feldern vorkommen würde ...
Ich nehme ersatzweise Kostenart.
Eine Abfrage (statt Feldausdruckgestammel) könnte dann etwa so aussehen:
SELECT
T.*,
DSum("EUR_IE", "SGK_IE", "Monat <= " & T.Monat & " AND Jahr = " & T.Jahr & " AND Kostenart = " & T.Kostenart) AS EUR_IE_KUM
FROM
SGK_IE AS T
Hi,
es funktioniert ;D ;D
Und es ergibt sich gleich die nächste Frage. Wenn in diesem Beispiel
SELECT
T.*,
DSum("EUR_IE", "SGK_IE", "Monat <= " & T.Monat & " AND Jahr = " & T.Jahr & " AND Kostenart = " & T.Kostenart) AS EUR_IE_KUM
FROM
SGK_IE AS T
"Kostenart" ein "Text" ist- und keine Zahl was muss ich ergänzen ? Denn mit meinem Zahlen geht es.
Danke
ZitatDenn mit meinem Zahlen geht es.
Dann bleib dabei, siehe #8
Zitatder Kostenart (hat die keine ID?),
Zitat"Kostenart" ein "Text" ist- und keine Zahl was muss ich ergänzen ? Denn mit meinem Zahlen geht es.
Von außen zugeführte Vergleichswerte müssen datentypabhängig formatiert werden. Du willst sicherlich nicht beleidigt werden, indem man etwas zum Blind-Kopieren vorwirft, sondern Du willst bestimmt etwas lernen:
Grundlagen - SQL ist leicht (19) - SQL in VBA und VBA in SQL (https://www.ms-office-forum.net/forum/showpost.php?p=2060307&postcount=2)
Hi,
so lange probiert und gelesen.
Mein Ansatz scheint zu funktionieren wenn ich diese ' setze. Zufallsprodukt oder hat das so seine Richtigkeit ?
DomSumme("EUR_IE";"SGK_IE";"Monat <= " & [SGK_IE].[Monat] & " AND Kostenart = '" & [SGK_IE].[Kostenart] & "'")
Wenn Ihr darin keine Probleme seht wäre es evtl. auch eine Lösung für andere Anfänger :-)
ZitatZufallsprodukt oder hat das so seine Richtigkeit ?
Der zweite Punkt trifft zu.
Den ersten Punkt musst Du Dir selber beantworten. Langfristig wäre geplantes Tun aus Wissen heraus besser als Zufall.
Hallo,
das mit den Hochkomma ist so richtig.
Aber es gibt auch noch ein Aber.
Für die Kostenart sollte es auch eine Tabelle geben mit einem Primärschlüssel (Zahl > Autowert).
Und im Regelfall wird dann auch über diese Zahl gefiltert.
Das würde dann so aussehen:
DomSumme("EUR_IE";"SGK_IE";"Monat <= " & [Monat] & " AND KostenartID = " & [KostenartID])
Danke für eure Hilfe !
Das mit der ID für meine Kategorien (z.b. Kostenart) muss ich mit der Zeit einarbeiten.
Hallo,
Zitatmuss ich mit der Zeit einarbeiten.
mache es leiber gleich, es wird sonst immer aufwendiger.
Guten Morgen zusammen,
bin mir nicht sicher ob es besser ist eine neues Thema zu eröffnen. Da ihr mir hier zu dem Thema schon geholfen habt mache ich hier mal weiter.
Die Lösung mit der laufenden Summe funktioniert. Nun gibt es eine weitere Herausforderung in den Daten. Es passiert aktuell, dass es in den Daten auch Monate gibt in denen es keine Daten gibt. Dann ist es aktuell so, dass es eine "Monatslücke" gibt. Die Summe passt per Dezember aber gerne hätte ich für jeden Monat einen Wert damit es in der späteren Visualisierung sauber ist. Bsp.: in rot der akt. fehlende Monat(Mai)hier soll dann Wert fortgeführt werden.
Hoffe das kann man verstehen. Danke
Jan 100
Feb 200
Mrz 300
Apr 400
Mai 400
Jun 500
.
.
.
Dez 1100
Dass es eine "Lücke" gibt, erkennst Du daraus, dass Du eine Vorstellung von Vollständigkeit hast.
Das überträgt man auf seine Abfrage, auch dort braucht man als eine vollständige Menge, um Fehlendes zu erkennen und auch zu ergänzen.
SELECT
M.Monat,
IIF(A.Anzahl IS NULL, 0, A.Anzahl) AS Anzahl,
A,*
FROM VollstaendigeMenge AS V LEFT JOIN AktuelleMenge AS A
ON M.Monat = A.Monat
Durch den OUTER JOIN gibt es immer alle Monate, es gibt Datensätze, wo man nun NULL-Inhalte von Anzahl verarbeiten kann.