6 Stimmen

Mehrere Gruppen in Jasper Reports

Ich möchte in iReport mehrere Gruppen erstellen und die Daten sollen gruppenweise angezeigt werden. Zum Beispiel: Zuerst sollen die Daten der Gruppe 1 vollständig gedruckt werden, dann,


Gruppe 1:


Moduldaten Danach möchte ich die Daten der Gruppe 2 vollständig drucken

Gruppe 2:


Kategoriedaten

Ich verwende die Result Set-Datenquelle.

Kann mir jemand dabei helfen?

4voto

Tom Punkte 6513

Jasper-Berichte funktionieren genau auf diese Weise, solange die Abfrageergebnisse ordnungsgemäß sortiert sind.

Zum Beispiel, nehmen wir an, Sie gruppieren nach einem Feld namens "MY_GROUP" und es hat die Werte "GRUPPE A" und "GRUPPE B". In Ihrem Bericht erstellen Sie eine Gruppe für das Feld "MY_GROUP". Stellen Sie in Ihrer Abfrage sicher, dass MY_GROUP das erste Feld in Ihrer ORDER BY-Klausel ist. Dies können Sie auch in iReports erreichen, indem Sie das Feld "MY_GROUP" als erstes Feld im Abschnitt "Sortierungsoptionen" der Berichtsabfrage hinzufügen.

Nun, da Sie Ihre Gruppe hinzugefügt und ordnungsgemäß sortiert haben, sehen Ihre Ergebnisse so aus:

Header - GRUPPE A Detail - GRUPPE A Fußzeile - GRUPPE A Header - GRUPPE B Detail - GRUPPE B Fußzeile - GRUPPE B

Genau wie Sie es wünschen. Meine Vermutung ist, dass Sie Ihre Abfrageergebnisse nicht ordnungsgemäß sortiert haben. Dies könnte dazu führen, dass mehrere Gruppierungen für GRUPPE A, GRUPPE B usw. alle durcheinander sind.

2voto

Eric Hydrick Punkte 3271

Wenn Gruppen in iReport nicht alle Daten zusammenhalten, verwenden Sie Unterberichte. Wenn Jasper zu einem Unterbericht gelangt, führt er den gesamten Unterbericht aus und fügt das gesamte darin enthaltene in den Bericht ein. Sie könnten etwas ähnliches haben:

Unterbericht 1 - Gruppe 1 Gruppe 1 erster Datensatz Gruppe 1 zweiter Datensatz Gruppe 1 dritter Datensatz ... Gruppe 1 letzter Datensatz Unterbericht 2 - Gruppe 2 Gruppe 2 erster Datensatz Gruppe 2 zweiter Datensatz Gruppe 2 dritter Datensatz ... Gruppe 2 dritter Datensatz

2voto

achecopar Punkte 364

Es ist genau so, wie Tom gesagt hat. Jasper Reports Gruppen ordnen die aus der Abfrage abgerufenen Daten nicht, sie nehmen sie einfach in der Reihenfolge, in der sie kommen.

Um die Informationen gruppenweise anzuzeigen, müssen Sie der Abfrage ein ORDER BY hinzufügen, damit die Zeilen, die der Bericht erhält, bereits geordnet sind.

0voto

TheStoneWorker Punkte 39

Es gibt also ein Problem, das auftritt, wenn Sie mehrere Gruppenkopfzeilen verwenden. Der erste Header verhält sich wie erwartet, geordnet nach Spaltenwert A, nur bei eindeutigen Werten. Der 2. Header, der Spaltenwert B verwendet, wird bei jedem Eintrag gedruckt, obwohl es sich um nicht eindeutige Werte handelt.

  1. Theoretisch sollte es Ihnen möglich sein, ORDER BY zu verwenden:

    ORDER BY ValueA, ValueB

um den Bericht ordnungsgemäß anzuzeigen, vorausgesetzt, Sie verwenden sql, plsql, usw... Bei mir ist das jedoch nicht passiert, obwohl es bei anderen zu funktionieren scheint.

  1. Verwenden Sie Unterberichte, um die geringfügigen Unterschiede über eindeutige Berichte anzufügen. Sie erstellen einen Hauptbericht mit leeren Details. Dann erstellen Sie eindeutige Berichte, um als Unterberichte zu dienen. Schließlich verwenden Sie das Unterberichtselement, um die Werte in den Hauptbericht zu verknüpfen. Obwohl dies eine Menge Arbeit bedeutet und zu wiederholtem Code führen kann.
  2. Ein trickreicher Weg, den ich benutzte, war: Eine Mischung aus "Print When Expressions" mit logischen booleschen Ausdrücken mit 2 Gruppenkopfzeilen und einem Spaltenkopf. Boolesche Ausdrücke:

    $F{QUERY}.equals(Query1) && ($P{P_Typequery}.equalsIgnoreCase("QueryA") && $P{P_parameter} == null)

und

$F{QUERY}.equals(Query1) && ($P{P_Typequery}.equalsIgnoreCase("P_QueryA") && $P{P_parameter} != null) 

mit zwei Gruppenkopfzeilen und einem Spaltenkopf. Der Spaltenkopf wird nicht für jede Zeile wiederholt, daher weisen Sie einem der Booleschen Ausdrücke sein "Druck wenn" zu, damit er nicht immer gedruckt wird. Der erste Gruppenkopf wiederholt sich nicht für jede Zeile und funktioniert. Der 2. Gruppenkopf wird verwendet, wenn Sie möchten, dass er sich für jeden eindeutigen Wert wiederholt, da er sich immer für jede Zeile druckt, und Sie verwenden den anderen Booleschen Ausdruck für sein "Druck wenn". Hoffentlich hilft es.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X