2010-06-17 45 views
8

我有一個包含幾個子報告的SSRS報告。用戶可以使用幾個布爾參數來選擇/取消選擇他們想要產生哪些子報告。如果子報表被取消選擇,則不通過設置Visibility屬性進行渲染。但是,與取消選擇的子報表關聯的DataSet仍然執行,導致執行時間花費比預期更長的時間。SSRS有條件地運行SQL/DataSet

有什麼辦法可以告訴子報表上的數據集或Tablix不能根據參數選擇執行嗎?

回答

8

包含在where子句中的AND :ParameterName = 'Y'條件 - 如果你的參數不是'Y',查詢仍然會火,但它會立即返回0的記錄。

+0

是的,對於簡單的查詢,這也應該工作得很好。 – 2010-06-17 16:54:43

+0

很酷的交易...我會給你一個鏡頭,讓你知道它是怎麼回事。 Thx – MikeTWebb 2010-06-17 17:05:25

+0

嗨馬克...我已經試過這種方法,它的工作原理就是當參數<>'Y'時返回零行。但是,執行時間大致相同。你是否認爲查詢仍然被髮送到服務器? – MikeTWebb 2010-06-17 18:05:15

3

是的。只需檢查每個數據集中的參數,並使用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> 
+0

OK很酷... 在哪裏你把條件代碼的數據集。我在查詢文本中嘗試過,它不喜歡那樣。我也查看了DataSet的過濾器屬性。那是它應該去的地方? – MikeTWebb 2010-06-17 16:50:52

+0

錯誤是什麼? 現在數據集的查詢文本中有什麼? – 2010-06-17 16:56:14

+0

錯誤ID「ORA-00900:無效的SQL語句」if @Parameter ='true'select * FROM

where running_total_pct <= 100 order by running_total_pct – MikeTWebb2010-06-17 17:03:16

1

這工作,當我嘗試在Oracle

select 
case when :ShowThisData = 0 
     then (SELECT 'Y' 
        from dual) 
    ELSE (select 'N' 
       from dual) 
end test1 
from dual 

允許您使用多條語句在1個查詢

+0

如果你想要多個列,你將如何應用於你的查詢?這在mssql中很簡單,我是Oracle的新手。提前致謝。 – RoganRicheart 2016-03-22 17:20:17