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

最高のパフォーマンスを達成するには、データ処理を可能なかぎり実行するようにデータ・モデルを設計します。データ・エンジンから必要な出力を取得できない場合は、データを変換する命令を含むXSLTファイルを使用してデータを前処理できます。

次のようなユースケース・サンプルがあります。

  • 適切なレイアウトをサポートするために必要な階層を設定するグループの作成
  • データ要素へのスタイル属性の追加
  • Excelテンプレートでは不可能であるか、パフォーマンス上の理由から望ましくない、複雑なデータ処理ロジックの実行Template Builder for Excelでは、XSLT前処理が必要なテンプレートのプレビューはサポートされていません。

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

  1. ファイルを作成し、.xslとして保存します。
  2. テンプレートの場合と同様に、ファイルをPublisherカタログ内のレポート定義にアップロードします。
    1. カタログ内のレポートに移動します。
    2. 「編集」をクリックします。
    3. 新規レイアウトの追加」をクリックします。
    4. 「アップロード」をクリックします。
    5. 「アップロード」ダイアログのフィールドを入力し、テンプレートの「タイプ」として「XSLスタイルシート(HTML/XML/テキスト)」を選択します。
    6. アップロード後に、「リストの表示」をクリックします。レポートの表示時にユーザーからこのテンプレートがオプションとして見えないようにするため、「アクティブ」を選択解除します。

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

    7. レポート定義を保存します。
  3. ExcelテンプレートのXDO_METADATAシートのHeaderセクションで、Preprocess XSLT Fileパラメータにファイル名を入力します。たとえば、splitByBrand.xslです。

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>

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

この例では、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として保存し、このファイルをカタログのレポート定義にアップロードします。テンプレート・タイプとして「XSLスタイルシート(HTML/XML/テキスト)」を選択します。
  3. Excelテンプレート・ファイルのXDO_METADATAシートで、次のように入力します。
    • Preprocess XSLT Fileパラメータに「splitByBrand.xsl」と入力します。

    • Data Constraintsリージョンで、エントリを行い、XSLT前処理の結果によって作成された<BrandGroup>要素に基づいて、データを複数のシートに分割します。

      • 列Aのエントリ: XDO_SHEET_?、列Bのエントリ: <?//BrandGroup?>
      • 列Aのエントリ: XDO_SHEET_NAME_?、列Bのエントリ: <?./@name?>

      XDO_METADATAシートでのサンプル・エントリを次の図に示します。

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

行数によるデータの分割

この例では、XSLT前処理ファイルを使用して、サンプルのXMLデータをグループ化する方法を示します。

/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として保存し、このファイルをカタログのレポート定義にアップロードします。テンプレート・タイプとして「XSLスタイルシート(HTML/XML/テキスト)」を選択します。
  3. Excelテンプレート・ファイルのXDO_METADATAシートで、次のように入力します。
    • Preprocess XSLT Fileパラメータに"splitByCount.xsl"と入力します

    • Data Constraintsリージョンで、次のエントリを行います。

      • 列Aのエントリ: XDO_SHEET_?、列Bのエントリ: <?//CountGroup?>
      • 列Aのエントリ: XDO_SHEET_NAME_?、列Bのエントリ: <?./@name?>
  4. XDO_METADATAシートを非表示にして、レポート利用者に表示しないようにします。
  5. カタログのレポート定義にExcelテンプレート・ファイルをアップロードします。