パラメータを使用したレポート データの制御

レポート パラメータは通常、データ ソースから取得するレポート データのフィルタ処理に使用します。データ ソースでデータをフィルタ処理すると、レポートの処理と表示のパフォーマンスを向上させることができます。ソースでデータをフィルタ処理できない場合は、パラメータを使用して、取得後のレポート データをフィルタ処理することができます。また、レポート パラメータに基づいて、レポート内のデータの並べ替えやグループ化を行うこともできます。

データ ソースでのデータのフィルタ処理

データ ソースでデータをフィルタ処理するには、データセット クエリでクエリ パラメータを使用します。クエリ パラメータごとに、対応するレポート パラメータが Reporting Services で作成されます。ユーザーがレポート パラメータの値を選択すると、選択した値がクエリに渡されます。クエリがデータ ソースに対して実行されると、ユーザーが指定した値のみがレポートに取得されます。ユーザー プロンプトや既定値などのプロパティは、レポート パラメータに適用されます。

クエリ パラメータ

クエリ パラメータを定義すると、レポート パラメータが自動的に生成されます。レポート ビルダでは、Filter 句でプロンプトを設定すると、レポート パラメータが自動的に生成されます。

データセットを定義する場合は、MicrosoftSQL Server など、データ ソースの具体的な種類を指定します。レポート デザイナにより、指定した種類のデータ ソースを処理するように設計されたクエリ デザイナが起動されます。各データセット用にクエリを定義する場合、クエリ デザイナにより、クエリ コマンド テキスト内の変数が識別され、個々に応じたクエリ パラメータが作成されます。データ ソースとデータ プロバイダの組み合わせによっては、変数を使用するクエリがサポートされないことがあります。データ ソースで要求されるクエリ構文の詳細については、「特定のデータ ソースでのクエリ パラメータの使用 (Reporting Services)」を参照してください。

SQL Server データ ソースのクエリでは、通常、Transact-SQL ステートメントの WHERE 句に変数を含めて、クエリ実行時に返されるデータの範囲を制限します。同様に、Analysis Services データ ソースのクエリでは、通常、FILTER 句で使用する MDX 変数を含めます。またクエリには、入力情報としてストアド プロシージャやユーザー定義関数へ渡される変数を含めることもできます。

データセットのクエリを変更するたびに、クエリは再処理されます。変数を削除したり変数名を変更したりしてクエリを修正すると、クエリ パラメータにこれらの変更が反映されます。

[データセットのプロパティ] ダイアログ ボックスの [パラメータ] ページで、追加のデータセット パラメータを作成できます。作成したパラメータは、クエリが変更されても変更されません。

各クエリ パラメータの既定値は、対応するレポート パラメータとして評価される式に設定されます。既定値を変更するには、[データセットのプロパティ] ダイアログ ボックスの [パラメータ] ページを使用します。たとえば、SQL Server データ ソースでは、クエリ パラメータが @MyParameter の場合、レポート パラメータは MyParameter となり、@MyParameter の値には式 [@MyParameter] が設定されます。詳細については、「[パラメータ] ([データセットのプロパティ] ダイアログ ボックス)」を参照してください。クエリ パラメータを手動で編集し、その既定値を設定することができます。詳細については、「クエリ パラメータをレポート パラメータに関連付ける方法」を参照してください。

自動的に作成されたレポート パラメータでは、次の既定値が使用されます。

  • 単一の値

  • Text データ型

  • パラメータの名前に設定された表示名

  • 既定値なし

  • 使用可能な値なし

クエリ パラメータが表すデータの型に基づいて、これらのプロパティの変更が必要になる場合があります。詳細については、「レポート パラメータの作成とレポート パラメータ プロパティの設定」を参照してください。

注意注意

クエリ パラメータの名前を削除または変更しても、対応するレポート パラメータが自動的に削除されたり変更されたりすることはありません。クエリ パラメータを削除した場合に、対応するレポート パラメータが不要であれば、レポート パラメータを手動で削除する必要があります。クエリ パラメータの名前を変更すると、クエリを保存する際に、変更したパラメータ名に対応する新しいレポート パラメータが作成されます。新しいクエリ パラメータ名に一致するようにレポート パラメータ名を変更し、データセット パラメータのプロパティを更新してクエリ パラメータをレポート パラメータにリンクすることもできます。

