Per Mausklick bewerten und Feedback geben
MSDN
MSDN Library
Entwicklerbibliothek
SQL Server
SQL Server 2005
 SQL Server Reporting Services-Diagr...
SQL Server Reporting Services-Diagramme optimal nutzen
SQL Server Reporting Services-Diagramme optimal nutzen
Veröffentlicht: 13. Nov 2006

Dieses Whitepaper enthält allgemeine Informationen, bewährte Methoden sowie Tipps für die Erstellung von Diagrammen in Berichten, die von Microsoft SQL Server Reporting Services stammen. Einige Features der Reporting Services werden übersichtlich dargestellt. Außerdem werden häufige Fragen zur Diagrammgestaltung und zu den Diagrammfunktionen beantwortet und ausgiebigere Beispiele für den Aufbau besserer Diagramme aufgezeigt. (32 gedruckte Seiten)

Auf dieser Seite

 Einleitung
 Datenaufbereitung
 Diagrammbeschriftungen
 Beispieldiagramme und -berichte
 Schlussbemerkung
 Der Autor
 Weitere Informationen:

Einleitung

In diesem Whitepaper wird erläutert, wie Diagramme in Berichten von Microsoft SQL Server Reporting Services entworfen werden. Der Leitfaden ist in mehrere Abschnitte gegliedert und verweist auf bestimmte Berichtbeispiele, die im herunterladbaren Beispielprojekt enthalten sind.

Der erste Abschnitt mit dem Titel Datenaufbereitung enthält besondere Informationen, Tipps und Erkenntnisse über das Aufbereiten der Daten. Der zweite Abschnitt mit dem Titel Diagrammbeschriftungen erläutert, welche Beschriftungseinstellungen zu wählen sind, um aussagekräftige Diagramme zu erstellen, um den optischen Eindruck zu verbessern und visuelle Effekte einzusetzen.

Unter Beispieldiagramme und -berichte werden bestimmte und manchmal auch umfangreichere Beispiele dafür gegeben, wie die integrierten Diagrammfunktionen von SQL Server Reporting Services noch besser ausgeschöpft werden. Bei einigen Beispielen müssen die einzelnen Anweisungsschritte genau studiert werden. Zu Ihrer Erleichterung sind komplett funktionsfähige Beispielberichte beigefügt. Als Grundlage für die Beispielberichte dienen die Beispieldatenbanken AdventureWorks von SQL Server 2005 sowie Northwind.

Die Informationen über die Datenaufbereitung und Diagrammbeschriftungen sind Ihnen beim besseren Verständnis der Beispiele behilflich. Beim Studieren der Beispiele hilft es auch, die Erörterungen bezüglich der jeweiligen Diagrammbeschriftungen nachzuschlagen, die in den ersten Abschnitten des Leitfadens zu finden sind.

Datenaufbereitung

Ein Diagramm dient der visuellen Präsentation von Daten. Im Gegensatz zu langen Listen mit Daten eignet es sich erheblich besser zur Vermittlung von Informationen. Wenn Sie sich die Zeit nehmen, Ihre Daten sorgfältig vorzubereiten und inhaltlich zu erfassen, fällt Ihnen das Aufbauen und Gestalten effizienter Diagramme hinterher erheblich leichter. Die Daten in Reporting Services-Diagrammen werden auf drei Bereiche aufgeteilt: Werte, Kategoriegruppen und Datenreihengruppen. Ausführliche Informationen finden Sie unter Arbeiten mit Diagrammdatenbereichen im Abschnitt SQL Server Reporting Services der SQL Server 2005 Onlinedokumentation.

Ein Diagramm ist mit einer Matrix vergleichbar:

  • Eine Kategoriegruppe in einem Diagramm gleicht der Spaltengruppe in einer Matrix, und

  • eine Datenreihengruppe in einem Diagramm gleicht der Zeilengruppe in einer Matrix.

  • Ein Diagrammwert gleicht einer statischen Zeilengruppe einer Matrix.

  • Der Datenwert in einem Diagramm bzw. der Datenpunkt gleicht einer Matrixzelle.

Bei der Aufbereitung der Daten für ein Diagramm sind folgende Punkte zu berücksichtigen:

  • Diagrammwerte werden auf der numerischen Y-Achse angezeigt. Die für die Werte herangezogenen Felder müssen daher einen numerischen Datentyp, dürfen aber keinen Textdatentyp haben, bei dem die Zahlen mit Formatierungen versehen sind.

  • Die Werte auf der X-Achse werden durch die Werte definiert, die zur Kategoriegruppe des Diagramms oder zu den Gruppenbeschriftungen gehören, sofern Gruppenbeschriftungen ausdrücklich festgelegt wurden. Die X-Achse unterstützt zwei Modi (die ausführlich unter Kategoriemodus und Skalarmodus der X-Achse erläutert werden). Wenn Sie den Skalarmodus der X-Achse benutzen möchten, müssen sich die Felder bzw. Ausdrücke, die für den Kategoriegruppenausdruck verwendet werden, als Datentyp „Numerisch“ oder als DateTime-Objekt auflösen lassen.

  • In Ihren Bericht können Sie so viele Diagramme wie nötig einbinden. Wie bei jedem anderen Datenbereich auch (z. B. bei einer Matrix oder Tabelle) ist ein Diagramm an ein bestimmtes Dataset gebunden. In die Dataset-Abfrage können Sie Join- und Union-Ausdrücke integrieren, damit die resultierende Datenmenge auch alle erforderlichen Informationen enthält.

  • Wenn ein Diagramm in den Kopfbereich einer Tabellengruppe, in den Fußbereich einer Gruppe oder in eine Matrixzelle platziert wird, werden nur die Daten in das Diagrammsteuerelement übernommen, die zu der Datenteilmenge der jeweiligen Gruppe gehören. Ein Diagramm kann aber nicht in die Detailzeile einer Tabelle platziert werden, da dort nur auf eine Zeile mit Daten verwiesen wird.

  • Ein Diagramm mit zu vielen Daten (beispielsweise mehreren tausend Datenpunkten) lässt sich unter Umständen nur noch schwer interpretieren, es sei denn, Sie zeigen anhand eines Punktdiagramms die Verteilung von Werten und Datenpunktansammlungen auf. Eine im Voraus durchgeführte Zusammenfassung der Daten in der Abfrage schafft hierbei Abhilfe, sofern eine detaillierte Datenaufschlüsselung nicht erforderlich bzw. nicht sinnvoll ist.

Diagrammbeschriftungen

In diesem Abschnitt werden folgende Themen zu Diagrammbeschriftungen besprochen. Beim Studieren der Beispiele im nächsten Abschnitt hilft es auch, in den Themen nachzuschlagen, die in diesem Abschnitt behandelt werden.

  • Kategoriemodus und Skalarmodus der X-Achse

    In diesem Abschnitt werden die wesentlichen Unterschiede zwischen den beiden X-Achsenmodi erläutert. Als Ausgangspunkt für eigene Experimente könne Sie den Beispielbericht CategoryAxisSettings verwenden.

  • Achsenbeschriftungen

    Der Abschnitt „Achsenbeschriftungen“ geht in aller Tiefe auf die Auswahl von Beschriftungseinstellungen ein sowie darauf, wie sich diese Einstellungen auf die visuelle Darstellung des Diagramms zur Laufzeit auswirken.

  • Datenpunktbeschriftungen und Legendenbeschriftungen

    In diesem Abschnitt wird erläutert, wie Diagramme durch das Ergänzen von Datenpunktbeschriftungen und Legendenbeschriftungen verbessert werden.

Kategoriemodus und Skalarmodus der X-Achse

Die X-Achse besitzt zwei Funktionsmodi. Der Modus wird mit der Option „Numerische oder Zeitskalawerte“ auf der Registerkarte „X-Achse“ im Dialogfeld „Diagrammeigenschaften“ eingestellt.

  • Kategoriemodus

    Die Werte im Kategoriegruppen-Ausdruck bestimmen die einzelnen Kategorien zur X-Achse. Beschriftungen werden nur für die Kategorien angezeigt, die in den Daten tatsächlich enthalten sind. Im Kategoriemodus sind die Reihenfolge innerhalb einer Gruppe und die expliziten Sortierausdrücke wichtig, da Kategorien vom Diagrammsteuerelement nicht neu sortiert werden. Der für die X-Achse definierte Formatcode wird nur übernommen, wenn der Gruppenausdruck (oder der Gruppenbeschriftungsausdruck, sofern explizit definiert) als Resultat ein Objekt im textfremden Format zurückgibt.

    Gruppierungsbereiche werden für Kategorien angezeigt, wenn Kategoriegruppierungen auf mehreren Ebenen vorhanden sind.

  • Skalarmodus

    Der Wertebereich auf der X-Achse hängt von den Mindest- und Höchstwerten der Kategoriegruppenausdrücke ab. Damit ein Vergleich und eine Sortierung möglich ist, müssen die Werte der Gruppenausdrücke vom Typ „numerisch“ oder DateTime sein. Lücken in den Daten (wenn Sie beispielsweise eine DateTime-Kategoriegruppierung verwenden und nur Daten für Juli und September vorhanden sind) sind auf der X-Achse zu sehen, während die Kategorien entweder auf einer numerischen oder einer DateTime Achse skaliert dargestellt werden. Im Skalarmodus ist nur eine Kategoriegruppierung zulässig.

Die Diagramme in Abbildungen 1A und 2A veranschaulichen dieselben vier Wochen mit Auftragsdaten.

Abbildung 1A: X-Achse im Kategoriemodus und Gruppierungsbereiche
Abbildung 1A: X-Achse im Kategoriemodus und Gruppierungsbereiche

Abbildung 2A: X-Achse im Skalarmodus
Abbildung 2A: X-Achse im Skalarmodus

Der Kategoriemodus der X-Achse in Abbildung 1A

Da für Wochenenden (samstags, sonntags) im zugrunde liegenden Dataset keine Auftragsdaten vorhanden sind, sind die Kategorien in Abbildung 1A nicht vertreten. Wie in Abbildung 1B gezeigt, werden bei diesem Beispiel zwei Kategoriegruppierungen verwendet. Der innere Gruppierungsausdruck gruppiert mithilfe von =Day(Fields!OrderDate.Value) nach Tagen. Der äußere Gruppierungsausdruck gruppiert mithilfe von =Month(Fields!OrderDate.Value) nach Monaten.

Hinweis   Der Beschriftungs-Ausdruck der äußeren Gruppierung ist definiert als =MonthName(Month(Fields!OrderDate.Value)). Dabei wird der Name des Monats als Beschriftung für den Gruppierungsbereich benutzt.

Abbildung 1B: X-Achse im Kategoriemodus mit mehreren Kategoriegruppierungen und -bereichen (zum Vergrößern auf das Bild klicken)
Abbildung 1B: X-Achse im Kategoriemodus mit mehreren Kategoriegruppierungen und -bereichen (zum Vergrößern auf das Bild klicken)

Die Einstellungen in den X-Achseneigenschaften sind in Abbildung  1C dargestellt. Im Kategoriemodus basiert die Semantik für Minimum, Maximum und Intervalle auf dem Kategorieindex. Wenn keine expliziten Achseneigenschaften festgelegt werden, wird für jede Datenkategorie eine Beschriftung angezeigt.

Abbildung 1C: X-Achseneinstellungen im Kategoriemodus (zum Vergrößern auf das Bild klicken)
Abbildung 1C: X-Achseneinstellungen im Kategoriemodus (zum Vergrößern auf das Bild klicken)

Der Skalarmodus der X-Achse in Abbildung 2A

Im Skalarmodus sind auf einer X-Achse nur Werte entweder im numerischen oder im DateTime-Format aufgetragen. Die X-Achse umfasst den gesamten Wertebereich zwischen den Mindest- und Höchstwerten. Aus diesem Grund enthält Abbildung 2A eine Lücke an den Wochenendtagen, da für diese Tage keine Auftragsdaten vorliegen.

Im Skalarmodus ist nur eine Kategoriegruppierung zulässig. Der Wert der Kategoriegruppierung muss im numerischen oder DateTime Format vorliegen. Die Formatierung der X-Achsenbeschriftungen wird mit der Formatierungseinstellung auf der X-Achse festgelegt, in diesem Falle mit MMM dd. Die Einstellungen für die X-Achseneigenschaften sind in Abbildung 2B dargestellt.

