ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド
11g リリース2(11.1.2.4.0)
B66719-05
  目次へ移動
目次

前
 
次
 

24 ピボット・テーブル・コンポーネントの使用方法

この章では、ADFデータ視覚化pivotTableおよびpivotFilterBarコンポーネントを使用して、ピボット・テーブルでデータを表示する方法について説明します。アプリケーションでFusionテクノロジ・スタックが使用される場合、データ・コントロールを使用してピボット・テーブルを作成できます。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のデータバインドされたピボット・テーブルの作成に関する項を参照してください。

この章では、次の項目について説明します。

24.1 ピボット・テーブル・コンポーネントについて

ピボット・テーブルでは、ネストされた行および列の無制限の層により、グリッド・レイアウトにデータを表示します。表計算ソフトウェア同様、ピボット・テーブルでは、グリッド・データの小計と合計を自動的に生成するオプションが用意されています。ピボット・テーブルのインタラクティブな機能は、行ヘッダーと列ヘッダーにネストする複数の属性の表示に基づいています。ユーザーは、ドラッグ・アンド・ドロップ操作を使用して、これらの属性のレイアウトを動的に変更できます。ピボット・テーブルでは、データ・ラベルや関連のデータ・レイヤーを行または列エッジ上のある場所から別の場所へピボット処理、つまり再配置して、データの表示を変えることで、インタラクティブな分析をサポートします。

ピボット・フィルタ・バーは、ピボット・テーブルの行または列エッジの1つで表示されない層にあるピボット・テーブル・データをユーザーがフィルタ処理できるように、ピボット・テーブルに追加できるコンポーネントです。ユーザーは、ピボット・フィルタ・バーと関連付けられたピボット・テーブルの間でこれらのレイヤーをドラッグ・アンド・ドロップして、データのビューを変更することもできます。

24.1.1 ピボット・テーブル・コンポーネントのエンド・ユーザー機能およびプレゼンテーション機能

ADFデータ視覚化ピボット・テーブル・コンポーネントには、ピボット処理、列のソート、そして1行以上の行の選択後に選択した行でアプリケーション定義のアクションを実行するなど、エンド・ユーザー用の一連の機能が用意されています。また、階層的にネストされた行および列の無制限のレイヤーなど、一連のプレゼンテーション機能も備わっています。

24.1.1.1 ピボット・フィルタ・バー

ピボット・テーブルのデータ・フィルタ処理能力は、オプションのピボット・フィルタ・バーにより強化できます。ピボット・テーブルの行エッジまたは列エッジですでに表示されなくなったゼロ以上のデータのレイヤーは、ページ・エッジでは表示されます。図24-1に、ピボット・テーブルに表示されているデータのフィルタ処理に使用できる四半期および月のレイヤーを持つピボット・フィルタ・バーを示します。

図24-1 データ・レイヤー・フィルタのあるピボット・フィルタ・バー

データ・レイヤー・フィルタのあるピボット・フィルタ・バー。

24.1.1.2 ピボット処理

ピボット・テーブル内の任意のレイヤーを同じエッジ上の異なる位置、反対側のエッジ、または関連付けられたピボット・フィルタ・バー(ある場合)へドラッグして、ピボット・テーブル内のデータのビューを変更できます。ピボット・フィルタ・バーの任意のレイヤーを、ピボット・フィルタ・バー内の異なる位置や、ピボット・テーブルの行または列エッジにドラッグできます。この操作はピボット処理と呼ばれ、デフォルトで有効になっています。

マウスをレイヤーに移動すると、レイヤーのピボット・ハンドルとオプションのピボット・ラベルが表示されます。マウスをピボット・ハンドルに移動すると、カーソルが4点矢印のドラッグ・カーソルに変わります。次にこのハンドルを使用して、レイヤーを新しい場所へドラッグできます。マウスを行エッジのレイヤーに移動すると、ピボット・ハンドルが図24-2に示すようにそのレイヤーの上に表示されます。

図24-2 行エッジ上のピボット・ハンドルの表示

行エッジ上のピボット・ハンドルの表示。

カーソルを列エッジのレイヤーに移動すると、ピボット・ハンドルが図24-3に示すようにそのレイヤーの左に表示されます。

図24-3 列エッジ上のピボット・ハンドルの表示

列エッジ上のピボット・ハンドルの表示。

図24-2で時間(年)レイヤーのピボット・ハンドルを行エッジから列エッジの尺度(売上げ)レイヤーと販路レイヤーの間にドラッグすると、ピボット・テーブルは図24-4に示すように変わります。

図24-4 年のピボット後の売上げピボット・テーブル

年のピボット後の売上げピボット・テーブル。

ピボットはピボット・ラベルおよびピボットを無効にするようにカスタマイズできます。両方を無効にすると、レイヤーにマウスを移動してもピボット・ハンドルは表示されません。

24.1.1.3 データ・セルの編集

ピボット・テーブルには、読取り専用のデータ・セルと編集可能なデータ・セルの両方を含めることができます。編集可能なセルは、入力コンポーネント(af:inputTextなど)を含むセルです。編集可能なセルを含むピボット・テーブルが最初に表示されるとき、最初のデータ・セルが選択されていて、ピボット・テーブルが編集のために開いています。ユーザーは、シングルクリックでセル内の値を上書きし、ダブルクリックでセルを編集して、ピボット・テーブル内のどこでも編集を開始できます。編集可能なセルでダブルクリックすると、ユーザーはセル内の特定の場所を指定し、矢印キーを使用してそのセル内で移動できます。編集可能なセル上で実行された編集は、[Esc]を押せば元に戻すことができます。

編集モードの間は、[Tab]、[Enter]または矢印キーを使用して、ピボット・テーブルのデータ・セル内を移動できます。現在選択されているセルの下または上のセルに迅速に移動するには、矢印キーを使用します。移動に[Enter]キーを使用するとき、アクティブ・リンクを含むセルに対して、アクティブ・リンクが自動的に開始されます。[Tab]または[Shift]+[Tab]を使用して移動するとき、複数の編集可能コンポーネントを含むデータ・セルは、同じセルのaf:inputDateとデータ・ピッカーの両方の場合のように、[Tab]で各編集可能コンポーネントが順々に強調表示されます。ピボット・テーブルの最終列までタブで移動すると、次の行の最初の列が強調表示され、ピボット・テーブルで最初の列まで[Shift]を押しながらタブ移動すると、前の行の最終列が強調表示されます。矢印キーを使用して移動する場合、[F2]を押せばaf:inputTextコンポーネントを含むセル内を移動でき、[Esc]を押せば矢印キーのデータ・セル移動に戻ります。セルに対する編集は、[Esc]を押せば取り消せます。

編集モードを開始すると、ユーザーは編集モードを維持したまま、読取り専用データ・セルから編集可能データ・セルまで移動できます。編集可能セルが選択されている間、新規セルでの編集を有効にすることなく、元のセルでの編集を保持しつつ、[Ctrl]または[Shift]を押しながらクリックして別のセルを選択できます。

迅速なデータ入力をサポートするために、ピボット・テーブルでは、クリックまたは矢印キーを使用したパターン・ナビゲーションもサポートされています。たとえば、ユーザーが編集のためにセルをクリックしてから、行内のその他のセルをタブ移動する場合、[Enter]を押すと次の行で最初のセルの下のセルが強調表示されます。


注意:

キューブ内のセルのセットに値を一時的または完全に書き戻す操作(書戻しと呼ばれる)を行うには、ピボット・テーブルが書戻し操作をサポートするデータ・コントロールまたはデータ・モデルにバインドされている必要があります。行セット・ベースのデータ・コントロールはキューブに変換されるため、書戻し操作をサポートできません。


24.1.1.4 ソート

ピボット・テーブルでは、ピボット・テーブル内のデータのソートがサポートされています。ソートが有効な場合、ユーザーが列ヘッダーの最も内側のレイヤーにマウスを移動すると、昇順ソートと降順ソートのアイコンが表示されます。デフォルトでは、pivotTableコンポーネントのsortMode属性はgroupedに設定されており、行エッジの最も内側から2番目のレイヤーによってグループ化されたデータを効果的にソートします。図24-5では、行エッジの最も内側から2番目のレイヤーの年によってデータがグループ化されているピボット・テーブルで、世界売上げの列に表示されたソート・アイコンを示しています。

