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。
我有以下报告。我的问题是由于嵌套聚合,我无法使小计和总计工作。我也不确定如何定位正确的数据范围。
IRR和IRR小计表达(工作)
=Fields!TotalGain.Value/Fields!ACB.Value
=Sum(Fields!TotalGain.Value)/Sum(Fields!ACB.Value)
尝试让贡献计算起作用(提供错误的数字)
=Fields!ACB.Value/Sum(Fields!ACB.Value, "Performance")*Fields!IRR.Value
试图获得贡献的小计和总数(尽管数字是错误的)
=sum(Fields!ACB.Value/Sum(Fields!ACB.Value, "Performance")*Fields!IRR.Value)
我收到此错误
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
我意识到错误与尝试对已经求和的值求和有关,但这是计算所要求的。
答案 0 :(得分:1)
根据您的上述说明,您似乎正在制定贡献到分类级别,例如股票,固定收益。
因此,在计算详细行的总 ACB 时,您需要计算特定分类范围内的总数。
考虑一些简化数据:
我已将此DataSet称为效果,并根据它构建了报告:
对于行级贡献,我使用了表达式:
=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))
对我来说,这两个表达式似乎给出了预期的结果:
你会注意到,因为在组级别表达式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