我有一个SSRS报告,它接受一个参数并执行一个存储过程来用它生成一个报告。该参数是我让用户从下拉列表中选择的表中的值假设有15个选项作为参数传递给每个执行。
AAAA
AAAB
AAAC
...etc
有没有什么方法可以设置报告,使其与每个参数一起执行并生成报告?
问题是,现在用户必须手动选择第一个参数,生成报告,然后将文件结果导出到excel。
我想做的是让用户选择多个参数,并只导出一个包含所有参数的文件(存储过程不能接受更多参数,因为编码的方式取决于只接收一个参数(
因此,它必须安排存储过程的多次执行来创建报告,然后将其导出。这可能吗?(注意,参数的数量会经常变化,所以我需要从从从查询到数据库的列表中选择倍数(
需要澄清的是,存储过程只需要取一个参数,这不是通过发送多个参数来解决的,因为SP接收的参数是根据顺序在计算中使用的,(不详细说明SP,每次执行只需要取个参数(
由于您已经有了一个处理单个选项的报告,因此可以使用子报告轻松完成此操作。不要担心这个答案的长度,它其实很简单。
为了安全起见,我会复制现有报告。
如果if尚未接受单个参数值,请将现有报表更改为仅接受该值。保存此报告,这将是您的子报告,所以假设它被称为mySubReport
接下来创建一个新的空白报告。
添加一个数据集(称为dsParameterList
(,它将为您提供希望用户从中选择的选项列表(我想这将与您当前的报告相同?(。例如,如果它是一个公司列表,它可能看起来像SELECT CompanyID, CompanyName FROM myCompanyTable
接下来添加一个名为@options
的参数,确保它被设置为多值,并将可用值设置为使用查询,并将其指向dsParameterList
。根据需要设置值和标签字段。
现在创建另一个名为dsLoop
的数据集。此数据集将包含选定参数值的列表。使用前面的公司示例,数据集查询可能看起来像这样。SELECT CompanyID, CompanyName FROM myCompanyTable WHERE CompanyID IN (@options)
接下来,在报表中添加一个表并删除列,以便只剩下1个。将表/tableix的数据集属性设置为dsLoop
。这意味着我们将为每个选定的参数值生成1行。
在详细信息行中,右键单击其余文本框,然后选择"插入子报表"。现在右键单击子报表占位符,并将属性设置为指向我们之前保存的报表(本例中为mySubReport
(。
仍在子报表属性中时,单击参数选项卡并添加一个新条目,选择左列中的参数,并将右列中的值设置为要传递给子报表的dsLoop
中的值。在我们公司的例子中,这可能是[CompanyID]
就是这样。您运行报告并从参数列表中进行选择,当您单击"查看报告"时,dsLoop
查询将运行,并为我们提供一个所选公司的列表,报告正文将为dsLoop
数据集中的每一行生成一行,然后运行子报告,每次都传递不同的参数。
(可选(您可以右键单击主设计窗口下的行组,并将"pagename"属性设置为一个值。在公司示例中,这可能是=Fields!CompanyName.Value
。当报告导出到Excel时,工作簿中的每张工作表都将以公司的名称命名