我的客户想要在SSRS报告中进行一些颜色格式化。由于客户的要求,我无法使用分组。我有报告按Main Tank
排序,并希望排序颜色交替。因此,有几行Tank A
都是灰色的,然后几行Tank B
都是白色的。我目前正在使用它,但它只适用于每种排序的第一行
=iif(
Fields!Tank.Value=previous(Fields!Tank.Value),
"Transparent",
"Red"
)
任何帮助都会很棒。
答案 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))
它将为背景着色如下:
更新:以上逻辑仅正确地着色第一,第三,第五列,依此类推。它是由多次调用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:
如果有帮助,请告诉我。