SSRS - If 语句使用计算值

SSRS - If statement using calculated values

我正在使用 SSRS 并制作了 "pivot table"。主元 table 有两个计算列,我想使用这些值来获得第三个值,即两个值之间的差值。

这是我的 table 的示例: *编辑:百分比是具有这些 row/column 属性的大约 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)

感谢任何帮助。谢谢

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

实际发生的是它任意选择每个组中的第一个 Log1 值并在表达式中使用它。换句话说,您将根据类别组第一行中的 Log1 获得所有行或 none 行的平均值。

作为旁注,在您的表达式中,您将 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. 在 table 的 A 列中引用这个新的计算字段。对 B 列重复上述步骤。

    =Avg(Fields!NewColA.Value)
    
  3. 求差:

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

换句话说,我们强制它逐行过滤值,然后聚合这些过滤值。