もし私の理解がまちがっていたら申し訳ないですが
パラメータによって値と項目指定をしてレポートを絞り込んでいくことを
意図していると読み取りました。
レポートビルダーではINSERT文もT-SQL構文も利用は可能ですので
- 検索条件追加の度に、レポートの呼び出しをするのを許容する
- 検索条件はすべてANDで結合する
という条件なら、以下のように、検索条件をテーブルに保存するやり方があるかと考えます。
SSRS(rdlファイル) のパラメータは
@Parameter1(検索パラメータ1)
@Parameter2(条件指定パラメータ1)
@SessionString (ブラウザなどから渡す一意の文字列)
@clearParams(条件をすべて消すかどうか決める 1 なら削除し、何もしない)
SQL
1CREATE TABLE tmp_SearchParameter
2(
3 SessionString nvarchar(100) NULL, -- 作業するユーザーを区別する何らかの一意な文字列
4 Parameter1 nvarchar(100) NULL, -- Value
5 Parameter2 nvarchar(100) NULL -- ColumnName
6)
7
を用意しておきます。
レポートの抽出クエリ(データセットの中身)を以下のようにします。
SQL
1------ ここから
2IF @clearParams = 1
3BEGIN
4 DELETE
5 FROM tmp_SearchParameter
6 WHERE SessionString = @SessionString
7 AND SessionString IS NOT NULL
8END
9ELSE
10BEGIN
11INSERT INTO tmp_SearchParameter
12SELECT
13 @SessionString, @Parameter1, @Parameter2
14
15SELECT
16*
17FROM
18 抽出するテーブル
19WHERE
20 (検索項目1 = (SELECT TOP 1 Parameter1 FROM tmp_SearchParameter WHERE Parameter2 = '検索項目1' AND SessionString = @SessionString)
21 OR (SELECT COUNT(Parameter1) FROM tmp_SearchParameter WHERE Parameter2 = '検索項目1' AND SessionString = @SessionString) = 0)
22AND (検索項目2 = (SELECT TOP 1 Parameter1 FROM tmp_SearchParameter WHERE Parameter2 = '検索項目2' AND SessionString = @SessionString)
23 OR (SELECT COUNT(Parameter1) FROM tmp_SearchParameter WHERE Parameter2 = '検索項目2' AND SessionString = @SessionString) = 0)
24AND (検索項目3 = (SELECT TOP 1 Parameter1 FROM tmp_SearchParameter WHERE Parameter2 = '検索項目3' AND SessionString = @SessionString)
25 OR (SELECT COUNT(Parameter1) FROM tmp_SearchParameter WHERE Parameter2 = '検索項目3' AND SessionString = @SessionString) = 0)
26AND (検索項目4 = (SELECT TOP 1 Parameter1 FROM tmp_SearchParameter WHERE Parameter2 = '検索項目4' AND SessionString = @SessionString)
27 OR (SELECT COUNT(Parameter1) FROM tmp_SearchParameter WHERE Parameter2 = '検索項目4' AND SessionString = @SessionString) = 0)
28END
29------ ここまで
呼び出し1回目
@clearParams = 0
呼び出し2回目 項目1の指定
@SessionString = 'SESSION1'
@Parameter1 = '値1'
@Parameter2 = '検索項目1'
呼び出し3回目 項目2の指定
@clearParams = 0
@SessionString = 'SESSION1'
@Parameter1 = '値2'
@Parameter2 = '検索項目2'
呼び出し4回目 項目3の指定
@clearParams = 0
@SessionString = 'SESSION1'
@Parameter1 = '値3'
@Parameter2 = '検索項目3'
このように渡します。
項目4つめも同様にすると、すべての条件が適用されます。
ここまでだと、1~3で抽出されたものになります。
もちろんこんなことをしなくても、目的とするデータそのものを別の作業テーブルとして作り
レポートパラメータ経由で絞り込んでいっても良いかと思います。
その際には、Webブラウザなどから作業中のユーザーを区別する文字列項目を作業テーブルに追加し、
それを条件として加えて表示・項目指定の処理をする必要があります。