JasperReport - Uhrzeiten auswerten

Thomas220

Mitglied
Hallo zusammen,
folgende Aufgabenstellung habe ich, kann sie aber nicht lösen:
In einem Report möchte ich zwei Gruppierungen festlegen. Eine Gruppierung nach Tornummer und eine Gruppierung nach der Uhrzeit im Halbstundentakt. Ausgewertet werden sollen die Ereignisse pro Tor und pro halber Stunde. Die Uhrzeit liegt kontinuierlich vor. als java.sql.Time.
Die Uhrzeit soll zwischen 13.00 und 20.00 Uhr ausgewertet werden.
Ich müsste nun Variablen kreieren, die folgendes Schema aufweisen:
E1300 = alle Ereignisse in der Zeit zwischen 13.00 und 13.29 Uhr
E1330 = alle Ereignisse in der Zeit zwischen 13.30 und 13.59 Uhr
E1400 = alle Ereignisse in der Zeit zwischen 14.00 und 14.29 Uhr
usw.
Aber irgendwie bekomme ich das nicht hin.
Code:
$F{zeit}.toString()>='13:00:00' && $F{zeit}.toString()<'13:30:00'
Das scheitert schon daran, das Strings nicht mit > oder < verglichen werden können. Lasse ich aber die Uhrzeit, wie sie ist, dann weiß ich nicht, wie ich die Uhrzeit schreiben soll. Also String mit ' und Uhrzeit?

Danke.
Thomas
 
Zu JasperReports kann ich leider nichts sagen, aber häufig ist es sinnvoll, diese Dinge nicht direkt im Bericht zu erledigen, sondern in die Datenbank auszulagern. Man legt pro Dimension (hier Uhrzeit) eine Tabelle an, die pro möglichem Wert eine Zeile und pro Gruppierungsart eine Spalte enthält. Das könnte beispielsweise so aussehen:
Code:
...
13:28  E1300
13:29  E1300
13:30  E1330
13:31  E1330
...
Im Bericht benötigt man dann nur noch einen Join auf diese Tabelle. Das hat den Vorteil, dass die Berichte einfacher werden, man es in verschiedenen Berichten verwenden kann und bei Änderung der Gruppierungskriterien zentral anpassen kann.
Falls es minutengenau ausreicht, hat man eine zusätzliche Tabelle mit 1440 Zeilen. Wenn man die Sekunden benötigt sind es 86400.
 
Hallo Meniskusschaden, vielen Dank für die Antwort und bitte entschuldige, dass ich erst heute reagiere.
Das mit dem Erstellen eigener Tabellen auf dem Server ist leider nicht möglich. Vielleicht mit Views? Muss ich mal gucken. Hat halt mit Fleißarbeit zu tun und der dazu benötigten Zeit.
Bis später,
Thomas
 
Die Fleißarbeit sehe ich an der Stelle eigentlich nicht. Man erzeugt sich beispielsweise mit zwei oder drei geschachtelten Schleifen (Stunde, Minute, ggf. Sekunde) die passende Anzahl an Zeilen, in die man zunächst nur die Werte der Uhrzeiten schreibt. Die Zeilenanzahl ändert sich dann ja nie wieder.
Danach kann man mit ein paar SQL-Befehlen (Abfrage Uhrzeit von/bis) die Kennzeichen für die Intervalle eintragen.
 
Vielleicht kannst du dir alternativ auch einfach eine Nummerierung der 30-Minuten-Intervalle aus der Uhrzeit berechnen. Da ich JasperReports nicht kenne, kann ich dazu zwar nichts Konkretes sagen, aber vielleicht hilft folgender Select Befehl trotzdem weiter. Er berechnet zu jeder Uhrzeit eine "halbe-Stunde-Nummer" zwischen 0 und 47:
Code:
SELECT zeit, (hour(zeit)*60 + minute(zeit)) div 30 FROM tabelle
Ein Ausschnitt des Ergebnisses könnte so aussehen:
Code:
13:28:00    26
13:29:00    26
13:30:00    27
13:31:00    27
Mir gefällt die Lösung über eine Tabelle aber besser.
 
Hallo Meniskusschaden, vielen Dank für die Lösungsvorschläge.
Ich glaube, der zweite gefällt mir besser. Teste es mal und melde mich wieder.
Thomas
 

Zurück
Oben