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

Reporting services 带SSRS小计和总计的嵌套聚合错误,reporting-services,dataset,aggregate-functions,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 总内部收益率和总贡献总是相等的 请注意,供款是单行ACB乘以ACB之和,

我正在计算投资贡献。 下面是一个计算示例

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 
总内部收益率和总贡献总是相等的

请注意,供款是单行ACB乘以ACB之和,然后乘以单行IRR

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

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

试图让贡献计算正常工作(得出错误的数字)

尝试获取贡献的小计和总数(尽管数字错误)

我得到这个错误


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

根据您上面的描述,您似乎在计算分类级别的贡献,例如股票、固定收益

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

考虑一些简化的数据:

我将此数据集称为性能数据集,并基于它构建了一个报告:

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

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   
=Fields!ACB.Value / Sum(Fields!ACB.Value, "Classification")
  * (Fields!TotalGain.Value / Fields!ACB.Value)
这里,
SUM
表达式的范围是组级别

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

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   
=Fields!ACB.Value / Sum(Fields!ACB.Value, "Classification")
  * (Fields!TotalGain.Value / Fields!ACB.Value)
对我来说,这两个表达似乎给出了预期的结果:

您会注意到,由于在组级表达式中,
Sum(Fields!ACB.Value)
相当于
Sum(Fields!ACB.Value,“分类”)
,因此这实际上可以简化为
Sum(Fields!TotalGain.Value)/Sum(Fields!ACB.Value)
,也就是我们所期望的IRR

如果您需要计算出所有分类总数的贡献,即总计,您必须将上述表达式中的
“分类”
更改为
“性能”


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

根据您的上述描述,您似乎在计算分类的贡献,例如股票、固定收益

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

考虑一些简化的数据:

我将此数据集称为性能数据集,并基于它构建了一个报告:

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

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   
=Fields!ACB.Value / Sum(Fields!ACB.Value, "Classification")
  * (Fields!TotalGain.Value / Fields!ACB.Value)
这里,
SUM
表达式的范围是组级别

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

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   
=Fields!ACB.Value / Sum(Fields!ACB.Value, "Classification")
  * (Fields!TotalGain.Value / Fields!ACB.Value)
对我来说,这两个表达似乎给出了预期的结果:

您会注意到,由于在组级表达式中,
Sum(Fields!ACB.Value)
相当于
Sum(Fields!ACB.Value,“分类”)
,因此这实际上可以简化为
Sum(Fields!TotalGain.Value)/Sum(Fields!ACB.Value)
,也就是我们所期望的IRR

如果您需要计算出所有分类总数的贡献,即总计,您必须将上述表达式中的
“分类”
更改为
“性能”

希望这能帮助你得到想要的结果。

Ian Preston

你的回答使我走上了正确的道路,而且很快就接近总数。解决方案因此,我已将其标记为正确。然而,我想补充一些额外的反馈。您是对的,我需要按行级别范围指定行,该范围可以为不同的分类级别进行切换,称为ClassificationMemberName

这是我的行级贡献公式

=Sum(Fields!ACB.Value) / Sum(Fields!ACB.Value, "Classification")
  * (Sum(Fields!TotalGain.Value) / Sum(Fields!ACB.Value))
出于小计的某些原因,我需要将该值乘以2才能得到正确的结果?但是,这仅适用于资产级别的分类。如果按总投资组合计算,我的价值是原来的两倍

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

这是rdl

伊恩·普雷斯顿

你的回答使我走上了正确的道路,而且很快就接近总数。解决方案因此,我已将其标记为正确。然而,我想补充一些额外的反馈。您是对的,我需要按行级别范围指定行,该范围可以为不同的分类级别进行切换,称为ClassificationMemberName

这是我的行级贡献公式

=Sum(Fields!ACB.Value) / Sum(Fields!ACB.Value, "Classification")
  * (Sum(Fields!TotalGain.Value) / Sum(Fields!ACB.Value))
出于小计的某些原因,我需要将该值乘以2才能得到正确的结果?但是,这仅适用于资产级别的分类。如果按总投资组合计算,我的价值是原来的两倍

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

这是rdl


谢谢。我已经在下面贴了回复。谢谢。我已经在下面发布了回复。很酷,谢谢你的更新-很高兴看到它有帮助!不确定乘数;这实际上取决于基础数据和报表分组的组合。如果您想进一步排除故障,我建议您添加显示所有临时计算的调试列,即
Sum(Fields!ACB.Value,“Performance”)
,并尝试查看其中一个或多个是否不正确,从而影响总体值,然后相应地更新。酷,谢谢你的更新-很高兴看到它的帮助!不确定乘数;这真的取决于组合