【问题标题】:SSRS Conditional SummingSSRS 条件求和
【发布时间】:2011-06-11 06:12:05
【问题描述】:

我有一个显示多页行的 SSRS 报告。在每一行中都有一个“TYPE”字段。在该 TYPE 字段中,有一个“M”代表值或一个“P”代表该值。在报告的最后,我想总结“P”类型的所有价格值。我试过这个,但它产生了一个#Error:

=Sum(iif(Fields!TYPE.Value = "P",Fields!EXT_QTY.Value * Fields!PRICE.Value ,0))

这是所有行的总和

=iif(Fields!PART_TYPE.Value = "P" ,  Sum(Fields!EXT_QTY.Value * Fields!PRICE.Value ),  0 )

我确信这是可行的。有任何想法吗?谢谢

【问题讨论】:

  • 为什么在这种情况下需要 CDbl?
  • 在 OP 的场景中 Sum(Fields!EXT_QTY.Value * Fields!PRICE.Value ) 正在生成具有 double 和/或 decimal 类型的数字,并且在 SSRS 中,当您执行 SUM 时,它期望 SUM 相似的类型并且 0 是整数。它因此而失败。因此,将 IIF 语句的真假部分转换为相同的数据类型即可解决错误。

标签: reporting-services conditional sum


【解决方案1】:

找到答案....

=SUM(IIF(Fields!PART_TYPE.Value ="P",CDbl(Fields!EXT_QTY.Value * Fields!PRICE.Value), CDbl(0.0)))

【讨论】:

    【解决方案2】:

    SUM 因类型比较而失败 - 您不能对不同类型的值求和,即表达式(可能是 Double)与 0、Integer。 MikeTWebb 的答案进行了显式类型转换以解决此错误。这对于这个特定的例子来说很好,是一个 Sum,但是如果你想要 Type 为 P 的值的平均值(Sum / Count),这不会产生准确的结果。那是因为 0 是一个值,并且会当您实际上希望从计算中排除这些值时,将其包含在平均计算中。

    另一种选择是使用Nothing 而不是0:

    =Sum(IIF(Fields!TYPE.Value = "P", Fields!EXT_QTY.Value * Fields!PRICE.Value, Nothing))
    

    这解决了类型比较错误而不需要显式类型转换,并且当您使用值是否存在对结果很重要的聚合时,这是一个更好的解决方案,例如Average

    【讨论】:

    • 这太完美了。我绝对认为由于像平均值这样的计算,使用 Nothing 是一种“经验法则”。
    • 耶!这正是我所需要的。仍然不明白谁认为“无”是 null 的一个很好的关键字。
    猜你喜欢
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    相关资源
    最近更新 更多