Bekanntermaßen kann man in Reporting Services alle Standard-Charts darstellen.
Bei den Säulen-Diagrammen hat man sogar – was ich heute zeigen möchte – die Möglichkeit, auf der x-Achse Datumswerte anzuzeigen. Dies ist z.B. in (Pseudo-) Gantt-Charts interessant.
Für unser Beispiel wollen wir die Laufzeit von zwei Phasen eines Projekts darstellen:
Phase 1 läuft vom 1.3.2011 bis zum 20.3.2011, wobei die Zeit ab dem 17.3.2011 rot dargestellt werden soll.
Phase 2 läuft vom 15.3.2011 bis zum 7.4.2011, wobei die Zeit ab dem 1.4.2011 rot dargestellt werden soll.
Das Ziel sieht somit so aus:
Um dies zu erreichen, geben wir folgendes im Chart an:
- als Kategorie: die Phase
- als Reihe: die Farbe
- als Wert: das Datum
Allerdings ist das Datum nicht einfach einzugeben. Wir müssen vielmehr folgendes einstellen (examplarisch an der Phase 1 gezeigt):
- ein transparenter Balken bis zum 1.3.2011
- ein grüner Balken bis zum 17.3.2011, also 16 Tage breit
- ein roter Balken bis zum 20.3.2011, also 3 Tage breit
Für den ersten Balken können wir als Wert einfach den 1.3.2011 angeben. Für die darauffolgenden Balken müssen wir aber das Datum als Wert angeben, das die Anzahl der Tage auf den 30.12.1899 addiert, also
- für einen Balken mit 1 Tag Länge: 31.12.1899
- für einen Balken mit 2 Tagen Länge: 1.1.1900
- für einen Balken mit 2,5 Tagen Länge: 1.1.1900 12:00
- für einen Balken mit 3 Tagen Länge: 2.1.1900
- für einen Balken mit 16 Tagen Länge: 15.1.1900
- usw.
Natürlich müssen wir darauf achten, dass die Reihenfolge der Balken stimmt. Deswegen muss die Reihe entsprechend sortiert sein.
Außerdem werden wir die x-Achse so formatieren, dass sie die Datumswerte schön anzeigt.
Nun haben wir alles beisammen, um das Projekt zu schaffen:
Als SQL wählen wir:
SELECT ‚Phase 1‘ as Phase, ‚transparent‘ as Farbe, 1 as sort, convert(Datetime, ‚1.3.2011‘, 104) as wert
UNION ALL
SELECT ‚Phase 1‘ as Phase, ‚green‘ as Farbe, 2 as sort, convert(Datetime, ‚15.1.1900‘, 104) as wert
UNION ALL
SELECT ‚Phase 1‘ as Phase, ‚red‘ as Farbe, 3 as sort, convert(Datetime, ‚2.1.1900‘, 104) as wert
UNION ALL
SELECT ‚Phase 2‘ as Phase, ‚transparent‘ as Farbe, 1 as sort, convert(Datetime, ‚15.3.2011‘, 104) as wert
UNION ALL
SELECT ‚Phase 2‘ as Phase, ‚green‘ as Farbe, 2 as sort, convert(Datetime, ‚16.1.1900‘, 104) as wert
UNION ALL
SELECT ‚Phase 2‘ as Phase, ‚red‘ as Farbe, 3 as sort, convert(Datetime, ‚5.1.1900‘, 104) as wert
Und im Chart muss folgendes eingestellt werden:
Es ist ein Stacked Bar Chart:
Die Grundeinstellungen sieht man hier:
Die genauen Eigenschaften der Kategorie (Phase) sind:
und
Die genauen Eigenschaften der Reihe (Farbe) sind:
und
Die genauen Eigenschaften der Werte sind:
(Hier darauf achten, dass nicht count(Wert) dort steht (wie es SSRS beim Anklicken erstellt), sondern nur wert!
und
(Hier darauf achten, dass unter Farbe der Wert „=Fields!Farbe.Value“ steht, zu erreichen über das fx-Symbol)
Dann muss nur noch die x-Achse korrekt eingestellt werden:
Dabei sind in diesem Fall als Minimum „=DateSerial(2011, 2, 27)“ und als Maximum „=DateSerial(2011,4,10)“ eingestellt. Natürlich sollte man das „in Wirklichkeit“ aus den Daten über min / max und ggf. dateadd von Tagen berechnen.
Als Datumsformat ist das deutsche Format eingestellt:
Um die kleinen Zacken pro Tag (ohne Datumsanzeige) zu haben (wie man sie oben in dem Ziel-Chart sehen kann), habe ich noch die minor tick marks auf 1 gesetzt:
Die vollständige rdl-Datei kann hier heruntergeladen werden.
Dieses Projekt lässt sich zu einem Pseudo-Gantt-Chart ausbauen, in dem dann (nur) die senkrechten Linie und Pfeile fehlen, was für eine erste Orientierung allerdings ausreichend sein dürfte.
Natürlich lassen sich auch andere Visualisierungen damit realisieren, z.B. Darstellung von Up-/Down-Time von Maschinen etc.