Abbildung 2B: X-Achseneinstellungen im Skalarmodus (zum Vergrößern auf das Bild klicken)
Abbildung 2B: X-Achseneinstellungen im Skalarmodus (zum Vergrößern auf das Bild klicken)

Weitere Informationen über numerische und DateTime-Formatausdrücke finden Sie auf den folgenden Seiten im .NET Framework-Entwicklerhandbuch des Microsoft Developer Network (MSDN):

Achsenbeschriftungen

Für Y-Achsenbeschriftungen werden immer numerische Werte verwendet. Wenn keine genauen Achseneinstellungen festgelegt wurden, wird für die Y-Achse der automatische Skalierungsmodus wie folgt eingesetzt:

  • Der Mindestwert der Y-Achse wird durch den kleinsten Y-Wert aller Datenpunkte bestimmt. Handelt es sich bei dem Mindestdatenwert nicht um eine ganze Zahl, sondern um einen Double-Wert (wie z. B. 3,75) und sind Seitenränder deaktiviert, dann erhalten Sie nicht gerundete Y-Achsenbeschriftungen (beispielsweise mit dem Intervall eins: 3,75, 4,75, 5,75 usw).

  • Der Höchstwert der Y-Achse wird automatisch durch den höchsten Y-Wert aller Datenpunkte bestimmt, es sei denn, ein bestimmtes Maximum ist ausdrücklich festgelegt.

  • Das Hauptteilstrichintervall der Y-Achse wird den Datenwerten entsprechend automatisch eingestellt (in Abbildung 3 liegt das Hauptteilstrichintervall bei 20).

  • Das Hilfsteilstrichintervall der Y-Achse wird durch Aufteilung des Hauptteilstrichintervalls in Segmente gebildet (in Abbildung 3 wird als Hilfsteilstrichintervall automatisch 4 eingestellt; somit sind 20 / 4 = 5 Hilfsteilstrichsegmente in einem Hauptteilstrichsegment enthalten).

  • Da die Werte auf der Y-Achse immer numerisch sind, können numerische Formatzeichenfolgen direkt verwendet werden. Die Einstellung gilt dann für alle generierten Y-Achsenbeschriftungen.

Abbildung 3: Y-Achseneinstellungen (zum Vergrößern auf das Bild klicken)
Abbildung 3: Y-Achseneinstellungen (zum Vergrößern auf das Bild klicken)

X-Achsenmodi

Wie zuvor bereits erwähnt, gibt es mehrere Funktionsmodi für die X-Achse. Abhängig vom jeweiligen Modus stehen unterschiedliche Formatierungsoptionen zur Verfügung, und auch die Achseneinstellungen („Minimum“, „Maximum“, „Kreuz bei“ usw.) werden unter Umständen anders ausgelegt. Die verschiedenen Formatierungsmöglichkeiten werden im Folgenden erläutert:

  • Skalarmodus basierend auf numerischen Kategoriegruppenwerten

    Bei diesen Einstellungen ist die X-Achse der Y-Achse sehr ähnlich. Achseneinstellungen wie etwa „Minimum“, „Maximum“, „Kreuz bei“, „Hauptteilstrich“ und „Hilfsteilstrich“ werden als Ganzzahl- oder Double-Werte interpretiert.

    Da die Werte auf der X-Achse numerisch sind, können Sie numerische Formatzeichenfolgen direkt einsetzen.

  • Skalarmodus basierend auf DateTime-Kategoriegruppenwerten

    Achsen- Minimum : Wenn für das Achsenminimum eine Konstante (wie z. B. 2005) oder ein Ausdruck mit ganzzahligem Ergebnis (z. B. =2005) festgelegt ist, wird der Wert als erster Tag in dem jeweiligen Jahr interpretiert (z. B. 1. Januar 2005).

    Achsen- Maximum : Eine ganzzahlige Einstellung wird als letzter Tag des jeweiligen Jahres interpretiert (z. B. 31. Dez. 2005).

    Achse Kreuz bei : Die Einstellung wird als Mitte des Jahres interpretiert.

    Hauptteilstrich und Hilfsteilstrich: Die Teilstricheinstellungen werden als Tage interpretiert (gleichbedeutend mit dem OADate-Format). So bedeutet 5 z. B. ein Intervall von 5 Tagen, und 0,5 bedeutet ein Intervall von einem halben Tag (12 Stunden).

    Zur Formatierung der Beschriftung können die Standard-DateTime-Formatzeichenfolgen eingesetzt werden.

  • Kategoriemodus (die Option „Numerische oder Zeitskalawerte“ ist nicht aktiviert)

    Ausgehend von den Werten des Kategoriegruppenausdrucks sucht das Diagrammsteuerelement in mehreren Datenreihen nach entsprechenden Kategorien (z. B. werden Daten mit der Kategorie Januar und der Datenreihe 2006 in der gleichen Datenansammlung dargestellt wie die Daten der Kategorie Januar und der Datenreihe 2007).

    Die eingestellten Formatzeichenfolgen auf der Registerkarte „X-Achse“ bleiben ohne Wirkung, es sei denn, der Kategoriegruppenausdruck (oder der Beschriftungsausdruck wie in Abbildung 4) wird zu einem numerischen oder DateTime-Datentyp ausgewertet. Bei Verwendung des Kategoriemodus führt die Auswertung des Kategoriegruppenausdrucks häufig zu einem Textobjekt, wodurch ein später benutzter Formatcode ohne Wirkung bleibt. Den Beschriftungsausdruck der Kategoriegruppe können Sie entweder hinzufügen, ändern oder die Formatierung direkt über den Beschriftungsausdruck übernehmen (siehe Abbildung 4).

    Hinweis   Im Kategoriemodus basiert die Semantik für Minimum, Maximum und Intervalle auf dem Kategorieindex. Wird zum Beispiel das X-Achsen-Minimum auf 2 eingestellt, so wird die erste Datenkategorie nicht dargestellt. Wenn für das Hauptteilstrichintervall 5 festgelegt wird, heißt das, dass Beschriftungen nur für jede fünfte Kategorie auf der X-Achse angezeigt werden. Dies ist dann von Nutzen, wenn die X-Achse mit vielen Kategorien (und Beschriftungen) überfüllt ist und die zugrunde liegende Semantik der Kategorien numerisch ist.

    Hinweis   Bei Reporting Services 2005 ist es auch möglich, Ausdrücke in alle Eingabefelder zu schreiben, die sich auf den Registerkarten X-Achse und Y-Achse befinden: Titel, Minimum, Maximum, Hauptteilstrich, Hilfsteilstrich usw.

Abbildung 4: Wenn der Beschriftungsausdruck explizit definiert ist, wird das Ergebnis auf der X-Achse (Kategorieachse) dargestellt, das Ergebnis des Gruppierungsausdrucks dagegen nicht.
Abbildung 4: Wenn der Beschriftungsausdruck explizit definiert ist, wird das Ergebnis auf der X-Achse (Kategorieachse) dargestellt, das Ergebnis des Gruppierungsausdrucks dagegen nicht.

Fragen und Antworten zur Formatierung von Achsenbeschriftungen&
  • Frage (Y-Achse): Auf der Y-Achse sollen aus kosmetischen Gründen nur ganzzahlige Beschriftungen erscheinen. Wie kann ich das bewerkstelligen?

    Antwort: Wenn keine Achseneintellungen festgelegt wurden, wählt das Diagrammsteuerelement die Werte automatisch auf der Basis der Y-Werte der Datenpunkte aus. Wenn es sich bei den Mindest- und Höchstwerten der Datenpunkte nicht um ganze Zahlen handelt, werden als Y-Achsenbeschriftungen Double-Werte verwendet

    Wenn für eine der Achseneinstellungen (z. B. Minimum oder Kreuz bei) vom Berichtersteller ausdrücklich ein Ganzzahlwert festgelegt wurde, rundet das Diagrammsteuerelement die automatisch ermittelten Werte auf den nächsten Ganzzahlwert auf und zeigt dann „nettere“ Beschriftungen an. Sie können beispielsweise den Mindestwert der Y-Achse dynamisch festlegen und eine Rundung wie die Folgende vorgeben: =Floor(Min(Fields!Freight.Value)).

  • Frage (skalare X-Achse): Nach dem Aktivieren der Option Numerische oder Zeitskalawerte werden zur Laufzeit im Diagramm keine Datenpunkte eingetragen. Woran liegt das?

    Antwort: Sehr wahrscheinlich ist das Ergebnis des Kategoriegruppenausdrucks ein Textwert und keine Zahl. Der Kategoriegruppenausdruck muss entsprechend geändert werden. Wenn Sie die Abfrage nicht dahingehend verändern möchten, dass skalare Datenwerte anstatt Werte im Textformat abgerufen werden, haben Sie auch die Möglichkeit, mithilfe bestimmter Microsoft Visual Basic-Funktionen eine Formatumwandlung im Bericht durchzuführen, z. B. mit CInt(), CDbl() oder CDate().

  • Frage (X-Achse im Kategoriemodus): Wenn die Anzahl der Kategorien zunimmt, wird die X-Achse überfüllt, bis schließlich gar keine Achsenbeschriftungen mehr eingetragen werden. Wie kann die Anzahl der Beschriftungen im Kategoriemodus der X-Achse beschränkt werden?

    Antwort: Das Diagrammsteuerelement platziert die X-Achsenbeschriftungen so, dass sich die Beschriftungstexte möglichst nicht überschneiden. In der Standardeinstellung enthält die X-Achse für jede Kategorie eine Beschriftung. Dieses Standardverhalten können Sie ausschalten, indem Sie für die X-Achse einen bestimmten Hauptteilstrichwert festlegen. Wenn Sie den Hauptteilstrich z. B. auf 5 einstellen, erscheint nur für jede fünfte Kategorie eine Achsenbeschriftung.

  • Frage (X-Achse): Wie funktioniert das automatische Positionieren von X-Achsenbeschriftungen?

    Antwort: In den integrierten Reporting Services-Diagrammen ist zurzeit lediglich eine automatische Positionierung möglich, um Überschneidungen von X-Achsenbeschriftungen zu vermeiden. Die Richtung der Achsenbeschriftungen (horizontal/vertikal) hängt von den Beschriftungstextgrößen und dem freien Platz ab. X-Achsenbeschriftungen werden entweder horizontal auf einer Linie, horizontal auf mehreren Linien versetzt oder vertikal platziert. Das Platzieren von X-Achsenbeschriftungen mit einem bestimmten Winkel oder eine explizite manuelle Einstellung für einzelne X-Achsenbeschriftungspositionen wird zurzeit nicht unterstützt.

    Hinweis   Es gibt mehrere Diagramm-Add-Ins von Fremdanbietern, die mehr Platzierungsmöglichkeiten für Achsenbeschriftungen bieten. Diese Add-Ins können in Reporting Services 2005 nachträglich installiert werden.

Datenpunktbeschriftungen und Legendenbeschriftungen

Mithilfe von Datenpunktbeschriftungen können bestimmte Werte unter allen aufgetragenen Datenpunkten im Diagramm besonders hervorgehoben werden (wie z. B. ein Gesamtmindest- oder -höchstwert).

Zum Aktivieren von Datenpunktbeschriftungen müssen Sie den Diagrammwert im Dialogfeld Diagrammeigenschaften ändern. Das Dialogfeld Diagrammwert bearbeiten wird mit der Registerkarte Punktbezeichnungen und der Option Punktbezeichnungen anzeigen geöffnet.

Positionieren von Datenbeschriftungen

Wenn Sie die Anzeige von Punktbezeichnungen aktivieren, wird in der Standardeinstellung für jeden Datenpunkt eine Bezeichnung angezeigt. Die Datenpunktbeschriftung wird automatisch so angeordnet, dass keine Überschneidungen entstehen. Wenn sich die Beschriftungen doch überschneiden, verschiebt das Diagrammsteuerelement die sich überschneidenden Beschriftungen an eine freie Stelle im Diagrammzeichenbereich (und erstellt Konturlinien, die die Datenpunktbeschriftungen mit den Datenpunktwerten verbinden). Wenn sich zu viele Beschriftungen überschneiden, werden bestimmte Datenpunktbeschriftungen entfernt, bis genügend Platz frei ist, um die übrigen Beschriftungen ohne Überschneidung zu platzieren.

