Fügen Sie dem SQL Server Reporting Services-Bericht eine abwechselnde Zeilenfarbe hinzu

141

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 ...

Michael Haren
quelle
2
= IIf (RowNumber (Nothing) Mod 2 = 0, "No Color", "# DDEBF7")
Stefan Steiger
Wenn Sie mehrere Zellen auswählen, können Sie die Eigenschaften von Textfeldern nicht bearbeiten, aber Sie können im Eigenschaftenfenster auf die Füllfarbe zugreifen und dort einen Ausdruck festlegen!
Kitsu.eb

Antworten:

213

Gehen Sie zur BackgroundColor-Eigenschaft der Tabellenzeile und wählen Sie "Ausdruck ...".

Verwenden Sie diesen Ausdruck:

= IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", "Transparent")

Dieser Trick kann auf viele Bereiche des Berichts angewendet werden.

Und in .NET 3.5+ können Sie Folgendes verwenden:

= If(RowNumber(Nothing) Mod 2 = 0, "Silver", "Transparent")

Ich suche keinen Repräsentanten - ich habe diese Frage nur selbst recherchiert und dachte, ich würde sie teilen.

Michael Haren
quelle
10
Dies schlägt unter bestimmten Umständen fehl, insbesondere bei Tabellen und Matrixobjekten mit vielen Zwischensummen. Die Antwort von Catch22 unterliegt nicht denselben Einschränkungen. Die Methode von Catch22 kann auch verwendet werden, um Spalten in einer Matrix zu zwingen, abwechselnde Spaltenfarben zu haben, was einmal in einem blauen Mond nützlich ist.
Registrierter Benutzer
16
Ich stelle immer sicher, dass jemand positiv bewertet wird, der seine eigene Frage beantwortet. Zu oft findet der Fragesteller selbst eine Antwort und kommt dann nie zurück, um sie zu posten. Der Rest von uns, der möglicherweise dieselbe Frage hat, bleibt im Dunkeln. Eine Beule für Sie, Sir.
Matt DiTrolio
4
Wenn ich den obigen Code verwende, erhalte ich eine Warnmeldung wie [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.
Russell B
2
Dies gibt das Problem im Fall der Gruppierung und Detailansicht
3
Einige Browser können "Transparent" oder "Nothing" nicht verarbeiten. Die beste Wette wäre, "Weiß"
Nate S.
89

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 ...

Private bOddRow As Boolean
'*************************************************************************
' -- Display green-bar type color banding in detail rows
' -- Call from BackGroundColor property of all detail row textboxes
' -- Set Toggle True for first item, False for others.
'*************************************************************************
Function AlternateColor(ByVal OddColor As String, _
         ByVal EvenColor As String, ByVal Toggle As Boolean) As String
    If Toggle Then bOddRow = Not bOddRow
    If bOddRow Then
        Return OddColor
    Else
        Return EvenColor
    End If
End Function

Stellen Sie dann in jeder Zelle die Hintergrundfarbe wie folgt ein:

=Code.AlternateColor("AliceBlue", "White", True)

Ausführliche Informationen finden Sie in diesem Wrox-Artikel

Catch22
quelle
Der obige Code wird entweder dem Codeabschnitt des Berichts oder einer CodeBehind-Seite in einem VB.NET-Projekt hinzugefügt, kompiliert und als DLL bereitgestellt, die als Assembly referenziert. Ich empfehle, zusätzliche Anstrengungen zu unternehmen, um dies als DLL bereitzustellen, da Sie in zahlreichen Berichten allgemein darauf verweisen.
Registrierter Benutzer
Dies ist meine bevorzugte Methode zur Behandlung des Gruppierungsproblems, nachdem ich einige andere Hacks ausprobiert habe. Es bricht nicht zusammen, wenn eine Spalte interaktiv sortiert wird. +1 und vielen Dank.
Rex Miller
Die Farben werden versetzt, wenn Sie eine ungerade Anzahl von Zeilen haben.
K Richard
20
Vergessen Sie nicht, "True" für alle Spalten in der Zeile nach der ersten in "False" zu ändern, da sonst ein Schachbretteffekt angezeigt wird! Danke für die Lösung - es funktioniert super!
Peter Mularien
Peter Mularien: Ich habe dieses Problem. Können Sie erklären, wie es behoben werden kann?
Bill Software Engineer
64

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:

=iif(RunningValue(Fields![rowgroupfield].Value.ToString,CountDistinct,Nothing) Mod 2,"Gainsboro", "White")
ahmad
quelle
13
Diese Antwort verdient viel mehr Aufmerksamkeit - es ist eine saubere Lösung, die perfekt in einer Matrix mit Zeilengruppen und Spaltengruppen funktioniert und für deren Arbeit kein benutzerdefinierter Code erforderlich ist. Wunderschönen!
Stefan Mohr
9
Tatsächlich funktioniert dies auch für mehrere Spalten einwandfrei - jedoch nicht, wenn in einer Gruppierung Daten "fehlen". Wenn Sie also Daten haben, die Daten für 12 Monate im Jahr 2007, aber keine Daten für Januar im Jahr 2006 enthalten, und die nach Monaten in Zeilen und Jahr in Spalten gruppiert sind, wird die Färbung für 2006 um eins verschoben, da der RunningValue nicht synchronisiert wird, obwohl dies der Fall ist Noch ein Feld in der Matrix für "Januar 2006". Es gibt keine Daten im Datensatz und der RunningValue bleibt gleich, keine Farbänderung usw.
Kyle Hale
2
@ahmad das ist so nah. Ich habe das Problem, dass leere Kisten die entgegengesetzte Farbe verwenden. Wie stelle ich sicher, dass leere Kästchen richtig gefärbt werden?
FistOfFury
@KyleHale hast du eine Korrektur für die fehlende Box-Färbung?
FistOfFury
2
@FistOfFury Die einzige mir bekannte Lösung besteht darin, sicherzustellen, dass für fehlende Daten ein Wert (normalerweise 0) festgelegt ist.
Kyle Hale
20

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.

'*************************************************************************
' -- Display alternate color banding (defined below) in detail rows
' -- Call from BackgroundColor property of all detail row textboxes
'*************************************************************************
Function AlternateColor(Byval rowNumber as integer) As String
    Dim OddColor As String = "Green"
    Dim EvenColor As String = "White"

    If rowNumber mod 2 = 0 then 
        Return EvenColor
    Else
        Return OddColor
    End If
End Function

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:

=Code.AlternateColor(rownumber(nothing))

Dies ist viel robuster als das manuelle Ändern der Farbe in der Hintergrundfarbe der einzelnen Felder.

Michael Eakins
quelle
1
Schöne Ergänzung zu diesem Thread! Ich mag es, nicht in jeder Spalte "True" oder "False" setzen zu müssen. Ich mag auch die Option "Mod 3", so dass ich nur jede 3. Reihe schattieren kann.
Baodad
Diese Lösung gefällt mir auch. Es funktioniert jedoch nicht für mich, wenn ich Zeilengruppierung verwende. Die oben genannte Lösung von @ ahmad hat jedoch für mich funktioniert.
Baodad
Dies ist eine großartige Lösung für ein Tablix, wenn Sie Ihrem DataSet keine zusätzlichen Felder hinzufügen möchten!
Clamchoda
16

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:

Private bOddRow As Boolean
'*************************************************************************
' -- Display green-bar type color banding in detail rows
' -- Call from BackGroundColor property of all detail row textboxes
' -- Set Toggle True for first item, False for others.
'*************************************************************************
Function AlternateColor(ByVal OddColor As String, _
         ByVal EvenColor As String, ByVal Toggle As Boolean) As String
    If Toggle Then bOddRow = Not bOddRow
    If bOddRow Then
        Return OddColor
    Else
        Return EvenColor
    End If
End Function
'
Function RestartColor(ByVal OddColor As String) As String
    bOddRow = True
    Return OddColor
End Function

Ich habe jetzt drei verschiedene Arten von Zellhintergründen:

  1. Die erste Spalte der Datenzeile enthält = Code.AlternateColor ("AliceBlue", "White", True) (Dies entspricht der vorherigen Antwort.)
  2. Die verbleibenden Spalten der Datenzeile haben = Code.AlternateColor ("AliceBlue", "White", False) (Dies entspricht auch der vorherigen Antwort.)
  3. Die erste Spalte der Gruppierungszeile hat = Code.RestartColor ("AliceBlue") (Dies ist neu.)
  4. Verbleibende Spalten der Gruppierungszeile haben = Code.AlternateColor ("AliceBlue", "White", False) (Dies wurde zuvor verwendet, aber nicht für die Gruppierung von Zeilen erwähnt.)

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.

Beska
quelle
Sie können auch die Zeilennummerierung für jede Gruppe wie in dieser Antwort beschrieben zurücksetzen .
StackOverthrow
10

für Gruppenkopf- / Fußzeilen:

=iif(RunningValue(*group on field*,CountDistinct,"*parent group name*") Mod 2,"White","AliceBlue")

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:

=IIF(RunningValue(Fields![Name].Value, CountDistinct, "NameOfPartnetGroup") Mod 2, "White", "Wheat")

Siehe: http://msdn.microsoft.com/en-us/library/ms159136(v=sql.100).aspx

John Saunders
quelle
7

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"

= IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", Nothing)
Nonetaku
quelle
Weiß wäre besser als Nichts.
Nate S.
6

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:

  1. Erstellen Sie eine neue Spalte in der RowGroup1. Benennen Sie das Textfeld dafür in RowGroupColor um.
  2. Setzen Sie den Wert des Textfelds von RowGroupColor auf

    =iif(RunningValue(Fields![RowGroupField].Value ,CountDistinct,Nothing) Mod 2, "LightSteelBlue", "White")

  3. Setzen Sie die BackgroundColor-Eigenschaft aller Ihrer Zeilenzellen auf

    "=ReportItems!RowGroupColor.Value"

  4. Setzen Sie die Breite der RowGroupColor-Spalte auf 0pt und CanGrow auf false, um sie vor Clients auszublenden.

Voila! Dies löst auch viele der in diesem Thread erwähnten Probleme:

  • Automatisches Zurücksetzen für Untergruppen: Fügen Sie einfach eine neue Spalte für diese Zeilengruppe hinzu und führen Sie einen RunningValue für die Gruppenwerte aus.
  • Sie müssen sich keine Gedanken über True / False-Schalter machen.
  • Farben können nur an einer Stelle aufbewahrt werden, um eine einfache Änderung zu ermöglichen.
  • Kann austauschbar für Zeilen- oder Spaltengruppen verwendet werden (setzen Sie einfach die Höhe auf 0 anstelle der Breite)

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 ...

Kyle Hale
quelle
5

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 RowNumberundbOddRow (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 Nothingzu RowNumber, legte ich den Namen meiner Spalte Gruppe, zB

=IIf(RowNumber("MyColumnGroupName") Mod 2 = 0, "AliceBlue", "Transparent")

Dachte, dies könnte für jemand anderen nützlich sein.

Sarah Vessels
quelle
4

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

  1. Erstellen Sie in der unteren rechten Ecke einer Berichtsentwurfsansicht unter "Spaltengruppen" eine gefälschte übergeordnete Gruppe auf 1 (unter Verwendung des Ausdrucks) mit dem Namen "FakeParentGroup".
  2. Verwenden Sie dann im Berichtsentwurf für Zellen, die alternativ gefärbt werden sollen, den folgenden Ausdruck für die Hintergrundfarbe

= IIF (RunningValue (Fields! [ColumnGroupField] .Value, countDistinct, "FakeParentGroup") MOD 2, "White", "LightGrey")

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.

Aditya
quelle
1
Diese Antwort ist definitiv eine großartige Entdeckung für diejenigen, die Reihenbänder in komplexen Tablixen erstellen müssen! Wenn eine übergeordnete Gruppe vorhanden ist, verwenden Sie diese. Andernfalls erstellen Sie FakeParentGroup. Fehlende Werte in Tablixes, die sowohl Spalten- als auch Zeilengruppen enthalten, beeinträchtigen normalerweise die Formatierung. Siehe meine Antwort, die auf @ Adityas aufbaut, um fehlende Werte in der ersten Zelle zu berücksichtigen.
Rpyzh
2

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 ...

=IIf(RowNumber("DataSet1")  Mod 2 = 1, "White","Blue")
Matt
quelle
2

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 countDistinctErgebnis der runningValueFunktion geschickt, um Zeilennummern innerhalb einer Tablix-Gruppe (Zeilengruppe) zu identifizieren. Wenn Sie Tablix-Zeilen mit fehlendem Wert in der ersten Zelle haben, runningValuewird das countDistinctErgebnis 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 den countDistinctWert auszugleichen . Mein Ansatz war es, den ersten laufenden Wert in der Zeilengruppe selbst zu überprüfen (siehe Zeile 3 des folgenden Snippets):

=iif(
    (RunningValue(Fields![RowGroupField].Value, countDistinct, "FakeOrRealImmediateParentGroup")
    + iif(IsNothing(RunningValue(Fields![RowGroupField].Value, First, "GroupForRowGroupField")), 1, 0)
    ) mod 2, "White", "LightGrey")

Hoffe das hilft.

rpyzh
quelle
Vielen Dank an @rpyzh, dies war die Lösung, die für meine mehrzeilige Gruppe mit einem gemeinsamen übergeordneten Zeilengruppenbericht funktioniert hat!
Niallty
1

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:

Private bOddRow As Boolean
'*************************************************************************
'-- Display green-bar type color banding in detail rows
'-- Call from BackGroundColor property of all detail row textboxes
'-- Set Toggle True for first item, False for others.
'*************************************************************************
'
Function AlternateColor(ByVal OddColor As String, _
                  ByVal EvenColor As String, ByVal Toggle As Boolean) As String
         If Toggle Then bOddRow = Not bOddRow
         If bOddRow Then 
                Return OddColor
         Else
                 Return EvenColor
         End If
 End Function
 '
 Function RestartColor(ByVal OddColor As String) As String
         bOddRow = True
         Return OddColor
 End Function

Ich habe jetzt drei verschiedene Arten von Zellhintergründen:

  1. Die erste Spalte der Datenzeile enthält = Code.AlternateColor ("AliceBlue", "White", True) (Dies entspricht der vorherigen Antwort.)
  2. Die verbleibenden Spalten der Datenzeile haben = Code.AlternateColor ("AliceBlue", "White", False) (Dies entspricht auch der vorherigen Antwort.)
  3. Die erste Spalte der Gruppierungszeile hat = Code.RestartColor ("AliceBlue") (Dies ist neu.)
  4. Verbleibende Spalten der Gruppierungszeile haben = Code.AlternateColor ("AliceBlue", "White", False) (Dies wurde zuvor verwendet, aber nicht für die Gruppierung von Zeilen erwähnt.)

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.

Mischa
quelle
1

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:

Private bOddRow As Boolean
Private cellCount as Integer

Function AlternateColorByColumnCount(ByVal OddColor As String, ByVal EvenColor As String, ByVal ColCount As Integer) As String

if cellCount = ColCount Then 
bOddRow = Not bOddRow
cellCount = 0
End if 

cellCount  = cellCount  + 1

if bOddRow Then
 Return OddColor
Else
 Return EvenColor
End If

End Function

Für ein 7-Spalten-Tablix verwende ich diesen Ausdruck für Row (of Cells) Backcolour:

=Code.AlternateColorByColumnCount("LightGrey","White", 7)
Jeremy Thompson
quelle
0

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.

Faust der Wut
quelle
Schauen Sie sich @ Adityas und meine Antwort an, um fehlende Werte in der Matrix zu behandeln. Nützlich, wenn Sie bereits eine gefälschte Elterngruppe haben (oder bereit sind, diese zu erstellen). Auf diese Weise müssen Sie kein separates Feld erstellen.
Rpyzh
0

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

= Iif ( RunningValue (Fields!description.Value + Fields!name.Value, CountDistinct, Nothing) Mod 2 = 0,"#e6eed5", "Transparent")
Sojasauce Johnson
quelle
0

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:

Public Dim BGColor As String = "#ffffff"

Function AlternateColor() As String
  If BGColor = "#cccccc" Then
    BGColor = "#ffffff"
    Return "#cccccc"
  Else
    BGColor = "#cccccc"
    Return "#ffffff"
  End  If
End Function

Nun zum erstenSetzen Sie Spalte der Zeile, die Sie abwechseln möchten, den Farbausdruck auf:

= Code.AlternateColor ()

- -

Stellen Sie in den verbleibenden Spalten alle auf Folgendes ein:

= Code.BGColor

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.

Eneerge
quelle