Reporting Services - 将数据导入子报表

时间:2009-11-19 10:06:42

标签: sql-server-2008 reporting-services ssrs-2008 subreport

我的任务是使用Reporting Services 2008报告调查数据。

我的挑战是:

  • 调查有许多问题
  • 问题是三种类型之一(数字评估,是/否问题或自由文本)

为了解决这个问题,我决定在主报告中使用子报告,例如:我为三种问题类型中的每一种定义了一个报告,现在当我报告调查时,我基本上动态地为调查报告创建RDL,使用三种问题类型作为子报告。

到目前为止,这确实很有效 - 但我面临一个主要问题:如何将数据导入子报告?

我现在看到的方法是让每个问题类型的每个(子)报告根据共享数据源定义自己的数据集,以从数据库中提取值。我很确定这会起作用 - 但我不太热衷于将5,10,20个子报告转移到数据库以独立获取数据。

我希望能够在“主要”报告中为整个调查获取一次数据,然后将相应的数据子集提供给每个子报告,因为它正在呈现 - 但我可以似乎没有办法做到这一点....

我错过了一些完全明显的东西吗?我没有多少接触过Reporting Services,而我上一次使用它的项目是四年前(使用Reporting Services 2000) - 所以我很有可能对这个明显的解决方案视而不见:-)请让我知道! / p>

感谢您提供有关Reporting Services的任何提示,指向优秀文章或博客的提示,以及任何帮助!

马克

3 个答案:

答案 0 :(得分:2)

通常的方法是将参数(如日期范围)从主报表传递到子报表,然后子报表处理其他所有内容。要提高性能,请查看是否可以从缓存或快照渲染子报表。缓存存储报告,其中包含传递的参数组合,因此在首次“数据库命中”之后,实际上可能会从缓存中返回一些或大多数子报告。

答案 1 :(得分:1)

我在同样的问题上挣扎。但是有一种方法可以使用“缓存的共享数据集”来实现合理的性能。基本上,子报表将使用更大的数据集,包括所有子报表的所有行。通过使用“数据集过滤器”,每个子报表都可以正确过滤掉行。 但这仅适用于2008版本。

答案 2 :(得分:0)

如果参数 是您需要的最终数据,那么只需使用它们并在子报表中创建一个虚拟数据集 - 您可以将'SELECT 1 AS DUMMY'作为sql(这是假设子报表具有彼此不同的布局)

或许您可以使用函数或表函数重新考虑'master'数据集?

它仍会对sql服务器征税,但至少它会在一次点击中进行,并且RS盒子上的消耗将会更少。