SSRS报表查询需求:合并员工与审批人数据统计
解决SSRS中员工与审批人数据合并到同一行的问题
方法一:在SQL数据源层面处理(推荐)
直接从数据库查询时完成数据合并,效率更高,报表设计更简洁。假设业务表名为Documents,包含Staff(办理员工)、Approving_Person(审批人)、Status(文件状态,如“待审核”“在办”)字段,可使用以下SQL查询:
WITH CombinedData AS ( -- 统计员工作为办理人的在办文件数 SELECT Person = Staff, 办理中文件数 = COUNT(CASE WHEN Status = '在办' THEN 1 END), 待审核文件数 = 0 FROM Documents GROUP BY Staff UNION ALL -- 统计员工作为审批人的待审核文件数 SELECT Person = Approving_Person, 办理中文件数 = 0, 待审核文件数 = COUNT(CASE WHEN Status = '待审核' THEN 1 END) FROM Documents WHERE Approving_Person IS NOT NULL GROUP BY Approving_Person ) -- 汇总同一人员的所有数据 SELECT Person, 办理中文件数 = SUM(办理中文件数), 待审核文件数 = SUM(待审核文件数) FROM CombinedData GROUP BY Person ORDER BY Person;
该查询先分别统计每个人作为办理人和审批人的数据,再合并为一行,直接作为SSRS数据集即可。
方法二:在SSRS报表层面用表达式处理
若无法修改数据源,可在报表中通过表达式实现:
- 先创建包含所有人员的数据集(命名为
AllPersons),用于报表行组:
SELECT DISTINCT Staff AS Person FROM Documents UNION SELECT DISTINCT Approving_Person AS Person FROM Documents WHERE Approving_Person IS NOT NULL;
- 主报表表格行组基于
AllPersons的Person字段,添加两个数据列,使用以下表达式:
- 办理中文件数(统计该员工作为办理人的在办文件):
=SUM(IIF(Fields!Staff.Value = Fields!Person.Value AND Fields!Status.Value = "在办", 1, 0), "Documents") - 待审核文件数(统计该员工作为审批人的待审核文件):
注意:表达式末尾的=SUM(IIF(Fields!Approving_Person.Value = Fields!Person.Value AND Fields!Status.Value = "待审核", 1, 0), "Documents")"Documents"需替换为你的主数据集实际名称。
原表达式错误原因
你之前使用的=COUNT(IIF(Fields!Staff.Value <> Fields!Approving_Person.Value, Fields!Staff.Value, Nothing))逻辑偏差,它统计的是办理员工与审批人非同一人的记录数量,和需求的“待审核/在办文件数统计”完全不匹配,因此无法得到正确结果。
内容的提问来源于stack exchange,提问作者user23583489
相关产品推荐
相关产品推荐

