2009-06-01 8 views
0

累積最大functoidと注目されたパフォーマンスの問題を使用した人はいますか?累積最大、すべての親レコードのために計算

抽象
1は、フィールドの最大値をマッピングしたい場合は、Functoidの累積最大を使用することができます。私たちはしばらくの間、それを使用した後

問題
は、我々は大きなファイルのパフォーマンスの低下に気づきました。 1が最大の計算は、各ループの記録のために作られていることに気付き、XSLT ...

一つは壮大な親に計算を移動し、カスタムXSLパスで新しいXSLTを指摘したが、私ができたの調査

マッピングツールでマッピングできるようにするのが本当に好きです。

提案がありますか?

種類よろしく
マーティン累積最大の除去と3スクリプトのFunctoidを追加し、別の方法で計算を行うことにより

http://martinbring.blogspot.com

+0

@Martin、編集して質問をより明示的にすることはできますか? –

答えて

3

を持参、問題が解決されます。 マッピング時間が40分の1に減少しました。

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

ソリューション
一つのスクリプトFunctoid、無入力または出力の「インラインXSLTコールテンプレート」、EXSLT Math library found hereからライブラリの最大値()部分を含みます。ライブラリ全体を使用する代わりに、ファイルを解凍して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> 

つスクリプトFunctoidは、「インラインXSLTコールテンプレート」、

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

つスクリプトFunctoidを計算するためにノードセットとテンプレート点を属性選択変数を含みます、変数を使用して、出力要素にその値を設定するために、1つの出力を持つ「インラインXSLT」。

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

Voila!

関連する問題