在 s-s-rS 矩阵报告中获取前 20 行,其余在第 21 行

Posted

技术标签:

【中文标题】在 s-s-rS 矩阵报告中获取前 20 行,其余在第 21 行【英文标题】:Getting top 20 rows and the rest in 21st row in an s-s-rS Matrix Report 【发布时间】:2017-02-06 13:22:48 【问题描述】:

我想要 s-s-rS 矩阵报告中的前 20 行,其余行应汇总到第 21 行,行名称硬编码为“其他”。

我创建了基于“Category_Name”的行分组和基于“Creation_Time”的列分组的 s-s-rS 矩阵报告。列组“Creation_Time”被格式化为以“M/yyyy”格式显示日期。我将每个分组的“Id_Number”聚合为 Count(Id_Number),我希望前 20 条记录按 count(Id_Number) 从高到低或降序排序。

我已经设置了可见性条件,如图所示:

我为“其他”行给出了以下表达式

=count(iif(RunningValue(Fields!Category_Name.Value,countdistinct,nothing)>20,Fields!Id_Number.Value,0)

但它没有用。我收到错误消息“无法将正在运行的函数指定为嵌套聚合”。

我之前曾尝试在 s-s-rS Row 分组上使用 TOP N 过滤器,它基于 count(Id_Number) 提供前 20 行。但是如果我们将“组总计”添加到行分组中,它将给出所有行的总数和不仅仅是前 20 行。我想到的逻辑是从所有行的总数中减去前 20 行的总数。但我无法获得前 20 行的总数。

我使用带有 2 个参数的基本 sql 查询,@Begin AND @End :

 SELECT Category_Name, Id_Number, Creation_Date
 FROM   Tbl
 WHERE  Creation_Date BETWEEN  @Begin AND @End

此报告的期望输出是这样的:

除了最后一行“Others”之外,我得到了所有想要的输出。

【问题讨论】:

您是从 SQL 查询中获取数据吗? 是的,从 mssql 查询中获取数据。 您需要在 SQL 而不是报表中处理此问题,使用row_number 和包装select。你能发布你的脚本吗? 【参考方案1】:

修改您的 sql 选择脚本以包含以下内容: CASE WHEN ROW_NUMBER() OVER (ORDER BY SUM(Id_Number)DESC) >20 then 'Top 20' else 'Others' End AS 'Type'

然后在您的报告中添加另一个按“type”=“others”过滤的单独 tablix

【讨论】:

以上是关于在 s-s-rS 矩阵报告中获取前 20 行,其余在第 21 行的主要内容,如果未能解决你的问题,请参考以下文章

s-s-rS 矩阵/Tablix

带有手动添加列的 s-s-rS 排序矩阵

s-s-rs 报告列未与标题对齐

s-s-rS 2005 矩阵报告 - 编辑总计

如何在矩阵s-s-rS中显示空行和列

s-s-rS 报告固定宽度和分栏