ヘッダーをスキップ

Oracle Fusion Middleware Oracle Business Intelligence Publisherレポート・デザイナーズ・ガイド
リリース11g (11.1.1)
部品番号 B63038-01
目次へ移動
目次
前のページへ移動
次のページへ移動

Excelテンプレートの作成

この章では、次のトピックについて説明します。

概要

Excelテンプレートは、エンタープライズ・レポート・データをExcelで取得および書式設定するために、Microsoft Excel内で設計するレポート・レイアウトです。Excelテンプレートは、データをワークシートにマップし、データがExcelブックにどのように出力されるかを制御する追加の処理を実行するための特殊機能セットを提供します。

Excelテンプレートの機能

Excelテンプレートでは次のことを行えます。

Excelテンプレートの制限事項

Excelテンプレートには、次のような制限事項があります。

前提条件

Excelテンプレートの設計には、次のような前提条件があります。

サポートされている出力

ExcelテンプレートはExcelバイナリ(.xls)出力のみを生成します。

デスクトップ・ツール

BI Publisherでは、ダウンロード可能なExcelへのアドインが提供されています。このアドインを使用すると、サンプル・データでテンプレートをプレビューできます。これにより、先にBI Publisherのカタログにアップロードしなくてもテンプレートをテストおよび編集できるため、設計が容易になります。

Template Builder for Excelは、Template Builder for Wordのインストール時に自動的にインストールされます。これらのツールは、次の手順で、Oracle Business Intelligence PublisherまたはOracle Business Intelligence Enterprise Editionのホーム・ページからダウンロードできます。

はじめに」リージョンで、「BI Publisherツールのダウンロード」をクリックします。

Excelテンプレートのサンプル

Template BuilderにはExcelテンプレートのサンプルが含まれています。

Windowsデスクトップからサンプルにアクセスするには:

スタート」メニューから、「プログラム」、「Oracle BI Publisher Desktop」、「サンプル」、「Excel」の順に選択します。

Excelのサンプル・テンプレートを含むフォルダが開きます。

概念

RTFテンプレートの設計と同様に、Excelテンプレートの設計では、XMLデータからのフィールドをExcelワークシート内の位置にマップするというパラダイムに従います。Excelテンプレートでは、BI Publisherの特殊構文とともにExcelの機能を使用して、このマッピングを実行します。データ要素の直接マッピングに加え、Excelテンプレートでは、特別なシート(XDO_METADATAシート)を使用して、より複雑な書式設定指示を指定およびマップします。

データ・フィールド・プレースホルダとグループの識別

Excelテンプレートでは、名前付きセルおよびセルのグループを使用して、BI Publisherによるデータ要素の挿入を可能にします。セルにはBI Publisher構文を使用して名前が付けられ、XMLデータへのマッピングが設定されます。セル名はテンプレート内で、名前付きセルと、XDO_METADATAシートで定義されている計算および書式設定指示との間のマッピングを設定するためにも使用されます。

テンプレートの内容とレイアウトは、レポートの入力として使用されるXMLデータ・ファイルの内容と階層に対応している必要があります。テンプレート内の繰返し要素の各グループは、XMLファイル内の親子関係に対応している必要があります。データがExcel内の適切なレイアウトに対応するように構造化されていない場合は、XSLTの前処理またはグループ化関数を使用して、データを再グループ化することができます。ただし、複雑にすることなく最高の性能を得るには、レポート・レイアウトを念頭に置いてデータ・モデルを設計することをお薦めします。

注意: これらのオプションの詳細は、「XSL変換(XSLT)ファイルを使用したデータの前処理」および「グループ化関数」を参照してください。

Excel定義名の使用

Excelの定義名機能は、データ・フィールドおよび繰返し要素を識別するために使用します。Excelの定義名は、セル、セルの範囲、式または定数を表す名前です。

ヒント: 定義名およびMicrosoft Excel 2007での使用法の詳細は、Microsoftのヘルプ・トピック「数式で名前を定義し使用する」を参照してください。

Excelテンプレート内で使用する定義名は、この章で説明する構文を使用すると同時に、Microsoft Excelのヘルプ・ドキュメントに記載されているMicrosoft社のガイドラインに従う必要があります。BI Publisherの定義名は、テンプレート・シートに従っています。

XDO_定義名について

BI Publisher定義名は、接頭辞XDO_で識別されるExcel定義名です。テンプレート・ファイル内のプレースホルダをマークアップすることにより、テンプレート内のプレースホルダの位置とXMLデータ要素との間にリンクが作成されます。また、データ範囲を他の式計算、チャートおよびマクロで参照できるように、出力レポート内でデータ範囲を動的に拡張する能力も維持されます。

Excel固有の関数の使用

定義名が単純な表で使用されているかぎり、XDO_定義名をExcel固有の式で使用できます。レポートの生成時には、式が正しく計算されるように、BI Publisherによってこれらの名前付きリージョンに対するリージョン範囲が自動的に調整されます。

ただし、テンプレート内にネストしたグループを作成すると、最終的なレポートでグループ内に生成されるセルは、正しい名前と適切に関連付けることができません。この場合、Excel固有の関数でのXDO_定義名の使用はサポートされません。

XDO_METADATAシートについて

各Excelテンプレートには、テンプレート・ブック内にXDO_METADATAという名前のシートが必要です。このシートは、テンプレートをBI Publisherに対して、Excelテンプレートであると指定するために使用します。このシートは、テンプレート内のフィールドまたはグループに対して実行する計算および処理指示を指定するためにも使用します。BI Publisherには、特別なレポート機能を提供するための関数セットが備わっています。その他の書式設定および計算は、XSLTで記述できます。

完成したテンプレートをBI Publisherカタログにアップロードする前に、XDO_METADATAシートを非表示にすることをお薦めします。これにより、最終的なレポート出力で、レポート利用者にそれが表示されないようにすることができます。

注意: 詳細は、「XDO_METADATAの書式」および「BI Publisher関数の定義」を参照してください。

単純なテンプレートの作成

