【问题标题】:Highlight Alternating Color Rows SSRS 2016突出显示交替颜色行 SSRS 2016
【发布时间】:2021-08-03 18:57:52
【问题描述】:

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

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"
)

这会突出显示相关的行,如下所示,但如果在我上面的示例表中使用,它会使第 2 行到第 7 行看起来是相关的,但它们彼此并不相关。

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

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

【问题讨论】:

    标签: reporting-services expression highlight ssrs-2016


    【解决方案1】:

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

    这会将相关值保存在 iRowValue 中。如果为 NULL (0),则返回 WHITE。否则,它会检查当前的相关值与前一个值。如果不匹配,颜色就会改变。

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

    【讨论】:

    • 这听起来可行,但我不熟悉 VB,这是我要在我现有的 TSQL 代码中为报告实现的东西吗?还是将 VB 存储在其他地方以供参考?
    • @jwalls91 - VB 代码位于 SSRS 报告属性的 CODE 选项卡中。右键单击设计窗口但不在报告中,然后单击报告属性或在 报告 的属性窗口中。将 VB 代码粘贴到自定义代码窗口中。
    • 我找到了,在添加自定义代码后,它给出了一条消息“自定义代码的第 11 行出现错误。表达式不是数组或方法,并且不能有参数列表。 "
    • @jwalls91 - 呃,我解决了这个问题。我正在重用一些代码,但错过了 bOddRow 数组。
    • 这似乎很适合我正在寻找的东西,感谢您解释一切!我以前从未在 SSRS 报告中使用过 VB 自定义代码。
    【解决方案2】:

    您可以使用 SWITCH 函数来评估相关行并返回颜色:

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

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

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

    我更喜欢更微妙的色调而不是亮黄色。

    【讨论】:

    • 如果有一个序列,其中相关列有两对不同的相关行,并且相关列的值都是奇数,这会起作用吗?由于我可能对报告的结果进行排序,相关列并不总是按时间顺序排列,我忘了提及这一点。
    • 我在我的问题中编辑了示例表,以反映相关列的值并不总是按时间顺序排列,我忘记添加此详细信息。如图所示,在相关列中值为 3 的相关行集合之后,接下来是下一个对的值 5。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 2016-11-23
    • 1970-01-01
    相关资源
    最近更新 更多