【问题标题】:Passing multiple values to subreport parameter - SSRS将多个值传递给子报表参数 - SSRS
【发布时间】:2021-02-09 05:17:45
【问题描述】:

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

  1. Year - 接受单一的年份值 - 例如:2020
  2. 运营商组 - 允许用户选择单个运营商分组
  3. 细分 - 允许最终用户选择一个或多个业务细分
  4. 丢失原因 - 允许最终用户选择一个或多个丢失原因

当我执行此报告时:

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

但最终用户希望能够执行此报告多年以进行比较 - 所以我创建了一个父报告或主报告 - 然后我创建了一个 tablix 并添加了要调用的子报告 - 并创建了一个基于所选年份的行组。

我的子报表参数如下:

我最终希望完成的是在一年内加上所选的承运人组、细分和损失原因 - 并为用户可能选择的每一年运行子报告。

例如,如果用户选择 2016、2017、2018 - 子报告将需要运行 3 次才能使用相同的承运人组、航段和损失原因参数生成每一年的总计。

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

我也尝试过使用=JOIN(Parameters!Year.Value,","),但这似乎也没有帮助。

谁有解决此类问题的经验?谢谢,

【问题讨论】:

  • =Parameters!Year.Value(0) 表示为参数Year 选择的第一个值。您希望 =Parameters!Year.Value 在分组内。
  • 感谢您的回复,但在进行更新后 - 运行报告 2 年会导致主报告仅显示所选第一年的数据 - 但每个月和累计总计创建 14 个工作表 -所以总共 28 个 - 而不仅仅是每年需要的两个。
  • 我觉得我们在这里遗漏了很多信息;就像你给我们的只是真实画面的一小部分。 假设是您已经过滤到您想要的年份;显然你不是。所以你需要添加这些过滤器。

标签: reporting-services sql-server-2016 subreport


【解决方案1】:

执行此操作的最简单方法是将数据集添加到每年返回一行的主报表中。

如果您的数据库中有日期表或类似的表,那么您可以执行类似的操作

SELECT DISTINCT Year(myDateColumn) as [myYear]
FROM myDatesTable
WHERE Year(myDateColumn) IN (@Year)

如果您没有日期表(除了建议您添加一个...),您可以使用类似的东西即时创建一个

SELECT * FROM (
    SELECT top 20 
        ROW_NUMBER() OVER(ORDER BY name) + 2000 as [myYear]
        FROM sysobjects) o 
    WHERE myYear IN (@Year)

(根据需要调整前 20 位和 +2000 位,以获得涵盖所有潜在数据的年份范围)

现在将主报表中 tablix 的数据集属性设置为指向这个新数据集。

在您的子报表对象的参数中,将Year 参数的值设置为数据集中的[myYear] 字段,方法是从下拉列表中选择它或使用=Fields!myYear.Value 作为表达式。

现在 tablix 已绑定到数据集,它将为从“日期”数据集返回的每条记录创建一行,每行将有不同的年份传递给子报表,因此子报表被调用一次每行/年。

【讨论】:

  • 真棒艾伦 - 谢谢你的回应。通过添加年份的附加参数并将该值绑定到 tablix,我能够获得所需的输出。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
相关资源
最近更新 更多