突出显示交替颜色行 SSRS 2016

Highlight Alternating Color Rows SSRS 2016

我在下面有一个 table,其中包含带有名称和金额的交易数据。我创建了一个名为“Related”的标志列,它根据“ParentID”列是否匹配来识别交易是否相关。如果是这样,对于具有相同“ParentID”的任何其他相关交易,第一个将从 1 开始并从那里递增。

Name                  Amount             ParentID          Related
-------------------------------------------------------------------
  
Jake                  200                 800                NULL  
John                  500                 500                1
John                  600                 500                1
Paul                  800                 100                2  
Joe                   1000                100                2
Tom                   700                 600                3
Tom                   1500                600                3
Troy                  1000                800                5
Nick                  500                 800                5
Phil                  2000                900                NULL

我想做的是在 SSRS 中,使用交替颜色根据它们是否相关来突出显示这些匹配行。到目前为止,我已经尝试过这个表达式来突出显示:

=IIF(
Fields!Related.Value >= 1, "Yellow", "Transparent"
)

这会将相关行突出显示为黄色,如下所示,但如果在我上面的示例 table 中使用,它会使第 2 行到第 7 行看起来像是相关的,而实际上它们并不相关彼此。

所以我想要的结果是在两种颜色(例如黄色和绿松石色)之间交替,以便能够区分相关行,如下所示。因此,在如下所示的这种情况下,另一组相关交易序列中的下一个将是绿松石色:

这是否可以通过 SSRS 中的表达式实现,或者是否有更好的方法在 SSRS 行中指示相关的行?

您可以使用 SWITCH 函数计算相关行和return颜色:

=SWITCH(IsNothing(Fields!Related.Value), "White", 
    Fields!Related.Value MOD 2 = 0, "Ivory", 
    Fields!Related.Value MOD 2 = 1, "AliceBlue", 
    1 = 1, NOTHING)

MOD 函数将 return 相关数字除以 2 的余数,因此它将在黄色和蓝色之间交替。您还可以增加 MOD 数字以获得更多颜色结果行(即 Fields!Related.Value MOD 5 = {0 - 4} ),但最终可能会得到太多颜色。

另请注意,虽然 Visual Studio 会在 GUI 中给出“透明”,但它不是一个有效值。该消息将显示在 ERROR 选项卡中,并导致颜色为 NOTHING。请改用 NOTHING 或 White。

比起亮黄色,我更喜欢更微妙的色调。

在 SSRS 中没有简单的方法可以做到这一点,但您可以使用一些 VB 来使其工作。

这会将 Related 值保存在 iRowValue 中。如果它是 NULL (0),那么它是 returns WHITE。否则,它会检查当前的 Related 值与之前的值。如果不匹配,颜色就会改变。

Private bOddRow As Boolean 
Private iRowValue As INTEGER 

Function AlternateColor2(ByVal OddColor As String, ByVal EvenColor As String, ByVal Toggle As INTEGER) As String 

    IF Toggle = 0 THEN 
        iRowValue = Toggle
        Return "White"
        GOTO END_FUNCTION
    END IF
        
  If Toggle <> iRowValue Then bOddRow = Not bOddRow 

  iRowValue = Toggle
  
  If bOddRow Then 
                Return OddColor 
  Else 
                Return EvenColor 
  End If 

END_FUNCTION:

End Function

它将在 BackgroundColor 表达式中使用

=CODE.AlternateColor2("AliceBlue", "Ivory", IIF(ISNOTHING(Fields!Related.Value), 0, Fields!Related.Value))