Reporting services 基于存储过程的多次执行生成1个报告(将不同的参数传递给同一个过程)

Reporting services 基于存储过程的多次执行生成1个报告(将不同的参数传递给同一个过程),reporting-services,ssrs-2008,ssrs-2012,ssrs-2008-r2,Reporting Services,Ssrs 2008,Ssrs 2012,Ssrs 2008 R2,我有一个SSRS报告,它接受一个参数并执行一个存储过程来生成一个报告。 该参数是我让用户从下拉列表中选择的表中的值 假设15个选项作为参数传递给每个执行 AAAA AAAB AAAC ...etc 是否有任何方法可以设置报告,使其使用每个参数执行并生成报告 问题是,现在用户必须手动选择第一个参数,生成报告,然后将文件结果导出到excel 我想做的是让用户选择多个参数,然后只导出一个包含所有参数的文件(存储过程不能接受更多参数,因为编码方式取决于只接收一个参数) 因此,它必须安排存储过程的多次执

我有一个SSRS报告,它接受一个参数并执行一个存储过程来生成一个报告。 该参数是我让用户从下拉列表中选择的表中的值 假设15个选项作为参数传递给每个执行

AAAA
AAAB
AAAC
...etc
是否有任何方法可以设置报告,使其使用每个参数执行并生成报告

问题是,现在用户必须手动选择第一个参数,生成报告,然后将文件结果导出到excel

我想做的是让用户选择多个参数,然后只导出一个包含所有参数的文件(存储过程不能接受更多参数,因为编码方式取决于只接收一个参数)

因此,它必须安排存储过程的多次执行,以创建报告,然后将其导出。这可能吗?(请注意,参数的数量会经常更改,因此我需要提供从从从查询到数据库填充的列表中选择倍数的选项)


为了澄清这一点,存储过程只需要获取一个参数,这不是通过使用拆分器或类似工具发送多个参数来解决的,因为SP接收到的参数根据顺序用于计算中(为了不详细介绍SP,每次执行只需获取一个参数)

由于您已经有了一个处理单个选项的报告,因此可以使用子报告轻松地完成此操作。不要担心这个答案的长度,它其实很简单

为了安全起见,我会复制一份现有的报告

将现有报告更改为仅接受单个参数值(如果尚未接受)。保存此报告,这将是您的子报告,因此我们将其命名为
mySubReport

接下来创建一个新的空白报告

添加一个数据集(称为say
dsParameterList
),该数据集将为您提供希望用户从中选择的选项列表(我想这将与您当前的报告相同?)。例如,如果它是一个公司列表,它可能看起来像
SELECT CompanyID,CompanyName FROM myCompanyTable

接下来添加一个名为say
@options
的参数,确保将其设置为多值,并设置可用值以使用查询,并将其指向
dsParameterList
。根据需要设置值和标签字段

例如,现在创建另一个名为
dsLoop
的数据集。此数据集将包含选定参数值的列表。使用前面的公司示例,数据集查询可能如下所示<代码>从CompanyID所在的myCompanyTable中选择CompanyID,CompanyName(@options)

接下来,向报表中添加一个表并删除列,以便只剩下1个。将table/tablix的dataset属性设置为
dsLoop
。这意味着我们将为每个选定的参数值生成一行

在“详细信息”行的“剩余”文本框中单击鼠标右键,然后选择“插入子报告”。现在右键单击子报表占位符,并将属性设置为指向我们先前保存的报表(
mySubReport

仍在子报表属性中时,单击参数选项卡并添加新条目,选择左列中的参数,并将右列中的值设置为要传递到子报表的
dsLoop
中的值。在我们的公司示例中,这可能是
[CompanyID]

就这样。运行报告并从参数列表中进行选择,当您单击查看报告时,将运行
dsLoop
查询,并为我们提供一个仅包含这些选定公司的列表,报告正文将为
dsLoop
数据集中的每一行生成一行,而该数据集中的每一行又使用每次传递的不同参数运行子报告


或者您可以右键单击主设计窗口下的行组,并将“pagename”属性设置为一个值。在公司示例中,这可能是
=字段!CompanyName.Value
。当报表导出到Excel时,工作簿中的每个工作表都将以公司名称命名,因为您已经有了一个处理单个选项的报表,因此可以使用子报表轻松完成此操作。不要担心这个答案的长度,它其实很简单

为了安全起见,我会复制一份现有的报告

将现有报告更改为仅接受单个参数值(如果尚未接受)。保存此报告,这将是您的子报告,因此我们将其命名为
mySubReport

接下来创建一个新的空白报告

添加一个数据集(称为say
dsParameterList
),该数据集将为您提供希望用户从中选择的选项列表(我想这将与您当前的报告相同?)。例如,如果它是一个公司列表,它可能看起来像
SELECT CompanyID,CompanyName FROM myCompanyTable

接下来添加一个名为say
@options
的参数,确保将其设置为多值,并设置可用值以使用查询,并将其指向
dsParameterList
。根据需要设置值和标签字段

例如,现在创建另一个名为
dsLoop
的数据集。此数据集将包含选定参数值的列表。使用前面的公司示例,数据集查询可能如下所示<代码>从CompanyID所在的myCompanyTable中选择CompanyID,CompanyName(@options)

接下来,向报表中添加一个表并删除列,以便只剩下1个。将table/tablix的dataset属性设置为
dsLoop
。这意味着我们将为每个选定的参数值生成一行

在“详细信息”行中,在剩余文本框中单击鼠标右键,然后选择“插入”