SSRS矩阵中的交替行颜色表达式无法正常工作

时间:2016-03-09 14:48:34

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

在唯一的行组中,我尝试使用以下表达式获取备用行颜色:

背景颜色的表达式:=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

结果如下图所示,上面列出的表达式有什么问题?

Example of problem

修改 - Solution

2 个答案:

答案 0 :(得分:4)

数据中缺少的日期导致背景行颜色无法正常工作的问题。

您可以浪费大量时间尝试使查询正常工作。

或者你可以使用Alternating Row Color功能。

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)

您可能需要在矩阵中切换第一列中的颜色。

SSRS Alternating row color issues when some rows are not visible

答案 1 :(得分:1)

对于我来说,我的行组和列组之间没有交叉点。

实施例:   - 我有存储过程1和2

  • 在1/1上,1和2都跑了,所以我记录了它们

  • 在1/2上,只需要1运行,所以我只记录1

  • 1/3,他们都跑了,所以我记录了

我会在1/2的sp 2上看到乱糟糟的单元格(颜色不会发生变化),因为SSRS无法计算运行总计的新值(它&& #39; s仍然是1)。 3,它识别一个值并得到运行值现在为3,因此着色按预期恢复。

要解决此问题,您可以执行<ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> </ul>以获取所有日期和SP的笛卡尔积,以便每个不同的日期对于每个不同的日期都有一行,并将其存储在临时表中。将当前查询存储在临时表或CSV中,然后加入基于cross apply的查询。这将确保没有错过的细胞。请注意,这将产生性能影响,因此进行相应的测试(很可能是微不足道的。)

如果您需要帮助撰写查询,请告诉我。