Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Summer der letzten 12 Wochen bilden - Ich weiß nicht wie





Frage

Hallo zusammen, ich habe eine Datenbank mit wöchentlichen Sales Zahlen. Diese sieht aus wie folgt Datum Land Umsätze 05.10.08 DE 100 05.10.08 AT 150 05.10.08 CY 120 12.10.08 DE 200 12.10.08 AT 300 12.10.08 CY 240 19.10.08 DE 110 19.10.08 AT 90 19.10.08 CY 160 26.10.08 DE 500 26.10.08 AT 300 26.10.08 CY 230 Jeden Sonntag kommen neue Sales Zahlen hinzu. Ich würde es nun gerne schaffen, daß Access mir Summen bildet der letzten 12 Wochen pro Datum. Das heiß, Access soll sich das Datum 26.10.08 nehmen und dieses zusammenzählen mit dem 19.10.08, 12.10.08, 05.10.08 usw. Insgesamt eben 12 Wochen.. Das gleiche für den 05.10.08, 12.10.08 usw. (Die Tabelle ist natürlich weitaus größer und hat vorne wie hinten noch einige Datensätze mehr. In Excel konnte ich das mit einer Art Sumif Funktion nachbilden die ich aber so nicht in Access übersetzt bekomme. Kann mir vieleicht jemand helfen? Vielen Dank

Antwort 1 von RalfH

Morgen,
meinst Du pro Quartal? 1 Quartal= 12 Wochen

Dann könnte man in einer Abfrage ein neues Feld erstellen:
Quartalermitteln:Format([DeinDatumsfeld];"q")


Und somit könnte man alle Saleswerte des Quartals zusammenfassen und summieren.

Antwort 2 von lorf55

Hallo rebusss,
meine Variante ist eine Abfrage, die für die letzten 3 Monate (Monat -3) zusammenzählt:
SELECT S.Datum, S.Land, 
   (SELECT Sum(S1.Umsätze)  FROM Sales AS S1
     WHERE  (S1.Land=S.Land) and (S1.Datum>DateValue(Day([S.Datum]) & "." & Month([S.Datum])-3 & "." & Year([S.Datum])  )   ) And (S1.Datum<=S.Datum)
    ) AS [Summe von Umsätze]
FROM Sales AS S
GROUP BY S.Datum, S.Land;


Gruß
lorf

Antwort 3 von lorf55

Nachtrag:

Zitat:
Summen bildet der letzten 12 Wochen pro Datum
ungleich
Zitat:
Quartalermitteln:Format([DeinDatumsfeld];"q")

denn das ergibt nur das statische Jahresquartal, aber nicht 3 Monate ab Datum rückwärts.

Aber eigentlich wollte ich noch für den besseren Überblick diese Ausgabetabelle der Abfrage unterbringen:
Datum		Land	Summe von Umsätze
21.09.2008	AT	3,00 €
21.09.2008	CY	6,00 €
21.09.2008	DE	2,00 €
28.09.2008	AT	103,00 €
28.09.2008	CY	56,00 €
28.09.2008	DE	102,00 €
05.10.2008	AT	253,00 €
05.10.2008	CY	176,00 €
05.10.2008	DE	202,00 €
12.10.2008	AT	553,00 €
12.10.2008	CY	416,00 €
12.10.2008	DE	402,00 €
19.10.2008	AT	643,00 €
19.10.2008	CY	576,00 €
19.10.2008	DE	512,00 €
26.10.2008	AT	940,00 €
26.10.2008	CY	800,00 €
26.10.2008	DE	1.010,00 €


Gruß
lorf

Antwort 4 von rebusss

Hallo zusammen,

prima. Genau das war es was ich wollte. Die Sache mit den Quartalen hatte ich mir auch überlegt aber funktionierte eben aus den genannten Gründen nicht. Ich möchte praktisch ein "roll forward" Quartal haben welches dann am Quartalsende ein echtes Quartal ergibt.

Das scheint Lorf ja nun geschaft zu haben. Vielen Dank schon einmal. Ich werde es morgen glecih testen und berichten ob alles.

Vielen Dank nochmals an alle für eure Hilfe

Antwort 5 von rebusss

Hallo lorf,

es ist mir jetzt etwas peinlich aber ich bekomme die SQL Abfrage nicht auf meine Feldnamen übersetzt. Ich habe es so versucht
Zitat:
SELECT [Tbl Sales MD].Date, [Tbl Sales MD].Company, (SELECT Sum([Tbl Sales MD].Sales amount) FROM [Tbl Sales MD]1
WHERE ([Tbl Sales MD].country=[Tbl Sales MD].country) and ([Tbl Sales MD].Date>DateValue(Day([[Tbl Sales MD].Date]) & "." & Month([[Tbl Sales MD].Date])-3 & "." & Year([[Tbl Sales MD].date]) ) ) And ([Tbl Sales MD].date<=[Tbl Sales MD].Date)
) AS [Summe von Umsätze], [Tbl Sales MD].[Sales amount]
FROM Sales AS S, [Tbl Sales MD]
GROUP BY [Tbl Sales MD].Date, [Tbl Sales MD].Company, [Tbl Sales MD].[Sales amount];


Aber da gibt er mir einen Syntaxfehler aus. Was habe ich denn da falsch geschrieben?

Mein Tabellenname lautet Tbl Sales MD und die Feldnamen lauten

Date, Company, Sales amount

Ich versuche es paralell auch hinzubekommen. Vielen Dank für die Hilfe

Antwort 6 von lorf55

Hallo rebusss ,
die neue Variante ist:
SELECT S.Date, S.Company, 

   (SELECT Sum(S1.[Sales amount])  FROM [Tbl Sales MD] AS S1
     WHERE  (S1.country=S.country) and (S1.Date>DateValue(Day([S.Date]) & "." & Month([S.Date])-3 & "." & Year([S.Date]) ) ) And (S1.Date<=S.Date)
    ) AS [sum of Sales amount]

FROM [Tbl Sales MD] AS S
GROUP BY S.Date, S.Company, S.[Sales amount];


Das S brauchte nicht ersetzt werden, denn FROM [Tbl Sales MD] AS S heißt "von (Tabelle) [Tbl Sales MD] als S ". S ist also eine Abkürzung (wie S1 auch). Die Tabelle [Tbl Sales MD] wird sozusagen 2x durchlaufen. Im äußeren SELECT wird ein Datensatz und im inneren SELECT wird dieselbe Tabelle nochmal durchlaufen und alle Datensätze gesucht, wo die WHERE-Bedingung zutrifft und genau für diese Datensätze die Umsatzsumme gebildet und als [sum of Sales amount] ausgegeben und mit GROUP BY gruppiert.
Das ist sozusagen SQL von der Sorte "Have fun".

Gruß
lorf

Antwort 7 von lorf55

Im äußeren SELECT wird ein Datensatz und im inneren SELECT ...

soll heißen

Im äußeren SELECT wird ein Datensatz der Tabelle gelesen und im inneren SELECT ...

Antwort 8 von rebusss

Puhhhh, also verstanden habe ich deine Antwort nicht aber es funktioniert auch leider nicht.

Meine Tabelle läuft vom 06.01.08 bis zum aktuell 02.11.08. Gebe ich das SWL so in Access ein, bekomme ich als Fehler erst einmal das er das Feld country nicht findet. Das ist aber weniger das Problem. Also das
Zitat:
WHERE (S1.country=S.country)
in WHERE (S1.company=S.company) geändert.

Nun kommt die Fehlermeldung das der Kriterienausdruck unverträglich ist. Ich bin dann mal mit einem Kollegen drübergegangen der meinte es müsse an den -3 liegen. Es passiert wenn Access versucht ein Datum >3 (März, Februar, Januar) zu berechnen. Da kommt access wohl ins schleudern weil nicht automatisch zu Dezember bzw. November übergesrpungen wird. Wirklich verifizieren ob das stimmt kann ich aber leider nicht.

Ich hoffe ich habe das einigermaßen verstänldich erklärt. Ein Lösung dafür wußt er allerdings auch nciht. Hast du noch eine Idee?

Vielen Dank nochmals

Antwort 9 von lorf55

Komisch, in AW5 kannte er noch ein "country"
Zitat:
WHERE ([Tbl Sales MD].country=[Tbl Sales MD].country)


Wenn du einfach ersetzt, wie es gerade zu passen scheint, wird es garantiert nichts. Versprochen.

Wie sieht denn deine [Tbl Sales MD[/b]] wirklich aus (wenn es die denn noch ist)? Ich meine Spaltennamen, Typ und 2 oder 3 Beispieldaten.

Gruß
lorf

Antwort 10 von rebusss

Hallo,

du hast recht. Antwort 5 hatte ich die Countries übersehen. Ich hatte aus Gründen der einfachheit ein bißchen was weggelassen wobei ich das es kein Problem darstellen würde. Sorry. Hier also nun nochmals alles und wie ich mir wünsche das es aussehen würde.

Als meine Table sieht aus wie folgt:

Der Name lautet Tbl Sales MD

Darin gibt es die Spalten

Date formattiert als Datum
Company formatiert als Text
Curreny formatiert als text
Sales amount formatiert als number
Open AR formatiert als Zahl

Für Sales gibt es nur eine Zeile in der Werte stehen pro Datum und company. Für open AR gibt es mehre Zeilen pro Datum und company welches in Summe die komplette AR des Datums ergibt.

Ich habe einen Screenshot der Tabelle hochgelanden. Du findest dieses hier: http://www.bilderhosting.info/112151.html

So nun kommt die ganze Krux was ich eigentlich vor habe.

Die Sales Zahlen bekomme ich auf einer wöchentlichen Basis. Die AR bekomme ich auch wöchentlich sind aber natürlich bereits kumuliert. Nun müßte ich es irgendwie schaffen zu berechen:

DSO: Open AR / Sales der letzen 12 Wochen * 91

Das Problem habe ich eben in den Sales der letzen 12 Wochen. Beides dann natürlich gruppiert per Datum und company.

Das ist jetzt aber wirklich alles was ich vorhabe :-) Eine Idee wie ich das bewerkstelligen könnte?

