Berichte für lau

Freie Report-Tools gibt es einige, aber die meisten können nur einfache tabellarische Darstellungen. Excel-Anwender sind aber verwöhnt und möchten schicke Tabellen und dazu passende Grafiken schön seitenweise angeordnet haben. Warum auch nicht. Ob die Zahlen dau aus einer handgepflegten Tabelle kommen oder einer Datenbank sollte ja keinen Unterschied machen.

Unser Tool sollte ausserdem eine einigermassen zuverlässige Entwicklerbasis haben. Bei Open Source Software achte ich normalerweise darauf, ob noch regelmässig am Projekt gearbeitet wird und wie groß die Gruppe ist. Wenn es dann noch Teil eines größeren, aktiven Projekts ist, stehen die Chancen gut, dass es weiter gepflegt wird.

Für mich ist derzeit Eclipse BIRT das Reporting-Tool der Wahl. Eclipse ist ein sehr großes Open Source Projekt für eine Software-Entwicklungsumgebung. Es besteht aus einer Basis-Oberfläche, die mit Plug-Ins und Add-Ons erweitert werden kann. Man kann nicht nur in Java, C/C++ oder PHP programmieren, sondern eben auch mit dem BIRT-Plug-In Reports erstellen oder mit dem BPEL-Plug-In Business-Prozesse modellieren.

Eclipse läuft auf allen gängigen Plattformen, die eine Java Runtime-Umgebung bieten. Es besteht zum einen aus dem Report-Designer, mit dem man Reports erstellen, testen und drucken kann, inklusive Export nach PDF, Excel und so weiter. Das reicht schon mal für Einzelanwender, die lokal für sich Berichte erstellen wollen.

Die zweite Komponente ist die Report-Engine, die in einem Java-Applikationsserver installiert wird. Damit kann man lokal erstellte Reports in einem Web-Portal bereitstellen. Beim Aufruf können sogar Parameter abgefragt werden. Den Abruf kann man natürlich auch automatisieren. Das werden wir uns zunutze machen, um zeitgesteuert Berichte zu erzeugen und zu versenden.

Eclipse/BIRT installieren

Für Windows-Anwender ist die einfachste Art der direkte Download von der Projektseite http://download.eclipse.org/birt/downloads/ und dort den Button „All-In-One“. Die Zip-Datei packt man in ein neues Verzeichnis irgendwo auf der Platte aus. Das ist alles. Die Datei eclipse.exe kann direkt gestartet werden.

Wer nicht auf Windows arbeitet findet unter „More Downloads“ auch eine Version für Linux und den BIRT Report-Designer als Plug-In für eine vorhandene Eclipse-Umgebung. Wie man das Plug-In installiert steht unter http://www.eclipse.org/birt/phoenix/build/#updating

Kontakt zur Datenbank

Für die Verbindung zu unserer MySQL-Datenbank benötigen wir noch einen JDBC-Treiber. Den gibt es bei MySQL.com unter dem Namen „MySQL Connector/J“ auf der MySQL-Downloadseite. Windows-User laden am besten die Zip-Version. Aus diesem Archiv kopieren wir die Datei mysql-connector-java-5.1.6-bin.jar (oder die gerade aktuelle Version) erst mal in das Eclipse-Verzeichnis. Sie wird später bei unserem ersten Report integriert.

Erststart, Datenquelle und erster Report

Ziel des ersten Berichts ist eine Wochenübersicht ausgewählter Messwerte als Kreuztabelle und Grafik. Die Kreuztabelle soll die Namen der Messstellen zeilenweise auflisten und das Tagesdatum als Spalten. Zeilen- und Spaltensummen sind selbstverständlich. Die Grafik soll für jeden Tag der Woche die Tageswerte der Messstellen übereinander gestapelt anzeigen. Los geht’s:

  • Eclipse.exe starten
  • Workspace auswählen, optional: Neuen Ordner anlegen (empfohlen)
  • Für Erstanwender ist es auch empfehelnswert, den „Overview“ anzugucken
  • Danach „To Workbench“ – Zur Arbeitsumgebung
  • Zuerst ein neues Projekt anlegen: File / New / Project… / Business Intelligence and Reporting Tools / Report Project. Name „KPI“.
  • Eclipse fragt, ob es die Oberfläche entsprechend anpassen soll: „Open Perspective?“; ja, das ist eine gute Idee.
  • Im neuen Projekt einen neuen Report anlegen: File / New / Report;Parent Folder: KPI;File name: „kpi-report1.rptdesign“;Type of Report: „Blank Report“

Datenquellen

Um echte Daten in den Report einzufügen brauchen wir mindestens eine Datenquelle (Data Source). Das ist bei uns unsere MES-Datenbank. Das Hinzufügen geht so: Data / New Data Source / Create from a data source in the following list / JDBC Data Source. Data source name: „KPI“. Der Name ist willkürlich.

Jetzt wird einmalig der MySQL-Datenbank-Treiber mit BIRT verbunden: „Manage Drivers…“ / Tab „JAR Files“ / „Add…“. Wenn der mysql-driver im Eclipse-Verzeichnis liegt, steht er in der Liste. Einfach auswählen und Okay klicken.

Weiter mit der Definition der Datenquelle:

  • Zurück in „Create a new data source. Driver class: „com.mysql.jdbc.Driver (v5.1)“ wählen, das ist der eben hinzugefügte Treiber
  • Die Driver URL enthält Verbindungstyp, Datenbanktyp und die Verbindungsparameter nach dem Schema: „jdbc:mysql://[host][,failoverhost…][:port]/[database]“. Bei lokaler Datenbank kann man das meiste weglassen: „jdbc:mysql:///mes“, wobei „mes“ der Datenbankname in MySQL ist. Näheres steht in der Dokumentation zum Treiber unter http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-configuration-properties.html
  • Zum Schluss: Username und Passwort eingeben und Finish klicken

