34
ランキング・レポートの作成
この章では、データを様々な方法でランク付けすることが可能なレポートについて学習します。この章の手順に従うと、図34-1に示すようなレポート出力を生成できます。
図34-1 数値とパーセンテージで顧客をランク付けした表形式のレポート出力
画像の説明
概要
データをランク付けするレポートは、ユーザー指定のバインド・パラメータと比較して作成されます。これによって1つのレポートのデータを、カウントやパーセンテージなど、様々な方法でランク付けできるようになります。実行時にランキング条件を設定したり、以前に指定された値をランキング条件のデフォルトとして使用したりすることができます。
データ・リレーションシップ
このレポートでは、データをフェッチする問合せが1つ必要です。データをランク付けするには、次のオブジェクトを作成します。
- 実行時にカットオフ・ポイントを設定するためのバインド・パラメータ。
- レコードがデータベースからフェッチされるたびに1が加算されるバインド・パラメータ。このパラメータの値は、カットオフ用のバインド・パラメータと比較されます。
- カットオフ値内にあるレコードのみを表示するようにカスタマイズしたグループ・フィルタ。パッケージされたフィルタではなくカスタマイズされたフィルタを使用することで、カットオフ値をパラメータ化できます。
レイアウト
このレポートでは、表形式のレイアウト・スタイルを少し修正したものを使用します。
使用例
この例では、上位3件までの顧客と売上全体の75%を占める顧客の名前と購入金額合計を表示するレポートを作成します。また、レポートのエンド・ユーザーが実行時にランキング条件(つまり、すべての顧客のうち上位x件の顧客と上位y%の顧客)を設定できるようにします。
このサンプル・レポートの作成過程では、次を行います。
ランキング・レポートのサンプルを表示するには、サンプル・フォルダranking
を開き、Oracle Reportsのサンプルrank.rdf
を開きます。アクセス方法の詳細は、「はじめに」の「サンプル・レポートへのアクセス」を参照してください。
34.1 この例の前提条件
この章の例を作成するには、Summit Sporting Goods(SUMMIT)スキーマに対するアクセス権が必要です。このスキーマをインストールするSQLスクリプトをダウンロードするには、「はじめに」の「データ・ソースへのアクセス」を参照してください。
34.2 データ・モデルと表形式のレイアウトの作成
この例のように、単一問合せレポートを作成する場合、レポート・ウィザードを使用して、データ・モデルとレイアウトを同時に作成できます。
データ・モデルとレイアウトを作成するには:
- Reports Builderを起動します。すでに起動している場合は、「ファイル」→「新規」→「レポート」を選択します。
- 「ようこそ」ダイアログ・ボックスまたは「新規レポート」ダイアログ・ボックスで、「レポート・ウィザードを使う」を選択して「OK」をクリックします。
- 「ようこそ」ページが表示されたら、「次へ」をクリックします。
- 「レポート・タイプ」ページで、「ペーパー・レイアウトのみ作成」を選択し、「次へ」をクリックします。
- 「スタイル」ページでレポートのタイトルを入力し、「表形式」を選択して「次へ」をクリックします。
- 「データ・ソース」ページで、「SQL問合せ」をクリックし、「次へ」をクリックします。
- 「データ」ページの「データ・ソース定義」フィールドに次のSELECT文を入力します。
SELECT CUSTNAME CNAME, SUM(AMOUNT) SUM_AMT FROM SALES
GROUP BY CUSTNAME
ORDER BY SUM(AMOUNT) DESC
注意
この問合せは、次のいずれかの方法で入力できます。
- 提供されているテキスト・ファイル
rank_code.txt からコードをコピーして「データ・ソース定義」フィールドに貼り付けます。
- 「クエリー・ビルダー」をクリックして、コードを入力せずに問合せを作成します。
- 「データ・ソース定義」フィールドにコードを入力します。
|
- 「次へ」をクリックします。
注意
データベースにまだ接続していない場合は、「クエリー・ビルダー」または「次へ」をクリックしたときに、データベースに接続するよう求められます。この例に該当するスキーマが含まれるデータベースに接続してください。第34.1項「この例の前提条件」に、この例のサンプル・スキーマの要件に関する説明があります。
|
- 「フィールド」ページで、「>>」ボタンをクリックしてすべてのフィールドを「表示フィールド」リストに移動し、「次へ」をクリックします。
- 「合計」ページで「次へ」をクリックします。
- 「ラベル」ページで、ラベルとフィールド幅を次のように設定し、「次へ」をクリックします。
- 「テンプレート」ページで「終了」をクリックして、ペーパー・デザイン・ビューでレポート出力をプレビューします。表示は次のようになります。
図34-2 ランキング・レポートのペーパー・デザイン・ビュー
画像の説明
34.3 上位顧客数によるランキング・ロジックの作成
レポートにデータ・モデルとレイアウトを作成したら、表示する顧客数を制御するロジックを追加できます。まず、ユーザーが実行時に値を入力できるパラメータを2つ作成します。次に、そのパラメータを使用して表示するデータを制御するグループ・フィルタを作成します。
パラメータを作成してグループ・フィルタを追加するには:
- オブジェクト・ナビゲータの「データ・モデル」ノードで、「ユーザー・パラメータ」ノードをクリックします。
- 「編集」→「作成」を選択して、「ユーザー・パラメータ」ノードの下に新しいユーザー・パラメータを作成します。
- プロパティ・インスペクタが表示されていない場合は、新しいユーザー・パラメータ(P_1)を右クリックして「プロパティ・インスペクタ」を選択し、プロパティ・インスペクタを表示してプロパティを設定します。
- 「一般情報」で、「名前」プロパティを「CUTOFF_CNT」に設定します。
- 「パラメータ」で、「データ型」プロパティを「Number」、「幅」プロパティを「1」、「初期値」プロパティを「3」に設定します。
- 前述の手順を繰り返して、別のユーザー・パラメータを作成します。プロパティは、次のように設定します。
- 「一般情報」で、「名前」プロパティを「INCR_CNT」に設定します。
- 「パラメータ」で、「データ型」プロパティを「Number」、「幅」プロパティを「3」、「初期値」プロパティを「0」に設定します。
- オブジェクト・ナビゲータの「データ・モデル」ノードで、「グループ」ノードを開き、「G_CNAME」グループの横のプロパティ・アイコンをダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。
- 「グループ」で、「フィルタ・タイプ」プロパティを「PL/SQL」に設定し、「PL/SQLフィルタ」プロパティ・フィールドをクリックしてPL/SQLエディタを表示します。
- PL/SQLエディタで、テンプレートを使用して次のPL/SQLコードを入力します。
function G_CNAMEGroupFilter return boolean is
begin
:incr_cnt:=:incr_cnt+1;
if :incr_cnt <= :cutoff_cnt then
return (TRUE);
else
return(FALSE);
end if;
end;
注意
提供されているテキスト・ファイルrank_code.txt から、このコードをコピーして貼り付けると、コードを入力できます。このコードはグループ・フィルタ用です。
|
- 「コンパイル」をクリックします。
- 「閉じる」をクリックします。
このフィルタによって、G_CNAME内のレコードがフェッチされるたびにカウンタに1が加算され、そのカウンタ値が指定されているカットオフと比較されます。カウンタ値がカットオフを超えると、レコードはそれ以上フェッチされなくなります。
ヒント
ペーパー・デザイン・ビューを開いたままでこのロジックを追加した場合は、そのペーパー・デザイン・ビューではレコードは返されません。この問題を解決するには、他のビュー(データ・モデル・ビューなど)の1つを表示してから、ペーパー・デザイン・ビューに戻ります。ランタイム・パラメータ・フォームで、2つのパラメータINCR_CNTおよびCUTOFF_CNTに値を入力するよう求められます。
|
- ツールバーの「ペーパー・レイアウトを実行」ボタンをクリックしてランタイム・パラメータ・フォームを表示します。このフォームから、CUTOFF_CNTおよびINCR_CNTのデフォルト値を変更できます。
- 「レポート実行」ボタンをクリックして、ペーパー・デザイン・ビューにレポート出力を表示します。
- レポートを
rank_<自分のイニシャル>.rdf
という名前で保存します。
図34-3 上位3顧客に制限した表形式のレポート出力
画像の説明
34.4 パラメータ用のレイアウト・オブジェクトの追加
リストに表示される顧客数が一目でわかるようにする方法として、レポートにCUTOFF_CNT値を表示する必要があります。このタスクを実行するには、パラメータを参照するボイラープレート・テキスト・オブジェクトを作成します。
- オブジェクト・ナビゲータで、「ペーパー・レイアウト」ノードの横のビュー・アイコンをダブルクリックして、ペーパー・レイアウト・ビューを表示します。
- ペーパー・レイアウト・ビューとオブジェクト・ナビゲータが同時に見えるように、両方を横に並べて表示します。
- オブジェクト・ナビゲータで、「検索」フィールドに
M_G_CNAME_GRPFR
と入力します。
- オブジェクト・ナビゲータで「M_G_CNAME_GRPFR」をクリックし、ペーパー・レイアウト・ビューでもそれが選択されるようにします。
- ペーパー・レイアウト・ビューのタイトル・バーをクリックして、アクティブなウィンドウにします。
- キーボードの[Ctrl]を押しながら[A]を押して、M_G_CNAME_GRPFRとそのすべての内容を選択します。
注意
オブジェクト・ナビゲータの「検索」フィールドを使用して、特定のオブジェクトを検索することもできます。ペーパー・レイアウト・ビューが表示されているときにオブジェクト・ナビゲータで項目を選択すると、対応するオブジェクトがペーパー・レイアウト・ビューでも選択されます。
|
- [↓]キーを使用して、各項目を約1インチ(2.5 cm)下に移動します。
- ツールバーのフォント・リストから、「Arial(欧文)」、ポイント・サイズ「10」を選択します。
- ツール・パレットの「テキスト」ツールをクリックします。
- ラベル「Customer Name」のすぐ上をクリックし、新しいボイラープレート・テキスト・オブジェクトを作成して、次のテキストを入力します。
Top &CUTOFF_CNT Customers:
- ペーパー・レイアウト・ビューの空き領域に移動し、マウス・ボタンをクリックしてテキスト・モードを終了します。作成したテキスト・オブジェクトは、選択されたままになっています。この状態で、矢印キーを使用して位置を調整できます。
- ツールバーの「太字」ボタンをクリックして、新しいテキストを太字にします。
- 作成したオブジェクトとともに選択されるように、[Shift]を押しながらラベル「Customer Name」と「Total Purchase」をクリックします。
- ツールバーの「下線」ボタンをクリックします。
- ペーパー・レイアウト・ビューの空き領域をクリックして、それらすべての選択を解除します。
- 「F_SUM_AMT」をクリックし、「ツール」→「プロパティ・インスペクタ」を選択してプロパティ・インスペクタを表示し、次のプロパティを設定します。
- 「フィールド」で、次のように入力して「書式マスク」プロパティを設定します。
-$NNN,NN0.00
- ツールバーの「ペーパー・デザイン」ボタンをクリックし、ペーパー・デザイン・ビューを表示します(ランタイム・パラメータ・フォームが表示されている場合は、ツールバーの「レポート実行」ボタンをクリックします)。
図34-4 パラメータ値が表示された表形式のレポート出力
画像の説明
- レポートを保存します。
34.5 パラメータ・フォームの作成
デフォルトでは、両方のユーザー・パラメータがランタイム・パラメータ・フォームに表示されます。実際は、ユーザーが設定するのはCUTOFF_CNTのみです。INCR_CNT(各レコードごとに増加するカウンタの量)は、ユーザーが設定できないようにします。ランタイム・パラメータ・フォームにINCR_CNTが表示されないようにするには、独自のパラメータ・フォームを作成します。
パラメータ・フォームを作成するには:
- 「ツール」→「パラメータ・フォーム・ビルダー」を選択します。
- 「パラメータ・フォーム・ビルダー」ダイアログ・ボックスで、「INCR_CNT」が見つかるまでパラメータのリストを下にスクロールします。
- 「INCR_CNT」をクリックして選択を解除します。
- 「CUTOFF_CNT」のラベルを次のように変更します。
# of Top Customers:
- 「OK」をクリックします。
- ツールバーの「ペーパー・レイアウトを実行」ボタンをクリックします。
- ランタイム・パラメータ・フォームで、「# of Top Customers」に値を入力して、ツールバーの「レポート実行」ボタンをクリックします。ランタイム・パラメータ・フォームで指定した数のレコードが表示されます。また、レコードは購入金額合計が大きい方から順に表示されます。
ヒント
追加の演習として、CUTOFF_CNTの「初期値」プロパティを変更すると、ランタイム・パラメータ・フォームがどのように変わるかを確認できます。
|
- レポートを保存します。
34.6 パーセンテージによるランク付けの追加
顧客をランク付けするもう1つの方法は、売上全体のパーセンテージによるランク付けです。考え方はカウントによるランク付けと同じですが、重要な相違点があります。レコード数とともに変動する合計サマリーのパーセントを計算するためには、すべてのデータをフェッチする必要があるため、不要なデータの選別にグループ・フィルタを使用できません。この場合、繰返し枠でフォーマット・トリガーを使用して、各時点での合計値をカットオフ・パラメータと比較する必要があります。
パーセンテージ計算のためにデータをフェッチするには:
- オブジェクト・ナビゲータで、「データ・モデル」ノードの横のビュー・アイコンをダブルクリックします。
- 表示されたデータ・モデル・ビューで、ツール・パレットの「SQL問合せ」ツールをクリックし、問合せQ_1の右にあるデータ・モデル・ビューの空いている場所をクリックして、「SQL問合せ文」ダイアログ・ボックスを表示します。
- 「SQL問合せ文」フィールドに、次の
SELECT
文を入力します。
SELECT CUSTNAME CNAME2, SUM(AMOUNT) SUM_AMT2
FROM SALES
GROUP BY CUSTNAME
ORDER BY SUM(AMOUNT) DESC
注意
提供されているテキスト・ファイルrank_code.txt から、このコードをコピーして貼り付けると、コードを入力できます。このコードはパーセンテージ計算用です。
|
- 「OK」をクリックします。データ・モデルは次のようになります。
図34-5 ランキング・レポートのデータ・モデル・ビュー
画像の説明
- レポートを保存します。
パーセンテージによるカットオフ用のパラメータを作成するには:
- オブジェクト・ナビゲータの「データ・モデル」ノードで、「ユーザー・パラメータ」ノードをクリックします。
- 「編集」→「作成」を選択して、「ユーザー・パラメータ」ノードの下に新しいユーザー・パラメータを作成します。
- プロパティ・インスペクタが表示されていない場合は、新しいユーザー・パラメータ(P_1)を右クリックして「プロパティ・インスペクタ」を選択し、プロパティ・インスペクタを表示してプロパティを設定します。
- 「一般情報」で、「名前」プロパティを「CUTOFF_PCT」に設定します。
- 「パラメータ」で、「データ型」プロパティを「Number」、「幅」プロパティを「2」、「初期値」プロパティを「75」に設定します。
- データ・モデル・ビューで、グループ・オブジェクト「G_CNAME2」をクリックし、下部のハンドルをクリックして約0.25インチ(0.5 cm)下にドラッグして、グループのサイズを大きくします。
- ツール・パレットの「サマリー列」ツールをクリックします。
- 「SUM_AMT2」の下の空き領域をクリックして、サマリー列を作成します。
- 新しいサマリー列オブジェクト(CS_1)をダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。
- 「一般情報」で、「名前」プロパティを「R_PCT」に設定します。
- 「列」で、「データ型」プロパティを「Number」、「幅」プロパティを「10」に設定します。
- 「サマリー」で、「ファンクション」プロパティを「割合(%)」、「ソース」プロパティを「SUM_AMT2」、「リセット位置」プロパティを「Report」、「計算位置」プロパティを「Report」に設定します。
パーセンテージによる顧客リスト用の第2のレイアウトを作成するには:
- ツールバーの「ペーパー・レイアウト」ボタンをクリックして、ペーパー・レイアウト・ビューを表示します。
- ペーパー・レイアウト・ビューで、ツール・パレットの「レポート・ブロック」ツールをクリックします。
- 既存のレイアウトの約1インチ(2.5 cm)下から、既存のレイアウトとほぼ同じサイズになるまでボックスをクリックしてドラッグし、第2のレイアウトのサイズを定義して、レポート・ブロック・ウィザードを表示します。
- レポート・ブロック・ウィザードの「スタイル」ページで、「表形式」を選択して「次へ」をクリックします。
- 「グループ」ページで、「使用可能グループ」リストの「G_CNAME2」をクリックし、「下」をクリックして印刷方向を指定し、「表示グループ」リストに移動して「次へ」をクリックします。
- 「フィールド」ページで、次のフィールドをクリックしてから「>」ボタンをクリックし、それらのフィールドを「表示フィールド」リストに移動して「次へ」をクリックします。
- 「ラベル」ページで、ラベルとフィールド幅を次のように変更し、「次へ」をクリックします。
- 「テンプレート」ページで、「テンプレートなし」を選択します(テンプレートを選択した場合は、前のレイアウトのテンプレートが上書きされます)。次に「終了」をクリックして、ペーパー・レイアウト・ビューにレポート・レイアウトを表示します。
- ツールバーのフォント・リストから、「Arial(欧文)」、ポイント・サイズ「10」を選択します。
- ペーパー・レイアウト・ビューで、ツール・パレットの「テキスト」ツールをクリックします。
- 新しいレイアウトでラベル「Customer Name」のすぐ上をクリックし、新しいボイラープレート・テキスト・オブジェクトに次のテキストを入力します。
Top &CUTOFF_PCT Percent of Sales:
- ペーパー・レイアウト・ビューの空き領域に移動し、マウス・ボタンをクリックしてテキスト・モードを終了します。作成したテキスト・オブジェクトは、選択されたままになっています。この状態で、矢印キーを使用して位置を調整できます。
- テキストが太字になっていない場合は、ツールバーの「太字」ボタンをクリックして太字にします。
- 作成したオブジェクトとともに選択されるように、[Shift]を押しながらラベル「Customer Name」と「Total Purchases」をクリックします。
- ツールバーの「下線」ボタンをクリックします。
- ペーパー・レイアウト・ビューの空き領域をクリックして、それらすべての選択を解除します。
- フィールド「F_SUM_AMT2」をダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。
- 「フィールド」で、次のように入力して「書式マスク」プロパティを設定します。
-$NNN,NN0.00
パーセンテージによるカットオフのロジックを追加するには:
- オブジェクト・ナビゲータで、「検索」フィールドに
R_G_CNAME2
と入力して繰返し枠を検索します。
- 「R_G_CNAME2」の横のプロパティ・アイコンをダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。
- 「拡張レイアウト」で、「フォーマット・トリガー」プロパティ・フィールドをダブルクリックし、PL/SQLエディタを表示します。
- PL/SQLエディタで、テンプレートを使用して次のPL/SQLコードを入力します。
function R_G_CNAME2FormatTrigger return boolean is
begin
if :r_pct <= :cutoff_pct then
return(TRUE);
else
return(FALSE);
end if;
end;
注意
提供されているテキスト・ファイルrank_code.txt から、このコードをコピーして貼り付けると、コードを入力できます。このコードはパーセンテージによるカットオフ用です。
|
新しいパーセンテージ・パラメータ用にパラメータ・フォームを更新するには:
- 「ツール」→「パラメータ・フォーム・ビルダー」を選択します。
- 「パラメータ・フォーム・ビルダー」ダイアログ・ボックスで、「CUTOFF_PCT」が見つかるまでパラメータのリストを下にスクロールし、そのラベルを次のように変更します。
Top Percentage (%):
- 「OK」をクリックします。
- ツールバーの「ペーパー・レイアウトを実行」ボタンをクリックします。
- ランタイム・パラメータ・フォームで、次のように入力します。
- 「# of Top Customers」に
5
と入力します。
- 「Top Percentage (%)」に
80
と入力します。
- ツールバーの「レポート実行」ボタンをクリックします。
図34-6 数値とパーセンテージで顧客を制限した表形式のレポート出力
画像の説明
34.7 まとめ
これで、すべての作業が完了しました。ランキング・レポートは正常に作成されました。この章で学習した内容は次のとおりです。
- データ・モデルと表形式のレイアウトを作成する。
- ランキング条件を制御するパラメータとグループ・フィルタを作成する。
- レポート出力にパラメータ値を表示するレイアウト・オブジェクトを追加する。
- ユーザー設定のパラメータのみを表示するパラメータ・フォームを作成する。
- パーセンテージによるランク付けを追加する。
この例で使用されているウィザード、ビュー、プロパティの詳細は、Oracle Reportsオンライン・ヘルプを参照してください。このヘルプは、第3.1.1項「Oracle Reportsオンライン・ヘルプの使用」で説明しているとおり、Reports BuilderまたはOracle Technology Network(OTN)から表示できます。