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

SSRS 2018含离职人员的员工人数报表开发技术求助

员工人数报表(Headcount Report)开发指南(SSMS/SSRS 2018)

需求概述

需开发基于SSMS和SSRS 2018的员工人数报表,通过@DateFrom和@DateTo两个日期参数统计指定区间内的在职人员数量,规则如下:

  • 区间内当前在职的员工需纳入统计
  • 已离职但在区间内处于在职状态的员工也需纳入统计

数据集示例

ID      Name         ContractStart     ContractEnd       Department      status  
1       Bob Masters   2013-07-01       2013-07-23          ICT           Leaver
1       Bob Masters   2013-07-24       2018-01-02          BIT           Leaver
2       Kate Williams 2021-02-01       NULL                Stores        Active
3       Sam Power     2015-03-02       2016-05-01          ICT           Active
3       Sam Power     2016-05-02       2018-03-01          ICT           Active
3       Sam Power     2018-03-02       NULL                ICT           Active
4       Becky Smith   2021-09-10       NULL                Finance       Active
5       Debbie Glover 2019-11-11       2020-01-01          HR            Leaver
5       Debbie Glover 2020-06-07       2022-01-01          HR            Leaver 
6       Helen Stewart 2020-02-05       NULL                ICT           Active
6       Helen Stewart 2021-04-09       NULL                Stores        Active
7       Izzy Andrews  2017-06-10       2022-10-01          HR            Active 

关键统计规则

  • ID 6存在2份有效合同,需按2次统计
  • ID 7当前在职且合同结束日期在未来,需正常纳入统计

一、SSRS参数设置

  1. 打开SSRS报表项目,进入报表数据面板,右键点击「参数」选择「添加参数」
  2. 创建@DateFrom参数:
    • 名称:@DateFrom
    • 数据类型:Date/Time
    • 提示文本:起始日期
    • 可选默认值:=DateSerial(Year(Now()), Month(Now()), 1)(当月第一天)
  3. 创建@DateTo参数:
    • 名称:@DateTo
    • 数据类型:Date/Time
    • 提示文本:结束日期
    • 可选默认值:=Now()(当前日期)

二、统计逻辑与SQL实现

基础的WHERE date between @datefrom and @dateto无法满足需求,需判断合同时间段与参数区间是否存在重叠,核心逻辑如下:

核心过滤条件

合同在职时段与@DateFrom-@DateTo区间有交集,需同时满足:

  1. 合同开始日期 ≤ @DateTo(合同在区间结束前已启动)
  2. 合同结束日期 ≥ @DateFrom OR 合同结束日期为NULL(合同在区间开始后仍未结束,或当前在职)

完整SQL语句

-- 统计总人数
SELECT COUNT(*) AS TotalHeadcount
FROM YourTableName
WHERE 
    ContractStart <= @DateTo
    AND (ContractEnd >= @DateFrom OR ContractEnd IS NULL)

-- 按部门分组统计(可选)
SELECT 
    Department,
    COUNT(*) AS DepartmentHeadcount
FROM YourTableName
WHERE 
    ContractStart <= @DateTo
    AND (ContractEnd >= @DateFrom OR ContractEnd IS NULL)
GROUP BY Department

逻辑验证

  • ID 6的两份合同均满足ContractStart <= @DateTo且ContractEnd IS NULL,会被统计2次
  • ID 7的合同结束日期在未来,ContractEnd >= @DateFrom成立,会被正常统计
  • 已离职员工(如ID1、ID5)只要合同时段与参数区间重叠,就会被纳入统计

三、SSRS报表配置

  1. 在SSMS中测试上述SQL语句,确认结果正确后,将其作为SSRS报表的数据集
  2. 在报表设计界面添加表格或矩阵,绑定数据集字段(如TotalHeadcount或按部门分组的统计结果)
  3. 预览报表,通过选择@DateFrom和@DateTo验证统计结果是否符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:42:23