図24-5 ピボット・テーブルの昇順および降順ソート・アイコン

ピボット・テーブルの昇順および降順ソート・アイコン

24.1.1.5 ドリル

ピボット・テーブルでは、ドリルの挿入およびドリルのフィルタの2種類のドリルがサポートされています。ドリルの挿入では、展開操作により、兄弟および集計データを保持しながら、詳細なデータを表示します。ドリルのフィルタでは、展開操作により、兄弟および集計データはフィルタで除外され、詳細データのみが表示されます。

たとえば、図24-6および図24-7では、各年の製品データを表示するためにドリルがどのように使用されるかを示しており、2007年の総売上高52,500の内訳が、テントの25,500とカヌーの27,000であることを表しています。この合計は、すべての年のすべての売上高の総計128,172に寄与しています。図24-6に、ドリルの挿入を使用して詳細な数値とともに合計数52,500が表示されたピボット・テーブルを示します。他の年のデータとすべての年の総計も利用できます。

図24-6 ドリルの挿入が有効になっているピボット・テーブル

ドリルの挿入を使用したピボット・テーブル

図24-7に、ドリルのフィルタを使用して詳細な数値のみが表示されたピボット・テーブルを示します。その他の年の数値とすべての年の総計がフィルタで除外されています。

図24-7 ドリルのフィルタが有効になっているピボット・テーブル

ドリルのフィルタが有効になっているピボット・テーブル。

実行時には、両タイプのドリルの親属性表示ラベルでドリル・アイコンが有効になります。

24.1.1.6 オンデマンド・データ・スクロール

ピボット・テーブルでは、パフォーマンスを維持しながら、大規模なデータ・セットをサポートするために、オンデマンド・データ・スクロールがサポートされています。ピボット・テーブルでスクロールにより表示されるデータのみがロードされます。ユーザーが垂直または水平にスクロールすると、スクロールで表示されたデータがピボット・テーブルの一部にフェッチされ、不要になったデータは廃棄されます。図24-8に、オンデマンド・データ・スクロールを使用して大規模なデータ・セットを表示するピボット・テーブルを示します。

図24-8 ピボット・テーブルのオンデマンド・データ・スクロール

ピボット・テーブルのオンデマンド・データ・スクロール。

24.1.1.7 サイズ設定

ピボット・テーブルのデフォルト・サイズは、横300ピクセル、縦300ピクセルです。ピボット・テーブルでは、ピボット・テーブルが最初に表示されたときに使用できるスペース内で、行、列およびレイヤーのサイズを自動設定します。行、列またはレイヤーのサイズは、行セパレータ、列セパレータまたはレイヤー・セパレータを新しい位置にドラッグすることで、実行時に変更できます。行または列ヘッダーで、サイズを変更する行、列またはレイヤーと、次の行、列またはレイヤーとの間のセパレータ上にカーソルを置きます。カーソルが両方向の矢印に変わったら、行、列またはレイヤー・セパレータをクリックして目的の位置にドラッグします。

行、列またはレイヤーのサイズを変更すると、ピボット操作を実行するまで新しいサイズが維持されます。ピボット操作後、新しいサイズはクリアされ、ピボット・テーブルの行、列およびレイヤーは元のサイズに戻ります。

ピボット操作を行わない場合、セッション中は新しいサイズのままになります。ただし、これらのサイズはMDS (メタデータ・サービス)のカスタマイズでは保存できません。

24.1.2 ピボット・テーブルおよびピボット・フィルタ・バー・コンポーネントのユースケースおよび例

ピボット・テーブルには、行と列のあるデータのグリッドが表示されます。図24-9に、行および列でネストされた複数の属性が表示されたピボット・テーブルを示します。

図24-9 複数の行および列を持つ売上げピボット・テーブル

複数の行と列がある売上げのピボット・テーブル

ピボット・フィルタ・バーは、ピボット・テーブルの行エッジまたは列エッジで表示されないレイヤーにあるピボット・テーブル・データをユーザーがフィルタ処理できるように、ピボット・テーブルに関連付けられるコンポーネントです。ユーザーは、ピボット・フィルタ・バーと関連付けられたピボット・テーブルの間でこれらのレイヤーをドラッグ・アンド・ドロップして、データのビューを変更することもできます。図24-10に、ピボット・テーブルに関連付けられたピボット・フィルタ・バーを示します。

図24-10 ピボット・テーブルに関連付けられたピボット・フィルタ・バー・コンポーネント

ピボット・フィルタ・バー・コンポーネント

ピボット・テーブル・データ・セルでは、スパークチャート、ゲージおよびグラフなどの他のデータ表示コンポーネントをサポートします。図24-11に、長期にわたるデータの傾向を表すスパークチャートがデータ・セルに表示されたピボット・テーブルを示します。

図24-11 データ・セルにスパークチャートが表示されたピボット・テーブル

スパークチャートがスタンプされたピボット・テーブル

図24-12に、データ・セルにゲージがスタンプされたピボット・テーブルを示します。

図24-12 データ・セルにゲージがスタンプされたピボット・テーブル

データ・セルにゲージがスタンプされたピボット・テーブル

図24-13に、データ・セルにグラフがスタンプされたピボット・テーブルを示します。

図24-13 データ・セルにグラフがスタンプされたピボット・テーブル

データ・セルにグラフがスタンプされたピボット・テーブル

ピボット・テーブルでは、編集可能なデータ・セルをサポートできます。編集可能なセルは、入力コンポーネント(af:inputTextなど)を含むセルです。実行時に、編集は直接編集の場合はシングルクリックで、セルでの編集にはダブルクリックで、ピボット・テーブルのどこでも開始できます。図24-14に、直接編集のために開かれたピボット・テーブルのデータ・セルを示します。

図24-14 直接編集のために開かれたデータ・セル

直接編集のために開かれたデータ・セル。

ドロップダウン・リストの編集のために選択されたデータ・セルは、図24-15で示すように表示されます。

図24-15 ドロップダウン・リストの編集のために開かれたデータ・セル

ドロップダウン・リストの編集のために開かれたデータ・セル。

ピボット・テーブルのヘッダーおよびデータ・セルは、イメージ、アイコンまたはリンクの表示や、ストップライトおよび条件付き書式設定の表示のためにカスタマイズできます。図24-16に、売上げ実績のレベルを表示するための条件付き書式設定を使用したピボット・テーブルを示します。

図24-16 データ・セルの条件付き書式設定

データ・セルの条件付き書式設定

24.1.3 ピボット・テーブル・コンポーネントの追加機能

ピボット・テーブル・コンポーネントを実装する前に、その他のADF Faces機能を理解しておくと役に立ちます。また、いったんピボット・テーブル・コンポーネントをページ追加すると、検証やアクセシビリティなどの機能を追加する必要があることに気付く場合があります。ピボット・テーブル・コンポーネントで使用できるその他の機能へのリンクは、次のとおりです。

  • 部分ページ・レンダリング: 他のコンポーネントで実行されたアクションに基づく新しいデータをページ上に表示するために、ピボット・テーブルでヘッダー・セル、データ・セルまたはピボット・テーブル全体をリフレッシュできます。詳細は、第8章「部分ページ・コンテンツの再レンダリング」を参照してください。

  • パーソナライズ: 有効な場合、ユーザーは実行時にピボット・テーブルの表示方法を変更できますが、アプリケーションがユーザーのカスタマイズを許可するように構成されていないかぎり、ユーザーがページを終了するとそれらの値は保持されません。詳細は、第32章「JSFページでのユーザー・カスタマイズの許可」を参照してください。

  • アクセシビリティ: ピボット・テーブルおよびピボット・フィルタ・バー・コンポーネントをアクセス可能にできます。詳細は、第30章「アクセス可能なADF Facesページの開発」を参照してください。

  • スキンおよびスタイル: アプリケーションに適用するADFを使用するか、スタイル関連のプロパティ(styleClassまたはinlineStyle)を使用してCSSスタイル・プロパティを直接適用することにより、ピボット・テーブルおよびピボット・フィルタ・バー・コンポーネントの外観をカスタマイズできます。詳細は、第28章「スタイルおよびスキンを使用した外観のカスタマイズ」を参照してください。

  • コンテンツ配信: コンポーネントのレンダリング直後、またはコンポーネントがレンダリングされた後の別のリクエストで、データ・ソースからデータをフェッチするように、contentDelivery属性を使用してピボット・テーブルおよびピボット・フィルタ・バーを構成できます。詳細は、12.2.2項「コンテンツの配信」を参照してください。

  • 自動データ・バインディング: アプリケーションでFusionテクノロジ・スタックが使用されている場合、ADFビジネス・コンポーネントの構成に基づいて、自動的にバインドされたピボット・テーブルを作成できます。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のデータバインドされたピボット・テーブルの作成に関する項を参照してください。


    注意:

    最終的にページのUIコンポーネントでADFデータ・バインディングが使用されることがわかっていても、データ・コントロールの準備ができる前にページを開発する必要がある場合、手動でコンポーネントをバインドするのではなく、プレースホルダ・データ・コントロールを使用します。プレースホルダ・データ・コントロールを使用すると、開発済データ・コントロールを使用した場合と同じ宣言的な開発が行われます。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のプレースホルダ・データ・コントロールを使用したページの設計に関する項を参照してください。


