Mehrere Reports in NextReports kombinieren

Report

Im letzten Beitrag zu NextReports hatte ich beschrieben, wie man einen Chart mit mehreren Graphen erstellt, um Wertevergleiche darzustellen. An dem dort verwendeten Beispiel möchte ich hier zeigen, wie man Verkaufszahlen von Artikeln aus unterschiedlichen Produktgruppen pro Jahr getrennt auswertet und die Ergebnisse einem Report zusammenfasst.
Grob umrissen funktioniert das so, dass die Gesamtzahl der verkauften Artikel eines Jahres von einer Main-Query ermittelt wird und die Einschränkung auf die jeweilige Artikelgruppe in den Sub-Queries stattfindet.

Die Ausgangsdaten in der Datenbank für dieses Beispiel sehen Sie hier:

Testdaten
Testdaten

Das Ziel ist eine Auswertung als PDF, der etwa so aussehen sollte:

Report
Reportentwurf

Query für den Main-Report

Für diesen Bericht wird zunächst eine Query (ich nenne das nachfolgend Main-Query) erzeugt, die alle Datensätze oder zumindest die Datensätze durchläuft, die in den einzelnen Sub-Reports später ausgewertet werden sollen.

SELECT COUNT(*)
FROM article
WHERE ArtGruppe >= 1 AND ArtGruppe <= 3
AND Preisklasse >= 1 AND Preisklasse <= 3
AND angelegt = ${jahr};

Die Einschränkung auf die Artikel- und Preisgruppen ist für dieses Beispiel nicht unbedingt notwendig, da alle in der Datenbank vorhandenen Datensätze ausgewertet werden sollen. Das Ergebnis kann man dann als Summe aller verkauften Artikel im Report verwenden. Daher kann man auch schreiben:

SELECT COUNT(*)
FROM article
WHERE angelegt = ${jahr};

Der in der Query verwendete Parameter ${jahr} wird später an die Sub-Queries durchgereicht. Angelegt wird er folgendermaßen:

NextReports Parameter
NextReports Parameter

Die Query wird gespeichert und über File > New > Report from Query wird das Layout erstellt.

Layout Main-Report
Layout Main-Report
  • In H0/1 wird der Parameter ${jahr} eingefügt, um später das ausgewählte Jahr anzuzeigen, für das die Asuwertung erstellt wurde.
  • In D0/1 wird das Ergebnis der Main-Query eingefügt, das die Gesamtzahl der durchlaufenen Datensätze anzeigt.
  • Die Zeilen D2, D5 und D8 sind lediglich die Überschriften für die Ergebisse der Sub-Queries. Diese werden später in die Zeilen D3, D6 und D9 eingefügt.

Queries für die Sub-Reports

Hier die Sub-Query für die Artikelgruppe 1.

SELECT
(CASE
WHEN Preisklasse = 1 THEN 'Preisgruppe 1'
WHEN Preisklasse = 2 THEN 'Preisgruppe 2'
WHEN Preisklasse = 3 THEN 'Preisgruppe 3'
END) as "Preisgruppe",
CONVERT( CONCAT( COUNT(*), " / " ,
(SELECT COUNT(*) FROM article WHERE ArtGruppe = 1 AND angelegt = ${jahr} ) ,
" (" , ( COUNT(*) /
(SELECT COUNT(*) FROM article WHERE ArtGruppe = 1 AND angelegt = ${jahr} )) * 100 , "%) ")
USING UTF8) as "Anzahl/von/%-Anteil"
FROM article
WHERE ArtGruppe = 1 AND angelegt = ${jahr}
GROUP BY Preisgruppe

Die Sub-Queries für die Artikelgruppen 2 und 3 unterscheiden sich davon  nur durch die entsprechend geänderten Werte der Spalte ArtGruppe. Der Parameter ${jahr} wird in den Sub-Queries nicht angelegt, da er von der Main-Query übergeben wird. Daher können die Sub-Queries auch nicht in NextReports getestet werden. Entweder man fügt zum Testen den Parameter kurz ein oder man testet in z.B. phpMyAdmin und ersetzt den Parameter der Query dabei durch die Jahreszahl.

Für jede Sub-Query wird wieder über über File > New > Report from Query ein Report erstellt, der nur aus der Datenzeile D0 besteht. Die überflüssigen Zeilen werden gelöscht.

Report für die Sub-Query
Report für die Sub-Query

Sub-Reports in den Main-Report einfügen

Ich habe für dieses Beispiel die Sub-Queries mit den Namen SUB_PG1 bis SUB-PG3 abgespeichert und füge sie nun in den Main-Report ein.

Einfügen der Sub-Reports in den Main-Report
Einfügen der Sub-Reports in den Main-Report

Die fertige Auswertung als PDF ausgegeben sieht dann so aus:

Der fertige Report
Die fertige Auswertung

Die Linien habe ich in den Sub-Reports erzeugt.

Formatierung der Jahreszahl

Da die Parameter ${jahr} ein Integer ist, schreibt NextReports je nach Konfiguration anstatt 2017 die Jahreszahl mit einem Trennpunkt als 2.017. Ich habe das einfach mit der automatischen Typenangleichung umgangen, die in den Expressions die Integer-Jahreszahl in einen String wandelt, sofern ein weiterer String vorhanden ist. Alternativ kann man den Parameter ${jahr} natürlich als String definieren und die Queries entsprechend anpassen.

Typenangleichung in Expressions
Typenangleichung in Expressions

Ähnliche Beiträge:
-> Multiple Parameter in NextReports verwenden

Buy Me a Coffee at ko-fi.com

1 Comment

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Nobody is perfect
Einen Fehler gefunden?
Verbesserungsvorschläge, Lob oder Kritik?
Schreiben Sie mir mit dem -> Kontaktformular
oder per -> E-Mail.
DANKE!
Hier können Sie sicheren Cloudspeicher gewinnen: PCLOUD