2012-07-12 173 views
0

我正在研究需要生成包含數據網格數據的報告(包括多個動態過濾器)的應用程序。我的篩選目前從SQL查詢中得到一個結果集,導致以下問題:我無法將篩選器發送到SSRS或Crystal報表的多個位置,因爲它不會讓我將字段綁定到動態生成的查詢。報告問題

這是我的問題:是否有任何方法可以在where語句中創建具有無限條件的報表,或者使用dynamic where子句創建存儲過程,以便我可以將它與CR或SSRS一起使用?如果沒有,是否有任何報告引擎可以讓我在where子句中連接該過濾器?

注意:我正在使用C#4.0以及SQL Server 2008 Express(安裝了SSRS)和Crystal Reports for Visual Studio 2010庫。

回答

0

後在Crystal Reports多一些挖,我發現用命令和參數就可以到WHERE語句的一部分連接成的查詢,這在一定程度解決了我的問題。這不是報告應該如何完成的,所以我會盡力找到一個更乾淨的方式來做到這一點。在一個存儲過程的情況下,SSRS不支持這個,你必須讓整個查詢成爲一個你執行的字符串,然後從該存儲過程結果中查詢,就好像它是一張表,坦白地說這不值得麻煩。

0

一個簡單的技巧,以增加它們被定義時,過濾器對您的WHERE子句中添加以下代碼:

where (@param is null or @param = field) 

所以,當@param未定義(空),則未應用濾鏡。你可以建立一個較長的where子句,如:

where (@param1 is null or @param1 = field1) 
    and (@param2 is null or @param2 = field2) 
    and (@param3 is null or @param3 = field3) 
    and (@param4 is null or @param4 = field4) 
    ... 
+0

這將不起作用,因爲沒有定義參數的數量。一個用戶只能在一個字段上過濾,而另一個用戶可以很好地使用5個以上的過濾器。我不認爲有一個for循環爲報表中的每個參數生成這個循環都很乾淨。 – 2012-07-16 15:10:06

+0

你的意思是「未定義參數的數量」?它必須在報告中定義,否則用戶將無法選擇要應用的過濾器。 – 2012-07-16 15:23:58

+0

這就是我的意思,用戶是定義過濾器的用戶,我需要使用用戶在那個時候擁有的過濾器過濾報告,例如來自過濾數據網格的wysiwyg報告。在Crystal Reports或SSRS中可以這樣做嗎? – 2012-07-16 18:38:03