Data Set

Zur Datenquelle können wir jetzt Data Sets anlegen. Data Sets sind entweder einzelne Abfragen aus genau einer Datenquelle oder ein „Joint Data Set“ aus zwei verschiedenen Datenquellen.

  • Data / New Data Set / New Data Set.
  • Data Source Selection: „KPI“.
  • Data Set Type: „SQL Select Query“.
  • Data Set Name: „Wasser“.
  • Als Query nehmen wir die „Daten der letzten Woche“:

    select * from tagvalues v
    join tagequipment e on v.tagname = e.tagname
    where e.eqpath = 'Wasser/STW/Verbraucher/Sekundär'
    and v.time like '____-__-__'
    and v.time between from_days(to_days(now()) - (7 + weekday(now()))) and from_days(to_days(now()) - (1 + weekday(now())))

  • Weil Zeitangaben und Messwerte als Strings aus der Datenbank kommen, legen wir Computed Columns an, die in den passenden Datentyp wandeln:
    Column Name: Datum; Data Type: Date; Expression: row[„time“]
    Column Name: Wert; Data Type: Float; Expression: Math.round(new Number(row[„value“]))
    crosstab-reports_10
  • Preview Results

Statt der Computed Columns hätten wir auch in der SQL-Abfrage selbst die passenden Typen durch MySQL-Funktionen herstellen können. Das ist weitgehend Geschmackssache. Geschwindigkeitsunterschiede habe ich noch nicht getestet.

Daten für Kreuztabelle anlegen

Für die Kreuztabelle benötigen wir einen Data Cube. Cube deshalb, weil er im Gegensatz zu einer einfachen Tabelle, wie sie aus der SQL-Abfrage kommt, die Werte („measures“) über mehrere sogenannte Dimensions in Beziehung setzt. Dimensions spannen sozusagen Koordinatensysteme auf, in deren Kreuzungspunkten die jeweiligen Werte stehen. Bei zwei Dimensions – Name der Messstelle und Tagesdatum – ist der Cube eine Kreuztabelle. Näheres zu Data Cubes steht zum Beispiel in der Wikipedia unter Cube_(OLAP).

  • Im Outline oder Data Explorer bei Data Cubes rechts klicken und „New Data Cube“ wählen.
    Der Name soll „WasserCube“ sein.
    Mit Rechtsklick auf „WasserCube“ und „Edit“ die Einstellungen öffnen
  • Als Dataset „Wasser“ wählen.
  • Bei Groups and Summaries werden die Dimensionen und Measures festgelegt
  • Feld „Datum“ in die Groups ziehen („Drop a field here to create a group“), um eine Group bzw. Dimension zu erzeugen
  • Feld „eqproperty“ ebenso erzeugt eine zweite Gruppe mit den Namen der Messstellen
  • Feld „Wert“ in die Summaries ziehen

Der Data Explorer (linke Spalte) sollte so aussehen:

Crosstab (Pivot-Tabelle) anlegen

Jetzt kann die eigentliche Kreuztabelle angelegt werden.

  • Im Hauptfenster den Tab Layout anwählen. Hier wird der Bericht entworfen
  • Aus der Palette eine Crosstab auf die Fläche ziehen
  • Im Data Explorer den WasserCube ausklappen und die Group mit eqproperty in die linke Zelle ziehen („… to define rows here“).
  • Desgleichen die Group mit time in die obere Zelle ziehen („… to define columns here“).
  • Summary Field1 aus WasserCube in das Summenfeld ziehen („… to be summarized here“).

Das Ergebnis können wir sofort testen durch einen Klick auf den Tab Preview oder über das Menü mit Run / View Report / as PDF
Im Detail können noch sehr viele Einstellungen optimiert werden.

Chart anlegen

Charts zu erzeugen funktioniert ebenso wie bei der Kreuztabelle. Das Tagesdatum – Spalte „Datum“ – wird auf die X-Achse gestellt, die Messwerte auf die Y-Achse. Die Stapelung der Werte pro Tag wird durch Gruppierung nach den Namen der Messstellen erreicht.

  • Layout anklicken und aus der Palette ein Chart auf die Fläche ziehen.
  • Rechtsklick auf das Chart im Layout für die Einstellung der Parameter.
  • Chart-Typ: Gestapelt

crosstab-reports_111

  • Select Data:
  • Use Data from: „Data Source Wasser“
  • Value Series: Spalte „Wert“ ins Feld ziehen
  • Category Series: Spalte „Datum“ ins Feld ziehen
  • Y Series Grouping: Spalte „eqproperty“ ins Feld ziehen

crosstab-reports_12

  • Format Chart: Achsenbeschriftungen einstellen, X-Axis, Format Datum

crosstab-reports_09

Fertig. Den ganzen Report mit Tabelle und Grafik sehen wir durch einen Klick auf Preview oder Run / View Report / as PDF. Meinen habe ich hier etwas unkenntlich gemacht, weil ja Originaldaten drin sind.

crosstab-reports_141

2 Antworten zu Berichte für lau

  1. […] werden, bevor wir den Test-Report abrufen können. Der Treiber ist wieder die Jar-Datei aus dem vorherigen Beitrag. Diesmal muss sie in das Verzeichnis […]

  2. Datenrettung sagt:

    Sieht echt schick aus🙂

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: