我一直试图解决这个问题一段时间,而且无法在任何地方找到答案。
我在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))
非常感谢任何帮助。
答案 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 是行组的名称。