SSRS小计和总计的嵌套聚合错误

时间:2013-07-07 00:22:22

标签: reporting-services dataset aggregate-functions

SQL Server 2012
Visual Studio 2010
Dataset being used is called Performance
Formulas
ACB = Average Capital Base
IRR = Internal Rate of return = Total Gain/ACB
Contribution = ACB/Sum(ACB)*IRR 

我正在尝试计算投资贡献。 这是一个示例计算。

Account Total Gain  ACB     IRR     Contribution
ABC     2,000.00    20,000  10%        6.67%
DEF     2,000.00    10,000  20%        6.67%
total   4,000.00    30,000  13.33%     13.33%

总IRR和总贡献总是相等

请注意,贡献是单个行ACB乘以ACB的总和再乘以单个行IRR。

我有以下报告。我的问题是由于嵌套聚合,我无法使小计和总计工作。我也不确定如何定位正确的数据范围。 report

IRR和IRR小计表达(工作)

=Fields!TotalGain.Value/Fields!ACB.Value
=Sum(Fields!TotalGain.Value)/Sum(Fields!ACB.Value)

report

尝试让贡献计算起作用(提供错误的数字)

=Fields!ACB.Value/Sum(Fields!ACB.Value, "Performance")*Fields!IRR.Value

report

试图获得贡献的小计和总数(尽管数字是错误的)

=sum(Fields!ACB.Value/Sum(Fields!ACB.Value, "Performance")*Fields!IRR.Value)

report

我收到此错误 report

Error   3   [rsInvalidNestedDataSetAggregate] The Value expression for the text box ‘Textbox29’ has a nested aggregate that specifies a dataset scope.  Inner aggregates cannot specify a dataset scope.    F:\Automater\SSRS\Reports_2012\PerformanceSample2.rdl   0   0   

我意识到错误与尝试对已经求和的值求和有关,但这是计算所要求的。

2 个答案:

答案 0 :(得分:1)

根据您的上述说明,您似乎正在制定贡献分类级别,例如股票固定收益

因此,在计算详细行的总 ACB 时,您需要计算特定分类范围内的总数。

考虑一些简化数据:

enter image description here

我已将此DataSet称为效果,并根据它构建了报告:

enter image description here

对于行级贡献,我使用了表达式:

=Fields!ACB.Value / Sum(Fields!ACB.Value, "Classification")
  * (Fields!TotalGain.Value / Fields!ACB.Value)

此处SUM表达式的范围是组级别。

对于小计,我使用了表达式:

=Sum(Fields!ACB.Value) / Sum(Fields!ACB.Value, "Classification")
  * (Sum(Fields!TotalGain.Value) / Sum(Fields!ACB.Value))

对我来说,这两个表达式似乎给出了预期的结果:

enter image description here

你会注意到,因为在组级别表达式Sum(Fields!ACB.Value)相当于Sum(Fields!ACB.Value, "Classification"),这实际上可以简化为Sum(Fields!TotalGain.Value) / Sum(Fields!ACB.Value),即IRR,这是我们所期望的也是。

如果您需要计算贡献总计所有 分类,即总计,您必须更改{在上述表达式中{1}}到"Classification"

希望这可以帮助您获得理想的结果。

答案 1 :(得分:0)

Ian Preston,

你的回答让我走上了正确的道路,并且非常接近让我达到总数。解。因此我将其标记为正确。但是我想添加一些额外的反馈。你是对的我需要按行级别范围指定行,可以为不同的分类级别切换,并称为 ClassificationMemberName

这是我的贡献行级公式

=Fields!ACB.Value/Sum(Fields!ACB.Value, "ClassificationMemberName")
* (Fields!TotalGain.Value/ fields!ACB.Value)

由于某种原因,我需要将该值乘以2以获得正确的结果?但是,这仅适用于资产级别的分类。如果我按总投资组合排序,则价值加倍。

=sum(Fields!ACB.Value, "ClassificationMemberName")/
Sum(Fields!ACB.Value, "Performance")
*
sum(Fields!TotalGain.Value, "ClassificationMemberName")/
 sum(fields!ACB.Value, "ClassificationMemberName")*2
如果你想看看我的意思,我附上了rdl。我非常感谢你的努力。

这是rdl

https://dl.dropboxusercontent.com/u/29851290/PerformanceSample2.rdl