使用 Visual Studio 2010 和 SQL Server 2012
我制作了一份 SSRS 报告,该报告需要一种自定义方法来小计并得出总资产百分比和从资产百分比派生的其他计算的总计。我不能简单地使用 Add Total 函数,因为它在求和表达式时是典型的灰显。我无法手动计算小计,因为我得到一个嵌套聚合错误。
我用来制作这个 SSRS 报告的软件提供了各种存储过程和函数来使用派生计算制作报告。存储过程包含一个“资产百分比”列,但由于报表被过滤为仅显示普通股,因此“资产百分比”函数在其计算中仍然错误地计算未过滤的资产。考虑中的资产占总持股的 59.7%,但我需要报告表现得好像它们是持股的 100%。
要了解本报告中的一些数学知识,请查看以下报告输出。请注意,我想要的报告仅包括占上述总资产59.7 % 的普通股。
此报告表示当前正在不同报告程序中计算的所需输出。该报告有两个表格
公司销售额百分比是一个硬编码值,表示国内或国际销售额的百分比。您可以在国际和国内表格中看到这个和 % Portfolio Assets。
投资组合资产百分比是通过将给定持有的资产百分比乘以硬编码的公司销售价值来计算的。在第一个示例中,麦当劳 2.1% 的投资组合资产为 6.6% * 32%。
如果只计算普通股(不包括现金),6.6% 是麦当劳在投资组合中所代表的资产百分比
McDonald's Value Total Portfolio Value %
4,950.00 / 73,919.50 = 6.6000%
国内/国际百分比细分
Total % Sales %Split Region
6.60% 32% 2.1% Domestic
6.60% 68% 4.5% International
现在这是我的报告输出。它与我将展示的设计布局略有不同,因为我在此预览示例中添加了列并更改了标题以进行说明。到目前为止,我只是想让国内表正常工作。一旦成功,我将建立国际表。我有一些额外的列用于故障排除。
我尝试了几种方法来计算投资组合资产。我可以使各个行的值正确,但由于嵌套聚合错误(使用数据范围时求和和已经求和的表达式),我无法使用不同的方法使小计值正确。总计也很重要,但对于现在我只是想让小计工作。
这是获取资产百分比的行详细信息值的一种方法。这用于计算的百分比列。此列不允许我在没有嵌套聚合错误的情况下进行小计。
当我尝试使用以下表达式来获取小计时,我得到了嵌套聚合错误
= SUM (Fields!MarketValue.Value/ Sum (Fields!MarketValue.Value, "DataSet1"))
ERROR Error 2 [rsInvalidNestedDataSetAggregate] The Value expression for the text box ‘Textbox39’ has a nested aggregate that specifies a dataset scope. Inner aggregates cannot specify a dataset scope.
如果使用存储过程中包含的 PercentAssets 字段,我可以小计并获得总计而不会出现错误,但该值是过滤后的值,如果我将此过滤后的百分比乘以公司销售额,则该值是错误的。
最后,我尝试使用自定义 VBA 代码来获取小计和总计。但是,这提供了计算百分比的运行总计,而不是我需要的 SectorName 组的小计。
这是我在网上找到的 VBA 代码:http: //social.msdn.microsoft.com/Forums/sqlserver/en-US/1d3c5ec1-89cb-4108-8637-ff434027b1ec/sum-an-expression -值-ssrs
Dim public nettotal as Double
Public Function Getvalue (ByVal subtotal AS Double) AS Double
nettotal = nettotal+ subtotal
return subtotal
End Function
Public Function Totalvalue()
return nettotal
End Function
部署的代码
总之,我需要将计算出的百分比列的值乘以公司销售额。我需要对这些计算的结果进行小计。
如果您查看信息技术部门分组,您可以看到原始报告正确地到达 32.8 作为小计。
我的报告错误地达到了 100%,因为这是计算百分比的运行总数。
这是原始rdl的链接
https://dl.dropboxusercontent.com/u/87501202/InternationalDomestic.rdl