この項では、単純なExcelテンプレートの作成およびExcel Template Builderでのテスト手順を解説することにより、Excelテンプレートの概念を紹介します。次の手順から構成されます。

  1. データ・モデルからのサンプルXMLデータの取得

  2. BlankExcelTemplate.xlsファイルのオープンとテンプレート名としての保存

  3. Excelでのレイアウトの設計

  4. BI Publisher定義名の割当て

  5. XDO_METADATAシートの準備

  6. デスクトップExcel Template Builderでのテンプレートのテスト

ステップ1: データ・モデルからのサンプルXMLデータの取得

テンプレートを適切にマークアップするためのフィールド名と階層関係を把握するには、サンプル・データが必要です。レポート・データ・モデルからのサンプル・データの保存の詳細は、Oracle Fusion Middleware Oracle Business Intelligence Publisherデータ・モデリング・ガイドのデータ・モデルのテストとサンプル・データの生成に関する項を参照してください。

レポート・データ・モデルにはアクセスできないが、レポートにはアクセスできる場合は、かわりに、レポート・ビューアからサンプル・データを保存できます。レポート・ビューアからデータを保存するには:

  1. BI Publisherカタログで、レポートに移動します。

  2. 開く」をクリックしてレポート・ビューアでレポートを実行します。

  3. アクション」メニューをクリックし、「エクスポート」、「データ」の順に選択します。XMLファイルを保存するように求められます。

  4. ローカル・ディレクトリにファイルを保存します。

この例に対するサンプル・データは、部門ごとの従業員のリストです。従業員は部門ごとにグループ分けされ、リストされています。

<?xml version="1.0" encoding="UTF-8"?>
<! - Generated by Oracle BI Publisher 11.1.1.4.0 - >
<DATA>
 <DEPT>
   <DEPARTMENT_ID>20</DEPARTMENT_ID>
   <DEPARTMENT_NAME>Marketing</DEPARTMENT_NAME>
     <EMPS>
       <EMPLOYEE_ID>201</EMPLOYEE_ID>
       <EMP_NAME>Michael Hartstein</EMP_NAME>
       <EMAIL>MHARTSTE</EMAIL>
       <PHONE_NUMBER>515.123.5555</PHONE_NUMBER>
       <HIRE_DATE>1996-02-17T00:00:00.000+00:00</HIRE_DATE>
       <SALARY>13000</SALARY>
     </EMPS>
     <EMPS>
       <EMPLOYEE_ID>202</EMPLOYEE_ID>
       <EMP_NAME>Pat Fay</EMP_NAME>
       <EMAIL>PFAY</EMAIL>
       <PHONE_NUMBER>603.123.6666</PHONE_NUMBER>
       <HIRE_DATE>1997-08-17T00:00:00.000+00:00</HIRE_DATE>
       <SALARY>6000</SALARY>
     </EMPS>
  </DEPT>
<DEPT>
...
...
</DEPT>
</DATA>

ステップ2: BlankExcelTemplate.xlsファイルのオープンとテンプレート名としての保存

注意: Template Builder for Excelをインストールすることをお薦めします。このツールのダウンロードについては、「デスクトップ・ツール」を参照してください。

Template Builderのインストール時には、サンプルExcelテンプレートのセットがインストールされます。これには、BlankExcelTemplate.xlsという空のサンプルExcelテンプレートも含まれます。このテンプレート・ファイルには、空のSheet1とXDO_METADATAシートが含まれます。提供されたこのテンプレートで作業を開始するか、XDO_METADATAシートを使用するExcelブックにコピーすることをお薦めします。

ヒント: 既存のテンプレートから新規テンプレートを作成している場合は、テンプレート・シート内の既存の定義名はすべて削除してください。

BlankExcelTemplate.xlsを開くには:

  1. Windowsデスクトップで「スタート」メニューから、「プログラム」、「Oracle BI Publisher Desktop」、「サンプル」、「Excel」の順に選択します。

  2. Excel Templatesサンプル・フォルダで、BlankExcelTemplate.xlsをダブルクリックして開きます。

  3. ファイルを、選択した名前で、Microsoft Excel 97-2003ブック形式(*.xls)で保存します。

ステップ3: Excelでのレイアウトの設計

次の図に示すように、Excelで、データをどのように表示するかを決定し、サンプル設計を作成します。

この図についてはドキュメントのテキストで説明しています

この設計では、部門名と、部門内の各従業員に対してそれぞれ1行を表示します。フォント・スタイル、網掛け、配置など、設計にExcelの書式設定を適用できます。このレイアウトには合計フィールドが含まれることに注目してください。このフィールドの値はデータには含まれず、計算が必要になります。

ステップ4: BI Publisher定義名の割当て

この設計をテンプレートとしてコード化するには、セルをXDO_定義名でマークアップすることにより、データ要素にマップします。セルには、次の書式に従って名前を付ける必要があります。

セルへの定義名の適用

  1. Excelワークシート内のセルをクリックします。

  2. 数式バーの左端の「名前」ボックスをクリックします。「名前」ボックスにデフォルト名が表示されます。デフォルトでは、すべてのセルには位置に応じて名前が付けられます(A8など)。

  3. 「名前」ボックスに、XDO_接頭辞とデータからのタグ名を使用して名前を入力します。例: XDO_?EMP_NAME?

  4. [Enter]を押します。

    次の図は、Employee Nameフィールドに対する定義名が「名前」ボックスに入力された様子を示しています。

    この図についてはドキュメントのテキストで説明しています

  5. DEPARTMENT_NAME、EMPLOYEE_ID、EMAIL、PHONE_NUMBERおよびSALARYの各データ・フィールドに対して、この作業を繰り返します。

    ヒント: [Enter]を押さずに「名前」ボックスから移動すると、入力した名前は保存されません。

    セルの内容の編集中は、「名前」ボックスを編集することはできません。

    名前の長さは255文字を超えることはできません。

  6. 給料の合計フィールドについては、計算をそのセルにマップします。ここでは、セルに、XDO_?TOTAL_SALARY?という名前を付けます。計算は後で追加します。

すべてのフィールドを入力したら、Excelの「名前の管理」機能を使用して、名前を確認し、必要に応じて修正や編集を行えます。名前の管理には、次に示すように、Excelの「数式」タブからアクセスできます。

この図についてはドキュメントのテキストで説明しています

