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

基于SSRS FetchXML计算CRM 365两日期间排除周末的天数

D365 Online 自定义报表:计算排除周末与假期的日期差实现思路

针对你的需求,核心思路是结合数据预处理或报表端表达式逻辑——因为FetchXML本身不支持复杂的日期排除计算,下面分两种可行方案说明:

方案一:预处理计算(推荐,报表端更简洁)

直接在Dynamics 365中提前算出目标天数,报表只需读取结果即可:

  • 步骤1:创建一个只读数字字段(命名如WorkingDays),用于存储最终计算结果
  • 步骤2:用实时工作流或插件实现计算逻辑,在StartDate或EndDate字段更新时触发:
    1. 计算两个日期的总天数差:DATEDIFF(startDate, endDate, Day)
    2. 扣除周末天数:
      • 先算总周数:RoundDown(DATEDIFF(startDate, endDate, Day)/7, 0),每周贡献2天周末
      • 再调整首尾日期:如果起始日是周日则减1,结束日是周六则减1(D365中Weekday返回值:1=周日,7=周六)
    3. 扣除假期天数:查询标准假期表,统计日期落在[startDate, endDate]区间内的记录总数
    4. 最终结果 = 总天数差 - 周末天数 - 假期天数,写入WorkingDays字段

方案二:报表端直接计算(适合临时报表,无需修改实体)

如果不想改动D365实体结构,可在报表(如SSRS)中通过表达式+FetchXML数据拉取实现:

  • 步骤1:用FetchXML拉取主实体的StartDate、EndDate,同时通过link-entity关联假期表,过滤出日期在两个目标日期之间的假期记录
  • 步骤2:在报表文本框的表达式中编写VB逻辑:
    1. 计算总天数差:DateDiff("d", Fields!StartDate.Value, Fields!EndDate.Value)
    2. 计算周末天数:
      Dim totalWeeks As Integer = DateDiff("ww", Fields!StartDate.Value, Fields!EndDate.Value, FirstDayOfWeek.Sunday)
      Dim weekendDays As Integer = totalWeeks * 2
      ' 修正首尾日期的周末计数
      If Weekday(Fields!StartDate.Value, FirstDayOfWeek.Sunday) = 1 Then weekendDays -= 1
      If Weekday(Fields!EndDate.Value, FirstDayOfWeek.Sunday) = 7 Then weekendDays -= 1
      
    3. 计算假期天数:用LookupSet或聚合函数统计当前记录关联的假期数量
    4. 最终天数 = 总天数差 - 周末天数 - 假期天数

关键注意点

  • 假期表需包含明确的日期字段,且确保数据覆盖需要计算的日期范围
  • 跨年度的日期计算要保证假期表有对应年份的假期数据
  • 预处理方案中,工作流/插件需处理日期为空的边界情况,避免计算错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:35:23