SSRS中的NaN和Infinity值

时间:2012-11-28 15:36:13

标签: reporting-services

我正在使用Visual Studio构建我的报告,并且我尝试使用这三个表达式:

=IIF(Fields!A.Value = 0 or Fields!B.Value = 0, 0,SUM(Fields!A.Value)/SUM(Fields!A.Value)

=IIF(SUM(Fields!A.Value) = 0 or SUM(Fields!B.Value =0),0,SUM(Fields!A.Value)/SUM(Fields!A.Value)

=Replace(Round((((SUM(Fields!A.Value)/SUM(Fields!B.Value)))*100),0),"NaN","0")+"%"

前2个只给我0%,最后一个没有摆脱Infinity但是摆脱了NaN。

当我使用这两个表达式时,有人可以帮忙吗?当我使用前2个或最后一个时,不能只获得0%和Infinity吗?

2 个答案:

答案 0 :(得分:9)

首先,您需要确保用于计算值的字段确实是数字。

通常情况下,当您将任意数字除以0时,在尝试除0/0或NaN时会得到Infinity

因此,NaNInfinity甚至#Error通用分辨率(将null值传递给分区时发生)是创建一个可以为你处理这个值的函数。

右键单击报告的背景,然后转到报告属性,如下所示:

Accessing Report Properties on BID 2008

然后,您可以转到标签Code并添加自定义代码:

Public Function Divide(ByVal dividend As Double, ByVal divisor As Double) As Double
   If IsNothing(divisor) Or divisor = 0 Or IsNothing(dividend) Or dividend = 0 Then
      Return 0
   Else
      Return dividend / divisor
   End If
End Function

我们使用IsNothing()来避免#Error并检查除数或被除数是否为0以避免NaNInfinity

然后用以下代码替换表达式:

= Code.Divide(Sum(Fields!A.Value), Sum(Fields!B.Value))

为了使这看起来像一个百分比,我强烈建议您更改Textbox属性。因此,右键单击它,继续文本框属性和选项卡号。选择类别百分比。

通过执行此操作,您确保de SSRS将此值视为百分比而非文本,即使将其导出到其他平台(例如Excel)也是如此。

您还可以查看Microsoft documentation on adding code to a Report (SSRS)

答案 1 :(得分:1)

如果你得到0%和NaN,我会检查你的现场数据类型。您应该至少有一个非整数,并且都需要是数字。我仍然希望看到一些1,但这是0%和NaN的开始。在检查方面,您只需要检查分母以避免计算错误。 尝试:

=IIF(Sum(Fields!B.Value) <> 0 , Sum(Fields!A.Value) / Sum(Fields!B.Value), 0 )

使用文本框格式属性或公式编号属性控制演示文稿(小数位,%符号等)。