さらに、データ視覚化コンポーネントでは、データの配信方法、自動部分ページ・レンダリング(PPR)、イメージ形式、そしてデータの表示および編集方法など、同じ機能の大部分が共有されています。詳細は、21.2項「データ視覚化コンポーネントの共通機能」を参照してください。

24.2 ピボット・テーブル・コンポーネントの使用方法

ピボット・テーブル・コンポーネントでは、データの表示およびやりとりにデータ・モデルを使用します。使用される具体的なモデル・クラスは、oracle.adf.view.faces.bi.model.pivotTable.PivotTableModelです。


注意:

ピボット・テーブルとグラフを同じデータ・セットにリンクする場合、モデル・クラスoracle.adf.view.faces.bi.model.DataModelを使用します。


行セット(フラット・ファイル)データ・コレクションを使用して、ピボット・テーブルにデータを提供できます。データ・バインディング処理時、「データ・バインディング」ダイアログでピボット・テーブルの行エッジまたは列エッジの目的の場所に各データ要素をドラッグできます。

データ・バインディング時には、ピボット・テーブルの行および列の小計と合計の指定、実行時のドリル操作の指定、重複レコードの集計方法の定義、および初期のソート基準の設定もできます。

ADFピボット・テーブルのデータ・バインディングの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のデータバインドされたADFピボット・テーブルの作成に関する項を参照してください。

24.2.1 ピボット・テーブルの構成

ピボット・テーブル(pivotTable)コンポーネントには、2つの子コンポーネント、ヘッダー・セル(headerCell)およびデータ・セル(dataCell)があります。ピボット・フィルタ・バー(pivotFilterBar)は、ピボット・テーブルと関連付けることができる兄弟コンポーネントです。接頭辞dvt:は、各ピボット・テーブルおよびピボット・フィルタ・バー・コンポーネント名の先頭に付いて、そのコンポーネントがADFデータ視覚化ツール(DVT)のタグ・ライブラリに属することを示します。

ピボット・テーブルでは、ネストされた行および列の無制限の層により、グリッド・レイアウトにデータを表示します。図24-17に、電子機器の売上げを示すピボット・テーブルとそれに関連付けられたピボット・フィルタ・バーを示します。

図24-17 電子機器売上げピボット・テーブル

電子機器売上げピボット・テーブルとピボット・フィルタ・バー

ピボット・テーブルおよびピボット・フィルタ・バー・コンポーネントは、図24-17の電子機器売上げピボット・テーブルを使用して、次の用語で定義されます。

  • エッジ: ピボット・テーブル内の軸で、次のものがあります。

    • 行エッジ: ピボット・テーブル本体の左側にある縦軸。図24-17では、行エッジに製品カテゴリと製品の2つのレイヤーがあり、ピボット・テーブルの各行は、特定のカテゴリと特定の製品の組合せを表しています。

    • 列エッジ: ピボット・テーブルの本体の上にある横軸。図24-17では、列エッジには、尺度と米国の州の2つのレイヤーがあり、ピボット・テーブルの各列は、特定の尺度の値と特定の地理的位置(米国の州)の組合せを表しています。

    • ページ・エッジ: ピボット・フィルタ・バーによって表されるエッジで、そのレイヤーは行および列エッジのレイヤーによりフィルタ処理やピボット処理ができます。

  • レイヤー: 1つのエッジに表示される、ネストされた属性。図24-17では、列エッジに尺度と地理的位置(売上げと米国の州)の2つのレイヤーが表示されています。行エッジには、カテゴリと製品(製品カテゴリと製品)の2つのレイヤーが表示されています。

  • ヘッダー・セル: 行または列に表示されているデータを識別するラベル。行ヘッダー・セルは行エッジ上に、列ヘッダー・セルは列エッジ上に表示されます。サンプルでは、ヘッダー・セルにCell Phones、iPod Speakers、SalesおよびColoradoが表示されています。

  • データ・セル: ヘッダー情報ではなく、データ値を含むピボット・テーブル内のセル。サンプルでは、最初のデータ・セルに、1,499.99という値が含まれています。

  • QDR (修飾データ参照): 行、列または個々のセルに対する完全修飾データ参照。たとえば、図24-17では、ピボット・テーブル内の最初のセルのQDRに次の情報が含まれる必要があります。

    • カテゴリ=Audio Video

    • 製品=iPod Nano 1Gb

    • 尺度: Sales

    • 地理=Colorado

    同様に、ピボット・テーブルの最初の行のQDRは、「iPod Nano 1Gb」ヘッダー・セルのQDRでもあり、次の情報が含まれています。

    • カテゴリ=Audio Video

    • 製品=iPod Nano 1Gb

    最後に、「Sales」ヘッダー・セルのQDRには、次の情報が含まれています。

    • 尺度: Sales

24.2.2 ページへのピボット・テーブルの追加方法

簡単なUI優先開発を使用してページを設計しているときには、コンポーネント・パレットを使用してピボット・テーブルをページに追加します。ページにピボット・テーブルが追加されると、プロパティ・インスペクタを使用して、データ値を指定し、ピボット・テーブルに追加の表示属性を構成できます。

プロパティ・インスペクタで、各属性フィールドのドロップダウン・メニューを使用して、プロパティの説明、およびEL式ビルダーまたはその他の専用ダイアログの表示などのオプションを表示できます。図24-18に、ピボット・テーブル・コンポーネントのvalue属性のドロップダウン・メニューを示します。

図24-18 ピボット・テーブル・コンポーネントの「値」属性のドロップダウン・メニュー

ピボット・テーブル「値」属性ドロップダウン・メニュー

注意:

アプリケーションでFusionテクノロジ・スタックが使用される場合、データ・コントロールを使用してピボット・テーブルを作成でき、バインドが自動的に行われます。JDeveloperには、データ・バインディングとピボット・テーブルの構成用のウィザードがあります。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の「データバインドされたADFピボット・テーブルの作成」の章を参照してください。


始める前に:

ピボット・テーブルの属性や子タグが機能にどのような影響を与えるかについて理解しておくと役立ちます。詳細は、24.2.1項「ピボット・テーブルの構成」を参照してください。

他のADF Faces機能を使用して追加できる機能について理解することが役立つ場合もあります。詳細は、24.1.3項「ピボット・テーブル・コンポーネントの追加機能」を参照してください。

