3

私は、利用可能な値が単純なクエリから取得されるパラメータに値を追加する方法を探しています。 SSRSを今日始めたばかりです。私はそれが間違っていないことを願っています。レポートプロジェクト(汚い、私は知っている)から、以下の手順を実行SSRS - パラメータクエリに静的NULLを追加する

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 

は(私がVS2008ビジネスインテリジェンス開発Studioを使用しています)レポートプロジェクトでの2つのデータセットがあります。私は、すべての従業員の名前と@EMPLNAMEパラメータを移入することができるようにしたい

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

:社員IDと名前(名)を移入する(RAW_TIME_DATASET)、および同じビューから他のクエリ上記の手順から生成されたワンNAMESデータセットから、パラメータコンボボックスで値「All」を選択してNULLを渡すこともできます。 "All"は、UNIONを使用してクエリに渡すことができます。これはコンボボックスに表示されずに配置されますが、レポートにはNULLとして渡すことはできません。 Errr ...私はこれが理にかなってほしい。

+0

、レポートのコードでエラーを取得していますか? null文字列変換を試行している可能性があります。 – JeffO

答えて

5

あなたは正しいトラックにいます。

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

enter image description here

を、[全般]タブで、今、null値

を受け入れるようにパラメータをマークトリックはNAMESデータセットにあります。すべての名前とヌル値の行を選択する必要があります。

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

あなたは、レポートパラメータはNULLにすることはできませんと文句を言うだろうしていない場合:acomplishそれのいくつかの方法がありますが、最も簡単にはあなたのクエリにこのようなものを追加しています。

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

enter image description here

1

編集:この回答は、データセット内にselectがある場合にのみ有効ですが、selectがストアドプロシージャ内にない場合にのみ有効です。答えの下のコメントを参照してください。

@EMPLNAMEパラメータを編集する場合、「複数の値を許可する」(msdn sample)に設定することができます。あなたがこれを行う場合は、このようなあなたの他のクエリでWHERE句ビットを更新する必要があります。

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

私がすることができます(SSRSは、クエリを実行する前に、カンマ区切りのリストで(@EMPLNAME)ビットを置き換えると考えています従業員名は文字列なので、リンクされたMSDNの記事に警告が表示され、セキュリティ上の問題を防ぐために使用可能な値リストと組み合わせるだけです。

を編集してください:あなたが厳密に求めていることはありますが、@EMPLIDパラメータと0123を組み合わせるのは意味がありませんパラメータ? IDパラメーターを複数値にして、そのIDを値として使用し、NAMEをラベルとして使用することができます。これで、次のような主なデータセットクエリになります。

Where ([EMPL ID] IN (@EMPLID) OR @EMPLID IS NULL) 
-- AND  ([EMPL NAME] = @EMPLNAME OR @EMPLNAME IS NULL) -- not needed anymore 
+0

これは私の質問には答えませんが、問題に近づくより効率的な方法を提案しています! 最初は、選択した1人の従業員だけが働いています(複数の選択肢は何も返しません)。これは、SSRSが選択したリストをどのようにフォーマットし、それをプロシージャに渡すかによって発生していると考えています。私はジョイントトリックを手動で選択した値を区切るためにカンマを追加しようとしました: '= Join(パラメータ!EMPLNAME.Value、"、 ")' しかしそれはまだ幸せではありません。プロシージャの代わりにSSRS内のパラメータ化を処理しようとする可能性がありますか? "データソースをストアドプロシージャにすることはできません。" – Jaxaeon

+0

うれしい私は助けることができます。残りの問題が何であるかはわかりません。あなたはその「参加」をどこでしますか?パラメータのデフォルト値は? – Jeroen

+0

@Jaxaeon大井は決して気にしない、悪い。私は今なぜあなたが参加する必要があるか、SSRSデータセットがストアドプロシージャを呼び出すという事実が私に届かなかったということを理解しています。基本的に私の答えは、レポートではなくプロシージャで選択を行う場合にのみ機能します。 'join 'トリックはあなたのために行く方法です。解決策に達した場合は、回答として投稿(および受け入れ)することを忘れないでください。 – Jeroen

関連する問題