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”)
,并尝试查看其中一个或多个是否不正确,从而影响总体值,然后相应地更新。酷,谢谢你的更新-很高兴看到它的帮助!不确定乘数;这真的取决于组合