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

前
 
次
 

6 Excelテンプレートの作成

この章では、Template Builder for Excelを使用して、Microsoft ExcelでBI Publisher用のレポート・テンプレートを作成する方法について説明します。

この章の内容は次のとおりです。

6.1 Excelテンプレートの概要

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

この概要の項目は次のとおりです。

6.1.1 Excelテンプレートの機能

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

  • Excel出力におけるデータの書式を定義します。

  • 複数のシートで階層データを分離し、シートに動的に名前を付けます。

  • マスター/ディテール関係を持つデータのシートを作成します。

  • データにネイティブのXSL機能を使用して表示前に操作します。

  • Excelのネイティブ機能を使用します。

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

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

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

  • BI Publisherでは、Microsoft Excelのアドインを提供し、フィールドおよび繰返しグループの挿入を支援します。より複雑な設計をするには、手動によるコーディングが必要です。一部の機能では、XSLおよびXSL変換(XSLT)仕様の使用が必要です。

6.1.3 前提条件

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

  • Microsoft Excel 2003以降をインストールしておく必要があります。テンプレート・ファイルは、Excel 97-2003ブック・バイナリ形式(*.xls)で保存する必要があります。


    重要:

    Excel 2003以降のバージョンを使用してテンプレートを作成し、Excel 97-2003として保存する場合は、Excel 97-2003でサポートされていない新しいバージョンの機能は使用しないようにしてください。たとえば、Excel 2003ではセルごとに3つの条件付き書式ルールしか許可されませんが、Excel 2007ではより多く許可されます。適用した条件付き書式ルールが4つ以上の場合は、3つのみが適用されます。また、Excel 2003では提供されていないカラー・サポートがExcel 2007では提供されています。


  • 一部の拡張機能を使用するには、XSLの知識が必要です。

  • データ・モデルは、使用可能なサンプル・データを使用してBI Publisherに作成する必要があります。

6.1.4 サポートされている出力

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

6.1.5 Excelテンプレートのデスクトップ・ツール

BI Publisherにはダウンロード可能なExcel用のアドインが用意され、それによって次の機能を提供します。

  • BI Publisherサーバーに直接接続し、サンプル・データのロードとテンプレートのアップロードおよびダウンロードを行います。

  • テンプレートにデータ・フィールド・マッピングを挿入します。

  • テンプレートに繰返しグループ・マッピングを挿入します。

  • すべての挿入済コードを確認し、マッピングを編集または削除するためのフィールド・ブラウザを提供します。

  • 接続モード時にサンプル・データまたはライブ・データを使用してテンプレートをプレビューします。

6.1.5.1 Template Builder for Excelのインストール

BI Publisher Desktopツールをインストールすると、Template Builder for Excelが自動的にインストールされます。このツールは、次のように、Oracle Business Intelligence PublisherまたはOracle Business Intelligence Enterprise Editionの「ホーム」ページからダウンロードできます。

「はじめに」リージョンで、「BI Publisherツールのダウンロード」をクリックし、Microsoft Officeのバージョンに適したBI Publisher Desktopオプション(32ビットOfficeまたは64ビットOffice)を選択します。


注意:

Excel Template Builderは、Analyzer for Excel (非推奨)との互換性はありません。Analyzer for Excelを以前のバージョンでインストールしている場合は、BI Publisherツールのインストーラによりその存在が検出され、インストールが停止されます。BI Publisher Desktopをインストールする前にAnalyzer for Excelを削除する必要があります。Excel Template Builderには、Analyzer for ExcelテンプレートをExcelテンプレート書式にインポートする機能が含まれています。第6.3.7項「Excelアナライザ・テンプレートのインポート」を参照してください。


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

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

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

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

    このアクションにより、Excelのサンプル・テンプレートが含まれるフォルダが開きます。

6.2 テンプレートおよびデータ間のマッピングの理解

Excelテンプレートの設計時には、Excel Template Builderを使用して、フィールドおよび繰返しグループをテンプレートに挿入します。Template Builderでフィールドまたは繰返しグループを挿入する場合は、データとスプレッドシート間にマッピングが作成され、そのマッピングがXDO_METADATAシートという名前の非表示のシートに書き込まれます。フィールドまたは繰返しグループの初回挿入時には、Template Builderにより、非表示のXDO_METADATAシートが作成されます。

XDO_METADATAシートを表示または更新するには、シートの非表示を解除します。計算またはより高度な機能を追加するには、Template Builderにより作成された名前付きマッピングを使用して、XDO_METADATAシートにXSL機能を直接入力します。テンプレート・データ・マッピングの詳細は、第6.6項「Excelテンプレートの概念の理解」を参照してください。

6.3 Template Builder for Excelの使用

Excel Template Builderは、単純なマッピングの挿入の自動化、プレビュー機能の提供のほか、ExcelセッションからBI Publisherサーバーへの直接接続の有効化を行うことで、テンプレートの設計を支援します。図6-1には、Template Builderのインストール時に表示される「BI Publisher」タブが示されています。

図6-1 Excelの「BI Publisher」タブ

図6-1については周囲のテキストで説明しています。

Template Builderは、接続モードまたは切断モードで使用できます。接続モードでは、ExcelからBI Publisherサーバーにログインします。この接続により、BI Publisherカタログの閲覧と、既存のレポートまたはデータ・モデルからのサンプル・データのロードができます。テンプレートが完了している場合は、それをBI Publisherカタログ内のレポート定義に直接アップロードできます。切断モードでは、データ・モデルからローカル・クライアントにサンプル・データファイルをダウンロードする必要があります。

