将多个值传递给子报表参数 - SSRS

Passing multiple values to subreport parameter - SSRS

我有一个包含 4 个参数的报告:

  1. 年 - 接受一年的单个值 - 例如:2020
  2. 运营商组 - 允许用户select单个运营商分组
  3. Segment - 允许最终用户select一个或多个业务部门
  4. 损失原因 - 允许最终用户select一个或多个损失原因

当我执行这份报告时:

报告按预期生成 - 我设置了 SSRS 报告,因此它在导出时会在 Excel 中创建一个新选项卡,以将每月总计与累计总计分开。

但是最终用户希望能够执行此报告多年以进行比较 - 所以我创建了一个 parent 或主报告 - 然后我创建了一个 tablix 并添加了 sub-report 被调用 - 并根据 Year(s) 创建了一个行组 selected.

我的子报表参数如下:

我最终希望完成的是在一年内通过 selected 的运营商组、细分市场和损失原因 - 以及每年的子报告 运行用户可能 select.

例如,如果用户 selects 2016、2017、2018 - sub-report 需要 运行 3 次才能生成这些年份中每一年的总计运营商组、段和丢失原因的参数相同。

我不确定发生了什么,但使用 Year 参数时:=Parameters!Year.Value(0) - 报告看起来好像不断生成一年:

wrong report

我也试过使用 =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.

一次