Neben der automatischen Platzierung können Sie explizit auch eine manuelle Beschriftungsposition (oben, links, Mitte usw.) festlegen. Abhängig von den jeweiligen Datenwerten sowie der Länge und Größe der Datenpunktbeschriftungen kann dies allerdings zu überschneidenden Beschriftungstexten führen.

Standardmäßig enthält eine Datenpunktbeschriftung den Y-Wert des Datenpunkts. Es ist auch möglich, einen speziellen Datenpunktbeschriftungsausdruck sowie numerische oder DateTime-Formatzeichenfolgen zu definieren, um die Beschriftung individuell anzupassen. Im Allgemeinen ist ein Ausdruck zur Berechnung einer Datenpunktbeschriftung dem Ausdruck ähnlich, mit dem der Y-Wert in einem Datenpunkt-Werteausdruck rechnerisch ermittelt wird. Um beispielsweise nur dann Datenpunktbeschriftungen anzuzeigen, wenn der relative Anteil des betreffenden Segments mehr als 5 Prozent der Gesamtmenge ausmacht, können Sie einen ähnlichen Datenpunkt-Beschriftungsausdruck wie anhand des folgenden Codes aufgezeigt benutzen.

  1. Verwenden Sie den folgenden Ausdruck zur Ermittlung der Datenpunktbeschriftung:

    =Code.GetLabel(Sum(Fields!Sales.Value), Sum(Fields!Sales.Value,"SalesChart"))
    
  2. Öffnen Sie das Dialogfeld Berichtseigenschaften, und klicken Sie auf die Registerkarte Code. Tragen Sie unter der Option Benutzerdefinierter Code die im Folgenden erläuterte Funktion GetLabel() ein.

    Public Function GetLabel(ByVal currentValue As Double, ByVal totalValue As Double) As String
        If currentValue / totalValue < 0.05 Then
            Return " "
        Else
            Return Format(currentValue / totalValue, "P1")
        End If
    End Function
    
    
Erläuterungen zum Code

Die Funktion GetLabel() nimmt zwei Argumente entgegen. Mit dem ersten Argument wird der aktuelle Wert des jeweiligen Datenpunkts übergeben. Das zweite Argument enthält die rechnerische Ermittlung des Gesamtbetrags. Die Funktion errechnet den relativen Anteil. Ist dieser geringer als 5 Prozent (0,05), wird ein Text mit einem Leerzeichen ausgegeben.

Hinweis   Wird eine Null oder ein Leertext zurückgegeben, so wird die automatisch generierte Standardbeschriftung eingetragen. Liegt der relative Anteil bei mindestens 5 Prozent, wird eine prozentual formatierte Zeichenfolge zurückgegeben (Formatzeichenfolge: P1).

Ein Anwendungsbeispiel für diese Formatierungsweise finden Sie in den Beispielbericht PiePercentage, der diesem Whitepaper beigefügt ist.

Positionen von Datenbeschriftungen in Kreis- und Ringdiagrammen

Bei Kreis- und Ringdiagrammen sind nur zwei Positionen für Datenpunktbeschriftungen möglich: Innen (hierzu muss die Position der Datenpunktbeschriftung auf automatisch oder Mitte eingestellt werden) und Außen (beliebige andere Beschriftungsposition). Ein Beispiel für eine äußere Beschriftung ist in Abbildung 5 (sowie im Beispielbericht PieSimplePercentage) zu sehen.

Abbildung 5: Datenpunktbeschriftungen außerhalb des Diagramms bei einem Kreisdiagramm
Abbildung 5: Datenpunktbeschriftungen außerhalb des Diagramms bei einem Kreisdiagramm

Die Lage der Kreissegmentbeschriftungen kann wie in Abbildung 6 gezeigt festgelegt werden.

Abbildung 6: Festlegen der Datenpunktbeschriftungen außerhalb des Diagramms bei Kreis- oder Ringdiagrammen (durch Auswahl einer beliebigen anderen Position als der Mitte)
Abbildung 6: Festlegen der Datenpunktbeschriftungen außerhalb des Diagramms bei Kreis- oder Ringdiagrammen (durch Auswahl einer beliebigen anderen Position als der Mitte)

Legendenbeschriftungen

Im Allgemeinen hängen Legendenbeschriftungen von dynamischen Datenreihengruppenwerten (oder Beschriftungen, sofern für die Gruppe explizit festgelegt) und den Bezeichnungen der (statischen Reihen-) Werte ab. Da das Diagramm im Wesentlichen eine zweidimensionale Darstellung gruppierter Hierarchien ist, werden Legendenbeschriftungen in Abhängigkeit von der jeweiligen Hierarchie erstellt.

Wenn ein Diagramm zum Beispiel zwei Datenreihengruppierungen (die äußere ist als OrderYear und die innere als OrderQuarter definiert) und nur einen Diagrammwert (zum Beispiel Actual) enthält, werden zur Ermittlung der Legendenbeschriftungen die Gruppenwerte mit den Diagrammwerten verkettet, wie dies in Tabelle 1 zu sehen ist.

Tabelle 1

OrderYear-Beschriftung

OrderQuarter-Beschriftung

Diagrammwert-Datenreihenbeschriftung

ERMITTELTE LEGENDENBESCHRIFTUNG

2006

Q1

Actual

2006 – Q1 – Actual

2006

Q2

Actual

2006 – Q2 – Actual

Angenommen, ein zweiter Diagrammwert namens Budget kommt hinzu. Unter Verwendung der gleichen Daten wie im vorherigen Beispiel sehen die ermittelten Beschriftungen aus wie in Tabelle 2 gezeigt.

Tabelle 2

OrderYear-Beschriftung

OrderQuarter-Beschriftung

Diagrammwert-Datenreihenbeschriftung

ERMITTELTE LEGENDENBESCHRIFTUNG

2006

Q1

Actual

2006 – Q1 – Actual

2006

Q1

Budget

2006 – Q1 – Budget

2006

Q2

Actual

2006 – Q2 – Actual

2006

Q2

Budget

2006 – Q2 – Budget

Hinweis   Einzelne innere Ebenen in der Hierarchie können Sie ausklammern, indem Sie als Rückgabewert für den Gruppenbeschriftungsausdruck ein Leerfeld (="") festlegen. Die jeweilige Gruppenebene wird dadurch in die Erstellung der Legendenbeschriftungen nicht einbezogen.

Leere Datenpunkte und Beschriftungen

Folgende Situation ist Ihnen vielleicht geläufig. Sie haben ein Diagramm mit einer Datenreihe erstellt, Datenpunktbezeichnungen sind aktiviert, und das Diagramm sieht gut aus. Nun möchten Sie eine dynamische Datenreihengruppe hinzufügen, damit im Diagramm mehrere Datenreihen ausgewiesen werden. Jetzt enthält das Diagramm plötzlich zusätzliche Beschriftungen (wegen leerer Datenpunkte).

Leere Datenpunkte entstehen, wenn das zugrunde liegende Dataset keine Datenwerte für jede Datenreihen-/Kategoriekombination enthält. Das Diagramm ist im Wesentlichen mit einer (kargen) Matrix mit leeren Zellen vergleichbar.

Die Beschriftungen für die leeren Datenpunkte können Sie entfernen. Verzichten Sie auf das Aktivieren von Datenpunktbezeichnungen sowie auf Standardbeschriftungen, sondern greifen Sie auf den Lösungsansatz des diesem Whitepaper beigefügten Beispielberichts EmptyDataPointLabels zurück (siehe auch Abbildung 7). Der folgende Beispielcode erledigt dies.

  1. Ermitteln Sie anhand der Funktion Count(), wie viele zugrunde liegende Dataset-Zeilen für diesen Datenpunkt zusammengefasst werden. Wenn die ermittelte Anzahl gleich null ist, handelt es sich um einen leeren Datenpunkt. Übergeben Sie die Anzahl an eine benutzerdefinierte Code-Funktion für den jeweiligen Beschriftungswert:

    =Code.GetLabel(Avg(Fields!UnitsInStock.Value), Count(Fields!UnitsInStock.Value))
    
  2. Öffnen Sie das Dialogfeld Berichtseigenschaften, und klicken Sie auf die Registerkarte Code. Tragen Sie unter der Option Benutzerdefinierter Code die im Folgenden erläuterte Funktion GetLabel() ein.

    Public Function GetLabel(ByVal datapointValue As Double, ByVal count As Integer) As String
        If count = 0 Then
            Return " "
        Else
            Return Format(datapointValue, "N1")
        End If
    End Function
    

Abbildung 6: Festlegen der Datenpunktbeschriftungen außerhalb des Diagramms bei Kreis- oder Ringdiagrammen (durch Auswahl einer beliebigen anderen Position als der Mitte)
Abbildung 7: Beispielbericht mit leeren Datenpunkten ohne Beschriftungen

Fragen und Antworten zur Formatierung von Datenpunktbeschriftungen&
  • Frage: Wozu dienen die grauen Linien (so genannte Konturlinien) neben den Datenpunktbezeichnungen, wenn das Diagramm mit Datenpunkten und Beschriftungen überfüllt ist?

    Antwort: Wenn für die Positionierung der Datenpunktbezeichnungen Automatisch eingestellt ist, verschiebt das Diagrammsteuerelement die Beschriftungen in freie Diagrammbereiche, um Überschneidungen zwischen Datenpunktbezeichnungen zu vermeiden. Die Konturlinien dienen zum Verbinden der Datenpunktbezeichnungen mit den Datenpunktpositionen.

    Mit einer manuellen Positionierung können Sie dies vermeiden. Mithilfe von Ausdrücken können Sie die meisten Datenpunktbezeichnungen dynamisch ausblenden, indem Sie als Auswertungsergebnis eine Zeichenfolge mit einem Leerschritt (=" ") angeben. Andernfalls wird die Standardbeschriftung angezeigt, sofern Datenpunktbezeichnungen aktiviert sind.

  • Frage: Können Dundas-Schlüsselwörter für die Beschriftungsformatierung verwendet werden?

    Antwort: Ja, Sie können die integrierten Dundas-Schlüsselwörter für die Datenpunktbezeichnungen verwenden. Im Allgemeinen ist es aber nicht ratsam, RDL-Ausdrücke und Dundas-Schlüsselwörter gleichzeitig zu verwenden (RDL-Ausdrücke werden zuerst ausgewertet und Dundas-Funktionen werden erst später vom Diagrammsteuerelement interpretiert). Tabelle 3 enthält eine Liste nützlicher Dundas-Schlüsselwörter.

    Tabelle 3 Dundas-Schlüsselwort Wird ersetzt durch #VALX X-Wert des Datenpunkts #VAL Y-Wert des Datenpunkts #VALY, #VALY2, #VALY3 usw. Erster Y-Wert, zweiter Y-Wert, dritter Y-Wert usw. #INDEX Datenpunktindexzahl innerhalb der Reihe #TOTAL Gesamtbetrag aller Y-Werte in der aktuellen Datenreihe #VALY{C2} Y-Wert des Datenpunkts, der mit der Formatzeichenfolge C2 formatiert ist (Währungsformatierung)

Beispieldiagramme und -berichte

Dieser Abschnitt enthält Beispiele für verschiedene Diagramm- und Berichtsvarianten. Beim Studieren dieser Beispiele hilft es auch, zu den Themen rund um die Diagrammbeschriftung zurückzuspringen, die in den vorherigen Abschnitten behandelt wurden. Folgende Beispiele werden in diesem Abschnitt behandelt.

  • Säulen- und Linienmischdiagramme

    Beschreibt Mischdiagramme allgemein und den Beispielbericht SalesCostTarget im Besonderen.

  • Pareto-Diagramme

    Implementiert eine Pareto-Darstellung für ein Diagramm (Beispielbericht ParetoChart).

  • Gleitende Durchschnittsberechnungen

    Berechnung und Darstellung von Zeitreihentendenzen in Diagrammen (Beispielbericht MovingAverage).

  • Benutzerdefinierte Diagrammfarbpaletten und Legenden

    So definieren Sie individuelle Farben in Ihrem Diagramm (Beispielbericht CustomColorPalette).

  • Kreis- und Ringdiagramme

    Spezielle Hinweise, die beim Umgang mit Kreis- und Ringdiagrammen zu beachten sind.

  • Hinzufügen von Diagrammdatentabellen

    Veranschaulicht, wie zusammengefasste Diagrammdaten mit Detaildaten verknüpft werden (Beispielbericht PiePercentage).

  • Punkt- und Blasendiagramme

    Wichtige Tipps für das Erstellen von Punkt- und Blasendiagrammen (BubbleChart, StepFunctionChart).

  • In Tabellen integrierte Diagramme

    Unter Umständen benötigen Sie keine komplexen Diagrammdarstellungen, oder Sie haben es mit einer zur Laufzeit unbekannten Datenmenge zu tun und möchten aber auf brauchbare und elegante Datendarstellungen nicht verzichten. In diesem Abschnitt werden diesbezügliche Möglichkeiten erläutert (TableInlineCharts).

  • Diagrammerweiterbarkeit und manuelles Erstellen von Diagrammen

    Erörtert Optionen, wenn die integrierten Diagramme nicht ausreichen.