この項には、Template Builder for Excelの使用に関する次のトピックが含まれています。

6.3.1 接続モードでの作業

接続モードでは、BI Publisherサーバーと直接やりとりができます。接続モードでテンプレートを作成または編集するためのプロセス・フローは次のとおりです。

  1. BI Publisher Template Builder for Excelアドインがインストールされた状態でExcelを開きます。

  2. BI Publisherサーバーにログインします。

  3. 新規レイアウトを作成するレポートまたはデータ・モデルを選択するか、変更する既存のレイアウトを選択します。

  4. Excelのテンプレートを設計します。

  5. 「レポートの表示」コマンドまたは「プレビュー」コマンドを使用してテンプレートをプレビューします。

  6. テンプレートのアップロード・コマンドのいずれかを使用して、完成したテンプレートをBI Publisherカタログにアップロードします。

次の項では、接続モードでの作業時におけるTemplate Builder機能の詳細について説明します。

6.3.1.1 Template Builderを使用したログイン

Excel Template Builderでは、自身のデスクトップのExcelセッションからBI Publisherサーバーへの直接接続が有効化されます。BI Publisherに直接ログインすることで、カタログを閲覧して、Excelテンプレートを追加するレポートを選択するか、または作成済のレポートがない場合は、データ・モデルを選択して、Excelセッションでカタログにレポートを作成できます。

BI Publisherサーバーにログオンするには:

  1. Excelの「オンライン」グループの「BI Publisher」タブで、「ログオン」をクリックします。

  2. 「ログイン」ダイアログで、自身のBI Publisherのユーザー名およびパスワードとBI PublisherサーバーのURLを入力します。BI PublisherサーバーのURLは、http:// www.<host>:<port>/xmlpserverという形をとります。図6-2「ログイン」ダイアログを示します。


    注意:

    ログインは、BI Publisherサーバーに直接接続する場合にのみサポートされます。例: http://www.example.com:7001/xmlpserver。Template Builderでは、Oracle BI Enterprise Edition分析サーバーを使用したログインはサポートしません。


    図6-2 Excel Template BuilderのBI Publisherサーバーへの「ログイン」ダイアログ

    Excel Template BuilderのBI Publisherサーバーへのログイン・ダイアログ

6.3.1.2 Template Builderのオンライン機能

ログイン後に、「オンライン」グループ内の次のコマンドが有効化されます(図6-3を参照)。

図6-3 「オンライン」コマンド

「オンライン」グループ内のアイコン
6.3.1.2.1 Template BuilderからのBI Publisherカタログへのアクセス

「開く」コマンドにより、図6-4に示すように「テンプレートを開く」ダイアログを起動して、BI Publisherカタログへのアクセスを有効にします。

図6-4 「テンプレートを開く」ダイアログ

「テンプレートを開く」ダイアログ

カタログ・フォルダを移動して、レポート、データ・モデルまたは既存のレイアウト・テンプレートを検索します。このダイアログでは、次のいずれかのアクションを開始できます。

  • 既存のExcelテンプレートを変更します。

    「レポート」リージョンでレポートを選択すると、既存のExcelテンプレートまたはExcelアナライザ・テンプレート (非推奨)が下部の「レイアウト・テンプレート」リージョンに表示されます。既存のテンプレートを変更するには、テンプレート名を選択して「レイアウト・テンプレートを開く」をクリックします。Template Builderにより、レポートのデータ・モデルからサンプル・データがロードされ、既存のテンプレートがExcelで開きます。

  • 既存のレポートの新しいテンプレートを作成します。

    「レポート」リージョンでレポート名を選択して、「レポートを開く」をクリックします。Template Builderにより、そのレポートのデータ・モデルのサンプル・データがロードされます。

  • データ・モデルを選択して新規レポートを作成します。

    カタログからデータ・モデルを選択すると、「レポートの作成」ボタンが有効化されます。「レポートの作成」をクリックすると、レポート名を入力し、カタログ内での新規レポートの保存場所を選択するように求められます。

6.3.1.3 Template Builderからのテンプレートのアップロード

設計プロセス中に接続が維持されている場合は、次のいずれかをクリックし、完成したテンプレートをBI Publisherサーバーにアップロードします。

  • 「テンプレートのアップロード」では、編集したテンプレートをアップロードし、カタログ内の既存のテンプレートを置き換えます。「テンプレートのアップロード」は、「レイアウト・テンプレートを開く」ボタンを使用して、「テンプレートを開く」ダイアログから既存のテンプレートを開いている場合にのみ有効化されます。

  • 「名前を付けてテンプレートをアップロード」では、テンプレートに「テンプレート名」および「ロケール」を割り当てるように求められ、そのファイルはBI Publisherカタログ内のレポートにアップロードされます。

6.3.2 切断モードでの作業

BI Publisherサーバーへの直接接続が使用できないか、適切ではない場合は、Template Builderを使用して、切断モードでテンプレートの設計およびプレビューができます。切断モードでは、「オンライン」グループのコマンドは有効化されません。切断モードで作業する場合のプロセス・フローは次のようになります。

  1. BI Publisherサーバーにログインし、テンプレートを設計するデータ・モデルからサンプル・データをダウンロードします。

  2. BI Publisher Template Builder for Excelアドインがインストールされた状態でExcelを開きます。

  3. サンプル・データをTemplate Builderにロードします。

  4. Excelのテンプレートを設計します。

  5. 「プレビュー」コマンドを使用してテンプレートをプレビューします。

  6. BI Publisherサーバーにログインし、レポート・エディタを使用してテンプレートをアップロードします。

