ヘッダーをスキップ

Oracle Reports レポート作成ガイド
10gリリース2(10.1.2)
B25068-01
目次
目次
索引
索引

戻る 次へ

34
ランキング・レポートの作成

この章では、データを様々な方法でランク付けすることが可能なレポートについて学習します。この章の手順に従うと、図34-1に示すようなレポート出力を生成できます。

図34-1    数値とパーセンテージで顧客をランク付けした表形式のレポート出力


画像の説明

概要

データをランク付けするレポートは、ユーザー指定のバインド・パラメータと比較して作成されます。これによって1つのレポートのデータを、カウントやパーセンテージなど、様々な方法でランク付けできるようになります。実行時にランキング条件を設定したり、以前に指定された値をランキング条件のデフォルトとして使用したりすることができます。

データ・リレーションシップ

このレポートでは、データをフェッチする問合せが1つ必要です。データをランク付けするには、次のオブジェクトを作成します。

レイアウト

このレポートでは、表形式のレイアウト・スタイルを少し修正したものを使用します。

使用例

この例では、上位3件までの顧客と売上全体の75%を占める顧客の名前と購入金額合計を表示するレポートを作成します。また、レポートのエンド・ユーザーが実行時にランキング条件(つまり、すべての顧客のうち上位x件の顧客と上位y%の顧客)を設定できるようにします。

このサンプル・レポートの作成過程では、次を行います。

ランキング・レポートのサンプルを表示するには、サンプル・フォルダrankingを開き、Oracle Reportsのサンプルrank.rdfを開きます。アクセス方法の詳細は、「はじめに」の「サンプル・レポートへのアクセス」を参照してください。

34.1 この例の前提条件

この章の例を作成するには、Summit Sporting Goods(SUMMIT)スキーマに対するアクセス権が必要です。このスキーマをインストールするSQLスクリプトをダウンロードするには、「はじめに」の「データ・ソースへのアクセス」を参照してください。

34.2 データ・モデルと表形式のレイアウトの作成

この例のように、単一問合せレポートを作成する場合、レポート・ウィザードを使用して、データ・モデルとレイアウトを同時に作成できます。

データ・モデルとレイアウトを作成するには:

  1. Reports Builderを起動します。すでに起動している場合は、「ファイル」→「新規」→「レポート」を選択します。

  2. 「ようこそ」ダイアログ・ボックスまたは「新規レポート」ダイアログ・ボックスで、「レポート・ウィザードを使う」を選択して「OK」をクリックします。

  3. 「ようこそ」ページが表示されたら、「次へ」をクリックします。

  4. 「レポート・タイプ」ページで、「ペーパー・レイアウトのみ作成」を選択し、「次へ」をクリックします。

  5. 「スタイル」ページでレポートのタイトルを入力し、「表形式」を選択して「次へ」をクリックします。

  6. 「データ・ソース」ページで、「SQL問合せ」をクリックし、「次へ」をクリックします。

  7. 「データ」ページの「データ・ソース定義」フィールドに次のSELECT文を入力します。

    SELECT CUSTNAME CNAME, SUM(AMOUNT) SUM_AMT FROM SALES
    GROUP BY CUSTNAME
    ORDER BY SUM(AMOUNT) DESC
    


    注意

    この問合せは、次のいずれかの方法で入力できます。

    • 提供されているテキスト・ファイルrank_code.txtからコードをコピーして「データ・ソース定義」フィールドに貼り付けます。

    • 「クエリー・ビルダー」をクリックして、コードを入力せずに問合せを作成します。

    • 「データ・ソース定義」フィールドにコードを入力します。

     

  8. 「次へ」をクリックします。


    注意

    データベースにまだ接続していない場合は、「クエリー・ビルダー」または「次へ」をクリックしたときに、データベースに接続するよう求められます。この例に該当するスキーマが含まれるデータベースに接続してください。第34.1項「この例の前提条件」に、この例のサンプル・スキーマの要件に関する説明があります。 


  9. 「フィールド」ページで、「>>」ボタンをクリックしてすべてのフィールドを「表示フィールド」リストに移動し、「次へ」をクリックします。

  10. 「合計」ページで「次へ」をクリックします。

  11. 「ラベル」ページで、ラベルとフィールド幅を次のように設定し、「次へ」をクリックします。

    フィールド  ラベル   

    CNAME 

    Customer Name 

    35 

    SUM_AMT 

    Total Purchases 

    15 

  12. 「テンプレート」ページで「終了」をクリックして、ペーパー・デザイン・ビューでレポート出力をプレビューします。表示は次のようになります。

    図34-2    ランキング・レポートのペーパー・デザイン・ビュー


    画像の説明

