Komplexe Reports#
Im Report Manager lassen sich über den Abfrage-Editor bereits viele, nützliche Reports generieren. Für komplexere Fälle kann das dahinter liegende SQL bearbeitet werden. Hierbei lassen sich MySQL-/MariaDB-eigene Funktionen nutzen, um beispielsweise Zeitintervalle abzufragen.
Vorbereitung#
Das erforderliche Wissen rund ums Reporting mit und die Datenbank-Struktur von i-doit befindet sich bereits in den entsprechenden Artikeln. Gute Kenntnisse in SQL beziehungsweise in SQL-Funktionen, die MySQL/MariaDB bieten, sind klar von Vorteil.
Zeitintervalle#
Eine häufige Anforderung an einen Report ist, sich über einen bestimmten Zeitraum zu informieren. i-doit bringt hierzu bereits nötige Felder mit Datumsangaben mit, beispielsweise wann ein Objekt zuletzt geändert wurde oder wann ein Wartungsvertrag ausläuft. Der Abfrage-Editor im Report Manager kann diese Felder zwar adressieren, aber nur mit festen Datumsangaben: Welche Objekte wurden seit dem 01.01.2016 geändert? Allerdings soll das Datum häufig in Relation zum jetzigen Zeitpunkt stehen: Welche Objekte wurden in diesem Monat geändert? Dabei wird nicht festgelegt, welcher Monat gemeint ist, sondern derjenige Monat, in dem der Report ausgeführt wird, wird angenommen.
Um so einen Report zu generieren, erstellen wir zunächst einen neuen Report mit dem Abfrage-Editor. Zur Ausgabe fügen wir beispielsweise Objekt-Titel, Objekttyp, Datum der letzten Änderung und den Namen der bearbeitenden Person hinzu.
Diesen Report speichern wir ab. Anschließend duplizieren wir ihn und geben dem Duplikat einen aussagekräftigen Namen wie "Geänderte Objekte in diesem Monat".
SQL nachbearbeiten
Wir duplizieren den Report, weil er sich nicht mehr mit dem Abfrage-Editor öffnen lässt, nachdem das SQL bearbeitet worden ist.
Das Duplikat bearbeiten wir anschließend mit dem SQL-Editor und erweitern die WHERE-Klausel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Um diesen Monat als Zeitintervall einzugrenzen, verwenden wir die SQL-Funktionen NOW()
, YEAR()
und MONTH()
. Diese wenden wir auf das Änderungsdatum an, das in der Tabellen-Spalte obj_main.isys_obj__updated
gespeichert wird. Zusätzlich schließen wir mit j2.isys_obj_type__const != 'C__OBJTYPE__RELATION'
alle Beziehungsobjekte aus.
Dieses und weitere Beispiele, um Zeitintervalle abzufragen, bietet beispielsweise diese Frage bei Stackoverflow.