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

Kra*_*ous 8 ssas ssis reporting-services visual-studio-2012

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

Ian*_*ton 17

这种方法确实很有效.

您还没有知道您的数据/元数据是什么样的,但可以用一个简单的例子来解释这些概念.请考虑以下数据:

在此输入图像描述

我们将根据此列出一个简单的报告,按grp列分组:

在此输入图像描述

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

在此输入图像描述

为了获得运行等级和运行总计,我们使用RunningValue函数.

要获得团体排名,请使用:

=RunningValue(Fields!grp.Value, CountDistinct, Nothing)
Run Code Online (Sandbox Code Playgroud)

为了获得运行的总使用量:

=RunningValue(Fields!val.Value, Sum, Nothing)
Run Code Online (Sandbox Code Playgroud)

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

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

=IIf(RunningValue(Fields!grp.Value, CountDistinct, Nothing) = 2, false, true)
Run Code Online (Sandbox Code Playgroud)

也就是说,只有当有两个组(即前2个)时才显示此行.您可以根据需要更改该值.

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

在此输入图像描述

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

评论后编辑:

对于少于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)
Run Code Online (Sandbox Code Playgroud)

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

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


mma*_*rie 8

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

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

十大销售额

我按SalesOrderID组排序,按我的值(TotalDue)递减.然后我过滤了我的表,所以它只显示前10名SalesOrderID.

在此输入图像描述

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