Oracle® Fusion Middleware Oracle Business Intelligence Publisherレポート・デザイナーズ・ガイド リリース11g (11.1.1) B63038-03 |
|
![]() 前へ |
![]() 次 |
この章では、Microsoft ExcelでBI Publisher用のレポート・テンプレートを作成する方法について説明します。
この章の内容は次のとおりです。
Excelテンプレートとは、Excelでエンタープライズ・レポート・データを取得および書式設定するために、Microsoft Excel内で設計されるレポート・レイアウトです。Excelテンプレートは、データをワークシートにマップし、データがExcelブックにどのように出力されるかを制御する追加の処理を実行するための特殊機能セットを提供します。
Excelテンプレートでは次のことを行えます。
Excel出力におけるデータの構造を定義します。
複数のシートで階層データを分離し、シートに動的に名前を付けます。
マスター/ディテール関係を持つデータのシートを作成します。
データにネイティブのXSL機能を使用して表示前に操作します。
Excelのネイティブ機能を使用します。
Excelテンプレートには、次のような制限事項があります。
データを複数のシートに分割するレポートでは、イメージはサポートされません。テンプレート・シートにイメージが含まれる場合、データが複数のシートに分割されると、イメージは最初のシートにのみ表示されます。
BI Publisherタグでのテンプレートのマークアップを容易にするツールはありません。すべてのタグは手動でコード化する必要があります。一部の機能には、XSLおよびXSL変換(XSLT)仕様の使用が必要です。
Excelテンプレートの設計には、次のような前提条件があります。
Microsoft Excel 2003以降。テンプレート・ファイルは、Excel 97-2003ブック・バイナリ形式(*.xls)で保存する必要があります。
一部の拡張機能を使用するには、レポート設計者にXSLおよびXSLTの知識が必要です。
レポート・データ・モデルが作成されている必要があります。
BI Publisherには、ダウンロード可能なExcel用のアドインが用意されています。このアドインを使用すると、サンプル・データでテンプレートをプレビューできます。これにより、先にBI Publisherのカタログにアップロードしなくてもテンプレートをテストおよび編集できるため、設計が容易になります。
Template Builder for Excelは、Template Builder for Wordのインストール時に自動的にインストールされます。これらのツールは、次の手順で、Oracle Business Intelligence PublisherまたはOracle Business Intelligence Enterprise Editionのホーム・ページからダウンロードできます。
「はじめに」リージョンで、「BI Publisherツールのダウンロード」をクリックします。
RTFテンプレートの設計と同様に、Excelテンプレートの設計では、XMLデータからのフィールドをExcelワークシート内の位置にマップするというパラダイムに従います。Excelテンプレートでは、BI Publisherの特殊構文とともにExcelの機能を使用して、このマッピングを実行します。データ要素の直接マッピングに加え、Excelテンプレートでは、特別なシート(XDO_METADATAシート)を使用して、より複雑な書式設定指示を指定およびマップします。
Excelテンプレートでは、名前付きセルおよびセルのグループを使用して、BI Publisherによるデータ要素の挿入を可能にします。セルにはBI Publisher構文を使用して名前が付けられ、XMLデータへのマッピングが設定されます。セル名はテンプレート内で、名前付きセルと、XDO_METADATAシートで定義されている計算および書式設定指示との間のマッピングを設定するためにも使用されます。
テンプレートの内容とレイアウトは、レポートへの入力として使用されるXMLデータ・ファイルの内容と階層に対応している必要があります。テンプレート内の繰返し要素の各グループは、XMLファイル内の親子関係に対応している必要があります。データがExcel内の適切なレイアウトに対応するように構造化されていない場合は、XSLTの前処理またはグループ化関数を使用して、データの再グループ化を実行できます。ただし、複雑にすることなく最高の性能を得るには、レポート・レイアウトを念頭に置いてデータ・モデルを設計することをお薦めします。
Excelの定義名機能は、データ・フィールドおよび繰返し要素を識別するために使用します。Excelの定義名は、セル、セルの範囲、式または定数を表す名前です。
ヒント: 定義名およびMicrosoft Excel 2007での使用法の詳細は、Microsoftのヘルプ・トピック「数式で名前を定義し使用する」を参照してください。 |
Excelテンプレート内で使用する定義名は、この章で説明する構文を使用すると同時に、Microsoft Excelのヘルプ・ドキュメントに記載されているMicrosoft社のガイドラインに従う必要があります。BI Publisherの定義名は、テンプレート・シートに従っています。
BI Publisher定義名は、接頭辞XDO_で識別されるExcel定義名です。テンプレート・ファイル内のプレースホルダをマークアップすることにより、テンプレート内のプレースホルダの位置とXMLデータ要素との間にリンクが作成されます。また、データ範囲を他の式計算、チャートおよびマクロで参照できるように、出力レポート内でデータ範囲を動的に拡張する能力も維持されます。
定義名が単純な表で使用されているかぎり、XDO_定義名をExcel固有の式で使用できます。レポートの生成時には、式が正しく計算されるように、BI Publisherによって名前付きリージョンのリージョン範囲が自動的に調整されます。
ただし、テンプレート内にネストしたグループを作成すると、最終的なレポートでグループ内に生成されるセルは、正しい名前と適切に関連付けることができません。この場合、Excel固有の関数でのXDO_定義名の使用はサポートされません。
各Excelテンプレートには、テンプレート・ブック内にXDO_METADATAという名前のシートが必要です。このシートを使用して、BI PublisherでテンプレートがExcelテンプレートであると認識できるようにします。このシートは、テンプレート内のフィールドまたはグループに対して実行する計算および処理指示を指定するためにも使用します。BI Publisherには、特別なレポート機能を提供するための関数セットが備わっています。その他の書式設定および計算は、XSLTで記述できます。
完成したテンプレートをBI Publisherカタログにアップロードする前に、XDO_METADATAシートを非表示にすることをお薦めします。この指定により、最終的なレポート出力で、レポート利用者にそれが表示されないようになります。
この項では、単純なExcelテンプレートの作成手順を説明し、作成したテンプレートをExcel Template Builderでテストすることにより、Excelテンプレートの概念を紹介します。この手順では次のステップを実行します。
テンプレートを適切にマークアップするためにフィールド名と階層関係を把握するには、サンプル・データが必要です。レポート・データ・モデルからのサンプル・データの保存の詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Publisherデータ・モデリング・ガイド』のデータ・モデルのテストとサンプル・データの生成に関する項を参照してください。
レポート・データ・モデルにはアクセスできないが、レポートにはアクセスできる場合は、かわりに、レポート・ビューアからサンプル・データを保存できます。
レポート・ビューアからデータを保存するには:
BI Publisherカタログで、レポートに移動します。
「開く」をクリックしてレポート・ビューアでレポートを実行します。
「アクション」メニューをクリックし、「エクスポート」、「データ」の順に選択します。XMLファイルを保存するように求められます。
ローカル・ディレクトリにファイルを保存します。
この例に対するサンプル・データは、部門ごとの従業員のリストです。従業員は部門ごとにグループ分けされ、リストされています。
<?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>
注意: Template Builder for Excelをインストールすることをお薦めします。このツールのダウンロードについては、第6.1.5項「Excelテンプレートのデスクトップ・ツール」を参照してください。 |
Template Builderのインストール時には、サンプルExcelテンプレートのセットがインストールされます。これには、BlankExcelTemplate.xlsという空のサンプルExcelテンプレートも含まれます。このテンプレート・ファイルには、空のSheet1とXDO_METADATAシートが含まれます。この提供されたテンプレートで作業を開始するか、使用するExcelブックにXDO_METADATAシートをコピーすることをお薦めします。
ヒント: 既存のテンプレートから新規テンプレートを作成している場合は、テンプレート・シート内の既存の定義名はすべて削除してください。第6.3.4.4項「定義名および定義グループの削除」を参照してください。 |
BlankExcelTemplate.xlsファイルを開く手順は次のとおりです。
Windowsデスクトップで「スタート」メニューから、「プログラム」、「Oracle BI Publisher Desktop」、「サンプル」、「Excel」の順に選択します。
Excel Templatesサンプル・フォルダで、BlankExcelTemplate.xlsをダブルクリックして開きます。
ファイルを、選択した名前で、Microsoft Excel 97-2003ブック形式(*.xls)で保存します。
図6-1に示すように、Excelで、データをどのように表示するかを決定し、サンプル設計を作成します。
この設計では、部門名と、部門内の各従業員に対してそれぞれ1行を表示します。フォント・スタイル、網掛け、配置など、設計にExcelの書式設定を適用できます。このレイアウトには合計フィールドが含まれることに注目してください。このフィールドの値はデータには含まれず、計算が必要になります。
この設計をテンプレートとしてコード化するには、セルをXDO_定義名でマークアップすることにより、データ要素にマップします。セルには、次の書式に従って名前を付ける必要があります。
データ要素: XDO_?element_name?
説明:
XDO_は必須の接頭辞です。
?element_name?は次のいずれかです。
?で区切られた、データからのXMLタグ名
導出した値をセルにマップするために使用する一意の名前
例: XDO_?EMPLOYEE_ID?
データ・グループ: XDO_GROUP_?group_name?
説明:
XDO_GROUP_は必須の接頭辞です。
?group_name?は、?で区切られた、XMLデータ内の親要素に対するXMLタグ名です。
導出したグループ化ロジックの定義に使用する一意の名前
例: XDO_GROUP_?DEPT?
疑問符デリミタ、group_nameおよびelement_nameでは、大文字/小文字が区別されることに注意してください。
セルに定義名を適用する手順は次のとおりです。
Excelワークシート内のセルをクリックします。
数式バーの左端の「名前」ボックスをクリックします。デフォルト名は、「名前」ボックスに表示されます。デフォルトでは、すべてのセルには位置に応じて名前が付けられます(A8など)。
「名前」ボックスに、XDO_接頭辞とデータからのタグ名を使用して名前を入力します。例: XDO_?EMP_NAME?
[Enter]を押します。
図6-2は、Employee Nameフィールドに対する定義名が「名前」ボックスに入力された状態を示しています。
図6-2 Employee Nameフィールドに対する定義名が「名前」ボックスに入力された状態
DEPARTMENT_NAME、EMPLOYEE_ID、EMAIL、PHONE_NUMBERおよびSALARYの各データ・フィールドに対して、この作業を繰り返します。
ヒント: [Enter]を押さないで「名前」ボックスから移動すると、入力した名前は保持されません。 |
セルの内容の編集中は、「名前」ボックスを編集することはできません。
名前の長さは255文字を超えることはできません。
給料の合計フィールドについては、計算をそのセルにマップします。ここでは、セルに、XDO_?TOTAL_SALARY?という名前を付けます。計算は後で追加します。
すべてのフィールドを入力したら、Excelの「名前の管理」機能を使用して、名前を確認し、必要に応じて修正や編集を行えます。名前の管理には、図6-3に示すように、Excelの「数式」タブからアクセスできます。
この例のすべてのセルに名前を付けると、「名前の管理」ダイアログには図6-4に示されているエントリが表示されます。
このダイアログで、すべてのエントリを確認し、エラーを修正できます。
グループとは、特定の要素の出現ごとに繰り返されるデータのセットです。サンプル・テンプレートの設計では、次の2つのグループを使用します。
<EMPS>要素の出現ごとに、従業員のデータ(名前、電子メール、電話番号、給料)がワークシートに表示されます。
<DEPT>要素の出現ごとに、部門名およびその部門に属する従業員のリストが表示されます。
つまり、従業員は部門ごとにグループ化され、各従業員のデータは従業員要素ごとにグループ化されます。これを最終的なレポートで実行するには、グループ化要素ごとに繰り返すセルの前後にグループ化タグを追加します。
データは、テンプレート内に作成するグループに基づいて構造化されている必要があることに注意してください。この例のデータ構造は次のとおりです。
<DATA> <DEPT> <EMPS>
これにより、レポートに適切なグループ化が設定されます。
テンプレート内にグループを作成する手順は次のとおりです。
グループを構成するセルを強調表示します。この例では、セルはA8 - E8です。
数式バーの左端の「名前」ボックスをクリックし、XDO_GROUP_接頭辞とデータからのグループに対するタグ名を使用して、名前を入力します。例: XDO_GROUP_?EMPS?
[Enter]を押します。
図6-5は、Employeesグループに対して入力されたXDO_GROUP_定義名を示しています。従業員データの行のみが強調表示されていることに注目してください。ヘッダーは強調表示しないでください。また、XDO_?TOTAL_SALARY?セルも強調表示されていないことにも注目してください。
部門グループを定義するには、図6-6に示すように、部門名セルとその下のすべての従業員フィールド(A5-E9)を含めます。
データ内のグループと一致するように、このグループの名前をXDO_GROUP_?DEPT?として入力します。部門レベルで繰り返されるように、部門グループにXDO_?TOTAL_SALARY?セルが含まれていることに注目してください。
テンプレートから定義名またはグループを削除するには、「名前の管理」を使用します。Excelの「数式」タブから「名前の管理」ダイアログにアクセスします。削除する項目を選択し、「削除」をクリックします。
テンプレートを処理するために、BI PublisherにはXDO_METADATAというシートが必要です。このシートは、ここで定義する仕様に従っている必要があります。
XDO_METADATAシートの書式は、図6-7に示す書式である必要があります。
この書式は、ヘッダー・セクションとデータ制約セクションという2つのセクションから構成されます。どちらのセクションも必須です。ヘッダー・セクションでは、列Aのすべてのエントリをリストする必要がありますが、値が必要なのは、図に示したように、Template Typeの1つだけです。データ制約(Data Constraints)セクションには内容は不要ですが、この図に示すように存在している必要があります。
この手順では、このサンプルExcelテンプレートを実行するためにシートをセットアップする方法について説明します。XDO_METADATAシートによって提供される機能の詳細は、第6.5項「BI Publisher関数の定義」を参照してください。
ステップ2でXDO_METADATAシートをコピーした場合は、この項をスキップし、第6.3.5.3項「XDO_?TOTAL_SALARY?フィールドに対する計算の追加」に進みます。
非表示のシートを設定する手順は次のとおりです。
Excelブックに新規シートを作成し、XDO_METADATAという名前を付けます。
行1から、列Aに次の変数名を1行に1つずつ入力することにより、ヘッダー・セクションを作成します。
Version
ARU-dbdrv
Extractor Version
Template Code
Template Type
Preprocess XSLT File
Last Modified Date
Last Modified By
1行飛ばし、行10の列Aに「Data Constraints」と入力します。
ヘッダー・リージョンで、変数Template Typeに対して、値「TYPE_EXCEL_TEMPLATE」を入力します。
この手順の前半で、SALARY列にリストされた給料の合計を表示するセルに、定義名XDO_?TOTAL_SALARY?を割り当てました。ここでは、XDO_METADATAシートのData Constraintsセクションに計算を追加し、その計算をXDO_?TOTAL_SALARY?フィールドにマップします。
このフィールドに計算を追加する手順は次のとおりです。
Data Constraintsセクションの列Aに、セルの定義名「XDO_?TOTAL_SALARY?」を入力します。
列Bに、XPATH関数として計算を入力します。グループ内のすべての従業員に対するSALARY要素の合計を計算するには、「<?sum(.//SALARY)?>」と入力します。
完成したXDO_METADATAシートを図6-8に示します。
Excelでは正規日付書式は認識されません。XMLデータの日付書式が正規書式である場合(つまりYYYY-MM-DDThh:mm:ss+HH:MM)、正しく表示するには関数を適用する必要があります。
日付を表示するオプションの1つは、ExcelのREPLACEとSUBSTITUTE関数を使用する方法です。このオプションでは、完全な日付とタイムスタンプが維持されます。データ内の日付部分(YYY-MM-DD)のみが必要な場合は、DATEVALUE関数を使用する方法があります。次の例では、両方のオプションの使用方法を示します。
例: Excelでの正規日付の書式設定
Employee by Departmentテンプレートおよび最初の例からのデータを使用して、HIRE_DATE要素をレイアウトに追加し、図6-11の列Eに示すように日付を表示するとします。
図6-11 Hire Dateを表示したEmployee by Departmentテンプレート
日付を書式設定する手順は次のとおりです。
HIRE_DATEに対するサンプル値をXMLデータからコピーして、セルに貼り付けます。たとえば、次のように入力します。
次の値
1996-02-03T00:00:00.000-07:00を
コピーして、E8セルに貼り付けます。
図6-12に示すように、セルに定義名XDO_?HIRE_DATE?を割り当てて、データ内のHIRE_DATE要素にマップします。
これ以外の操作を行わなければ、HIRE_DATE値は図に示したように表示されます。日付を3-Feb-96と書式設定するには、そのフィールドに関数を適用し、結果を別のフィールドに表示する必要があります。
新しいHire Date列を挿入します。図6-13に示すように、これが列Fになります。
新しいHire Dateセル(F8)に、次のいずれかのExcel関数を入力します。
完全な日付とタイムスタンプを維持するには、次のように入力します。
=--REPLACE(SUBSTITUTE(E8,"T"," "),LEN(E8)-6,6,"")
日付部分(YYY-MM-DD)のみを維持するには、次のように入力します。
DATEVALUE(LEFT(E8,10))
関数を入力すると、図6-14に示すように、F8セルに移入されます。
セルに書式設定を適用します。
F8セルを右クリックします。メニューから「セルの書式設定」を選択します。図6-15に示すように、「セルの書式設定」ダイアログで、「日付」と適切な書式を選択します。
F8セルのサンプル・データは、「3-Feb-96」と表示されるようになります。
列Eを非表示にして、レポート利用者に対して変換元の正規日付が表示されないようにします。
図6-16は、列Eが非表示になった状態を示しています。
BI Publisherには、追加のレポート機能を実行するための一連の関数が用意されています。これらの関数は、XDO_METADATAシートのData Constraintsリージョンで定義します。
これらの関数では、次に示すように、XDO_METADATAシートの列A、BおよびCを使用します。
列Aは、関数を宣言するか、計算またはXSL評価の結果をマップするオブジェクトの定義名を指定するために使用します。
列Bは、XDO関数に対するデータ制約を制御する方法を記述する特殊なXDO-XSL構文、またはXDO_名前付き要素に適用する特殊な制約を記述するXSL構文を入力するために使用します。
列Cは、一部の関数に対する追加の指示を指定するために使用します。
これらの関数については、次の3つの項で説明します。
表6-1は、示されたコマンドおよびBI Publisher構文とXSLの組合せを使用してテンプレートに追加できる関数のリストです。表6-1に、コマンドのサマリー・リストを示します。使用法の詳細は、該当する項を参照してください。
表6-1 レポート関数
関数 | コマンド |
---|---|
|
XDO_SHEET_?およびXDO_SHEET_NAME_? |
|
XDO_PARAM_?n? |
|
XDO_LINK_?リンク・オブジェクト名? |
第6.5.1.4項「サブ・テンプレートのインポートとコール」 |
XDO_SUBTEMPLATE_?n? |
|
XDO_EXT_?n? |
注意: 複数のシート間のイメージはサポートされません。テンプレート・シートにイメージが含まれる場合、データが複数のシートに分割されると、イメージは最初のシートにのみ表示されます。 |
レポート・データを複数のシートに分割するロジックを定義するには、次のリストで説明するコマンドのセットを使用します。
XDO_SHEET_?を使用して、新規シートにデータを分割するためのロジックを定義します。
XDO_SHEET_NAME_?を使用して、各シートのネーミング規則を指定します。
表6-2では、列のエントリを説明しています。
表6-2 列のエントリ
列Aのエントリ | 列Bのエントリ | 列Cのエントリ |
---|---|---|
XDO_SHEET_? |
<?データを分割するためのxsl_evaluation?> 例: <?.//DEPT?> |
なし |
XDO_SHEET_NAME_? |
<?シートに名前を付けるためのxsl_expression?> 例: <?concat(.//DEPARTMENT_NAME,'-',count(.//EMP_NAME))?> |
(オプション) <?元のシート名?> 例: <?Sheet3?> |
XDO_SHEET_?は、XMLデータ内の既存の高レベル・ノードを参照する必要があります。例<?.//DEPT?>は、データ内で<DEPT>が出現するとそのつど新規シートを作成します。
データがフラットな場合、先にデータを前処理して適切な階層を作成しないかぎり、このコマンドは使用できません。データを前処理するには、XSLTファイルで変換を定義してから、XDO_METADATAシートのヘッダー・セクションのPreprocess XSLT Fileフィールドでこのファイルを指定します。詳細は、第6.6項「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?>」と入力します。
例: 複数のシートへのデータの分割
前述の例の従業員データを使用します。次の例では、
各部門に対して新しいワークシートを作成します。
各ワークシートに、部門名と部門内の従業員数で構成される名前を付けます(例: Sales-21)。
複数のシートにデータを分割する手順は次のとおりです。
図6-17に示すように、従業員データの各セルに対する定義名を入力し、繰返しの従業員データのグループを作成します。
注意: データは部門ごとに分割されるため、複数の部門を包含するグループを作成しないでください。 |
XDO_METADATAシートのData Constraintsセクションに、表6-3で説明されている値を入力します。
これらのエントリを図6-18に示します。
図6-19は、生成されるレポートを示しています。各部門のデータは専用のシートに表示されています。シート名には、指定したネーミング規則が使用されています。
パラメータを定義するには、XDO_PARAM_?n?関数を使用してパラメータを宣言してから、$parameter_name構文を使用して値をパラメータに渡します。パラメータはデータ・モデル内で定義されている必要があります。
パラメータを宣言するには、表6-4で説明されているコマンドを使用します。
表6-4 パラメータを宣言するためのコマンド
列Aのエントリ | 列Bのエントリ |
---|---|
XDO_PARAM_?n? ここで、nはパラメータの一意の識別子です。 |
<?param@begin:parameter_name;parameter_value?> ここで、parameter_nameはデータ・モデルからのパラメータ名で、parameter_valueはオプションのデフォルト値です。 たとえば、次のように入力します。 <?param@begin:Country;US?> |
パラメータの値をセル内で直接使用するには、表6-5で説明するように、XDO_定義名の定義内で、パラメータを$parameter_nameとして参照します。
表6-5 パラメータの直接使用
列Aのエントリ | 列Bのエントリ |
---|---|
XDO_PARAM_?parameter_name? たとえば、次のように入力します。 XDO_PARAM_?Country? |
<?$parameter_name?>. たとえば、次のように入力します。 <?$Country?> |
$parameter_nameを使用して、XDO_METADATAシート内の他のロジックや計算内でパラメータを参照することもできます。
例: パラメータの定義と受渡し
Countryという名前のパラメータを宣言して参照する手順は次のとおりです。
テンプレート・シートで、セルを定義名でマークします。次の図では、セルが定義名XDO_?Country?でマークされています。
非表示のシートで、図6-21に示すように、そのセルにパラメータ値を割り当てます。
表6-6に示されるように、データ・セルにハイパーリンクを定義するには、XDO_LINK_?コマンドを使用します。
例: リンクの定義
表6-6 リンクの定義
列Aのエントリ | 列Bのエントリ |
---|---|
XDO_LINK_?セル・オブジェクト名? たとえば、次のように入力します。 XDO_LINK_?INVOICE_NO? |
<動的URLを構築するxsl文> たとえば、次のように入力します。 <xsl:value-of select="concat('https://server.company.com/documents/invoice_print.show?c_rptno=',./INVOICE_NO)"/> |
たとえば、会社で顧客向けの請求書を発行しているとします。請求書はWebサーバーからアクセス可能な中央の場所に保存されており、請求書番号(INVOICE_NO)で識別できます。
各請求書へのダイナミック・リンクを作成するレポートを生成する手順は次のとおりです。
図6-22に示すように、テンプレート・シートで、INVOICE_NOを表示するセルに、XDO定義名XDO_?INVOICE_NO?を割り当てます。
XDO_METADATAシートで、表6-7に示されるように適切な値を入力します。
表6-7 リンク付きレポートの生成
列Aのエントリ | 列Bのエントリ |
---|---|
XDO_LINK_?INVOICE_NO? |
<xsl:value-of select="concat('https://server.company.com/documents/invoice_print.show?c_rptno=',./INVOICE_NO)"/> |
Excelでのエントリを図6-23に示します。
レポート出力は図6-24に示すように表示されます。XDO_METADATAシートで定義したロジックが適用され、各INVOICE_NOエントリに対してハイパーリンクが作成されます。
いずれのXDO_コマンドでもコールおよび参照できるXSLサブ・テンプレートを宣言するには、次のコマンドを使用します。
注意: Template Builder for Excelでは、サブ・テンプレートをインポートするテンプレートに対するプレビューはサポートされていません。 |
サブ・テンプレートをインポートするには、表6-8に示すコマンドを入力します。
表6-8 サブ・テンプレートのインポート
列Aのエントリ | 列Bのエントリ |
---|---|
XDO_SUBTEMPLATE_?n? ここで、nは一意の識別子です。例: XDO_SUBTEMPLATE_?1?。 |
<xsl:import href="xdoxsl:///subtemplate.xsbへのパス?"/> 例: <xsl:import href="xdoxsl:///Shared Folders/Financial Reports/SubTemplates/MySubTemplate.xsb?"/> |
サブ・テンプレートをコールするには、列Aで、結果を返すセルの名前を宣言してから、実行するその他のXSL処理とともにcall-template構文を入力します。これらのコマンドを図6-9に示します。
表6-9 サブ・テンプレートのコール
列Aのエントリ | 列Bのエントリ |
---|---|
XDO_?セル・オブジェクト名? |
<xsl:call-template name="template_name"> </xsl:call-template> |
XSLサブ・テンプレートおよびカタログ内でのサブ・テンプレート・オブジェクトの作成の詳細は、第14章「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?のフィールドを定義しています。このフィールドには図6-25に示すように、サブ・テンプレートで実行されるコードから返される文字列に基づいて移入されます。
Data Constraintsリージョンに、表6-10に示されているコマンドを入力します。
表6-10 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拡張ライブラリを参照するには、表6-11に示されているコマンドを使用します。
表6-11 Java拡張ライブラリの参照
列Aのエントリ | 列Bのエントリ |
---|---|
XDO_EXT_?n? ここで、nは一意の識別子です。例: XDO_EXT?1? |
<?namespace:xmlns:bipext="exension library"?> 例: <?namespace:xmlns:bipext="http://www.example.com/XSL/Transform/java/ example.com.xmlpublisher.reports.BIPExtension"?> |
1つのテンプレート・ファイル内で複数の拡張ライブラリを定義することができます。
例: Java拡張ライブラリのコール
拡張ライブラリに、テンプレート内でコールする次の2つのメソッドが含まれるものとします。
bipext:infTimeToStr()
bipext:infStrToTimet()
前述のようにライブラリを宣言したら、列AにXDO定義名を入力し、列Bで関数をコールすることにより、メソッドを適用したいセルを指定します。表6-12に、コマンドの例を示します。
表6-12 例: Java拡張ライブラリのコール
列Aのエントリ | 列Bのエントリ |
---|---|
XDO_?PARAM_START_DATE? |
<xsl:value-of select="bipext:infTimeToStr(bipext:infStrToTimet((.//PARAM_START_DATE)[1],2),3)" |
Java拡張ライブラリを宣言してコールするXDO_METADATAシートのエントリを図6-26に示します。
図6-26 Java拡張ライブラリを宣言してコールするXDO_METADATAシートのエントリ
以下のコマンドには、XMLデータ・ファイルに特定の書式設定属性が存在することが必要です。表6-13に、コマンドのサマリー・リストを示します。使用法の詳細は、該当する項を参照してください。
Excelの書式設定を使用してテンプレートに一貫したスタイルを定義できますが、XDO_STYLEコマンドを使用すると、XMLデータに基づいて、任意のデータ・セルに対して別のスタイルを動的に定義することができます。
XDO_STYLEコマンドでは、スタイルを適用するセル、スタイルをいつ適用すべきかを決定するためのロジックおよび適用するスタイル・タイプを指定します。スタイル値はXMLデータ内に存在している必要があります。表6-14に例を示します。
表6-14 罫線と下線のスタイルの定義
列Aのエントリ | 列Bのエントリ | 列Cのエントリ |
---|---|---|
XDO_STYLE_n_?cell_object_name? たとえば、次のように入力します。 XDO_STYLE_1_?TOTAL_SALARY? |
<サポートされる値を返すxsl評価> たとえば、次のように入力します。 <xsl:value-of select=".//TOTAL_SALARY/@borderStyle"/> |
スタイルの種類 たとえば、次のように入力します。 BottomBorderStyle |
BI Publisherでは、表6-15に示すような標準のExcelスタイルの種類および値がサポートされています。
表6-15 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 |
表6-16に示す種類のいずれかを使用して色を設定することもできます。
表6-16 色の種類
スタイルの種類 | サポートされる値(列Bの評価によって返される必要があります) | サポートされるタイプ(列Cに入力します) |
---|---|---|
標準 |
色スタイルの設定時には、RRBBGG 16進フォーマットで値を指定します。例: borderColor="0000FF" |
BottomBorderColor TopBorderColor LeftBorderColor RightBorderColor DiagonalLineColor |
BI Publisherでは、表6-17に示す値の下線の種類もサポートされています。
表6-17 下線の種類
スタイルの種類 | サポートされる値(列Bの評価によって返される必要があります) | サポートされるタイプ(列Cに入力します) |
---|---|---|
下線 |
UNDERLINE_NONE UNDERLINE_SINGLE UNDERLINE_DOUBLE UNDERLINE_SINGLE_ACCOUNTING UNDERLINE_DOUBLE_ACCOUNTING |
UnderlineStyle |
1つのセルに対して、複数の下線スタイルを定義できます。
例: スタイルの定義
テンプレートにスタイルを適用するには、スタイル値がデータ内に存在している必要があります。この例では、Excelテンプレートに示したDEPT_TOTAL_SALARYフィールドに、罫線スタイルと下線スタイルを適用します。
この例では、次のデータを使用します。データ内のDEPT_TOTAL_SALARY要素には、これらの属性が定義されています。
borderStyle
underLineStyle
borderColor
これらの各属性の値を使用して、テンプレート内に定義されたロジックに基づいて、定義済のスタイルを適用します。
<?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>
スタイルを定義する手順は次のとおりです。
図6-27に示すように、Excelテンプレートで、データからのDEPT_TOTAL_SALARYを表示するフィールドに、定義名XDO_?DEPT_TOTAL_SALARY?を割り当てます。
XDO_METADATAシートで、次のように入力します。
上罫線スタイルを定義するには、表6-18に示すエントリを使用します。
表6-18 上罫線スタイル
列Aのエントリ | 列Bのエントリ | 列Cのエントリ |
---|---|---|
XDO_STYLE_1_?DEPT_TOTAL_SALARY? |
<xsl:value-of select=".//DEPT_TOTAL_SALARY/@borderStyle"/> |
TopBorderStyle |
列Aのエントリは、このスタイル・コマンドを、名前XDO_?DEPT_TOTAL_SALARY?が割り当てられたセルにマップします。
列Bのエントリは、DEPT_TOTAL_SALARY要素の属性borderStyleからスタイル値を取得します。サンプル・データからのborderStyleの値はBORDER_DOUBLEです。
列Cのエントリは、TopBorderStyleをセルに適用するようにBI Publisherに指示します。
上罫線の色を定義するには、表6-19に示すエントリを使用します。
表6-19 上罫線の色
列Aのエントリ | 列Bのエントリ | 列Cのエントリ |
---|---|---|
XDO_STYLE_2_?DEPT_TOTAL_SALARY? |
<?.//DEPT_TOTAL_SALARY/@borderColor?> |
TopBorderColor |
列Aのエントリは、このスタイル・コマンドを、名前XDO_?DEPT_TOTAL_SALARY?が割り当てられたセルにマップします。
列Bのエントリは、DEPT_TOTAL_SALARY要素の属性borderColorからスタイル値を取得します。サンプル・データからのborderColorの値は0000FF(青)です。
列Cのエントリは、TopBorderColorをセルに適用するようにBI Publisherに指示します。
下線スタイルを定義するには、表6-20に示すエントリを使用します。
表6-20 下線スタイル
列Aのエントリ | 列Bのエントリ | 列Cのエントリ |
---|---|---|
XDO_STYLE_3_?DEPT_TOTAL_SALARY? |
<?.//DEPT_TOTAL_SALARY/@underLineStyle?> |
UnderlineStyle |
列Aのエントリは、このスタイル・コマンドを、名前XDO_?DEPT_TOTAL_SALARY?が割り当てられたセルにマップします。
列Bのエントリは、DEPT_TOTAL_SALARY要素の属性underLineStyleからスタイル値を取得します。サンプル・データからのunderLineStyleの値はUNDERLINE_DOUBLE_ACCOUNTINGです。
列Cのエントリは、UnderLineStyleをセルに適用するようにBI Publisherに指示します。
図6-28は、Data Constraintsリージョンの3つのエントリを示しています。
レポートを実行すると、図6-29に示すように、スタイル・コマンドがXDO_?DEPT_TOTAL_SALARY?セルに適用されます。
図6-29 スタイル・コマンドがXDO_?DEPT_TOTAL_SALARY?に適用されていることを示す、生成されたレポートセル
列Bに定義されている評価の結果が大文字・小文字を区別しない文字列"True"を返す場合に、1行のデータの表示を抑制するには、XDO_SKIPROWコマンドを使用します。エントリの例を図6-21に示します。
表6-21 行のスキップ
列Aのエントリ | 列Bのエントリ |
---|---|
XDO_SKIPROW_?cell_object_name? たとえば、次のように入力します。 XDO_SKIPROW_?EMPLOYEE_ID? |
<文字列Trueを返すxsl評価/> たとえば、次のように入力します。 <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に設定されている場合に従業員データ行の表示を抑制するには、表6-22に示すエントリを、Data Constraintsセクションに入力します。
表6-22 データ要素属性に基づく行のスキップ
列Aのエントリ | 列Bのエントリ |
---|---|
XDO_SKIPROW_?EMPLOYEE_ID? |
<xsl:if test="string-length(./EMPLOYEE_ID/@MANAGER) != 0"><xsl:value-of select="./EMPLOYEE_ID/@MANAGER"/></xsl:if> |
このテンプレートからの出力を図6-30に示します。従業員Michael Hartsteinはレポートに含まれていないことに注目してください。
テンプレート内のデータをグループ化するには、表6-23に示す関数を使用します。
たとえば、データを複数のシートに分割する場合など、レイアウトに特定のデータのグループ化が必要なときは、XDO_GROUPコマンドを使用して、フラットなデータをグループ化します。エントリの例を図6-24に示します。
表6-24 データのグループ化
列Aのエントリ | 列Bのエントリ | 列Cのエントリ |
---|---|---|
XDO_GROUP_?グループ要素? たとえば、次のように入力します。 XDO_GROUP_?STATE_GROUP? |
<グループ化ロジックを開始するxsl/> たとえば、次のように入力します。 <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/> たとえば、次のように入力します。 </xsl:for-each> <xsl:for-each-group> <xsl:for-each-group> |
XDO_?cell object name?でマークアップされたグループ定義セクションの始まりと終わりに配置するXSL文を定義します。対応するグループに適切な定義をそれぞれに指定することにより、テンプレート内に複数のグループをネストしてマークできます。
ネストされたグループでXDO_GROUP_?が使用される場合は、最終的なレポートにおけるXDO定義名の範囲が無意味になります。この場合、最終的なレポート内の式における定義名を参照しないでください。コマンドXDO_MARKUP_?を使用して、最終的なレポート内のXDOマークアップ・アクティビティを無効にできます。表6-25は、XDO_METADATAシートでXDO_MARKUP_?を使用した状態を示しています。
表6-25 XDO_MARKUP_?の使用
列Aのエントリ | 列Bのエントリ |
---|---|
XDO_MARKUP_? |
false (Excelの「セルの書式設定」ダイアログで「テキスト」としてセルを書式設定する必要があります。) |
また、テンプレートに数多くの定義名が含まれていて、ネストされたグループの複数のレベルでそれらの定義名が使用されている場合は、Excelでは、生成された定義名の数を処理できないことがあります。この場合は、XDO_MARKUP_?コマンドを使用して、生成されたレポートのマークアップを無効にできます。
falseに設定されていると、BI Publisherでは、XDO_GROUP_?によって生成されたいずれの結果に対しても、定義名はいっさい生成されません。
XDO_REGROUPは、定義名を使用して定義を宣言することにより、データを再グループ化します。XDO_REGROUPロジックはXDO_GROUPロジックの短縮形であり、XDO_METADATAシートにおけるXSLTcoding要件が要求されません。したがって、その定義は直接、XDO_REGROUP_?定義名に作用するか、またはXDO_METADATAシートにおけるそれ以外の定義に作用する必要があります。エントリを図6-26に示します。
表6-26 データのグループ化
列Aのエントリ | 列Bのエントリ |
---|---|
XDO_REGROUP_? |
XDO_REGROUP_?UniqueGroupID?levelName?groupByName?sortByName?sortByName?sortByName? 説明:
|
表6-27、表6-28および表6-29は、3つのネストされたグループの作成方法を示しています。
表6-27 ネストされたグループの作成、例1
列Aのエントリ | 列Bのエントリ |
---|---|
XDO_REGROUP_? |
XDO_REGROUP_?PAYMENTSUMMARY_Q1?PAYMENTSUMMARY_Q1?PAY_TYPE_NAME? |
表6-27に示す定義では、最も外側のグループがPAYMENTSUMMARY_Q1として定義され、PAY_TYPE_NAMEによってグループ化されます。
表6-28に示す定義は、外から2番目のグループを作成します。このグループには名前COUNTRY_GRPが割り当てられ、要素COUNTRYによってグループ化されます。
表6-29に示す定義は内側のグループSTATEGRPを作成し、sortByNameパラメータSTATEを含みます。
最高のパフォーマンスを達成するには、データ処理を可能なかぎり実行するようにデータ・モデルを設計します。データ・エンジンから必要な出力を得られない場合は、データを変換する命令を含むXSLTファイルを使用してデータの前処理を実行できます。次のようなユースケース・サンプルがあります。
適切なレイアウトをサポートするために必要な階層を設定するグループの作成
データ要素へのスタイル属性の追加
Excelテンプレートでは不可能であるか、パフォーマンス上の理由から望ましくない、複雑なデータ処理ロジックの実行
注意: Template Builder for Excelでは、XSLT前処理が必要なテンプレートのプレビューはサポートされていません。 |
XSLT前処理ファイルを使用するには:
ファイルを作成し、.xslとして保存します。
テンプレートの場合と同様に、ファイルをBI Publisherカタログ内のレポート定義にアップロードします。
カタログ内のレポートに移動します。
「編集」をクリックします。
「新規レイアウトの追加」をクリックします。
「アップロード」をクリックします。
「アップロード」ダイアログのフィールドを完成させ、テンプレートの「タイプ」としてXSLスタイルシート(HTML/XML/テキスト)を選択します。
アップロード後に、「リストの表示」をクリックします。レポートの表示時にユーザーからこのテンプレートがオプションとして見えないようにするため、「アクティブ」を選択解除します。
注意: テスト目的では、データへのテンプレートの適用時に中間データを表示できるように、XSLテンプレートをアクティブなままにしたほうがよい場合もあります。テストの完了後にテンプレートを非アクティブに設定します。 |
レポート定義を保存します。
ExcelテンプレートのXDO_METADATAシートのHeaderセクションで、Preprocess XSLT Fileパラメータにファイル名を入力します。例: splitByBrand.xsl
この項では、XSLT前処理ファイルを使用してフラット・データをグループ化し、Excelでの複数のシートに分割できるようにする操作の2つの例について説明します。その例は次のとおりです。
レポート・データがExcel 2003のシートの行サイズ(シート当たり65,536行)を超えている場合には、行数でデータを分割するというオプションもあります。
どちらの例でも、次のXMLデータが使用されます。
<ROWSET> <ROW> <Products.Type>COATINGS</Products.Type> <Products.Brand>Enterprise</Products.Brand> <Markets.Region>CENTRAL REGION</Markets.Region> <Markets.District>CHICAGO DISTRICT</Markets.District> <Periods.Year>2000</Periods.Year> <Measures.Dollars>1555548.0</Measures.Dollars> </ROW> <ROW> <Products.Type>COATINGS</Products.Type> <Products.Brand>Enterprise</Products.Brand> <Markets.Region>EASTERN REGION</Markets.Region> <Markets.District>NEW YORK DISTRICT</Markets.District> <Periods.Year>2000</Periods.Year> <Measures.Dollars>1409228.0</Measures.Dollars> </ROW> ... </ROWSET>
この例では、XSLT前処理ファイルを使用して、データのグループ化を作成し、そのグループ化を基準にしてデータを複数のExcelシートに分割できるようにします。この例では、Products.Brand
フィールドによってサンプル・データがグループ化されます。
データをグループ化するために、XSLTファイルを作成します。
次に示すサンプルのXSLTファイルでは、<Products.Brand>
に従ってデータがグループ化され、それらのグループのそれぞれに対して、高レベルの要素<BrandGroup>
が作成されます。
<?xml version="1.0" encoding="utf-8" ?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <ROWSET> <xsl:for-each-group select="/ROWSET/ROW" group-by="./Products.Brand"> <xsl:variable name="var_brand" select="current-grouping-key()" /> <BrandGroup> <xsl:attribute name="name"> <xsl:value-of select="$var_brand" /> </xsl:attribute> <xsl:copy-of select="current-group()" /> </BrandGroup> </xsl:for-each-group> </ROWSET> </xsl:template></xsl:stylesheet>
このXSLTファイルがデータ・サンプルに適用されると、次のように中間データが生成されます。
<ROWSET> <BrandGroup name="Enterprise"> <ROW> <Products.Type>COATINGS</Products.Type> <Products.Brand>Enterprise</Products.Brand> <Markets.Region>CENTRAL REGION</Markets.Region> <Markets.District>CHICAGO DISTRICT</Markets.District> <Periods.Year>2000</Periods.Year> <Measures.Dollars>1555548.0</Measures.Dollars> </ROW> ... </BrandGroup> ... <ROWSET>
XSLTファイルをsplitByBrand.xsl
として保存し、このファイルをBI Publisherカタログのレポート定義にアップロードします。テンプレートの「タイプ」としてXSLスタイルシート(HTML/XML/テキスト)を選択します。
Excelテンプレート・ファイルのXDO_METADATAシートで、次のように入力します。
Preprocess XSLT Fileパラメータに「splitByBrand.xsl」と入力します。
Data Constraintsリージョンで、表6-30に示すエントリを行い、XSLT前処理の結果によって作成された<BrandGroup>
要素に基づいて、データを複数のシートに分割します。
表6-30 ブランドによる分割を行うためのData Constraintsリージョンへのエントリ
列Aのエントリ | 列Bのエントリ |
---|---|
XDO_SHEET_? |
<?//BrandGroup?> |
XDO_SHEET_NAME_? |
<?./@name?> |
XDO_METADATAシートでのサンプル・エントリを図6-31に示します。
BI Publisherカタログのレポート定義にExcelテンプレート・ファイルをアップロードします。
この例では、XSLT前処理ファイルを使用して、/ROWSET/ROWの出現回数によってサンプルXMLデータをグループ化し、新規に作成されたグループの出現ごとにシートを新規作成するようにExcelテンプレートを構成する方法を示します。
XSLTファイルを作成し、変数で指定されたサイズに従ってデータ内にグループを作成します。
次に示すサンプルのXSLTファイルでは、$var_size
の値に従って/ROWSET/ROWの出現がグループ化され、それらのグループのそれぞれに対して、高レベルの要素<CountGroup>
が作成されます。
<?xml version="1.0" encoding="utf-8" ?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <ROWSET> <xsl:variable name="var_size" select="3" /> <xsl:for-each select="/ROWSET/ROW"> <xsl:variable name="var_pos" select="position()" /> <xsl:variable name="var_mod" select="$var_pos mod($var_size)" /> <xsl:if test="$var_mod = 1"> <xsl:variable name="var_groupNum" select="($var_pos - $var_mod) div number($var_size) + 1" /> <xsl:element name="CountGroup"> <xsl:attribute name="name"> <xsl:value-of select="concat('Group', $var_groupNum)" /> </xsl:attribute> <xsl:for-each select="/ROWSET/ROW[position() > ($var_pos -1) and position() < ($var_pos + $var_size)]"> <xsl:copy-of select="." /> </xsl:for-each> </xsl:element> </xsl:if> </xsl:for-each> </ROWSET> </xsl:template> </xsl:stylesheet>
このXSLTファイルがデータ・サンプルに適用されると、次のように中間データが生成されます。
<ROWSET> <CountGroup name="Group1"> <ROW> <Products.Type>COATINGS</Products.Type> <Products.Brand>Enterprise</Products.Brand> <Markets.Region>CENTRAL REGION</Markets.Region> <Markets.District>CHICAGO DISTRICT</Markets.District> <Periods.Year>2000</Periods.Year> <Measures.Dollars>1555548.0</Measures.Dollars> </ROW> ... </CountGroup> ... <ROWSET>
XSLTファイルをsplitByCount.xsl
として保存し、このファイルをBI Publisherカタログのレポート定義にアップロードします。テンプレートの「タイプ」としてXSLスタイルシート(HTML/XML/テキスト)を選択します。
Excelテンプレート・ファイルのXDO_METADATAシートで、次のように入力します。
Preprocess XSLT Fileパラメータに「splitByCount.xsl」と入力します。
Data Constraintsリージョンで、表6-31に示すエントリを行います。
BI Publisherカタログのレポート定義にExcelテンプレート・ファイルをアップロードします。
テンプレート・プレビューで期待どおりの結果が表示されない場合は、Template Viewerを使用してトレース設定を有効にすることにより、デバッグ・メッセージを表示できます。Template Viewerでは、XSL-FOプロセッサでのサンプル・データとテンプレートのマージ後に生成される中間XSLファイルを保存および表示することもできます。XSLの知識があれば、これは非常に有用なデバッグ・ツールになります。
Template ViewerはTemplate Builder for Wordのインストール時にインストールされます。詳細は、第6.1.5項「Excelテンプレートのデスクトップ・ツール」を参照してください。
Template Viewerでプレビューし、ログ・メッセージを表示するには:
Template Viewerを開きます。
Windowsデスクトップで「スタート」メニューから、「プログラム」、「Oracle BI Publisher Desktop」、「Template Viewer」の順に選択します。
「参照」をクリックして、サンプル・データ・ファイルおよびテンプレート・ファイルを含むフォルダを選択します。データ・ファイルとテンプレート・ファイルは同じフォルダに置かれている必要があります。
「Excelテンプレート」を選択します。図6-32に示すように、「データ」リージョンと「テンプレート」リージョンに、そのディレクトリ内に存在するすべての.xmlファイルおよびすべての.xlsファイルが表示されます。
図6-32 .xmlファイルと.xlsファイルをすべて示した、「データ」リージョンと「テンプレート」リージョン
適切なデータ・ファイルおよびテンプレート・ファイルをクリックして、それらを選択します。
ログ・レベルを選択します。
「出力フォーマット」リストから、「Excel」を選択します。
「処理開始」をクリックします。
Template Viewerにより、選択したデータと選択したテンプレートがマージされ、適切なビューアが作成されます。図6-33に示すように、メッセージ・ボックス内にログ・メッセージがあれば確認します。
生成されたXSLを表示するには:
Template Viewerで、データ・ファイルとテンプレート・ファイルを選択し、出力フォーマットとして「Excel」を選択します。
図6-34に示すように、「ツール」メニューから「XSLファイルの生成元」、「Excelテンプレート」の順に選択します。
プロンプトが表示されたら、生成されたXSLファイルを保存します。
保存した場所に移動し、適切なビューアでXSLファイルを開きます。