次の項では、切断モードでの作業時におけるTemplate Builder機能の詳細について説明します。

6.3.2.1 サンプル・データの取得

Template Builderでデータ・フィールド・マッピングをテンプレートに挿入するにはサンプル・データが必要です。レポート・データ・モデルからサンプル・データを保存する詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Publisherデータ・モデリング・ガイド』のデータ・モデルのテストとサンプル・データの生成に関する項を参照してください。

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

レポート・ビューアからデータを保存するには:

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

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

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

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

6.3.2.2 切断モードでのサンプル・データのロード

レポート・データ・モデルからローカル・ディレクトリにサンプル・データを保存したら、それをTemplate Builderにロードします。

  1. BI Publisher Template Builder for Excelアドインがインストールされた状態でExcelを開きます。

  2. 「BI Publisher」タブの「データのロード」グループで、「サンプルXML」をクリックします。データをその保存場所から検索し、選択するように求められます。確認メッセージによってデータがロードされていることを確認します。

6.3.2.3 レポートへのテンプレートのアップロード

切断モードで作業する場合は、第2.6.2項「テンプレート・ファイルのアップロードによるレイアウトの追加」の説明に従って、テンプレートをレポート・エディタにアップロードします。

6.3.3 フィールドの挿入

「挿入」グループの「フィールド」コマンドは、ロードされたサンプル・データからスプレッドシートの目的の場所にデータ要素をマップします。

フィールドを挿入するには:

  1. Excelで、データ要素をマップするセルを選択します。

  2. 「BI Publisher」タブの「挿入」グループで、「フィールド」をクリックします。「フィールド」ダイアログが起動し、サンプル・データからデータ要素が表示されます。

  3. 「フィールド」ダイアログで、要素を選択してセルに挿入します。データ構造で項目を選択すると、図6-5に示すように、「例」リージョンにサンプル・データが表示されることに注意してください。

    図6-5 「フィールド」ダイアログ

    「フィールド」ダイアログ
  4. 「挿入」をクリックして、データ要素をスプレッドシートのセルに挿入します。サンプル・データがセルに挿入されます。

フィールドを挿入すると、Template Builderにより、一意のExcel定義名がセルに割り当てられ、さらにデータ要素をその定義名にマップすることで、データとセルの間にマッピングが作成されます。マッピングは、図6-6に示すように、XDO_METADATAシートに書き込まれます。

図6-6 XDO_METADATAシートに挿入されるフィールド・マッピング

テンプレートとXDO_METADATAシート間のデータ・マッピング

XDO_METADATAシートは、デフォルトでは非表示であることに注意してください。

6.3.3.1 「フィールド」ダイアログのその他の機能

「フィールド」ダイアログは次の機能を提供します。

検索

大きくて複雑な構造を持つXML文書の場合は、検索機能を使用して特定のフィールドを検索します。完全なフィールド名またはフィールド名の一部を「検索」フィールドに入力し、「次を検索」をクリックします。

ビジネス・ビューまたはXMLタグ名ビュー

接続モードで作業する場合は、データ構造の表示に、データ・モデルで定義されているビジネス・ビュー名を使用するか、またはXMLタグ名を使用するかを選択できます。ビジネス・ビュー名は、データ・モデル・エディタのデータ要素に定義されたわかりやすい名前です。このオプションは、ローカルに格納されたファイルからサンプル・データをロードしている場合や、データ・モデルにビジネス・ビュー名が含まれない場合は使用できません。

6.3.4 繰返しグループの挿入

繰返しグループを挿入するには:

  1. 繰り返す要素を含むスプレッドシート内のセルを選択します。

  2. 「BI Publisher」メニューの「挿入」グループで、「繰返しグループ」をクリックします。

  3. 「BI Publisherのプロパティ」ダイアログで、図6-7に示すように、該当するフィールドに入力します。

    図6-7 繰返しグループの挿入

    繰返しグループの挿入

    出現箇所ごとにループを繰り返す要素を選択します。「各」データ・フィールドを選択すると、データ内の選択されたフィールドの出現箇所ごとに、ループに含まれている要素と処理命令が繰り返されるようにBI Publisherを設定することになります。

    たとえば、データに顧客の請求書データが含まれており、各顧客の請求書の表を作成する必要があるとします。この場合、顧客番号ごとに表を繰り返す必要があります。このため、「各」フィールドで顧客番号を選択して顧客ごとに新しいループ(またはグループ)を作成します。

    繰返しグループの作成について、次に注意してください。

    • ループおよびグループ化が別のグループ(つまり、外部グループ)内にない場合は、使用する繰返しデータ要素を選択する必要があります。たとえば、データ・セットがフラットな場合、繰返し可能な要素は/DATA/ROWSET/ROWのみです。複数のデータ・ソースまたは階層形式のXMLの場合は、データ・セットを選択できます。

    • ネストされたグループを作成(ループまたはグループをテンプレートの別のループ内に挿入)している場合は、「グループ化」チェック・ボックスが選択され、「各」フィールドが編集できません。それは、このフィールドが既存の外部ループですでに定義されているためです。「各」フィールドは「グループ・アイテム」として表示され、外部グループが定義済であることが示されます。

    絶対パス

    XML構造の要素に対して「絶対パス」を使用するには、このチェック・ボックスを選択します。これは、データ内で複数の親要素の下位に同名の要素がグループ化されている場合に重要です。

    グループ基準

    リストから、データのグループ化に使用するフィールドを選択します。単純なループを作成する場合は、グループ基準要素を選択しないでください。グループ基準要素を選択すると、そのグループ基準要素に基づいてデータが新規階層に再グループ化されます。

    グループ化

    ネストされたfor-eachループを作成する場合は、「グループ化」を選択して、要素が親ループ内に出現する場合にのみfor-eachループを繰り返すようにします。ネストされたループ内でグローバル・データ(親ループの外部)を繰り返すには、「グループ化」を選択解除します。

  4. ダイアログ・オプションが完了した場合は、「OK」をクリックして、BI Publisherコードを挿入し、グループ化を定義します。BI Publisher構文のXDO_GROUP_?name?を使用してExcel定義名がセル範囲に割り当てられ、図6-8に示すように、コードがXDO_METADATAシートに書き込まれます。

    図6-8 繰返しグループを表示するXDO_METADATAシート

    挿入された繰返しグループを表示するXDO_METADATAシート

