2012-12-17 53 views
0

我有一個從SQL表中創建報表的SSRS報告:填充一個下拉列表參數與具體可用值

id type name 
1 fruit wilk 
2 fruit scot 
3 paper jon 
4 pen  brad 
5 tape lin 
6 water james 

該報告有兩組數據:一爲報告提要查詢,另一個將數據提供給參數。因此,在報告中,多值參數從dataset2中獲取其值。

-- dataset1:: 
select ID, TYPE, name from table1 where type in (@types) 

-- dataset2:: 
select TYPE from table1 

該報告是基於從下拉列表(這是一個多選列表)中選擇的類型生成的。

例如,如果我們選擇 「果」 的報告顯示:

威爾克,蘇格蘭人

如果我們選擇 「水」:

詹姆斯

現在的事情是,我需要爲所有的值創建一個名稱的「TAPE」,「筆」和「紙」,說這個名字「靜止」,使得下拉列表中應只顯示:

水果,文具,水

當我從thedropdown列表中選擇 「靜止」 的報告中應顯示:

喬,布拉德,LIN(所有3個具有某種形式的固定,即,紙,筆,膠帶)

當我選擇類型爲「固定」和「水」它應該顯示:

喬恩,布拉德,林,詹姆斯

回答

1

就從這裏臀部。

考慮在表中添加一個類別字段。因此,對於水果和水,你可以有一個名爲「食物」的類別,對於你的筆,紙和磁帶,這個類別將被稱爲「靜止」。

將另一個數據集添加到名爲「category」的報告中。

SELECT Category FROM table1 

添加另一個參數是你的新數據集的多重選擇叫@Category。

在你的主查詢添加:

...AND Category IN (@Category) 

編輯

記住這個建議在你的數據庫完全忽略正常化。我明白這不是你問題的意圖,而是你應該始終考慮的問題。如果是我,我甚至會添加一個分類表。然後在你稱之爲「table1」的情況下,我會添加一個指向類別表中ID的foriegn鍵。你甚至可以在你的類型欄中看到這個問題。注意水果如何多次使用。

+0

+1,這個問題聽起來非常像最好的答案是首先在數據庫中執行一些規範化工作,這使得SSRS問題非常容易解決。 – Jeroen

+0

完全同意。我永遠不知道是否有人正在進入一個數據庫的情況,或者奢侈地進行這些快速的修改,以便將項目設置在正確的軌道上。 –

0

我會爲此稱爲ItemItemType創建另一個表。

ItemType有兩個字段:ItemTypeId(自動遞增主鍵)和NameItemType將具有值喜歡:

ItemTypeId Name 
1    Food 
2    Stationery 

Item有三個字段:ItemId(自動遞增的主鍵),NameItemTypeId(從ItemType上表)。它看起來像這樣:

ItemId Name ItemTypeId 
1  Fruit 1 
2  Paper 2 
3  Pen 2 
4  Tape 2 
5  Water 1 

ItemId字段添加到table1並刪除type領域,所以它現在看起來像:

id ItemId name 
1 1  wilk 
2 1  scot 
3 2  jon 
4 3  brad 
5 4  lin 
6 5  james 

我們現在知道的項目類型從鏈接ItemType

創建兩個參數:@ItemTypes@Items作爲多值。

@ItemTypesItemType表填充:

SELECT ItemTypeId, Name FROM ItemType 

ItemTypeIdValueNameLabel

@ItemsItem表填充但過濾在@ItemTypes參數,如下所示:

SELECT ItemId, Name FROM Item WHERE (ItemTypeId IN @ItemTypes) 

ItemIdValueNameLabel

現在當您在第一個參數中選擇@ItemTypes時,第二個參數將僅顯示該類型的項目。

好的,回到您的查詢。您的主要查詢現在看起來像:

SELECT Item.Name AS ItemName, ItemType.Name AS ItemTypeName, table1.Name 
FROM table1 
INNER JOIN Item ON Item.ItemId = table1.ItemId 
INNER JOIN ItemType ON ItemType.ItemTypeId = Item.ItemTypeI 
WHERE (ItemType.ItemTypeId IN @ItemTypes) 
AND (Item.ItemId IN @Items) 

我認爲我們在這裏的工作已經完成。