SSRS-如果语句使用计算值

时间:2018-06-20 22:19:29

标签: reporting-services ssrs-2008 ssrs-2012 ssrs-tablix

我正在使用SSRS,并制作了“数据透视表”。数据透视表有两个计算列,我想使用这些值来获取第三个值,两个值之间的差。

这是我的桌子的示例: *编辑:这些百分比是具有这些行/列属性的大约40个以上值的平均值* Category A B Difference 1 47% 57% B-A 2 45% 49% B-A 3 13% 73% B-A 4 27% 23% B-A Total 23% 34% B-A

每个百分比是A和B分组的类别的平均值。我需要一个函数来收集A的平均值,然后从该行的B的平均值中减去它。 到目前为止,我已经尝试了以下操作并导致错误:

=IIf(Fields!Log1.Value = "End", Avg(Fields!Log1.Value), Nothing) - IIf(Fields!Log1.Value = "Begin", Avg(Fields!Log1.Value), Nothing)

感谢您的帮助。谢谢

1 个答案:

答案 0 :(得分:1)

我认为这里的问题与您如何引用“类别”组中的Log1列有关。考虑一下数据在幕后的样子。在每个类别中,您都有要汇总的多行。某些行的Log1值可能不同。目的是获取具有特定Log1值的行的平均值。

实际上发生的是,它在每个组中任意选择第一个Log1值,并在表达式中使用该值。换句话说,您将基于类别组第一行中的Log1碰巧获得该组所有行的平均值,或者没有该行的任何行。

请注意,在您的表达式中,您将Log1称为文本字段,并且在Avg函数中,我假设这些实际上应该是两个不同的列,并且您尝试对A和B中的数字求平均值列。

我们实际上想要做的是检查每一行的Log1值,然后将这些值取平均值。所以,这是我的建议:

  1. 在数据集上创建两个计算字段。使用这样的表达式:

    =IIf(Fields!Log1.Value = "Begin", Fields!ColumnA.Value, Nothing)
    
    =IIf(Fields!Log1.Value = "End", Fields!ColumnB.Value, Nothing)
    
  2. 在表的A列中引用此新计算字段。重复B列。

    =Avg(Fields!NewColA.Value)
    
  3. 要获得与众不同:

    =Avg(Fields!NewColB.Value) - Avg(Fields!NewColA.Value)
    

换句话说,我们迫使它逐行过滤值,然后汇总这些过滤后的值。