如何在SSRS报表中合并明细行以展示队列时间线?
SSRS队列进程时间线:垂直合并连续单元格方案
一、先搞定数据重塑(核心前提)
你完全可控输入数据,先把进程数据转换成按时间步展开+块标识的结构,确保同一进程的连续时间步记录有统一标识,同时标记块的跨度和当前位置。
假设原始进程数据是:
| 队列名称 | 进程ID | 进程描述 | 开始时间步 | 结束时间步 |
|---|---|---|---|---|
| Queue1 | P1 | 处理A | T1 | T3 |
| Queue1 | P2 | 处理B | T4 | T5 |
转换后目标数据结构(可通过SQL或ETL工具生成):
| 时间步 | 队列名称 | 进程ID | 进程描述 | 块ID(队列+进程ID) | 块总行数 | 块内行序号 |
|---|---|---|---|---|---|---|
| T1 | Queue1 | P1 | 处理A | Q1-P1 | 3 | 1 |
| T2 | Queue1 | P1 | 处理A | Q1-P1 | 3 | 2 |
| T3 | Queue1 | P1 | 处理A | Q1-P1 | 3 | 3 |
| T4 | Queue1 | P2 | 处理B | Q1-P2 | 2 | 1 |
| T5 | Queue1 | P2 | 处理B | Q1-P2 | 2 | 2 |
关键规则:同一进程的所有时间步记录用同一个
块ID,块总行数是该进程覆盖的时间步数,块内行序号从1开始递增。数据必须按队列名称→块ID→时间步排序,保证同一进程的行连续。
二、SSRS报表设置步骤
创建表格/矩阵
- 行组基于
时间步,按时间顺序排序(建议把T1/T2转成数字1/2作为排序依据,避免字符串排序乱序)。 - 列组基于
队列名称,按需求排序。
- 行组基于
设置单元格合并与可见性
选中对应队列列的数据单元格,调整以下属性:- 跨行合并(RowSpan):设置表达式为
=Fields!块总行数.Value,让进程块的第一行单元格跨对应行数显示。 - 可见性:设置表达式为
=IIF(Fields!块内行序号.Value > 1, True, False),隐藏进程块中除第一行外的其他单元格。 - 单元格内容:直接绑定
进程描述字段,后续可替换为你需要的文本。
- 跨行合并(RowSpan):设置表达式为
验证调整
预览报表,检查同一队列内的连续进程是否正确合并单元格。如果出现合并错位,先排查数据是否按要求排序,或块总行数计算是否正确。
三、特殊场景处理
如果同一队列同一时间步存在多个并行进程,可修改单元格内容表达式为:
=Join(LookupSet(Fields!时间步.Value & Fields!队列名称.Value, Fields!时间步.Value & Fields!队列名称.Value, Fields!进程描述.Value, "数据集名称"), vbCrLf)
实现同一单元格内换行显示多个进程,同时保持跨行合并逻辑不变。
内容的提问来源于stack exchange,提问作者AFriendOfJamis
相关产品推荐
相关产品推荐

