Für die User der Microsoft Reporting Services, die sich schon immer mal gefragt haben, wie man ein Diagramm erzeugt, das zwei Datenreihen leicht verdeckt darstellt, soll dieser Blog-Beitrag eine kleine Hilfe sein. Ziel ist es ein Diagramm zu erstellen, welches wie folgt aussieht:
Abbildung 1: Diagramm in der Vorschauansicht
Für unser Beispiel setzen wir den Microsoft Demo-Cube Adventure Works DW 2008R2 ein. Die erste Abfrage summiert die Umsätze pro Monat für ein Jahr, zusätzlich sollen auch die Umsätze des Vorjahres ermittelt werden. Dazu haben wir über den Abfrage-Designer folgende MDX Abfrage zusammengestellt.
Abbildung 2: Abfrage Designer – MDX Abfrage
Die Abfrage enthält ein Berechnetes Element (Sales Amount PrePeriod ), das der Ermittlung der Umsätze aus dem Vorjahr dient. Der dazu notwendige MDX-Ausdruck gestaltet sich wie folgt:
MEMBER [Measure].[Sales Amount PrePeriod] AS ([Measures].[Sales Amount],ParallelPeriod([Date].[Calendar Year].[Calendar Year],1,[Date].[Calendar Year].currentmember))
Nach dem Anlegen des Datasets können wir damit beginnen im Berichtsdesigner ein Diagramm zu erstellen. Für das Beispiel legen wir ein einfaches Säulendiagramm an. Das standardmäßig erzeugte Diagramm enthält Elemente, die wir für unser Beispiel nicht benötigen. Der Diagrammtitel, die Legende, die vertikale Achse usw. können aus dem Diagramm entfernt werden. Zusätzlich stellen wir für die horizontale Achse ein, dass Hauptteilstriche und Hilfsteilstriche ausgeblendet werden sollen. In der Entwurfsansicht sollte das Diagramm dann wie folgt aussehen:
Abbildung 3: Diagramm in der Entwurfsansicht
Das Diagramm, welches wir in der Entwurfsansicht anlegen, ist eine Art Container, welcher beliebig viele Chart Areas beinhalten kann. So haben wir also im ersten Schritt einen Diagrammcontainer mit einer Chart Area erstellt. Diese Chart Area soll nun ein Säulendiagramm zeichnen, das den Sales Amount nach Monaten anzeigt. Dazu wird die Chart Area angeklickt, wobei sich im rechten Bereich neben der Chart Area eine Übersicht öffnet, die die Diagrammdaten beinhaltet. Die erste Chart Area bekommt unter Werte den Sales Amount zugewiesen, dies kann über das Plus-Symbol neben den Werten hinzugefügt werden. Unter Kategoriengruppen wählen wir das Feld Month of Year aus. In den Kategoriengruppeneigenschaften muss eventuell die Sortierung noch angepasst werden. Standardmäßig ist ausgewählt, dass eine Sortierung von A bis Z vorgenommen werden soll. Bei der Anzeige von Monaten ist dies aber falsch, da die Werte von Januar bis Dezember angezeigt werden sollen. An dieser Stelle reicht es die Sortierung zu löschen, da die richtige Sortierung schon vom Cube bereitgestellt wird. Zusätzlich kürzen wir die Monatsbezeichnung noch mit folgendem Befehl ab
=left(Fields!Month_of_Year.Value,3)
Abbildung 4: Diagrammdaten der ersten Chart Area
Für die horizontale Achse gilt es auch noch eine Anpassung vorzunehmen. Dazu öffnet ihr das Eigenschaftenfenster der horizontalen Achse und gebt beim Intervall statt automatisch eine1 an. Damit wird jeder Monat auf der Achse angezeigt. Genauso könnt ihr auch nur jeden 2. Monat anzeigen lassen.
Die erste Chart Area erhält standardmäßig die Bezeichnung Default . An dieser Stelle ist es durchaus ratsam den Chart Areas Namen zu geben die eindeutig sind. Für unser Beispiel nennen wir die Chart Area SalesAmount entsprechend der Daten, die wir in dieser Chart Area abbilden wollen.
Abbildung 5: Benennung der Chart Area innerhalb des entsprechenden Eigenschaftsmenüs
Um jetzt zusätzlich noch die Umsätze aus dem Vorjahr im Diagramm darzustellen, könnte man einfach eine 2. Datenreihe anzeigen. Das Problem dabei ist jedoch, dass die Säulen so nur nebeneinander dargestellt werden und nicht einander leicht verdecken können. Um das zu erreichen wird eine zusätzliche Chart Area benötigt. In dieser Chart Area wird dann ein Säulendiagramm ähnlich dem vorherigen hinzugefügt. Nur mit dem Unterschied das hier der Sales Amount PrePeriod als Wert dargestellt werden soll.
Über die Eigenschaften des Diagramms könnt ihr die Chart Areas anlegen, verwalten und weitere Einstellungen vornehmen.
Abbildung 6: Anlegen weiterer Chart Areas über die Diagramm-Eigenschaften
In unserem Beispiel fügen wir nun noch eine weitere Chart Area hinzu, die wir PrePeriod nennen wollen. Bei beiden Chart Areas sollte bei der Eigenschaft BackgroundColor eingestellt werden, dass keine Farbe verwendet werden soll. Standardmäßig ist der Farbwert auf Automatisch gesetzt, das hat aber zur Folge, dass die vordere Fläche die hinteren verdeckt.
Anschließend wird, auf die gleiche Weise wie bereits der Sales Amount hinzugefügt wurde, noch der Sales Amount PrePeriod den Diagrammdaten hinzugefügt. Somit verfügt das Diagramm über 2 Datenreihen. Über den Rechtsklick auf die jeweilige Datenreihe können anschließend die Reiheneigenschaften angepaßt werden. Unter dem Punkt Achsen und Diagrammfläche kann nun die entsprechende Chart Area eingestellt werden.
Abbildung 7: Datenreihen den entsprechenden Chart Areas zuweisen
Danach sind beide Chart Areas in der Entwurfsansicht mit Säulendiagrammen versehen und die zweite Chart Area kann wie die erste formatiert werden. Das heißt ihr blendet wieder die vertikale Achse sowie Hilfslinien und der gleichen aus. Für die horizontale Achse nehmt ihr ebenso die gleichen Einstellungen wie bei der ersten Chart Area vor.
Um jetzt die Position und Größe der Chart Areas anzupassen müssen die Eigenschaften CustomInnerPlotPosition und CustomPosition gesetzt werden. Dazu öffnen wir wieder den Chart Area-Auflistungs-Editor wie in Abbildung 6.
Abbildung 8: Positionseigenschaften der Chart Areas
Die CustomInnerPlotPosition ist für die Größe der inneren Zeichenfläche entscheidend. Mit der CustomPosition kann die Größe der Chart Area verändert werden. Die CustomInnerPlotPosition steht jedoch in Relation zur CustomPosition der Chart Area. Die zu definierenden Werte sind in Prozent.
Für unser Beispiel ist es ausreichend die CustomPosition anzupassen. Die Werte für Top, Height und Width sollten in beiden Chart Areas gleich sein. So beträgt die Höhe und die Breite der Chart Areas 94% der gesamten Diagrammfläche. Weiterhin soll sie einen Abstand vom oberen Rand von 3% haben.
Abbildung 9: Positionsangaben
Um die Säulen leicht zu verdecken wird bei der PrePeriod Chart Area beim Abstand von Links ein Wert von 3% und bei der SalesAmount Chart Area ein Wert von 5% eingestellt.
Um die Anordnung der Säulen exakt darzustellen solltet ihr darauf achten, dass ihr bei der Eigenschaft ValueAxes bei beiden Chart Areas die gleichen Skalierungseinstellungen vornehmt. Um die Reihenfolge der Chart Areas zu ändern könnt ihr einfach mit den Pfeilen neben der Auflistung der Chart Areas arbeiten. Die unterste Chart Area ist die die im Diagramm im Vordergrund angezeigt wird.
Abbildung 10: ChartArea-Auflistungs-Editor
Jetzt könnt ihr noch beliebig die Farben eurer Säulendiagramme anpassen und beispielsweise beim SalesAmount Diagramm die Datenbezeichnungen anzeigen lassen. Wenn ihr noch Überschriften hinzufügt kann euer Diagramm wie das Beispiel am Beginn dieses Artikels aussehen.