34.3 上位顧客数によるランキング・ロジックの作成

レポートにデータ・モデルとレイアウトを作成したら、表示する顧客数を制御するロジックを追加できます。まず、ユーザーが実行時に値を入力できるパラメータを2つ作成します。次に、そのパラメータを使用して表示するデータを制御するグループ・フィルタを作成します。

パラメータを作成してグループ・フィルタを追加するには:

  1. オブジェクト・ナビゲータの「データ・モデル」ノードで、「ユーザー・パラメータ」ノードをクリックします。

  2. 「編集」→「作成」を選択して、「ユーザー・パラメータ」ノードの下に新しいユーザー・パラメータを作成します。

  3. プロパティ・インスペクタが表示されていない場合は、新しいユーザー・パラメータ(P_1)を右クリックして「プロパティ・インスペクタ」を選択し、プロパティ・インスペクタを表示してプロパティを設定します。

    • 「一般情報」で、「名前」プロパティを「CUTOFF_CNT」に設定します。

    • 「パラメータ」で、「データ型」プロパティを「Number」、「幅」プロパティを「1」、「初期値」プロパティを「3」に設定します。

  4. 前述の手順を繰り返して、別のユーザー・パラメータを作成します。プロパティは、次のように設定します。

    • 「一般情報」で、「名前」プロパティを「INCR_CNT」に設定します。

    • 「パラメータ」で、「データ型」プロパティを「Number」、「幅」プロパティを「3」、「初期値」プロパティを「0」に設定します。

  5. オブジェクト・ナビゲータの「データ・モデル」ノードで、「グループ」ノードを開き、「G_CNAME」グループの横のプロパティ・アイコンをダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。

    • 「グループ」で、「フィルタ・タイプ」プロパティを「PL/SQL」に設定し、「PL/SQLフィルタ」プロパティ・フィールドをクリックしてPL/SQLエディタを表示します。

  6. 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から、このコードをコピーして貼り付けると、コードを入力できます。このコードはグループ・フィルタ用です。 


  7. 「コンパイル」をクリックします。

  8. 「閉じる」をクリックします。

    このフィルタによって、G_CNAME内のレコードがフェッチされるたびにカウンタに1が加算され、そのカウンタ値が指定されているカットオフと比較されます。カウンタ値がカットオフを超えると、レコードはそれ以上フェッチされなくなります。

    ヒント

    ペーパー・デザイン・ビューを開いたままでこのロジックを追加した場合は、そのペーパー・デザイン・ビューではレコードは返されません。この問題を解決するには、他のビュー(データ・モデル・ビューなど)の1つを表示してから、ペーパー・デザイン・ビューに戻ります。ランタイム・パラメータ・フォームで、2つのパラメータINCR_CNTおよびCUTOFF_CNTに値を入力するよう求められます。 

  9. ツールバーの「ペーパー・レイアウトを実行」ボタンをクリックしてランタイム・パラメータ・フォームを表示します。このフォームから、CUTOFF_CNTおよびINCR_CNTのデフォルト値を変更できます。

  10. 「レポート実行」ボタンをクリックして、ペーパー・デザイン・ビューにレポート出力を表示します。

  11. レポートをrank_<自分のイニシャル>.rdfという名前で保存します。

    図34-3    上位3顧客に制限した表形式のレポート出力


    画像の説明

34.4 パラメータ用のレイアウト・オブジェクトの追加

