累積最大値を削除し、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>
出来上がり!