チャートをクリックし、クリックした条件でレポートをフィルタリングしてみます。
チャートは円チャート、レポートには対話グリッドを使います。
最初にリンク設定を使った実装を行います。対話グリッドのリンク設定は、マニュアルの以下の部分で説明されています。
対話グリッド・レポートへのリンクの設定
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を作成します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
create or replace view ebac_countries_v | |
as | |
select | |
c.country_id | |
,c.name | |
,c.capital | |
,c.population | |
,c.region_id | |
,r.name region_name | |
,c.sub_region_id | |
,s.name sub_region_name | |
from eba_countries c join eba_country_regions r on c.region_id = r.id | |
join eba_country_sub_regions s on c.sub_region_id = s.id | |
; |
SQLコマンドより実行します。
ビューEBAC_COUNTRIES_Vが作成されます。
このビューを使ったチャートとレポートを表示するアプリケーションを作成します。
アプリケーション作成ウィザードを起動します。
アプリケーションの名前はチャートとレポートの連携とします。デフォルトで作成されるホーム・ページは、編集をクリックして削除します。ページの追加をクリックし、代わりに対話グリッドのページを追加します。
対話グリッドを選択します。
ページ名は国一覧とします。表またはビュー、読取り専用を選択します。表またはビューとして、先ほど作成したビューEBAC_COUNTRIES_Vを指定します。
アプリケーションにはこのページしかないため、このページが必ずホーム・ページになります。
ページの追加をクリックします。
アプリケーションの作成を実行します。
アプリケーションが作成されます。ページ・デザイナでページ番号1の国一覧を開きます。
ページ国一覧にチャートを表示するリージョンを作成します。
新規にリージョンを作成し、レポートEbac Countriesの上に配置します。
識別のタイトルは地域別、タイプとしてチャートを選択します。ソースの位置はローカル・データベース、タイプは表/ビュー、表名としてEBAC_COUNTRIES_Vを指定します。
プロパティ・エディタの属性タブを開き、チャートのタイプを円に変更します。
シリーズを選択し、識別の名前を人口に変更します。
ソースの位置としてリージョン・ソースを選択します。列のマッピングのラベルにREGION_NAME、値集計に合計、値にPOPULATIONを指定します。
この時点でアプリケーションを実行してみます。
これから、円チャート上でクリックした地域で、対話グリッドがフィルタリングされる設定を行います。
シリーズ人口を選択し、リンクのタイプとしてこのアプリケーションのページにリダイレクトを選択します。
ターゲットをクリックし、リンク・ビルダー・ターゲットを開きます。
アイテムの設定の名前にIG_REGION_NAMEを入力し、値として®ION_NAME.を選択します。
名前の指定方法は、ドキュメントの対話グリッドのName構文およびValue構文に記載されています。
IG[region static ID]<operator>_<target column alias>
ページに対話グリッドが1つだけの場合は、[region static ID]の指定を省略できます。また、<operator>が等しいを意味するEQの場合は、<operator>を省略できます。
つまりIG_REGION_NAMEと®ION_NAME.によるリンク設定は、ページに1つしかない対話グリッドの列REGION_NAMEの値が®ION_NAME.(円チャート上でクリックした地域名)に等しいというフィルタ条件として、対話グリッドに設定されます。
すでに設定済みのフィルタ条件をリセットするため、キャッシュのクリアに1(ページ番号の指定です)、アクションとしてリージョンのリセットを選択します。
以上でOKをクリックします。
以上の設定により、円チャート上でクリックした地域名を値としたフィルタ条件が、対話グリッドに設定されます。フィルタ条件が設定されるため、対話グリッドとして表示されるデータも、選択した地域に限定されます。
レポートの表示列を調整します。レポートの表示列から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のコードを記述し、ページのリロードを行わない実装を試みます。
続く