Beispielberichte auf der Grundlage der AdventureWorks-Beispieldatenbank von SQL Server 2005 sowie der Northwind-Beispieldatenbank sind in der Downloaddatei zu diesem Whitepaper enthalten.

Säulen- und Linienmischdiagramme

Diagramme, in denen mehrere Datenreihen als Säulen und andere Datenreihen als Linien dargestellt werden, dienen häufig dazu, Gesamt-Trends und Zielwerte zu veranschaulichen, oder dazu, die Daten innerhalb des Diagramms weiter zu analysieren. Dieser Abschnitt enthält allgemeine Informationen über das Erstellen solcher Diagramme innerhalb von Reporting Services.

So erstellen Sie ein Säulen- und Linienmischdiagramm:
  • Fügen Sie dem Bericht ein Diagramm hinzu und stellen Sie als Diagrammtyp Säule ein.

  • Ergänzen Sie Kategoriegruppen und/oder Datenreihengruppen sowie Datenwerte.

  • Damit die Datenwerte als Linien dargestellt werden, müssen Sie im Bericht-Designer folgende Schritte ausführen:

    1. Öffnen Sie das Dialogfeld Berichtseigenschaften.

    2. Klicken Sie auf die Registerkarte Daten.

    3. Wählen Sie den Datenwert aus, der als Linie dargestellt werden soll, und klicken Sie auf Bearbeiten.

    4. Klicken Sie im Dialogfeld Diagrammwert bearbeiten auf die Registerkarte Darstellung, und aktivieren Sie die Option Daten als Linie zeichnen (siehe Abbildung 8).

      Abbildung 8: Zeichnen einer Datenreihe als Linie in einem Säulendiagramm
      Abbildung 8: Zeichnen einer Datenreihe als Linie in einem Säulendiagramm

So fügen Sie dem Diagram einen konstanten oder dynamischen Zielwert hinzu:
  1. Gestalten Sie das Diagramm.

  2. Fügen Sie auf der Registerkarte Daten im Dialogfeld Diagrammeigenschaften einen neuen Datenwert hinzu (z. B. Target).

  3. Legen Sie den Zielwert für Target fest (bei dem Beispiel in Abbildung 9 wird der konstante Zielwert 100000 in allen Kategorien verwendet). Achten Sie darauf, dass der verwendete Ausdruck mit dem Gleichheitszeichen = beginnt. Andernfalls wird der Wert nicht als numerischer Wert interpretiert.

    Abbildung 9: Hinzufügen eines Zielwerts
    Abbildung 9: Hinzufügen eines Zielwerts

In dem Beispielbericht SalesCostTarget (siehe Abbildung 10) wird dieser Ansatz dafür verwendet, eine einfache Umsatzziellinie in das Diagramm aufzunehmen.

Abbildung 10: Zielwert (rote Linie) (zum Vergrößern auf das Bild klicken)
Abbildung 10: Zielwert (rote Linie) (zum Vergrößern auf das Bild klicken)

Hinweis   Da Linien für eine Liniendiagrammreihe durch das Verbinden der Datenpunkte mehrerer Kategorien gebildet werden, ist nur dann eine Linie zu sehen, wenn die Kategoriegruppierung zur Laufzeit mindestens zwei unterschiedliche Gruppeninstanzwerte enthält.

Hinweis   Wenn das Diagramm eine oder mehrere Datenreihengruppen enthält, wird der Zieldatenwert bei jeder Datenreihengruppeninstanz wiederholt. Wenn es für jede Gruppeninstanz spezielle Zielwerte gibt, ist dies sehr von Nutzen.

Wenn für alle Datenreihen aber nur ein globaler Zielwert dargestellt werden soll, können Sie den Zieldatenwert wie folgt dynamisch festlegen:

=iif(Fields!<SameFieldAsSeriesGroup>.Value = First(Fields!<SameFieldAsSeriesGroup>.Value, <ChartName>), <TargetValue>, Nothing)

Ein Beispiel für einen speziellen Ausdruck könnte folgendermaßen aussehen:

=iif(Fields!Year.Value = First(Fields!Year.Value, "SalesChart"), 100000, Nothing)
Pareto-Diagramme

Ein Pareto-Diagramm fasst die relative Bedeutung der Unterschiede zwischen Datengruppen zusammen und stellt diese dar. Pareto-Diagramme dienen der besonderen Hervorhebung der wenigen wichtigsten unter den vielen nützlichen Daten. Ein Pareto-Diagramm kann auch als Säulendiagramm definiert werden, bei dem die Säulen in absteigender Reihenfolge sortiert sind, um die beste Möglichkeit für eine Verbesserung herauszustellen.

Zwar werden Pareto-Diagramme von der integrierten Reporting Services-Diagrammfunktion gegenwärtig nicht unterstützt, Sie können ein Pareto-Diagramm aber mithilfe der Reporting Services 2005-Funktionen und durch selbst geschriebenen Code erstellen. Dieser Abschnitt enthält eine ausführliche Erläuterung zu dem diesem Whitepaper beigefügten Beispielbericht ParetoChart.

Folgendes Szenario ist die Ausgangssituation für den Beispielbericht ParetoChart.

Die SQL Server 2005 AdventureWorks Datenbank enthält Daten über Vertriebsmitarbeiter. Das besondere Interesse gilt dabei folgenden Informationen über die Vertriebsmitarbeiter:

  • Wie sieht die Pareto-Analyse bei Betrachtung der Vertriebsmitarbeiter mit den höchsten Provisionen im Vorjahr aus? (Siehe die orangefarbene Linie in Abbildung 11.)

  • Welche Vertriebsmitarbeiter erhielten im letzten Jahr die höchsten Provisionen, und wie sieht der Vergleich mit ihrem Gesamtumsatz im laufenden Jahr aus? (Siehe die blauen und grünen Säulen in Abbildung 11.)

  • Gibt es beträchtliche Veränderungen im Hinblick auf den Vertriebserfolg, wenn man die Provisionen des Vorjahres mit den Umsätzen des laufenden Jahres vergleicht? Dies lässt sich leicht beantworten, wenn man die blauen und die grünen Säulen vergleicht, aber anhand der großen Lücke zwischen der orangefarbenen und der roten Pareto-Linien in Abbildung 11 wird dies noch deutlicher.

  • Die Daten eines bestimmten Vertriebsmitarbeiters sollen nun detaillierter in die Vergangenheit und die Vertriebsergebnisse dargestellt werden; außerdem sollen die Daten mehrerer Jahre auf bestimmte Tendenzen hin untersucht werden.

Dazu werden die Vertriebsdatenwerte (grüne Säulen in Abbildung 11) mit Drillthroughaktionen versehen, um eine Detailuntersuchung der Daten eines bestimmten Vertriebsmitarbeiters mit einer Trendanalyse durchzuführen. Der Drillthroughbericht (Beispielbericht MovingAverage) wird im nächsten Abschnitt erläutert.

Abbildung 11: Pareto-Diagramm des Beispielberichts (zum Vergrößern auf das Bild klicken)
Abbildung 11: Pareto-Diagramm des Beispielberichts (zum Vergrößern auf das Bild klicken)

So wird der Pareto-Diagrammbericht erstellt
  1. Definieren Sie eine Abfrage, mit der die erforderlichen Vertriebsdaten abgerufen werden.

    Die Abfrage führt eine Vorsortierung der Daten zu jedem Vertriebsmitarbeiter auf Basis der Provisionswerte durch. Die einzelnen Vertriebsaufträge werden dabei nicht eingelesen, da sie für diesen Bericht nicht erforderlich sind. Dadurch wird auch die Größe des Datasets im Rahmen gehalten.

  2. Legen Sie das Gesamtlayout für das Diagramm fest.

    Nehmen Sie ein Säulendiagramm in den Bericht auf. Zum Untersuchen der Daten pro Vertriebsmitarbeiter fügen Sie eine Kategoriegruppe pro Vertriebsmitarbeiter hinzu (gruppiert nach =Fields!SalesPersonID.Value). Als Kategoriebeschriftung übernehmen Sie den Vor- und Nachnamen der Person. Dazu wird als Ausdruck für die Kategoriegruppenbeschriftung Folgendes eingestellt.

    =Fields!FirstName.Value & " " & Fields!LastName.Value
    
  3. Bereiten Sie das Diagramm für die Pareto-Berechnungen vor.

    Für die Berechnungen wird die Funktion RunningValue() verwendet.

    Hinweis   Die Funktion RunningValue wird nur in Diagrammen ab Reporting Services 2005 unterstützt.

    Ähnlich wie bei einer Matrix ist für die Funktion RunningValue ein expliziter Gruppierungsbereich in einem Diagramm erforderlich, um den laufenden Wert zu ermitteln, wenn der laufende Wert für alle Kategorien einer bestimmten Datenreihe (die Richtung ist im Wesentlichen horizontal) oder für alle Datenreihen einer bestimmten Kategorie ausgewiesen werden soll (nicht so üblich).

    Für die Pareto-Berechnungen nutzen Sie eine RunningValue-Funktion, bei der ein Reihengruppenname als „Reset“-Bereich übernommen wird (und somit in allen Kategorien vorkommt). Da für dieses Diagramm noch keine Reihengruppe vorliegt, wird nun einfach eine Pseudoreihengruppe auf Basis eines konstanten Wertes (z. B. 1) hinzugefügt.

    Gruppenausdruck: 1

    Beschriftungsausdruck: ="" (Zum Ausblenden der Datenreihenbeschriftung aus den generierten Legendenbeschriftungen)

    Das Ergebnis ist eine Datenreihe und zugleich ein bestimmter Datenreihenbereichsname.

  4. Nun werden die Provisions- und Vertriebsdaten als Säulen hinzugefügt.

    Zum Ergänzen der Datenwerte für Bonus sowie für SalesYTD in das Diagramm werden die entsprechenden Dataset-Felder mit der Maus auf das Diagramm verschoben.

    Hinweis   Bei diesem Beispiel wird für die Provisions- und Vertriebswerte die Aggregatfunktion Sum() verwendet.

    Die Legende soll in der Ecke oben links im Diagrammzeichenbereich platziert werden. Die Y-Achse soll skaliert werden, damit der maximale Datenpunktwert in dem Diagramm 75 Prozent der gesamten Höhe der Y-Achse auf keinen Fall überschreitet.

    Dazu werden die Provisionsberechnungen mit dem Skalierfaktor 75 Prozent versehen:

    =0.75 * Sum(Fields!Bonus.Value) / Max(Fields!Bonus.Value, "SeriesGroup")
    

    Dasselbe gilt auch für die Vertriebsdatenberechnung:

    =0.75 * Sum(Fields!SalesYTD.Value) / Max(Fields!SalesYTD.Value, "SeriesGroup")
    
  5. Die Y-Achse richten Sie nun als prozentuale Achse ein.

    Im vorherigen Schritt wurde eine Prozentwertberechnung für die Provisions- und Vertriebsdatenberechnungen festgelegt (relativer Betrag im Verhältnis zum Höchstwert).

    Wenn als Formatzeichenfolgen der Y-Achse P0 festgelegt wird, wird die Prozentzahlformatierung angewendet (die Y-Achse wird zwischen 0,0 und 1,0 skaliert). Um übersichtliche Intervalle zu erhalten, wird für die Y-Achse der Hauptteilstrich 0,2 festgelegt. Die resultierenden Intervalle liegen um je 20 Prozent auseinander.

  6. Nun werden die Provisions- und Vertriebsdaten-Pareto-Werte als Linien hinzugefügt.

    Die Funktion RunningValue() führt eine kumulative Berechnung durch, bis sie wieder von vorne beginnt. Diese Funktionsrückkehr soll ausgeschaltet werden. Da anfangs keine spezielle Datenreihengruppe vorhanden war, wurde in Schritt 3 eine solche hinzugefügt.

    Bei der Pareto-Berechnung wird die kumulative Summe durch die Gesamtwerte geteilt. Zur Pareto-Berechnung der Provision wird folgender Ausdruck verwendet.

    =RunningValue(Fields!Bonus.Value, Sum, "SeriesGroup") / Sum(Fields!Bonus.Value, "SeriesGroup")

    Das Gleiche wird nun auch bei der Pareto-Berechnung der Vertriebsdaten wiederholt:

    =RunningValue(Fields!SalesYTD.Value, Sum, "SeriesGroup") / Sum(Fields!SalesYTD.Value, "SeriesGroup")
  7. Nun wird der Vertriebsdatenwert mit einer Drillthroughaktion versehen.

    Um eine Drillthroughanalyse der Vertriebsdaten eines bestimmten Vertriebsmitarbeiters zu ermöglichen, wird der Vertriebsdatenpunkt im Beispielbericht MovingAverage mit einer Drillthroughaktion versehen (siehe Abbildung 12). Da nur ein bestimmter Vertriebsmitarbeiter untersucht werden soll, legen Sie für den Drillthroughparameter SalesPersonID den Wert der gegenwärtigen Kategoriegruppe fest. Bei diesem Beispiel handelt es sich dabei um die gegenwärtige Salesperson-ID: =Fields!SalesPersonID.Value.

    Abbildung 12: Hinzufügen einer Drillthroughaktion
    Abbildung 12: Hinzufügen einer Drillthroughaktion

  8. Nun kann das Diagramm zum Abschluss formatiert, mit Datenpunktbezeichnungen und einer Legende versehen werden.