リストに表示される顧客数が一目でわかるようにする方法として、レポートにCUTOFF_CNT値を表示する必要があります。このタスクを実行するには、パラメータを参照するボイラープレート・テキスト・オブジェクトを作成します。

  1. オブジェクト・ナビゲータで、「ペーパー・レイアウト」ノードの横のビュー・アイコンをダブルクリックして、ペーパー・レイアウト・ビューを表示します。

  2. ペーパー・レイアウト・ビューとオブジェクト・ナビゲータが同時に見えるように、両方を横に並べて表示します。

  3. オブジェクト・ナビゲータで、「検索」フィールドにM_G_CNAME_GRPFRと入力します。

  4. オブジェクト・ナビゲータで「M_G_CNAME_GRPFR」をクリックし、ペーパー・レイアウト・ビューでもそれが選択されるようにします。

  5. ペーパー・レイアウト・ビューのタイトル・バーをクリックして、アクティブなウィンドウにします。

  6. キーボードの[Ctrl]を押しながら[A]を押して、M_G_CNAME_GRPFRとそのすべての内容を選択します。


    注意

    オブジェクト・ナビゲータの「検索」フィールドを使用して、特定のオブジェクトを検索することもできます。ペーパー・レイアウト・ビューが表示されているときにオブジェクト・ナビゲータで項目を選択すると、対応するオブジェクトがペーパー・レイアウト・ビューでも選択されます。 


  7. [↓]キーを使用して、各項目を約1インチ(2.5 cm)下に移動します。

  8. ツールバーのフォント・リストから、「Arial(欧文)」、ポイント・サイズ「10」を選択します。

  9. ツール・パレットの「テキスト」ツールをクリックします。

  10. ラベル「Customer Name」のすぐ上をクリックし、新しいボイラープレート・テキスト・オブジェクトを作成して、次のテキストを入力します。

    Top &CUTOFF_CNT Customers:
  11. ペーパー・レイアウト・ビューの空き領域に移動し、マウス・ボタンをクリックしてテキスト・モードを終了します。作成したテキスト・オブジェクトは、選択されたままになっています。この状態で、矢印キーを使用して位置を調整できます。

  12. ツールバーの「太字」ボタンをクリックして、新しいテキストを太字にします。

  13. 作成したオブジェクトとともに選択されるように、[Shift]を押しながらラベル「Customer Name」と「Total Purchase」をクリックします。

  14. ツールバーの「下線」ボタンをクリックします。

  15. ペーパー・レイアウト・ビューの空き領域をクリックして、それらすべての選択を解除します。

  16. 「F_SUM_AMT」をクリックし、「ツール」→「プロパティ・インスペクタ」を選択してプロパティ・インスペクタを表示し、次のプロパティを設定します。

    • 「フィールド」で、次のように入力して「書式マスク」プロパティを設定します。

      -$NNN,NN0.00

  17. ツールバーの「ペーパー・デザイン」ボタンをクリックし、ペーパー・デザイン・ビューを表示します(ランタイム・パラメータ・フォームが表示されている場合は、ツールバーの「レポート実行」ボタンをクリックします)。

    図34-4    パラメータ値が表示された表形式のレポート出力


    画像の説明

  18. レポートを保存します。

34.5 パラメータ・フォームの作成

デフォルトでは、両方のユーザー・パラメータがランタイム・パラメータ・フォームに表示されます。実際は、ユーザーが設定するのはCUTOFF_CNTのみです。INCR_CNT(各レコードごとに増加するカウンタの量)は、ユーザーが設定できないようにします。ランタイム・パラメータ・フォームにINCR_CNTが表示されないようにするには、独自のパラメータ・フォームを作成します。

パラメータ・フォームを作成するには:

  1. 「ツール」→「パラメータ・フォーム・ビルダー」を選択します。

  2. 「パラメータ・フォーム・ビルダー」ダイアログ・ボックスで、「INCR_CNT」が見つかるまでパラメータのリストを下にスクロールします。

  3. 「INCR_CNT」をクリックして選択を解除します。

  4. 「CUTOFF_CNT」のラベルを次のように変更します。

    # of Top Customers:

  5. 「OK」をクリックします。

  6. ツールバーの「ペーパー・レイアウトを実行」ボタンをクリックします。

  7. ランタイム・パラメータ・フォームで、「# of Top Customers」に値を入力して、ツールバーの「レポート実行」ボタンをクリックします。ランタイム・パラメータ・フォームで指定した数のレコードが表示されます。また、レコードは購入金額合計が大きい方から順に表示されます。

    ヒント

    追加の演習として、CUTOFF_CNTの「初期値」プロパティを変更すると、ランタイム・パラメータ・フォームがどのように変わるかを確認できます。 

  8. レポートを保存します。

