通过数据值更改SSRS报告中的行颜色

时间:2011-07-20 15:24:12

标签: ssrs-2008 reporting-services

我知道您可以将BackgroundColor设置为使用相当简单的表达式在两种颜色之间交替。我有一个列包含按顺序组织的日期值。基本上,我希望每次日期值随着行向下变化时,BackgroundColor都会交替显示。我在那里得到了这段代码:

= iif(上一个(字段!Req_Del_Dt.Value)=(字段!Req_Del_Dt.Value),“白色”,“薰衣草”)

每次行的值与前一行不同时,这将更改颜色。这就是结果:

http://imageshack.us/photo/my-images/24/alternatingcolors.jpg/

如何在整个日期(可能是3行)中将颜色更改为一种颜色,然后在下一次更改日期时“切换”为不同的颜色?我认为我走在正确的轨道上,但我无法想出这一点。

我非常感谢任何建议或意见。谢谢!

7 个答案:

答案 0 :(得分:7)

=IIF(RunningValue(Fields!Address.Value, CountDistinct, Nothing) MOD 2 = 1, "White", "Lavender")

对我而言,这就是诀窍。

答案 1 :(得分:1)

您可以编写自定义代码。例如:

Private _dateCount As Integer = 0
Function GetDateRowColor(ByVal previousDate As DateTime, ByVal currentDate As DateTime) As String
    If previousDate = currentDate Then
        ' Do nothing
    Else
        _dateCount++
    End If

    If _dateCount Mod 2 = 0 Then
        Return "White"
    Else
        Return "Lavender"
    End If
End Function

然后,在背景颜色中使用表达式,例如:

=Code.GetDateRowColor(Previous(Fields!Req_Del_Dt.Value), Fields!Req_Del_Dt.Value)

HTH。

答案 2 :(得分:1)

知道了 - 在回复之前我应该​​更加努力。我必须跟踪当前行号并仅在新行上切换值。修改后的代码:

Private _dateCount As Integer = 0
Private CurRowNumber as Integer = 0
Private ColorValue as String = ""

Function GetDateRowColor(ByVal previousDate As DateTime, ByVal currentDate As DateTime, MyRowNumber as Integer) As String

    'Check if this is a new row number...
    If MyRowNumber <> CurRowNumber then
       CurRowNumber = CurRowNumber  + 1 'New row, so increment counter

        If previousDate = currentDate Then
            ' Do nothing
        Else
                _dateCount = _dateCount + 1
        End If

        If _dateCount Mod 2 = 0 Then
                ColorValue = "White"
        Else
                ColorValue = "Lavender"
        End If
   End If

        Return ColorValue 'Always return a value (for columns other than the first one)

End Function

这样称呼:

=Code.GetDateRowColor(Previous(Fields!Req_Del_Dt.Value), Fields!Req_Del_Dt.Value, RowNumber(Nothing))

再次感谢,感谢您的出色回应&amp;解答!

答案 3 :(得分:1)

我遇到了类似的问题:

  • SSRS 16中的Tablix /表
  • 无法进行分组(会干扰Tablix的其他功能)
  • 需要在日期字段
  • 中替换具有相同值的行的颜色块
  • 相同的日期值可能会再次出现(这很重要,因为Nanus Answer,即使用CountDistinct取决于相同的值(日期)不会再出现在以后的块中。)

对我而言,Loki70 revised answer中的代码无效。几行随机块的第一行将在单元格中具有交替的颜色。但是,一旦我重写了代码,它就起作用了:

Private _dateCount As Integer = 0
Private RowNumberRunner as Integer = 0
Private ColorValue as String = ""

Function GetDateRowColor(ByVal previousDate As DateTime, ByVal currentDate As DateTime, MyRowNumber as Integer) As String

   If MyRowNumber <> RowNumberRunner Then 
      RowNumberRunner = MyRowNumber
      If previousDate <> currentDate Then 
         _dateCount = _dateCount + 1
      End If
   End If

   If _dateCount Mod 2 = 1 Then 
      ColorValue = "White"
   Else ColorValue = "Lavender"
   End If

   Return ColorValue 
End Function

没有任何线索,为什么这样做,以前的代码没有。它的功能相同,只是用不同的方式写成。它的调用方式相同:

=Code.GetDateRowColor(Previous(Fields!Req_Del_Dt.Value), Fields!Req_Del_Dt.Value, RowNumber(Nothing))

答案 4 :(得分:0)

我遇到了与Loki70相同的问题,并且非常喜欢Nanu的解决方案。

然而,一旦我看到结果,我想做更多。我希望主要信息出现一次,但在组的第一行之后“隐藏”行。一起使用Nanu和Loki70的代码,我能够将第一行之后的行的字体颜色设置为与填充相同的颜色。从而隐藏该单元格的文本。

=IIF(Previous(Fields!Req_Del_Dt.Value) <> (Fields!Req_Del_Dt.Value), "Black", 
    IIF(RunningValue(Fields!Req_Del_Dt.Value, CountDistinct, Nothing) MOD 2 = 1, 
    "White", "Lavender"))

我用它来隐藏显示相同信息的行的前几个单元格,然后显示该子组不同的其他单元格。

答案 5 :(得分:-1)

Public Function Setcolor(ByVal Runs AS Integer,ByVal Wickets AS Integer) AS String
    setcolor="Transperent"
    IF(Runs >=500 AND Wickets >=10) THEN return "Green"
    END IF
END Function

答案 6 :(得分:-1)

这是一个简单的解决方案。首先,我假设您正在使用MSSQL,因为问题是关于SSRS。您可以直接从查询中选择值,因此在报表本身中,您只需根据单个值设置背景颜色,而不是范围......

让我们说,您希望在报告Req_Del_Dt.Value中使用不同的颜色,根据它的范围....所以,您可以查询类似这样的内容&gt;

select *,
    case when Req_Del_Dt < 30 then 1
    when Req_Del_Dt between 30 and 60 then 2
    when Req_Del_Dt between 61 and 90 then 3
    when Req_Del_Dt between 91 and 150 then 4
    else 5 end as color_range
from source_table

有了这个,在SSRS中,您只需转到BackgroundColor属性,在文本框的Fill部分中显示req_del_det,选择颜色表达式,并写下这样的&gt;

    =SWITCH(Fields!color_range.Value = 1, "#ffffff", 
    Fields!color_range.Value = 2, "#ffebeb",
    Fields!color_range.Value = 3, "#ffd8d8",
    Fields!color_range.Value = 4, "#ffc4c4",
    Fields!color_range.Value = 5, "#ffb1b1")