Gleitende Durchschnittsberechnungen

Ein gleitender Durchschnitt gehört zu einer Reihe ähnlicher statistischer Erhebungen zur Untersuchung von Zeitreihendaten. Eine gleitende Durchschnittsreihe lässt sich für jede beliebige Zeitreihe ermitteln.

Zwar werden gleitende Durchschnittsberechnungen von den integrierten Reporting Services-Diagrammen nicht direkt unterstützt, Sie können diese Berechnungen mit eigenem Code aber selbst durchführen. Dieser Abschnitt enthält ausführliche Erläuterungen zum Beispielbericht MovingAverage.

Der Beispielbericht bezieht sich auf das Szenario, das im vorherigen Abschnitt über Pareto-Diagramme geschildert wurde. Zu einem bestimmten Vertriebsmitarbeiter sollen die vergangenen und die gegenwärtigen Vertriebsresultate analysiert und die Daten mehrerer Jahre auf bestimmte Tendenzen hin untersucht werden. Durch das Ermitteln gleitender Durchschnittswerte sollen kurzzeitige Schwankungen egalisiert und langfristigere Trends oder Zyklen herausgestellt werden.

Das Beispiel MovingAverage zeigt, wie ein einfacher gleitender Durchschnitt errechnet werden kann (das ungewichtete Mittel der vorherigen n Datenpunkte). Bei diesem speziellen Beispiel werden die Vertriebsdaten der letzten drei Monate herangezogen. Siehe Abbildung 13.

Abbildung 13: Gleitende Durchschnittsberechnung (zum Vergrößern auf das Bild klicken)
Abbildung 13: Gleitende Durchschnittsberechnung (zum Vergrößern auf das Bild klicken)

Berichterstellung
  • Definieren Sie eine Abfrage, mit der die erforderlichen Vertriebsdaten abgerufen werden.

    Die Abfrage ist parametrisiert, damit nur die Daten des jeweiligen Vertriebsmitarbeiters abgerufen werden. Der festzulegende Abfrageparameter hängt von einem Berichtsparameter ab, dessen Angabe aus einem Dataset mit einer Liste gültiger Werte stammt.

  • Legen Sie das Gesamtlayout für das Diagramm fest.

    Nehmen Sie ein Säulendiagramm in den Bericht auf. Nutzen Sie die X-Achse im Kategoriemodus, um zwei Gruppierungsebenen definieren zu können: eine innere Gruppierung nach Monaten und eine äußere Gruppierung nach Jahren mit Gruppierungsbereichen. Für die Monatsgruppierung wird der folgende explizite Gruppenbeschriftungsausdruck eingesetzt, um den Monat als verkürzte Monatsangabe zu formatieren. =Format(Fields!OrderDate.Value,"MMM")

  • Nun wird das Diagramm für die gleitende Durchschnittsermittlung vorbereitet.

    Ebenso wie unter Schritt 3 bei den Pareto-Berechnungen wird die Funktion RunningValue verwendet. Eine Rückkehr der gleitenden Durchschnittsberechnung über die Kategorien hinweg ist nicht erwünscht. Aus diesem Grunde wird eine Reihengruppierung basierend auf dem Wert von SalesPersonID definiert. Da die Abfrage als Parameter den Vertriebsmitarbeiter verwendet, enthalten die resultierenden Daten nur eine Vertriebsmitarbeiter-Datenreihe. Als Ausdruck für die Datenreihengruppenbeschriftung wird =Fields!FullName.Value festgelegt, damit die in der Diagrammlegende der vollständige Namen des Vertriebsmitarbeiters erscheint.

  • Nun wird die Vertriebsdatenberechnung als Säulen hinzugefügt.

    Dazu wird das Dataset-Feld TotalDue mit der Maus auf den Ablagebereich des Diagramms gezogen, und ein Vertriebsdatenwert wird auf der Grundlage der Aggregation Sum() platziert. Um am Ende der Datenreihengruppenbeschriftung das Wort „Umsatz“ anzuhängen (als Gruppenbeschriftung dient der vollständige Name des Vertriebsmitarbeiters gemäß Festlegung in Schritt 3) wird die Datenwertbezeichnung explizit mit dem Wort „Umsatz“ festgelegt.

  • Nun werden die Funktionen anhand des benutzerdefinierten Codes mit der gleitenden Durchschnittsermittlung hinzugefügt.

    Die folgende Tabelle enthält ein Beispiel für eine gleitende Durchschnittsberechnung durch Verwendung eines Queue-Ausdrucks. Die Spalte „Queue Contents“ enthält den gegenwärtigen Queue-Inhalt eines bestimmten Monats. Die letzte Spalte der Tabelle enthält eine RunningValue-Berechnung basierend auf einer Aggregation hinzugefügter und entfernter Einträge aus der Queue. Der Beispielcode unter der Tabelle soll die praktische Umsetzung dieses Algorithmus verdeutlichen.

    Tabelle 4 Monat Umsatz Gleitender Durchschnitt (2 Mon.) Normaler laufender Wert Queue-Inhalt Entfernter Queue-Wert Laufender Wert basierend auf Queue Jan 20 n/v 20 20 n/v 0 Feb 10 15 35 20, 10 n/v 0+ 15 = 15 Mär 24 17 59 10, 24 -20 15+ (24-20) /2 = 17 Apr 16 20 75 24, 16 -10 17+ (16-10) /2 = 20 Mai 12 14 87 16, 12 -24 20+ (12-24) /2 = 14





    Zum Einbinden der Queue-basierten Funktion RunningValue muss der folgende Code unter Benutzerdefinierter Code auf der Registerkarte Code des Dialogfelds Berichtseigenschaften eingetragen werden.

    Private queueLength As Integer = 3
        Private queueSum As Double = 0
        Private queueFull As Boolean = False
        Private queue As New System.Collections.Generic.Queue(Of Double)
    
        Public Function MovingQueue(ByVal currentValue As Double) As Object
            Dim removedValue As Double = 0
            If queue.Count >= queueLength Then
                removedValue = queue.Dequeue()
            End If
            queueSum += currentValue
            queueSum -= removedValue
            queue.Enqueue(currentValue)
            If queue.Count < queueLength Then
                Return Nothing
            ElseIf queue.Count = queueLength And queueFull = False Then
                queueFull = True
                Return queueSum / queueLength
            Else
                Return (currentValue - removedValue) / queueLength
            End If
        End Function
    
  • Nun wird der gleitende Durchschnitts-Umsatzwert als Linie hinzugefügt.

    Zur Datenwertberechnung für den gleitenden Durchschnitt wird die Funktion RunningValue auf die Werte angewendet, die von der benutzerdefinierten MovingQueue Funktion zurückgeliefert werden. Die Funktion MovingQueue berechnet die Anpassungswerte für die kumulative RunningValue Berechnung. Dazu dient der folgende Code.

    =RunningValue(Code.MovingQueue(Fields!TotalDue.Value), Sum, "SalesPerson")
    
    

    Hinweis   Um mehrere gleitende Durchschnittswertberechnungen innerhalb eines Diagramms durchzuführen, müssen Sie entweder eine Möglichkeit vorsehen, mit der Sie am Ende einer Reihe die Queue zurücksetzen können, oder Sie müssen mit mehreren Queues arbeiten. Sie könnten beispielsweise eine Hash-Tabelle mit Queues verwenden, die abhängig vom Reihengruppenwert indiziert sind der Funktion MovingQueue als zusätzliches Argument übergeben werden.

    Hinweis   Ein Diagramm kann nicht mehrere Seiten umfassen. Es ist daher zulässig, die Variablen als „private nonshared“ zu deklarieren.

Um die gleitende Durchschnittsberechnung in einem anderen Datenbereich (z. B. einer Liste, Tabelle oder Matrix) verwenden zu können, der sich über mehrere Seiten erstreckt, müssen die Variablen als „shared“ (d. h. als „static“) deklariert werden, damit sie ihren Status bei der Paginierung beibehalten. Wenn zwei Personen zeitgleich denselben Bericht verwenden und weil hierbei statische Variablen zum Einsatz kommen, besteht die Möglichkeit, dass der Variablenstatus der einen Person durch die Nutzung der anderen Person verändert wird. Um absolut sicher zu sein, dass so etwas nicht passiert, können Sie jede einzelne shared-Variable in eine Hash-Tabelle umwandeln, die auf der ID des anfordernden Nutzers basiert (=Globals!UserID).

Benutzerdefinierte Diagrammfarbpaletten und Legenden

In den Diagrammen werden integrierte vordefinierte Farbpaletten mit 10 bis 16 unterschiedlichen Farben benutzt. Diese Standardfarben können ab Reporting Services 2000 Service Pack 1 (SP1) überschrieben werden. Um Farbwerte als Konstante oder ausdrucksabhängige Werte zu definieren, klicken Sie im Dialogfeld Diagrammwert bearbeiten in den Darstellungseigenschaften des Datenwertes auf die Schaltfläche Reihenart. Sie könnten damit beispielsweise bestimmte Werte abhängig von einer Bedingung aus den gegenwärtigen Datenreihen hervorheben, z. B. einen Mindest- oder Höchstwert.

Hinweis   Wenn Sie keine vollständige benutzerdefinierte Farbpalette definieren möchten, können Sie die Farbe auch bei bestimmten Datenpunkten überschreiben. Verwenden Sie einen Ausdruck, mit dem entweder ein bestimmter Farbwert zurückgegeben wird (um diesen zu überschreiben) oder mit dem „nichts“ zurückgegeben wird, wodurch die aktuelle Farbe wieder aus der zugrunde liegenden Basisfarbpalette auswählt wird.

Beispiel: Angenommen, alle Datenpunktwerte mit negativen Y-Werten sollen rot hervorgehoben werden. Für alle übrigen Datenpunkte sollen die Standardfarben genutzt werden. Wählen Sie dazu Diagrammwert bearbeiten, und klicken Sie auf die Registerkarte Darstellung. Klicken Sie auf die Schaltfläche Reihenart, um das Dialogfeld Stileigenschaften zu öffnen. Klicken Sie auf die Registerkarte Ausfüllen. Tragen Sie unter den Stileigenschaften zur Farbe folgenden Ausdruck ein.