34.6 パーセンテージによるランク付けの追加

顧客をランク付けするもう1つの方法は、売上全体のパーセンテージによるランク付けです。考え方はカウントによるランク付けと同じですが、重要な相違点があります。レコード数とともに変動する合計サマリーのパーセントを計算するためには、すべてのデータをフェッチする必要があるため、不要なデータの選別にグループ・フィルタを使用できません。この場合、繰返し枠でフォーマット・トリガーを使用して、各時点での合計値をカットオフ・パラメータと比較する必要があります。

パーセンテージ計算のためにデータをフェッチするには:

  1. オブジェクト・ナビゲータで、「データ・モデル」ノードの横のビュー・アイコンをダブルクリックします。

  2. 表示されたデータ・モデル・ビューで、ツール・パレットの「SQL問合せ」ツールをクリックし、問合せQ_1の右にあるデータ・モデル・ビューの空いている場所をクリックして、「SQL問合せ文」ダイアログ・ボックスを表示します。

  3. 「SQL問合せ文」フィールドに、次のSELECT文を入力します。

    SELECT CUSTNAME CNAME2, SUM(AMOUNT) SUM_AMT2
    FROM SALES
    GROUP BY CUSTNAME
    ORDER BY SUM(AMOUNT) DESC
    


    注意

    提供されているテキスト・ファイルrank_code.txtから、このコードをコピーして貼り付けると、コードを入力できます。このコードはパーセンテージ計算用です。 


  4. 「OK」をクリックします。データ・モデルは次のようになります。

    図34-5    ランキング・レポートのデータ・モデル・ビュー


    画像の説明

  5. レポートを保存します。

パーセンテージによるカットオフ用のパラメータを作成するには:

  1. オブジェクト・ナビゲータの「データ・モデル」ノードで、「ユーザー・パラメータ」ノードをクリックします。

  2. 「編集」→「作成」を選択して、「ユーザー・パラメータ」ノードの下に新しいユーザー・パラメータを作成します。

  3. プロパティ・インスペクタが表示されていない場合は、新しいユーザー・パラメータ(P_1)を右クリックして「プロパティ・インスペクタ」を選択し、プロパティ・インスペクタを表示してプロパティを設定します。

    • 「一般情報」で、「名前」プロパティを「CUTOFF_PCT」に設定します。

    • 「パラメータ」で、「データ型」プロパティを「Number」、「幅」プロパティを「2」、「初期値」プロパティを「75」に設定します。

  4. データ・モデル・ビューで、グループ・オブジェクト「G_CNAME2」をクリックし、下部のハンドルをクリックして約0.25インチ(0.5 cm)下にドラッグして、グループのサイズを大きくします。

  5. ツール・パレットの「サマリー列」ツールをクリックします。

  6. 「SUM_AMT2」の下の空き領域をクリックして、サマリー列を作成します。

  7. 新しいサマリー列オブジェクト(CS_1)をダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。

    • 「一般情報」で、「名前」プロパティを「R_PCT」に設定します。

    • 「列」で、「データ型」プロパティを「Number」、「幅」プロパティを「10」に設定します。

    • 「サマリー」で、「ファンクション」プロパティを「割合(%)」、「ソース」プロパティを「SUM_AMT2」、「リセット位置」プロパティを「Report」、「計算位置」プロパティを「Report」に設定します。

