2009-02-06 14 views
0

雖然我明白這個問題是相當含糊的,因爲我沒有盡我所能給你所有的細節,我希望能有一些通用的改進,根據我的代碼或報告自己加快速度。我已經要求更多硬件,但已被拒絕。什麼是使Reporting Services更快的通用方法

public Stream GenerateReport(string reportName, string format) 
{ 
    if (reportName == null) 
     throw new ArgumentNullException("reportName"); 

    reportExecutionService.LoadReport(reportName, null); 

    string extension; 
    string encoding; 
    string mimeType; 
    ReportExecution2005.Warning[] warnings; 
    string[] streamIDs; 

    byte[] results = reportExecutionService.Render(format, null, out extension, 
     out encoding, out mimeType, out warnings, out streamIDs); 

    return new MemoryStream(results); 
} 

報告本身每個都需要6-10秒。我已經縮小了Reporting Services本身的瓶頸。我應該從哪裏開始尋找解決潛在的速度瓶頸問題。注意:一些代碼已被刪除以保護無辜者。

回答

3

雖然沒有直接關係,您發佈的代碼,這裏有幾個通用的增強寫入Reporting Services報表時,你應該總是考慮:

  1. 預加載的報告表,以便他們已經聚集任何將在報告中彙總的數據。例如,如果報表數據源彙總了數千行數據並要求將多個表連接在一起,那麼您應該創建一個預彙總表,將所有數據連接在一起,並已彙總報表所需的穀物數據。

  2. 如果要將參數傳遞到數據源中,則聚合的基礎表應該具有與將如何搜索表相對應的聚集索引。例如,如果報告僅顯示單個客戶的數據和給定交易日期範圍的數據,則應在客戶和交易日期對聚集索引進行訂購。

  3. 過濾數據應發生在數據源查詢中,而不是在報告本身中。這意味着,如果您參數化報告以便過濾數據,則應將參數傳遞給數據庫,以便返回一組較小的數據。不要返回大量數據,然後過濾數據。使用多值參數時很容易犯這個錯誤,因爲使用多值參數的開箱即用指令是在數據返回到Reporting Services之後過濾數據。

我希望你已經在做上面的事情,這不是一個相關的職位。 :)

+0

強調#3。這是最簡單的變化之一。 – 2009-02-06 21:06:14

0

如果您已根據您的客戶端代碼將其縮小到Reporting Services,我會審查檢索您的數據的查詢/ SP。在我的日子裏,我遇到了一些非常討厭的問題,看起來很無辜。

0

我只是做了一些非常討厭的報告!我不得不在多個包含每行數百萬行的表上加入陰暗標準。

結束創建一個控制檯應用程序,用於前一天每晚的收集。它的邏輯太過沉重,因此生成報告花費的時間太長。現在速度不再是問題了。

這取決於報告的類型。這三份報告只需要提供昨天的數字。但正如奧斯丁所說,查詢或任何通常是瓶頸。

要記住的另一件事是報告「過期」後一段時間(這是默認設置)。所以如果你還沒有使用這個報告一段時間,生成需要更長的時間。如果你在下一個更快的時候再次做到這一點。解決這個問題的方法是到Internet Explorer中的報告並單擊屬性,並查看執行和歷史記錄(可以調整它們以改善報告的呈現)請注意,如果數據很關鍵,您最終可能會收到舊數據。