【问题标题】:SSRS - If statement using calculated valuesSSRS - 使用计算值的 If 语句
【发布时间】:2018-06-20 22:19:28
【问题描述】:

我正在使用 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)

感谢任何帮助。谢谢

【问题讨论】:

  • 您是收到错误消息还是结果不正确?
  • #错误信息,我知道有问题..

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


【解决方案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)
    

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

【讨论】:

  • 谢谢!假设 ColA 和 ColB 已经在数据透视表中创建(它们是大约 40 个类别 1 值的平均值,Log1 = Begin 和 Log1 = End),有没有办法在步骤 3 中调用这些列?
  • @britt 抱歉,我不确定您的要求与我展示的内容有何不同。
猜你喜欢
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
相关资源
最近更新 更多