パーセンテージによる顧客リスト用の第2のレイアウトを作成するには:

  1. ツールバーの「ペーパー・レイアウト」ボタンをクリックして、ペーパー・レイアウト・ビューを表示します。

  2. ペーパー・レイアウト・ビューで、ツール・パレットの「レポート・ブロック」ツールをクリックします。

  3. 既存のレイアウトの約1インチ(2.5 cm)下から、既存のレイアウトとほぼ同じサイズになるまでボックスをクリックしてドラッグし、第2のレイアウトのサイズを定義して、レポート・ブロック・ウィザードを表示します。

  4. レポート・ブロック・ウィザードの「スタイル」ページで、「表形式」を選択して「次へ」をクリックします。

  5. 「グループ」ページで、「使用可能グループ」リストの「G_CNAME2」をクリックし、「下」をクリックして印刷方向を指定し、「表示グループ」リストに移動して「次へ」をクリックします。

  6. 「フィールド」ページで、次のフィールドをクリックしてから「>」ボタンをクリックし、それらのフィールドを「表示フィールド」リストに移動して「次へ」をクリックします。

    • CNAME2

    • SUM_AMT2

  7. 「ラベル」ページで、ラベルとフィールド幅を次のように変更し、「次へ」をクリックします。

    フィールド  ラベル   

    CNAME2 

    Customer Name 

    35 

    SUM_AMT2 

    Total Purchases 

    15 

  8. 「テンプレート」ページで、「テンプレートなし」を選択します(テンプレートを選択した場合は、前のレイアウトのテンプレートが上書きされます)。次に「終了」をクリックして、ペーパー・レイアウト・ビューにレポート・レイアウトを表示します。

  9. ツールバーのフォント・リストから、「Arial(欧文)」、ポイント・サイズ「10」を選択します。

  10. ペーパー・レイアウト・ビューで、ツール・パレットの「テキスト」ツールをクリックします。

  11. 新しいレイアウトでラベル「Customer Name」のすぐ上をクリックし、新しいボイラープレート・テキスト・オブジェクトに次のテキストを入力します。

    Top &CUTOFF_PCT Percent of Sales:
  12. ペーパー・レイアウト・ビューの空き領域に移動し、マウス・ボタンをクリックしてテキスト・モードを終了します。作成したテキスト・オブジェクトは、選択されたままになっています。この状態で、矢印キーを使用して位置を調整できます。

  13. テキストが太字になっていない場合は、ツールバーの「太字」ボタンをクリックして太字にします。

  14. 作成したオブジェクトとともに選択されるように、[Shift]を押しながらラベル「Customer Name」と「Total Purchases」をクリックします。

  15. ツールバーの「下線」ボタンをクリックします。

  16. ペーパー・レイアウト・ビューの空き領域をクリックして、それらすべての選択を解除します。

  17. フィールド「F_SUM_AMT2」をダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。

    • 「フィールド」で、次のように入力して「書式マスク」プロパティを設定します。

      -$NNN,NN0.00
      

パーセンテージによるカットオフのロジックを追加するには:

  1. オブジェクト・ナビゲータで、「検索」フィールドにR_G_CNAME2と入力して繰返し枠を検索します。

  2. 「R_G_CNAME2」の横のプロパティ・アイコンをダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。

    • 「拡張レイアウト」で、「フォーマット・トリガー」プロパティ・フィールドをダブルクリックし、PL/SQLエディタを表示します。

  3. 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から、このコードをコピーして貼り付けると、コードを入力できます。このコードはパーセンテージによるカットオフ用です。 


新しいパーセンテージ・パラメータ用にパラメータ・フォームを更新するには:

  1. 「ツール」→「パラメータ・フォーム・ビルダー」を選択します。

  2. 「パラメータ・フォーム・ビルダー」ダイアログ・ボックスで、「CUTOFF_PCT」が見つかるまでパラメータのリストを下にスクロールし、そのラベルを次のように変更します。

    Top Percentage (%):

  3. 「OK」をクリックします。

  4. ツールバーの「ペーパー・レイアウトを実行」ボタンをクリックします。

  5. ランタイム・パラメータ・フォームで、次のように入力します。

    • 「# of Top Customers」に5と入力します。

    • 「Top Percentage (%)」に80と入力します。

  6. ツールバーの「レポート実行」ボタンをクリックします。

    図34-6    数値とパーセンテージで顧客を制限した表形式のレポート出力


    画像の説明

34.7 まとめ

これで、すべての作業が完了しました。ランキング・レポートは正常に作成されました。この章で学習した内容は次のとおりです。

この例で使用されているウィザード、ビュー、プロパティの詳細は、Oracle Reportsオンライン・ヘルプを参照してください。このヘルプは、第3.1.1項「Oracle Reportsオンライン・ヘルプの使用」で説明しているとおり、Reports BuilderまたはOracle Technology Network(OTN)から表示できます。


戻る 次へ
Oracle
Copyright © 2003, 2005 Oracle.

All Rights Reserved.
目次
目次
索引
索引