2023年2月17日金曜日

チャートとレポートを連携させる(1) - リンク設定

 チャートをクリックし、クリックした条件でレポートをフィルタリングしてみます。

チャートは円チャート、レポートには対話グリッドを使います。


最初にリンク設定を使った実装を行います。

対話グリッドのリンク設定は、マニュアルの以下の部分で説明されています。

対話グリッド・レポートへのリンクの設定
https://docs.oracle.com/cd/F70953_01/htmdb/linking-to-interactive-grid-reports.html

対話モード・レポートへのリンクの設定
https://docs.oracle.com/cd/F70953_01/htmdb/linking-to-interactive-reports.html

対話グリッドと対話モード・レポートでのリンク設定の違いは、それぞれのパラメータ名の接頭辞です。対話グリッドIG対話モード・レポートIRになります。それ以外はほぼ同じです。今回はリンクするレポートに対話グリッドを使いますが、対話モード・レポートでも同様の実装ができます。

サンプルの実装に使用するデータ・セットを用意します。

サンプル・データセットのに含まれる人口の情報を使います。

SQLワークショップユーティリティサンプル・データセットを開きます。

名前のデータ・セットをインストールします。


のデータ・セットには国、人口および首都のリストが含まれます。

へ進みます。


作成される表やビューが表示されます。

データセットのインストールを実行します。


ここからはアプリケーションは作成しないので、そのまま終了します。


サンプル・データセットがインストールされました。

アクションインストールから更新に変わります。


サンプル・データセットにはビューEBA_COUNTRIES_Vが含まれますが、今回の用途には列が不足しています。具体的にはREGION_IDとSUB_REGION_IDです。そのため、新規にビューEBAC_COUNTRIES_Vを作成します。

SQLコマンドより実行します。


ビューEBAC_COUNTRIES_Vが作成されます。

このビューを使ったチャートとレポートを表示するアプリケーションを作成します。

アプリケーション作成ウィザードを起動します。

アプリケーションの名前チャートとレポートの連携とします。デフォルトで作成されるホーム・ページは、編集をクリックして削除します。ページの追加をクリックし、代わりに対話グリッドのページを追加します。


対話グリッドを選択します。


ページ名国一覧とします。表またはビュー読取り専用を選択します。表またはビューとして、先ほど作成したビューEBAC_COUNTRIES_Vを指定します。

アプリケーションにはこのページしかないため、このページが必ずホーム・ページになります。

ページの追加をクリックします。


アプリケーションの作成を実行します。


アプリケーションが作成されます。ページ・デザイナでページ番号国一覧を開きます。


ページ国一覧にチャートを表示するリージョンを作成します。

新規にリージョンを作成し、レポートEbac Countriesの上に配置します。

識別タイトル地域別タイプとしてチャートを選択します。ソース位置ローカル・データベースタイプ表/ビュー表名としてEBAC_COUNTRIES_Vを指定します。


プロパティ・エディタ属性タブを開き、チャートタイプに変更します。


 シリーズを選択し、識別名前人口に変更します。

ソース位置としてリージョン・ソースを選択します。列のマッピングラベルREGION_NAME値集計合計POPULATIONを指定します。

この時点でアプリケーションを実行してみます。

これから、円チャート上でクリックした地域で、対話グリッドがフィルタリングされる設定を行います。


シリーズ人口を選択し、リンクタイプとしてこのアプリケーションのページにリダイレクトを選択します。

ターゲットクリックし、リンク・ビルダー・ターゲットを開きます。


フィルタリングする対話グリッドは同じページに配置されているため、ターゲットページを選択します。

アイテムの設定の名前にIG_REGION_NAMEを入力し、として&REGION_NAME.を選択します。

名前の指定方法は、ドキュメントの対話グリッドのName構文およびValue構文に記載されています。

IG[region static ID]<operator>_<target column alias>

ページに対話グリッドが1つだけの場合は、[region static ID]の指定を省略できます。また、<operator>等しいを意味するEQの場合は、<operator>を省略できます。

つまりIG_REGION_NAME&REGION_NAME.によるリンク設定は、ページに1つしかない対話グリッドの列REGION_NAMEの値が&REGION_NAME.(円チャート上でクリックした地域名)に等しいというフィルタ条件として、対話グリッドに設定されます。

すでに設定済みのフィルタ条件をリセットするため、キャッシュのクリア(ページ番号の指定です)、アクションとしてリージョンのリセットを選択します。

以上でOKをクリックします。


以上の設定により、円チャート上でクリックした地域名を値としたフィルタ条件が、対話グリッドに設定されます。フィルタ条件が設定されるため、対話グリッドとして表示されるデータも、選択した地域に限定されます。


レポートの表示列を調整します。レポートの表示列からCapitalを除きます。

アクションを実行します。


Capital表示チェックを外し保存します。


列Capitalが非表示になります。すでに設定済みのフィルタ条件があれば、削除します。


このレポート設定をいつでも呼び出せるように保存します。

アクション・メニューレポート別名保存を呼び出します。


自分以外の人もこのレポート設定を呼び出せるように、タイプとして代替を選択します。レポート設定の名前必須列のみとします。

保存をクリックします。


レポート設定を保存した直後は、保存したレポートが適用された状態になります。


ページ・デザイナを開き、保存されたレポート設定を確認します。

対話グリッド保存されたレポートを開きます。代替のレポートを保存したのに、保存されたレポートに表示されない場合は、ページ・デザイナをリロードします。データベースに更新された内容をページに表示するには、ページ・デザイナであってもページをリロードする必要があります。


保存されたレポート必須列のみを選択し、識別別名RequiredColumnsOnlyに変更します。保存を実行するとリンク列の最後のコロン以降IG_RequiredColumnsOnlyに変わります。これはリクエストとして指定する値です。


リクエストの指定は、ドキュメントの対話グリッドのRequest構文に説明されています。

IG[region static ID]_<report_alias>

ターゲットとなるページに対話グリッドが1つだけの場合、[region static ID]は省略できます。今回はレポートの別名(report_alias)をRequiredColumnsOnlyに変更したので、リクエストの値はIG_RequiredColumnsOnlyになります。


シリーズ人口リンクターゲットを再度開き、詳細リクエストIG_RequiredColumnsOnlyを指定します。


以上の変更で、対話グリッドのレポート設定として何が適用されていても、円チャートをクリックしたときは、レポート設定に必須列のみが適用された状態になります。


レポートのリンク設定を使ったチャートとレポートの連携方法の説明は以上になります。

今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/link-chart-and-report.zip

リンク設定を使ったチャートとレポートの連携は、比較的簡単に実装できます。しかし、今回の例のようにチャートとレポートが同じページに配置されていると、必ずページのリロードが発生するため、ページの応答がいまひとつ良くありません。

次の記事では動的アクションと少々のJavaScriptのコードを記述し、ページのリロードを行わない実装を試みます。

続く