SSRS 矩阵中的交替行颜色表达式无法正常工作
Alternating row color expression in SSRS matrix not working correctly
在唯一的行组中,我尝试使用以下表达式获取备用行颜色:
背景色表达式:=IIf( RunningValue (Fields!SP.Value, CountDistinct, Nothing) MOD 2, "White", "blue")
SQL code:
select
ROW_NUMBER() OVER (ORDER BY DataDate) AS SSRSRowNumber
,datepart(dw,datadate) SSRSDateFilter
,DataDate
,SP
,sum(TMI) as TotalCI
from table
where DataDate>GETDATE()-20
group by DataDate,SP
order by 1, 2
结果就是下图,上面列出的表达式有什么问题吗?
编辑-:Solution
在我的行组和列组之间没有交集的情况下,我遇到过这种情况。
示例:
- 我有存储过程 1 和 2
1月1日,1和2都运行,所以记录下来
1/2,只有1个需要运行,所以我只记录1个
1/3,他们又运行,所以我都录了
我将在 sp 2 的 1/2 上有一个看起来很乱的单元格(颜色不会改变),因为 SSRS 无法计算 运行ning 总计的新值(它仍然是 1)。在 3 上,它识别一个值并得到 运行ning 值现在是 3,因此着色按预期恢复。
为了解决这个问题,您可以执行 cross apply
来获取所有日期和 SP 的笛卡尔积,这样每个不同的日期都有一行对应每个不同的日期,并将其存储在临时文件中 table.将您当前的查询存储在临时 table 或 CSV 中,并加入您基于 cross apply
的查询。这将确保没有遗漏细胞。请注意,这会对性能产生影响,因此请相应地进行测试(很可能可以忽略不计)。
如果您需要编写查询方面的帮助,请告诉我。
数据中缺少日期导致背景行颜色无法正常工作。
您可能会浪费大量时间来尝试使您的查询正常工作。
或者您可以只使用交替行颜色功能。
Private bOddRow As Boolean
'*************************************************************************
' -- Display green-bar type color banding in detail rows
' -- Call from BackGroundColor property of all detail row textboxes
' -- Set Toggle True for first item, False for others.
'*************************************************************************
Function AlternateColor(ByVal OddColor As String, _
ByVal EvenColor As String, ByVal Toggle As Boolean) As String
If Toggle Then bOddRow = Not bOddRow
If bOddRow Then
Return OddColor
Else
Return EvenColor
End If
End Function
对于控制颜色的第一列:
=Code.AlternateColor("AliceBlue", "White", True)
对于剩余的列,不要切换第三个参数:
=Code.AlternateColor("AliceBlue", "White", False)
您可能需要切换矩阵中第一列的颜色。
在唯一的行组中,我尝试使用以下表达式获取备用行颜色:
背景色表达式:=IIf( RunningValue (Fields!SP.Value, CountDistinct, Nothing) MOD 2, "White", "blue")
SQL code:
select
ROW_NUMBER() OVER (ORDER BY DataDate) AS SSRSRowNumber
,datepart(dw,datadate) SSRSDateFilter
,DataDate
,SP
,sum(TMI) as TotalCI
from table
where DataDate>GETDATE()-20
group by DataDate,SP
order by 1, 2
结果就是下图,上面列出的表达式有什么问题吗?
编辑-:Solution
在我的行组和列组之间没有交集的情况下,我遇到过这种情况。
示例: - 我有存储过程 1 和 2
1月1日,1和2都运行,所以记录下来
1/2,只有1个需要运行,所以我只记录1个
1/3,他们又运行,所以我都录了
我将在 sp 2 的 1/2 上有一个看起来很乱的单元格(颜色不会改变),因为 SSRS 无法计算 运行ning 总计的新值(它仍然是 1)。在 3 上,它识别一个值并得到 运行ning 值现在是 3,因此着色按预期恢复。
为了解决这个问题,您可以执行 cross apply
来获取所有日期和 SP 的笛卡尔积,这样每个不同的日期都有一行对应每个不同的日期,并将其存储在临时文件中 table.将您当前的查询存储在临时 table 或 CSV 中,并加入您基于 cross apply
的查询。这将确保没有遗漏细胞。请注意,这会对性能产生影响,因此请相应地进行测试(很可能可以忽略不计)。
如果您需要编写查询方面的帮助,请告诉我。
数据中缺少日期导致背景行颜色无法正常工作。
您可能会浪费大量时间来尝试使您的查询正常工作。
或者您可以只使用交替行颜色功能。
Private bOddRow As Boolean
'*************************************************************************
' -- Display green-bar type color banding in detail rows
' -- Call from BackGroundColor property of all detail row textboxes
' -- Set Toggle True for first item, False for others.
'*************************************************************************
Function AlternateColor(ByVal OddColor As String, _
ByVal EvenColor As String, ByVal Toggle As Boolean) As String
If Toggle Then bOddRow = Not bOddRow
If bOddRow Then
Return OddColor
Else
Return EvenColor
End If
End Function
对于控制颜色的第一列:
=Code.AlternateColor("AliceBlue", "White", True)
对于剩余的列,不要切换第三个参数:
=Code.AlternateColor("AliceBlue", "White", False)
您可能需要切换矩阵中第一列的颜色。