一个棘手的问题

时间:2011-08-10 10:09:57

标签: reporting-services

我有ssrs report。有一个矩阵,有2个行组(从外到内):group - item和1列组:year。我希望它很容易理解。请参阅下面的“图片”。

Group         CAGR                  2010                        2011                                             

Group1        CAGR_group1     sum_group1_2010     sum_group1_2011
     Item1     CAGR_item1       sum_item1_2010       sum_item1_2011
     Item2     CAGR_item2       sum_item2_2010       sum_item2_2011

sum_group1_2010sum_group1_2011是每年的item1和item2的总和。 CAGR_item1CAGR_item2由这个fomular计算:

CAGR = (sum_item2_2011/sum_item2_2010)^(1/n) - 1 (n=2011-2010)

我在代码中创建了这个函数。计算每个项目的CAGR很简单。我使用了以下表达式:note首先参考2010年,在这种情况下最后参考2011年。

Code.CAGR(First(Fields!Amount.Value).ToString, Last(Fields!Amount.Value).ToString, Last(Fields!year.Value).ToString - First(Fields!year.Value).ToString)

现在的问题是如何计算CAGR_group1?我打算用

Code.CAGR(First(Sum(Fields!Amount.Value)).ToString, Last(Sum(Fields!Amount.Value)).ToString, Last(Fields!year.Value).ToString - First(Fields!year.Value).ToString).

然后SSRS报告不能在另一个聚合函数中使用聚合函数。

希望一切都清楚。感谢。

1 个答案:

答案 0 :(得分:0)

我认为最简单的方法是将计算添加到SQL查询中:它可能是现有查询中的新列,它会为每个记录(行)计算相同的值。然后在您的报告中使用FIRST函数。

或者,如果您向聚合函数添加适当的范围语句,例如FIRST(SUM(Fields!Amount.Value,“ItemGroupName”),“Group1GroupName”)

,这可能会有效。