9

我在 SSRS 2012 中按产品类别分组的销量前 10 名。我需要这些前 10 名的总数,但它显示了完整的总数。我无法在数据集级别执行此操作,因为我需要报告中其他部分的完整数据集。我尝试了MSDNlink中给出的解决方案,但这也没有帮助。提前致谢。

4

3 回答 3

17

这种方法实际上效果很好。

您还没有对您的数据/元数据是什么样的有任何想法,但是可以通过一个简单的示例来解释这些概念。考虑以下数据:

在此处输入图像描述

我们将在此基础上制作一个简单的报告,按grp列分组:

在此处输入图像描述

按总 val 从最高到最低对组进行排序:

在此处输入图像描述

为了获得运行排名和运行总数,我们使用RunningValue函数。

要获得组排名,请使用:

=RunningValue(Fields!grp.Value, CountDistinct, Nothing)

要获得运行总使用量:

=RunningValue(Fields!val.Value, Sum, Nothing)

最后,我们需要显示前 N 个值的总和;在这种情况下,我将显示前 2 个。

对于第二组详细信息行,使用以下行可见性表达式:

=IIf(RunningValue(Fields!grp.Value, CountDistinct, Nothing) = 2, false, true)

即只有当有两个组时才显示该行,即前2个。您可以根据需要更改该值。

这向我们显示了所需的总行:

在此处输入图像描述

您需要将这些概念应用于您的数据。如果您仍然遇到问题,我建议您尝试使用上述数据/代码复制我的结果,以确保您了解所涉及的所有概念。

评论后编辑:

对于少于 N 个组但您仍希望显示最后一个总数的情况,您需要在 Top N row Row Visibility表达式中添加一个额外的检查,例如:

=IIf(RunningValue(Fields!grp.Value, CountDistinct, Nothing) = 10
    or (RunningValue(Fields!grp.Value, CountDistinct, Nothing) = CountDistinct(Fields!grp.Value, "DataSet1") and CountDistinct(Fields!grp.Value, "DataSet1") < 10)
  , false
  , true)

所以现在表达式将显示第 10 行,或者如果 DataSet 中的组总数小于 10,它将显示最后一个组行。

这有点复杂,但过去对我有用;根据您的数据和报告设置,您可能需要稍微使用一下Scope以使其在您的环境中工作。

于 2013-06-24T13:41:01.400 回答
11

如果您只需要前 10 名的总数而不是运行总数,则可以按前 N 个 ProductCategory 过滤表,并按 SalesVolume Z 到 A 对 ProductCategory 组进行排序。

例如,我有一个销售订单和小计表。我正在展示前 10 名的最高总数

销量前 10 名

我按 SalesOrderID 组按我的值(TotalDue)降序排序。然后我过滤了我的表格,使其仅显示前 10 个 SalesOrderID。

在此处输入图像描述

如果你有很多数据,你可能需要看看它是如何执行的,因为我认为表过滤器是在运行时发生的。

于 2013-06-24T19:44:08.507 回答
0

我想我找到了一个简单的方法来做到这一点。我的报告中有很多“总和”,我无法理解你的回答方式。我发现的方法是创建详细信息组的父组并在详细信息之外添加一个总行。然后我隐藏了 Detais 组,总组只做了 Sums,在组属性中只需要过滤最后的 Sum 前 N 行,并按 Z 排序到 A 的 Sum。所有这些工作都很好,并且是在 Group Properties 中完成的!在 tablix poperties 中只显示 3 或 4 行...

于 2015-10-20T13:39:11.117 回答