単独値パラメータと複数の値を持つパラメータの使用
パラメータには、単一の値または複数の値を指定できます。複数値パラメータは、複数の値に設定できます。複数の値を持つパラメータに使用できる値の一覧を定義すると、Reporting Services によってレポート ツール バーのドロップダウン リストに [すべて選択] オプションが自動的に配置されます。このオプションを使用すると、一覧内のすべての値を選択することもすべての値を選択解除することもできます。
デザイン画面上のテキスト ボックスには、単独値パラメータまたは複数の値を持つパラメータの両方が symbol @ で始まる簡単な式として表示されます。たとえば、Store というパラメータは [@Store] として表示されます。詳細については、「単純式と複合式について (Reporting Services)」を参照してください。
複数値プロパティをパラメータに設定するには、[レポート パラメータのプロパティ] ダイアログ ボックスの [複数の値を許可] チェック ボックスをオンにします。Boolean を除く任意のパラメータの型には、複数値を設定できます。
複数の値を持つパラメータの主要な目的は、Transact-SQL の WHERE 句や MDX の Filter 句などのクエリ制限句を使用して、単一の値と等しいかどうかではなく、一連の値に含まれているかどうかをテストできるようにすることです。複数の値を持つパラメータの作成方法の詳細については、「チュートリアル : レポートへのパラメータの追加」および「レポート パラメータの作成とレポート パラメータ プロパティの設定」を参照してください。
セキュリティに関する注意 |
---|
String 型のパラメータが含まれるレポートでは、使用可能な値の一覧 (有効な値の一覧とも呼ばれています) を必ず使用してください。また、レポートを実行するすべてのユーザーには、レポートでのデータ表示に必要な権限のみを与えてください。String 型のパラメータを定義した場合は、任意の値が許容されるテキスト ボックスが表示されます。使用可能な値の一覧を使用すると、入力できる値が制限されます。クエリ パラメータにレポート パラメータが関連付けられている場合に、使用可能な値の一覧を使用しなければ、レポート ユーザーはテキスト ボックスに SQL 構文を入力できるので、レポートとサーバーが SQL インジェクション攻撃を受ける危険性が生じます。さらに、ユーザーが新しい SQL ステートメントを実行するための十分な権限を持っている場合は、サーバーで予想外の結果が生じる可能性もあります。 クエリ パラメータと関連付けられていないレポート パラメータがあり、このパラメータ値がレポートに含まれていると、レポート ユーザーが式の構文または URL をパラメータ値に入力して、このレポートを Excel または HTML に変換することも可能になります。別のユーザーがこのレポートを表示して、表示されたパラメータ コンテンツをクリックすると、悪意のあるスクリプトまたはリンクが意図せず実行されてしまう可能性があります。 悪意のあるスクリプトが意図せず実行されるリスクを減らすには、信頼されたソースのレポートだけを開くようにしてください。レポートのセキュリティを確保する方法の詳細については、「レポートとリソースの保護」を参照してください。 |
複数の値を持つレポート パラメータのクエリの作成
作成する任意のレポート パラメータとして、複数の値を持つパラメータを定義できます。ただし、クエリを使用して複数のパラメータ値をデータ ソースに渡す場合は、次の要件が満たされている必要があります。
データ ソースは、SQL Server、Oracle、Analysis Services、SAP BI NetWeaver、または Hyperion Essbase である必要があります。
ストアド プロシージャをデータ ソースにすることはできません。Reporting Services では、複数の値を持つパラメータの配列をストアド プロシージャに渡すことはサポートされていません。
クエリでは、IN 句を使用してパラメータを指定する必要があります。
次の例は、Transact-SQL ステートメントの WHERE 句で IN キーワードを使用する方法を示しています。IN キーワードの詳細や、このクエリによって返される結果については、「IN (Transact-SQL)」を参照してください。
SELECT FirstName, LastName, e.Title
FROM HumanResources.Employee AS e
JOIN Person.Contact AS c
ON e.ContactID = c.ContactID
WHERE e.Title IN (@Title)
レポートでこのクエリをテストするには、上記のクエリを使用してデータセットを定義します。自動的に作成されたレポート パラメータである "Title" のプロパティを、次のようにして変更します。
[複数値] オプションを選択します。
[使用できる値] で [クエリなし] オプションを選択します。[値] 列に、「Design Engineer」、「Buyer」、「Marketing Assistant」と入力します ([ラベル] 列は空白のままにします)。
[既定値] に「Buyer」と入力します。
プレビューを実行します。Title について、さまざまな値の組み合わせを選択し、適切な結果が返されることを確認します。
注意 |
---|
パラメータを配列として処理できないデータ ソースに対するクエリは、レポート サーバーによって書き換えられます。目的の結果を得るためには、このクエリの書き換えが必要になります。クエリの書き換えが行われるのは、パラメータが複数の値を指定できるように定義されており、クエリで IN ステートメントを使用してパラメータが指定されている場合です。IN ステートメントを含まないクエリを作成すると、複数の値を持つパラメータをサポートするためにレポート サーバーが提供するロジックがバイパスされることに注意してください。 |
データセット、データ領域、およびグループのフィルタ式は、対応する [プロパティ] ダイアログ ボックスの [フィルタ] ページで定義されています。複数値パラメータを参照するフィルタ式が定義されている場合は、フィルタ式で IN 演算子を使用する必要があります。IN 以外の演算子をフィルタ式で使用すると、処理エラーが発生します。詳細については、「フィルタを追加する方法 (Reporting Services)」を参照してください。
複数の値を持つパラメータを参照する式の作成
式でパラメータを参照する場合は、組み込みの Parameters コレクションを使用します。式で複数値パラメータを使用する場合は、単一値の使用方法および値の配列全体の使用方法を理解しておく必要があります。次の表に、複数の値を許可するように設定されているパラメータのパラメータ プロパティの例と説明を示しています。
使用例 |
説明 |
---|---|
Parameters!<ParameterName>.Value |
パラメータの Variant データ型の値の配列です。 |
Parameters!<ParameterName>.Label |
パラメータのラベルである文字列の配列です。 |
Parameters!<ParameterName>.IsMultiValue |
パラメータの [複数の値の許可] チェック ボックスがオンになっているかどうかを示すブール値のプロパティです。 |
Parameters!<ParameterName>.Count |
配列に含まれる値の数です。 |
Parameters!<ParameterName>.Value(0) |
複数値配列内の最初の値です。 |
Parameters!<ParameterName>.Label(0) |
複数値配列内の最初のラベルです。 |
Parameters!<ParameterName>.Value(Parameters! <ParameterName>.Count-1) |
複数値配列内の最後の値です。 |
Parameters!<ParameterName>.Label(Parameters! <ParameterName>.Count-1) |
複数値配列内の最後のラベルです。 |
=Join(Parameters!<ParameterName>.Value,", ") |
String 型の複数の値を持つパラメータの配列内にあるすべての値を 1 つの文字列に連結する式です。 |
=Split("Value1, Value2, Value3",",") |
文字列を使用し、オブジェクトの配列を作成します。この配列を使用して、複数値パラメータが必要なサブレポートやドリルスルー レポートに渡すことができます。 |
SPLIT 関数と JOIN 関数を使用すると、すべての式で配列内の値を分離したり結合したりできます。STRING 関数と CINT 関数を使用すると、値を文字列または整数に変換できます。
単一値および複数値パラメータが含まれている式の詳細と例については、「式における Parameters コレクションの参照の使用 (Reporting Services)」を参照してください。