2017-02-09 53 views
0

我需要根據參數值過濾我的結果。如果說"Open"然後DueDate列應該是= NULL,如果說'Closed'DueDate = NOT NULL,如果說"Both"那麼它應該抓住所有DueDate小號如何在SSRS中編寫表達式來過濾數據

我已創建查詢參數「狀態」這給了我3個可能的值:

enter image description here

接下來,我創建的報告參數"Status"Allow Multiple Values

enter image description here

現在我去我的主查詢並轉到過濾器:

enter image description here

在這裏,我不能明白,我怎麼能寫一個表達式說:

如果報告「狀態」值=如果報告「狀態」值=「關閉」,則DueDate IS NOT NULL, 並且如果報告「狀態」值=「兩者」,則向我顯示所有DueDate(null和不爲空)

另一件事是我已經有case語句在我的查詢:

ALTER Procedure 
AS 
@ShowOpen bit = 0, 
@ShowClosed bit = 0 
SELECT 
FROM 
WHERE 
       AND 
         (
         (CASE WHEN (@ShowOpen = 1) THEN 
           CASE WHEN (tblNoteRecipients.CompletedDate IS NULL and tblNoteRecipients.IsDiary = 1) or tblNoteRecipients.UserGUID is null THEN 1 ELSE 0 END 
          -- CASE WHEN (tblNoteRecipients.CompletedDate IS NULL) THEN 1 ELSE 0 END 
         ELSE 
           1 
         END = 1) 
        AND 
         (CASE WHEN (@ShowClosed = 1) THEN 
           CASE WHEN (tblNoteRecipients.CompletedDate IS NULL) THEN 0 ELSE 1 END 
         ELSE 
           1 
         END = 1) 
        OR ((@ShowOpen = 1) AND (@ShowClosed = 1)) 
         ) 

是在SSRS任何出路的它,我可以創建參數接受打開值,關閉,兩個?

新增test1的

enter image description here

回答

1

在Tablix中添加過濾器這樣的:

enter image description here

Expression使用:

=IIF(
(Array.IndexOf(Parameters!Status.Value,"Open")>-1 and 
Isnothing(Fields!DueDate.Value)) or 
(Array.IndexOf(Parameters!Status.Value,"Closed")>-1 and not 
Isnothing(Fields!DueDate.Value)) or 
(Array.IndexOf(Parameters!Status.Value,"Both")>-1), 
"Include","Exclude") 

對於Value我們e:

="Include" 

讓我知道這是否有幫助。

+0

不幸的是它說「無法評估MyDataSet的過濾值」。 我修改了我的帖子,並添加了代碼,這些代碼已經存儲在我的存儲過程中(我不是它的作者),但是我可以在SSRS報告中使用該案例聲明嗎?爲了不布爾過濾器,但「打開」,「關閉」和「兩個」? – Oleg

+0

@ Oleg,它對我來說工作得很好。你確定你在過濾器中使用完全相同的表達式和'='來設置'Operator'。 –

+0

我添加了一個剪輯。 – Oleg