2015-10-20 31 views
1

我有一個具有多值參數的報告。它有可用的值(1,2,3,4,5和空白)。空白值不是NULL,它只是一個空單元格。當使用(全選)時SSRS記錄不會顯示,但在選擇特定值時是顯示

出於測試目的,應該只有一條記錄顯示出來。該記錄在我用於存儲過程中篩選的單元格中有一個空白值。

在參數下拉列表中,我看到所有選項。如果我選擇(全選)選項,我不會得到我想要的記錄。但是,如果我選擇空白值,我就會得到我想要的記錄。我手動將記錄更新爲「2」。我選擇(全選)並獲得記錄。我只選擇「2」值並獲得記錄。如果我再次刪除該值以使值爲空白,那麼只有在下拉列表中選擇「空白」選項時纔會獲得記錄。

我製作一個文本框來輸出參數的值,當它被自己或其他值選擇時,它顯示爲空白。

我在存儲過程或報告中缺少什麼?提前致謝。

回答

1

當您有一個多選參數時,SSRS應發送逗號分隔的值列表到您的存儲過程。你有責任將它們分解成你可以加入的東西。

在報告本身中,您沒有獲得用於顯示的很好包裝的字符串中的值列表。我不得不使用代碼來迭代參數中的值。

我測試了SSRS在空白可用值時正在執行的操作。我創建了一個測試報告有六個可用選項,然後一個存儲過程來強制選定的值輸出:

CREATE PROCEDURE dbo.Test_RPT 
(
@TestMultiSelect varchar(1000) 
) 
AS 
SELECT @TestMultiSelect RVAL 

在報告中,我只是認爲這顯示領域RVAL一個文本框。

如果我在開始時輸入空白選項,則輸出爲1,2,3,4,5。如果空白選項位於任何其他位置,則包括:1,2,3,,4,5,1,2,3,4,5,

+0

我有一個做了這樣的功能。這就是我能夠使用其他值的方式。 – Kajankow42

+0

這是SQL中的函數嗎?或者,您是否在談論您添加到報告中的功能? –

+0

SQL中的自定義函數。我之前在許多報告中使用過它,以協助處理多個值參數。 – Kajankow42

0

在需要時通過多個值IN子句SQL存儲過程從SSRS報表數據集的情況下,在存儲過程中需要細微的變化:

看過樣品凡在SP條款

... 
AND Courses.Type_Code IN (@Type_Code) 

添加SplitString()函數以基於分隔符分割傳遞的參數。

的SplitString的身體()看起來像:

CREATE FUNCTION [dbo].[SplitString] 
(
    @pString VARCHAR(8000), 
    @pDelimiter CHAR(1) 
) 
RETURNS @Values TABLE (Value VARCHAR(50)) 
AS 
BEGIN 

     DECLARE @xml as XML; 

     SET @xml = cast(('<X>'+replace(@pString, @pDelimiter, '</X><X>')+'</X>') as xml); 

     INSERT @Values 
     SELECT N.value('.', 'varchar(50)') as value 
     FROM @xml.nodes('X') as T(N); 

     RETURN 
END; 

最後的IN子句將看起來像:

... 
AND Courses.Type_Code IN (SELECT * FROM dbo.SplitString(@type_code,',')) 
相關問題