SSRS报表将数字转换为货币格式时显示#Error的解决方法
报错原因
- SSRS的
IIF函数不支持短路求值,无论判断条件是否成立,真假两个分支的表达式都会执行计算,若空值判断逻辑不严谨,即使触发真分支返回固定文本,假分支的格式化操作遇到非法输入也会抛出错误。 - 空值判断逻辑和参数类型不匹配:如果你的
PurchasePrice参数设置为数值类型(Decimal/Integer等,价格类参数推荐用该类型),空参数的取值为Nothing,和空字符串""做相等判断本身就会触发类型不匹配错误。 - 你提供的部分表达式存在拼写错误,
Undisclosed被误写为Undiscloded。
解决方案
首先确认你的参数类型,对应使用正确的表达式:
情况1:参数为数值类型(推荐)
直接用IsNothing判断空值,同时在内层加一层空值判断避免IIF不短路导致的报错:
=IIF(IsNothing(Parameters!PurchasePrice.Value), "Undisclosed", Format(IIF(IsNothing(Parameters!PurchasePrice.Value), 0, Parameters!PurchasePrice.Value), "C"))
如果需要保留0位小数,将格式化字符串改为"C0"即可,或者使用FormatCurrency函数:
=IIF(IsNothing(Parameters!PurchasePrice.Value), "Undisclosed", FormatCurrency(IIF(IsNothing(Parameters!PurchasePrice.Value), 0, Parameters!PurchasePrice.Value), 0))
情况2:参数为字符串类型
先判断字符串是否为空,再用Val函数将字符串转为数值后格式化:
=IIF(String.IsNullOrEmpty(Parameters!PurchasePrice.Value), "Undisclosed", Format(Val(IIF(String.IsNullOrEmpty(Parameters!PurchasePrice.Value), "0", Parameters!PurchasePrice.Value)), "C"))
内容的提问来源于stack exchange,提问作者DaBeau96
相关产品推荐
相关产品推荐

