35
単純な目次と索引を使用したペーパー・レポートの作成
この章では、目次と索引で構成される単純なレポートについて学習します。この章の手順に従うと、次の図に示すレポート出力を生成できます。
図35-1 大規模なレポート用の単純な目次
画像の説明
図35-2 大規模なレポート用の単純な索引
画像の説明
概要
複数階層を持つ目次の作成の詳細は、第36章「複数階層の目次を使用したペーパー・レポートの作成」を参照してください。
使用例
この例では、何千ものレコードが含まれている顧客データベースのすべての電子メール・アドレスのリストを生成します。必要な顧客の電子メール・アドレスを検索しやすくするために、最初に顧客を分類(ここでは国ごとに分類)し、次に目次を生成します。その後、レポートの索引を作成する方法を学習します。
このサンプル・レポートの作成過程では、次を行います。
目次と索引のレポートのサンプルを表示するには、サンプル・フォルダtocindex
を開き、Oracle Reportsのサンプルformatorder_index.rdf
を開きます。このファイルの開き方の詳細は、「はじめに」の「サンプル・レポートへのアクセス」を参照してください。
35.1 この例の前提条件
この章の例を作成するには、サンプル・ファイルが必要です(前述の「使用例」を参照)。また、Oracle Database付属のSales Historyサンプル・スキーマに対するアクセス権が必要です。このサンプル・スキーマに対するアクセス権の有無が不明のときは、データベース管理者に問い合せてください。
35.2 単純な目次の作成
この項の手順では、複数のページで構成される大規模なレポートに対して、基本的な目次を作成する方法について説明します。作成する目次は次のようになります。
図35-3 単純な目次
画像の説明
35.2.1 TOCデータを格納するデータベース表の作成
この項の手順では、目次に表示するレコードのページ番号を格納する表をデータベースに作成する方法について説明します。データベースに表を作成する権限があるか不明な場合は、データベース管理者に問い合せてください。
データベースに表を作成するには:
- SQL*Plusを起動します。
- (Windowsの場合)「スタート」メニューで、「プログラム」→「Oracle Application Server - oracle_home_name」→「Application Development」→「SQL Plus」を選択します。
- (UNIXの場合)
sqlplus
と入力します。
- 接続文字列
sh/sh@
<データベース名>などを使用して、データベースのSales Historyスキーマに接続します。
- SQLプロンプトに次の行を入力します。
create table toc_example (topic varchar2(100), page number);
- [Enter]を押します。
表が作成されたことを示す通知が表示されます。
- SQL*Plusを終了します。
35.2.2 グループ上レポートの作成
この項の手順では、Reports Builderで単純なグループ上レポートを作成する方法について説明します。このグループ上レポートでは、国名を表示し、各国名の下にその国の顧客と顧客の電子メール・アドレスを表示します。目次は、このレポートに出力される国名に基づいて作成されます。
単純なグループ上レポートを作成するには:
- Reports Builderで、「ファイル」→「新規」→「レポート」を選択し、手動によるレポートの作成を選択します。
- 表示されるデータ・モデル・ビューで、キャンバスを右クリックして、ポップアップ・メニューから「レポート・ウィザード」を選択します。
- 「レポート・タイプ」ページで、「ペーパー・レイアウトのみ作成」を選択し、「次へ」をクリックします。
- 「スタイル」ページで、「グループ上」を選択し、「次へ」をクリックします。
- 「データ・ソース」ページで、「SQL問合せ」をクリックし、「次へ」をクリックします。
- 「データ」ページの「データ・ソース定義」フィールドに次の
SELECT
文を入力します。
SELECT ALL COUNTRIES.COUNTRY_NAME,
CUSTOMERS.CUST_LAST_NAME,
CUSTOMERS.CUST_FIRST_NAME,
CUSTOMERS.CUST_email
FROM CUSTOMERS, COUNTRIES
WHERE (CUSTOMERS.COUNTRY_ID = COUNTRIES.COUNTRY_ID)
注意
この問合せは、次のいずれかの方法で入力できます。
- 提供されているテキスト・ファイル
formatorder_code.txt からコードをコピーして「データ・ソース定義」フィールドに貼り付けます。
- 「クエリー・ビルダー」をクリックして、コードを入力せずに問合せを作成します。
- 「データ・ソース定義」フィールドにコードを入力します。
|
- 「次へ」をクリックします。
注意
データベースにまだ接続していない場合は、「クエリー・ビルダー」または「次へ」をクリックしたときに、データベースに接続するよう求められます。この例に該当するスキーマが含まれるデータベースに接続してください。第35.1項「この例の前提条件」に、この例のサンプル・スキーマの要件に関する説明があります。
|
- 「グループ」ページで、「COUNTRY_NAME」をクリックし、「>」ボタンをクリックして、このフィールドを「グループ・フィールド」リストに移動します。
- 「次へ」をクリックします。
- 「フィールド」ページで、「>>」ボタンをクリックしてすべてのフィールドを「表示フィールド」リストに移動し、「次へ」をクリックします。
- 「合計」ページで「次へ」をクリックします。
- 「ラベル」ページで「次へ」をクリックします。
- 「テンプレート」ページで、「終了」をクリックします。
- ツールバーの「データ・モデル」ボタンをクリックします。作成したデータ・モデルは次のようになります。
図35-4 グループ上レポートのデータ・モデル
画像の説明
- ツールバーの「ペーパー・レイアウト」ボタンをクリックします。ペーパー・レイアウト・ビューは次のようになります。
図35-5 グループ上レポートのペーパー・レイアウト・ビュー
画像の説明
- レポートを
formatorder_<自分のイニシャル>.rdf
という名前で保存します。これで、レポートのデータ・モデルと基本的なレイアウトの作成が完了しました。
35.2.3 After Parameter Formトリガーとフォーマット・トリガーの作成
この項に示す手順に従って、2つのトリガーを作成します。最初のトリガーは、ビルトイン・プロシージャSRW.SET_FORMAT_ORDERを使用してレポートのメイン・セクションを最初にフォーマットし、その後ヘッダー・セクションとトレーラ・セクションをフォーマットします。2番目のトリガーは、それぞれの国名が表示されているページの番号をフェッチして、第35.2.1項「TOCデータを格納するデータベース表の作成」で作成した表にその情報を格納します。
35.2.3.1 After Parameter Formトリガーの作成
After Parameter Formトリガーは、パラメータ・フォームの実行後に実行されるファンクションです。この項では、このトリガーを設定してレポートの実行順序を変更し、メイン・セクションが最初に実行されるようにします。
After Parameter Formトリガーを作成するには:
- オブジェクト・ナビゲータで、対象のレポート名(
FORMATORDER_
<自分のイニシャル>
)の下にある「レポート・トリガー」ノードを開きます。
- 「AFTER PARAMETER FORM」を右クリックし、ポップアップ・メニューで「PL/SQLエディタ」を選択します。
- PL/SQLエディタで、テンプレートを使用して次のPL/SQLコードを入力します。
function AfterPForm return boolean is
begin
srw.set_format_order(srw.main_section, srw.header_section, srw.trailer_
section);
return (TRUE);
end;
注意
提供されているファイルformatorder_code.txt からコードをコピーして貼り付けることもできます。
|
- 「コンパイル」をクリックします。
- コードがコンパイルされた後、「閉じる」をクリックします。
35.2.3.2 フォーマット・トリガーの作成
この項では、F_COUNTRY_NAME
フィールドに基づいたフォーマット・トリガーを作成します。このフィールドには国名が表示されます。このフォーマット・トリガーでは、それぞれの国名のページ番号をフェッチします。これにより、ユーザーが目次に表示されている国名に基づいて、レポートの様々な部分に移動できるようになります。
フォーマット・トリガーを作成するには:
- オブジェクト・ナビゲータで、レポートの「ペーパー・レイアウト」ノードを開き、「メイン・セクション」→「ボディ」→「M_G_1_GRPFR」→「R_G_1」までナビゲートして、「F_COUNTRY_NAME」をクリックします。
ヒント
このフィールドが見つからない場合は、オブジェクト・ナビゲータの上部にある「検索」フィールドを使用してください。
|
- 「ツール」→「プロパティ・インスペクタ」を選択し、このフィールドのプロパティ・インスペクタを表示します。
- 「拡張レイアウト」で、「フォーマット・トリガー」プロパティ・フィールドをダブルクリックし、PL/SQLエディタを表示します。
- PL/SQLエディタで、次のコードを入力します。
function F_COUNTRY_NAMEFormatTrigger return boolean is
pageNum number;
begin
-- get current page number
srw.get_page_num(pageNum);
-- insert row into table
insert into toc_example
values (:country_name, pageNum);
return (TRUE);
end;
注意
提供されているファイルformatorder_code.txt からコードをコピーして貼り付けることもできます。
|
- 「コンパイル」をクリックします。
- コードがコンパイルされた後、「閉じる」をクリックしてプロパティ・インスペクタを閉じます。
- レポートを保存します。
35.2.4 データ・モデルでの2番目の問合せの作成
この項の手順では、各国名の下にあるデータのページ範囲を計算する式列を持つ2番目の問合せをデータ・モデルで作成する方法について説明します。この問合せでは、第35.2.1項「TOCデータを格納するデータベース表の作成」で作成したデータベース表から情報をフェッチします。その後、表形式のレイアウトを作成し、この情報を目次に表示します。
式列を持つ2番目の問合せを作成するには:
- データ・モデル・ビューで、ツール・パレットの「SQL問合せ」ツールをクリックし、問合せQ_1の右にあるデータ・モデル・ビューの空いている場所をクリックして、「SQL問合せ文」ダイアログ・ボックスを表示します。
- 「SQL問合せ文」フィールドに、次のSELECT文を入力します。
SELECT
TOPIC,
MIN(PAGE) FROMPAGE,
MAX(PAGE) TOPAGE
FROM TOC_EXAMPLE
GROUP BY TOPIC
注意
提供されているファイルformatorder_code.txt からコードをコピーして貼り付けることもできます。
|
- 「OK」をクリックします。作成したデータ・モデルは次のようになります。
図35-6 2番目の問合せを持つデータ・モデル
画像の説明
- データ・モデル・ビューで、ツール・パレットの「式列」ツールをクリックし、2番目の問合せのグループ(G_TOPIC)内をクリックします。
- 式列が選択されている状態で、「ツール」→「プロパティ・インスペクタ」を選択してプロパティ・インスペクタを表示します。
- 「一般情報」で、「名前」プロパティを「
TOC_pages
」、「データ型」プロパティを「Character」に設定します。
- 「プレースホルダ/式」で、「PL/SQL式」プロパティ・フィールドをクリックしてPL/SQLエディタを表示します。
- PL/SQLエディタで、テンプレートを使用して次のコードを入力します。
function TOC_pagesFormula return Char is
begin
if :fromPage = :toPage then
return (:fromPage);
else
return (:fromPage ||'-'|| :toPage);
end if;
end;
注意
提供されているファイルformatorder_code.txt からコードをコピーして貼り付けることもできます。
|
- 「コンパイル」をクリックします。
- コードがコンパイルされた後、「閉じる」をクリックします。
- レポートを保存します。
35.2.5 目次を表示するレポート・ブロックの作成
この項の手順では、レポートのヘッダー・セクションに表形式のレポート・ブロックを作成する方法について説明します。このレポート・ブロックには、目次のヘッダー(この例では国名)と、レポート内でその情報がある場所を示すページ範囲を表示します。
ヘッダー・セクションに表形式のレポート・ブロックを作成するには:
- ペーパー・レイアウト・ビューで、ツールバーの「ヘッダー・セクション」ボタンをクリックします。
- ツール・パレットの「レポート・ブロック」ツールをクリックし、ペーパー・レイアウト・ビューで約5インチ(12.5 cm)×約1.5インチ(4 cm)の長さの領域を描画します。マウス・ボタンを放すと、レポート・ブロック・ウィザードが表示されます。
- 「スタイル」ページで、「表形式」を選択し、「次へ」をクリックします。
- 「グループ」ページで、「G_TOPIC」をクリックし、「下」をクリックして、このフィールドを「表示グループ」リストに移動し、「次へ」をクリックします。
- 「フィールド」ページで、「使用可能フィールド」リストの次の各フィールドをクリックし、「>」ボタンをクリックしてそれらのフィールドを「表示フィールド」リストに移動して、「次へ」をクリックします。
- 「ラベル」ページで「次へ」をクリックします。
- 「テンプレート」ページで、「終了」をクリックします。
ペーパー・レイアウト・ビューでのレポート・ブロックは次のように表示されます。
図35-7 ヘッダー・セクションのペーパー・レイアウト・ビュー
画像の説明
- レポートを保存します。
35.2.6 ペーパーを対象とした単純な目次を使用するレポートの実行
ペーパーに対してレポートを実行するには:
次のような目次がレポートの最初のページに表示されます。
図35-8 レポートの目次ページ
画像の説明
レポート内の様々なページに移動することによって、各国の顧客データを参照できます。たとえば1ページに移動すると、アルゼンチンの顧客の電子メール・アドレスが表示されます。
図35-9 アルゼンチンの顧客の出力結果
画像の説明
注意
作成したレポートは、提供されているサンプル・ファイルformatorder.rdf と比較できます。「プログラム」→「コンパイル」→「すべて」を選択してPL/SQLをコンパイルしてから、ペーパーに対してレポートを実行します。
|
複数階層を持つ目次の作成の詳細は、第36章「複数階層の目次を使用したペーパー・レポートの作成」を参照してください。
35.3 索引の作成
この項では、レポートの最後に表示する索引を作成します。この索引には、顧客名とその名前が記載されているページ番号が表示されます。索引は、ユーザーが特定の顧客名を探したい場合、参照先のカテゴリ(国名など)がわからない場合に役立ちます。
図35-10 ペーパー・レポート用の単純な索引
画像の説明
35.3.1 索引用の情報を格納するデータベース表の作成
この項の手順では、索引に表示する項目のページ番号を格納する表をデータベースに作成する方法について説明します。データベースに表を作成できるかどうか不明な場合は、データベース管理者に問い合せてください。
データベースに表を作成するには:
- 第35.2.1項「TOCデータを格納するデータベース表の作成」の手順に従い、次のコードを使用して新しいデータベース表を作成します。
create table index_example (term varchar2(100), page number);
- [Enter]を押します。
表が作成されたことを示す通知が表示されます。
- SQL*Plusを終了します。
35.3.2 フォーマット・トリガーの作成
この項の手順では、顧客の姓に基づいたフォーマット・トリガーを作成する方法について説明します。ビルトイン・ファンクションSRW.GET_PAGE_NUMを使用して現在の顧客のページ番号を検索し、前の項で作成した表にその番号を挿入します。
フォーマット・トリガーを作成するには:
- Reports Builderで、レポート
formatorder_<自分のイニシャル>.rdf
を開きます。
- ツールバーの「ペーパー・レイアウト」ボタンをクリックして、ペーパー・レイアウト・ビューを表示します。
- ペーパー・レイアウト・ビューで、フィールド「F_CUST_LAST_NAME」を右クリックし、ポップアップ・メニューから「プロパティ・インスペクタ」を選択します。
- 「拡張レイアウト」で、「フォーマット・トリガー」プロパティ・フィールドをダブルクリックし、PL/SQLエディタを表示します。
- PL/SQLエディタで、テンプレートを使用して次のコードを入力します。
function F_CUST_LAST_NAMEFormatTrigger return boolean is
PageNum number;
begin
-- get pagenumber
srw.get_page_num(pageNum);
-- insert into table
insert into index_example
values (:Cust_last_name||', '||:Cust_first_name, PageNum);
return (TRUE);
end;
注意
提供されているテキスト・ファイルformatorder_code.txt から、このコードをコピーして貼り付けると、コードを入力できます。
|
- 「コンパイル」をクリックします。
- コンパイル・エラーが発生した場合は、作成したコードがサンプルのRDFファイルまたはこの章のコードと同じになるように修正して、再度コンパイルします。
- コンパイル・エラーがなくなったら、「閉じる」をクリックします。
- レポートを
formatorder_index_<自分のイニシャル>.rdf
という名前で保存します。
35.3.3 データ・モデルへの問合せの追加
この項の手順では、索引用に個々の顧客名とページ番号を取得する問合せをデータ・モデルに追加する方法について説明します。
問合せを追加するには:
- データ・モデル・ビューで、ツール・パレットの「SQL問合せ」ツールをクリックし、問合せQ_1の右にあるデータ・モデル・ビューの空いている場所をクリックして、「SQL問合せ文」ダイアログ・ボックスを表示します。
- 「SQL問合せ文」フィールドに、次のSELECT文を入力します。
SELECT SUBSTR(TERM,1,1) INITIAL_LETTER, TERM, PAGE FROM INDEX_EXAMPLE ORDER BY TERM
注意
この問合せは、次のいずれかの方法で入力できます。
- 提供されているテキスト・ファイル
formatorder_code.txt からコードをコピーして「データ・ソース定義」フィールドに貼り付けます。
- 「クエリー・ビルダー」をクリックして、コードを入力せずに問合せを作成します。
- 「データ・ソース定義」フィールドにコードを入力します。
|
- 「OK」をクリックします。
- データ・モデル・ビューに表示される新しい問合せで、「INITIAL_LETTER」列をクリックし、この列を問合せの残りの部分の上にドラッグします。それにより、データ・モデルは次のようになります。
図35-11 索引のデータ・モデル・ビュー
画像の説明
- レポートを保存します。
35.3.4 トレーラ・セクションに索引を表示するためのレポート・ブロックの作成
この項の手順では、レポートのトレーラ・セクションに索引情報を表示する方法について説明します。
トレーラ・セクションにレポート・ブロックを作成するには:
- ペーパー・レイアウト・ビューで、ツールバーの「トレーラ・セクション」ボタンをクリックします。
- 「挿入」→「レポート・ブロック」を選択します。
- 「スタイル」ページで、「グループ上」ラジオ・ボタンを選択し、「次へ」をクリックします。
- 「グループ」ページで、「G_2」(「INITIAL_LETTER」列を格納する新しいグループ名)をクリックし、「下」をクリックして印刷方向を指定します。
- 「使用可能グループ」リストで、「G_INITIAL_LETTER」をクリックして「下」をクリックします。
- 「次へ」をクリックします。
- 「フィールド」ページで、「INITIAL_LETTER」をクリックし、「>」ボタンをクリックして、このフィールドを「表示フィールド」リストに移動します。
- 「TERM」と「PAGE」を「表示フィールド」リストに移動します。
- 「次へ」を2回クリックして、「終了」をクリックします。
- レポートを保存します。
35.3.5 ペーパーを対象としたレポートの実行
ツールバーの「ペーパー・レイアウトを実行」ボタンをクリックします。レポートの最後のページに索引が表示されます。この例では2402
ページです。このページは次のようになります。
注意
目次(TOC)を生成する場合は、「ペーパー・レイアウトを実行」ボタンをクリックする必要があります。「ペーパー・デザイン」ボタンをクリックしてもフォーマット順序の変更は有効にならないため、TOCは生成されません。
|
図35-12 レポートの索引ページ
画像の説明
注意
スキーマに含まれるデータの量と型に応じて、作成したレポートの最後のページに表示されるデータの外観が、上の図と異なる場合があります。
|
35.4 まとめ
これで、すべての作業が完了しました。目次と索引を使用したレポートが正常に作成されました。この章で学習した内容は次のとおりです。
- 大規模なペーパー・レポートの目次(TOC)と索引を作成する。
- ビルトイン・プロシージャSRW.SET_FORMAT_ORDERを使用して、レポート・セクションの実行順序を変更する。
- ビルトイン・プロシージャSRW.GET_PAGE_NUMを使用して、個々のレコードのページ番号を取得する。
- 必要なページ番号を格納する新しい表をデータベースに作成する。
- レポート・ウィザードを使用して、単純なグループ上レポートを作成する。
- レポートに必要な情報を取得する単純なデータ・モデルを手動で作成する。
- 索引に必要なページ番号を生成するフォーマット・トリガーを作成する。
- レポート・ブロック・ウィザードを使用して、レポートのトレーラ・セクションに索引を表示するグループ・レポートを作成する。
この例で使用されているウィザード、ビュー、プロパティの詳細は、Oracle Reportsオンライン・ヘルプを参照してください。このヘルプは、第3.1.1項「Oracle Reportsオンライン・ヘルプの使用」で説明しているとおり、Reports BuilderまたはOracle Technology Network(OTN)から表示できます。