带有表达式的 s-s-rS 小计列
Posted
技术标签:
【中文标题】带有表达式的 s-s-rS 小计列【英文标题】:s-s-rS subtotalling columns with expressions 【发布时间】:2013-10-05 17:31:57 【问题描述】:使用 Visual Studio 2010 和 SQL Server 2012
我制作了一份 s-s-rS 报告,该报告需要使用自定义方法对资产百分比和从资产百分比派生的其他计算进行小计并得出总计。我不能简单地使用 Add Total 函数,因为它在求和表达式时是典型的灰显。我无法手动计算小计,因为出现嵌套聚合错误。
我用来制作此 s-s-rS 报告的软件提供了各种存储过程和函数,以使用派生计算制作报告。存储过程包含一个“资产百分比”列,但由于报表被过滤为仅显示普通股,因此“资产百分比”函数在其计算中仍然错误地计算未过滤的资产。考虑中的资产占总持股的 59.7%,但我需要报告表现得好像它们是持股的 100%。
要了解此报告中的一些数学知识,请查看以下报告输出。请注意,我想要的报告仅包括占上述总资产 59.7 百分比的普通股。
此报告表示当前正在不同报告程序中计算的所需输出。该报告有两个表格
% Company Sales 是一个硬编码值,表示国内或国际销售额的百分比。您可以在国际和国内表格中看到这个和 % 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-value-s-s-rs
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
【问题讨论】:
不尝试复制全部细节(因此现在只是作为评论发布)当你尝试=SUM(Fields!MarketValue.Value)/Sum(Fields!MarketValue.Value, "DataSet1")
而不是=SUM(Fields!MarketValue.Value/Sum(Fields!MarketValue.Value, "DataSet1"))
时会发生什么,看起来它有错误的语法 - 第一个应该我认为工作正常。
现在可以了,我只需要让总计工作。也感谢您对有关此报告的其他问题的帮助。
我发布的 VBA 代码适用于总计。现在报告正在工作;)
没问题 - 添加更多细节并作为答案添加。
【参考方案1】:
看起来像你的代码:
=SUM(Fields!MarketValue.Value/Sum(Fields!MarketValue.Value, "DataSet1"))
不太正确...试试这个:
=SUM(Fields!MarketValue.Value)/Sum(Fields!MarketValue.Value, "DataSet1")
稍微分解一下,第二段代码是expression
/expression
;现在它只是两个 SUM
表达式,它们根据需要具有不同的范围 - 第一个看起来语法略有偏差,因此您的错误。
【讨论】:
伊恩我说得太早了。总计尚未生效。如果针对普通股占投资组合 100% 的账户运行报告,它确实有效。但是当总数被过滤时,就会出现问题。有什么想法可以得出一个汇总所有小计的总计?我注意到一个问题是公司销售列中有 0。 将其标记为正确,但我可能需要再次发布以解决总问题。以上是关于带有表达式的 s-s-rS 小计列的主要内容,如果未能解决你的问题,请参考以下文章
小计上方的 SQL Reporting Services 水平线