ヘッダーをスキップ
Oracle Fusion Middleware Oracle Business Intelligence Publisherレポート・デザイナーズ・ガイド
11gリリース1 (11.1.1)
B63038-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

A 大きな出力ファイルを処理する技術

この付録では、レポートからサイズの非常に大きなPDF出力ファイルを生成するときのパフォーマンスを向上する技術について説明します。

内容は次のとおりです。

A.1 静的コンテンツの再利用

この項では、PDFレポート出力で静的な繰返しコンテンツを再利用して、全体的なPDFファイルのサイズを削減する方法について説明します。この項には次のトピックが含まれます:

A.1.1 静的コンテンツの再利用とは

レポートに静的コンテンツがあり、レポート内でのコンテンツの位置も決まっている場合(たとえば、米国W-2フォーム裏面の説明文など)、このBI Publisherの機能を使用して、生成するPDFファイルのサイズを削減できます。

W-2フォームを例にあげると、レポートには図A-1に示す出力が予期されます。

図A-1 W-2フォーム・レポートの出力

図A-1の説明が続きます
「図A-1 W-2フォーム・レポートの出力」の説明

各従業員には、固有の内容がレンダリングされますが、それぞれの裏面(または2ページ目)には、同一の説明が記載されています。

この一連の説明は、再利用可能な静的コンテンツとして定義できます。コンテンツを再利用可能な静的コンテンツとして指定すると、BI Publisherによって、その静的コンテンツを含むPDFドキュメントが一度だけ生成され、必要時に他の位置から参照されます。これにより、全体的な出力ファイルのサイズが削減されます。

A.1.2 この機能の制約

この機能には次の制約があります。

  • 生成されるレポートで再利用される静的コンテンツは、生成されるPDF出力のページに収まる必要があります。

  • 静的コンテンツよりも前にレンダリングされるレポートの内容は、固定の高さである必要があります。たとえば、W-2フォームでは、静的コンテンツがレンダリングされる前に、一連の固定のフィールドがレンダリングされます。再利用可能な静的コンテンツは、レンダリングごとにページ原点から同じ位置に配置されます。

  • この機能は、PDF出力を生成するRTFテンプレートにのみ使用可能です。

A.1.3 RTFテンプレートでの再利用コンテンツの定義

再利用する静的コンテンツを定義するには、次のようにテンプレート内で次のタグを使用してコンテンツを囲みます。

<?reusable-static-content:?>

....ここに静的コンテンツを記述...

<?end reusable-static-content?>

これらのタグを静的コンテンツの前後に挿入することで、生成するファイルにこのコンテンツを1回のみ記述して、出現箇所ごとに同じ位置から参照するように指定します。

A.1.4

次の例は、この機能の実装を示しています。サンプル・レポートは、従業員ごとに1回生成されます。生成されたレポートのそれぞれで、最初のページには従業員固有の情報が記載され、裏面には毎回内容の同じ説明が印刷されます。各従業員の後にセクション区切りが発生し、ページ番号がリセットされます。

図A-2は、このテンプレートの構造を示しています。

図A-2 RTFテンプレートの構造

図A-2の説明が続きます
「図A-2 RTFテンプレートの構造」の説明

A.2 Zip圧縮されたPDF出力の生成

BI PublisherではPDF出力の生成時、出力ファイルのサイズが制限されません。ただし、ファイルのサイズが2GBに近づくと、Adobe Acrobat Readerではファイルを開いたり処理したりできなくなる場合があります。

BI Publisherには、大きなPDF出力ファイルを小さく管理しやすいファイルに分割する機能があります。分割後もレポートは1つの論理的なユニットとして整合性が維持されます。

レポートのPDF出力の分割を有効にすると、そのレポートは複数のファイルに分割され1つのZIPファイル内に生成されます。出力タイプはPDFZです。これらのコンポーネント・ファイルに簡単にアクセスできるように、BI Publisherによってインデックス・ファイルも生成され、各コンポーネントのPDFファイルに含まれるジャンプ先およびジャンプ元の要素が指定されます。

レポート設計者は、この機能を有効にするために、この項で説明されている方法でレポートを設定する必要があります。

A.2.1 制約と前提条件

  • この機能は、RTFテンプレートまたはPDFテンプレートから生成されたPDF出力に対してのみサポートされます。

  • レポートに入力されるデータセットは、平坦なXMLデータ(ROWSET/ROW)である必要があります。階層化または連結されているデータセットは使用できません。

  • データセットは、後述の繰り返し要素として指定されている要素でソートする必要があります。

A.2.2 設計時の考慮事項

レポート設計者は、レポートの分割を有効化するために、次の事項を決定する必要があります。

  • カウンタとして機能する繰返し要素を選択します。

  • 1つのPDFファイル当たりの繰返し要素のインスタンス数を決定します。

  • 生成されるインデックス・ファイルに含めるデータ要素を選択します。

A.2.3 出力タイプの選択

テンプレートをレポート定義にアップロードした後で、図A-3に示すように、出力タイプとしてZip圧縮PDFを有効にします。

図A-3 出力タイプとしてのzip圧縮PDFの有効化

図A-3の説明が続きます
「図A-3 出力タイプとしてのzip圧縮PDFの有効化」の説明

レポートをスケジューリングするときは、図A-4に示すように、出力タイプにPDFZを選択します。

図A-4 出力タイプとしてのPDFZの選択

