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

http://martinbring.blogspot.com

Était-ce utile?

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!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top