この例のすべてのセルに名前を付けると、「名前の管理」ダイアログは次のようになります。

この図についてはドキュメントのテキストで説明しています

このダイアログで、すべてのエントリを確認し、エラーを修正できます。

グループの理解

グループとは、特定の要素の出現ごとに繰り返されるデータのセットです。サンプル・テンプレートの設計では、次の2つのグループを使用します。

つまり、従業員は部門ごとにグループ化され、各従業員のデータは従業員要素ごとにグループ化されます。これを最終的なレポートで実行するには、グループ化要素ごとに繰り返すセルの前後にグループ化タグを追加します。

データは、テンプレート内に作成したいグループに基づいて構造化されている必要があることに注意してください。この例のデータ構造は次のとおりです。

<DATA> 
   <DEPT>
      <EMPS>

これにより、レポートに適切なグループ化が設定されます。

テンプレート内にグループを作成するには:

  1. グループを構成するセルを強調表示します。この例では、セルはA8 - E8です。

  2. 数式バーの左端の「名前」ボックスをクリックし、XDO_GROUP_接頭辞とデータからのグループに対するタグ名を使用して、名前を入力します。例: XDO_GROUP_?EMPS?

  3. [Enter]を押します。

次の図に、Employeesグループに対して入力されたXDO_GROUP_定義名を示します。従業員データの行のみが強調表示されていることに注目してください。ヘッダーは強調表示しないでください。また、XDO_?TOTAL_SALARY?セルも強調表示されていないことにも注目してください。

この図についてはドキュメントのテキストで説明しています

部門グループを定義するには、次の図に示すように、部門名セルとその下のすべての従業員フィールド(A5-E9)を含めます。

この図についてはドキュメントのテキストで説明しています

データ内のグループと一致するように、このグループの名前をXDO_GROUP_?DEPT?として入力します。部門レベルで繰り返されるように、部門グループにXDO_?TOTAL_SALARY?セルが含まれていることに注目してください。

ステップ5: XDO_METADATAシートの準備

テンプレートを処理するために、BI PublisherにはXDO_METADATAというシートが必要です。このシートは、ここで定義する仕様に従っている必要があります。

XDO_METADATAシートの書式

XDO_METADATAシートは、次の図に示すような書式を持つ必要があります。

この図についてはドキュメントのテキストで説明しています

この書式は、ヘッダー・セクションとデータ制約セクションという2つのセクションから構成されます。どちらのセクションも必須です。ヘッダー・セクションでは、列Aのすべてのエントリをリストする必要がありますが、値が必要なのは、図に示したように、Template Typeの1つだけです。データ制約(Data Constraints)セクションには内容は不要ですが、この図に示すように存在している必要があります。

この手順では、このサンプルExcelテンプレートを実行するためにシートをセットアップする方法について説明します。XDO_METADATAシートによって提供される機能の詳細は、「BI Publisher関数の定義」を参照してください。

XDO_METADATAシートの作成

ステップ2でXDO_METADATAシートをコピーした場合は、この項を飛ばして、「XDO_?TOTAL_SALARY?フィールドに対する計算の追加」に進みます。コピーしていない場合は、次の手順に従って、非表示のシートを設定します。

  1. Excelブックに新規シートを作成し、XDO_METADATAという名前を付けます。

  2. 行1から、列Aに次の変数名を1行に1つずつ入力することにより、ヘッダー・セクションを作成します。

  3. 1行飛ばし、行10の列Aに「Data Constraints」と入力します。

  4. ヘッダー・リージョンで、変数Template Typeに対して、値「TYPE_EXCEL_TEMPLATE」を入力します。

XDO_?TOTAL_SALARY?フィールドに対する計算の追加

