如何基于具有多级分组的图表的子组筛选Sql Server Reporting Services(SSRS)中的TopN?

时间:2018-02-16 14:38:33

标签: sql-server reporting-services charts mdx

问:如何从Reporting Services图表中的多级分组中获取前N列,同时为顶级组保持正确的标签?

为了节省任何想要将TopN过滤器添加到图表中的单个分组的人的时间,并且已经通过问题的标题引导到此处,请参阅此处: -

How to: Add a Filter (Reporting Services)

Filter Equation Examples (Reporting Services)

我有一个更复杂的问题。我在图表,区域和单位中有两个类别组。 enter image description here

当我运行我的报告时,我会得到很多单位,但是我只想获得前3位单位级别(即排名前3位的最高列): - enter image description here

如果我在Area组级别应用TopN过滤器,我会按列总和获得前3个区域,这并非意外。

enter image description here

如果我在单元组级别应用TopN过滤器,那么我得到这种组的排列,请注意Blok_11中的5个项目现在变为3,因此TopN正在每个区域组内应用: -

enter image description here

如果我将一个Unit子组添加到我的Area组,如下所示,那么我得到正确的三列,但这些项目没有按轴标签中的Area分组: -

enter image description here

按区域分组不正确: -

enter image description here

我假设有一个正确的解决方案,或者是否有解决方法?

顺便说一句,我正在使用一个共享数据集,它在Tablix中用于显示数据集中的所有数据,因此没有机会对数据本身执行TopN。由于对报告交付时间的影响,我不愿意为图表添加第二个数据集。

1 个答案:

答案 0 :(得分:1)

在SQL-Server端,您可以使用带有SELECT子句的TOP查询和ORDER BY

SELECT TOP 3 SomeValue
FROM SomeTable
ORDER BY SomeValue

将返回三个最高值

您可以使用TOP()作为变量

发送计数器
DECLARE @Counter INT=3;
SELECT TOP (@Counter) SomeValue
FROM SomeTable
ORDER BY SomeValue

我使用内联表值函数作为数据源,并将计数器作为参数传递给此函数。