ページにピボット・テーブルを追加する手順:

  1. コンポーネント・パレットで、「ADFデータ視覚化」ページの「ピボット・テーブル」パネルからピボット・テーブルをページにドラッグ・アンド・ドロップします。

  2. プロパティ・インスペクタで、ピボット・テーブルの属性を表示します。ヘルプ・ボタンを使用して、pivotTableコンポーネントの完全なタグ・ドキュメントを表示します。

  3. 「データ」セクションを開きます。このセクションを使用して、次の属性を設定します。

    • Value: ピボット・テーブルをバインドするオブジェクトのEL式を指定します。oracle.adf.view.faces.bi.model.pivotTable.PivotTableModelまたは
      oracle.adf.view.faces.bi.model.DataModel
      インスタンスを指定できます。

    • VarおよびvarStatus: スタンプされたdataCellコンポーネントおよびheaderCellコンポーネントのセル・データにアクセスする変数の指定に使用します。詳細は、24.3.2項「varおよびvarStatusプロパティについて」を参照してください。

  4. 「外観」セクションを開きます。このセクションを使用して、次の属性を設定します。

    • DataFormatおよびHeaderFormat: データ・セルとヘッダー・セルでコンテンツをカスタマイズするための書式設定ルールを作成するために使用します。詳細は、24.5項「ピボット・テーブルのセル・コンテンツのカスタマイズ」を参照してください。

    • PivotLabelVisible: ピボット・ハンドル上にラベルを表示するかどうかを指定します。デフォルト値はtrueです。

    • Sizing: ピボット・テーブルのサイズを幅と高さでどのように決めるかの指定に使用します。デフォルト値はfixedで、ピボット・テーブルは、デフォルト・スタイルまたはインライン・スタイル・プロパティの幅および高さのCSSプロパティに基づいてサイズが設定されます。

      属性をautoに設定して、ピボット・テーブルの高さが、ピボット・テーブルに表示されるコンテンツのサイズによって決まるようにすることもできます。コンテンツがピボット・テーブルのデフォルト・サイズより小さい場合、ピボット・テーブルは収縮します。コンテンツがピボット・テーブルのデフォルト・サイズより大きい場合、ピボット・テーブルは拡大します。

      inlineStyleプロパティを次のように使用すれば、ピボット・テーブルの最大の高さおよび幅を制御できます。

      max-width:400px, max-height:300px
      

      最大の高さまたは幅を超過すると、必要に応じて、ピボット・テーブルにスクロールバーが表示されます。


      注意:

      この属性をautoに設定すると、ピボット・テーブルのフレームは最初にピボット・テーブルのデフォルト・サイズで表示された後、コンテンツのサイズに合せて再調整されます。そのため、ピボット・テーブルを表示するページは、最初に表示された後、レイアウトが変更される場合があります。


    • StatusBarRendered: ピボット・テーブルのステータス・バーを表示するかどうかの指定に使用します。デフォルト値はfalseです。

    • EmptyText: 空のピボット・テーブルを説明するために使用するテキストを入力します。このテキストがHTMLタグで囲まれている場合は、書式設定が行われます。

    • Summary: ピボット・テーブルの目的およびスクリーン・リーダーで使用する場合の構造の説明を入力します。

  5. 「動作」セクションを開きます。このセクションを使用して、次の属性を設定します。

    • PivotEnabled: エンド・ユーザーたピボット・テーブル内でデータのビューを再配置できるかどうかを指定します。デフォルト値はtrueです。ピボット処理ができないように選択する場合、PivotLabelVisible属性もfalseに設定する必要があります。

    • ColumnFetchSizeおよびRowFetchSize: データ・フェッチ・ブロック内の列および行数の指定に使用します。列のデフォルト値は10、行のデフォルト値は25です。ピボット・テーブルへのコンテンツの配信の詳細は、21.2.1項「コンテンツの配信」を参照してください。

24.2.3 ページにピボット・テーブルを追加する場合の処理

コンポーネント・ギャラリを使用してピボット・テーブル・コンポーネントをJSFページに挿入すると、基本のピボット・テーブル・タグが次のようにソース・コードに追加されます。

<dvt:pivotTable id="pt1"/>

すると、コンポーネント・パレットを使用して、ヘッダー・セルとデータ・セルを挿入し、スタンプによりセル・コンテンツを構成できます。詳細は、24.3「ピボット・テーブルでのスタンプの使用方法」を参照してください。

ピボット・テーブルの作成ウィザードでは、ピボット・テーブルのデータ・バインディングおよび構成のための宣言をサポートしています。ウィザードのページは次のことができます。

  • ピボット・テーブルの初期レイアウトの指定

  • ピボット・フィルタ・バーの関連付けおよび構成

  • データ・レイヤーの代替ラベルを指定

  • ドリルの挿入またはフィルタの構成

  • データ値の集計の定義

  • カテゴリおよびデータのソートの構成

  • ピボット・テーブルのライブ・データ・プレビューの表示

詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の「データバインドされたADFピボット・テーブルの作成」の章を参照してください。

24.3 ピボット・テーブルでのスタンプの使用方法

ピボット・テーブル・コンポーネントの直下の子は、headerCellまたはdataCellコンポーネントのいずれかであることが必要です。ピボット・テーブルには、1つのheaderCellコンポーネントと1つのdataCellコンポーネントを含めることができます。これらのコンポーネントにより、スタンプによるセル・コンテンツのカスタマイズが可能になります。スタンプを使用すると、ピボット・テーブルではヘッダー・セルまたはデータ・セルごとに子コンポーネントが作成されません。むしろ、コンポーネントのコンテンツは、ピボット・テーブルの行など、セルごとに1回、繰り返しレンダリングされるか、スタンプされます。

ヘッダー・セルまたはデータ・セルがスタンプされるたびに、現在のセルの値がvarプロパティにコピーされ、そのセルの追加データはvarStatusプロパティにコピーされます。これらのプロパティには、ヘッダーまたはデータ・セル・コンポーネント内のEL式でアクセスでき、たとえば、スタンプされたaf:outputTextコンポーネントにセル値を渡します。ピボット・テーブルのレンダリングが完了したら、varおよびvarStatusプロパティは削除されるか前の値に戻ります。

24.3.1 スタンプとしてのヘッダーおよびデータ・セルの構成方法

ヘッダー・セルまたはデータ・セルでは、一部のタイプの子コンポーネントのみがサポートされます。たとえば、各ヘッダー・セルには読取り専用コンポーネントを含めることができます。アクティビティのないすべてのコンポーネント、およびEditableValueHolderまたはActionSourceインタフェースを実装する大半のコンポーネントなど、特定の読取り専用または入力のコンポーネントを各データ・セルに含めることができます。

ヘッダー・セルおよびデータ・セルに含まれるのは、1つの子コンポーネントのみです。複数の子が必要な場合は、別のコンポーネントにラップする必要があります。レイアウトが必要ない場合は、af:groupを使用することができ、レイアウトを追加せずに単に子をレンダリングするので、結果的に軽量になります。レイアウトが必要な場合は、かわりにaf:panelGroupLayoutのようなレイアウト・コンポーネントを使用できます。詳細は、9.13項「関連する項目のグループ化」を参照してください。

データ・セルの編集は、dataCellの子コンポーネントとして入力コンポーネントを使用することによって有効になります。実行時に、ピボット・テーブルのセルをダブルクリックすることによって編集するセルを開くことができます。詳細は、24.1.1.3項「データ・セルの編集」を参照してください。

例24-1に、af:switcherを使用してヘッダー・セルのスタンプ設定を構成し、レイヤー名によりスタンプされるコンポーネントのタイプを変える(つまり、地理、販路などの異なるコンテンツ)サンプル・コードを示します。例では、headerCellの子として使用できるコンポーネントも説明しています。

例24-1 ヘッダー・セルのスタンプのサンプル・コード

