【问题标题】:Remove NaN in Nested iif in SSRS expression删除 SSRS 表达式中嵌套 iif 中的 NaN
【发布时间】:2016-09-13 12:43:56
【问题描述】:

SQL-SSRS 新手

如何向以下代码添加功能以将返回的 NaN 值更改为 0 或空白?我认为正在发生的是在同意和不同意的总和 = 0 的情况下,我得到了这个 Nan。如果我不处理“同意”和“不同意”类别,我认为这对我来说会更容易。同样,SQL 编程新手。任何帮助将不胜感激。

=(Sum(iif(Fields!Response.Value = "Agreed",Fields!Days.Value,0)) + Sum(iif(Fields!Response.Value = "Disagreed",Fields!Days.Value,0)))/(Sum(iif(Fields!Response.Value = "Agreed",Fields!Fq.Value,0)) + Sum(iif(Fields!Response.Value = "Disagreed",Fields!Fq.Value,0)))

【问题讨论】:

  • 只需将 NaN 替换为 0... 或使用 Single.IsNAN

标签: reporting-services expression nan iif


【解决方案1】:

试试下面的方法,

=Replace((Sum(IIF(Fields!Response.Value = "Agreed",Fields!Days.Value,0)) + 
Sum(IIF(Fields!Response.Value = "Disagreed",Fields!Days.Value,0))),"NaN","0")
/ Replace((Sum(IIF(Fields!Response.Value = "Agreed",Fields!Fq.Value,0)) 
+ Sum(IIF(Fields!Response.Value = "Disagreed",Fields!Fq.Value,0))),"NaN","0")

另外,看看this

【讨论】:

  • 你在表达式里面写了什么?
【解决方案2】:

您应该处理表达式中的 DIV 0 问题,而不是替换除以零返回的文本:

=IIF(
    SUM(IIF(Fields!Response.Value = "Agreed" OR Fields!Response.Value = "Disagreed", Fields!Fq.Value, 0)) = 0, 0, 
        SUM(IIF(Fields!Response.Value = "Agreed" OR Fields!Response.Value = "Disagreed", Fields!Days.Value, 0)))
/IIF(
    SUM(IIF(Fields!Response.Value = "Agreed" OR Fields!Response.Value = "Disagreed", Fields!Fq.Value, 0)) = 0, 1, 
        SUM(IIF(Fields!Response.Value = "Agreed" OR Fields!Response.Value = "Disagreed", Fields!Fq.Value, 0)))

如果 SUM 为 0,则计算结果为 0 / 1,否则为 SUM(Days) / SUM(Fq),其中响应是同意或不同意。

而不是两个总和,只需在一个中使用 OR。

【讨论】:

    【解决方案3】:
    Public Function Divider (ByVal Dividend As Double, ByVal Divisor As Double)
    If IsNothing(Divisor) Or Divisor = 0
      Return 0
    Else
      Return Dividend/Divisor
    End If
    End Function 
    

    此功能使您可以编写自定义代码来修复 Nan 的所有问题。 这可以通过下面调用

    =Code.Divider(Fields!FieldA.Value, Fields!FieldB.Value)
    

    你的代码如下

    =Code.Divider(((Sum(iif(Fields!Response.Value = "Agreed",Fields!Days.Value,0)) + Sum(iif(Fields!Response.Value = "Disagreed",Fields!Days.Value,0))), ((Sum(iif(Fields!Response.Value = "Agreed",Fields!Fq.Value,0)) + Sum(iif(Fields!Response.Value = "Disagreed",Fields!Fq.Value,0)))))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多