在数据集表达式

时间:2018-06-04 20:44:10

标签: reporting-services

情况:

我们有多个数据库,用户可以从中提取数据并合并到一个报告中。某些数据库被组合在一起。

  • 第1组
    • Database1
    • Database2
    • 数据库3
  • 第2组
    • Database4
    • Database5
    • Database6

分组存储在包含3列

的数据集(dbsets)中
  • 名称
  • 数据库
  • 描述

参数用于允许用户选择要报告的组。参数的Available Values设置为Get values from a query,其指向上面的数据集,Value field设置为DatabasesLabel 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之外进行更改(例如,更改为存储过程)

0 个答案:

没有答案