我有一个带有矩阵的SSRS报告,我需要在列组中显示与前一列值相比的增长百分比。我通过使用自定义代码来管理这个...
DIM PreviousColValue AS Decimal
Dim RowName AS String = ""
Public Function GetPreviousColValue(byval Val as Decimal, byval rwName as string) as Decimal
DIM Local_PreviousColValue AS Decimal
IF RowName <> rwName THEN
RowName = rwName
PreviousColValue = val
Local_PreviousColValue = 0
ELSE
Local_PreviousColValue = (Val - PreviousColValue)/PreviousColValue
PreviousColValue = val
END IF
Return Local_PreviousColValue
End Function
..然后使用它作为单元格中的值表达式..
=Round(Code.GetPreviousColValue(ReportItems!Textbox8.Value,Fields!BusinessUnit.Value)*100,0,system.MidpointRounding.AwayFromZero)
到目前为止,这产生了预期的价值。现在我需要在背景颜色表达式中使用此表达式来获得红色/黄色/绿色,但是在该容量中它会失败。
背景颜色表达式如下所示:=IIF(ROUND(Code.GetPreviousColValue(ReportItems!Textbox9.Value,Fields!Salesperson.Value)*100,0,System.MidpointRounding.AwayFromZero)<=-5,"Red"
,IIF(ROUND(Code.GetPreviousColValue(ReportItems!Textbox9.Value,Fields!Salesperson.Value)*100,0,System.MidpointRounding.AwayFromZero) >=5,"Green"
,"Yellow"))
当我运行报告时,背景颜色表达式只返回黄色。作为测试,我将背景颜色表达式粘贴为单元格值并再次运行。结果如下图
我没有构建或运行时错误,所以我不确定为什么这不起作用。
答案 0 :(得分:0)
经过一些搜索后,我发现了一个更好的自定义代码解决方案,而不是我用来获得列组中的增长百分比与之前的列值相比。除了更简单的阅读之外,这个版本还有一个额外的好处:你可以动态地隐藏列组第一个实例的增长百分比列(因为它总是为零或为null)并且仍然在第二个/第三个/中得到正确的值列组的第4个实例。
Public Function GetDeltaPercentage(ByVal PreviousValue, ByVal CurrentValue) As Object
If IsNothing(PreviousValue) OR IsNothing(CurrentValue) Then
Return Nothing
Else if PreviousValue = 0 OR CurrentValue = 0 Then
Return Nothing
Else
Return (CurrentValue - PreviousValue) / PreviousValue
End If
End Function
新函数就是这样调用的
=Code.GetDeltaPercentage(Previous(Sum(<expression or dataset field>),"Group ByColumn"), Sum(<expression or dataset field>))
Re:原始问题 - 为什么我的单元格值表达式在用作背景颜色表达式时不起作用 - 我轻松一点,只是引用了单元格值。
=IIF(ROUND(Me.Value*100,0,System.MidpointRounding.AwayFromZero)<=-5,"Red"
,IIF(ROUND(Me.Value*100,0,System.MidpointRounding.AwayFromZero) >=5,"Green"
,"Yellow"))