=iif(Sum(Fields!Sales.Value - Fields!Cost.Value) < 0, "Red", Nothing))

Hinweis   Wenn Sie für die Farbe einen konstanten Wert festlegen, wird die Farbe für alle Datenpunkte der jeweiligen Datenreihe übernommen.

In der Diagrammlegende werden Farbfelder verwendet, damit die Einträge in der Legende den sichtbaren Datenpunkten zugeordnet werden können. In der Legende kann nur ein Farbfeld pro Legendeneintrag (Datenreihe) angezeigt werden. Daher wird dort die Farbe des ersten Datenpunkts innerhalb der Reihe angezeigt. Dies sollten Sie beachten, wenn Sie mit speziellen Ausdrücken arbeiten, um die Farbe einzelner Datenpunkte innerhalb einer Reihe dynamisch festzulegen. Für den Legendeneintrag wird immer die jeweilige Farbe des ersten Datenpunkts verwendet.

Die in den Reporting Services-Diagrammen integrierte Legendenfunktion ist zwar einfach zu benutzen, jedoch nicht sehr flexibel. Beispielsweise nimmt die Legende innerhalb des Diagramms einen gewissen Platz in Anspruch. Wird die Legende außerhalb des Zeichenbereichs platziert und die Legende wird größer, schrumpft der Diagrammzeichenbereich entsprecht.

Mehr Flexibilität und Kontrolle über die Legende erhalten Sie, wenn Sie mithilfe einer Tabelle oder Matrix Ihre eigene Legende erstellen. Die einfachste Möglichkeit, die Farben im Diagramm in die eigene Legende zu übernehmen, ist die Definition einer eigenen benutzerdefinierten Diagrammfarbpalette. Der Beispielbericht CustomColorPalette veranschaulicht die Implementierung einer benutzerdefinierten Farbpalette und Legende. Siehe Abbildung 14.

Abbildung 14: Ein Bericht mit einem Balkendiagramm, einer benutzerdefinierten Farbpalette und Legende
Abbildung 14: Ein Bericht mit einem Balkendiagramm, einer benutzerdefinierten Farbpalette und Legende

So wird eine benutzerdefinierte Farbpalette erstellt
  1. Zuerst werden die Diagrammreihengruppe und die Kategoriegruppen definiert.

    Standardmäßig ist jeder Diagrammdatenreihe eine Farbe zugeordnet. Die Farbe hängt von der gewählten Diagrammpalette ab. Bei diesem Beispiel sollen diese Farben abhängig von den Reihengruppen-Instanzwerten überschrieben werden.

  2. Nun wird die benutzerdefinierte Farbpalette definiert und der benutzerdefinierte Code ergänzt.

    In der Variablen colorPalette wird die Definition der benutzerspezifischen Farbpalette gespeichert, die über 15 verschiedene Farben verfügt. Mit der Variablen count wird die Gesamtzahl der unterschiedlichen Gruppierungswerte mitverfolgt, damit wieder von vorne begonnen werden kann, sobald die Höchstanzahl verschiedener Farben in der benutzerdefinierten Farbpalette überschritten wird. Mit der Hash-Tabelle mapping wird die Zuordnung zwischen den Gruppierungswerten und den Farben verfolgt. Dadurch wird sichergestellt, dass alle Datenpunkte innerhalb derselben Datenreihe mit derselben Farbe versehen sind. Später wird sie zum Abgleichen der benutzerdefinierten Legendenfarben mit den Diagrammfarben herangezogen. Der folgende Code muss in das Code-Fenster des Berichts eingetragen werden.

    Private colorPalette As String() = {"Green", "Blue", "Red", "Orange", 
    "Aqua", "Teal", "Gold", "RoyalBlue", "MistyRose", "LightGreen", 
    "LemonChiffon", "LightSteelBlue", "#F1E7D6", "#E16C56", "#CFBA9B"}
        Private count As Integer = 0
        Private mapping As New System.Collections.Hashtable()
        Public Function GetColor(ByVal groupingValue As String) As String
            If mapping.ContainsKey(groupingValue) Then
                Return mapping(groupingValue)
            End If
            Dim c As String = colorPalette(count Mod colorPalette.Length)
            count = count + 1
            mapping.Add(groupingValue, c)
            Return c
        End Function
    
  3. Rufen Sie die Funktion GetColor() auf, um den Datenpunkten Farben zuzuweisen.

    Die Funktion GetColor wird über das Dialogfeld „Stileigenschaften - Farbe“ aufgerufen. Bearbeiten Sie den Datenwert. Öffnen Sie das Dialogfeld Diagrammwert bearbeiten, und klicken Sie auf die Registerkarte Darstellung (Abbildung 15). Klicken Sie auf die Schaltfläche Reihenart und anschließend auf die Registerkarte Ausfüllen. Der gegenwärtigen Reihengruppenwert wird als Argument an die Funktion GetColor übergeben, damit der interne Gruppeninstanzwert dem Farbwert zugeordnet werden kann.

    Abbildung 15: Festlegen bestimmter Datenreihenformate
    Abbildung 15: Festlegen bestimmter Datenreihenformate

    Hinweis   Wenn mehrere Diagrammreihengruppen vorhanden sind, können Sie die Reihengruppenwerte miteinander verketten, um eine eindeutige Kennung zur Nutzung in der Funktion GetColor zu erzeugen. Der folgende Code dient als Beispiel.

    =Code.GetColor(Fields!Country.Value & "|" & Fields!City.Value)
    
  4. Fügen Sie eine Diagrammlegende hinzu.

    Sie können dazu die eingebaute Diagrammlegende benutzen. Sie können aber auch die integrierte Diagrammlegende deaktivieren und die Schritte in den folgenden Anweisungen durchführen, um anhand eines Tabellen- oder Matrixdatenbereichs Ihre eigene Diagrammlegende zu erstellen.

So wird eine benutzerdefinierte Legende erstellt
  1. Fügen Sie dem Bericht einen Tabellendatenbereich hinzu.

    Platzieren Sie die Tabelle neben dem Diagramm, und binden Sie dasselbe Dataset wie zum Diagramm an die Tabelle.

  2. Definieren Sie in der Tabelle dieselbe Gruppierungsstruktur wie im Diagramm, indem Sie Tabellengruppen hinzufügen.

    Wenn im Diagramm Reihengruppierungen benutzt werden, fügen Sie diese auch der Tabelle hinzu, indem Sie Tabellengruppen definieren, die auf dem gleichen Gruppierungsausdruck wie bei den Diagrammreihengruppierungen basieren. Anschließend fügen Sie als innere Tabellengruppen Diagrammkategorie-Gruppierungen (sofern vorhanden) hinzu.

    Im Allgemeinen gilt: Wenn das Diagramm m Reihengruppierungen und n Kategoriegruppierungen enthält, müssen Sie m+n Tabellengruppen für Ihre benutzerdefinierte Legende hinzufügen.

    Bei den einzelnen Tabellengruppen ist darauf zu achten, dass nur der Gruppenkopfbereich (in dem die Legendenbeschreibung später eingefügt wird) angezeigt wird. Weiterhin muss die Detailzeile aus der Tabelle entfernt werden, es sei denn, Sie möchten mithilfe der Detailzeilen der Tabelle eine Diagrammdatentabelle simulieren.

  3. Gestalten der benutzerdefinierten Legende.

    Zeichnen Sie für das Farbfeld der benutzerdefinierten Legende ein Rechteck. Sie können es beispielsweise in die erste Tabellenspalte einfügen. Wie unter Schritt 2 angedeutet, sollte die Tabelle nur Gruppenkopfzeilen enthalten. Das Rechteck wird nun in der innersten Gruppenkopfebene angeordnet.

    Legen Sie für die Eigenschaft BackgroundColor des Rechtecks den jeweiligen Ausdruck fest, der auch für die Füllfarbe des Diagrammdatenpunkts eingegeben wurde. Im einfachsten Fall reicht als Ausdruck ein einziger Gruppierungswert aus, wie der folgende Code demonstriert.

    =Code.GetColor(Fields!Country.Value)
    

    Benutzen Sie für den Text der Legende entweder denselben Ausdruck wie derjenige, der als Beschriftungsausdruck für die Kategorie- und Reihengruppen verwendet wird, oder experimentieren Sie, bis der gewünschte Legendentext angezeigt wird.

Kreis- und Ringdiagramme

Im Abschnitt Datenpunktbeschriftungen und Legendenbeschriftungen wird erläutert, wie innere und äußere Datenpunktbezeichnungen für Kreisdiagrammsegmente festgelegt werden. In diesem Abschnitt werden weitere Eigenschaften von Kreis- und Ringdiagrammen erläutert.

Anders als bei anderen Diagrammtypen enthält ein Kreis- oder Ringdiagramm lediglich eine „Gruppierungsdimension“ (bzw. eine Datenreihe). Um bei Kreis- und Ringdiagrammen zwei Dimensionen zu erhalten, müssen die Diagramme übereinander platziert werden.

Hinweis   Während der Berichtsveröffentlichung wandelt Reporting Services die Datenreihengruppen eines Kreis- oder Ringdiagramms automatisch in Kategoriegruppen um, um die Daten als eine Datenreihe darzustellen.

Kreisdiagramme werden häufig zur Darstellung relativer Prozentwerte von Datenpunkten verwendet. Im Allgemeinen lässt sich der Prozentwert (der z. B. zur Ausweisung einer Datenpunktbeschriftung genutzt werden kann) durch eine Division des Datenpunktwerteausdrucks durch die Gesamtsumme im kompletten Diagramm errechnen. Ein Beispiel hierfür zeigt der folgende Code.

=Sum(Fields!Sales.Value) / Sum(Fields!Sales.Value, "SalesChart")


Dieser Ausdruck wird als Datenbeschriftungsausdruck hinzugefügt, wie in Abbildung 16 zu sehen.

Abbildung 16: Datenbeschriftung, Prozentwertberechnung
Abbildung 16: Datenbeschriftung, Prozentwertberechnung

In der Standardeinstellung sind Kreisdiagrammsegmente schwarz umrandet, um die Abgrenzung der Segmente sichtbarer zu machen. Wie in Abbildung 17 des nächsten Abschnitts zu sehen, können Sie diese Umrandung durch bestimmte Einstellungen für die Datenpunktdarstellung auch überschreiben. Wenn die Umrandungsfarbe mit der Farbe des Kreissegments übereinstimmen soll, müssen Sie eine benutzerspezifische Farbpalette definieren, wie im vorherigen Abschnitt bereits erläutert wurde. Mit der benutzerdefinierten Farbpalette können Sie für die Umrandung dieselbe Farbe wie für das Kreissegment festlegen. Dazu rufen Sie die benutzerdefinierte Funktion auf, die für die Zuordnung der Farben entsprechend dem Kategoriegruppenwert zuständig ist.

Hinzufügen von Diagrammdatentabellen

In Ihr Diagramm können Sie auch Detaildaten einbinden. Das direkte Hinzufügen von Daten zum Diagramm ist nicht zu empfehlen, da es die visuelle Aussagekraft des Diagramms einschränkt. Die Aufnahme der Informationen in eine Datentabelle ist dagegen vorteilhafter.

Ein Diagramm bietet sich als wirksames visuelles Mittel zur Darstellung einer Werteverteilung und zur Hervorhebung interessanter Bereiche an (z. B. sehr kleine oder sehr hohe Werte). Für manch einen Leser ist vielleicht auch eine detailliertere Analyse der Informationen auf Basis der zugrunde liegenden Detaildaten interessant.

Reporting Services bietet drei Möglichkeiten, Diagrammdatenpunkte mit Interaktivität zu versehen:

  • Mit der Aktion Zu Bericht springen lassen sich Detaildaten aufrufen, indem zu einem anderen Bericht weiter aufgeschlüsselt wird. Die Aufschlüsselung wird dabei von den gegenwärtigen Reihen-/Kategoriegruppenwerten abhängig gemacht, indem diese als Parameterwerte für die Drillthroughfunktion eingesetzt werden.

  • Mit der Aktion Zu Lesezeichen springen kann zu einem anderen Abschnitt (wie etwa einer Datentabelle) innerhalb desselben Berichts gewechselt werden.

  • Mit der Aktion Zu URL springen können Sie einen Hyperlink auf ein externes Navigationsziel außerhalb des Berichts definieren.

