Map 累计最大值,为每个父记录计算

Map 累计最大值,为每个父记录计算,map,biztalk,max,Map,Biztalk,Max,是否有人使用“累计最大值”functoid并注意到性能问题 摘要 如果要映射字段的最大值,可以使用functoid累积最大值 问题 在使用了一段时间后,我们注意到较大文件的性能下降 检查xslt one时,会注意到对每个循环记录进行了最大计算 可以将计算移到父级,并在自定义XSL路径中指出新的xslt,但我确实希望保留在映射工具中映射的可能性 有什么建议吗 亲切的问候 马丁带来 通过删除累积最大值并添加3个脚本functoid,以另一种方式进行计算,问题得以解决映射时间减少了40倍。 11MB,

是否有人使用“累计最大值”functoid并注意到性能问题

摘要
如果要映射字段的最大值,可以使用functoid累积最大值

问题
在使用了一段时间后,我们注意到较大文件的性能下降

检查xslt one时,会注意到对每个循环记录进行了最大计算

可以将计算移到父级,并在自定义XSL路径中指出新的xslt,但我确实希望保留在映射工具中映射的可能性

有什么建议吗

亲切的问候
马丁带来


通过删除累积最大值并添加3个脚本functoid,以另一种方式进行计算,问题得以解决映射时间减少了40倍。

11MB,10000行,以前在200分钟内映射,现在在5分钟内映射

解决方案
一个脚本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>
一个脚本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,“Inline XSLT”和一个输出,使用变量用其值填充输出元素

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


通过删除累积最大值并添加3个脚本functoid,以另一种方式进行计算,问题得以解决映射时间减少了40倍。

11MB,10000行,以前在200分钟内映射,现在在5分钟内映射

解决方案
一个脚本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>
一个脚本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,“Inline XSLT”和一个输出,使用变量用其值填充输出元素

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


@Martin,你能把你的问题编辑得更清楚些吗?@Martin,你能把你的问题编辑得更清楚些吗?