将多个值传递给子报表参数 - SSRS
Passing multiple values to subreport parameter - SSRS
我有一个包含 4 个参数的报告:
- 年 - 接受一年的单个值 - 例如:2020
- 运营商组 - 允许用户select单个运营商分组
- Segment - 允许最终用户select一个或多个业务部门
- 损失原因 - 允许最终用户select一个或多个损失原因
当我执行这份报告时:
报告按预期生成 - 我设置了 SSRS 报告,因此它在导出时会在 Excel 中创建一个新选项卡,以将每月总计与累计总计分开。
但是最终用户希望能够执行此报告多年以进行比较 - 所以我创建了一个 parent 或主报告 - 然后我创建了一个 tablix 并添加了 sub-report 被调用 - 并根据 Year(s) 创建了一个行组 selected.
我的子报表参数如下:
我最终希望完成的是在一年内通过 selected 的运营商组、细分市场和损失原因 - 以及每年的子报告 运行用户可能 select.
例如,如果用户 selects 2016、2017、2018 - sub-report 需要 运行 3 次才能生成这些年份中每一年的总计运营商组、段和丢失原因的参数相同。
我不确定发生了什么,但使用 Year 参数时:=Parameters!Year.Value(0)
- 报告看起来好像不断生成一年:
我也试过使用 =JOIN(Parameters!Year.Value,","
) 但这似乎也没有帮助。
有人有解决此类问题的经验吗?谢谢,
最简单的方法是将数据集添加到您的主报告中,每年 returns 一行。
如果您的数据库中有日期 table 或类似日期,那么您可以执行类似
的操作
SELECT DISTINCT Year(myDateColumn) as [myYear]
FROM myDatesTable
WHERE Year(myDateColumn) IN (@Year)
如果你没有日期 table 那么(除了建议你添加一个...)你可以用类似
的方式即时创建一个
SELECT * FROM (
SELECT top 20
ROW_NUMBER() OVER(ORDER BY name) + 2000 as [myYear]
FROM sysobjects) o
WHERE myYear IN (@Year)
(根据需要调整前 20 名和 +2000 名以获得涵盖所有潜在数据的年份范围)
现在将主报表中 tablix 的数据集 属性 设置为指向这个新数据集。
在子报表对象的参数中,通过从下拉列表中选择它或使用 =Fields!myYear.Value
作为表达式,将 Year
参数的值设置为数据集中的 [myYear]
字段.
现在 tablix 已绑定到数据集,它将为从“dates”数据集返回的每条记录创建一行,每行将有不同的年份传递给子报表,因此调用子报表每个 row/year.
一次
我有一个包含 4 个参数的报告:
- 年 - 接受一年的单个值 - 例如:2020
- 运营商组 - 允许用户select单个运营商分组
- Segment - 允许最终用户select一个或多个业务部门
- 损失原因 - 允许最终用户select一个或多个损失原因
当我执行这份报告时:
报告按预期生成 - 我设置了 SSRS 报告,因此它在导出时会在 Excel 中创建一个新选项卡,以将每月总计与累计总计分开。
但是最终用户希望能够执行此报告多年以进行比较 - 所以我创建了一个 parent 或主报告 - 然后我创建了一个 tablix 并添加了 sub-report 被调用 - 并根据 Year(s) 创建了一个行组 selected.
我的子报表参数如下:
我最终希望完成的是在一年内通过 selected 的运营商组、细分市场和损失原因 - 以及每年的子报告 运行用户可能 select.
例如,如果用户 selects 2016、2017、2018 - sub-report 需要 运行 3 次才能生成这些年份中每一年的总计运营商组、段和丢失原因的参数相同。
我不确定发生了什么,但使用 Year 参数时:=Parameters!Year.Value(0)
- 报告看起来好像不断生成一年:
我也试过使用 =JOIN(Parameters!Year.Value,","
) 但这似乎也没有帮助。
有人有解决此类问题的经验吗?谢谢,
最简单的方法是将数据集添加到您的主报告中,每年 returns 一行。
如果您的数据库中有日期 table 或类似日期,那么您可以执行类似
的操作SELECT DISTINCT Year(myDateColumn) as [myYear]
FROM myDatesTable
WHERE Year(myDateColumn) IN (@Year)
如果你没有日期 table 那么(除了建议你添加一个...)你可以用类似
的方式即时创建一个SELECT * FROM (
SELECT top 20
ROW_NUMBER() OVER(ORDER BY name) + 2000 as [myYear]
FROM sysobjects) o
WHERE myYear IN (@Year)
(根据需要调整前 20 名和 +2000 名以获得涵盖所有潜在数据的年份范围)
现在将主报表中 tablix 的数据集 属性 设置为指向这个新数据集。
在子报表对象的参数中,通过从下拉列表中选择它或使用 =Fields!myYear.Value
作为表达式,将 Year
参数的值设置为数据集中的 [myYear]
字段.
现在 tablix 已绑定到数据集,它将为从“dates”数据集返回的每条记录创建一行,每行将有不同的年份传递给子报表,因此调用子报表每个 row/year.
一次