ActiveReportsでは、パラメータを使用することで、レポートの実行時に表示するデータのフィルタリングや、追加をすることができます。ユーザーにパラメータの入力を要求してユーザーが出力をコントロールできるようにするか、パラメータを事前に設定することができます。
クエリパラメータは、レポートパラメータのコレクション(事前に提供するか、ユーザーに入力させる値)、別のデータセット内のフィールド、または式から値を取得することができます。パラメータを作成するには、データソース別に固有の構文を指定する必要があります。
次の表は、パラメータ付きのクエリを指定する方法をデータソース別に示します。
データソースの種類 | パラメータの構文 | 例 |
---|---|---|
OleDB | (?) | SELECT * FROM Customer WHERE (CustomerID = ? AND AccountNumber = ?) |
ODBC | (?) | SELECT * FROM Customer WHERE (CustomerID = ? AND AccountNumber = ?) |
SQL Client | (@ParameterName) | SELECT * FROM Customer WHERE (CustomerID = @CustomerID AND AccountNumber = @AccountNumber) |
ページレポート/RDLレポートでは、[クエリデザイナ]を使用してパラメータ付きクエリを簡単に作成することができます。[データセット]ダイアログの[クエリ]ページ内にあるボタンをクリックすることで、クエリデザイナにアクセスしてSQLクエリを作成することができます。クエリデザイナを使用して対話的にクエリを作成する方法の詳細については、「クエリデザイナでクエリの作成」を参照してください。
なお、手動でパラメータ付きクエリを作成したい場合には、3か所のパラメータをそれぞれ設定する必要があります。設定が必要となるのは、[レポート-パラメータ]ダイアログ、[データセット]ダイアログの[パラメータ]ページ、[データセット]ダイアログの[クエリ]ページの3か所です。
[レポート-パラメータ]ダイアログ
以下のいずれかの方法で[レポート-パラメータ]ダイアログにアクセスすることができます。
[レポート-パラメータ]ダイアログには、[パラメータ]ページがあります。このページには、パラメータ一覧と、パラメータプロパティを設定するための3つのタブ([全般]、[使用できる値]、[既定値])が含まれています。パラメータを一覧に追加するには、[追加](+)アイコンをクリックし、3つのタブでパラメータのプロパティを設定します。タブの詳細については後述します。
[レポート-パラメータ]ダイアログでは、各パラメータに対してパラメータ入力ダイアログの表示を制御することができます。同ダイアログで以下のプロパティを設定してパラメータを作成します。
パラメータは、レポートパラメータコレクション内で表示されている順番で取得されます。表示順は[レポート-パラメータ]ダイアログから矢印のアイコンを使用して変更することができます。
[全般]
[使用できる値]
エンドユーザーが選択できる値をドロップダウン一覧として表示する場合に使用します。
条件:Value、値:ProductName | 条件:Label、ラベル:ProductID |
[既定値]
[データセット]ダイアログの[パラメータ]ページ
[データセット]ダイアログの[パラメータ]ページで、クエリのパラメータにレポートのパラメータを渡します。パラメータ一覧の一番上の[追加](+)アイコンをクリックし、パラメータ名を入力し、以下のような値を入力します。
=Parameters!MPAA.Value
[データセット]ダイアログの[クエリ]ページ
[データセット]ダイアログの[クエリ]ページで、SQLクエリにパラメータを入力します。パラメータを作成するには、データソースに特有の構文を使用します。たとえば、OleDBデータソースの場合、以下のようなクエリを入力します。
SELECT * FROM Movie WHERE (MPAA = ? AND YearReleased = ?)
実行時にユーザーにパラメータの入力を要求せずにレポートを実行する場合、各パラメータの既定値を設定し、[パラメータ]ダイアログの[全般]タブで[非表示]チェックボックスをONに設定する必要があります。
サブレポートのデータは、ユーザーが親レポートと容易に同期させることができるので、パラメータも非表示パラメータと認識されます。詳細については、「RDLレポートでのサブレポート」を参照してください。
ドリルスルーリンクもレポートから他のレポートへナビゲートするように使用されるので、パラメータも非表示パラメータになります。[ナビゲーション]タブで[アクション]の[レポートに移動]を選択することによりに、パラメータ一覧が有効になります。
セクションレポートでは、パラメータコレクションを使用して実行時に値をコントロールに直接渡すか、レポートの特有のインスタンスでデータのサブセットを表示することができます。
レポートでパラメータを設定する方法
<%Name | PromptString | DefaultValue | DataType | PromptUser%>
ユーザーにパラメータ値の入力を求める
パラメータ値をユーザーに入力してもらうには、以下の設定が完了している必要があります。
コレクションにパラメータが存在し、ShowParameterUIプロパティが「True」に設定されている場合、レポートを実行すると自動的にパラメータ入力ダイアログが表示されます。要求される値をユーザーが入力して[OK]ボタンをクリックすると、レポートが入力値を使用して表示されます。
[レポートエクスプローラ]から追加されたパラメータ値は、SQLクエリのパラメータに「param:」
というパラメータプレフィックスを指定して適用することができます。このプレフィックスは、SQLパラメータをレポートエクスプローラのパラメータと関連付けます。
例 select * from CUSTOMERS where CustomerName = '<%param:Parameter1%>'
この例の場合、SQLクエリ内にparam:
というプレフィックスを持つパラメータが、[レポートエクスプローラ]上の該当するパラメータ値で更新されます。
SQLクエリの実行時にパラメータを追加する
SQLクエリの実行時にパラメータを追加する場合、クエリは以下のようになります。
SQLクエリ |
コードのコピー
|
---|---|
SELECT * FROM Products INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID WHERE Products.SupplierID = <%SupplierID|Enter a Supplier ID|1|S|True%> |
または
[レポートデータソース]ダイアログ内のボタンをクリックして[クエリデザイナ]を開き、パラメータ付きクエリを作成することも可能です。[クエリデザイナ]を使用して対話的にクエリを作成する方法の詳細については、「クエリデザイナでクエリの作成」を参照してください。
パラメータの構文にパイプ区切りで5つの値を指定します。
<%Name | PromptString | DefaultValue | DataType | PromptUser%>
最初の値(Name)が必須となりますが、3番目の値(DefaultValue)を指定しない場合、フィールド一覧はデザイン時に埋め込まれません。Name値のみを指定し、パイプなしで渡すこともできます。いくつかの値を指定する場合、パイプを追加しますが、指定しない値に対して空白を指定する必要はありません。
例 <%ProductID||||False%>
Name: パラメータの一意の名前で、コードで入力されたパラメータのKeyプロパティに該当します。
PromptString: パラメータ入力ダイアログに表示する文字列で、ユーザーに入力してほしいデータに関する情報を表示します。
DefaultValue: パラメータのデフォルト値を設定します。たとえば、日付パラメータの場合、フィールドのデフォルト値を現在の日付にしておくと、別の日付に基づくレポートを生成する場合を除いて、[Enter]キーを押すだけで設定が済みます。
DataType: 既定値がS(文字列)で、この値はパラメータが示すデータ型をActiveReportsに通知します。ユーザープロンプトで使用されるコントロールの種類についても決定されます。タイプは以下の3つから選択することができます。
'<%MyStringParameter%>'
例 <%MyStringParameter||"既定値"|S|False%>
#<%日付パラメータ%>#