有几种方法可以做到这一点,但我的选择是在数据集查询中添加一列,为每一行提供所需的评论。然后在报告中,我们只隐藏它的第一个副本以外的所有内容。
通过一个简单的例子来工作。我们有两个客户,“Dave”和“Bob”,他们有一些数字和日期。每条记录也有评论。
我们可以使用子查询来获取每个客户的最后一条评论,并将其附加到其他列,像这样......
这里我只是模拟了表@t中的一些数据,然后查询得到想要的结果。
DECLARE @t TABLE (client varchar(20), iVal int, sComment varchar(20), dtEntrySeq datetime)
INSERT INTO @t VALUES
('Dave', 5, '1st Dave comment', '2021-01-15 09:00:00'),
('Dave', 15, '2nd Dave comment', '2021-01-29 09:00:00'),
('Dave', 25, '3rd Dave comment', '2021-01-29 09:30:00'),
('Bob', 35, '1st Bob comment', '2021-01-01 09:00:00'),
('Bob', 45, '2nd Bob comment', '2021-01-02 09:00:00'),
('Bob', 55, '3rd Bob comment', '2021-01-03 09:00:00'),
('Bob', 65, '4th Bob comment', '2021-01-04 09:00:00'),
('Bob', 75, '5th Bob comment', '2021-01-06 09:00:00')
SELECT
a.*, lc.sComment as LastComment
FROM @t a
JOIN (
SELECT * FROM
(SELECT *, ROW_NUMBER() OVER(PARTITION BY client ORDER BY dtEntrySeq desc) as RowN FROM @t) r
WHERE r.RowN = 1
) lc on a.client = lc.client
这给了我们以下输出...
我们真的不需要日期和原始评论列,但为了清楚起见,我把它们留了下来。
现在是报告。
创建一个新报表,使用上面的 SQL 作为数据集查询。
接下来添加一个表格并将所需的列拖到表格控件中。创建一个按客户端分组的行组。
现在单击包含“最后一条评论”的文本框,然后在属性窗口中,将HideDuplicates 属性更改为行组的名称,在本例中它将被称为“客户端”。如果您在此处不使用行组,那么如果 Bob 和 Dave 的最后一个 cmets 相同,它将隐藏整个数据集的除第一个 cmets 之外的所有 cmets,而不是在每个客户端上重置。
这是正在构建的报告的快速 GIF 以及要演示的最终输出。