You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSLT技术实现:统计员工唯一追溯周期行数并求和

XSLT统计追溯周期总行数解决方案

需求说明

  • 统计规则:XML中每个Report_Entry对应一名员工,其下Payroll_Result_Lines_within_Date_Range节点可能包含多个Retro_Prd_End(追溯周期结束日期),同一员工的相同日期仅计1次,最终求和所有员工的有效计数。
  • 示例验证:Mick(00001)计数0,Don(00002)计数1,Adam(00003)计数3,总计4。

错误代码分析

你尝试的两段代码均存在逻辑或路径问题:

  1. 第一段代码中,../Payroll_Result_Lines_within_Date_Range路径错误——上下文处于Report_Entry/Worker/ID节点,../仅回到Worker节点,无法定位到Report_Entry下的Payroll_Result_Lines_within_Date_Range;同时直接拼接员工ID和日期后去重,不符合“按员工分组去重日期再求和”的逻辑。
  2. 第二段代码逻辑错误:ID[distinct-values(...)]是筛选存在追溯日期的员工ID,统计的是有追溯记录的员工数量,而非所有去重后的日期总数。

正确实现代码

使用XSLT 2.0及以上版本的分组+求和逻辑,即可满足需求:

<xsl:variable name="CountERSRetroLines" select="
  sum(
    for $entry in Report_Data/Report_Entry
    return count(distinct-values($entry/Payroll_Result_Lines_within_Date_Range/Retro_Prd_End))
  )
"/>

代码逻辑说明

  1. 遍历所有Report_Entry节点(每个节点对应一名员工);
  2. 对每个员工下的Retro_Prd_End日期去重,统计该员工的有效追溯周期数量;
  3. 将所有员工的有效数量求和,得到最终统计值。

示例验证

  • Mick的Report_Entry无Retro_Prd_End节点,计数为0;
  • Don的Retro_Prd_End去重后剩1个,计数为1;
  • Adam的Retro_Prd_End去重后剩3个,计数为3;
  • 求和结果:0+1+3=4,完全匹配示例预期。

内容的提问来源于stack exchange,提问作者Chilly Pepper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:27:09