SSRS中的NaN和Infinity值

Ami*_*ngh 6 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")+"%"
Run Code Online (Sandbox Code Playgroud)

前2只给我0%和最后一个没有摆脱无限但但摆脱了NaN.

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

joa*_*uda 9

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

通常,NaN在尝试除0/0或Infinity将任何数除以0时得到.

因此,一个通用的解决方案NaN,Infinity甚至#Error(当一个空值传递给一个分区时发生)就是创建一个函数来为你处理这个值.

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

在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
Run Code Online (Sandbox Code Playgroud)

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

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

= Code.Divide(Sum(Fields!A.Value), Sum(Fields!B.Value))
Run Code Online (Sandbox Code Playgroud)

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

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

您还可以查看有关向报表添加代码Microsoft文档(SSRS)


Vol*_*vox 2

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

=IIF(Sum(Fields!B.Value) <> 0 , Sum(Fields!A.Value) / Sum(Fields!B.Value), 0 )
Run Code Online (Sandbox Code Playgroud)

使用文本框格式属性或方程编号属性控制您的演示文稿(小数位、% 符号等)。