如何在SSRS 2012中获得前十大销售额

时间:2013-06-24 12:14:51

标签: visual-studio-2012 reporting-services ssis ssas

我正在按照SSRS 2012中的产品类别分列销售量前十名。 我需要前10名的总数,但它显示了完整的总数。我不能在数据集级别上这样做,因为我需要报告中其他部分的完整数据集。我尝试了MSDNlink中给出的解决方案,但这也没有帮助。提前谢谢。

3 个答案:

答案 0 :(得分:17)

这种方法确实很有效。

您尚未了解数据/元数据的含义,但可以通过一个简单的示例来解释这些概念。请考虑以下数据:

enter image description here

我们将根据此进行简单报告,按grp列分组:

enter image description here

按总票数对组进行排序,从最高到最低:

enter image description here

要获得运行排名和运行总计,我们使用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个)时才显示该行。您可以根据需要更改该值。

这显示了我们需要的一行:

enter image description here

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

评论后修改:

对于少于N组但仍想显示最后总数的情况,您需要在前N行行可见性表达式中添加额外的检查,例如:

=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,它将显示最后一个组行。

它有点复杂,但它过去对我有用;根据您的数据和报告设置,您可能需要使用范围来使其在您的环境中正常工作。

答案 1 :(得分:7)

如果您只需要前10名而不是总计的总数,则可以按前N ProductCategory过滤表格,并按SalesVolume Z将您的ProductCategory组排序为A.

例如,我有一张销售订单和小计表。我显示前十名最高

top 10 sales

我按SalesOrderID组排序,按我的值(TotalDue)递减。然后我过滤了我的表,因此它只显示了前10个SalesOrderID。

enter image description here

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

答案 2 :(得分:0)

我想我发现了一种简单的方法。我有很多&#34; Sums&#34;在我的报告中,我无法理解你回答的方式。 我找到的方法是创建Details组的父组,并在Details之外添加一行。然后我隐藏了Detais组,并且总组刚刚完成了Sums,并且在组属性中只需要过滤最后的Sum前N行,并按Z排序为A Sum。 所有这些都运行良好,并在集团财产中完成!在Tablix中,只显示了3行或4行......