SSRS中如何为每个CommentCode仅选取第一条录入的评论?
实现方案
有两种常用的实现方式,你可以根据自己的操作习惯选择:
方案1:修改数据集查询(推荐)
直接在获取数据集的SQL语句里做过滤,从数据源层面就拿到每个CommentCode对应的最早评论,后续报表不需要额外处理,性能和稳定性都更好。
示例SQL逻辑如下:
WITH CommentRank AS ( SELECT CommentDateTime, CommentCode, Comment, CommentKey, -- 按CommentCode分组,按时间升序排序,编号1就是最早的评论 ROW_NUMBER() OVER (PARTITION BY CommentCode ORDER BY CommentDateTime ASC) AS rn FROM 你的表名 ) SELECT CommentDateTime, CommentCode, Comment, CommentKey FROM CommentRank WHERE rn = 1
把上面的你的表名替换成你实际的表名即可,如果你的数据集是从存储过程或者其他数据源来的,也可以参考这个窗口函数的逻辑做过滤。
方案2:SSRS报表层处理
如果你没办法修改数据源查询,也可以直接在报表里通过分组和过滤实现:
- 打开你的报表,在Tablix中按
CommentCode字段添加行组 - 右键点击刚添加的行组,选择「组属性」
- 切换到「筛选」页,添加筛选规则:
- 表达式:
=Min(Fields!CommentDateTime.Value, "你的行组名称") - 运算符:
= - 值:
=Fields!CommentDateTime.Value
- 表达式:
- 确认保存后,Tablix就只会显示每个CommentCode下时间最早的那条评论了
注意:如果存在同一个CommentCode下有完全相同CommentDateTime的多条评论,方案1会随机返回其中一条,你可以给ROW_NUMBER的ORDER BY后面再加一个排序字段(比如CommentKey)来固定返回规则。
内容的提问来源于stack exchange,提问作者user17482884
相关产品推荐
相关产品推荐

