Hallo zusammen,
auf meiner Suche nach dringend nötiger Hilfe bei einer DSum Formel bin ich auf eurer Forum gestoßen :-)
Ich habe bereits 2 volle Tage an diesem Problem verbracht und möchte mich nun bei den Profis nach Hilfe umschauen.
Ich habe eine Beispiel-Excel-Datei angehangen in der ich unter Problem 1 die Ausgangsdaten dargestellt habe, welche im Tab Problem 2 gruppiert bzw. summiert sind.
Ich möchte anhand mehrerer Kriterien die [SumofSums] in einem weiteren Feld kumulieren.
Dabei soll beachtet werden, dass NUR bzw. JEWEILS die [SumofSums] kumuliert werden sollen,
bei denen [Name1] und [Name2] pro [Sales Date] "übereinstimmen", sodass dementsprechend mehrere Summen kumuliert werden.
Meine Lösung hierfür sieht bisher so aus und sollte mMn richtig sein, ist Sie aber anscheinend nicht
DSum("[SumOfSums]";
"00_Tabelle";
"[WD]<=" & [WD] & "
AND [YEAR]<=" & [YEAR] & "
AND [MONTH]<=" & [MONTH] & "
AND [NAME1]='" & [NAME1] & "'
AND [NAME2]='" & [NAME2] & "'")
Sehr seltsam finde ich, dass es funktioniert, wenn ich die Query nur mit Daten aus einem Monat in einem Jahr laufen lasse... (vorgefilterte Daten, nicht der gleiche Datensatz)
DSum("[SumOfSums]";
"00_Tabelle";
"[WD]<=" & [WD] & "
AND [NAME1]='" & [NAME1] & "
'AND [NAME2]='" & [NAME2] & "'")
...außer, dass er mir hier für den 1 WD die Sum doppelt akkumuliert.
Ich hoffe man versteht mein Problem und ihr könnt mir helfen.
Ansonsten gerne Fragen. Vielen Dank schon mal!
Hallo,
also wenn Du nach Datum filtern willst, darfst Du nicht Jahr und Monat trennen. Das Datum an sich ist ja eine fortlaufende Kommazahl. Wenn Du alles haben willst was vor dem 31.05.2017 ist, dann darfst Du doch nicht sagen
Monat <= 5 und Jahr <=2017
den 01.06.2016 bekommst Du so z.B. nicht, weil die 6 nicht kleiner als die 5 ist...
sondern Du solltest das Argument richtig schreiben:
"((([WD])<=" & [WD] & ") AND (([NAME1])='" & [NAME1] & "') AND (([NAME2])='" & [NAME2] & "') AND (([Date])<=" & Format([Date]; "\#yyyy-mm-dd#\") & "))"
Wobei Du das Feld "Date" anders benennen solltest, den Befehl Date() gibt es in Access ja schon, ist reserviert...
Statt DSum würde ich eher eine Unterabnfrage verwenden, die ein Sklalar ausgibt.
SELECT Year,
Month,
Workday,
Date,
Name1,
Name2,
SumOfSum,
( SELECT SUM( SumOfSum )
FROM PROBLEM2
WHERE Name1 = p.Name1 AND
Name2 = p.Name2 AND
Year * 10000 + Month * 100 + Workday <= p.Year * 10000 + p.Month * 100 + p.Workday ) AS SumOfAccumulated
FROM PROBLEM2 p
ORDER BY 5, 6, 1, 2, 3;
Die ersten Zeilen der Abfrage sehen dann so aus.
Query1 Year | Month | Workday | Date | Name1 | Name2 | SumOfSum | SumOfAccumulated | 2014 | 12 | 2 | 02.12.2014 | A | D | 66 | 66 | 2014 | 12 | 4 | 04.12.2014 | A | D | 57 | 123 | 2014 | 12 | 10 | 12.12.2014 | A | D | 96 | 219 | 2014 | 12 | 14 | 18.12.2014 | A | D | 83 | 302 | 2014 | 12 | 20 | 30.12.2014 | A | D | 151 | 453 | 2015 | 12 | 2 | 02.12.2015 | A | D | 81 | 534 | 2015 | 12 | 4 | 04.12.2015 | A | D | 77 | 611 | 2015 | 12 | 5 | 07.12.2015 | A | D | 63 | 674 | 2015 | 12 | 6 | 08.12.2015 | A | D | 96 | 770 | 2015 | 12 | 7 | 09.12.2015 | A | D | 113 | 883 | 2015 | 12 | 11 | 15.12.2015 | A | D | 98 | 981 | 2015 | 12 | 12 | 16.12.2015 | A | D | 81 | 1062 | 2015 | 12 | 16 | 22.12.2015 | A | D | 57 | 1119 | 2016 | 9 | 1 | 01.09.2016 | A | D | 76 | 1195 | 2016 | 9 | 2 | 03.09.2016 | A | D | 96 | 1291 | 2016 | 9 | 7 | 09.09.2016 | A | D | 132 | 1481 | 2016 | 9 | 7 | 10.09.2016 | A | D | 58 | 1481 | 2016 | 9 | 10 | 14.09.2016 | A | D | 90 | 1571 | 2016 | 9 | 18 | 26.09.2016 | A | D | 52 | 1623 | 2016 | 10 | 12 | 19.10.2016 | A | D | 162 | 1785 | 2016 | 10 | 15 | 24.10.2016 | A | D | 91 | 1876 | 2016 | 10 | 17 | 26.10.2016 | A | D | 82 | 1958 | 2016 | 10 | 19 | 28.10.2016 | A | D | 95 | 2053 | 2016 | 10 | 20 | 31.10.2016 | A | D | 171 | 2224 | 2016 | 11 | 7 | 10.11.2016 | A | D | 93 | 2317 | 2016 | 11 | 10 | 15.11.2016 | A | D | 61 | 2378 | 2016 | 11 | 16 | 23.11.2016 | A | D | 50 | 2428 | 2017 | 1 | 0 | 01.01.2017 | A | D | 88 | 2516 | 2017 | 1 | 3 | 04.01.2017 | A | D | 76 | 2592 |
Die Kumulierung kann natürlich auch jedes Jahr bzw. Monat/Jahr neu beginnen - aber das habe ich nicht aus der Beschreibung herauslesen können. |