6.3.5 表示、編集および削除の各フィールドへのフィールド・ブラウザの使用

「フィールド・ブラウザ」では、Template Builderにより挿入されたコードと、XDO_METADATAシートに手動で挿入したコードの表示および編集ができます。フィールド・ブラウザで1行のコードを選択すると、テンプレート内の対応するセルが強調表示されるため、編集、削除または表示しているフィールドを把握できます。

フィールド・ブラウザを使用してフィールドを編集または削除するには:

  1. 「BI Publisher」メニューの「ツール」グループで、「フィールド・ブラウザ」をクリックします。

  2. フィールド・ブラウザにより、テンプレートに存在するBI Publisherコマンドが表示されます。表示するフィールドまたはコマンドを選択します。選択したコマンドのコードが下部の「編集」リージョンに表示されます。コードに開始タグと終了タグ(繰返しグループの開始タグと終了タグなど)がある場合は、開始タグは上部のコード・ボックスに表示され、終了タグは下部のコード・ボックスに表示されることに注意してください。

    コマンドを選択すると、コードに対応するテンプレートの領域が強調表示されます。図6-9では、フィールド・ブラウザで繰返しグループが選択され、対応するフィールドがテンプレート内で強調表示されています。

    図6-9 フィールド・ブラウザ

    フィールド・ブラウザおよびスプレッドシート内で強調表示されたセル
  3. コードを削除するには、「削除」をクリックします。コードを編集するには、「編集」に表示されるコードを更新し、「更新」をクリックします。

  4. 終了するときは、「閉じる」をクリックして、「フィールド・ブラウザ」を閉じます。

6.3.6 テンプレートのプレビュー

Template Builderのプレビュー機能を使用して、テンプレートをBI Publisherサーバーにアップロードする前にテストします。

サンプル・データがロードされたテンプレートをプレビューするには:

  • 「BI Publisher」タブの「プレビュー」グループで、「Excel」をクリックします。

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

接続モードで作業する場合は、「レポートの表示」を使用して、レポート・データ・モデルのライブ・データによりテンプレートをテストするオプションがあります。

ライブ・データを使用してテンプレートを表示するには:

  • 「BI Publisher」タブの「オンライン」グループで、「レポートの表示」をクリックします。

    Template Builderにより、BI Publisherサーバーでデータ・モデルを実行するリクエストが送信され、テンプレートに適用するデータが戻されます。データ・モデルにパラメータが必要な場合は、値の入力が求められます。新しいExcelワークブックで出力ドキュメントが開きます。

6.3.7 Excelアナライザ・テンプレートのインポート

BI PublisherのExcel Analyzer機能は非推奨になりました。以前のリリースのBI PublisherのExcel Analyzerテンプレートを使用している場合、Excel Template Builderの「インポート」コマンドを使用して、Excel Analyzerテンプレートをインポートし、Excelテンプレートに変換できます。「インポート」コマンドは、オフライン・モードを使用して作成されたExcelアナライザ・テンプレートのみをサポートします。

Excelアナライザ・テンプレートをインポートするには:

  1. Excelアナライザ・テンプレートを開きます。接続モードで作業する場合は、変換するテンプレートを含むレポートに移動します。「テンプレートを開く」ダイアログでレポートを選択すると、「レイアウト・テンプレート」リージョンにExcelアナライザ・テンプレートがexcelタイプとして表示されます。「レイアウト・テンプレートを開く」をクリックして、Excelアナライザ・テンプレートをExcelで開きます。

  2. 「インポート」をクリックします。「この機能はテンプレートを上書きします」というメッセージが表示されます。

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

Template Builderにより、Excelアナライザ・テンプレートがExcelテンプレートに変換されます。

6.4 Template Builderを使用した基本テンプレートの構築

この項では、Excel Template Builderを使用して単純なExcelテンプレートを作成する手順を説明することで、Excelテンプレートの概念を示します。この手順では次のステップを実行します。


ステップ1: Template Builderへのサンプル・データのロード
ステップ2: Excelでのレイアウトの設計
ステップ3: Template Builderを使用したフィールドの挿入
ステップ4: Template Builderを使用した繰返しグループの挿入
ステップ5: 計算済の給与フィールドの挿入
ステップ6: テンプレートのテスト

6.4.1 ステップ1: Template Builderへのサンプル・データのロード

サンプル・データのロードのために選択するメソッドは、接続モードでの作業か、または切断モードでの作業かによって異なります。

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

<?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>

このチュートリアルで説明されたテンプレートを構築するには、BI Publisher Desktopとともにインストールされた「サンプル」フォルダで使用可能なサンプル・データを使用します。<Install Directory>\BI Publisher Desktop\Template Builder for Word\samples\Excel templates\Employee By Departments\EmpByDept Single Sheets\EmpbyDeptExcelData.xmlに非常に類似したデータ・セットがあります。

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

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

