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

如何计算对象服务的唯一总天数?解决重复条目与日期重叠问题

计算对象服务状态的唯一作业天数解决方案

核心思路

要解决重复日期或重叠日期范围导致的天数多算问题,关键是将所有作业日期范围展开为单日记录,再对日期去重后统计数量,而非直接求和DaysOnJob列。以下是基于DAX的实现方案(适用于Power BI/Excel Power Pivot):

步骤1:创建基础日期表(如无)

如果数据模型中没有独立的日期表,先创建一个覆盖所有作业日期范围的日期表:

日期表 = CALENDAR(DATE(2020,1,1), DATE(2025,12,31))

可将该表与作业表通过日期字段建立关系(若用度量值实现,也可直接关联)。

步骤2:编写唯一作业天数度量值

单个ObjectCode的月度唯一天数

月度唯一作业天数 = 
VAR 选中月份 = SELECTEDVALUE('日期表'[月份])
VAR 当前对象 = SELECTEDVALUE('作业表'[ObjectCode])
-- 展开当前对象当月所有作业日期范围的单日记录
VAR 所有作业日期 = 
    GENERATE(
        FILTER('作业表', '作业表'[ObjectCode] = 当前对象 && MONTH('作业表'[开始日期]) = 选中月份),
        DATESBETWEEN('日期表'[日期], '作业表'[开始日期], '作业表'[结束日期])
    )
-- 对日期去重后统计数量
VAR 唯一日期 = DISTINCT(所有作业日期[日期])
RETURN COUNTROWS(唯一日期)

筛选范围内所有对象的总唯一天数

若需统计多个对象在选中月份的总唯一作业天数(不区分对象,仅统计所有服务过的天数),可调整度量值:

总唯一作业天数 = 
VAR 选中月份 = SELECTEDVALUE('日期表'[月份])
-- 展开所有筛选对象的作业日期范围
VAR 所有作业日期 = 
    GENERATE(
        FILTER('作业表', MONTH('作业表'[开始日期]) = 选中月份),
        DATESBETWEEN('日期表'[日期], '作业表'[开始日期], '作业表'[结束日期])
    )
VAR 唯一日期 = DISTINCT(所有作业日期[日期])
RETURN COUNTROWS(唯一日期)

方案说明

  • GENERATE函数会将每条作业记录的日期范围拆分成单个日期,彻底解决重叠日期或重复日期的统计问题;
  • DISTINCT确保同一天即使被多条记录覆盖,也仅统计一次;
  • 若通过切片器或报表级筛选指定月份,SELECTEDVALUE会自动获取当前选中的月份,无需手动配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:40:09