Vielen Dank und einen schönen Abend.

Antwort 11 von lorf55

Neue Variante:
Summe der SalesAmount:
SELECT S.Date, S.Company, 
    (SELECT Sum(S1.[Sales amount])  FROM [Tbl Sales MD] AS S1
      WHERE  (S1.Company=S.Company) and (S1.Date>  DateValue(Day(S.Date) & "." & Month(S.Date)-3 & "." & Year(S.Date)  )   ) And (S1.Date<=S.Date)
   ) AS [Summe Umsätze]
FROM [Tbl Sales MD] AS S
GROUP BY S.Date,S.Company;



Summe Open AR pro Date und Company
SELECT O.Date, O.Company, 
  (SELECT sum(O1.[Open AR]) FROM [Tbl Sales MD] AS O1
     WHERE (O1.company=O.company)  And (O1.Date=O.Date)
  ) AS Ausdr1
FROM [Tbl Sales MD] AS O
GROUP BY O.Date, O.Company;



DSO:
SELECT S.Date, S.Company, 
  (SELECT Sum(S1.[Sales amount])  FROM [Tbl Sales MD] AS S1
      WHERE  (S1.Company=S.Company) and (S1.Date>  DateValue(Day(S.Date) & "." & Month(S.Date)-1 & "." & Year(S.Date)  )   ) And (S1.Date<=S.Date)
   ) AS [Sales der letzen 12 Wochen],
  (SELECT sum(O1.[Open AR]) FROM [Tbl Sales MD] AS O1
     WHERE (O1.company=S.company)  And (O1.Date=S.Date)
  ) AS [Summe OpenAR],
 [Summe OpenAR] / [Sales der letzen 12 Wochen] * 91 as DSO