Abbildung 17 zeigt eine vereinfachte Variante des Beispielberichts PiePercentage, der diesem Whitepaper beigefügt ist.

Abbildung 17: Kreisdiagramm mit benutzerdefinierter Formatierung, benutzerdefinierter Farbpalette und einer Datentabelle (zum Vergrößern auf das Bild klicken)
Abbildung 17: Kreisdiagramm mit benutzerdefinierter Formatierung, benutzerdefinierter Farbpalette und einer Datentabelle (zum Vergrößern auf das Bild klicken)

So wird eine Datentabelle erstellt
  1. Zuerst wird ein Kreisdiagramm mit einer benutzerdefinierten Farbpalette erstellt.

    Das Kreisdiagramm in Abbildung 17 enthält zwei Kategoriegruppierungen. Als äußere Gruppierung dient das Auftragsjahr. Als innere Gruppierung dient die Produktkategorie. Die benutzerdefinierte Farbpalette ist wie unter Schritt 2 im Abschnitt über das Erstellen einer benutzerdefinierten Farbpalette definiert.

    Da zwei Kategoriegruppierungen vorliegen, wird anhand des folgenden Ausdrucks ein kombinierter Schlüssel generiert, der anschließend an die Funktion GetColor übergeben wird.

    =Code.GetColor(Fields!OrderYear.Value & Fields!ProdCat.Value)

    Wenn derselbe GetColor-Funktionsaufruf auch in den Farbeigenschaften des Datenpunkts und in den Farbeigenschaften der Datenpunktumrandung übernommen wird, ist die schwarze Standardumrandung in den Kreissegmenten nicht mehr zu sehen.

  2. Nun sollen nur für die Kreissegmente Datenpunktbezeichnungen angezeigt werden, die mindestens 4 Prozent vom Gesamtkreis ausmachen.

    Dazu wird folgende Funktion in den benutzerdefinierten Code-Bereich des Berichts eingetragen. Der wichtigste Teil ist dabei die Rückgabe einer Zeichenfolge mit einer leeren Beschriftung für diejenigen Kreissegmente, die keine Beschriftungen erhalten sollen. Andernfalls zeigt das Diagrammsteuerelement die Standardbeschriftung für das betreffende Segment an. (Als Standardbeschriftung wird der zugrunde liegende Datenpunktwert herangezogen.)

    Public Function GetLabel(ByVal currentValue As Double, ByVal totalValue As Double) As String
        If currentValue / totalValue < 0.04 Then
            Return " "
        Else
            Return Format(currentValue / totalValue, "P1")
        End If
    End Function
    

    Der Beschriftungsausdruck für den Datenpunkt ruft die Funktion GetLabel auf, um den Prozentwert bzw. die -beschriftung zu ermitteln.

    =Code.GetLabel(Sum(Fields!Sales.Value), Sum(Fields!Sales.Value, "SalesChart"))
  3. Nun wird eine Datentabelle (Matrix) für das Diagramm erstellt.

    Das Diagramm enthält nur die zusammengefassten Umsatzdaten pro Jahr und pro Produktkategorie. In der Datenmatrix sollen die Daten auf gleiche Weise gruppiert werden.

    Dazu wird ein Matrixdatenbereich hinzugefügt und an dasselbe Dataset wie das Diagramm gebunden. Anschließend werden die Felder OrderYear und ProdCat als Zeilengruppen in die Matrix eingefügt, und die Sales-Werte werden in der Matrixzelle per Aggregat zusammengefasst. Zum Ergänzen von Zwischensummen klicken Sie mit der rechten Maustaste auf die Gruppenkopfzellen in der Matrix und wählen Zwischensumme aus dem Kontextmenü.

    Hinweis   Wenn Sie auf das kleine grüne Dreieck im Matrixkopfbereich klicken, werden die Teilergebnis-Eigenschaften aufgerufen, wo Sie für die Teilergebniszellen spezielle Formatierungen einstellen können. Sie können beispielsweise die Zellen mit den Teilergebnissen mit einer anderen Hintergrundfarbe unterlegen, um sie optisch von den übrigen Daten abzugrenzen.

    Das zugrunde liegende Dataset stellt tiefgreifendere Datenaufschlüsselungen zur Verfügung, die über die Darstellungsmöglichkeiten in einem Diagramm hinausgehen. Diese Tatsache lässt sich anhand einer Datenmatrix ausnutzen, indem eine weitere (innere) Zeilengruppe auf Basis der Unterkategorie ergänzt und Quartal und Monat als Matrixspaltengruppen definiert werden.

  4. Drilldownoptionen in die Datenmatrix aufnehmen.

    Um für eine bestimmte Gruppe einen Drilldowneffekt einzubinden, klicken Sie mit der rechten Maustaste auf den Gruppenkopfbereich, und bearbeiten Sie die Gruppeneigenschaften. Wählen Sie im Dialogfeld Gruppeneigenschaften auf der Registerkarte Sichtbarkeit den Berichtelementnamen, anhand dessen die Sichtbarkeit der aktuellen Gruppe ein-bzw. ausgeschaltet werden soll. In der Regel wählen Sie dafür den Berichtelementnamen des Textfeldes in der übergeordneten Gruppe aus. Wenn keine übergeordnete Gruppe vorhanden ist, können Sie in der Matrixecke ein Textfeld platzieren und damit die Sichtbarkeit der äußersten Gruppierungsebene in der Matrix ein- bzw. ausschalten.

    Die Option Ursprüngliche Sichtbarkeit, mit der der Anfangsstatus der Umschaltfunktion festgelegt wird, lässt sich auch auf der Registerkarte Sichtbarkeit der Gruppe definieren. Wenn diese Option auf Sichtbar eingestellt wird, ist die Gruppe im Ausgangszustand erweitert zu sehen; sie ist aber nicht zu sehen, wenn Ausgeblendet eingestellt ist.

  5. Festlegen des ursprünglichen Umschaltbildes und des Umschaltstatus.

    Wenn der ursprüngliche Sichtbarkeitsstatus einer Gruppe auf Sichtbar eingestellt ist, ist das Umschaltbild in dem Berichtelement, mit dem die Sichtbarkeit der Gruppe umgeschaltet wird, unter Umständen mit einem Pluszeichen (+) versehen. Um stattdessen das Minuszeichen (-) mit dem Umschaltbild anzuzeigen, klicken Sie mit der rechten Maustaste auf das Berichtselement, mit dem die Gruppensichtbarkeit umgeschaltet wird. In der Regel ist dies das Textfeld im Kopfbereich der übergeordneten Gruppe. Wählen Sie Eigenschaften im Kontextmenü. Klicken Sie im Dialogfeld Textfeldeigenschaften auf die Registerkarte Sichtbarkeit und legen Sie die Ersteinstellung für die Darstellung des Umschaltbildes fest. Da für die Sichtbarkeitsoption der Gruppe Sichtbar festgelegt ist, sollte die Ausgangsdarstellung des Textfelds auf Erweitert (-) eingestellt sein, wie in Abbildung 18 zu sehen ist.

    Abbildung 18: Einstellen der ursprüngliche Darstellung des Umschaltbildes
    Abbildung 18: Einstellen der ursprüngliche Darstellung des Umschaltbildes

  6. Nun können Lesezeichen zum Verbinden des Diagramms mit der Datenmatrix hinzugefügt werden (optional).

    Zwei Schritte sind erforderlich, um eine Lesezeichennavigation von den Diagrammdatenpunkten zur Datenmatrix zu ermöglichen. Zuerst müssen die Lesezeichen-IDs innerhalb der Datenmatrix definiert werden. Anschließend muss die Navigationsaktion „Zu Lesezeichen springen“ für den Diagrammdatenpunkt festgelegt werden.

    Um Lesezeichen zur Datenmatrix hinzuzufügen, klicken Sie mit der rechten Maustaste auf den Gruppenkopfbereich der Zeilengruppe mit dem Auftragsjahr, und klicken Sie im Kontextmenü auf Eigenschaften. Klicken Sie im Dialogfeld Textfeldeigenschaften auf die Registerkarte Navigation, und legen Sie als Ausdruck unter Lesezeichen-ID einen Ausdruck fest, mit dem eine Zeichenfolge generiert wird: =CStr(Fields!OrderYear.Value). Das Sprungziel des Lesezeichens wird hierdurch angegeben.

    Öffnen Sie das Dialogfeld Diagrammeigenschaften, und bearbeiten Sie die Datenpunkteigenschaften. Klicken Sie auf der Registerkarte Aktion auf Zu Lesezeichen springen, und tragen Sie denselben Ausdruck ein, der zuvor unter der Option „Lesezeichen-ID“ eingegeben wurde.

Punkt- und Blasendiagramme

Punkt- und Blasendiagramme unterscheiden sich von den übrigen Diagrammtypen, da bei ihnen als X-Achsenwerte keine Kategoriegruppenwerte, sondern explizite X-Werte als Datenpunkte aufgetragen sind. Folglich lassen sich die Daten in einer anderen Kategorie gruppieren (und zusammenfassen) als der Wert, der auf der X-Achse angezeigt wird. Beispiel: Um den Vorjahresumsatz eines bestimmten Vertriebsmitarbeiters auf der X-Achse aufzutragen, ist es nicht zweckmäßig, die Y-Werte zusammenzufassen, wenn zwei Vertriebsmitarbeiter über identische X-Werte verfügen. Der Beispielbericht BubbleChart (Abbildung 19) enthält eine von dem Vertriebsmitarbeiter abhängige Kategoriegruppierung. Dadurch werden die Umsatzdaten pro Vertriebsmitarbeiter zusammengefasst. Der Wert des Vorjahresumsatzes wird jedoch auf der X-Achse angezeigt.

Hinweis   Den genauen Unterschied zwischen der Eigenschaft des X-Wertes eines Datenpunkts und der Gruppierung der Diagrammdaten auf der Basis von Datenreihen und Kategoriegruppen sollten Sie unbedingt kennen. Wenn bei der Erstellung eines Punkt- oder Blasendiagramms in der Vorschau nur ein Datenpunkt zu sehen ist, Sie jedoch viele verschiedene Punkte erwartet haben, liegt es sehr wahrscheinlich daran, dass keine Kategoriegruppen oder Datenreihengruppen definiert wurden. Wenn weder Kategorie- noch Datenreihengruppen definiert sind, werden die zugrunde liegenden Dataset-Zeilen zu einem Datenpunkt mit einem bestimmten X- und Y-Wert zusammengefasst. In manchen Fällen können Sie einen Kategorie- oder Datenreihengruppenausdruck definieren, der mit dem X-Werteausdruck identisch ist. Im Falle eines Punkt- oder Blasendiagramms ist es aber sinnvoller, eine Kategorie- oder Datenreihengruppierung auf der Grundlage der Dateninhalte zu definieren. Wenn in dem Diagramm die Umsatzwerte pro Vertriebsmitarbeiter zusammengefasst werden, sollte die Kategorie- oder Datenreihengruppierung von der Mitarbeiter-ID bzw. dem Namen abhängig gemacht werden, wie dies im Beispielbericht BubbleChart zu sehen ist.

Abbildung 19: Blasendiagramm mit Reihendaten gruppiert nach Mitarbeitern
Abbildung 19: Blasendiagramm mit Reihendaten gruppiert nach Mitarbeitern

Ein weiteres nützliches Szenario für Punktdiagramme ist in dem Beispielbericht StepFunctionChart skizziert. Beim Punktliniendiagramm wird eine Kategoriegruppierung auf der Basis von Mess-IDs benutzt. An bestimmten Tagen, die als X-Werte dargestellt sind, liegen viele Messungen im Dataset vor, die auf der Y-Achse aufgetragen sind. Das Resultat stellt sich in Form vertikaler Schritte dar.

Abbildung 20: Punktdiagramm z. B. auf der Basis von Sensormessungen
Abbildung 20: Punktdiagramm z. B. auf der Basis von Sensormessungen

In Tabellen integrierte Diagramme

Es kann vorkommen, dass zur Laufzeit eine unbekannte Menge Daten vorliegt. Das Diagramm soll dann dem Datenaufkommen entsprechend dynamisch „mitwachsen“. Eine Lösung dafür besteht darin, ein Diagramm in eine andere Datenbereichsgruppe einzubinden. Sie können z. B. einen Listendatenbereich verwenden, bei dem eine Detailgruppe von folgendem Ausdruck abhängt.

