2016-05-16 106 views
1

我有一個通過傳遞多值參數從存儲過程創建的數據集。我現在需要的是檢查參數中的所有值是否返回到結果集的特定列中,如果不是,則在報告中顯示這些值。例如,如果我將值'a','b','c'和'd'傳遞給我的參數,並且如果我的數據集列只包含'a'和'd',則我需要在報告上顯示'b'和'c'的方法。將多值參數的值與SSRS中的數據集列進行比較

感謝, PRATIK

+0

什麼數據類型是你列?它可以用自定義代碼完成。 –

+0

它是一個varchar。即使我想到自定義代碼,我陷入困境的地方正在遍歷我的專欄的所有獨特的價值,我並不想把那部分弄清楚。 – PratikGandhi

回答

1

首先,你需要的是爲您提供的參數值的查詢。該查詢可能是這個樣子:

select 'a' as ParamValue 
union all 
select 'b' as ParamValue 
union all 
select 'c' as ParamValue 
union all 
select 'd' as ParamValue 

你設置參數,通過這個查詢填充值: enter image description here

現在添加一個表,可以列出您的參數值。

enter image description here

接下來,您可以檢查是否使用Lookup功能像這樣在你的主數據集中存在的每個值:

=IIf(IsNothing(Lookup(Fields!PARAMVALUE.Value,Fields!COLVALUE.Value,Fields!COLVALUE.Value, "MainDataSet")), True, False) 

您可以使用它作爲一個過濾器,只顯示參數值,其中此函數不返回值:

enter image description here

+0

對不起,但我沒有讓你在那裏,當你說我需要一個查詢爲我的參數提供值時,這個參數將會在運行時從最終用戶處獲得數值 – PratikGandhi

+0

@PratikGandhi查看我的編輯 – StevenWhite

+0

我沒有預定義的可以提供給參數的值列表,我的意思是它可以是我的數據集列中的所有內容以及更多。所以在這樣的情況下,我不確定如何構建從我的參數獲取值的數據集的查詢。 – PratikGandhi

0

你可以改變存儲過程(或爲此報告創建一個基於舊的過程)?如果是這樣,那麼你可以從INNER JOIN更改爲OUTER JOIN並獲得該結果。例如,如果你的存儲過程中表現出太多的客戶是如何上個月結算,看起來像:

SELECT ClientName, SUM(BillAmount) AS TotalBilled 
FROM Clients 
INNER JOIN Bills ON Clients.ClientId = Bills.ClientId AND Bills.BillDate >= DateAdd(m, -1, GetDate()) 
WHERE ClientId IN @ClientIds 
GROUP BY ClientName 
ORDER BY ClientName 

那麼這將不排除任何付費客戶。如果您更改爲OUTER JOIN,像這樣:

SELECT ClientName, SUM(BillAmount) AS TotalBilled 
FROM Clients 
LEFT OUTER JOIN Bills ON Clients.ClientId = Bills.ClientId AND Bills.BillDate >= DateAdd(m, -1, GetDate()) 
WHERE ClientId IN @ClientIds 
GROUP BY ClientName 
ORDER BY ClientName 

再沒有賬單的客戶仍然會用Null量量顯示計費

+0

我afrad改變存儲過程是不可能的/ – PratikGandhi

相關問題