Overblog Folge diesem Blog
Edit post Administration Create my blog
Blog von Olaf Helper

Bedingte Formatierung für Reporting Services

13. März 2011 , Geschrieben von Olaf Helper Veröffentlicht in #Reporting

Man muss ja nicht immer alles Nachmachen oder –programmieren, besonders nicht Features aus der Rubrik „Noch Bunter – Noch Greller“.

Die Funktion zur „Bedingten Formatierung“, die in MS Excel 2007 hinzugekommen ist, ist aber durchaus gut geeignet, um Werte und deren Größenordnung optisch hervor zu heben. Im MS Reporting Services kann man dieses ebenfalls abbilden, das setzt aber etwas Customer Code voraus.

Zum Testen nehme ich zunächst einmal eine einfache CTE mit fixen Werten für Umsatzzahlen her, die prozentualen Anteile am Jahresumsatz werden dann in einer weiteren CTE errechnet. Diese Prozentwerte will ich dann im Weiteren eben durch eine Hintergrundfarbe hervorheben.

 

 ;WITH 
Umsatz AS
( SELECT 'Kunde 1' As Customer, 15000 AS Ums2009, 17000 AS Ums2010
UNION ALL
SELECT 'Kunde 2', 23000, 22000 UNION ALL
SELECT 'Kunde 3', 10000, 12000 UNION ALL
SELECT 'Kunde 4', 39000, 32000 UNION ALL
SELECT 'Kunde 5', 1000, 3000)
 , Summe AS
( SELECT SUM(Ums2009) AS Total2009
,SUM(Ums2010) AS Total2010
FROM Umsatz)
 , Statistik AS
( SELECT Customer
,Ums2009
,Ums2010
,100 * Ums2009 / Total2009 AS Percentage2009
,100 * Ums2010 / Total2010 AS Percentage2010
,100 * (Ums2010 - Ums2009) / Ums2009 AS Raise
FROM Umsatz, Summe)
 SELECT *
FROM Statistik;

 

Nun brauch ich noch etwas Customer Code. Das Property „BackgroundColor“ erwartet entweder einen Farbnamen wie „Black“ für Schwarz oder einen RGB Werte als Hexadezimal Wert als String wie #FF0000 für einen Rotwert. Letzteres nutze ich, um einen Farbwert passend zum Prozentwert zu errechnen. Der Code, um einen Rotwert analog in der Helligkeit zum Prozentwert zu errechnen, sieht so aus:


 ' Liefert einen Rot-Farbwert als Hexadezimal-Wert (String) zu den übergebenen Prozentwerten 
 Public Function PercentageRed(ByVal percentage As Decimal) As String 
  ' Wert muss zwischen 0 und 100 sein; sonst zur Sicherheit auf Default Werte setzen 
  If percentage < 0 Then percentage = 0
If percentage > 100 Then percentage = 100
   Dim value As Integer 
  value = CInt(255.0 * (100.0 - percentage) / 100.0) 
   ' #FF = Rot als Basis
Return "#FF" & value.ToString("X2") & value.ToString("X2")
 End Function 

 

Also wirklich Karo-Einfach, den maximalen Byte-Wert von 255 ins Verhältnis gesetzt zum Prozentwert. Damit hohe Prozentwerte dunkel dargestellt werden, wird vom Prozentwert das Inverse gebildet.

Im Report setzte ich dann als Beispiel für die Textbox „Percentage2010“ das Property „BackgroundColor“ auf „Expression“ und füge nur noch das folgende Expression ein:

=Code.PercentageRed(Fields!Percentage2010.Value)

 

Das Ergebnis sieht dann so aus; für das bisschen Customer Code doch ganz gut, oder?


SsrsConditionalColoring-Kopie-1.jpg

 

Diesen Post teilen

Repost 0

Kommentiere diesen Post