図6-10 サンプル設計

図6-10の説明が続きます
「図6-10 サンプル設計」の説明

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

6.4.3 ステップ3: Template Builderを使用したフィールドの挿入

このレイアウト設計では、次のフィールドをデータからテンプレートにマップする必要があります。

レイアウトのフィールド データの要素

部門

DEPARTMENT_NAME

従業員名

EMP_NAME

従業員ID

EMPLOYEE_ID

電子メール

EMAIL

電話

PHONE_NUMBER

給与

SALARY


Template Builderを使用してフィールド・マッピングを挿入するには:

  1. データ・フィールドを表示するスプレッドシートでセルを選択します。たとえば、DEPARTMENT_NAME要素をマップするには、B5セルを選択します。

  2. 「BI Publisher」タブの「挿入」グループで、「フィールド」をクリックします。(これが挿入する最初のフィールドであるため、メタデータ・シートが作成されることを示すメッセージが表示されます。)図6-11に示すように、データ構造を示す「フィールド」ダイアログが表示されます。

    図6-11 「フィールド」ダイアログ

    「フィールド」ダイアログ
  3. 「フィールド」ダイアログで要素を選択して、「挿入」をクリックします。サンプル・データがテンプレート内のセルに挿入されます。「フィールド」ダイアログの詳細は、第6.3.3項「フィールドの挿入」を参照してください。

  4. テンプレート内の従業員名、従業員ID、「電子メール」、「電話」および給与の各フィールドで操作を繰り返します。

6.4.4 ステップ4: Template Builderを使用した繰返しグループの挿入

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

  • <EMPS>要素の出現ごとに、従業員のデータ(名前、電子メール、電話番号、給料)がワークシートに表示されます。

  • <DEPT>要素の出現ごとに、部門名およびその部門に属する従業員のリストが表示されます。

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

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

<DATA> 
   <DEPT>
      <EMPS>

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

従業員の繰返しグループを挿入するには:

  1. グループを構成するセルを選択します。この例では、最初のグループは、表内で1行を構成する、A8からE8のセルの従業員データです。

  2. 「BI Publisher」タブの「挿入」グループで、「繰返しグループ」をクリックします。

  3. 「BI Publisherのプロパティ」ダイアログで次を選択します。

    • 「各」リストからEMPSを選択します。

    • 「グループ基準」リストからEMPLOYEE_IDを選択します。

    図6-12は、従業員グループに対するBI Publisherプロパティの定義を示しています。ここでは、従業員データの行のみが強調表示されています。ヘッダーは強調表示しないでください。また、セル合計も強調表示されていないことに注意してください。

    図6-12 従業員の繰返しグループの挿入

    従業員の繰返しグループの挿入

部門の繰返しグループを挿入するには:

  1. 部門グループを定義するには、図6-13に示すように、部門名セルとその下のすべての従業員フィールド(A5-E9)を選択します。

    図6-13 部門名セルとすべての従業員フィールド

    図6-13の説明が続きます
    「図6-13 部門名セルとすべての従業員フィールド」の説明

  2. 「BI Publisher」タブの「挿入」グループで、「繰返しグループ」をクリックします。部門レベルで繰り返されるように、部門グループに給与合計セルが含まれていることに注意してください。

  3. 「BI Publisherのプロパティ」ダイアログで次を選択します。

    • 「各」リストからDEPTを選択します。

    • 「グループ基準」リストからDEPARTMENT_IDを選択します。

図6-14は、「BI Publisherのプロパティ」ダイアログの選択内容を示しています。

図6-14 部門の繰返しグループの「BI Publisherのプロパティ」

部門の繰返しグループの「BI Publisherのプロパティ」ダイアログ

6.4.5 ステップ5: 計算済の給与フィールドの挿入

最後に、各部門の集計合計になる第2の給与フィールドを挿入します。

