2013-07-07 125 views
1
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 

我正在计算投资贡献。 这是一个计算示例。SSRS小计和总计的嵌套总计错误

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% 

总内部收益率和总贡献始终是相等的

注意的贡献是各行ACB乘以总和ACB的然后通过各行IRR相乘。

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

内部收益率和内部收益率小计表达式(工作)

=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 

我认识错误的是与试图总结已经总结的价值有关,但这正是计算所要求的。

回答

1

根据您的描述,看起来好像您正在努力贡献分类级别,例如, 股票,固定收益

因此,制定总ACB查看详细行,当你需要总在特定分类范围锻炼。

考虑一些简化数据:

enter image description here

我称此数据集性能,并已构建了基于它的报告:

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,这也是我们所期望的。

如果需要贡献制定出总的所有分类,即总计,你必须在上面的表述改变"Classification""Performance"

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

+0

谢谢。我已在下面发布回复。 –

0

伊恩·普雷斯顿,

你的回答让我在正确的道路上,并非常接近让我总。解。因此我将其标记为正确。不过,我想添加一些额外的反馈。你是正确的,我需要指定由行级范围行可切换为不同的分类级别和被称为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

+1

很酷,感谢您的更新 - 很高兴看到它的帮助!不确定乘数;它确实取决于基础数据和报告分组的组合。所有我可以建议,如果你想进一步排除故障是添加调试列,显示所有的临时计算,即'Sum(Fields!ACB.Value,“Performance”)'并尝试看看是否有一个或多个看起来不正确,因此影响整体价值,然后相应更新。 –