図A-4の説明が続きます
「図A-4 出力タイプとしてのPDFZの選択」の説明

A.3 RTFテンプレートへのPDF分割の実装

この項では、RTFテンプレートから生成したレポートのPDF分割を有効化する方法を説明します。この項には次のトピックが含まれます:

A.3.1 RTFテンプレートでのコマンドの入力

この機能を使用するテンプレートを設計する場合は、次の項目を指定するコマンドを追加する必要があります。

  • データ内のどの要素が繰り返されるか(単純にfor-eachコマンドを使用します)

  • 各PDFファイルでその要素が何回出現するか

  • インデックス・ファイルにはどのような情報(データ要素)を含めるか

これを行うには、テンプレート内のドキュメントを分割する要素のfor-eachループ内に次の2つのコマンドを入力する必要があります。

  • <?catalog-index-info:name;element_name?>

    説明:

    nameは、インデックス・ファイルで各ドキュメントに含まれるジャンプ先およびジャンプ元のレコードを識別するために使用される名前です。

    element_nameは、前述の手順で識別された名前の値を提供する要素のXMLタグ名です。

    catalog-index-infoコマンドは、作成されるインデックス・ファイルの構造を定義します。

  • <?if:position() mod n = 0?><?document-split:?><?end if?>

    説明:

    nは、1つのPDFファイルに含めるレコードの数です。

    このコマンドは、カウントする要素のfor-eachループ内に配置する必要があります。このコマンドによって、BI Publisherは、nで与えられた値とレコード数が同じ場合、次の改ページの出現後にドキュメントを分割します。

    ドキュメントの分割が実行されるたびに、catalog-index-infoコマンドで定義された名前と値の組合せがインデックス・ファイルに書き込まれます。

A.3.2 使用例 - 部門ごとの分割

この例は次のXMLデータに基づいています。

<DATA_DS>
 <G_EMP>
  <DEPARTMENT_NAME>Sales</DEPARTMENT_NAME> 
  <FIRST_NAME>Ellen</FIRST_NAME> 
  <LAST_NAME>Abel</LAST_NAME> 
  <HIRE_DATE>1996-05-11T00:00:00.000-07:00</HIRE_DATE> 
  <SALARY>11000</SALARY> 
 </G_EMP>
 <G_EMP>
  <DEPARTMENT_NAME>Sales</DEPARTMENT_NAME> 
  <FIRST_NAME>Sundar</FIRST_NAME> 
  <LAST_NAME>Ande</LAST_NAME> 
  <HIRE_DATE>2000-03-24T00:00:00.000-08:00</HIRE_DATE> 
  <SALARY>6400</SALARY> 
 </G_EMP>
 <G_EMP>
  <DEPARTMENT_NAME>Shipping</DEPARTMENT_NAME> 
  <FIRST_NAME>Mozhe</FIRST_NAME> 
  <LAST_NAME>Atkinson</LAST_NAME> 
  <HIRE_DATE>1997-10-30T00:00:00.000-08:00</HIRE_DATE> 
  <SALARY>2800</SALARY> 
 </G_EMP>
 <G_EMP>
  <DEPARTMENT_NAME>IT</DEPARTMENT_NAME> 
  <FIRST_NAME>David</FIRST_NAME> 
  <LAST_NAME>Austin</LAST_NAME> 
  <HIRE_DATE>1997-06-25T00:00:00.000-07:00</HIRE_DATE> 
  <SALARY>4800</SALARY> 
 </G_EMP>

...
</DATA_DS>

この例では、出力PDFレポートに各従業員のドキュメントが含められます。新しいPDFを部門ごとに生成します。PDFファイルに含まれている各レコードのFIRST_NAMEおよびLAST_NAMEのリストをインデックスに記録します。

この出力を実現するには、テンプレートに次のように入力します。

<?for-each-group:ROW;./DEPARTMENT_NAME?>
<?for-each:current-group()?>
<?catalog-index-info:'First Name';FIRST_NAME?>
<?catalog-index-info:'Last Name';LAST_NAME?>
...
<?end for-each?>
<?document-split:?>
<?end for-each-group?>

A.4 PDFテンプレートへのPDF分割の実装

このセクションでは、出力を複数のPDFファイルに分割するためにPDFテンプレートで必要なコマンドを説明します。

A.4.1 PDFテンプレートでのコマンドの入力

PDFテンプレートでこの機能を有効化するには、テンプレート内の表A-1にリストされている次の3つのフォーム・フィールドに「ツールチップ」フィールドで指定されたコマンドを入力します。

表A-1

フォーム・フィールド名 ツールチップのコマンド

REPEAT-ELEMENT

<?repeat-element:element name?>: element_nameは、カウントされる繰返し要素のXMLタグ名です。例: <?repeat-element:emp_id?>

CATALOG-INDEX-INFO

<?catalog-index-info:'Name';element_name?>: Nameは、指定したelement_nameに対してインデックス・ファイルで表示されるラベルです。インデックスでは、zip化される各ファイルに対してFromおよびToのリストが生成されます。例: <?catalog-index-info:'Last Name';LAST_NAME?>: catalog-index-infoコマンドを複数回組み込むことで、インデックス・ファイル内に複数のデータ要素を含めることができます。

SPLIT-COUNT

<?split-count:n?>: nは、新規ファイルの作成をトリガーするrepeat-elementの出現回数です。例: <?split-count:10000?>