Aggregatfunktionen
Aggregatfunktionen
In den meisten Fällen müssen Gruppenberichte einige Zusammenfassungsinformationen anzeigen (wie: „Gesamt einer Gruppe“, „Anzahl der Gruppenelemente“ usw.). FastReport bietet Aggregatfunktionen zur Berechnung aggregierter Werte über einen bestimmten Datenbereich.
Die Aggregatfunktionen sind:
Funktion |
Beschreibung |
SUMME |
gibt die Summe eines Ausdrucks zurück |
MIN |
gibt den minimalen Wert eines Ausdrucks zurück |
MAX |
gibt den maximalen Wert eines Ausdrucks zurück |
AVG |
gibt den Durchschnittswert eines Ausdrucks zurück |
ANZAHL |
gibt die Anzahl der Zeilen (Reihen) im Datenbereich zurück |
Die Syntax aller Aggregatfunktionen (außer ANZAHL) ist ähnlich der der SUMME-Funktion:
SUMME(Ausdruck, Band, Flags)
SUMME(Ausdruck, Band)
SUMME(Ausdruck)
Die Parameter sind:
Ausdruck – der zu berechnende Ausdruck
Band – der Name des Datenbands, innerhalb dessen die Berechnung durchgeführt wird
Flags – ein Bitfeld mit Werten
1 : unsichtbare Bänder in die Berechnung einbeziehen
2 : das Aggregat als laufende Summe akkumulieren
(das Aggregat nicht zurücksetzen, wenn der aktuelle Datenbereich zurückgesetzt wird)
3 : (beide der beiden vorherigen Optionen)
Ein Ausdruck ist der einzige obligatorische Parameter, die anderen beiden sind optional. Dennoch wird empfohlen, die Bandparameter immer anzugeben, um Fehler zu vermeiden.
Die Aggregatfunktion „ANZAHL“ hat die folgende Syntax:
ANZAHL(Band, Flags)
ANZAHL(Band)
wobei die Parameter die gleiche Bedeutung wie oben haben.
Es gibt eine allgemeine Regel für alle Aggregatfunktionen: Ein Aggregat kann nur über ein Datenband berechnet werden und kann nur im Fußbereich dieses Bands verwendet werden, der einer von folgenden sein kann: Fußzeile, Seitenfußzeile, Gruppenfußzeile, Spaltenfußzeile oder Berichtsfußzeile (Zusammenfassungsband).
Wie funktionieren Aggregatfunktionen? Wir werden dies anhand unseres Gruppenberichtsbeispiels betrachten. Lassen Sie uns einige neue Elemente zum Bericht hinzufügen:

Das Feld Gruppe.“ItemsTotal“ im Datenband zeigt den aktuellen Bestellsumme an. Platzieren Sie ein „Text“-Objekt im Gruppenfuß, das das oben angegebene Aggregat SUMME enthält. Es wird die Summe aller Bestellungen anzeigen, die von dem gegebenen Kunden aufgegeben wurden. Mit einem Taschenrechner können wir überprüfen, ob das Ergebnis korrekt ist:

Aggregatfunktionen funktionieren so: Bevor ein Bericht ausgegeben wird, durchsucht FastReport den Inhalt des „Text“-Objekts, um Aggregatfunktionen zu finden. Die gefundenen Aggregatwerte sind mit den Datenbändern in ihren Parametern verknüpft (in unserem Beispiel ist „SUMME“ mit dem „MasterData1“-Band verknüpft). Während der Berichts-Ausgabe (wenn das Datenband angezeigt wird) werden die Werte der damit verknüpften Aggregatwerte berechnet. In unserem Fall werden die Werte des Feldes Gruppe.“ItemsTotal“ akkumuliert. Sobald der Gruppenfuß, der das Aggregat anzeigt, ausgegeben wurde, wird der Aggregatwert auf null zurückgesetzt, und der Zyklus wird für die nächste Gruppe wiederholt, und so weiter.
Was ist der Zweck des optionalen „Flags“-Parameters in Aggregatfunktionen? Berichte können einige oder alle Datenbänder verborgen haben. Wir müssen jedoch möglicherweise Aggregatwerte über alle Datenbänder berechnen, unabhängig davon, ob sie sichtbar sind oder nicht. In unserem Beispiel setzen Sie die „Sichtbar“-Eigenschaft des Datenbands auf falsch, um dessen Anzeige zu verhindern. Um dieses verborgene Datenband dennoch in die Berechnungen einzubeziehen, müssen wir den dritten, optionalen Parameter im Funktionsaufruf auf die Zahl 1 setzen, d.h.:
[SUMME(<Gruppe."ItemsTotal">,MasterData1,1)]
Dies erzeugt einen Bericht, der so aussieht:

Wenn der Wert des „Flags“-Parameters auf 2 gesetzt ist, wird der Aggregatwert nicht sofort zurückgesetzt, nachdem er angezeigt wurde: Das Aggregat wird zu einer „laufenden“ Berechnung für jede nachfolgende Ausgabe. Lassen Sie uns den Funktionsaufruf wie hier gezeigt ändern:
[SUMME(<Gruppe."ItemsTotal">,MasterData1,3)]
Der Wert „3“ ist eine Bitkombination von „1“ und „2“, was bedeutet, dass wir die unsichtbaren Bänder einbeziehen müssen, ohne die Summe nach jeder Gruppe zurückzusetzen. Als Ergebnis haben wir:

Wenn es eine Sichtbarkeitsbedingung im "OnBeforePrint"-Ereignis eines Bands gibt, haben die Flags keine Wirkung.