2014-12-19 118 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渲染......)的位置,並嘗試平衡或增加資源(如果可能)以釋放瓶頸。

可能不是您需要的答案,但可以爲您節省一些時間,試圖開發一種解決方案,而且在整個處理時間內幾乎沒有影響。