使用Visual Studio 2010和SQL Server 2012
我制作了一份SSRS报告,该报告要求使用自定义方法进行小计,并获得资产百分比和从资产百分比得出的其他计算的总计。我不能简单地使用Add Total Function,因为它在表达式求和时是典型的灰色。我无法手动计算小计,因为我得到了嵌套聚合错误。
我用来制作此SSRS报告的软件提供了各种存储过程和函数,以使用派生计算生成报告。存储过程包含“资产百分比”列,但由于过滤了报表以仅显示普通库存,因此“资产”功能的百分比在计算中仍未正确计算未过滤的资产。正在考虑的资产占总持股量的59.7%,但我需要该报告表现得好像它们是100%的持股。
要了解本报告中的一些数学知识,请查看以下报告输出。请注意,我想要的报告只包括普通股,这些普通股构成了 59.7 所提及的总资产的百分比。
此报告表示当前在不同报告程序中计算的所需输出。该报告有两个表
%公司销售额是一个硬编码值,表示国内或国际销售额的百分比。您可以在国际和国内表格中看到此和%投资组合资产。
%投资组合资产的计算方法是将给定持股的资产百分比乘以硬编码公司的销售额。在第一个例子中,麦当劳的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
现在这是我的报告输出。它与我将要展示的设计布局略有不同,因为我在此预览示例中添加了列并更改了标题以用于解释目的。到目前为止,我只是想让国内表工作。一旦工作,我将建立国际表。我还有一些额外的colums用于排除故障。
我尝试了几种方法来计算投资组合资产。我可以得到单个行值是正确的但由于嵌套的聚合错误(使用数据范围时的求和和已经求和的表达式),我无法使用不同的方法使小计值正确。总计也很重要但是对于现在我只是想让小计工作。
以下是获取资产百分比的行详细信息值的一种方法。这用于计算的百分比列。如果没有嵌套聚合错误,此列将不允许我进行小计。
当我尝试使用以下表达式来获取小计时,我得到嵌套聚合错误
= SUM (字段!MarketValue.Value / Sum (字段!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字段,我可以小计并获得总计没有错误,但该值是过滤值,如果我将此过滤后的百分比乘以公司销售额,则该值仅为59.7 。
最后,我尝试使用自定义VBA代码来获取小计和总计。但是,这提供了计算百分比的运行总计,而不是SectorName组所需的小计。
以下是我在网上找到的VBA代码: http://social.msdn.microsoft.com/Forums/sqlserver/en-US/1d3c5ec1-89cb-4108-8637-ff434027b1ec/sum-an-expression-value-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
答案 0 :(得分:1)
看起来像你的代码:
=SUM(Fields!MarketValue.Value/Sum(Fields!MarketValue.Value, "DataSet1"))
不太正确...请改为尝试:
=SUM(Fields!MarketValue.Value)/Sum(Fields!MarketValue.Value, "DataSet1")
稍微分解,第二段代码为expression
/ expression
;现在它只是两个SUM
表达式,根据需要使用不同的范围 - 第一个看起来像语法略有偏差,因此你的错误。