SSRS行汇总字段配置:如何将员工工时按日期列聚合为单行
实现SSRS报表员工一行、日期列展示工时的方案
这其实是SSRS里典型的**矩阵(Matrix)**应用场景,把原本按日期分行的结构转成动态日期列就能实现你要的效果,我给你一步步拆解操作:
核心思路
把原Tablix的Date行分组改成列分组,让不同日期作为表头列,每个员工仅保留一行,对应各日期的工时数据自动填充到对应列下。
具体操作步骤
方法1:转换现有Tablix(适合已有基础结构)
- 打开报表设计界面,选中你的Tablix控件,通过
视图 > 分组打开分组窗格(如果没显示的话)。 - 在行组区域找到
Date分组,右键选择「删除组」,弹窗里选「仅删除组」(保留数据行结构),此时行组就只剩Employee了。 - 在列组区域右键空白处,选择「添加组 > 父组」,选中
Date字段作为分组依据,确认后Tablix会自动生成动态日期列。 - 把工时字段(比如
Fields!Hours.Value)拖到新生成的日期列对应单元格,替换原有内容。
方法2:新建Matrix控件(更简洁高效)
- 在报表工具箱里找到Matrix控件,拖到报表画布上。
- 将
Employee字段拖到矩阵的「行组」区域,Date字段拖到「列组」区域,工时字段(比如Hours)拖到中间的数据区域。 - 此时矩阵会自动生成结构:左侧是员工列,顶部是动态日期列,中间填充对应员工在对应日期的工时数据。
优化细节
- 自定义日期列头格式:右键列组的
Date字段,选择「表达式」,输入=Format(Fields!Date.Value, "yyyy/MM/dd"),让列头显示为2020/7/16这类格式。 - 处理空工时数据:如果员工某天无工时,默认显示空白,可修改数据单元格表达式为
=IIF(IsNothing(Fields!Hours.Value), 0, Fields!Hours.Value),让空值显示为0。 - 筛选特定日期范围:若只想展示指定时间段的日期,右键列组的
Date分组,选择「组属性 > 筛选」,添加筛选条件(比如仅显示当月日期)。
效果验证
预览报表时,你会看到每个员工仅占一行,顶部是所有存在工时数据的日期列,对应单元格自动填充该员工当天的工时,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Developer Guy
相关产品推荐
相关产品推荐

