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

如何计算两个日期区间内的员工平均人数?

日期区间内平均在职员工数计算方案

问题背景

现有日期表与Staffmaster表(一对多关系),Staffmaster包含员工唯一ID、入职日期(Current Employment: Start Date)、离职日期(End Date)。已实现单日/指定日期的在职员工数计算,需计算筛选日期区间内的平均在职员工数,原用首尾日期人数取平均的方法及自定义DAX未得到预期结果。

原方法核心问题

原方案仅取区间首尾两天的人数求平均,且Previous Staff的逻辑错误(筛选的是整个区间全程在职的员工,而非区间起始日的在职员工),忽略了区间内员工入职/离职带来的每日人数波动,无法反映真实平均水平。正确逻辑应为:区间内每日在职员工数之和 ÷ 区间总天数。

正确DAX实现步骤

1. 基础度量:单日在职员工数

先定义一个高效的单日在职员工数度量值,作为后续计算的基础:

在职员工数 = 
CALCULATE(
    DISTINCTCOUNT(STAFFMASTER[Unique Id]),
    -- 入职日期不晚于当前计算日期
    STAFFMASTER[Current Employment: Start Date] <= MAX('Date'[Date]),
    -- 未离职或离职日期晚于当前计算日期
    OR(ISBLANK(STAFFMASTER[End Date]), STAFFMASTER[End Date] > MAX('Date'[Date])),
    -- 解除日期表与入职日期的交叉筛选,避免关系干扰
    CROSSFILTER(STAFFMASTER[Current Employment: Start Date], 'Date'[Date], None)
)

2. 核心度量:区间平均在职员工数

基于上述基础度量,计算区间内每日人数总和并除以天数:

平均在职员工数 = 
VAR 区间总天数 = DATEDIFF(MIN('Date'[Date]), MAX('Date'[Date]), DAY) + 1
VAR 区间总在职人数 = 
    CALCULATE(
        [在职员工数],
        -- 保留筛选的日期区间范围
        ALLSELECTED('Date'),
        -- 对区间内每个日期单独计算在职人数后求和
        VALUES('Date'[Date])
    )
RETURN
    -- 安全除法,避免除数为0的错误
    DIVIDE(区间总在职人数, 区间总天数)

说明

  • ALLSELECTED('Date')确保计算范围是用户筛选的整个日期区间,不受其他上下文筛选影响
  • VALUES('Date'[Date])会遍历区间内的每一天,分别计算当日在职人数并自动求和
  • DATEDIFF(...) + 1是为了包含区间首尾两天(例如2022-10-31到今日,天数需加1)
  • DIVIDE函数会自动处理除数为0的异常情况(比如未选择日期区间时返回空白)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:33:36