在SSRS中进行排序的颜色不同

时间:2016-02-03 17:14:44

标签: sorting reporting-services ssrs-2008-r2

我的客户想要在SSRS报告中进行一些颜色格式化。由于客户的要求,我无法使用分组。我有报告按Main Tank排序,并希望排序颜色交替。因此,有几行Tank A都是灰色的,然后几行Tank B都是白色的。我目前正在使用它,但它只适用于每种排序的第一行

=iif( Fields!Tank.Value=previous(Fields!Tank.Value), "Transparent", "Red" )

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

我会在你的查询中通过添加一个返回0或1的列来定义颜色 - 想法草图:使用rank来获得与排序顺序相关的数字,然后使用MOD 2得到0或1如果您发布样本查询,我们可以帮助您找出具体细节。

答案 1 :(得分:1)

您可以使用自定义代码来获取所需的逻辑。在代码中使用自定义函数,该函数根据Tank值返回颜色。

转到Report菜单,Report Properties / Code标签,在文本区域中输入以下代码:

Dim prevColor As String = "Transparent"
Public Function GetColor(ByVal flag As Integer) As String
  If flag = 1 Then
    If prevColor = "Transparent" Then
      prevColor = "Gray"
    Else
      prevColor = "Transparent"
    End If
  End If
  Return prevColor
End Function

现在在单元格background-color属性中使用以下表达式:

=Code.GetColor(iif(Fields!Tank.Value=previous(Fields!Tank.Value),0,1))

它将为背景着色如下:

enter image description here

更新:以上逻辑仅正确地着色第一,第三,第五列,依此类推。它是由多次调用GetColor函数和覆盖全局变量prevColor引起的。

我设法通过将行号传递给函数来解决该问题。这是更新的功能:

Dim prevColor As String = "Transparent"
Dim rowNum As Integer = 0
Public Function GetColor(ByVal flag As Integer, ByVal nRow As Integer) As String
  If flag = 1 And rowNum <> nRow Then
    If prevColor = "Transparent" Then
      prevColor = "Gray"
    Else
      prevColor = "Transparent"
    End If
  End If
  rowNum = nRow
  Return prevColor
End Function

注意该函数接收一个新参数,因此调用表达式已更改:

=Code.GetColor(iif(Fields!Tank.Value=previous(Fields!Tank.Value),0,1),
RowNumber("DataSet3"))
  

"DataSet3"替换为数据集的实际名称。

它应生成以下Tablix:

enter image description here

如果有帮助,请告诉我。