2014-04-29 26 views
0

我想知道是否有減少SSRS報告產生的數據庫負載的可能性。 我有一個由多個子報告組成的SSRS報告。他們每個人都至少有一個數據庫查詢。如何改善由SSRS報告產生的數據庫負載

  1. 由於大多數子報表都有一種充滿動態數據的模板頭,所以它們中的很多都查詢相同的數據。
  2. 根據查詢是否返回任何數據顯示了一些子報告。所以一旦數據被查詢以決定是否顯示報告。然後報告本身查詢相同的數據,以顯示它在一張表

一般來說,我可以告訴我需要一種機制,將查詢的DB數據從父報告傳遞到子報告。父報告將查詢一些數據,它將遍歷數據集,並且對於每個數據集,它將顯示傳遞當前數據集的子報告作爲參數。

我找不到傳遞數據集(數據行)的機制。這就是爲什麼我通過傳遞一種數據集ID來顯示子報告。子報告本身再次查詢相同的數據,按照傳遞的數據集ID進行過濾,並只顯示相關的數據集。這會在數據庫上造成巨大的負擔。

預先感謝您!

+0

您需要分析特定的查詢並進行相應的優化。如果總共有7個查詢正在運行,請分析所有這些查詢,找到導致「加載數據庫」的問題並對其進行修復。如果您擔心主/類型查詢,則需要將報表轉換爲僅運行一個查詢,但這可能不可行(或更快)。請注意,如果您反覆運行相同的查詢(即使使用不同的參數),無論如何,您都可以通過緩存等獲得一些效率。 –

回答

1

你描述的設計是相當標準的,我不希望它會導致「數據庫上的巨大負載」。我預計運行10個過濾的子報告的DB負載僅比運行覆蓋相同10個項目的一個報告多10-20%左右。

我會在「數據集ID」列中添加一個索引以使該過濾器更有效。

+0

謝謝Mike。 數據庫查詢相當高效,但問題是它們被執行多次(對於多個子報告)。數據庫由前端代碼同時使用,恐怕在生成報表的時候,前端的響應性會下降。 – llasarov

+0

因此,杯子實際上可能已經半滿了,您可能沒有任何問題,只是擔心:-)無論如何,爲了減少#2場景的影響,我會從父級報告中刪除這些數據集。在子報告中,如果數據集不返回任何行,我將隱藏所有表等。 –

0

根據您的子報表使用查找功能的複雜性可能是一個可接受的更快的解決方案。以前有關隱藏行或沒有數據的子報告的註釋也適用於此。