依存型パラメータ (カスケード型) パラメータ

複数のクエリ パラメータを使用するクエリを作成する場合、一連のカスケード型パラメータを作成できます。カスケード型パラメータを使用すると、大量のパラメータ値をフィルタ処理し、扱える数まで値を絞り込むことができます。たとえば、クエリに @Category、@Subcategory、および @Product パラメータが含まれており、サブカテゴリの一覧は @Category に依存し、製品の一覧は @Subcategory に依存しているとします。ユーザーが Category レポート パラメータの値を選択すると、Subcategory の値は、選択したカテゴリに対して有効な値に制限されます。ユーザーが Subcategory の値を選択した後、Product の選択肢は、カテゴリとサブカテゴリの値で既にフィルタ選択されています。この方法を使用すると、パラメータの有効な選択肢を、適切な数の値まで減らすことができます。

カスケード型パラメータをデザインするには、次のアイテムをレポートに含める必要があります。

  • 関連する複数のクエリ パラメータを含む、メイン データセット クエリ。

  • それぞれがクエリ パラメータにバインドされているレポート パラメータの順序付けされた一覧。通常、このようなパラメータはメイン クエリから自動的に作成されます。各従属パラメータは、そのパラメータが依存するパラメータの後に指定する必要があります。パラメータの順序は、[レポート データ] ペインのコレクション内でパラメータを上下に移動すると変更できます。詳細については、「レポート パラメータの順序を変更する方法 (Reporting Services)」を参照してください。

  • 各レポート パラメータの、使用可能な値を提供する独立したデータセット。各クエリ パラメータには大文字と小文字の組み合わせを揃えた同じ綴りを使用して、クエリ パラメータとレポート パラメータが正しくリンクされるようにすることが重要です。各レポート パラメータで使用できる値の各セット用のクエリからは、メイン クエリのコンテキストに適した値のみが返される必要があります。

上記の例では、Product レポート パラメータは Subcategory に依存し、Subcategory は Category に依存しています。これらは Category、Subcategory、および Product の順に並ぶ必要があります。Category で使用できる値を提供するデータセット用のクエリでは、メイン クエリで有効なすべてのカテゴリを示す必要があります。カテゴリの選択後に Subcategory で使用できる値を提供するクエリでは、指定した Category に加え、メイン クエリ内のすべての制約に対して有効な値を提供する必要があります。

詳細については、「カスケード型パラメータをレポートに追加する方法 (Reporting Services)」を参照してください。

クエリ実行後のレポート データのフィルタ処理

レポート パラメータを作成し、作成したパラメータをフィルタ式で使用して、レポート データセット、データ領域、または Tablix グループのデータをフィルタ処理することもできます。詳細については、「レポートでのデータのフィルタ処理」および「フィルタを追加する方法 (Reporting Services)」を参照してください。

レポート パラメータは、レポートを作成するときにレポート定義の一部として指定しますが、レポートのパブリッシュ後に単独で管理することができます。レポート定義のパブリッシュ後は、レポート マネージャを使用してパラメータ プロパティを変更できます。詳細については、「パブリッシュされたレポートのプロパティの設定」を参照してください。

急速に変化するパラメータの有効値の操作

急速に変化する値を有効値として指定した場合、レポートの実行前に値が古くなってしまう可能性があります。このため、値を送信してレポートを実行する時点で既に無効となっている一覧から、ユーザーが値を選択しなければならない可能性があります。これを防ぐには、値の選択とレポートの実行で通常必要となる時間内に変化しない有効値の一覧を、データセットとして返すようなクエリを記述します。

また、急速に変化する非クエリ型の値も使用しないようにします。たとえば、使用できる値として現在の日付を返す場合は、DateTime.Now プロパティではなく、DateTime.Today プロパティを使用する式を記述します。これにより、急速に変化する時間単位の値が返されないようになります。また、値を 1 回計算したらレポートの処理中はその計算結果を変更しないように、レポート変数またはグループ変数を使用することもできます。詳細については、「式におけるレポート変数コレクションとグループ変数コレクションの参照の使用 (Reporting Services)」を参照してください。