Zeilen- oder Spaltendimensionen werden in Kreuztabellen immer alphabetisch sortiert, egal wie die Sortierung in der Datenquelle ist. Das ist in der Regel kein Problem, aber wenn z.B. eine Zeilendimension anders sortiert werden soll, geht das nicht ohne weiteres. Hier ein Problembeispiel:
JasperReports-Handbuch kreuztab sortierung falsch.png
Das Balkendiagramm übernimmt die Sortierung nach dem Schlüssel der Gehaltsgruppe aus der Datenquelle. In der Kreuztabelle wird die Zeilendimension "Bezeichnung der Gehaltsgruppe" angezeigt, und diese sortiert alphabetisch, was an dieser Stelle aber unsinnig ist: Der Eintrag "Kein Einkommen" sollte ganz oben stehen.
Wir schauen uns zunächst die Definition der Kreuztabelle an:
JasperReports-Handbuch kreuztab sortierung richtig1.png
Die Zeilendimension sortiert aufsteigend nach Bezeichnungstext. Man kann auch keine alternative Expression als Sortierkriterium angeben. Wir müssen also einen Trick anwenden: wir nehmen den Sortierschlüssel mit in die "Bucket Expression" der Zeilendimension auf, und setzen ihn als Präfix davor:
JasperReports-Handbuch kreuztab sortierung richtig2.png
Danach ist die Sortierung richtig:
JasperReports-Handbuch kreuztab sortierung richtig3.png
Aber optisch ist das natürlich unschön, der Sortierschlüssel sollte am besten gar nicht angezeigt werden. Wir lösen das, indem wir den Anzeigetext wiederum so abwandeln, dass der erste Buchstabe nicht sichtbar ist. Java bietet dazu die Funktion "substring()":
JasperReports-Handbuch kreuztab sortierung richtig4.png
Und siehe da: die Sortierung und Anzeige ist perfekt:
JasperReports-Handbuch kreuztab sortierung richtig5.png
Dies ist nur ein Beispiel, wie man mit Hilfe von Java Expressions die Anzeige von Kreuztabellen variieren kann.