6

我正在使用 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 吗?

4

2 回答 2

9

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

通常,NaN当您尝试除以 0 / 0 或Infinity将任何数字除以 0 时,您会得到。

因此,一个通用的解决方案NaNInfinity甚至#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

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

然后您将表达式替换为:

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

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

通过这样做,您可以确保 de SSRS 将此值视为百分比而不是文本,即使将其导出到 Excel 等其他平台也是如此。

您还可以查看有关将代码添加到报告 (SSRS) 的 Microsoft 文档

于 2014-11-05T11:51:48.183 回答
1

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

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

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

于 2012-12-24T19:18:54.627 回答