【问题标题】:SSRS Expression works as cell value expression, but not as background color value expressionSSRS 表达式用作单元格值表达式,但不能用作背景颜色值表达式
【发布时间】:2016-02-23 01:15:32
【问题描述】:

我有一个 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"))

当我运行报告时,背景颜色表达式只会返回黄色。作为测试,我将背景颜色表达式粘贴为单元​​格值并再次运行它。结果如下图

我没有收到构建或运行时错误,所以我不确定为什么这不起作用。

【问题讨论】:

  • 您是否尝试过使用内置的 Previous 功能?此外,您最好在表达式中引用数据集字段而不是单个文本框。
  • Re: 尝试内置的 Previous 函数:这可能是 Internet 搜索返回陈旧信息的情况。但是在寻找解决方案时,我一直遇到“不支持 Previous 函数”的语句当你有行和列分组时”See Social.msdn Link here.
  • @StevenWhite Re 使用文本框引用与数据集字段.. 你当然是对的,但我通过文本框值 ref 获得的值本身就是“IIF(Sum(),0)”。 . 类型表达式,整个事情变得难以阅读/理解

标签: ssrs-2008


【解决方案1】:

经过更多搜索后,我发现了一个更好的自定义代码解决方案,而不是我用来获取列组中与前一列值相比的增长百分比的解决方案。除了更易于阅读之外,此版本还有一个额外的好处:您可以动态隐藏列组的第一个实例的增长百分比列(因为它始终为零或空),并且仍然在第 2/3/ 中获得正确的值列组的第 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(&lt;expression or dataset field&gt;),"Group ByColumn"), Sum(&lt;expression or dataset field&gt;))

回复:最初的问题 - 为什么我的单元格值表达式在用作背景颜色表达式时不起作用 - 我很轻松地只是引用了单元格值。

=IIF(ROUND(Me.Value*100,0,System.MidpointRounding.AwayFromZero)<=-5,"Red"
,IIF(ROUND(Me.Value*100,0,System.MidpointRounding.AwayFromZero) >=5,"Green"
,"Yellow"))

【讨论】:

    猜你喜欢
    • 2014-10-18
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多