3

単純なクエリから使用可能な値が取得されるパラメータに値を追加する方法を探しています。私は今日SSRSをいじり始めたばかりです、私はそれをすべて間違ってやっていないことを望みます。

レポートプロジェクトから次の手順を実行します(厄介です、私は知っています):

CREATE PROCEDURE RAW_TIME_VAR
        @EMPLID as varchar(6) = NULL
,       @EMPLNAME as varchar(80) = NULL
,       @CHARGENO as int = NULL
,       @TYPE as varchar(8) = NULL
,       @STARTDATE as date = NULL
,       @ENDDATE as date = NULL
AS
Select * from DBO.RAW_TIME
Where   ([EMPL ID] = @EMPLID OR @EMPLID IS NULL)
AND     ([EMPL NAME] = @EMPLNAME OR @EMPLNAME IS NULL)
AND     ([CHARGE NO] = @CHARGENO OR @CHARGENO IS NULL)
AND     ([CHARGE TYPE] = @TYPE OR @TYPE IS NULL)
AND     [CHARGE DATE] Between @STARTDATE AND @ENDDATE

レポートプロジェクトには2つのデータセットがあります(私はVS2008ビジネスインテリジェンス開発スタジオを使用しています)。1つは上記の手順(RAW_TIME_DATASET)から生成され、もう1つは同じビューからのクエリで従業員IDと名前(NAMES)を入力します。

SELECT DISTINCT [EMPL ID], [EMPL NAME]
FROM RAW_TIME
ORDER BY [EMPL ID]

パラメータコンボボックスで値「All」を選択@EMPLNAMEして渡すこともできると同時に、NAMESデータセットからのすべての従業員名をパラメータに入力できるようにしたい。NULL「すべて」は、を使用してクエリで渡すことができます。これによりUNION、ビューに表示されずにコンボボックスに配置されますが、レポートにとして渡すことはできませんNULL。エラー...これが理にかなっているといいのですが。

4

2 に答える 2

6

あなたは正しい方向に進んでいます。

report_dataタブを確認すると、パラメータフォルダが表示されます。それを展開すると、最初のクエリのすべてのパラメータが表示されます。EMPLNAMEパラメーターを右クリックし、パラメータープロパティを選択し、使用可能な値に移動して、次の構成を行います。

ここに画像の説明を入力してください

また、[全般]タブで、null値を受け入れるようにパラメーターをマークします

今、トリックはNAMESデータセットにあります。すべての名前に加えて、null値の行を選択する必要があります。それを達成する方法はいくつかありますが、最も簡単な方法は、クエリに次のようなものを追加することです。

union SELECT null as [EMPL ID], 'NULL' as [EMPL NAME]

そうしないと、レポートはパラメータをnullにすることはできないと文句を言います。

結果(簡単にするために2つのパラメーターのみを追加しました):

ここに画像の説明を入力してください

于 2012-05-01T08:31:20.727 に答える
1

編集: この回答は、選択がデータセット内にある場合にのみ機能し、選択がストアド プロシージャ内にある場合は機能しないことに注意してください。回答の下のコメントを参照してください。

パラメータを編集すると、 @EMPLNAME「複数の値を許可する」( msdn sample ) に設定できます。これを行う場合、他のクエリの where-clause-bit を次のように更新する必要があります。

AND     ([EMPL NAME] IN (@EMPLNAME) OR @EMPLNAME IS NULL)

SSRSは(@EMPLNAME)、クエリを実行する前にビットをコンマ区切りのリストに置き換えると思います(通常の(動的ではない)SQL afaikでは、この「IN @param」構文は使用できません。従業員名は文字列であるため、警告に注意してくださいリンクされた MSDN の記事を参照し、それを使用可能な値のリストとのみ組み合わせて、セキュリティの問題を防ぎます。

編集:上記は(うまくいけば)あなたが厳密に求めているものですが、@EMPLIDパラメーターをパラメーターと組み合わせる方が理にかなっていません@EMPLNAMEか?ID パラメータを複数値にして、ID を値として、NAME をラベルとして使用できます。これにより、次のメイン データセット クエリが作成されます。

Where   ([EMPL ID] IN (@EMPLID) OR @EMPLID IS NULL)
-- AND     ([EMPL NAME] = @EMPLNAME OR @EMPLNAME IS NULL) -- not needed anymore
于 2012-04-30T22:12:19.500 に答える