この手順の前半で、SALARY列にリストされた給料の合計を表示するセルに、定義名XDO_?TOTAL_SALARY?を割り当てました。ここでは、XDO_METADATAシートのData Constraintsセクションに計算を追加し、その計算をXDO_?TOTAL_SALARY?フィールドにマップします。

  1. Data Constraintsセクションの列Aに、セルの定義名「XDO_?TOTAL_SALARY?」を入力します。

  2. 列Bに、XPATH関数として計算を入力します。グループ内のすべての従業員に対するSALARY要素の合計を計算するには、「<?sum(.//SALARY)?>」と入力します。

完成したXDO_METADATAシートを次の図に示します。

この図についてはドキュメントのテキストで説明しています

ステップ6: テンプレートのテスト

Template Builder for Excelをインストールしている場合は、次の図に示すように、リボン・メニューに「BI Publisher」タブが表示されます。

この図についてはドキュメントのテキストで説明しています

サンプル・データを使用してレポートをプレビューするには:

  1. サンプルXML」をクリックします。サンプル・データ・ファイルを選択するように求められます。

  2. プレビュー」をクリックします。

    サンプル・データがテンプレートに適用され、出力ドキュメントが新しいブック内に開きます。次の図は、サンプル・データでのテンプレートのプレビューを示しています。

    この図についてはドキュメントのテキストで説明しています

日付の書式設定

Excelでは正規日付書式は認識されません。XMLデータの日付書式が正規書式である場合(つまりYYYY-MM-DDThh:mm:ss+HH:MM)、正しく表示するには関数を適用する必要があります。

日付を表示するための1つのオプションは、ExcelのREPLACEとSUBSTITUTE関数を使用する方法です。このオプションでは、完全な日付とタイムスタンプが維持されます。データ内の日付部分(YYY-MM-DD)のみが必要な場合は、DATEVALUE関数を使用することもできます。次の例では、両方のオプションの使用方法を示します。

例: Excelでの正規日付の書式設定

Employee by Departmentテンプレートおよび最初の例からのデータを使用して、HIRE_DATE要素をレイアウトに追加し、次の図の列Eに示すように日付を表示したいものとします。

この図についてはドキュメントのテキストで説明しています

日付を上図のように書式設定するには、次の手順に従います。

  1. HIRE_DATEに対するサンプル値をXMLデータからコピーして、セルに貼り付けます。例:

    次の値を

    1996-02-03T00:00:00.000-07:00

    コピーして、E8セルに貼り付けます。

  2. 次の図に示すように、セルに定義名XDO_?HIRE_DATE?を割り当てて、データ内のHIRE_DATE要素にマップします。

    この図についてはドキュメントのテキストで説明しています

    これ以上の操作を行わなければ、HIRE_DATE値は図に示したように表示されます。日付を3-Feb-96と書式設定するには、そのフィールドに関数を適用し、結果を別のフィールドに表示する必要があります。

  3. 新しいHire Date列を挿入します。次の図に示すように、これが列Fになります。

    この図についてはドキュメントのテキストで説明しています

  4. 新しいHire Dateセル(F8)に、次のいずれかのExcel関数を入力します。

    関数を入力すると、次の図に示すように、F8セルが移入されます。

    この図についてはドキュメントのテキストで説明しています

  5. セルに書式設定を適用します。

    F8セルを右クリックします。メニューから「セルの書式設定」を選択します。次の図に示すように、「セルの書式設定」ダイアログで、「日付」と適切な書式を選択します。

    この図についてはドキュメントのテキストで説明しています

    F8セルのサンプル・データは、「3-Feb-96」と表示されるようになります。

  6. 最後に、レポート利用者に対して変換元の正規日付が表示されないように、列Eを非表示にします。

    この図についてはドキュメントのテキストで説明しています

BI Publisher関数の定義

BI Publisherには、追加のレポート機能を実行するための一連の関数が用意されています。これらの関数は、XDO_METADATAシートのData Constraintsリージョンで定義します。

これらの関数では、次に示すように、XDO_METADATAシートの列A、BおよびCを使用します。

列Aは、関数を宣言するか、計算またはXSL評価の結果をマップするオブジェクトの定義名を指定するために使用します。

列Bは、XDO関数に対するデータ制約を制御する方法を記述する特殊なXDO-XSL構文、またはXDO_名前付き要素に適用する特殊な制約を記述するXSL構文を入力するために使用します。

列Cは、一部の関数に対する追加の指示を指定するために使用します。

これらの関数については、次の3つの項で説明します。

レポート関数

次の関数は、以下に示すコマンドおよびBI Publisher構文とXSLの組合せを使用して、テンプレートに追加できます。次の表に、コマンドのサマリー・リストを示します。使用法の詳細は、該当する項を参照してください。

関数 コマンド
複数のシートへのレポート・データの分割 XDO_SHEET_?
および
XDO_SHEET_NAME_?
パラメータの定義 XDO_PARAM_?n?
リンクの定義 XDO_LINK_?link object name?
サブテンプレートのインポート XDO_SUBTEMPLATE_?n?
Java拡張ライブラリの参照 XDO_EXT_?n?

複数のシートへのレポートの分割

注意: 複数のシートでは、イメージはサポートされません。テンプレート・シートにイメージが含まれる場合、データが複数のシートに分割されると、イメージは最初のシートにのみ表示されます。

レポート・データを複数のシートに分割するロジックを定義するには、次のコマンドのセットを使用します。

列Aのエントリ 列Bのエントリ 列Cのエントリ
XDO_SHEET_? <?xsl_evaluation to split the data?>
例:
<?.//DEPT?>
なし
XDO_SHEET_NAME_? <?xsl_expression to name the sheet?>
例:
<?concat(.//DEPARTMENT_NAME,'-',count(.//EMP_NAME))?>
(オプション)
<?original sheet name?>
例: <?Sheet3?>

XDO_SHEET_?は、XMLデータ内の既存の高レベル・ノードを参照する必要があります。例<?.//DEPT?>は、データ内の<DEPT>の各出現に対し、新規シートを作成します。

データがフラットな場合、先にデータを前処理して適切な階層を作成しないかぎり、このコマンドを使用することはできません。データを前処理するには、XSLTファイルで変換を定義してから、XDO_METADATAシートのヘッダー・セクションのPreprocess XSLT Fileフィールドでこのファイルを指定します。詳細は、「XSL変換(XSLT)ファイルを使用したデータの前処理」を参照してください。

XDO_SHEET_NAME_?を使用して、シートに適用する名前を定義します。列Bに、新しいシート名を導出するためのXSL式を入力します。式はXMLデータ内の要素または属性に対する値を参照できます。または、これらの要素に対して文字列操作を実行して最終的なシート名を定義することもできます。次の例では、

<?concat(.//DEPARTMENT_NAME,'-',count(.//EMP_NAME))?>

DEPARTMENT_NAMEの値に、DEPTグループ内の従業員数を「-」で連結して、各シートに名前を付けます。

列Cの元のシート名エントリは、BI Publisherに対して、指定したシートの名前付けを開始するシートを指示します。このパラメータを入力しないと、XDO_名を含む、ブック内の最初のシートに名前付けが適用されます。たとえば、レポートの最初の2つのワークシートにサマリー・データが含まれ、バースト・データがSheet3から始まるべきであるような場合に、このパラメータを入力する必要があります。この場合、列Cに「<?SHEET3?>」と入力します。

例: 複数のシートへのデータの分割

前述の例の従業員データを使用します。この例では、次のことを行います。

  1. 従業員データの各セルに対する定義名を入力し、繰返しの従業員データに対するグループを作成します。

    この図についてはドキュメントのテキストで説明しています

    注意: データは部門ごとに分割されるため、部門をまたいでグループを作成しないでください。

  2. XDO_METADATAシートのData Constraintsセクションに次のように入力します。

    列Aのエントリ 列Bのエントリ
    XDO_SHEET_? <?.//DEPT?>
    XDO_SHEET_NAME_? <?concat(.//DEPARTMENT_NAME,'-',count(.//EMP_NAME))?>

これらのエントリを次の図に示します。

この図についてはドキュメントのテキストで説明しています

次の図は、生成されるレポートを示しています。各部門のデータは専用のシートに表示されています。シート名には、指定したネーミング規則が使用されています。

この図についてはドキュメントのテキストで説明しています

パラメータの宣言と受渡し

パラメータを定義するには、XDO_PARAM_?n?関数を使用してパラメータを宣言してから、$parameter_name構文を使用して値をパラメータに渡します。パラメータはデータ・モデル内で定義されている必要があります。

パラメータを宣言するには、次のコマンドを使用します。

列Aのエントリ 列Bのエントリ
XDO_PARAM_?n?
ここで、nはパラメータに対する一意の識別子です。
<?param@begin:parameter_name;parameter_value?>
ここで、parameter_nameはデータ・モデルからのパラメータ名であり、parameter_valueはオプションのデフォルト値です。
例:
<?param@begin:Country;US?>

パラメータの値をセル内で直接使用するには、次のように、XDO_定義名の定義内で、パラメータを$parameter_nameとして参照します。

列Aのエントリ 列Bのエントリ
XDO_PARAM_?parameter_name?
例:
XDO_PARAM_?Country?
<?$parameter_name?>
例:
<?$Country?>

$parameter_nameを使用して、XDO_METADATAシート内の他のロジックや計算内でパラメータを参照することもできます。

例: パラメータの定義と受渡し

この例では、Countryという名前のパラメータを宣言して参照します。

  1. テンプレート・シートで、セルを定義名でマークします。次の図では、セルが定義名XDO_?Country?でマークされています。

    この図についてはドキュメントのテキストで説明しています

  2. 非表示のシートで、次のようにそのセルにパラメータ値を割り当てます。

    この図についてはドキュメントのテキストで説明しています

リンクの定義

データ・セルに対するハイパーリンクを定義するには、XDO_LINK_?コマンドを使用します。

列Aのエントリ 列Bのエントリ
XDO_LINK_?cell object name?
例:
XDO_LINK_?INVOICE_NO?
<xsl statement to build the dynamic URL
例:
<xsl:value-of select="concat('https://server.company.com/documents/invoice_print.show?c_rptno=',./INVOICE_NO)"/>

例: リンクの定義

たとえば、会社で顧客向けの請求書を発行しているとします。請求書はWebサーバーからアクセス可能な中央の場所に保存されており、請求書番号(INVOICE_NO)で識別できます。次のように、各請求書へのダイナミック・リンクを作成するレポートを生成できます。

  1. テンプレート・シートで、INVOICE_NOを表示するセルに、XDO定義名XDO_?INVOICE_NO?を割り当てます。

    この図についてはドキュメントのテキストで説明しています

  2. XDO_METADATAシートで、次のように入力します。

    列Aのエントリ 列Bのエントリ
    XDO_LINK_?INVOICE_NO? <xsl:value-of select="concat('https://server.company.com/documents/invoice_print.show?c_rptno=',./INVOICE_NO)"/>

    Excelでのエントリを次の図に示します。

    この図についてはドキュメントのテキストで説明しています

レポート出力は次の図に示すように表示されます。XDO_METADATAシートで定義したロジックが適用され、各INVOICE_NOエントリに対してハイパーリンクが作成されます。

この図についてはドキュメントのテキストで説明しています

サブテンプレートのインポートとコール

いずれのXDO_コマンドでもコールおよび参照できるXSLサブテンプレートを宣言するには、次のコマンドを使用します。

注意: Template Builder for Excelでは、サブテンプレートをインポートするテンプレートに対するプレビューはサポートされていません。

サブテンプレートをインポートするには、次のコマンドを入力します。

列Aのエントリ 列Bのエントリ
XDO_SUBTEMPLATE_?n?
ここで、nは一意の識別子です。
例:
XDO_SUBTEMPLATE_?1?
<xsl:import href="xdoxsl:///path to subtemplate.xsb?"/>
例:
<xsl:import href="xdoxsl:///Shared Folders/Financial Reports/SubTemplates/MySubTemplate.xsb?"/>

サブテンプレートをコールするには、列Aで、結果を返すセルの名前を宣言してから、実行するその他のXSL処理とともにcall-template構文を入力します。

列Aのエントリ 列Bのエントリ
XDO_?cell object name? <xsl:call-template name="template_name">
</xsl:call-template>

XSLサブテンプレートおよびカタログ内でのサブテンプレート・オブジェクトの作成の詳細は、「XSLサブテンプレートの設計」を参照してください。

例: サブテンプレートのインポートとコール

次のサブテンプレートがBI PublisherカタログにPaymentsSummary-SubTemplate.xsbとしてアップロードされているとします。このサブテンプレートは、pPayTypeという名前のパラメータの値を評価し、その値に基づいて、支払いタイプを示す文字列を返します。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    </xsl:template>
      <xsl:template name="BRM_PAY_TYPES">
	 <xsl:param name="pPayType" select="string('ALL')"/>
	 <xsl:choose>
	    <xsl:when test="$pPayType = '0'">UNDEFINED</xsl:when>
	    <xsl:when test="$pPayType=string('10000')">PREPAID</xsl:when>
	    <xsl:when test="$pPayType=string('10001')">INVOICE</xsl:when>
	    <xsl:when test="$pPayType=string('10003')">CREDIT CARD</xsl:when>
	    <xsl:when test="$pPayType=string('10005')">DIRECT DEBIT</xsl:when>
	    <xsl:when test="$pPayType=string('10011')">CASH</xsl:when>
	    <xsl:when test="$pPayType=string('10012')">CHECK</xsl:when>
	    <xsl:when test="$pPayType=string('ALL')">ALL</xsl:when>
	    </xsl:choose>
	</xsl:template>
</xsl:stylesheet>

Excelテンプレートで、あるフィールドに対してXDO定義名XDO_?TYPE?を定義済です。次の図に示すように、このフィールドはサブテンプレートで実行されるコードから返される文字列に基づいて移入されます。

この図についてはドキュメントのテキストで説明しています

Data Constraintsリージョンに次のように入力します。

列Aのエントリ 列Bのエントリ
XDO_SUBTEMPLATE_?1? <xsl:import href="xdoxsl:///Shared Folders/Financial Reports/SubTemplates/PaymentsSummary-SubTemplate.xsb?"/>
XDO_?TYPE? <xsl:call-template name="BRM_PAY_TYPES">
<xsl:with-param name="pPayType" select="string('10000')"/>
</xsl:call-template>

XDO_SUBTEMPLATE_?1?関数は、BI Publisherカタログからサブテンプレートをインポートします。

XDO_?TYPE?セル・エントリは、列Bに入力されたサブテンプレート処理の結果をマップします。

Java拡張ライブラリの参照

テンプレート内にJava拡張ライブラリへの参照を含め、このライブラリ内のメソッドをコールしてテンプレート内で処理を実行することができます。Java拡張ライブラリを参照するには、次のコマンドを使用します。

列Aのエントリ 列Bのエントリ
XDO_EXT_?n?
ここで、nは一意の識別子です。
例: XDO_EXT?1?
<?namespace:xmlns:bipext="exension library"?>
例:
<?namespace:xmlns:bipext="http://www.oracle.com/XSL/Transform/java/ oracle.com.xmlpublisher.reports.BIPExtension"?>

1つのテンプレート・ファイル内で複数の拡張ライブラリを定義することができます。

例: Java拡張ライブラリのコール

拡張ライブラリに、テンプレート内でコールしたい次の2つのメソッドが含まれるものとします。

前述のようにライブラリを宣言したら、列AにXDO定義名を入力し、列Bで関数をコールすることにより、メソッドを適用したいセルを指定します。例:

列Aのエントリ 列Bのエントリ
XDO_?PARAM_START_DATE? <xsl:value-of select="bipext:infTimeToStr(bipext:infStrToTimet((.//PARAM_START_DATE)[1],2),3)"

Java拡張ライブラリを宣言してコールするためのXDO_METADATAシートのエントリを次の図に示します。

この図についてはドキュメントのテキストで説明しています

特定のデータ属性値に依存する書式設定関数

以下のコマンドには、XMLデータ・ファイルに特定の書式設定属性が存在することが必要です。次の表に、コマンドのサマリー・リストを示します。使用法の詳細は、該当する項を参照してください。

関数 コマンド
罫線と下線のスタイルの定義 XDO_STYLE_n_?cell object name?
行のスキップ XDO_SKIPROW_?cell object name?

罫線と下線のスタイルの定義

Excelの書式設定を使用してテンプレートに一貫したスタイルを定義できますが、XDO_STYLEコマンドを使用すると、XMLデータに基づいて、任意のデータ・セルに対して別のスタイルを動的に定義することができます。

XDO_STYLEコマンドでは、スタイルを適用するセル、スタイルをいつ適用すべきかを決定するためのロジックおよび適用するスタイル・タイプを指定します。スタイル値はXMLデータ内に存在している必要があります。

列Aのエントリ 列Bのエントリ 列Cのエントリ
XDO_STYLE_n_?cell_object_name?
例:
XDO_STYLE_1_?TOTAL_SALARY?
<xsl evaluation that returns a supported value>
例:
<xsl:value-of select=".//TOTAL_SALARY/@borderStyle"/>
スタイル・タイプ
例: BottomBorderStyle

BI Publisherでは、次のような標準のExcelスタイル・タイプおよび値がサポートされています。

スタイル・タイプ サポートされる値
(列Bの評価によって返される必要があります)
サポートされるタイプ
(列Cに入力します)
標準 BORDER_NONE BORDER_THIN
BORDER_MEDIUM BORDER_DASHED
BORDER_DOTTED BORDER_THICK
BORDER_DOUBLE BORDER_HAIR
BORDER_MEDIUM_DASHED
BORDER_DASH_DOT
BORDER_MEDIUM_DASH_DOT
BORDER_DASH_DOT_DOT
BORDER_MEDIUM_DASH_DOT_DOT
BORDER_SLANTED_DASH_DOT
BottomBorderStyle
TopBorderStyle
LeftBorderStyle
RightBorderStyle
DiagonalLineStyle

次のいずれかのタイプを使用して色を設定することもできます。

スタイル・タイプ サポートされる値
(列Bの評価によって返される必要があります)
サポートされるタイプ
(列Cに入力します)
標準 色スタイルの設定時には、RRBBGG 16進フォーマットで値を指定します。例: borderColor="0000FF" BottomBorderColor
TopBorderColor
LeftBorderColor
RightBorderColor
DiagonalLineColor

BI Publisherでは、次の値の下線タイプもサポートされています。

スタイル・タイプ サポートされる値
(列Bの評価によって返される必要があります)
サポートされるタイプ
(列Cに入力します)
下線 UNDERLINE_NONE
UNDERLINE_SINGLE
UNDERLINE_DOUBLE UNDERLINE_SINGLE_ACCOUNTING
UNDERLINE_DOUBLE_ACCOUNTING
UnderlineStyle

1つのセルに対して、複数の下線スタイルを定義できます。

例: スタイルの定義

テンプレートにスタイルを適用するには、スタイル値がデータ内に存在している必要があります。この例では、Excelテンプレートに示したDEPT_TOTAL_SALARYフィールドに、罫線スタイルと下線スタイルを適用します。

この例では、次のデータを使用します。データ内のDEPT_TOTAL_SALARY要素には、これらの属性が定義されています。

これらの各属性の値を使用して、テンプレート内に定義されたロジックに基づいて、定義済のスタイルを適用します。

<?xml version="1.0" encoding="UTF-8"?>

<EMPLOYEES>
  <G_DEPT>
    <DEPARTMENT_ID>10</DEPARTMENT_ID>
    <DEPARTMENT_NAME>Administration</DEPARTMENT_NAME>
    <LIST_G_EMP>
      <G_EMP>
        <EMPLOYEE_ID>200</EMPLOYEE_ID>
        <EMP_NAME>Jennifer Whalen</EMP_NAME>
        <EMAIL>JWHALEN</EMAIL>
        <PHONE_NUMBER>515.123.4444</PHONE_NUMBER>
        <HIRE_DATE>1987-09-17T00:00:00.000-06:00</HIRE_DATE>
        <SALARY>4400</SALARY>
      </G_EMP>
    </LIST_G_EMP>

    <DEPT_TOTAL_SALARY borderStyle="BORDER_DOUBLE" underLineStyle="UNDERLINE_DOUBLE_ACCOUNTING" borderColor="0000FF">4400</DEPT_TOTAL_SALARY>
  </G_DEPT>
  <G_DEPT>
    <DEPARTMENT_ID>20</DEPARTMENT_ID>
    <DEPARTMENT_NAME>Marketing</DEPARTMENT_NAME>
    <LIST_G_EMP>
      <G_EMP>
        <EMPLOYEE_ID>201</EMPLOYEE_ID>
        <EMP_NAME>Michael Hartstein</EMP_NAME>
        <EMAIL>MHARTSTE</EMAIL>
        <PHONE_NUMBER>515.123.5555</PHONE_NUMBER>
        <HIRE_DATE>1996-02-17T00:00:00.000-07:00</HIRE_DATE>
        <SALARY>13000</SALARY>
      </G_EMP>
      <G_EMP>
        <EMPLOYEE_ID>202</EMPLOYEE_ID>
        <EMP_NAME>Pat Fay</EMP_NAME>
        <EMAIL>PFAY</EMAIL>
        <PHONE_NUMBER>603.123.6666</PHONE_NUMBER>
        <HIRE_DATE>1997-08-17T00:00:00.000-06:00</HIRE_DATE>
        <SALARY>6000</SALARY>
        </G_EMP>
      </LIST_G_EMP>

      <DEPT_TOTAL_SALARY borderStyle="BORDER_DOUBLE" underLineStyle="UNDERLINE_DOUBLE_ACCOUNTING" borderColor="0000FF">19000</DEPT_TOTAL_SALARY>
  </G_DEPT>

...

</EMPLOYEES>
  1. Excelテンプレートで、定義名XDO_?DEPT_TOTAL_SALARY?を、データからのDEPT_TOTAL_SALARYを表示するフィールドに割り当てます。

    この図についてはドキュメントのテキストで説明しています

  2. XDO_METADATAシートで、次のように入力します。

次の図は、Data Constraintsリージョンの3つのエントリを示しています。

この図についてはドキュメントのテキストで説明しています

レポートを実行すると、次の図に示すように、スタイル・コマンドがXDO_?DEPT_TOTAL_SALARY?セルに適用されます。

この図についてはドキュメントのテキストで説明しています

行のスキップ

列Bに定義されている評価の結果が大文字・小文字を区別しない文字列"True"を返す場合に、1行のデータの表示を抑制するには、XDO_SKIPROWコマンドを使用します。

列Aのエントリ 列Bのエントリ
XDO_SKIPROW_?cell_object_name?
例:
XDO_SKIPROW_?EMPLOYEE_ID?
<xsl evaluation that returns the string "True"/>
例:
<xsl:if test="string-length(./EMPLOYEE_ID/@MANAGER) != 0">
<xsl:value-of select="./EMPLOYEE_ID/@MANAGER"/>
</xsl:if>

例: データ要素属性に基づく行のスキップ

この例では、EMPLOYEE_ID要素に値が"True"のMANAGER属性が含まれる場合に、Excelテンプレートにより、従業員データ行の表示が抑制されます。

次のデータを想定します。従業員Michael HartsteinのEMPLOYEE_ID要素に、値が"True"のMANAGER属性があることに注目してください。このセット内の他のEMPLOYEE_ID要素にはこの属性はありません。

<?xml version="1.0" encoding="UTF-8"?>

<EMPLOYEES>
  <G_DEPT>
    <DEPARTMENT_ID>20</DEPARTMENT_ID>
    <DEPARTMENT_NAME>Marketing</DEPARTMENT_NAME>
    <LIST_G_EMP>
      <G_EMP>
        <EMPLOYEE_ID MANAGER="TRUE">201</EMPLOYEE_ID>
        <EMP_NAME>Michael Hartstein</EMP_NAME>
        <EMAIL>MHARTSTE</EMAIL>
        <PHONE_NUMBER>515.123.5555</PHONE_NUMBER>
        <HIRE_DATE>1996-02-17T00:00:00.000-07:00</HIRE_DATE>
        <SALARY>13000</SALARY>
       </G_EMP>
       <G_EMP>
        <EMPLOYEE_ID>202</EMPLOYEE_ID>
        <EMP_NAME>Pat Fay</EMP_NAME>
        <EMAIL>PFAY</EMAIL>
        <PHONE_NUMBER>603.123.6666</PHONE_NUMBER>
        <HIRE_DATE>1997-08-17T00:00:00.000-06:00</HIRE_DATE>
        <SALARY>6000</SALARY>
       </G_EMP>
       <G_EMP>
        <EMPLOYEE_ID>652</EMPLOYEE_ID>
        <EMP_NAME>William Morgan</EMP_NAME>
        <EMAIL>WMORGAN</EMAIL>
        <PHONE_NUMBER>219.123.7776</PHONE_NUMBER>
        <HIRE_DATE>1994-10-17T00:00:00.000-06:00</HIRE_DATE>
        <SALARY>8000</SALARY>
       </G_EMP>
      </LIST_G_EMP>
  </G_DEPT>

...

</EMPLOYEES>

MANAGER属性が"True"に設定されている場合に従業員データ行の表示を抑制するには、Data Constraintsセクションに次のように入力します。

列Aのエントリ 列Bのエントリ
XDO_SKIPROW_?EMPLOYEE_ID? <xsl:if test="string-length(./EMPLOYEE_ID/@MANAGER) != 0">
<xsl:value-of select="./EMPLOYEE_ID/@MANAGER"/>
</xsl:if>

このテンプレートからの出力を次の図に示します。従業員Michael Hartsteinはレポートに含まれていないことに注目してください。

この図についてはドキュメントのテキストで説明しています

グループ化関数

これらの関数は、テンプレート内のデータをグループ化するために使用します。

関数 コマンド
データのグループ化 XDO_GROUP_?group element?
データの再グループ化 XDO_REGROUP_?

データのグループ化

たとえば、データを複数のシートに分割する場合など、レイアウトに特定のデータのグループ化が必要なときに、フラットなデータをグループ化するには、XDO_GROUPコマンドを使用します。

列Aのエントリ 列Bのエントリ 列Cのエントリ
XDO_GROUP_?group element?
例:
XDO_GROUP_?STATE_GROUP?
<xsl beginning groupng logic/>
例:
<xsl:for-each-group select="current-group()" group-by="./STATE">
<xsl:for-each-group select="current-group()" group-by="./RESOURCE_NAME">
<xsl:for-each select="current-group()">
<xsl ending groupng tags/>
例:
</xsl:for-each>
<xsl:for-each-group>
<xsl:for-each-group>

XDO_?cell object name?でマークアップされたグループ定義セクションの始まりと終わりに配置するXSL文を定義します。対応するグループに適切な定義をそれぞれに指定することにより、テンプレート内に複数のグループをネストしてマークできます。

データの再グループ化

XDO_REGROUPは、定義名を使用して定義を宣言することにより、データを再グループ化します。これには、XSLTロジックは不要です。

列Aのエントリ 列Bのエントリ
XDO_REGROUP_? XDO_REGROUP_?UniqueGroupID?levelName?groupByName?sortByName?sortByName?sortByName?
ここで、
  • UniqueGroupIDはグループのIDです。levelNameと同じにすることも、別の名前を割り当てることもできます。

  • levelNameは、XMLデータ・ファイル内のXMLレベル・タグ名、またはXDO_グループ化構造のコンテキストでのcurrent-group()です。

  • groupByNameは、現在のグループのGroupBy操作に使用するフィールド名です。XDO_REGROUP_?コマンドが最も内側のグループに使用されている場合は、この名前は空のことがあります。

  • sortByNameは、グループのソートの基準とするフィールド名です。複数のsortByフィールドを指定できます。sortByNameを宣言しない場合は、XMLファイルからのデータはソートされません。

次の例は、3つのネストされたグループの作成方法を示しています。

列Aのエントリ 列Bのエントリ
XDO_REGROUP_? XDO_REGROUP_?PAYMENTSUMMARY_Q1?PAYMENTSUMMARY_Q1?PAY_TYPE_NAME?

前述の定義では、最も外側のグループがPAYMENTSUMMARY_Q1として定義され、PAY_TYPE_NAMEによってグループ化されます。

列Aのエントリ 列Bのエントリ
XDO_REGROUP_? XDO_REGROUP_?COUNTRYGRP?XDO_CURRGRP_?COUNTRY?

前述の定義は、外から2番目のグループを作成します。このグループには名前COUNTRY_GRPが割り当てられ、要素COUNTRYによってグループ化されます。

列Aのエントリ 列Bのエントリ
XDO_REGROUP_? XDO_REGROUP_?STATEGRP?XDO_CURRGRP_?STATE?

この定義は内側のグループSTATEGRPを作成し、sortByNameパラメータSTATEを含みます。

XSL変換(XSLT)ファイルを使用したデータの前処理

最高の性能を得るには、データ処理を可能なかぎり実行するようにデータ・モデルを設計する必要があります。データ・エンジンから必要な出力を得られない場合は、データを変換する命令を含むXSLTファイルを使用してデータを前処理することができます。次のようなユースケース例があります。

注意: Template Builder for Excelでは、XSLT前処理が必要なテンプレートのプレビューはサポートされていません。

XSLT前処理ファイルを使用するには:

  1. ファイルを作成し、.xslとして保存します。

  2. テンプレートの場合と同様に、ファイルをBI Publisherカタログ内のレポート定義にアップロードします。

    1. カタログ内のレポートに移動します。

    2. 編集」をクリックします。

    3. 新規レイアウトの追加」をクリックします。

    4. アップロード」をクリックします。

    5. 「アップロード」ダイアログのフィールドを完成させ、テンプレートの「タイプ」としてXSLスタイルシート(HTML/XML/テキスト)を選択します。

    6. アップロード後に、「リストの表示」をクリックします。レポートの表示時にユーザーからこのテンプレートがオプションとして見えないように、「アクティブ」を選択解除します。

      注意: テスト目的では、データへのテンプレートの適用時に中間データを表示できるように、XSLテンプレートをアクティブなままにした方がよい場合もあります。テストの完了後にテンプレートを非アクティブに設定します。

    7. レポート定義を保存します。

  3. ExcelテンプレートのXDO_METADATAシートのHeaderセクションで、Preprocess XSLT Fileパラメータに対してファイル名を入力します。例: SplitByBrand.xsl

Template Viewerを使用したテンプレートのデバッグ

テンプレート・プレビューで期待どおりの結果が表示されない場合は、Template Viewerを使用してトレース設定を有効にすることにより、デバッグ・メッセージを表示できます。Template Viewerでは、XSL-FOプロセッサでのサンプル・データとテンプレートのマージ後に生成される中間XSLファイルを保存および表示することもできます。XSLの知識があれば、これは非常に有用なデバッグ・ツールになります。

Template ViewerはTemplate Builder for Wordのインストール時にインストールされます。詳細は、「デスクトップ・ツール」を参照してください。

Template Viewerでプレビューし、ログ・メッセージを表示するには:

  1. Template Viewerを開きます。

    Windowsデスクトップで「スタート」メニューから、「プログラム」、「Oracle BI Publisher Desktop」、「Template Viewer」の順に選択します。

  2. 参照」をクリックして、サンプル・データ・ファイルおよびテンプレート・ファイルを含むフォルダを選択します。データ・ファイルとテンプレート・ファイルは同じフォルダに置かれている必要があります。

  3. Excelテンプレート」を選択します。「データ」および「テンプレート」リージョンに、そのディレクトリ内に存在するすべての.xmlファイルおよびすべての.xlsファイルが表示されます。

    この図についてはドキュメントのテキストで説明しています

  4. 適切なデータ・ファイルおよびテンプレート・ファイルをクリックして、それらを選択します。

  5. ログ・レベルを選択します。

  6. 出力フォーマット」リストから、「Excel」を選択します。

  7. 処理開始」をクリックします。

    Template Viewerにより、選択したデータと選択したテンプレートがマージされ、適切なビューアが作成されます。次の図に示すように、メッセージ・ボックス内にログ・メッセージがあれば確認します。

    この図についてはドキュメントのテキストで説明しています

生成されたXSLを表示するには:

  1. Template Viewerで、データ・ファイルとテンプレート・ファイルを選択し、出力フォーマットとして「Excel」を選択します。

  2. ツール」メニューから「XSLファイルの生成元」、「Excelテンプレート」の順に選択します。

    この図についてはドキュメントのテキストで説明しています

  3. プロンプトが表示されたら、生成されたXSLファイルを保存します。

  4. 保存した場所に移動し、適切なビューアでXSLファイルを開きます。