我正在尝试将以下SQL Server表达式转换为SSRS中的可见性表达式,以用于包含错误消息的特定文本框:
select address, commonPlaceName, municipality where @Location not like '$[0-9]%'
我的SSRS报告允许用户搜索@Location,它是地址和commonPlaceName的组合,并返回记录表。
我试图根据字符长度和所提供的参数值是否包含数字来限制返回的行数。我想在搜索没有数字的公共地点或地址时显示错误消息“抱歉,您的搜索范围太广,因此记录数量有限”。
我通过使用以下内容获得了长度部分:
=iif(len(Parameters!Location.Value)<=5,false,true)
但我无法弄清楚如何在字符串中搜索数字
对于那些感兴趣的人,在SQL脚本中,我根据一个case语句设置rowcount,该语句与我尝试在SSRS中设置的可见性选项相似。
我还在学习SSRS,所以非常感谢任何帮助!
编辑:
以下是我用来限制rowcount的SQL语句,如果有帮助的话:
declare @top int
set @top = case when len(@Location) <= 5 then 100
when @Location not like '%[0-9]%' then 100
when len(@Location) >5 then 0
end
set rowcount @top
答案 0 :(得分:0)
有很多方法可以做到这一点。
计算查询中的可见性,并将“可见性”设置为计算的查询字段。这在报告中更清晰。通常你会想把所有的显示逻辑都放在报告中,但是,我懒得一两次。
= IIF(字段!ShouldShowField.Value == 1,0,1)
使用InStr()
或
= IIF(Regex.Replace(Fields!MyField.Value,&#34; [MyRegExString]&#34;)。Length == Fields!MyField.Value.Length,0,1)
使用自定义代码进行高级字符串操作,并调用与
类似的代码= IIF(Code.ShouldShowTextBox(字段!MyField.Value),0,1)
答案 1 :(得分:0)
好的,我想我现在找到了解决方法。我最终创建了一个新的数据集:
select
'LocationWithNum' = case
when @Location like '%[0-9]%' then 'true'
else 'false'
end
然后我将错误消息文本框的可见性表达式更改为以下内容:
=iif(len(Parameters!Location.Value)<=5 or First(Fields!LocationWithNum.Value, "LocationWithNum") = false, false, true)
到目前为止,这似乎运作良好。如果你们想到别的什么,请告诉我!