Maximum cumulatif, calculer pour chaque enregistrement parent
Question
Avez quelqu'un a utilisé le maximum cumulatif functoid et a remarqué des problèmes de performance?
Résumé Si l'on veut cartographier la valeur maximale d'un champ, vous pouvez utiliser le fonctoid maximum cumulatif.
Problème Après que nous avions utilisé pendant un certain temps, nous avons remarqué une dégradation des performances sur des fichiers plus volumineux.
L'examen de la XSLT on constate que le calcul est effectué max pour chaque enregistrement en boucle ...
On pourrait déplacer le calcul du grand-parent, et indiquer la nouvelle xslt dans le chemin personnalisé XSL, mais j'aime vraiment garder la possibilité de cartographier dans l'outil de cartographie.
Toutes les suggestions?
Cordialement
Martin Apportez
La solution
En supprimant le maximum cumulatif et en ajoutant 3 fonctoids de script, en faisant le calcul d'une autre manière, le problème est résolu. Temps de cartographie diminué d'un facteur de 40.
11 Mo, 10 000 lignes, a été préalablement mis en correspondance en 200 minutes est maintenant mappé en 5 minutes.
Solution Un script functoid, « Appel XSLT Inline modèle » sans entrée ou sortie, contenant la partie max () de la bibliothèque de EXSLT bibliothèque mathématique trouve ici . Au lieu d'utiliser l'ensemble je décompressé le fichier et « extrait » le modèle 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>
Un functoid de script «XSLT Inline appel Modèle » sans entrée ou de sortie, contenant une variable qui attribuent des points à sélectionner le modèle avec l'ensemble de noeuds pour calculer
<xsl:variable name="var:MaxValueDate">
<xsl:call-template name ="GetMax">
<xsl:with-param name ="nodes" select="Root//Parent/ValueToCalculate" />
</xsl:call-template>
</xsl:variable>
Un script functoid, « XSLT inline » avec une sortie, en utilisant la variable pour remplir un élément de sortie par sa valeur.
<OutputElement>
<xsl:value-of select="$var:MaxValueDate" />
</OutputElement>
Voila!