計算済フィールドを挿入するには:

  1. 計算済の給与を表示するスプレッドシートでセルを選択します。この例では、E9セルです。

  2. 「BI Publisher」タブの「挿入」グループで、「フィールド」をクリックして、「フィールド」ダイアログを表示します。

  3. SALARY要素を選択し、「挿入」をクリックして、テンプレートにマッピングを挿入します。

  4. XDO_METADATAシートを開きます。

    最初のフィールドの挿入時に、Template Builderによって非表示のXDO_METADATAシートが作成されています。シート1を右クリックしてメニューから「非表示解除」を選択することで、ワークブックでのシートの非表示を解除します。

    図6-15は、サンプル・テンプレートのXDO_METADATAシートを示しています。

    図6-15 XDO_METADATAシート

    図6-15については周囲のテキストで説明しています。

    給与合計フィールドがXDO_?XDOFIELD7?という名前のセルにマップされます。

  5. 列Bに、XPATH関数として計算を入力します。グループ内のすべての従業員に対するSALARY要素の合計を計算するには、<?sum(.//SALARY)?>と入力します。このエントリは、図6-16に示されています。

図6-16 給与計算のエントリ

計算フィールドのエントリ

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

サンプル・データがロードされたテンプレートをプレビューするには:

  • 「BI Publisher」タブの「プレビュー」グループで、「Excel」をクリックします。

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

図6-17 サンプル・データでのテンプレートのプレビュー

図6-17の説明が続きます
「図6-17 サンプル・データでのテンプレートのプレビュー」の説明

6.5 日付の書式設定

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

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

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

このプロシージャでは、部門別従業員テンプレートと最初の例のデータを使用して、HIRE_DATE要素をレイアウトに追加し、図6-18の列Eに示すように日付を表示します。

図6-18 Hire Dateを表示したEmployee by Departmentテンプレート

図6-18の説明が続きます
「図6-18 Hire Dateを表示したEmployee by Departmentテンプレート」の説明

日付を書式設定する手順は次のとおりです。

  1. レイアウト内の表にHIRE_DATEの列を追加します。

  2. データを表示する表の行に、Template Builderを使用してHIRE_DATEフィールドを挿入します。


    注意:

    Template Builderを使用していない場合は、XMLデータのHIRE_DATEのサンプル値をHIRE_DATEフィールドを表示するセルにコピー・アンド・ペーストします。たとえば、次のように入力します。

    次の値

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

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

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


    挿入済のフィールドを図6-19に示します。

    図6-19 HIRE_DATEフィールドの挿入

    図6-19の説明が続きます
    「図6-19 HIRE_DATEフィールドの挿入」の説明

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

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

    図6-20 列Fにおける新しいHire Date列

    図6-20の説明が続きます
    「図6-20 列Fにおける新しいHire Date列」の説明

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

    • 完全な日付とタイムスタンプを維持するには、次のように入力します。

      =--REPLACE(SUBSTITUTE(E8,"T"," "),LEN(E8)-6,6,"")
      
    • 日付部分(YYY-MM-DD)のみを維持するには、次のように入力します。

      =DATEVALUE(LEFT(E8,10))
      

    どちらの機能も、E8は、変換する値を含むセルを参照していることに注意してください。

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

    図6-21 移入されたHire Dateセル(F8)

    図6-21の説明が続きます
    「図6-21 移入されたHire Dateセル(F8)」の説明

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

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

    図6-22 「セルの書式設定」ダイアログでの「日付」の書式の適用

    図6-22の説明が続きます
    「図6-22 「セルの書式設定」ダイアログでの「日付」の書式の適用」の説明

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

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

    図6-23は、非表示の列Eを含むテンプレートを示しています。

6.6 Excelテンプレートの概念の理解

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

6.6.1 データ・フィールドおよびデータ・グループのマップ

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

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

6.6.2 マッピング用のExcel定義名の使用

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


ヒント:

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


Template Builder for Excelを使用してフィールドおよび繰返しグループを挿入すると、定義名が自動作成されます。また、定義名を手動で挿入することもできます。Excelテンプレート内で使用する定義名は、この章で説明する構文を使用すると同時に、Microsoft Excelのヘルプ・ドキュメントに記載されているMicrosoft社のガイドラインに従う必要があります。BI Publisherの定義名は、テンプレート・シートに従っています。

6.6.3 接頭辞XDO_を使用した定義名の作成

BI Publisher定義名は、接頭辞XDO_で識別されるExcel定義名です。テンプレートでBI Publisherコードを使用して定義名を作成することにより、テンプレート内のコードの位置とXMLデータ要素との間にリンクが作成されるほか、出力レポート内でデータ範囲の動的な拡張機能が維持され、そのデータ範囲を他の式計算、チャートおよびマクロで参照することもできます。

6.6.4 XDO_定義名を使用したExcel固有の関数の使用

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

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

6.6.5 XDO_METADATAシートについて

各Excelテンプレートには、テンプレート・ブック内にXDO_METADATAという名前のシートが必要です。BI Publisherでは、このシートをテンプレート内で次のように使用します。

  • テンプレートをExcelテンプレートとして識別します。

  • Template Builderを使用して作成するフィールドおよびグループ・マッピングのコードを挿入します。

テンプレート設計者として、テンプレート内のフィールドまたはグループでより高度な計算および命令の処理を実行するように指定する場合もこのシートを使用します。BI Publisherには、特別なレポート機能を提供するための関数セットが備わっています。その他の書式設定および計算は、XSLTで記述できます。

6.6.5.1 XDO_METADATAシートの作成

Template Builderを使用して新しいExcelテンプレートの設計を開始する場合、「挿入」機能のいずれかを初めて使用するときは、Template Builderによって非表示のXDO_METADATAシートが自動作成されます。シートが作成されたことを示すメッセージが表示されます。

BI Publisherでは、そのシートを非表示のシートとして作成します。XDO_METADATAシートの表示および編集を行うには、Excelの「再表示」コマンドを使用します。

6.6.5.2 XDO_METADATAシートの書式

XDO_METADATAシートは、図6-24に示す書式を使用して作成されます。

図6-24 XDO_METADATAシートの書式

図6-24の説明が続きます
「図6-24 XDO_METADATAシートの書式」の説明

この書式は、ヘッダー・セクションとデータ制約セクションという2つのセクションから構成されます。どちらのセクションも必須です。

ヘッダー・セクションでは、列Aのすべてのエントリをリストする必要がありますが、値が必要なのは、図に示したように、Template Typeの1つだけです。列Aのエントリを次に示します。

  • Version

  • ARU-dbdrv

  • Extractor Version

  • Template Code

  • Template Type

  • Preprocess XSLT File

  • Last Modified Date

  • Last Modified By

データ・フィールド・マッピングおよび他の処理命令を指定するには、データ制約セクションを使用します。詳細は、次の項を参照してください。

6.6.5.3 XDO_METADATAシートの非表示

完成したテンプレートをBI Publisherカタログにアップロードする前に、XDO_METADATAシートを非表示にして、最終レポート出力で混在しないようにすることをお薦めします。Excel Hideコマンドを使用して、テンプレートをサーバーにアップロードする前にシートを非表示にします。

6.7 高度なBI Publisher関数の使用

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

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

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

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

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

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

6.7.1 レポート関数

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

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


注意:

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


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

  • 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.8項「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)。

