Anzeige von Labeln unterdrücken

Bei den Reporting Services gibt es die Möglichkeit in einem Diagramm für die Datenpunkte ein Label anzuzeigen. Über eine Eigenschaft der Reihe im Diagramm kann die Darstellung an- oder abgeschaltet werden. Gelegentlich braucht man aber etwas mehr Intelligenz für diese Steuerung.

UseValueAsLabel

Mit der Eigenschaft UseValueAsLabel kann man definieren, ob der für das Diagramm verwendete Wert auch als Label angezeigt werden soll. Zusätzlich kann über die Eigenschaft Visible definieren, ob die Anzeige generell ein oder ausgeschaltet werden soll.

Wir haben also zwei Schalter, die ziemlich ähnliche Funktionen haben. In dieser Aufgabenstellung soll es darum gehen, die Label anzuzeigen, wenn der Wert die 20% Marke überschreitet.

Beispieldaten

Als Basis für dieses Beispiel dienen verschiedene Herstellernamen mit einer Anzahl, die an einem bestimmten Datum angefallen ist. Die Grafik soll später aber die Werte auf Monatsbasis kumuliert anzeigen.

SELECT 'Hersteller1' AS Hersteller, 4 AS Anzahl, CAST('20140122' AS Date) AS Datum
UNION ALL
SELECT 'Hersteller1' AS Hersteller, 1 AS Anzahl, CAST('20140123' AS Date) AS Datum
UNION ALL
SELECT 'Hersteller2' AS Hersteller, 1 AS Anzahl, CAST('20140121' AS Date) AS Datum
UNION ALL
SELECT 'Hersteller2' AS Hersteller, 1 AS Anzahl, CAST('20140122' AS Date) AS Datum
UNION ALL
SELECT 'Hersteller3' AS Hersteller, 3 AS Anzahl, CAST('20140120' AS Date) AS Datum
UNION ALL
SELECT 'Hersteller1' AS Hersteller, 5 AS Anzahl, CAST('20140222' AS Date) AS Datum
UNION ALL
SELECT 'Hersteller2' AS Hersteller, 7 AS Anzahl, CAST('20140221' AS Date) AS Datum
UNION ALL
SELECT 'Hersteller3' AS Hersteller, 4 AS Anzahl, CAST('20140220' AS Date) AS Datum;

Im Januar ergeben sich also aus zwei Datenpunkten für den ersten Hersteller der Wert 5 (4+1), für den zweiten der Wert 2 (1+1) und für den dritten der Wert 3. Analog hierzu ergeben sich die Prozentsätze 50%, 20%, 30%. Den zweiten Wert wollen wir also unterdrücken. Die Berechnung der Monatswerte erfolgt erst in der Grafik, auch wenn sie bereits vorher im SQL erfolgen könnte. Grund hierfür ist, dass die Detailwerte an anderer Stelle im Bericht explizit aufgeführt werden sollen und dasselbe Dataset verwendet werden soll.

Das Diagramm

Für das Balkendiagramm ergeben sich also folgende Werte für die Diagrammdaten:

  • Kategoriegruppe:
    Name (Chart1_CategoryGroup)
    Bezeichnung, Gruppierung, Sortierung =Month(Fields!Datum.Value)
  • Reihengruppe:
    Name (Chart1_SeriesGroup)
    Bezeichnung, Gruppierung, Sortierung [Hersteller]
  • Reihendaten:
    Wert =Sum(Fields!Anzahl.Value)/Sum(Fields!Anzahl.Value, "Chart1_CategoryGroup")

Wir können also bei der Berechnung der Reihendaten Bezug auf den Namen der Kategoriegruppe (Chart1_CategoryGroup) nehmen und so den Prozentsatz eines Herstellers in Bezug auf den angezeigten Monat ausrechnen. Das Summen Aggregat ist einmal auf die aktuelle Reihe (Hersteller) bezogen und einmal auf die Kategorie (Monat).

Für die Eigenschaft Label/UseValueAsLabel dieser Diagrammreihe wählen wir den Ausdruck:

=IIF(Sum(Fields!Anzahl.Value)/Sum(Fields!Anzahl.Value, "Chart1_CategoryGroup")> 0.2, true, false)

Das bedeutet, dass wir falls der Prozentwert (den wir ja auch bei den Reihendaten verwenden) größer als 0.2 ist, die Eigenschaft auf TRUE setzen, andernfalls auf FALSE. Es geht hier also lediglich darum, den berechneten Wert der Reihendaten in eine IIF-Klausel einzubauen und davon abhängig das Label zu setzen.

Das Ergebnis

Wir erhalten ein Diagramm mit den prozentualen Anteilen (basierend auf den kumulierten Werten) pro Monat, wobei diese für jeden Hersteller in Bezug auf den gesamten Monat gesetzt werden. Für die y-Achse wählen wir das Format P2 um die Prozentwerte mit zwei Nachkommastellen und dem Prozentzeichen anzuzeigen.

In der Grafik ist zu erkennen, dass der zweite Balken ohne Label dargestellt wird, da dieser Wert nicht größer als 20% ist.