如何在SSRS中添加WHERE条件及计算病假工时占比?
嘿,我来帮你搞定这两个SSRS的问题:
1. 如何在SSRS中添加WHERE条件?
有两种常用的方式,你可以根据场景选择:
直接在数据集的SQL查询中添加
这是最高效的方式,能减少返回给报表的数据量。比如你要筛选特定部门的工时数据,直接在查询末尾加WHERE子句就行:SELECT EmployeeID, Name, Hours, billable FROM EmployeeWorkHours WHERE Department = 'Marketing'如果需要动态筛选,还可以结合报表参数,比如
WHERE Department = @SelectedDept。通过报表筛选器添加
要是不想修改底层查询,或者需要在报表层面灵活调整筛选规则,就用这种方式:- 右键点击目标数据集,选择「数据集属性」
- 切换到「筛选器」标签页,点击「添加」
- 设置筛选规则:比如字段选
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,直接在报表单元格里写表达式:
- 计算病假工时:在单元格中输入以下表达式
=SUM(IIF(Fields!billable.Value = "sick", Fields!Hours.Value, 0)) - 计算总工时:另一个单元格输入
=SUM(Fields!Hours.Value) - 计算占比:在目标单元格输入(同样处理总工时为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
相关产品推荐
相关产品推荐

