解决方法:当用户点击“全选”时,报告应该传递一个空值,而不是解析多选下拉参数中的所有内容






2.43/5 (5投票s)
如果您有一个很长的下拉列表,并且只想传递一个值,可以使用这种方法

引言
我在处理 Reporting Services 时遇到了两个问题。本文解决了以下两个问题。
1) 在下拉菜单中有一个“空复选框”,这样用户就不*必须*为每个多选下拉框输入值。
2) 如果选择了所有值(即选择了“全选”),所有值都不会传递到查询/存储过程中,因为这会降低性能。
上图显示了空复选框和所有已选值。
背景
我的客户拒绝在 Reporting Services 之上添加应用程序层。因此,所有操作都必须在报告本身中完成。由于 Reporting Services 存在许多限制,处理上述问题的方法也有限。
创建空复选框
那么,我们如何让报告运行,而无需在多选下拉复选框中选择值呢?不幸的是,默认情况下,您无法传递空值/null 值。您至少必须选择一个值。
我的解决方案是创建一个空复选框。创建方法如下:
1) 创建一个新的数据集,命名为(例如)EmptyDS。
2) 在其中编写以下代码
SELECT ColumnName FROM TableName UNION ALL SELECT '' AS Expr1 ORDER BY ColumnName
3) 转到设计视图,并打开报告参数。选择参数后,在默认值下,选择“来自查询”,然后选择 EmptyDS。
就这样,您就有了空复选框
传递空值而不是下拉框中的所有值。
有很多建议的方法可以做到这一点。只有一种对我有效。
1) 首先,我们需要一个新的数据集来计数特定参数中的值的数量。因此,我们创建一个名为 CountDS 的新数据集。
2) 然后,您单击“数据”选项卡,并输入传递报告的数据集属性,而不是添加 =Parameters!DataSetName.Value,我将其更改为带有 =if(..) 的表达式。例如,
=iif(Parameters!DataSetName.Count>=Paramet
结论
这样,您的查询/存储过程就不会因为大量值被传递到存储过程中而消耗服务器资源。
关注点
他们需要为 Reporting Services 添加更多功能。如果客户对应用程序层不感兴趣,那么提供 Reporting Services 的功能就可能变得非常具有挑战性。
历史
Posted February 12, 2008