<dvt:pivotTable id="goodPT"
                inlineStyle="width:100%;height:600px;"
                binding="#{editor.component}"
                contentDelivery="immediate"
                value="#{pivotTableHeaderCellDemo.dataModel}"
                headerFormat="#{pivotTableHeaderCellDemo.getHeaderFormat}"
                dataFormat="#{pivotTableHeaderCellDemo.getDataFormat}"
                var="cellData"
                varStatus="cellStatus"
                summary="pivot table">
  <dvt:headerCell id="goodHC>
    <af:switcher id="sw" facetName="#{cellData.layerName}" defaultFacet="Other">
      <f:facet name="Geography">
        <af:group id="g1">
          <af:icon id="idicon11" name="info" shortDesc="Icon" />
          <af:outputText  value="#{cellData.dataValue}" id="ot11"
                          shortDesc="#{cellData.dataValue}" />
        </af:group>
      </f:facet>
      <f:facet name="Channel">
        <af:group id="g2">
          <af:panelGroupLayout id="pgl2" layout="vertical">
          <af:commandImageLink shortDesc="Sample commandImageLink"
                   icon="/images/pivotTableCSVDemo/smily-normal.gif"
                   hoverIcon="/images/pivotTableCSVDemo/smily-glasses.gif"
                   id="cil1"/>
          <af:outputText  value="#{cellData.dataValue}" id="ot1" />
        </af:group>
        <af:commandButton text="Go to Tag Guide page" immediate="true"
                          action="guide" id="cb1"/>
          </af:panelGroupLayout>
      </f:facet>
      <f:facet name="Product">
        <af:panelGroupLayout id="pgl3" layout="vertical">
          <af:outputText value="#{cellData.dataValue}" id="ot12" />
          <af:commandButton text="Go to Tag Guide page" immediate="true"
                                                        action="guide" id="cb2"/>
        </af:panelGroupLayout>
      </f:facet>
      <f:facet name="Other">
        <af:commandLink text="#{cellData.dataValue}"
                        shortDesc="#{cellData.dataValue}" immediate="true"
                        action="guide" id="idcommandlink11"/>
      </f:facet>
    </af:switcher>
  </dvt:headerCell>
</dvt:pivotTable>

図24-19に、サンプル・コードの結果のピボット・テーブルを示します。

図24-19 ピボット・テーブルのヘッダー・セルのスタンプ

カスタマイズされたヘッダー・セルのあるピボット・テーブル

例24-1には、af:switcherを使用してヘッダー・セルのスタンプを構成し、尺度によりスタンプされるコンポーネントのタイプを変える(つまり、売上げ、重量などの異なるコンテンツ)サンプル・コードを示します。例では、dataCellの子として使用できるコンポーネントも説明しています。

例24-2 データ・セルのスタンプ設定のサンプル・コード

<dvt:pivotTable id="goodPT" var="cellData" varStatus="cellStatus">
  <dvt:dataCell>
    <af:switcher id="sw" facetName="#{cellStatus.members.MeasDim.value}"
                 defaultFacet="Other">
      <f:facet name="Sales">
        <af:inputText id="idinputtext1" value="#{cellData.dataValue}"   />
      </f:facet>
      <f:facet name="Units">
        <af:inputText id="idinputtext2" value="#{cellData.dataValue}"   >
          <af:validateLength maximum="6" minimum="2" />
        </af:inputText>
      </f:facet>
      <f:facet name="Weight">
        <af:outputText id="idoutputtext1" value="#{cellData.dataValue}" />
      </f:facet>
      <f:facet name="Color">
        <af:selectOneChoice id="idselectonechoice"
                            value="#{cellData.dataValue}" label="Color">
          <af:selectItem label="red" value="red" shortDesc="shortDesc sample"/>
          <af:selectItem label="coffee" value="coffee"
                         shortDesc="Sample shortDesc text"/>
          <af:selectItem label="milk" value="milk"
                         shortDesc="Another shortDesc sample"/>                            
        </af:selectOneChoice>
      </f:facet>
      <f:facet name="Available">
        <af:selectBooleanCheckbox id="idselectbooleancheckbox"
                                  label="Availability" text="Item Available"
                                  autoSubmit="true"
                                  value="#{cellData.dataValue}"/>
      </f:facet>
      <f:facet name="Supply Date">
        <af:inputDate id="idinputdate1" value="#{cellData.dataValue}"
                      label="Change Date:" simple="true" >
          <af:validateDateTimeRange maximum="2020-12-31" minimum="1980-12-31" />
        </af:inputDate>
      </f:facet>
      <f:facet name="Link">
        <af:commandLink text="#{cellData.dataValue}" immediate="true"
                        action="guide" id="idcommandlink"/>
      </f:facet>
      <f:facet name="Size">
        <af:inputComboboxListOfValues label="Size"id="idInputComboboxListOfValues"
                                   value="#{cellData.dataValue}"
                                   searchDesc="Search Size"
                                   model="#{pivotTableEditBean.listOfValuesModel}"
                                   columns="3"   />
      </f:facet>
      <f:facet name="Other">
        <af:outputText id="idoutputtext2" value="#{cellData.dataValue}"   />  
      </f:facet>
    </af:switcher>
  </dvt:dataCell>
</dvt:pivotTable>

図24-20に、サンプル・コードの結果のピボット・テーブルを示します。

図24-20 ピボット・テーブルのデータ・セルのスタンプ

ピボット・テーブルのデータ・セルのスタンプ

ヘッダーおよびデータ・セルのCSSスタイルも、それらの子コンポーネントのスタイル属性を使用して指定できます。例24-3には、af:outputTextおよびaf:inputTextinlineStyleおよびcontentStyle属性をそれぞれ使用したカスタムCSSスタイルを示します。

例24-3 データ・セルのCSSスタイルのサンプル・コード

<dvt:pivotTable id="goodPT"
                value="#{richPivotTableModel.dataModel}"
                var="cellData"
                varStatus="cellStatus">          
        
  <dvt:dataCell id="dc1"> 
    <af:switcher id="sw1" facetName="#{richPivotTableModel.stampFacet}">
      <f:facet name="outputText">             
        <af:outputText id="ot1" value="#{cellData.dataValue}"
                       inlineStyle="#{myBean.textStyle}"/>    
      </f:facet>  
      <f:facet name="inputText">  
        <af:inputText id="ot2" value="#{cellData.dataValue}"
                      contentStyle="#{myBean.textStyle}" />   
      </f:facet>
        </af:switcher>
    </dvt:dataCell>
  </dvt:pivotTable>

始める前に:

ピボット・テーブルの属性や子タグが機能にどのような影響を与えるかについて理解しておくと役立ちます。詳細は、24.2.1項「ピボット・テーブルの構成」を参照してください。

ページにすでにピボット・テーブルが存在している必要があります。ない場合は、この章の指示に従ってピボット・テーブルを作成します。詳細は、24.2.2項「ページへのピボット・テーブルの追加方法」を参照してください。

ヘッダーまたはデータ・セルのスタンプの追加および構成の手順:

  1. コンポーネント・パレットで、「ADFデータ視覚化」ページの「ピボット・テーブル」パネルからヘッダー・セルまたは「データ・セル」をビジュアル・エディタ内のピボット・テーブルにドラッグ・アンド・ドロップします。

  2. 構造ウィンドウで「dvt:headerCell」または「dvt:dataCell」を右クリックし、「dvt:headerCellの中に挿入」または「dvt:dataCellの中に挿入」ADFデータ視覚化コンポーネントまたは「ADF Faces」を選択します。

  3. 「アイテムの挿入」ダイアログで、ヘッダーまたはデータ・セルにスタンプするコンポーネントを選択します。

  4. 構造ウィンドウで挿入したコンポーネントを選択し、プロパティ・インスペクタでコンポーネントの属性を設定します。

24.3.2 varおよびvarStatusプロパティの使用方法について

ピボット・テーブルのvarおよびvarStatusプロパティは、スタンプされたdataCellおよびheaderCellコンポーネント内のセル・データにアクセスするために使用されます。varプロパティは、ピボット・テーブルのデータ・セル・スタンプを参照するために使用されるEL式変数を指定します。スタンプされたdataCellまたはheaderCellコンポーネントでは、varプロパティを参照し、メタデータ・キーワードを後に続ける必要があります。オプションのvarStatusプロパティは、コンポーネントの状態に関するコンテキスト情報を提供するために使用されるEL式変数を指定します。スタンプされたdataCellまたはheaderCellコンポーネントでは、varStatusプロパティを参照し、次のいずれかを後に続ける必要があります。

  • members: dataCellコンポーネントに対してのみ有効です。現在のデータ・セルと同じ行または列に対応するヘッダー・セルへのアクセスを提供します。

  • model: このコンポーネントのDataModelを返します。

  • cellIndex: このコンポーネントのセル索引を返します。

  • cellKey: このコンポーネントのセル・キーを返します。

