SSRS - 返回日期为2015年的平均值

时间:2015-02-16 09:20:17

标签: reporting-services ssrs-2008 ssrs-2008-r2

我一直试图解决这个问题一段时间,而且无法在任何地方找到答案。

我在SSRS中有一个报告,其中一个列组已分配到" Year",此列会根据用户在StartYear中输入的参数进行扩展。如果用户输入" 2013"该报告将从2013年到2015年提取所有数据,这意味着有3列具有相同的名称("成本")。

在输入StartYear时,我的报告看起来像是这样的" 2013"价值低于"年"显示"成本"专栏:

Area | 2013 ("Year") | 2014 ("Year") | 2015 ("Year")
A    |     20        |      50       |      25
B    |     15        |      65       |      35
C    |     40        |      70       |      20

在构建报告之前,报告看起来像这样:

Area     |     [Year]
[Area]   |     [Cost]

我想在此报告中添加一列,显示平均值但仅适用于2015年。

这是我尝试过的,但是它会带回一行和全年的平均值:20,50和25而不是25,35和20:

=Sum(IIF(Fields!Year.Value = 2015, Avg(Fields!Cost.Value), 0))

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

你需要一个像这样的表达式:

=Avg(IIF(Fields!Year.Value = 2015, Fields!Cost.Value, Nothing))

如果您使用IIf表达式从DataSet获取子集,则必须将Nothing指定为表达式的 False 部分,否则您只需获取一个聚合中包含的一堆零,使结果倾斜。

这假设聚合在任何特定的组范围之外运行 - 您始终可以在表达式中添加范围以确保检查整个DataSet:

=Avg(IIF(Fields!Year.Value = 2015, Fields!Cost.Value, Nothing), "DataSet1")

在评论后修改

要扩展上面的Scope注释,您可以通过将Row Group名称作为参数添加到表达式来指定要在Row Group级别运行的聚合:

=Avg(IIF(Fields!Year.Value = 2015, Fields!Cost.Value, Nothing), "Area")

假设 Area 是行组的名称。