如何查找SSRS tablix数据集中最常出现的值?
问题描述:
考虑以下是在SSRS报告显示在表矩阵数据集:如何查找SSRS tablix数据集中最常出现的值?
GroupID | ProductID
---------------------
Group 1 | Product1
Group 2 | Product10
Group 1 | Product2
Group 3 | Product27
Group 2 | Product12
Group 2 | Product14
我通过插入行/外线组加入新行 - 下面。
在此行我显示的行总数 - 通过CountRows(),不同的群体的数量来实现的 - 通过= CountDistinct实现(!字段GroupID.Value)
我也想显示该组的名称行数最多的情况下,在这种情况下,它将是“组2”(如果有多个具有相同行数的组,我只需要显示其中的一个)。
这是如何实现的?我想我应该使用一些聚合或查找功能,但目前为止无法弄清楚。
PS此报表正在从Crystal Reports移植到SSRS。在Crystal Reports中,通过N = 1的“N次最频繁”总结很容易实现,但据我所知,SSRS中没有这样的事情。
答
添加一个tablix并将GroupId
设置为Row Group。
的行数使用:
=Count(Fields!GroupID.Value)
右键单击行组窗格GroupID
组,去组属性,在过滤器选项卡使用以下设置:
对于Expression
使用:
=Count(Fields!GroupID.Value)
它将过滤行数最多的前1个组。其结果是这样的:
更新:如果有多于一组具有相同数量的occurencies的以前的解决方案是行不通的。
添加一个tablix,删除详细信息(默认组)并在第一列中添加GroupID字段。
对于行数列使用下面的表达式来替换DataSetName
通过数据集的实际名称:
=LookupSet(
Fields!GroupID.Value,
Fields!GroupID.Value,
Fields!GroupID.Value,
"DataSetName"
).Length
右键单击您的表矩阵和去Tablix属性,在Sorting
选项卡中选择Z to A
命令并使用Sort By
文本框中的上一个表达式。
它应该显示即使与相同数目的occurencies中的第二组是存在的唯一一组。
让我知道这是否有帮助。
是的,这有助于您,甚至不需要新Tablix中的“行数”列。然而,如果你有另外一个包含3个项目的组(比如说“组1”在这个数据集中也有3个项目),新的tablix将有2行 - “组1”和“组2”,我只想看到一个。我试图使用RowNumber()函数,但它不允许在过滤器中使用。 –
@JoeSchmoe,检查我的更新。 –
我决定使用你的第一个建议,并显示多个组,因为这似乎是更合适的解决方案。 –