機械翻訳について

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

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

ユースケースの例を次に示します:

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

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

  1. ファイルを作成し、.xslとして保存します。
  2. テンプレートと同様に、パブリッシャカタログのレポート定義にファイルをアップロードします:
    1. カタログ内のレポートにナビゲートします。
    2. 「編集」をクリックします。
    3. 新しいレイアウトの追加をクリックします。
    4. 「アップロード」をクリックします。
    5. アップロード・ダイアログのフィールドに入力し、テンプレート「タイプ」として「XSLスタイル・シート(HTML/XML/Text)」を選択します。
    6. アップロード後、「リストを表示」をクリックします。 ユーザーがレポートを表示するときにオプションとしてこのテンプレートを表示しないように、「アクティブ」の選択を解除します。

      テストのために、テンプレートがデータに適用されたときに中間データを表示できるように、XSLテンプレートをアクティブとして保守できます。 テストが完了したら、テンプレートを非アクティブに設定します。

    7. レポート定義を保存します。
  3. ExcelテンプレートのXDO_METADATAシートのヘッダー・セクションで、「XSLTファイルの前処理」パラメータのファイル名を入力します。 次に例を示します: 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/Text)」を選択します。
  3. Excelテンプレート・ファイルのXDO_METADATAシートで、次のように入力します:
    • 「XSLTファイルの前処理」パラメータには、" splitByBrand.xsl "と入力

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

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

      この図は、XDO_METADATAシートのサンプル・エントリを示しています。

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

行数によるデータの分割

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

サンプルXMLデータを/ROWSET/ROW,の発生回数でグループ化し、新しく作成されたグループの出現ごとに新しいシートを作成するように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/Text)」を選択します。
  3. Excelテンプレート・ファイルのXDO_METADATAシートで、次のように入力します:
    • 「XSLTファイルの前処理」パラメータには、splitByCount.xslと入力します。

    • 「データ制約」リージョンで、これらのエントリを作成します。

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