2017-03-14 75 views
0

我從開發人員那裏繼承了一個報告,他將5個報告合併到一個SSRS報告中。看起來他只是複製並粘貼原始報告中的每個tablix。這樣做是爲了當用戶導出到Excel時,他們可以在單獨的選項卡上顯示每個報告。我從來沒有做過這樣的多SSRS報告,所以我現在剛剛分析這整個事情是如何工作的。我發現的一個主要問題是它運行速度非常慢,大概10分鐘,看起來是因爲它必須運行所有5個查詢。每個存儲過程都作爲數據集單獨列出。有誰知道更好的方法來創建多個SSRS報告到一個頁面上,或者至少如何使這個事情更快?將多個SSRS報告添加到一個報告中非常慢

回答

0

提高SSRS報告性能的第一步是確定瓶頸是什麼。對ReportServer數據庫中名爲ExecutionLog4的視圖運行查詢。對於每個最近執行的報告,該視圖都會爲您提供一個包含3個關鍵字段的記錄:TimeDataRetrieval,TimeProcessing和TimeRendering。

TimeDataRetrieval指示所有查詢運行並返回數據集所需的時間(以毫秒爲單位)。如果這個數字很高,那麼您需要調整查詢或消除其中的一些來提高性能。您可以運行分析器跟蹤來確定哪些過程運行緩慢。

請記住,子報表每次在報表中呈現時都觸發它們的數據集查詢。所以即使是一個子報表數據集中的一個小小的表現打嗝也會被執行次數放大。

TimeProcessing指示報表服務器花費多少時間來操作檢索到的數據。如果這個數字很高,您可能需要考慮在報表中執行多次運行的聚合計算,以便在SQL端運行。

TimeRendering表示服務器實際呈現報表需要多長時間。如果這個數字很高,請考慮避免或簡化一遍又一遍重複使用的視覺屬性上使用的表達式。根據我的經驗,這種情況不如其他兩種情況。

此外,這裏有一些提示,我拿起那有助於避免出現性能問題:

- 避免使用行可見表情,如果你期望返回大量行的。 - 隱藏對象不會阻止數據集的執行。如果您的數據集具有相似的結構,請考慮將它們組合並使用對象過濾器來限制不同部分顯示的內容。或者,如果您只打算根據數據或參數顯示多個選項中的一個,則可以在存儲過程中使用IF語句。 - 嘗試限制大型Tablix中的列分組數量。對於Tablix中的每個分組,您可以將可能返回的數據行數乘以這些分組。

有關SSRS性能的更多信息,請參閱 https://technet.microsoft.com/en-us/library/bb522806(v=sql.105).aspx 這是爲2008R2編寫的,但似乎大多數也適用於2012年。

給出所有這些鏡頭,然後在這裏回覆一個更具體的問題,如果你卡住了。

+0

不幸的是,我的工作權限有限,無法針對ExecutionLog4運行任何操作。我的第一步是重寫這些查詢中的每一個,看看這是否有幫助。 – jackstraw22

+0

這是一個恥辱。當組織要求某人改進某些事物並剝奪適當的工具來做這件事時,我總是動搖我的頭...... –

相關問題