複数のシートにデータを分割する手順は次のとおりです。

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

    図6-25 従業員データ、および繰返しの従業員データのグループの定義

    図6-25の説明が続きます
    「図6-25 従業員データ、および繰返しの従業員データのグループの定義」の説明


    注意:

    データは部門ごとに分割されるため、複数の部門を包含するグループを作成しないでください。


  2. XDO_METADATAシートのData Constraintsセクションに、表6-3で説明されている値を入力します。

    表6-3 Data Constraintsの値

    列Aのエントリ 列Bのエントリ

    XDO_SHEET_?

    <?.//DEPT?>

    XDO_SHEET_NAME_?

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


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

図6-26 Data Constraintsのエントリ

図6-26の説明が続きます
「図6-26 Data Constraintsのエントリ」の説明

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

図6-27 生成されるレポートの例

図6-27の説明が続きます
「図6-27 生成されるレポートの例」の説明

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

パラメータを定義するには、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という名前のパラメータを宣言して参照する手順は次のとおりです。

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

    図6-28 定義名XDO_?Country?でマークされているセル

    図6-28の説明が続きます
    「図6-28 定義名XDO_?Country?でマークされているセル」の説明

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

    図6-29 XDO_?Country?セルへのパラメータ値の割当て

    図6-29の説明が続きます
    「図6-29 XDO_?Country?セルへのパラメータ値の割当て」の説明

6.7.1.3 リンクの定義

表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)で識別できます。

各請求書へのダイナミック・リンクを作成するレポートを生成する手順は次のとおりです。

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

    図6-30 定義名XDO_?INVOICE_NO?の割当て

    図6-30の説明が続きます
    「図6-30 定義名XDO_?INVOICE_NO?の割当て」の説明

  2. 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-31に示します。

    図6-31 XDO_LINK?_?INVOICE_NO?Excelでのエントリ

    図6-31の説明が続きます
    「表6-31 ExcelでのXDO_LINK?_?INVOICE_NO?エントリ」の説明

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

図6-32 レポート出力の例

図6-32の説明が続きます
「図6-32 レポート出力の例」の説明

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

いずれの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-33に示すように、サブ・テンプレートで実行されるコードから返される文字列に基づいて移入されます。

図6-33 移入されるXDO_?TYPE?フィールド

図6-33の説明が続きます
「図6-33 移入されるXDO_?TYPE?フィールド」の説明

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に入力されたサブ・テンプレート処理の結果をマップします。

6.7.1.5 Java拡張ライブラリの参照

テンプレート内にJava拡張ライブラリへの参照を組み込み、このライブラリ内のメソッドをコールしてテンプレート内で処理を実行できます。Java拡張ライブラリを参照するには、表6-11に示されているコマンドを使用します。

表6-11 Java拡張ライブラリの参照

列Aのエントリ 列Bのエントリ

XDO_EXT_?n? ここで、nは一意の識別子です。例: XDO_EXT?1?

<?namespace:xmlns:bipext="extension 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-34に示します。

図6-34 Java拡張ライブラリを宣言してコールするXDO_METADATAシートのエントリ

図6-34の説明が続きます
「図6-34 Java拡張ライブラリを宣言してコールするXDO_METADATAシートのエントリ」の説明

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

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

表6-13 特定の書式設定属性のコマンド

関数 コマンド

第6.7.2.1項「罫線と下線のスタイルの定義」


XDO_STYLE_n_?セル・オブジェクト名?

第6.7.2.2項「行のスキップ」


XDO_SKIPROW_?セル・オブジェクト名?


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

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>

スタイルを定義する手順は次のとおりです。

  1. 図6-35に示すように、Excelテンプレートで、データからのDEPT_TOTAL_SALARYを表示するフィールドに、定義名XDO_?DEPT_TOTAL_SALARY?を割り当てます。

    図6-35 定義名XDO_?DEPT_TOTAL_SALARY?の割当て

    図6-35の説明が続きます
    「図6-35 定義名XDO_?DEPT_TOTAL_SALARY?の割当て」の説明

  2. 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-36は、Data Constraintsリージョンの3つのエントリを示しています。

図6-36 Data Constraintsのエントリ

図6-36の説明が続きます
「図6-36 Data Constraintsのエントリ」の説明

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

図6-37 スタイル・コマンドがXDO_?DEPT_TOTAL_SALARY?に適用されていることを示す、生成されたレポートセル

図6-37の説明が続きます
「図6-37 スタイル・コマンドがXDO_?DEPT_TOTAL_SALARY?セルに適用されていることを示す、生成されたレポート」の説明

6.7.2.2 行のスキップ

列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-38に示します。従業員Michael Hartsteinはレポートに含まれていないことに注目してください。

図6-38 スキップされた行の出力

図6-38の説明が続きます
「図6-38 スキップされた行の出力」の説明

6.7.3 グループ化関数

テンプレート内のデータをグループ化するには、表6-23に示す関数を使用します。

表6-23 データのグループ化の作成

関数 コマンド

第6.7.3.1項「データのグループ化」


XDO_GROUP_?group element?

第6.7.3.3項「データの再グループ化」


XDO_REGROUP_?


6.7.3.1 データのグループ化

