SSRS跨数据集nvarchar类型列差值计算异常解决方案咨询
问题根因分析
- 表达式3报错:跨数据集引用字段必须搭配聚合函数(如
First/Sum等),未指定聚合函数时SSRS无法确定取数据集中的哪一行数据,直接触发语法错误。 - 表达式1报错:
Convert.ToInt32的参数顺序错误,你将数据集作用域写进了类型转换的参数列表中,语法不合法。 - 表达式2返回0.00:
A1和B1都是nvarchar类型,SSRS不会自动将字符串转为数值做运算,字符串类型执行减运算时默认返回0。
正确解决方案
如果你需要取两个数据集第一行的数值做差值,正确表达式如下:
=CInt(First(Fields!A1.Value, "A")) - CInt(First(Fields!B1.Value, "B"))
补充适配场景
- 字段可能存在非数字内容时,增加合法性判断避免转换报错:
=IIF(IsNumeric(First(Fields!A1.Value, "A")) AndAlso IsNumeric(First(Fields!B1.Value, "B")), CInt(First(Fields!A1.Value, "A")) - CInt(First(Fields!B1.Value, "B")), 0)
- 需要计算两个数据集所有行数值总和的差值时,将
First替换为Sum:
=Sum(CInt(Fields!A1.Value), "A") - Sum(CInt(Fields!B1.Value), "B")
- 字段存储为小数时,将
CInt替换为CDbl或CDec即可。
内容的提问来源于stack exchange,提问作者Chinmoy Bhowmik
相关产品推荐
相关产品推荐