例24-4に、varおよびvarStatusを使用して、スタンプされたデータ・セルからデータにアクセスするためのサンプル・コードを示します。

例24-4 データ・セルのスタンプ設定のサンプル・コード

<dvt:pivotTable id="pt1" var="cellData" varStatus="cellStatus">
  <dvt:dataCell>
    <af:outputText id="ot1" value="#{cellData.dataValue}"/>
                   inlineStyle="color:#{(cellStatus.members.Product.dataValue == 'Canoes' ? 'red' : 'blue')};"/>
  </dvt:dataCell>
</dvt:pivotTable>

サンプル・コードでは、各データ・セル値プロパティを使用する場合の構文を次のように説明しています。

  • var: [varプロパティ].[データ・セル・メタデータ・キーワード]

    サンプル・コードでは、af:outputTextの値は、現在のセルの値の#{cellData.dataValue}に設定されています。

  • varStatus: [varStatusプロパティ].[membersmodelcellIndexまたはcellKey].[レイヤー名].[ヘッダー・セル・メタデータ・キーワード]

    データ・セル・コンポーネント値は、ピボット・テーブルのvarStatus (cellStatus)とその後に続くmembers(現在のデータ・セルと同じ行または列に対応したヘッダー・セルにアクセスするため)、目的のヘッダー・セルを含むレイヤー名(Product)、ヘッダー・セル・メタデータ・キーワードdataValueを参照します。

表24-1に、行セット・データ・モデルのデータ・セル用にサポートされているメタデータ・キーワードを示します。

表24-1 データ・セル用にサポートされているメタデータ・キーワード

キーワード 説明

dataValue

最も頻繁に役立つキーワード。現在のセルにデータ値Objectを返します。オブジェクトのアクセス可能なフィールドをEL式により指定するために、dataValue.fieldNameの設定を使用します。

dataCubeMaxおよびdataCubeMin

キューブ内の値全体にわたるセルの尺度に、最大および最小のそれぞれの数値を返します。

dataIsTotal

このセルが集計の場合、ブール値trueを返します。

dataAggregates

セルが集計の場合、列のList<String,Object>、および特定のセルの集計を構成するセル(非集計)を表す値ペアを返します。

aggregateCollection

セルが集計の場合、列のList<String,Object>、およびセルの集計値を構成するキューブ内の値ペアを返します。aggregateCollectionはポストキューブ、dataAggregatesはポストキューブでないことに注意してください。

dataRow

元の行マッピングのデータ・オブジェクトに、属性名からMap<String,Object>を返します。dataRow.foo (fooは行セット属性(列)名の1つ)のように使用します。

dataTypeColumn

値の取得先の行セット属性の名前を表す文字列を返します。

dataRowKey

行データ・モデルのADFモデル行キーを返します。

dataKeyPath

ADFモデル・キー・パス・オブジェクトを返します。


表24-1に、行セット・データ・モデルのヘッダー・セル用にサポートされているメタデータ・キーワードを示します。

表24-2 ヘッダー・セル用にサポートされているメタデータ・キーワード

キーワード 説明

dataValue

最も頻繁に役立つキーワード。現在のセルにデータ値Objectを返します。オブジェクトのアクセス可能なフィールドをEL式により指定するために、dataValue.fieldNameの設定を使用します。

value

ヘッダー・セルの文字列値を返します。キューブ・データ・モデルでも使用できます。

label

ヘッダー・セルの文字列ラベルを返します。キューブ・データ・モデルでも使用できます。

isTotal

ヘッダー・セルが集計を表す場合、ブール値trueを返します。

drillState

現在のヘッダー・セルのドリルの状態を表す整数値を返します(該当する場合)。0はドリル不可能、1はドリル可能、2はドリル済を示します。キューブ・データ・モデルでも使用できます。

memberMetadataColumn

ヘッダー・セルの文字列属性列を返します。

layerName

ヘッダー・セルを含むレイヤーの名前を表す文字列を返します。

layerLabel

このヘッダー・セルを含むレイヤーのラベル(ある場合)を表す文字列を返します。layerNameに戻る可能性があります。


例24-5に、データ・セルにスタンプされたスパークチャートを使用するサンプル・コードを示します。結果のピボット・テーブルは、図24-11に示しています。

例24-5 データ・セルにスパークチャートをスタンプする場合のサンプル・コード

<dvt:pivotTable id="pivotTable1"
                value="#{pivotTableSparkChart.dataModel}"
                var="cellData"
                varStatus="cellStatus">
  <dvt:dataCell>
    <af:switcher id="s2"
                 facetname="O___b_cellData_dataIsTotal__b__"
                 defaultFacet="false">
      <f:facet name="true">
        <dvt:sparkChart id="sc1" shortDesc="Spark Chart"
                        highMarkerColor="#008200"
                        lowMarkerColor="#ff0000">
          <af:iterator id="i1"
                       value="#{cellData.aggregateCollection}"
                       var="sparks" >
            <dvt:sparkItem id="si1"
                           value="#{sparks.dataValue}"/>
          </af:iterator>
        </dvt:sparkChart>
      </f:facet>
      <f:facet name="false">
        <af:outputText id="ot1" value="#{cellData.dataValue}"/>
      </f:facet>
    </af:switcher>
  </dvt:dataCell>
 
  <dvt:headerCell>
    <af:switcher id="s3"
                 facetname="O___b_cellData_isTotal__b__"
                 defaultFacet="false">
      <f:facet name="true">
        <af:outputText id="ot2" value="Trend"/>
      </f:facet>
      <f:facet name="false">
        <af:outputText id="ot3" value="#{cellData.dataValue}"/>
      </f:facet>
    </af:switcher>
  </dvt:headerCell>
</dvt:pivotTable>

例24-6に、データ・セルでゲージを使用する場合のサンプル・コードを示します。結果のピボット・テーブルは、図24-13に表示されています。

例24-6 データ・セルにゲージをスタンプする場合のサンプル・コード

<dvt:pivotTable
                id="pivotTable2"
                value="#{pivotTableGauge.dataModel}"
                var="cellData"
                varStatus="cellStatus">
  <dvt:dataCell>
    <dvt:gauge id="g1" shortDesc="Gauge"
               imageWidth="80" imageHeight="80" imageFormat="PNG_STAMPED"
               value="#{cellData.dataValue}"
               minValue="#{cellData.dataCubeMin}"
               maxValue="#{cellData.dataCubeMax}"/>
  </dvt:dataCell>
</dvt:pivotTable>

例24-7に、ピボット・テーブルのヘッダー・セルに基づいて書式を設定する場合のサンプル・コードを示します。

例24-7 ヘッダー・セルに基づく書式設定の場合のサンプル・コード

<dvt:pivotTable
                id="pivotTable3"
                value="#{pivotTableMemberFormatting.dataModel}"
                var="cellData"
                varStatus="cellStatus">
  <dvt:headerCell>
    <af:switcher 
                 facetname="O___b_cellData_layerName__b__"
                 defaultFacet="Other">
      <f:facet name="Product">
        <af:outputText id="ot1"
                       value="#{cellData.dataValue}"
                       inlineStyle="color:#{(cellData.dataValue == 'Canoes' ? 'red' : 'blue')};"/>
      </f:facet>
      <f:facet name="Other">
        <af:outputText id="ot2" value="#{cellData.dataValue}"/>
      </f:facet>
    </af:switcher>
  </dvt:headerCell>
 
  <dvt:dataCell>
    <af:outputText id="ot3" value="#{cellData.dataValue}"
                   inlineStyle="color:#{(cellStatus.members.Product.dataValue == 'Canoes' ? 'red' : 'blue')};"/>
  </dvt:dataCell>
</dvt:pivotTable>

図24-21に、ヘッダー・セルに基づく書式設定のサンプル・コードの結果得られたピボット・テーブルを示します。

図24-21 ヘッダー・セルに基づく書式設定

ヘッダー・セルに基づく書式設定

24.4 ピボット・テーブルでのピボット・フィルタ・バーの使用方法