たとえば、データを複数のシートに分割する場合など、レイアウトに特定のデータのグループ化が必要なときは、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文を定義します。対応するグループに適切な定義をそれぞれに指定することにより、テンプレート内に複数のグループをネストしてマークできます。

6.7.3.2 ネストされたグループでの、生成されたXDO定義名の処理

ネストされたグループでXDO_GROUP_?が使用される場合は、最終的なレポートにおけるXDO定義名の範囲が無意味になります。この場合、最終的なレポート内の式における定義名を参照しないでください。コマンドXDO_MARKUP_?を使用して、最終的なレポート内のXDOマークアップ・アクティビティを無効にできます。表6-25は、XDO_METADATAシートでXDO_MARKUP_?を使用した状態を示しています。

表6-25 XDO_MARKUP_?の使用

列Aのエントリ 列Bのエントリ

XDO_MARKUP_?

falseまたはFALSE

(Excelの「セルの書式設定」ダイアログで「テキスト」としてセルを書式設定する必要があります。)


また、テンプレートに数多くの定義名が含まれていて、ネストされたグループの複数のレベルでそれらの定義名が使用されている場合は、Excelでは、生成された定義名の数を処理できないことがあります。この場合は、XDO_MARKUP_?コマンドを使用して、生成されたレポートのマークアップを無効にできます。

falseに設定されていると、BI Publisherでは、XDO_GROUP_?によって生成されたいずれの結果に対しても、定義名はいっさい生成されません。

6.7.3.3 データの再グループ化

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?

説明:

  • UniqueGroupIDはグループのIDです。levelNameと同じにすることも、別の名前を割り当てることもできます。

  • levelNameは、XMLデータ・ファイル内のXMLレベル・タグ名、またはネストされたグループ化のコンテキストでのcurrent-group()を表すXDO_CURRGRP_です。ネストしているグループがテンプレートに複数存在している場合は、内側のグループすべてに対してXDO_CURRGRP_を使用してください。

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

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


表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

列Aのエントリ 列Bのエントリ

XDO_REGROUP_?

XDO_REGROUP_?COUNTRYGRP?XDO_CURRGRP_?COUNTRY?


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

表6-29 ネストされたグループの作成、例3

列Aのエントリ 列Bのエントリ

XDO_REGROUP_?

XDO_REGROUP_?STATEGRP?XDO_CURRGRP_?STATE?


表6-29に示す定義は内側のグループSTATEGRPを作成し、sortByNameパラメータSTATEを含みます。

6.8 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

6.8.1 XSLT前処理の例: 複数のシートへのフラット・データの分割

この項では、XSLT前処理ファイルを使用してフラット・データをグループ化し、Excelでの複数のシートに分割できるようにする操作の2つの例について説明します。その例は次のとおりです。

どちらの例でも、次の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>

6.8.1.1 特定のフィールドによるデータの分割

この例では、XSLT前処理ファイルを使用して、データのグループ化を作成し、そのグループ化を基準にしてデータを複数のExcelシートに分割できるようにします。この例では、Products.Brandフィールドによってサンプル・データがグループ化されます。

  1. データをグループ化するために、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> 
    
  2. XSLTファイルをsplitByBrand.xslとして保存し、このファイルをBI Publisherカタログのレポート定義にアップロードします。テンプレートの「タイプ」としてXSLスタイルシート(HTML/XML/テキスト)を選択します。

  3. 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-39に示します。

      図6-39 ブランドによる分割を行うためのXDO_METADATAシートの例

      ブランドによる分割を行うためのXDO_METADATAシートの例
  4. ユーザーに表示する必要がない場合は、XDO_METADATAシートを非表示にします。BI Publisherカタログのレポート定義にExcelテンプレート・ファイルをアップロードします。

6.8.1.2 行数によるデータの分割

この例では、XSLT前処理ファイルを使用して、/ROWSET/ROWの出現回数によってサンプルXMLデータをグループ化し、新規に作成されたグループの出現ごとにシートを新規作成するようにExcelテンプレートを構成する方法を示します。

  1. 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> 
    
  2. XSLTファイルをsplitByCount.xslとして保存し、このファイルをBI Publisherカタログのレポート定義にアップロードします。テンプレートの「タイプ」としてXSLスタイルシート(HTML/XML/テキスト)を選択します。

  3. Excelテンプレート・ファイルのXDO_METADATAシートで、次のように入力します。

    • Preprocess XSLT Fileパラメータに「splitByCount.xsl」と入力します。

    • Data Constraintsリージョンで、表6-31に示すエントリを行います。

      表6-31 件数による分割を行うためのData Constraintsリージョンへのエントリ

      列Aのエントリ 列Bのエントリ

      XDO_SHEET_?

      <?//CountGroup?>

      XDO_SHEET_NAME_?

      <?./@name?>


  4. XDO_METADATAシートを非表示にして、レポート利用者に表示しないようにします。

  5. BI Publisherカタログのレポート定義にExcelテンプレート・ファイルをアップロードします。

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

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

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

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

  1. Template Viewerを開きます。

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

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

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

    図6-40 .xmlファイルと.xlsファイルをすべて示した、「データ」リージョンと「テンプレート」リージョン

    図6-40の説明が続きます
    「図6-40 .xmlファイルと.xlsファイルをすべて示した、「データ」リージョンと「テンプレート」リージョン」の説明

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

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

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

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

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

    図6-41 ログ・メッセージ

    図6-41の説明が続きます
    「図6-41 ログ・メッセージ」の説明

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

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

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

    図6-42 「Excelテンプレート」オプション

    図6-42の説明が続きます
    「図6-42 「Excelテンプレート」オプション」の説明

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

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