0

累積最大 Functoid を使用して、パフォーマンスの問題に気付いた人はいますか?

Abstract
フィールドの最大値をマップしたい場合は、Functoid Cumulative Maximum を使用できます。

問題
しばらく使用した後、大きなファイルのパフォーマンスが低下していることに気付きました。

xslt を調べると、ループするレコードごとに最大計算が行われることがわかります...

計算を親の親に移動し、カスタム XSL パスで新しい xslt を指摘することもできますが、マッピング ツールでマッピングする可能性を維持したいと思っています。

助言がありますか?

敬具
マーティン・ブリング

http://martinbring.blogspot.com

4

1 に答える 1

3

累積最大値を削除し、3 つのスクリプト Functoid を追加して、別の方法で計算を行うことにより、問題は解決されます。マッピング時間が 40 分の 1 に短縮されました。

11 Mb、10,000 行、以前は 200 分でマップされていましたが、現在は 5 分でマップされています。

ソリューション
1 つのスクリプティング Functoid、「インライン XSLT 呼び出しテンプレート」、入力または出力のないもので、ここにある EXSLT数学ライブラリのライブラリの max() 部分が含まれています。ライブラリ全体を使用する代わりに、ファイルを解凍して max() テンプレートを「抽出」しました。

 <xsl:template name="GetMax">
   <xsl:param name="nodes" /> 

    <xsl:choose>
      <xsl:when test="not($nodes)">NaN</xsl:when> 
      <xsl:otherwise>
        <xsl:for-each select="$nodes">
          <xsl:sort data-type="number" order="descending" /> 
          <xsl:if test="position() = 1">
          <xsl:value-of select="number(.)" /> 
        </xsl:if>
       </xsl:for-each>
     </xsl:otherwise>
   </xsl:choose>
 </xsl:template>

入力または出力のない「インライン XSLT 呼び出しテンプレート」という 1 つのスクリプト Functoid には、計算するように設定されたノードを持つテンプレートを指す属性を選択する変数が含まれています。

<xsl:variable name="var:MaxValueDate">
    <xsl:call-template name ="GetMax">
            <xsl:with-param name ="nodes" select="Root//Parent/ValueToCalculate" />
    </xsl:call-template>
</xsl:variable>  

変数を使用して出力要素にその値を設定する、1 つの出力を持つ 1 つのスクリプト Functoid、「インライン XSLT」。

<OutputElement>
        <xsl:value-of select="$var:MaxValueDate" />
</OutputElement>

出来上がり!

于 2009-06-02T07:18:51.497 に答える