2009-03-19 5 views
2

Ich versuche, eine Summe in einem MS Access-Bericht die folgende Art und Weise zu berechnen:MS Access Summe auf Gruppen, aber nicht auf Details

  • Group1header -

    Label
    • Group2header - Wert
      • Detail - Beispiel
      • Detail - Beispiel
    • Group2header - Wert
      • Detail - Beispiel
  • Group1footer [Summe von Group2header Wert]

Irgendwie, wenn mehr Detailzeilen erscheinen, die Summe in group1footer wird falsch berechnet (addiert Wert für jedes Detail).

Ich kann nicht die Summen in der Abfrage berechnen, da der „Wert“ a berechnet wird, bereits in der Abfrage (eine Unterabfrage zu vielen Zeilen zurückgeben würde):

(
    (
     (sl_ticketdetail.weight,0) * sl_ticketdetail.amount 
     - (
      SELECT SUM(sl_invoicedetail.amount) 
      FROM sl_invoicedetail 
      WHERE ticketdetailid = sl_ticketdetail.ticketdetailid 
     ) 
     /1000 
    ) 
    * sl_ticketdetail.cost 
) 
/1000 

Jede Idee, was könnte gehen falsch?

Antwort

0

Da die Gruppen2-Summen bereits in Ihrer Abfrage vorberechnet sind, werden sie für jede Ergebniszeile wiederholt und können daher (wie Sie herausgefunden haben) nicht zur Berechnung der Summen der Gruppe 1 verwendet werden.

Sie haben zwei Lösungen

1) vorge berechnen die Gruppe1 Summen in Ihrer Anfrage auch und melden Sie diese einfach liek Sie die Group2 tun beträgt

2) verwenden, um Code in der Gruppe 2 Fußzeile Format/print Ereignisse um den Wert zu erfassen und manuell einen laufenden Gruppe1 insgesamt erhöhen

I 1 sagen würde) ist die einfachste - 2) ist ein wenig behaart und führt manchmal zu ungenau Summen, wenn die Benutzer Seiten hin und her

1

Sagen Sie Ihre Ergebnisse wie folgt erhalten:

Group 1a 
    Group 2a 
     Foo1   1 
     Foo2   1 
     foo3   2 
    Group 2a Sum 4 
    Group 2b 
     Foo1   3 
     Foo2   3 
    Group 2a Sum 6 
Group 1a Sum 10 
Group 1b 
    Group 2a 
     Foo1   4 
     Foo2   1 
     foo3   2 
    Group 2a Sum 7 
    Group 2b 
     Foo1   4 
     Foo2   3 
    Group 2a Sum 14 
Group 1b Sum 21 

Dies ist das Verhalten würde ich erwarten. Ich konnte es tun, indem ich =Sum([value]) in einem ungebundenen Feld in jedem Gruppenfuß (und sogar in der Fußzeile des Berichts) setzte.

Ich weiß 'funktioniert für mich' ist nicht sehr hilfreich.

Haben Sie die Wertefelder des Details (oder die Zusammenfassungsfelder) mit demselben Namen wie die Datenquelle gekennzeichnet? Irgendwann hat MS Access seltsames Verhalten, wenn Ihre Felder denselben Namen wie ihre gebundene Datenquelle haben (ich nenne sie leicht umbenennen, also bin ich sicher, was ich im Code rede).

0

Sie wou Ich muss die Datensatzquelle des Hauptberichts haben, um die Summen für Gruppe 2 einzuschließen.Dann würden Sie einen Unterbericht mit einer anderen Datensatzquelle benötigen, die sich auf der Detailebene befindet.

Ich denke, Ihre beste Wette ist, die Summen in der Abfrage wegzulassen und lassen Sie einfach den Bericht die Summen auf den Details tun. Später möchte der Benutzer eventuell Summen für dasselbe Datum, aber eine andere Gruppierung (ja, Sie könnten eine andere Datensatzquelle erstellen). Dies sollte auch dann gelten, wenn ein Benutzer einen Filter auf den Bericht anwendet (Sie haben diese Option möglicherweise nicht angegeben oder nicht). Für ein anderes Feld als die Gruppierung.