ピボット・フィルタ・バーを追加することにより、ピボット・テーブルでのデータ・フィルタ処理能力を強化できます。ピボット・テーブルの行エッジまたは列エッジですでに表示されなくなったゼロ以上のデータのレイヤーは、ページ・エッジでは表示されます。図24-1に、ピボット・テーブルに表示されているデータのフィルタ処理に使用できる四半期および月のレイヤーを持つピボット・フィルタ・バーを示します。

図24-22 データ・レイヤー・フィルタを持つピボット・フィルタ・バー

データ・レイヤー・フィルタのあるピボット・フィルタ・バー。

行、列またはページ・エッジ間でレイヤーをピボットすることにより、ピボット・テーブルでのデータの表示を変更することもできます。目的に応じてエッジ間でレイヤーをドラッグするには、ピボット・ハンドルを使用します。図24-23に、Channelデータ・レイヤーをページ・エッジに対してピボットして変更されたピボット・テーブルとピボット・フィルタ・バーを示します。

図24-23 ピボット後のピボット・テーブルおよびピボット・フィルタ・バー

ピボット後のピボット・テーブルおよびフィルタ・バー。

24.4.1 ピボット・フィルタをピボット・テーブルに関連付ける方法

ピボット・フィルタ・バー・コンポーネントpivotFilterBarとピボット・テーブル・コンポーネントpivotTableを、データ・モデルと関連のプロパティが両方のコンポーネントと連係するように構成することにより関連付けます。例24-8に、ピボット・フィルタ・バーをピボット・テーブルと関連付ける場合のサンプル・コードを示します。

例24-8 ピボット・フィルタ・バーのサンプル・コード

<dvt:pivotFilterBar id="pf1" value="#{binding.pt.pivotFilterBarModel}"
     modelName="pt1Model"/>
<dvt:pivotTable id="pt1" value="#{binding.pt.dataModel}"  modelName="pt1Model"
     partialTriggers="pf1"/>

ピボット・フィルタ・バーは、次のどの方法でもピボット・テーブルに関連付けることができます。

  • データ・コントロール・パネルを使用してピボット・テーブルを作成します。

    データ・コントロール・パネルからデータ・コレクションをドラッグして、ページ上にピボット・テーブルを作成する場合、ピボット・テーブルの作成ウィザードの「表示属性の選択」ページで、ピボット・テーブルと関連付けるピボット・フィルタ・バーを作成するためのオプションが表示されます。ページ・エッジでデータ・レイヤーを表すゼロ以上の属性を指定することを選択できます。データ・モデルおよび関連付けられたプロパティは自動的に構成されます。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のデータバインドされたADFピボット・テーブルの作成に関する項を参照してください。

  • データにバインドされたピボット・テーブルにピボット・フィルタ・バーを追加します。

    コンポーネント・パレットの「ADFデータ視覚化」ページの「ピボット・テーブル」パネルから、データ・コレクションにバインドされているpivotTable要素の隣のpivotFilterBar要素をドラックすることができ、データ・バインディングが自動的に行われます。

  • データにバインドされていないピボット・テーブルにピボット・フィルタ・バーを追加します。

    コンポーネント・パレットの「ADFデータ視覚化」ページの「ピボット・テーブル」パネルから、データ・コレクションにバインドされていないpivotTable要素の隣のpivotFilterBar要素をドラックすることができます。この場合、ピボット・フィルタ・バーがピボット・テーブルと連係するように、データ・モデルと関連プロパティを構成する必要があります。

24.5 ピボット・テーブルのセル・コンテンツのカスタマイズ

ピボット・テーブルのすべてのセルは、ヘッダー・セルまたはデータ・セルのいずれかです。セルをレンダリングする前、ピボット・テーブルではメソッド式がコールされます。dvt:pivotTableコンポーネントの次の属性にメソッド式を指定することで、ピボット・テーブルのヘッダー・セルとデータ・セルのコンテンツをカスタマイズできます。

24.5.1 データ・セルに対するCellFormatオブジェクトの作成方法

データ・セルのコンテンツのカスタマイズを指定するには、oracle.dss.adf.view.faces.bi.component.pivotTable.CellFormatのインスタンスを返すメソッド式をコーディングする必要があります。

CellFormatオブジェクトのインスタンスにより、セルのCSSスタイルを変更する引数を指定できます。たとえば、この引数を使用して、セルの背景色を変更します。

  • コンバータ: javax.faces.convert.Converterのインスタンスで、セルのRAW値の数値、日付またはテキストの書式設定に使用されます。

  • CSSスタイル: セルのCSSスタイルの変更に使用されます。たとえば、この引数を使用して、セルの背景色を変更します。

  • CSSテキスト・スタイル: セルのテキストのCSSスタイルの変更に使用されます。たとえば、この引数を使用してテキストをボールドに設定します。

  • 新規のRAW値: データ・モデルから返されたセルの基礎となる値の変更に使用されます。たとえば、州名の略記をフル・ネームに変更するよう選択できます。このケースでは、略記NYがNew Yorkに変更されます。

データ・セルにCellFormatオブジェクトのインスタンスを作成する手順:

  1. 書式設定するデータ・セルに対し、oracle.adf.view.faces.bi.component.pivotTable.DataCellContextオブジェクトを作成します。DataCellContextメソッドは、コンストラクタに次のパラメータを必要とします。

    • model: ピボット・テーブルで使用されるdataModelの名前。

    • row: 操作対象のデータ・セルを含むゼロベースの行を指定する整数。

    • column: 書式設定対象のデータ・セルを含むゼロベースの列を指定する整数。

    • qdr: 書式設定対象のデータ・セルの完全修飾参照であるQDR

    • value: 書式設定対象のデータ・セルの値を含むjava.lang.Object

  2. ピボット・テーブルのdataFormat属性のメソッド式にDataCellContextを渡します。

  3. メソッド式に、ピボット・テーブルのデータ・セルに適用する書式を指定するコードを記述します。このメソッド式はCellFormatオブジェクトを返す必要があります。

24.5.2 セルの書式の変更方法

ヘッダーおよびデータ・セルの書式設定スタイルを適用することで、ピボット・テーブルで表示されるデータの様々な面を強調できます。図24-24に、製品および製品カテゴリについて生成された売上げ合計のピボット・テーブルを示します。このピボット・テーブルでは、合計を含む行のテキストがボールドで、背景が網掛け(スタイルの変更)で表示されます。この変更は、ピボット・テーブルの行ヘッダー・セルとデータ・セルの両方に表示されます。合計の行ヘッダーには、「Sales Total」というテキストが含まれています。

ピボット・テーブルには、データ・セルのストップライト書式設定と条件付き書式設定も示されています。詳細は、24.5.3項「ピボット・テーブルでのストップライトおよび条件付き書式設定の作成方法」を参照してください。

図24-24 製品カテゴリごとの売上げデータ

製品カテゴリごとの売上げデータ

例24-9に、売上げ合計に必要で、ストップライトの書式設定には必要ないカスタム書式を作成するサンプル・コードを示します。この例には、dvt:pivotTableタグのdataFormat属性とheaderFormat属性の両方にメソッド式のコードが含まれています。ピボット・テーブルにストップライトの書式設定も含める場合は、例24-10のコードを含めます。

例24-9 ピボット・テーブルでスタイルを変更するサンプル・コード

