Wie schattieren Sie abwechselnde Zeilen in einem SQL Server Reporting Services-Bericht?
Bearbeiten: Im Folgenden finden Sie eine Reihe guter Antworten - von schnell und einfach bis komplex und umfassend . Leider kann ich nur eine auswählen ...
sql-server
reporting-services
formatting
Michael Haren
quelle
quelle
Antworten:
Gehen Sie zur BackgroundColor-Eigenschaft der Tabellenzeile und wählen Sie "Ausdruck ...".
Verwenden Sie diesen Ausdruck:
Dieser Trick kann auf viele Bereiche des Berichts angewendet werden.
Und in .NET 3.5+ können Sie Folgendes verwenden:
Ich suche keinen Repräsentanten - ich habe diese Frage nur selbst recherchiert und dachte, ich würde sie teilen.
quelle
[rsInvalidColor] The value of the BackgroundColor property for the textbox ‘active’ is “Transparent”, which is not a valid BackgroundColor.
Es sieht so aus, als wäre der richtige Ausdruck=IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", Nothing)
. Danke für den Tipp.Die Verwendung von IIF (RowNumber ...) kann zu einigen Problemen führen, wenn Zeilen gruppiert werden. Eine andere Alternative besteht darin, eine einfache VBScript-Funktion zum Bestimmen der Farbe zu verwenden.
Es ist etwas aufwendiger, aber wenn die Basislösung nicht ausreicht, ist es eine gute Alternative.
Grundsätzlich fügen Sie dem Bericht Code wie folgt hinzu ...
Stellen Sie dann in jeder Zelle die Hintergrundfarbe wie folgt ein:
Ausführliche Informationen finden Sie in diesem Wrox-Artikel
quelle
Ich habe den Schacheffekt erhalten, als ich die Lösung von Catch22 verwendet habe. Ich denke, weil meine Matrix mehr als eine Spalte im Design hat. Dieser Ausdruck funktionierte gut für mich:
quelle
Ich habe die Lösung von @ Catch22 geändert. Ein bisschen, weil mir die Idee nicht gefällt, in jedes Feld gehen zu müssen, wenn ich mich entscheide, eine der Farben zu ändern. Dies ist besonders wichtig in Berichten, in denen es zahlreiche Felder gibt, in denen die Farbvariable geändert werden müsste.
Es wurde festgestellt, dass ich die Funktion von einer Funktion, die die Farben akzeptiert, in eine Funktion geändert habe, die die zu verwendenden Farben enthält.
Fügen Sie dann in jedes Feld Folgendes hinzu:
Dies ist viel robuster als das manuelle Ändern der Farbe in der Hintergrundfarbe der einzelnen Felder.
quelle
Eine Sache, die mir aufgefallen ist, ist, dass keine der beiden obersten Methoden eine Vorstellung davon hat, welche Farbe die erste Reihe in einer Gruppe haben sollte. Die Gruppe beginnt nur mit der entgegengesetzten Farbe aus der letzten Zeile der vorherigen Gruppe. Ich wollte, dass meine Gruppen immer mit der gleichen Farbe beginnen ... die erste Reihe jeder Gruppe sollte immer weiß und die nächste Reihe farbig sein.
Das Grundkonzept bestand darin, den Umschalter zurückzusetzen, wenn jede Gruppe startet, also habe ich ein bisschen Code hinzugefügt:
Ich habe jetzt drei verschiedene Arten von Zellhintergründen:
Das funktioniert bei mir. Wenn Sie möchten, dass die Gruppierungszeile nicht farbig oder in einer anderen Farbe ist, sollte es ziemlich offensichtlich sein, wie Sie sie ändern können.
Sie können gerne Kommentare dazu hinzufügen, was zur Verbesserung dieses Codes getan werden könnte: Ich bin sowohl für SSRS als auch für VB brandneu, daher vermute ich stark, dass es viel Raum für Verbesserungen gibt, aber die Grundidee scheint vernünftig zu sein (und sie war nützlich für mich) also wollte ich es hier rauswerfen.
quelle
für Gruppenkopf- / Fußzeilen:
Sie können dies auch verwenden, um die Anzahl der Zeilenfarben in jeder Gruppe zurückzusetzen. Ich wollte, dass die erste Detailzeile in jeder Untergruppe mit Weiß beginnt, und diese Lösung (wenn sie in der Detailzeile verwendet wird) ließ dies zu:
Siehe: http://msdn.microsoft.com/en-us/library/ms159136(v=sql.100).aspx
quelle
Die Lösung von Michael Haren funktioniert gut für mich. Ich habe jedoch eine Warnung erhalten, dass "Transparent" bei der Vorschau keine gültige Hintergrundfarbe ist. Eine schnelle Lösung wurde unter Festlegen der Hintergrundfarbe für Berichtselemente in SSRS gefunden . Verwenden Sie nichts anstelle von "Transparent"
quelle
Die einzige effektive Möglichkeit, dies ohne Verwendung von VB zu lösen, besteht darin, den Modulo-Wert für die Zeilengruppierung innerhalb der Zeilengruppierung (und außerhalb der Spaltengruppierung) zu "speichern" und explizit innerhalb Ihrer Spaltengruppierung zu referenzieren. Ich habe diese Lösung bei gefunden
http://ankeet1.blogspot.com/2009/02/alternating-row-background-color-for.html
Aber Ankeet erklärt nicht am besten, was passiert, und seine Lösung empfiehlt den unnötigen Schritt, eine Gruppierung auf einem konstanten Wert zu erstellen. Hier ist mein schrittweiser Prozess für eine Matrix mit einer einzelnen Zeilengruppe RowGroup1:
Setzen Sie den Wert des Textfelds von RowGroupColor auf
=iif(RunningValue(Fields![RowGroupField].Value ,CountDistinct,Nothing) Mod 2, "LightSteelBlue", "White")
Setzen Sie die BackgroundColor-Eigenschaft aller Ihrer Zeilenzellen auf
"=ReportItems!RowGroupColor.Value"
Voila! Dies löst auch viele der in diesem Thread erwähnten Probleme:
Es wäre fantastisch, wenn SSRS neben Value on Textboxes auch Eigenschaften verfügbar machen würde. Sie können diese Art der Berechnung einfach in eine BackgroundColor-Eigenschaft der Zeilengruppentextfelder einfügen und sie dann in allen anderen Zellen als ReportItems! RowGroup.BackgroundColor referenzieren.
Ahh gut, wir können träumen ...
quelle
Mein Problem war, dass ich wollte, dass alle Spalten in einer Zeile den gleichen Hintergrund haben. Ich habe sowohl nach Zeilen als auch nach Spalten gruppiert und mit den beiden besten Lösungen hier alle Zeilen in Spalte 1 mit farbigem Hintergrund, alle Zeilen in Spalte 2 mit weißem Hintergrund und alle Zeilen in Spalte 3 mit farbigem Hintergrund erhalten , und so weiter. Es ist als ob
RowNumber
undbOddRow
(von Catch22s Lösung) auf meine Spaltengruppe achten, anstatt dies zu ignorieren und nur mit einer neuen Zeile zu wechseln.Was ich wollte, ist, dass alle Spalten in Zeile 1 einen weißen Hintergrund haben, dann alle Spalten in Zeile 2 einen farbigen Hintergrund haben, dann alle Spalten in Zeile 3 einen weißen Hintergrund haben und so weiter. Ich habe diesen Effekt durch die gewählte Antwort verwendet aber anstatt vorbei
Nothing
zuRowNumber
, legte ich den Namen meiner Spalte Gruppe, zBDachte, dies könnte für jemand anderen nützlich sein.
quelle
Ich denke, dieser Trick wird hier nicht diskutiert. Hier ist es also,
In jeder Art von komplexer Matrix ist die Arbeitslösung, wenn Sie alternative Zellenfarben entweder zeilenweise oder spaltenweise wünschen,
Wenn Sie eine alternative Farbe der Zellen in der Spalte wünschen, dann
Das ist alles.
Gleiches gilt für die Zeilen mit alternativen Farben. Sie müssen die Lösung nur entsprechend bearbeiten.
HINWEIS: Hier müssen Sie manchmal den Rand der Zellen entsprechend festlegen, normalerweise verschwindet er.
Vergessen Sie auch nicht, den Wert 1 im Bericht zu löschen, der beim Erstellen einer gefälschten übergeordneten Gruppe ins Bild kam.
quelle
Wenn Sie für den gesamten Bericht eine abwechselnde Farbe benötigen, können Sie das DataSet, an das Ihr Tablix gebunden ist, für eine berichtsweite Identitätsnummer im Bericht verwenden und diese in der RowNumber-Funktion verwenden ...
quelle
Die Antwort von @ Aditya ist großartig, aber es gibt Fälle, in denen die Formatierung verworfen wird, wenn in der ersten Zelle der Zeile (für die Formatierung des Zeilenhintergrunds) ein Wert fehlt (in komplexen Tablixen mit Spalten- / Zeilengruppen und fehlenden Werten).
Die Lösung von @ Aditya nutzt das
countDistinct
Ergebnis derrunningValue
Funktion geschickt, um Zeilennummern innerhalb einer Tablix-Gruppe (Zeilengruppe) zu identifizieren. Wenn Sie Tablix-Zeilen mit fehlendem Wert in der ersten Zelle haben,runningValue
wird dascountDistinct
Ergebnis nicht erhöht und die Nummer der vorherigen Zeile zurückgegeben (und daher die Formatierung dieser Zelle beeinflusst). Um dies zu berücksichtigen, müssen Sie einen zusätzlichen Begriff hinzufügen, um dencountDistinct
Wert auszugleichen . Mein Ansatz war es, den ersten laufenden Wert in der Zeilengruppe selbst zu überprüfen (siehe Zeile 3 des folgenden Snippets):Hoffe das hilft.
quelle
Könnte jemand die Logik erklären, die dahinter steckt, den Rest der Felder im folgenden Code (vom obigen Beitrag) auf false zu setzen?
Eine Sache, die mir aufgefallen ist, ist, dass keine der beiden obersten Methoden eine Vorstellung davon hat, welche Farbe die erste Reihe in einer Gruppe haben sollte. Die Gruppe beginnt nur mit der entgegengesetzten Farbe aus der letzten Zeile der vorherigen Gruppe. Ich wollte, dass meine Gruppen immer mit der gleichen Farbe beginnen ... die erste Reihe jeder Gruppe sollte immer weiß und die nächste Reihe farbig sein.
Das Grundkonzept bestand darin, den Umschalter zurückzusetzen, wenn jede Gruppe startet, also habe ich ein bisschen Code hinzugefügt:
Ich habe jetzt drei verschiedene Arten von Zellhintergründen:
Das funktioniert bei mir. Wenn Sie möchten, dass die Gruppierungszeile nicht farbig oder in einer anderen Farbe ist, sollte es ziemlich offensichtlich sein, wie Sie sie ändern können.
Sie können gerne Kommentare dazu hinzufügen, was zur Verbesserung dieses Codes getan werden könnte: Ich bin sowohl für SSRS als auch für VB brandneu, daher vermute ich stark, dass es viel Raum für Verbesserungen gibt, aber die Grundidee scheint vernünftig zu sein (und sie war nützlich für mich) also wollte ich es hier rauswerfen.
quelle
Ich habe alle diese Lösungen auf einem gruppierten Tablix mit Zeilenabständen ausprobiert und keine hat im gesamten Bericht funktioniert. Das Ergebnis waren doppelte farbige Zeilen und andere Lösungen führten zu abwechselnden Spalten!
Hier ist die Funktion, die ich geschrieben habe und die für mich mit einer Spaltenanzahl funktioniert hat:
Für ein 7-Spalten-Tablix verwende ich diesen Ausdruck für Row (of Cells) Backcolour:
quelle
Nur weil keine der obigen Antworten in meiner Matrix zu funktionieren schien, poste ich dies hier:
http://reportingservicestnt.blogspot.com/2011/09/alternate-colors-in-matrixpivot-table.html
quelle
In meinen Matrixdaten fehlten Werte, sodass ich die Lösung von ahmad nicht zum Laufen bringen konnte, aber diese Lösung funktionierte für mich
Die Grundidee besteht darin, eine untergeordnete Gruppe und ein Feld in Ihrer innersten Gruppe zu erstellen, die die Farbe enthalten. Stellen Sie dann die Farbe für jede Zelle in der Zeile basierend auf dem Wert dieses Felds ein.
quelle
Leichte Modifikation anderer Antworten von hier, die für mich funktioniert haben. Meine Gruppe hat zwei Werte zum Gruppieren, daher konnte ich beide einfach in das erste Argument mit einem + setzen, damit es richtig abwechselt
quelle
Bei der Verwendung von Zeilen- und Spaltengruppen hatte ich ein Problem, bei dem die Farben zwischen den Spalten wechselten, obwohl es sich um dieselbe Zeile handelte. Ich habe dieses Problem mithilfe einer globalen Variablen behoben, die sich nur abwechselt, wenn sich die Zeile ändert:
Nun zum erstenSetzen Sie Spalte der Zeile, die Sie abwechseln möchten, den Farbausdruck auf:
- -
Stellen Sie in den verbleibenden Spalten alle auf Folgendes ein:
Dadurch sollten sich die Farben erst nach dem Zeichnen der ersten Spalte abwechseln.
Dies kann (nicht überprüfbar) auch die Leistung verbessern, da nicht für jede Spalte eine mathematische Berechnung durchgeführt werden muss.
quelle