sichtlicher und leicht leserlicher Repo

Werbung
Reporting
mit Jasper
Aktuelle Geschäftszahlen, Umsatzinformationen, dynamische Auswertungen in Form übersichtlicher und leicht leserlicher Reports stehen
als Hilfsmittel strategischer Unternehmensführung hoch im Kurs. Gerade in der IT selber
wächst der Umfang des Reporting, weil hier
aus ITIL-Perspektive selbst die kleinste Anwendergruppe ein Servicenutzer ist, der Daten zu
Verfügbarkeit, Performance und Ressourcennutzung für seine Abrechnung benötigt. Bernd Erk
1
www.linuxtechnicalreview.de
Projekte
Berichte in Handarbeit zurechtzubasteln gehört in vielen Unternehmen am Monatsanfang
zum Tagesgeschäft. Die damit einhergehenden
Schwierigkeiten liegen aber auf der Hand: Die
manuelle Aufbereitung von Zahlen ist teuer,
fehleranfällig und oft schwer nachvollziehbar.
Außerdem lassen sich die Daten in vielen Fällen
nur schwer in anderen Medien weiterverwenden
oder in anderen Formaten ausgeben.
Freie Lösungen fürs Reporting
Neben den bekannten kommerziellen Lösungen
wie Crystal [1] oder Oracle Reports [2] oder
auch Microsoft Access [3], deren Berichtsfunktionen häufig zum Einsatz kommen, haben sich
in den letzten Jahren funktionsreiche OpenSource-Lösungen etabliert. Neben Pentaho [4]
oder dem Eclipse BIRT-Projekt [5] bietet hier
JasperSoft [6] mit JasperReports und iReport
Listing 1: Ausschnitt aus einem JRXML-File
01 <?xml version=“1.0“ encoding=“UTF-8“?>
02 <jasperReport xmlns=“http://jasperreports.sourceforge.net/jasperreports“
03 xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance“
04 xsi:schemaLocation=“http://jasperreports.sourceforge.net/jasperreports
05 http://jasperreports.sourceforge.net/xsd/jasperreport.xsd“ name=“AllVisits“
06 language=“groovy“ pageWidth=“595“ pageHeight=“842“ columnWidth=“504“
07 leftMargin=“70“ rightMargin=“21“ topMargin=“28“ bottomMargin=“42“>
08
09
<queryString>
<![CDATA[
10
SELECT logdate, COUNT(DISTINCT hostip)
11
FROM
12
loglines
13
WHERE
14
logdate BETWEEN CONCAT(YEAR(NOW()),‘-‘,MONTH(NOW()),‘-01‘) AND NOW()
15
16
AND [...]
]]>
17
</queryString>
18
<field name=“logdate“ class=“java.sql.Date“>
19
<fieldDescription><![CDATA[]]></fieldDescription>
20
</field>
21
<field name=“COUNT(DISTINCT hostip)“ class=“java.lang.Long“>
22
<fieldDescription><![CDATA[]]></fieldDescription>
23
</field>
24
<title>
25
<band height=“79“ splitType=“Stretch“>
26
<image>
27
<reportElement x=“201“ y=“0“ width=“302“ height=“31“/>
28
<imageExpression class=“java.lang.String“>
29
<![CDATA[„LTR_path.png“]]></imageExpression>
30
31
</image>
</band>
32
</title>
33
[...]
34
<pageFooter>
35
<band height=“54“ splitType=“Stretch“/>
36
</pageFooter>
37
<summary>
38
39
<band height=“42“ splitType=“Stretch“/>
</summary>
40 </jasperReport>
www.linuxtechnicalreview.de
2
Projekte
als Teil seiner Open
Source Business Intelligence Suite ein umfassendes Framework an.
Während Eclipse BIRT eher
auf Entwickler zugeschnittenen ist, hat Pentaho mit seinen
Lösungen eine im Vergleich mit
JasperSoft ähnliche Produktpalette im
Bereich Reporting. (Nebst der zugehörigen ETL- (Extract, Transform, Load) und
OLAP-Werkzeuge (Online Analytical Processing)). JasperReport ermöglicht seinen Reporting-Tools allerdings die einfache Integration in
andere Applikationen.
iReport, bei jasperSoft als Reportdesigner verantwortlich für die Erstellung von Berichten,
sowie der JasperServer für deren spätere Generierung und Verteilung basieren auf der gleichen Java-Bibliothek JasperReport. Als zentrale
Library unterstützt JasperReport eine Vielzahl
von Datenquellen und Formaten und ist im Bereich der Reportvisualisierung im Vergleich zu
Pentaho und BIRT die ausgereifteste Lösung.
Ihre besondere Stärke ist die einfache Integration in bestehende Anwendungen. Die durch
iReport erzeugten JRXML-Dateien (Listing 1),
bilden die Schnittstelle zwischen iReport und
JasperServer und die gemeinsame Grundlage
für Berichte. Als Java-Applikationen sind beide
Werkzeuge für alle gängigen Betriebssystemplattformen von Windows über Linux, Unix
und Mac verfügbar und kompatibel.
Daten
Bevor der Anwender einen Bericht erstellen
kann, muss er unabhängig vom späteren Ausgabeformat definieren, welche Daten er aus welchen Quellen verwenden will. Die Auswahl der
Daten sollte immer dem Grundsatz der Klarheit
und Wahrheit verpflichtet sein und die Manipulation von Ergebnissen zur „Optimierung“ des
Resultate ausschließen. Es ist vorteilhaft, komplexe Abfragen mit Hilfe einer externen Datenbank vorzubereiten. Dann lassen sich leichter
Parameter ergänzen und Daten gruppieren.
Abbildung 1: Die Mitte des Bildschirm nimmt der WYSIWYG-Bereich des Reportgenerators ein. Ihn umranden eine Standardpalette, ein Objekt-Inspektor und ein Property-Editor.
3
www.linuxtechnicalreview.de
Projekte
JasperReports unterstützt eine Vielzahl von Datenquellen, darunter XML, POJO, EJB, CSV und
natürlich JDBC als universelle Schnittstelle für
nahezu alle Datenbanken. Auch der Zugriff auf
OLAP-Quellen mit MDX-Abfragen, dem Defacto-Standard für multidimensionale Abfragen, ist möglich. Ein beliebtes Beispiel für eine
OLAP-Anwendung ist die Betrachtung der Verkaufsergebnisse eines Unternehmens aus Sicht
der Niederlassungen, der Verkaufszeiträume
oder diverser Produktgruppen. Die Definition der Daten und die Erstellung so genannter
Cubes ist mit Hilfe von JasperAnalysis möglich.
Schwerpunkt dieses Artikels sind Berichte auf
Basis von JDBC-Datenquellen, wahrscheinlich
das verbreitetste Szenario.
Überblick über iReport
Die Berichte erstellt der Anwender mit iReport,
dass in der Community-Editon frei verfügbar [7] ist. Ergänzend zur Standalone-Version
ist iReport auch als Plugin für NetBeans und
Eclipse zu haben. Zwar könnte man die resultierenden JRXML-Dateien (JasperReport-XML)
– das entsprechende Know-how vorausgesetzt –
auch manuell schreiben, aber das ist nur Experten zu empfehlen. Dank des offenen Standards
lassen sich diese Reportdefinition stattdessen
sehr einfach automatisch erzeugen und auch
manipulieren.
Inhaltlich bietet die Java-Oberfläche, was man
von anderen Reportingwerkzeugen auch kennt.
Die GUI unterteilt sich grob in vier Bereiche,
die der Benutzer individuell konfigurieren und
erweitern kann. Einen zentralen WYSIWYGBereich umranden eine Standardpalette, ein
Property-Editor zur Parametrisierung von Objekteigenschaften und der Report-Inspector.
Letzterer liefert ein strukturiertes Abbild der
Designinhalte und ist darüber hinaus für die
Definition von Reportgruppen und so genannten Bändern verantwortlich. (Abbildung 1)
Sobald der Anwender eine Datenbankverbindung hergestellt hat, kann er bereits bestehende
SQL-Abfragen ausführen oder neue Abfragen
mit Hilfe eines grafischen Query-Builders erzeugen. Komplexere SQL-Queries sollte man allerdings besser außerhalb von iReport mit Hilfe
eines entsprechenden Datenbankwerkzeugs
entwickeln (siehe Kasten „SQL-Developer einrichten“).
Entwirft der Entwickler die Queries mit einem
externen Tool, kann er die Fehler einfacher be-
seitigen und mit einem realen Mengengerüst arbeiten,
während die Preview des Reportgenerators nur die Plausibilität der Abfrage prüft. Nützliche
Reports entstehen, wenn man sich
nicht zuerst danach richtet, welche
Daten erreichbar sind, sondern danach, was sie aussagen. Eine endlose Abfolge an Listen ohne konkrete Bedeutung,
bei denen der Anwender womöglich noch
Teilergebnisse manuell nachrechnen muss,
kann den Empfänger überfordern und lässt
sein Interesse schwinden.
Die Resultate der SQL-Abfragen lassen sich
zusätzlich mit Hilfe von Java-Expressions oder
Groovy aufbereiten. Groovy ist eine Skriptsprache für Java und erleichtert Aggregations- oder
Vergleichsoperationen erheblich. Laufzeitvariable für die Anzahl der verarbeiteten Sätze und
Elemente wie Seitenzähler sind bereits in jeden
Report integriert. Anwender können sie über
den Report-Inspector einfügen.
Sobald eine Abfrage erfolgreich definiert ist,
lassen sich die zurückgelieferten Feldinformationen in den so genannten Reportbändern platzieren. Das sind Bereiche, die den Bericht in logische Abschnitte unterteilen. Jedes Reportband
stellt die Software entweder nur einmal dar, wie
Title- und Summary-Page, oder mehrfach, etwa
datensatzweise wie im Detailbereich des Reports. Außerdem lassen sich die Daten mit ei-
SQL-Developer einrichten
SQLDeveloper [8] von Oracle ist ein hervorragendes und zudem kostenloses Tool für SQL-Abfragen. Allerdings beherrscht es von Haus aus nur
den Verbindungsaufbau mit Oracle-Datenbanken. Um es auch für MySQL nutzbar zu machen, geht man folgendermaßen vor:
1. Herunterladen eines passenden JDBC-Treibers für MySQL, etwa von
[9]. Das Archiv entpackt man an einem Ort der Wahl, beispielsweise in
»/usr/lib«.
2. Danach ist »sqldeveloper.sh« zu starten. Beim ersten Mal fragt die Software nach dem Pfad zu einem Java-JDK (ein JRE reicht nicht!), den sie
sich für nachfolgende Aufrufe in »~/.sqldeveloper/jdk« merkt.
3. Läuft der SQL Developer, muss der Anwender das Menü »Extras |
Voreinstellungen | Datenbank | JDBC-Treiber eines anderen Herstellers« aufrufen und dort den Pfad zum MySQL-JDBC-Treiber eintragen,
also beispielsweise »/usr/lib/mysql-connector-java-5.0.8/mysql-connector-java-5.0.8-bin.jar«.
4. Ruft man jetzt den Dialog »Neue Datenbankverbindung« auf, enthält er zusätzlich eine Registerkarte für Verbindungen zu MySQL-Datenbanken.
www.linuxtechnicalreview.de
4
Projekte
nigen grafischenElementen
anreichern und die Standardschriften passend zur Corporate
Identity wählen. Einfache Berichte
sind so bereits in wenigen Minuten
ohne großen Aufwand zusammengezimmert. Das Ergebnis lässt sich als Preview in iReport betrachten.
In der Praxis leben Berichte natürlich von
der Dynamik der Daten, die Parameter bei der
Ausführung steuern. Neben einer Reihe von
Defaultparametern, die unter anderem die Auswahl von Sprache oder Zeitzone ermöglichen,
kann der Anwender über das Kontext-Menü des
Report-Inspektors eigene Parameter hinzufügen. iReport kümmert sich nach der Definition
von Datentyp und Beschreibung dann automatisch um die Aufforderung zur Parametereingabe. Wichtig dabei ist, einen Defaultparameter
vorzusehen, der auch dann einen sinnvollen
Wert liefert, wenn der Anwender die Eingabeaufforderung ignoriert. Andernfalls könnten
die SQL-Abfragen leere Seiten produzieren. Die
benutzerdefinierten Parameter fragt auch der
Jasper-Server ab, wenn er den Bericht ausführt.
Besonders hilfreich sind dynamische Parameterlisten, bei denen der Benutzer dann aus einer
Drop-Down-Liste wählen kann, die ihrerseits
durch eine SQL-Abfrage befüllt wurde. Das ist
zum einen bequem und garantiert zum anderen
gültige Eingabewerte.
Bilder wie Firmenlogo oder Kopf- und Fußzeilenelemente lassen sich entweder aus dem lokalen
Berichtspfad oder von einer beliebigen HTTPQuelle via URL einbinden. Einfache Berichte
mit grafischen Elementen sind so in Minutenschnelle erstellt.
Diagramme
Oft veranschaulichen Diagrammen gerade Entwicklungen über lange Zeiträume besser als
Tabellen. Über die iReport-Palette »Report Elements« stehen alle gängigen Diagrammtypen
zur Verfügung. Hat man einen Diagrammtyp
ausgewählt, lässt sich via Kontextmenü der
Dateninhalt bestehend aus einer Key-, Label- und Value-Expression einstellen.
Mit Hilfe der Diagrammattribute ist es möglich, ergänzend zu Farben noch
die Transparenz der
verschiedenen
Diagramm-
5
bereiche zu beeinflussen, was das Diagramm
optisch aufwertet.
Das Ergebnis lässt sich im Preview-Fenster sofort begutachten, so dass sich interaktiv Änderungen am Layout durchführen lassen. Besonders hilfreich ist es in der Praxis, die verschiedenen Datenbereiche des Diagramms mit einer
URL zu versehen. So kann man entweder auf
eine externe Detailquelle oder einen anderen
Subreport verweisen. Dies vereinfacht die Navigation und erleichtert dem Benutzer den Zugriff
auf die zugrunde liegenden Daten.
Erweiterte Abfragen
Wer komplexe Sachverhalte darstellen will,
braucht oft auch aufwendigere Abfragestrategien. iReport bietet hier zwei leistungsfähige
Alternativen. Eine Möglichkeit selektierte Werte
in der Ausgabe feiner zu unterteilen, ist die Anlage von Reportgruppen. Eine solche Gruppe
ermöglicht zusätzliche Bänder für Kopf- und
Fußzeilen und Zusatzangaben beim Gruppenwechsel. Damit ließe sich etwa eine Serverliste
nach Betriebssystem gruppieren.
Daneben gibt es Subreports. Sie lassen sich beliebig schachteln, wobei es auch möglich ist,
?
Noch Fragen?
Unsere Autoren beantworten Ihre
Fragen gern in unseren Foren.
Reportparameter oder komplexe Hashmaps an
eingebettete Berichte zu übergeben. Zum einen
muss der Benutzer so das entsprechende Reportgerüst aus Deck- und Summenblatt nicht
mehrmals erstellen, zum anderen – und noch
viel entscheidender – lassen sich die einzelnen
Detailberichte auf diese Weise zentral parametrisieren. Zudem ist die Datenquelle für alle Subreports an einer zentralen Stelle änderbar. Auch
ist es möglich, Berechtigungen zu verwenden,
die auf dem umschließenden Bericht basieren.
Der Jasper-Server
Gerade für das Erstellen von Berichten in einem
iterativen Prozess bietet iReport eine leistungsstarke Umgebung. Ist der Bericht fertig, muss er
zu seinen Nutzern gelangen. Weil er oft nicht an
jedermann adressiert ist, spielen hier auch zentrale Authentifizierungs- und Autorisierungsverfahren eine Rolle. Diese Aufgabe übernimmt
in Japsers BI-Suite der Jasper-Server. In der
www.linuxtechnicalreview.de
Projekte
kleinsten Installationsvariante ist der Jasper-Server eine Web-Applikation in einem bestehenden
Applicationserver, vorzugsweise Tomcat, die
auf eine MySQL-Datenbank zugreift. Wer noch
nichts von alledem installiert hat oder eine isolierte Reportingumgebung verwenden möchte,
dem steht für Linux ein Installationsbinary [10]
zur Verfügung, das die geführte Installation in
Minuten ermöglicht. Auch dabei hat der Benutzer die Möglichkeit, einen vorhandenen
Tomcat-Server und/oder eine eigene MySQLDatenbank anstelle der mitgelieferten Binaries
zu verwenden.
Erfahrungsgemäß macht eine eigene MySQLDatenbank wenig Probleme, auch wenn sie
inklusive Datensicherung und Updates etwas
schwieriger zu handhaben ist als der Applikationsserver. Da die Reports in der Datenbank
landen, lässt sich der Jasper-Server auch einfach
in Multimaster-Umgebungen implementieren.
Verteilte Server können so auf lokale Quellen
zurückgreifen und die Berichte sind für alle beteiligten Instanzen sofort sichtbar.
Nach Abschluss der Installation ist der JasperServer sofort unter [http://localhost:8080/
jasperserver] zu erreichen und es ist eine Anmeldung mit dem Adminbenutzer (»jasperadmin«) möglich . Die Oberfläche ist übersichtlich und auf das Wesentliche beschränkt. In den
nächsten Monaten kommen vermutlich einige
Features der Professional-Edition, wie das AdHoc-Reporting und Dashletfunktionen hinzu.
Eine zentrale Komponente ist der RepositoryViewer (Abbildung 2). Wurden die Beispielreports installiert, kann der Anwender gleich eines
der gelisteten Elemente starten. Alternativ lassen
sich per Kontext-Menü neue Ordner anlegen
und freigegeben. In die Ordner platziert der Anwender dann die mit iReport erstellten JRXMLDateien. Zu einer so genannte Report Unit können außerdem noch die Datenbankverbindung,
Bilder, Dialoge für Input-Parameter oder Subreports gehören. Der Anwender entscheidet, ob er
globale Ressourcen des Servers verwenden oder
lokale Ressourcen zum Report hinzufügen will.
Die globalen Ressourcen-Definition haben den
Vorteil, das durch sie mehrere Berichte von einer zentralen Stelle aus zu ändern sind.
Hilfe einer SOAP-Schnittstelle in iReport. Neue Berichte gelangen so auf den
Server und bestehende Berichte lassen
sich von dort aus löschen oder modifizieren und in der Weboberfläche ausführen.
Die Weboberfläche ist auch der Ort für alle
Einstellungen für den automatischen Berichte-Versand und fein abgestufte Berechtigungen mit zentraler Authentifizierung und
Autorisierung.
Eine zentrale Funktion des Jasper-Servers ist es,
Reports automatisch zu erstellen und anhand
frei konfigurierbarer Zeitpläne zu versenden.
Die Zeitsteuerung baut auf QUARTS, ein JavaSchedulingframework [11], das sehr flexibel ist
und eine einfache Steuerung für komplexe Zeitpläne bietet.
Alle automatisch versandten Reports sollte der
Admin zusätzlich speichern. Da die Berichte
größtenteils auf volatilen Daten beruhen, lassen
sie sich in gleicher Form zu einem späteren Zeitpunkt meist nicht mehr reproduzieren.
Alternative Anbindungen
Obwohl es meist darum geht, formatierte Dokumente zu erzeugen, enthält der Jasper-Server
darüber hinaus auch leistungsfähige Schnittstellen, um die Berichtsdaten in anderen Applikationen weiterzuverarbeiten und die Berichte in alternative Umgebungen zu integrieren. So bietet
der JasperSerer weitere Zugriffsmöglichkeiten
via HTTP-GET-Request und besitzt darüber hinaus noch eine vollwertige SOAP-Schnittstelle.
Während der Reportaufruf mittels HTTP-GET-
Berichte bereitstellen
Am schnellsten geht das Deployment mit Hilfe
des in iReport integrierten Repository-Viewers.
Er bietet sämtliche Deploymentfunktionen mit
Abbildung 2: Der Repository-Viewer präsentiert die startbaren Reports.
www.linuxtechnicalreview.de
6
Projekte
Request eine schnelle Integration in Portale und eigene
Applikationen erlaubt, ist die
SOAP-Schnittstelle auf eine Integration durch Entwickler ausgelegt, denen sie dafür Zugriff auf
sämtliche Repository-Inhalte sowie
den internen Scheduler bietet. Über die
SOAP-Schnittstelle lassen sich schließlich
auch alle Berichte löschen, verschieben, berechnen oder in einem gewünschten Format
weiterverarbeiten. Der Zugriff darauf ist durch
eine zentrale Authentifizierung und Autorisierung abgesichert. Auf diese Weise ist es möglich,
jeden Benutzer mit fein abgestuften Berichtigungen auszustatten.
Sicherheit
Neben der integrierten Benutzer- und Rollenverwaltung unterstützt der Jasper Server auch
eine Vielzahl von Optionen auf Basis des Acegi
Security Frameworks [12], das in Zukunft zu
einem Teil des bekannten Spring Frameworks
entwickeln wird. Neben LDAP auf Basis von
Microsoft Active Directory oder Novell eDirectory unterstützt er so auch diverse javabasierte
Lösungen wie JAAS (Java Authentication and
Autorisation Service) und CAS (Central Authentification Service) sowie etliche Verschlüsselungsverfahren auf Basis von HTTPS und
X.509 als Standard für verbreitete Public-KeyInfrastrukturen.
Fazit
JasperReports ist als Teil einer großen Business
Intelligence Suite, dem Flaggschiff von JasperSoft, und bietet dem Anwender sämtliche Features zur Aufbereitung von Datenquellen, Definition von Abfragen und dem Verfertigen von
Berichten auf einem Server oder dem Client. Die
Software ist plattformunabhängig und garantiert
homogene Ergebnisse. Die vielfältigen HTTPund SOAP-Schnittstellen sowie die zentrale Authentifizierung und Autorisierung erleichtern
die Integration. Gerade diese Vielseitigkeit hebt
JasperReports deutlich von anderen Produkten
am Markt ab. Die Lösung schiebt sich damit
zwischen Pentaho und BIRT und deckt trotz der
noch ausstehenden Möglichkeit, webbasiert Reports zu generieren, bereits in der Communityversion alle Anforderungen ab. Die anfängliche
Mühen der Einarbeitung belohnt Jasper schnell
und steigert sowohl Nachhaltigkeit als auch
Qualität des Berichtswesen (Abbildung 3). ■ ■ ■
Infos
[1] Chrystal Reports:
[http://www.sap.com/germany/solutions/
sapbusinessobjects/sme/reporting/index.epx]
[2] Oracle Reports: [http://www.oracle.com/
technology/products/reports/index.html]
[3] Microsoft Access: [http://office.microsoft.com/
de-de/access/FX100487571031.aspx]
[4] Pentaho: [http://www.pentaho.com]
[5] Eclipse BIRT: [http://eclipse.org/birt/phoenix]
[6] Jasper Soft: [http://www.jaspersoft.com]
[7] iReport Download:
[http://jasperforge.org/projects/ireport]
[8] SQLDeveloper: [http://www.oracle.com/
technology/products/database/sql_developer]
[9] MySQL Connector-J: [http://dev.mysql.com/
downloads/connector/j/5.0.html]
[10] Jasper Server Binary: [(http://sourceforge.net/
projects/jasperserver/files/JasperServer/)]
[11] QUARTS: [http://www.quartz-scheduler.org]
[12] Acegi Security Framework:
[http://www.acegisecurity.org]
Der Autor
Abbildung 3: Attrkativ formatierte Reports mit der Corporate Identity der
Firma und das auch noch auf Knopfdruck – das ist das Versprechen von
Jasper Report.
8
Bernd Erk ist Technischer Leiter der Nürnberger
Netways GmbH, die seit mehr als zehn Jahren im
Open Source- und Linux-Umfeld tätig ist.
www.linuxtechnicalreview.de
Herunterladen