2014-12-19 123 views
1

我有大约100个链接报告以每周和每月的方式运行。我已经组建了一个c#控制台,该控制台可以从数据库表中动态创建特定时期的报表服务器文件夹,并从数据库表创建链接的SSRS报表。这些报告运行良好,但是每个报告在foreach循环中一次运行一次,如果您在一夜之间运行它们,那么这些报告是正确的,但有时这些报告会失败(无论出于何种原因),并且失败的报告将在数据库中标记为这样。我如何在一个线程上运行(例如)10个报表并同时运行每个线程 - 同时运行10个线程,因此运行所有报表的时间应该快得多。在周一重新运行任何失败的报告需要很长时间。这甚至有可能吗?如何在多个线程上运行多个SSRS报告

在我的C#控制台我使用ReportingService2010创建我的链接报表:

ReportingService2010.CreateLinkedItem(linkedReport, folder, existingReportPath, props); 

ReportingService2010.SetExecutionOptions(reportPath, "Snapshot", new NoSchedule()); 

ReportingService2010.SetItemHistoryOptions(reportPath, true, true, new NoSchedule()); 

ReportingService2010.UpdateItemExecutionSnapshot(reportPath); 

任何帮助将非常感激。 非常感谢

+0

您意识到SSRS具有可以计划报表运行的功能吗?似乎没有这样运行它们的好理由。 – 2014-12-19 11:01:03

+0

您可以动态创建报表服务器文件夹并通过计划创建链接报表吗?对于每周/每月,我们需要创建一个新的处理周期的文件夹结构,以便我们的用户可以查看任何给定时间的历史数据。可以通过快照实现报告历史记录 – user1221584 2014-12-19 11:11:27

+0

。也许可能是一个分组或快照的任何自定义列表。无论如何,只需依靠快照就可以大大提高整个过程:如果运行快照,您必须完成的任务是为每个报告“简单”下载最新快照,以将其存储在适当的文件夹中。 – Paolo 2014-12-19 11:38:59

回答

0

直接的解决方案是:创建多个共享所有报告生成的C#控制台客户端(就像多个客户端同时访问可用报告一样)。通过这种方式,您肯定知道报告生成是批量执行的。就是这样,因为您不能强制SSRS服务器同时处理特定数量的报告。无论您如何请求报告生成,它都会处理其工作量。

尽管如此,我相信这是一种错误的方法。

您必须考虑到SSRS将同时处理尽可能多的报告,并且即使这些报告被同时请求和处理,SQL Server引擎也会按照它的想法处理(再次)工作负载它应该这样做。所有这一切意味着同时执行所有报告(或批量的N份报告)并不能保证您的总体时间会更短。另一件需要考虑的事情是,呈现报表占用了大量执行时间(有时比执行所有sql查询要多得多),并且这会大量使用CPU。

另一方面,正确的方法是创建一个包含所有历史数据(这将纯粹是数据库引擎进程)的数据仓库,而报告(应该使用日期参数)只是一种方法访问已存储在数据仓库中的数据。

无论如何,我明白创建一个DW是一个大项目,你正在寻找一个更简单的解决方案。为此,您需要确定瓶颈(sql引擎,ssrs渲染......)的位置,并尝试平衡或增加资源(如果可能)以释放瓶颈。

可能不是您需要的答案,但可以为您节省一些时间,试图开发一种解决方案,而且在整个处理时间内几乎没有影响。