You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSRS报表总计栏显示#error而非0问题求助

Report Builder总计栏显示#error而非0的解决方法

问题现象

刚接触Report Builder,报表总计栏显示#error而非预期的0。测试0除以1、1除以0时报表预览均显示0,但总计栏报错,期望当被除数或除数为0时总计栏显示0。

现有代码

字段表达式

=Code.Divide(Microsoft.VisualBasic.Strings.FormatNumber(Sum(Fields!InExtCost.Value, "ClassDesc"), 5), Microsoft.VisualBasic.Strings.FormatNumber(Sum(Fields!InTranQty.Value, "ClassDesc"),  First(Fields!DecimalsQuantity.Value, "RptParameter")))

自定义Divide函数

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 Function

问题根源

FormatNumber函数返回的是字符串类型,而非数值类型。将格式化后的字符串传入要求Double类型参数的Divide函数时,报表引擎自动类型转换可能失败(比如字符串包含千位分隔符等非数值字符),进而导致总计栏出现#error。测试单个值时未触发格式转换问题,所以能正常显示。

解决方案

调整表达式计算顺序

先完成除法运算,再对结果进行格式化,避免类型转换错误:

=Microsoft.VisualBasic.Strings.FormatNumber(Code.Divide(Sum(Fields!InExtCost.Value, "ClassDesc"), Sum(Fields!InTranQty.Value, "ClassDesc")), 5)

优化Divide函数健壮性

处理Sum可能返回DBNull的情况,增强函数容错性:

Public Function Divide(ByVal dividend As Object, ByVal divisor As Object) As Double
   ' 处理DBNull或空值,转换为0
   Dim divd As Double = If(IsDBNull(dividend) Or IsNothing(dividend), 0, CDbl(dividend))
   Dim divs As Double = If(IsDBNull(divisor) Or IsNothing(divisor), 0, CDbl(divisor))
   
   If divs = 0 Or divd = 0 Then
      Return 0
   Else
      Return divd / divs
   End Function

验证效果

修改后,当被除数或除数为0时,总计栏将正确显示0,不再出现#error。

内容的提问来源于stack exchange,提问作者Koyomini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 17:32:25