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

SSRS - Returning the average where date is 2015

我已经尝试解决这个问题一段时间了,只是找不到答案。

我在 SSRS 中有一个报告,其中一个列组分配给了 "Year",该列根据用户在 StartYear 中输入的参数进行扩展。如果用户输入“2013”​​,报告将提取从 2013 年到 2015 年的所有数据,这意味着将有 3 个同名列 ("Cost")。

当输入 StartYear 作为“2013”​​时,我的报告看起来像这样"Year" 下方的值显示 "Cost" 列:

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))

如有任何帮助,我们将不胜感激。

您需要这样的表达式:

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

如果您使用 IIf 表达式从数据集中获取子集,则必须将 Nothing 指定为表达式的 False 部分,否则你只会得到一堆包含在聚合中的零,从而扭曲结果。

这假定聚合 运行 在任何特定组范围之外 - 您始终可以向表达式添加 Scope 以确保您正在检查整个数据集:

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

评论后编辑

要扩展上面的范围注释,您可以在行组级别将聚合指定为 运行,方法是将行组名称作为参数添加到表达式中:

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

假设区域是行组的名称。