=Ceiling(RowNumber(Nothing)/20)

Das Ergebnis ist eine Gruppe pro zwanzig Detailzeilen. Durch das Einbinden eines Diagramms in die jeweilige Liste werden alle zwanzig Zeilen Diagramminstanzen generiert.

Um eine Darstellung der Daten mit integrierten Balken zu erstellen, haben Sie zwei verschiedene Implementierungsmöglichkeiten:

  • Binden Sie eine Grafik mit dynamisch berechneten Werten mit Textabstand rechts (siehe Abbildung 21) ein. Durch Anpassen des rechten Textabstands einer statischen Grafik wird der Balkendiagrammeffekt erzielt, weil die Grafik dynamisch gestreckt wird.

  • Binden Sie ein Balkendiagram mit einem berechneten Y-Achsen-Maximalwert ein (siehe Abbildung 23).

  • Beide Lösungen sind nebeneinander im Beispielbericht TableInlineCharts dargestellt.

Abbildung 21: Tabelle mit integriertem Diagramm, welches durch eine eingebettete Grafik mit dynamischem Feldausgleich simuliert wird
Abbildung 21: Tabelle mit integriertem Diagramm, welches durch eine eingebettete Grafik mit dynamischem Feldausgleich simuliert wird

Integrierte Darstellungen auf der Basis eingebetteter Grafiken implementieren
  1. Entwerfen Sie eine eingebettete Grafik, die als „Balkendarstellung“ herangezogen wird.

    Eine einfache Grafik mit Farbverlauf sieht in der Regel gut aus. Binden Sie das Bild als eingebettete Grafik in den Bericht ein.

  2. Fügen Sie der Gruppe eine Tabelle hinzu und stellen Sie die Daten dar.

    Legen Sie die Gruppierungsstruktur der Tabelle fest. Sie können die Bilddarstellung entweder in einen Gruppenkopfbereich oder in die Detailzeile der Tabelle platzieren. Fügen Sie eine eingebettete Grafik in eine neue Tabellenspalte ein. Wählen Sie die unter Schritt  1 eingebettete Grafik als Bildquelle aus.

  3. Berechnen Sie den Textabstand rechts (oder links) des Bilds.

    Erstellen Sie einen Ausdruck für die Eigenschaft des Textabstands rechts (bzw. links) des grafischen Berichtselements. In dem Ausdruck wird der darzustellende numerische Wert durch den Höchstwert geteilt. Anschließend multiplizieren Sie die relative Größe mit der Breite der Tabellenspalte, die unter Schritt 2 definiert wurde. Eventuell können Sie auf die Funktionen Math.Min bzw. Math.Max zurückgreifen, um das Auffüllen auf einen bestimmten Wertebereich zu beschränken, falls dies erforderlich sein sollte.

    Im Beispielbericht TableInlineChart hat die Tabellenspalte eine Breite von 2 Zoll. Zur Berechnung des Textabstands werden Punkte als Maßeinheit benutzt. Es sind 72 Punkte pro Zoll. Wenn von einem Textabstand links von 0 Punkten ausgegangen wird, so beträgt der Bereich für die Option Textabstand rechts 144 Punkte. Der Textabstand wird mit folgendem Code festgelegt.

    =144 * (1.0 - Fields!UnitsInStock.Value / Max(Fields!UnitsInStock.Value, "DataSet1")) & "pt"
    

    Abbildung 22: Dynamische Berechnung des Textabstands rechts vom Bild
    Abbildung 22: Dynamische Berechnung des Textabstands rechts vom Bild

  4. Die Bildgröße muss korrekt auf Passend eingestellt werden.

    Der im vorherigen Schritt definierte Textabstand legt fest, wie viel Platz für das Strecken der Grafik noch zur Verfügung steht. Dadurch entsteht der Balkengrafikeffekt.

Ein Nachteil bei der Methode mit der eingebetteten Grafik besteht darin, dass die Grafik gestreckt werden kann, wenn Sie Schriftarten oder schmale Linien in der Grafik verwenden. Durch Verwendung eines Diagramms zur integrierten Darstellung (Abbildung 23) erhalten Sie mehr Kontrolle über die Darstellungsweise, was häufig zu einem besseren Resultat führt.

Abbildung 23: In einer Tabelle integriertes Diagramm, das im Gruppenkopfbereich der Tabelle eingebettet ist
Abbildung 23: In einer Tabelle integriertes Diagramm, das im Gruppenkopfbereich der Tabelle eingebettet ist

So wird ein Diagramm zur integrierten Darstellung verwendet
  1. Fügen Sie eine Tabelle hinzu, um die Daten zu gruppieren.

    Legen Sie die Gruppierungsstruktur der Tabelle fest. Denken Sie daran, dass Diagramme nur im Tabellenkopf- oder -fußbereich oder in den Gruppenkopf- oder -fußbereich aufgenommen werden können.

  2. Fügen Sie eine neue Tabellenspalte hinzu, und platzieren Sie das Diagramm in einem Gruppenkopfbereich.

    Damit der Diagrammzeichenbereich für die Balkendarstellung so groß wie möglich bleibt, sind folgende Einstellungen in den Diagrammeigenschaften zu wählen.

    Allgemeine Einstellungen: Auf Balkendiagramm einstellen, Legende ausschalten.

    Daten: Binden Sie das Diagramm an dasselbe Dataset wie die übergeordnete Tabelle, fügen Sie einen Datenpunkt auf der Basis des darzustellenden Wertes hinzu.

    X-Achse: Achsenbeschriftungen ausschalten, Gitternetzlinien ausschalten, für die Teilstriche Keine einstellen.

    Y-Achse: Achsenbeschriftungen ausschalten, für die Teilstriche Keine einstellen, als Maximum den Höchstwert einstellen, der in dem Bereich mit der enthaltenen Tabelle oder dem Dataset errechnet wurde. Dies ist erforderlich, um die richtige Balkengröße zu erhalten. Andernfalls würde jede Diagramminstanz eine automatische Skalierung der Y-Achse auf Basis der Datenwerte für die jeweilige Gruppe einstellen.

  3. Die Diagrammdarstellung optisch verfeinern (optional).

    Experimentieren Sie mit den Stileigenschaften für den Diagrammzeichenbereich, den Hauptrastereinstellungen der Y-Achse, den 3D-Effekten oder den dynamischen Farbeinstellungen, um die Darstellung mit dem integrierten Diagramm noch weiter zu verfeiern.

Diagrammerweiterbarkeit und manuelles Erstellen von Diagrammen

Dieses Whitepaper enthält Informationen zur Optimierung der Diagrammeinstellungen und zur Erweiterung der vorhandenen Diagrammfunktionen durch Ausdrücke und Funktionen mit benutzerdefiniertem Code. Darüber hinaus gibt es weitere Lösungsansätze, um noch weitere fortschrittliche Diagrammfunktionen in die Reporting Services zu integrieren:

  • Integrieren von Diagrammbildern, die durch benutzerdefinierte Assemblys generiert werden.

  • Implementieren einer Erweiterbarkeit der Diagrammfunktionen durch die neue benutzerdefinierte Berichtelement-Funktion von Reporting Services 2005.

  • Die Verwendung von Reporting Services 2005 Add-in-Komponenten von Drittanbietern, mit denen weitere Diagrammfunktionen ergänzt werden. Diese basieren auf der benutzerdefinierten Berichtelementfunktion.

Integrieren von Diagrammbildern, die durch benutzerdefinierte Assemblys generiert werden
  1. Entwickeln und implementieren Sie eine benutzerdefinierte Assembly zum Generieren von Bildern.

    Hinweis   Die benutzerdefinierte Assembly muss das Bild als Byte[] ausgeben können. Eine Ausgabe als System.Drawing.Image ist nicht zulässig. Mit einem Code wie dem Folgenden lassen sich System.Drawing.Image-Objekte häufig umwandeln.

    System.IO.MemoryStream renderedImage = new MemoryStream(); 
    
    myChart.Save(renderedImage); 
    
    renderedImage.Position = 0; 
    
    return renderedImage.ToArray();
    
    
    
  2. Fügen Sie ein Bild in den Bericht ein.

    Stellen Sie den Bildtyp auf Datenbank ein. Wenn das erzeugte Bild eine Bitmapgrafik im PNP-Format ist, legen Sie als Bildeigenschaft mimetype „image/png“ fest. Als Bildwerteigenschaft verwenden Sie einen Ausdruck ähnlich wie den folgenden.

    =MyCustomAssembly.GenerateChart()
  3. Rufen Sie den Bericht in der Seitenansicht des Bericht-Designers auf, um zu kontrollieren, ob die Berichtfunktionen korrekt ausgeführt werden.

    Hinweis   Bei einer Standardkonfiguration werden benutzerdefinierte Assemblys als FullTrust in der Seitenansicht des Bericht-Designers ausgeführt. Funktionen, die für die Code-Ausführung bestimmte Zugriffsrechte (z. B. Dateiein- und -ausgabe, Zugriff auf Datenquellen usw.) erfordern, erhalten diese Befugnisse im Modus FullTrust automatisch.

  4. Benutzerdefinierte Assembly auf einem Berichtserver einsetzen.

    Es muss sichergestellt werden, dass die Sicherheitsrichtlinien-Konfiguration des Berichtservers der benutzerdefinierten Assembly zur Laufzeit ausreichende Zugriffsrechte einräumt. Andernfalls schlägt die Bilderstellung fehl. Weitere Informationen finden Sie im Abschnitt zu Codezugriffssicherheit in Reporting Services (möglicherweise auf Englisch) in der SQL Server 2005-Onlinedokumentation.

Auf benutzerdefinierte Berichtselemente basierende Diagramme verglichen mit benutzerdefinierten Assemblys

Die Benutzung der benutzerdefinierten Berichtselementfunktion hat gegenüber benutzerdefinierten Assembly-Lösungen mehrere Vorteile. Erstens können Sie dadurch Ihre eigenen individuell gestalteten Supportkomponenten zusammenstellen, die sich direkt im Bericht-Designer integrieren lassen. Zweitens können Sie zur Laufzeit von der Reporting Services-Verarbeitungsengine profitieren, die die Daten abruft und die Gruppier-, Sortier- und Filterfunktionen ausführt. Das Laufzeitsteuerelement CustomReportItem greift dabei auf die verarbeiteten Daten zu und erstellt ein Diagrammbild mit einem interaktiven Imagemap und damit verbundenen Aktionen.

Studieren Sie aufmerksam die Dokumentation und die Beispiele, bevor Sie ein eigenes benutzerdefiniertes Berichtselement erstellen. Weitere Informationen finden Sie auf folgenden Websites:

Schlussbemerkung

Dieses Whitepaper enthält Tipps und Erkenntnisse über die Diagrammfunktionen von Reporting Services, die in anderen Büchern, Artikeln, Veröffentlichungen oder Präsentationen zuvor noch nicht behandelt wurden. Darin wird auch besprochen, wie und wann sich Optionen mit bestimmten Funktionen am besten nutzen lassen.

Das Whitepaper stellt eine Reihe von Berichtbeispielen vor, die ausführlich erläutert werden. Anhand der Beispiele wird veranschaulicht, wie die in Reporting Services integrierten Diagrammfunktionen bei bestimmten Ausgangssituationen optimal ausgeschöpft werden. Es wird beispielsweise erläutert, wie eine Pareto-Analyse hinzugefügt oder wie gleitende Durchschnittswerte berechnet werden.

Abschließend wird in der Publikation in Kürze die Erweiterbarkeit von Reporting Services angesprochen, die Ihnen die Möglichkeit an die Hand gibt, externe (Diagramm-) Funktionen in Ihre Berichte einzubinden.

Der Autor

Robert M. Bruckner ist Softwareentwickler bei der Microsoft SQL Server Business Intelligence-Gruppe. Sein Hauptgebiet liegt im Bereich der Daten- und Berichtsverarbeitungsengine von SQL Server Reporting Services.

Weitere Informationen:

http://msdn.microsoft.com/sql/bi/reporting/


© 2012 Microsoft. Alle Rechte vorbehalten. Nutzungsbedingungen | Markenzeichen | Informationen zur Datensicherheit
Page view tracker