我正在使用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吗?
答案 0 :(得分:9)
首先,您需要确保用于计算值的字段确实是数字。
通常情况下,当您将任意数字除以0时,在尝试除0/0或NaN
时会得到Infinity
。
因此,NaN
,Infinity
甚至#Error
的通用分辨率(将null值传递给分区时发生)是创建一个可以为你处理这个值的函数。
右键单击报告的背景,然后转到报告属性,如下所示:
然后,您可以转到标签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以避免NaN
和Infinity
。
然后用以下代码替换表达式:
= 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 )
使用文本框格式属性或公式编号属性控制演示文稿(小数位,%符号等)。