我有一個包含幾個子報告的SSRS報告。用戶可以使用幾個布爾參數來選擇/取消選擇他們想要產生哪些子報告。如果子報表被取消選擇,則不通過設置Visibility屬性進行渲染。但是,與取消選擇的子報表關聯的DataSet仍然執行,導致執行時間花費比預期更長的時間。SSRS有條件地運行SQL/DataSet
有什麼辦法可以告訴子報表上的數據集或Tablix不能根據參數選擇執行嗎?
我有一個包含幾個子報告的SSRS報告。用戶可以使用幾個布爾參數來選擇/取消選擇他們想要產生哪些子報告。如果子報表被取消選擇,則不通過設置Visibility屬性進行渲染。但是,與取消選擇的子報表關聯的DataSet仍然執行,導致執行時間花費比預期更長的時間。SSRS有條件地運行SQL/DataSet
有什麼辦法可以告訴子報表上的數據集或Tablix不能根據參數選擇執行嗎?
包含在where子句中的AND :ParameterName = 'Y'
條件 - 如果你的參數不是'Y'
,查詢仍然會火,但它會立即返回0的記錄。
是的。只需檢查每個數據集中的參數,並使用IF/ELSE結構來返回實際數據或具有相同形狀的虛擬數據以防止出現錯誤。假設你的參數命名爲@ShowThisData那麼你可以這樣做:
IF @ShowThisData = 0
SELECT '' FIELD1, '' FIELD2, <etc... to create a dataset that matches the normal output.>
ELSE
<whatever you normally do to get the data>
OK很酷... 在哪裏你把條件代碼的數據集。我在查詢文本中嘗試過,它不喜歡那樣。我也查看了DataSet的過濾器屬性。那是它應該去的地方? – MikeTWebb 2010-06-17 16:50:52
錯誤是什麼? 現在數據集的查詢文本中有什麼? – 2010-06-17 16:56:14
錯誤ID「ORA-00900:無效的SQL語句」if @Parameter ='true'select * FROM
是的,對於簡單的查詢,這也應該工作得很好。 – 2010-06-17 16:54:43
很酷的交易...我會給你一個鏡頭,讓你知道它是怎麼回事。 Thx – MikeTWebb 2010-06-17 17:05:25
嗨馬克...我已經試過這種方法,它的工作原理就是當參數<>'Y'時返回零行。但是,執行時間大致相同。你是否認爲查詢仍然被髮送到服務器? – MikeTWebb 2010-06-17 18:05:15