FROM [Tbl Sales MD] AS S
GROUP BY S.Date, S.Company;


Und jetzt du.

Gruß
lorf

Antwort 12 von lorf55

Ich sehe gerade, die -1 vom Testen in DSO muss gegen -3 getauscht werden.

Antwort 13 von Rebusss

Hi Lorf,

WAU. Ich fasse es nicht. Ich werde mir das morgen gleich mal ansehen. Heute komme ich leider nicht mehr an die Daten ran. Finde ich auf jeden Fall super das du mir so hilfst!

Eine kleine Frage habe ich aber. Diese SQL setze ich alle zusammen in ein Access query? Vermutlich eine blöde Frage........Ich denke logischerweise in eine da du mit diesen SQL durch diesen as Befehl die Tbl Sales MD sozusagen rund 5 - 6 mal einfügst.

Ich werde wieder berichten

Riesengroßer Dank nochmals

Antwort 14 von Rebusss

Jetz wo ich mir die SQL nochmals anschaue ist es logisch das die alle in ein Query kommen. Sagte ich doch, Böde Frage :-)

Antwort 15 von rebusss

So, beim probieren ist es mir nun doch aufgefallen.

Es muss natürlich nur das letze SQL eingefügt werden da dies alle 2 oberen vereint. Man sollte doch immer liber probieren bevor man komische Fragen stellt.

Anyway:

Ich habe immer noch das Problem, daß mir Access die Fehlermeldung bringt, daß der Kriterienausdruck unverträglich ist.

Zuerst läuft der SQl und ich bekomme etwas angezeigt. Ca. 2 - 3 Sekunden später erscheint die Fehlermeldung "Datentypen in Kriterienausdruck unverträglich"

Dies passiert definitiv bei der Berechnung der Sales Zahlen wenn ich lediglich das erste SQL teste...... Irgendeine Idee?

Antwort 16 von lorf55

Der Kriterienausdruck ist der hinter WHERE. Wenn die SQL zuerst läuft und denn mit dem Fehler abbricht, hast du voraussichtlich irgendwo ein "schlechtes" Datum dazwischen. Das könnte z.B. ein leeres Feld sein.

Sortiere doch mal dein Date-Feld einmal aufsteigend und einmal absteigend und schau jedes mal, ob du irgendwelchen Mist entdeckst.
Dasselbe auch bei country machen; das steht ja auch im Kriterium.


Gruß
lorf

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: