情况:
我们有多个数据库,用户可以从中提取数据并合并到一个报告中。某些数据库被组合在一起。
分组存储在包含3列
的数据集(dbsets)中参数用于允许用户选择要报告的组。参数的Available Values
设置为Get values from a query
,其指向上面的数据集,Value field
设置为Databases
,Label field
设置为{{ 1}}。当我们更改数据集中的Name
值时,这会导致问题,因为这些值与订阅相关联,并且这些值经常更改。
报表的数据集使用表达式构建动态联合查询,如下所示:
Databases
如果用户选择= " DECLARE @sql NVARCHAR(MAX) "
+ " SELECT @sql = COALESCE(@sql + N' UNION ALL ', N'') + N'SELECT * FROM ' + dbname + '.dbo.users u ' "
+ " FROM (VALUES "
+ Parameters!DBGroup.Value
+ " ) t (dbname) "
+ " exec sp_executesql @sql "
作为参数值,则会构建select * from Database1.dbo.users union all select * from Database2.dbo.users union all select * from Database3.dbo.users
之类的查询。
如果我们修改数据集并将Group 1
添加到Database7
,那么使用Group1
创建的任何订阅都会中断,因为基础值Name = Group1
已更改
尝试解决方案:
要尝试修复数据集中Databases
更改时订阅中断,我们已尝试将参数值更改为静态Value
列并使用Name
像这样的动态表达式:
Lookup()
这当然会在您尝试运行报告时抛出错误
用于数据集中参数的表达式是指a 领域。字段不能用于查询参数表达式。
问题:
有没有办法从数据集表达式中的不同数据集中检索值?或报告中此问题的另一种解决方案,不包括在SSRS之外进行更改(例如,更改为存储过程)