我在报表生成器中创建了一个报表,其中有 10 个可由用户设置的过滤器(参数)。其中一些需要接受多个自由文本值,例如 MemberNumber(例如 12345678A,56789098F)。我已经得到了它,因此它可以在没有值的情况下正常运行(必需,返回所有结果),并在添加一个过滤器值时返回预期结果。但是,当我添加两个(在本例中为 MemberNumbers)时,我收到错误:
An error has occurred during report processing. (rsProcessingAborted)
Query execution failed for dataset 'DataSet1'. (rsErrorExecutingCommand)
For more information about this error navigate to the report server on the local server machine, or enable remote errors
不幸的是,我无权访问报表服务器。所以,我希望解决方案是显而易见的。这就是我现在正在做的事情以及我已经尝试过的事情。
在 SQL 中:
AND (acl.MemberNum in (@MemberNumber) OR (@MemberNumber=''))
从之前的搜索来看,似乎需要第二个(@MemberNumber=''),这样空过滤器也会返回结果。
在数据集属性 > 参数中:
我已经尝试过...
然后在参数 > 成员编号 > 报告参数属性中
然后,可用值=无,默认值=无默认值...因为我希望它从空白开始,并且通常会留空。
我尝试过的另一件事,似乎确实有效,就是在 SQL 中使用它:
AND (acl.MemberNum in (@MemberNumber) OR 'ALL' IN (@MemberNumber))
然后填写数据集属性和参数设置,例如:
但是,至少可以说,在所有这些字段(其中 7 个)中将 ALL 作为默认值有点可用性犯规。
我怎样才能拥有一个包含七个用户过滤器的用户界面,这些过滤器都可以为空,或接受多个用户值,而不在其中放入所有或一些其他虚拟文本?
'OR (@MemberNumber='')
不适用于多个值 - 它会转换为 OR ('1234', '5678' = '')
,这是错误的语法。
相反,检查参数中的“全部”:
OR ('ALL' IN (@MemberNumber))
这将转换为
OR ('ALL' IN ('1234', '5678'))