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 

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

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。

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

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   

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

4

2 回答 2

1

根据您上面的描述,您似乎正在计算对分类级别的贡献,例如EquitiesFixed Income

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

考虑一些简化的数据:

在此处输入图像描述

我称这个 DataSet Performance并基于它构建了一个报告:

在此处输入图像描述

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

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

如果您需要计算Contribution to the total of all Classifications,即总计,则必须更改"Classification""Performance"上述表达式。

希望这可以帮助您获得所需的结果。

于 2013-07-07T14:07:30.367 回答
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

于 2013-07-08T00:08:01.593 回答