基于存储过程的多次执行生成 1 个报告(将不同的参数传递给同一过程)
Generate 1 report based on multiple executions of stored procedure (passing different parameters to same procedure)
我有一个 SSRS 报告,它接受一个参数并执行一个存储过程来生成一个报告。
该参数是来自 table 的值,我从下拉列表中有用户 select
假设有 15 个选项作为参数传递给每次执行。
AAAA
AAAB
AAAC
...etc
有什么方法可以设置报告,以便它使用每个参数执行并生成报告?
问题是现在用户必须手动 select 第一个参数,生成报告,然后将文件结果导出到 excel。
我想做的是一种让用户 select 多个参数并只导出一个包含所有参数的文件的方法(存储过程不能接受更多参数,因为编码方式取决于仅接收一个参数)
因此它必须安排存储过程的多次执行来创建报告,然后将其导出。这可能吗? (请注意,参数的数量会经常变化,因此我需要提供 select 从查询填充到数据库的列表中的倍数的选项)
并且澄清一下,存储过程只需要一个参数,这不是通过使用拆分器或类似的方式发送多个参数来操作来解决的,因为SP接收到的参数用于计算取决于of order,(不详细介绍SP,每次执行只需要取一个参数)
由于您已经有一个处理单个选项的报告,因此您可以使用子报告轻松地做到这一点。不要担心这个答案的长度它实际上很简单。
为了安全起见,我会复制一份现有报告...。
将现有报告更改为仅接受单个参数值(如果尚未接受)。保存此报告,这将是您的子报告,假设它名为 mySubReport
接下来创建一个新的空白报表。
添加一个数据集(称为 dsParameterList
),它将为您提供您希望用户从中选择的选项列表(我想这将与您当前的报告相同?)。例如,如果它是一个公司列表,它可能看起来像 SELECT CompanyID, CompanyName FROM myCompanyTable
接下来添加一个名为 say @options
的参数,确保将其设置为多值并设置可用值以使用查询并将其指向 dsParameterList
。根据需要设置值和标签字段。
现在创建另一个名为 dsLoop
的数据集。该数据集将包含选定参数值的列表。使用前面的公司示例,数据集查询可能看起来像这样。 SELECT CompanyID, CompanyName FROM myCompanyTable WHERE CompanyID IN (@options)
接下来向您的报告中添加一个 table 并删除列,这样就只剩下 1 个了。将 table/tablix 的数据集 属性 设置为 dsLoop
。这意味着我们将为每个选定的参数值生成 1 行。
在详细信息行中,右键单击剩余的文本框并选择 'Insert Subreport'。现在右键单击子报表占位符并将属性设置为指向我们之前保存的报表(本例中为 mySubReport
)。
仍然在子报告属性中,单击参数选项卡并添加一个新条目,选择左列中的参数并将右列中的值设置为您从 dsLoop
中获取的值想传递给子报表。在我们公司的示例中,这可能是 [CompanyID]
就是这样。您 运行 报告并从参数列表中选择,当您单击查看报告时 dsLoop
查询 运行s 并为我们提供了仅包含那些选定公司的列表,报告正文生成dsLoop
数据集中的每一行对应一行,该数据集又 运行 每次传入具有不同参数的子报表。
可选您可以右键单击主设计window下的行组,然后将'pagename' 属性设置为一个值。在公司示例中,这可能是 =Fields!CompanyName.Value
。当报表导出到 Excel 时,工作簿中的每个 sheet 将以公司名称
命名
我有一个 SSRS 报告,它接受一个参数并执行一个存储过程来生成一个报告。 该参数是来自 table 的值,我从下拉列表中有用户 select 假设有 15 个选项作为参数传递给每次执行。
AAAA
AAAB
AAAC
...etc
有什么方法可以设置报告,以便它使用每个参数执行并生成报告?
问题是现在用户必须手动 select 第一个参数,生成报告,然后将文件结果导出到 excel。
我想做的是一种让用户 select 多个参数并只导出一个包含所有参数的文件的方法(存储过程不能接受更多参数,因为编码方式取决于仅接收一个参数)
因此它必须安排存储过程的多次执行来创建报告,然后将其导出。这可能吗? (请注意,参数的数量会经常变化,因此我需要提供 select 从查询填充到数据库的列表中的倍数的选项)
并且澄清一下,存储过程只需要一个参数,这不是通过使用拆分器或类似的方式发送多个参数来操作来解决的,因为SP接收到的参数用于计算取决于of order,(不详细介绍SP,每次执行只需要取一个参数)
由于您已经有一个处理单个选项的报告,因此您可以使用子报告轻松地做到这一点。不要担心这个答案的长度它实际上很简单。
为了安全起见,我会复制一份现有报告...。
将现有报告更改为仅接受单个参数值(如果尚未接受)。保存此报告,这将是您的子报告,假设它名为 mySubReport
接下来创建一个新的空白报表。
添加一个数据集(称为 dsParameterList
),它将为您提供您希望用户从中选择的选项列表(我想这将与您当前的报告相同?)。例如,如果它是一个公司列表,它可能看起来像 SELECT CompanyID, CompanyName FROM myCompanyTable
接下来添加一个名为 say @options
的参数,确保将其设置为多值并设置可用值以使用查询并将其指向 dsParameterList
。根据需要设置值和标签字段。
现在创建另一个名为 dsLoop
的数据集。该数据集将包含选定参数值的列表。使用前面的公司示例,数据集查询可能看起来像这样。 SELECT CompanyID, CompanyName FROM myCompanyTable WHERE CompanyID IN (@options)
接下来向您的报告中添加一个 table 并删除列,这样就只剩下 1 个了。将 table/tablix 的数据集 属性 设置为 dsLoop
。这意味着我们将为每个选定的参数值生成 1 行。
在详细信息行中,右键单击剩余的文本框并选择 'Insert Subreport'。现在右键单击子报表占位符并将属性设置为指向我们之前保存的报表(本例中为 mySubReport
)。
仍然在子报告属性中,单击参数选项卡并添加一个新条目,选择左列中的参数并将右列中的值设置为您从 dsLoop
中获取的值想传递给子报表。在我们公司的示例中,这可能是 [CompanyID]
就是这样。您 运行 报告并从参数列表中选择,当您单击查看报告时 dsLoop
查询 运行s 并为我们提供了仅包含那些选定公司的列表,报告正文生成dsLoop
数据集中的每一行对应一行,该数据集又 运行 每次传入具有不同参数的子报表。
可选您可以右键单击主设计window下的行组,然后将'pagename' 属性设置为一个值。在公司示例中,这可能是 =Fields!CompanyName.Value
。当报表导出到 Excel 时,工作簿中的每个 sheet 将以公司名称