SSRS中比较OngradeTrend与OngradeTrendPrevious文本框值返回0的问题
解决ReportItems数值对比始终返回0的问题
看起来你遇到的核心问题是数据类型不匹配!直接用ReportItems的Value做大小比较时,其实是在做字符串对比而非数值对比,这会导致逻辑判断出错,最终总是触发相等分支返回0。
问题原因
ReportItems![控件名].Value返回的是字符串类型,字符串的比较逻辑和数值完全不同:比如字符串"10"会被认为小于"9",因为第一个字符"1"的ASCII码比"9"小。哪怕你的文本框显示的是数字,只要没转成数值类型,对比逻辑就会乱掉。
修复后的表达式
把两个值先转换成数值类型(比如用CDbl处理小数,CInt处理整数),再做比较:
=IIF(CDbl(ReportItems![OngradeTrend].Value) < CDbl(ReportItems![OngradeTrendPrevious].Value), "DOWN", IIF(CDbl(ReportItems![OngradeTrend].Value) > CDbl(ReportItems![OngradeTrendPrevious].Value), "UP", 0))
额外优化建议
如果你的文本框可能出现空值、非数字内容,或者带有百分号/逗号这类格式符号,建议先做校验和清理,避免报错:
=IIF(IsNumeric(ReportItems![OngradeTrend].Value) AND IsNumeric(ReportItems![OngradeTrendPrevious].Value), IIF(CDbl(Replace(ReportItems![OngradeTrend].Value, "%", "")) < CDbl(Replace(ReportItems![OngradeTrendPrevious].Value, "%", "")), "DOWN", IIF(CDbl(Replace(ReportItems![OngradeTrend].Value, "%", "")) > CDbl(Replace(ReportItems![OngradeTrendPrevious].Value, "%", "")), "UP", 0) ), "N/A" )
上面的例子里用Replace去掉了百分号,你可以根据实际格式调整清理规则。
内容的提问来源于stack exchange,提问作者Curteze
相关产品推荐
相关产品推荐

