Wenn Sie auf der Gruppenebene Berechnungen, z.B. Mittelwerte, durchführen wollen, gibt es einige Fallstricke:
- Die in JR eingebauten Funktionen wie "avg" arbeiten auf Gruppenebene nicht immer exakt.
- Komplexere Formeln auf Gruppenebene in Variablen abzubilden und diese dann das Quelle für Textfelder zu nehmen hat bei uns nicht geklappt.
Hier unser Vorgehen:
- Definieren Sie auf der Ebene der jew. Gruppe eine Variable mit der Gesamtsumme, und eine mit der Summe der zu mittelnden Werte. Diese Variablen haben als "reset Type" die jew. Gruppierungsebene.
- Im Textfeld, das Sie ausgeben, verwenden Sie dann die Berechnungsformel, z.B. einen Quotienten. Verwenden Sie für die Berechnung nicht eine neue Variable, sondern fügen Sie die Formel direkt in das Textfeld ein.
Im folgenden ein Beispiel: Wir haben eine Absolventenliste pro Studiengang und Semester, darin werden dann Mittelwerte von Abschlussnoten gebildet. Die Datenquelle hat summierte Zeilen pro Note:
JasperReports-Handbuch notenschnitt daten.png
Im obigen Beispiel haben wir in der Zeile 5 eine Absolventin mit der Note 1,1. In der letzten Zeile haben wir zwei Absolventinnen mit der Note 1,2.
Würden wir den Notenschnitt manuell berechnen, müßten wir die Notensumme (Spalte H*K) ermitteln, hier wäre der Wert 32,3. Die Summe der Absolventen in Spalte K wäre 16, d.h. der Notenschnitt wäre 32,3/16 = 2,02.
In JasperReports wäre der Entwurf wie folgt:
JasperReports-Handbuch notenschnitt design1.png
Wir haben eine Variable "Summe_1" auf der Ebene des Semester-Bandes, die im obigen Excel der Summe der Spalte "Summe" entspricht.
Außerdem haben wir eine Variable "Notensumme" mit der Formel $F{Note}*$F{Summe}, auf der Ebene der Gruppe "Semester". Achten Sie drauf, dass Sie als Typ "java.lang.Double" nehmen, damit Sie keine Rundungsfehler bekommen.
Der Quotient wird dann im Textfeld gebildet, das den Notenschnitt auf Semesterebene enthält, und auf zwei Nachkommastellen gerundet:
JasperReports-Handbuch notenschnitt design2.png
Das Textfeld selbst muss bei "Evaluation time" den Wert "Group" haben, und bei "Evaluation group" dann den Wert der Gruppe "Semester". Und hier das Ergebnis in der Vorschau:
JasperReports-Handbuch notenschnitt vorschau.png
Der Wert 2,02 stimmt mit unserer manuellen Berechnung überein.