public CellFormat getDataFormat(DataCellContext cxt)
{
    CellFormat cellFormat = new CellFormat(null, null, null);
    QDR qdr = cxt.getQDR();
    //Obtain a reference to the product category column.
    Object productCateg = qdr.getDimMember("ProductCategory");
     //Obtain a reference to the product column.
    Object product = qdr.getDimMember("ProductId");

     if (productCateg != null && productCateg.toString().equals("Sales Total")) 
      {
      cellFormat.setStyle("background-color:#C0C0C0");
      }
     else if (product != null && product.toString().equals("Sales Total")
      {
       cellFormat.setStyle("background-color:#C0C0C0");
      }
    return cellFormat;
}


public CellFormat getHeaderFormat(HeaderCellContext cxt) 
{
  if (cxt.getValue() != null) 
   {
    String header = cxt.getValue().toString();
    if (header.equals("Sales Total")) 
     {
        return new CellFormat(null, "background-color:#C0C0C0", 
                              "font-weight:bold");
      }
    }
    return null;
  }

24.5.3 ピボット・テーブルでのストップライトおよび条件付き書式設定の作成方法

ピボット・テーブルのセルのストップライト書式設定と条件付き書式設定は、セルのコンテンツをカスタマイズする一例です。この種のカスタマイズでは、ユーザーはストップライト書式設定に関連付ける高値と低値を指定するようアプリケーションから要求されることがあります。通常、3つの色が次のように使用されます。

  • 高値以上の値は緑に色付けされ、問題がないことを示します。

  • 高値と低値の間の値は黄色に色付けされ、高度な基準に達していないことが警告されます。

  • 低値以下の値は赤に色付けされ、最低限許容されるレベルに達していないことを示します。

図24-24に、最低限、許容範囲および標準以下の州の売上げに対するストップライト書式設定付きのデータ・セルを示します。

例24-10に、合計を表示しないピボット・テーブルでストップライト書式設定を行うコードを示します。合計を表示するピボット・テーブルでストップライト書式設定を行う場合は、(合計の行を扱う)例24-9のコードとストップライト書式設定と条件付き書式設定のコードを組み合せます。

例24-10 ストップライト書式設定と条件付き書式設定のサンプル・コード

public CellFormat getDataFormat(DataCellContext cxt)
{
   //Use low and high values provided by the application.
  double low = m_rangeValues.getMinimum().doubleValue() * 100;
  double high = m_rangeValues.getMaximum().doubleValue() * 100;

  CellFormat cellFormat = new CellFormat(null, null, null);

 // Create stoplight format
 if (isStoplightingEnabled()) 
 {
   String color = null;
   Object value = cxt.getValue();
   if (value != null && value instanceof Number) 
   {
       double dVal = ((Number)value).doubleValue();
       if (dVal <= low) 
       {
         color = "background-color:" + ColorUtils.colorToHTML(m_belowColor) + ";";
       }
       else if (dVal > low && dVal <= high) 
       {
         color = "background-color:" + ColorUtils.colorToHTML(m_goodColor) + ";";
       }
       else if (dVal > high) 
       {
         color = "background-color:" + ColorUtils.colorToHTML(m_aboveColor) + ";";
       }
    }
    cellFormat.setStyle(color);
  }
    return cellFormat;
}

24.6 ピボット・テーブルでの選択の使用方法

ピボット・テーブルでの選択により、ユーザーはピボット・テーブルで複数のセルを選択できます。行ヘッダー、列ヘッダーまたはデータ・セルを含めて3つの領域のいずれか1つのみを一度に選択できます。

現在選択されているセルに基づいて、アプリケーションはポップアップ・メニューのカスタマイズされたコンテンツの表示などの機能を実装できます。例24-11に、現在選択されているヘッダー・セルを取得するためのサンプル・コードを示します。

例24-11 選択されているヘッダー・セルを取得するためのサンプル・コード

UIPivotTable pt = getPivotTable()
if (pt == null)
    return null;
HeaderCellSelectionSet headerCells = null;
if (pt.getSelection().getColumnHeaderCells().size() > 0) {
    headerCells = pt.getSelection().getColumnHeaderCells();
} else if (pt.getSelection().getRowHeaderCells().size() > 0) {
    headerCells = pt.getSelection().getRowHeaderCells();
}

実行時に、データ・セルを選択すると、図24-25に示すように、そのセルが強調表示されます。

図24-25 選択されたデータ・セル

選択されたデータ・セル

24.7 部分ページ・レンダリングによるピボット・テーブルの更新

部分ページ・レンダリング(PPR)により、ピボット・テーブル、データ・セルおよびヘッダー・セルを更新できます。たとえば、チェックボックスによりトリガーされた場合、ピボット・テーブルに合計を表示できます。PPRでは、ページ上の個々のコンポーネントが再レンダリングされ、ページ全体をリフレッシュする必要がありません。PPRの詳細は、第8章「部分ページ・レンダリングについて」を参照してください。


注意:

デフォルトでは、ADFピボット・テーブルで自動PPRがサポートされ、バック・ビジネス・ロジックの結果として値が変更されるコンポーネントが自動的に再レンダリングされます。アプリケーションでFusionテクノロジ・スタックを使用する場合、任意のページで自動部分ページ・レンダリング機能を有効にできます。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の自動部分ページ・レンダリングおよびイテレータ・バインディングに関する項を参照してください。


別のコンポーネントで発生したイベントに基づいてコンポーネントを再レンダリングするには、どのコンポーネントがトリガーかを宣言する必要があります。partialTriggers属性を使用してピボット・テーブルの部分更新をトリガーするコンポーネントのIDのリストを提供します。ピボット・テーブルはトリガー・コンポーネントをリスニングし、いずれかのトリガー・コンポーネントがなんらかの更新を発生させるイベントを受信すると、ピボット・テーブルも更新されます。

例24-12に、チェック・ボックスがトリガーされたときに、合計を表示することによってピボット・テーブルを更新するサンプル・コードを示します。トリガー・コンポーネントはIDをpartialTriggers値として使用します。

例24-12 ピボット・テーブルの部分更新

<dvt:pivotTable id="goodPT"
    value="#{richPivotTableModel.dataModel}"
    partialTriggers="showTotals"/>

  <af:selectBooleanCheckbox id="showTotals" autoSubmit="true" label="Show Totals"
    value="#{richPivotTableModel.totalsEnabled}"/>

24.8 ピボット・テーブルからのエクスポート方法

ピボット・テーブルからMicrosoft Excelスプレッドシートにデータをエクスポートできます。コマンド・ボタンやコマンド・リンクなどのアクション・ソースを作成し、exportPivotTableDataコンポーネントを追加して、エクスポートするデータに関連付けます。ピボット・テーブル全体がエクスポートされるように、またはユーザーが選択した行のみがエクスポートされるようにexportPivotTableDataコンポーネントを構成できます。たとえば、図24-26では、ユーザーがデータをExcelスプレッドシートにエクスポートできるコマンド・ボタン・コンポーネントがあるピボット・テーブルを示しています。

図24-26 Excelへのエクスポート・コマンド・ボタンのあるピボット・テーブル

Excelへのエクスポート・ボタンのあるピボット・テーブル

実行時に、ユーザーがコマンド・ボタンをクリックすると、デフォルトでは、すべての行および列がコンポーネントのfilename属性で指定されたファイルに書き込まれたExcel形式でエクスポートされます。または、exportedData属性をselectedに設定することにより、ユーザーが選択する行のみがエクスポートされるように、exportPivotTableDataコンポーネントを構成できます。例24-13に、Excelへのエクスポート・コマンド・ボタンのサンプル・コードを示します。

例24-13 Excelへのエクスポート・コマンド・ボタンのサンプル・コード

<dvt:pivotTable id="pivotTableToExport"
               binding="#{editor.component}"
               contentDelivery="immediate"
               value="#{pivotTableExport.dataModel}" summary="pivot table"/>
 
<h:panelGrid id="pfl" columns="2" cellpadding="3">
  <af:commandButton text="Export All" id="exportAll">
    <dvt:exportPivotTableData exportedId="pivotTableToExport" type="excelHTML"
                              exportedData="all" filename="all.xls"
                              title="All pivotTable data"/>
  </af:commandButton>
  <af:commandButton text="Export Selected" id="exportSelected">
    <dvt:exportPivotTableData exportedId="pivotTableToExport" type="excelHTML"
                              exportedData="selected" filename="selected.xls"
                              title="Selected pivotTable data"/>
  </af:commandButton>
</h:panelGrid>

図24-27に、「すべてのエクスポート」ボタンをクリックしたときの結果のExcelスプレッドシートを示します。

図24-27 Excelスプレッドシートへのピボット・テーブルのエクスポート

Excelスプレッドシートへのピボット・テーブルのエクスポート

注意:

ファイルがファイル拡張子で指定されたフォーマットとは異なることを示す警告がExcelに表示されることがあります。この警告は無視して問題ありません。