【发布时间】:2013-06-24 12:14:51
【问题描述】:
我在 SSRS 2012 中获得按产品类别分组的销量前 10 名。 我需要这些前 10 名的总数,但它显示了完整的总数。我无法在数据集级别执行此操作,因为我需要报告中其他部分的完整数据集。我尝试了MSDNlink 中给出的解决方案,但这也无济于事。提前致谢。
【问题讨论】:
标签: visual-studio-2012 reporting-services ssis ssas
我在 SSRS 2012 中获得按产品类别分组的销量前 10 名。 我需要这些前 10 名的总数,但它显示了完整的总数。我无法在数据集级别执行此操作,因为我需要报告中其他部分的完整数据集。我尝试了MSDNlink 中给出的解决方案,但这也无济于事。提前致谢。
【问题讨论】:
标签: visual-studio-2012 reporting-services ssis ssas
这种方法实际上效果很好。
您尚未对您的数据/元数据是什么样的有任何了解,但可以通过一个简单的示例来解释这些概念。考虑以下数据:
我们将在此基础上制作一个简单的报告,按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 名的总数而不是运行总数,您可以按前 N 个 ProductCategory 过滤您的表格,并按 SalesVolume Z 到 A 对您的 ProductCategory 组进行排序。
例如,我有一个销售订单和小计表。我展示了前 10 名的最高总数
我按 SalesOrderID 组按我的值降序排序 (TotalDue)。然后我过滤了我的表格,使其仅显示前 10 个 SalesOrderID。
如果你有很多数据,你可能需要看看它是如何执行的,因为我认为表过滤器是在运行时发生的。
【讨论】:
我想我找到了一个简单的方法来做到这一点。我的报告中有很多“总和”,我无法理解你的回答方式。 我发现的方法是创建详细信息组的父组并在详细信息之外添加一个总行。然后我隐藏了 Detais 组,总组只做了 Sums,在组属性中只需要过滤最后的 Sum 前 N 行,并按 Z 排序到 A 的 Sum。 所有这些工作都很好,并且是在 Group Properties 中完成的!在 tablix poperties 中只显示 3 或 4 行...
【讨论】: