如何在SSRS tablix数据集中找到最常出现的值?

时间:2016-09-15 18:30:07

标签: sql-server reporting-services aggregate-functions

考虑在SSRS报告的tablix中显示的以下数据集:

GroupID  | ProductID
---------------------
Group 1  | Product1
Group 2  | Product10
Group 1  | Product2
Group 3  | Product27
Group 2  | Product12
Group 2  | Product14

我通过插入行/外部组添加了新行 - 下面。

在这一行中,我显示总行数 - 通过CountRows()实现,不同组的数量 - 通过= CountDistinct(Fields!GroupID.Value)实现

我还想显示具有最多行数的组的名称,在这种情况下,它将是“Group 2”(如果有多个具有相同行数的组,我只需要显示其中一个)。

如何实现这一目标?我想我应该使用一些聚合或查找函数,但到目前为止还无法弄清楚如何。

PS 此报告正在从Crystal Reports移植到SSRS。在Crystal Reports中,通过“N次最常见”的摘要很容易实现N = 1,但据我所知,在SSRS中没有这样的内容。

1 个答案:

答案 0 :(得分:1)

添加一个Tablix并将GroupId设置为Row Group。

enter image description here

对于行计数使用:

=Count(Fields!GroupID.Value)

右键单击“行组”窗格中的GroupID组,然后转到组属性,在“过滤器”选项卡中使用以下设置:

enter image description here

Expression使用:

=Count(Fields!GroupID.Value)

它将过滤具有最大行数的前1个组。结果是这样的:

enter image description here

更新:如果有多个具有相同发生次数的组,则上一个解决方案不起作用。

添加Tablix,删除详细信息(默认组)并在第一列中添加GroupID字段。

enter image description here

对于Rows Count列,使用以下表达式将DataSetName替换为数据集的实际名称:

 =LookupSet(
     Fields!GroupID.Value,
     Fields!GroupID.Value,
     Fields!GroupID.Value,
     "DataSetName"
 ).Length

右键单击您的Tablix并转到tablix属性,在Sorting标签中选择Z to A订单,然后使用Sort By文本框中的上一个表达式。

enter image description here

即使存在具有相同发生次数的第二组,也应显示唯一的一组。

如果有帮助,请告诉我。