【问题标题】:How to get total of top 10 sales in SSRS 2012如何在 SSRS 2012 中获得前 10 名的总销售额
【发布时间】:2013-06-24 12:14:51
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    我们使用RunningValue函数来获取跑分排名和跑分总数。

    要获得组排名,请使用:

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

    获取运行总使用量:

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

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

    对于第二组详细信息行,使用以下 Row Visibility 表达式:

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

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

    这会根据需要向我们显示一共有行:

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

    评论后编辑:

    对于少于 N 个组但您仍想显示最后一个总数的情况,您需要在前 N 行 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 行显示

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

    【讨论】:

    • 您好伊恩,非常感谢您的回复。你的帖子真的很有帮助。只有一件事,在前 10 名实际上只有 5 个类别的情况下会发生什么?我有一个参数供应商,我想要他们销售的前 10 个类别。如果供应商只销售 5 个类别怎么办?行可见性表达式中应该包含什么。
    • 嗨,@BhupeshChouhan,我添加了更多细节。再说一次,因为我不知道你的数据,所以它比什么都更有代表性,但希望你能明白我要解释的内容。
    • @Ian,我有类似的问题,但我需要在报告中获取每个月的总计。所以我有 RowGroup 和 ColumnGroup:stackoverflow.com/questions/39154250/…
    • @IanPreston 谢谢。但是要显示前 2 个,可见性公式是否必须是: =IIf(RunningValue(Fields!grp.Value, CountDistinct, Nothing)
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 我的解决方案中的总数是前 10 个金额的总和。快速检查将有一个计算器来证明这一点。我的总数据集的总和超过 100 万,而前 10 的总和为 768。如果您过滤组而不是表,您将获得整个数据集的总数。但是,如果您按照我描述的那样在 tablix 级别进行过滤,您将获得所需的总数。
    • 嗨,mmarie,你的帖子实际上只给了我一张唱片。我重新创建了整个报告,只是为了确保定义中没有错误,但似乎它只包含一个数据。无论如何,感谢您对此进行调查。
    • 我猜这是由于我们的数据或组的差异。我的源查询是 SELECT SalesOrderID, TotalDue FROM Sales.SalesOrderHeader(使用 AdventureWorks 数据库)。我有两个组:Details 和 SalesOrderID。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2022-10-04
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      • 2021-04-25
      相关资源
      最近更新 更多