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吗?
首先,您需要确保用于计算值的字段确实是数字.
通常,NaN在尝试除0/0或Infinity将任何数除以0时得到.
因此,一个通用的解决方案NaN,Infinity甚至#Error(当一个空值传递给一个分区时发生)就是创建一个函数来为你处理这个值.
右键单击报告的背景,然后转到报告属性,如下所示:

然后,您可以转到标签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以避免NaN和Infinity.
然后用以下代码替换表达式:
= Code.Divide(Sum(Fields!A.Value), Sum(Fields!B.Value))
Run Code Online (Sandbox Code Playgroud)
为了使这看起来像一个百分比,我强烈建议你改变你的Textbox属性.因此,右键单击它,继续文本框属性和选项卡号.选择类别百分比.
通过执行此操作,您确保de SSRS将此值视为百分比而不是文本,即使将其导出到其他平台(如Excel)也是如此.
您还可以查看有关向报表添加代码的Microsoft文档(SSRS)
如果您得到 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)
使用文本框格式属性或方程编号属性控制您的演示文稿(小数位、% 符号等)。