web-dev-qa-db-ja.com

SSRSレポートで複数値の文字を渡す方法は?

1つのデータソースから供給される3つのデータセットを含むSSRSレポートがあります。メインデータセットは、他の2つのデータセットを利用した一連のパラメーターに基づいて一部のデータを集約するストアドプロシージャです。

このレポートを強化するメインのストアドプロシージャには、4つのパラメーターがあります。 1つはデータの種類のID、2つは開始日と終了日のID、3つ目はフラグパラメータです。フラグパラメーターは、VARCHAR値でもある複数のフラグ値を渡したい複数値パラメーターです。

@Flagパラメータのストアドプロシージャには、次の共通点があります。

WHERE [Flag] IN (@Flag)

次に、もちろん、SSRSレポートの@Flagパラメーターを設定して、ディメンションテーブルからそれらの@Flag値をプルしているクエリからも入力される「複数の値」を許可します。

私の問題

INT値を処理する場合、ほとんどの場合、同じ手法を使用すると機能します。ただし、文字値を処理していると失敗します。 1つのフラグを選択すると、レポートは魔法のように機能します。複数のフラグを選択すると、フラグがストアドプロシージャに正しく渡されず、結果が返されません。

ストアドプロシージャで複数値フラグを直接テストする場合:

WHERE [Flag] IN ('A', 'B', 'C')

ストアドプロシージャは正しく動作します。したがって、問題はストアドプロシージャではなく、SSRSが複数値の値を@Flagパラメータに渡す方法です。

試したソリューション

この@FlagパラメータのSSRSデータセットに次の調整を試みました。

=join(Parameters!<your param name>.Value,",")

そしてこれも:

=SPLIT(JOIN(Parameters!<your param name>.Value,","),",")

これらはすべて単一値で機能しますが、複数値では機能しません。

ここで何が欠けていますか?

8
Fastidious

解決策を見つけました。ストアドプロシージャの値をUDFで適切に分割しませんでした。

このストアドプロシージャで複数の値を正しく渡すには、使用しているデータセットパラメータに次のコードを追加する必要があります。

_=join(Parameters!<your param name>.Value,",")
_

これは基本的に複数の値を配列に結合し、それを_@Flag_パラメーターを介して渡します。次のステップでは、SQLをストアドプロシージャに追加して、値を正しく受け取ってダイジェストし、IN句で値を読み取ります。

GoogleはUDF文字列パーサーをオンラインで検索します。から選択する多くがあります。ミシェル・アフォードの_dba_parseString_udf_を使用しました http://sqlfool.com

UDFをインストールしたら、IN句を変更して、SSRSから次のように渡される新しい多値パラメーターを受け取ることができます。

_WHERE [Flag] IN (SELECT * FROM dba_parseString_udf(@Flag, ','))
_

したがって、SSRSは次の値を渡します。

_@Flag = 'A,B,C'
_

次に、私のUDFはその文字列を次のように正しく解析します。

_A
B
C
_

そして、_@Flag_パラメータにSELECT * FROM UDF()...を正しく入力します

7
Fastidious