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

如何在SSRS中添加WHERE条件及计算病假工时占比?

嘿,我来帮你搞定这两个SSRS的问题:

1. 如何在SSRS中添加WHERE条件?

有两种常用的方式,你可以根据场景选择:

  • 直接在数据集的SQL查询中添加
    这是最高效的方式,能减少返回给报表的数据量。比如你要筛选特定部门的工时数据,直接在查询末尾加WHERE子句就行:

    SELECT EmployeeID, Name, Hours, billable
    FROM EmployeeWorkHours
    WHERE Department = 'Marketing'
    

    如果需要动态筛选,还可以结合报表参数,比如WHERE Department = @SelectedDept。

  • 通过报表筛选器添加
    要是不想修改底层查询,或者需要在报表层面灵活调整筛选规则,就用这种方式:

    1. 右键点击目标数据集,选择「数据集属性」
    2. 切换到「筛选器」标签页,点击「添加」
    3. 设置筛选规则:比如字段选billable,运算符选In,值输入"internal", "billable", "sick"(如果只需要这三类数据)
      这种方式适合快速调整报表展示范围,不用改动SQL。
2. 计算病假工时占比的实现方法

你要的是「病假工时 / 所有工时(internal + billable + sick)」,这里给你两种可行的方案:

方案一:在SQL查询中预先计算

直接在数据集里算出需要的数值,报表里直接引用就行,性能更好:

SELECT 
  EmployeeID,
  -- 计算病假工时
  SUM(CASE WHEN billable = 'sick' THEN Hours ELSE 0 END) AS SickHours,
  -- 计算所有工时总和
  SUM(Hours) AS TotalHours,
  -- 计算占比,同时处理总工时为0的情况(避免除以0报错)
  CASE WHEN SUM(Hours) = 0 THEN 0.0 
       ELSE SUM(CASE WHEN billable = 'sick' THEN Hours ELSE 0 END) / SUM(Hours) 
  END AS SickRatio
FROM EmployeeWorkHours
GROUP BY EmployeeID

之后在报表表格里拖入SickRatio字段,右键设置单元格格式为「百分比」就搞定了。

方案二:在SSRS报表中用表达式计算

如果不想修改SQL,直接在报表单元格里写表达式:

  1. 计算病假工时:在单元格中输入以下表达式
    =SUM(IIF(Fields!billable.Value = "sick", Fields!Hours.Value, 0))
    
  2. 计算总工时:另一个单元格输入
    =SUM(Fields!Hours.Value)
    
  3. 计算占比:在目标单元格输入(同样处理总工时为0的情况)
    =IIF(SUM(Fields!Hours.Value) = 0, 0, SUM(IIF(Fields!billable.Value = "sick", Fields!Hours.Value, 0)) / SUM(Fields!Hours.Value))
    
    最后右键这个单元格,选择「文本框属性」->「数字」,设置为百分比格式,调整小数位数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:04:28