【问题标题】:Expression in SSRS not working as expectedSSRS 中的表达式未按预期工作
【发布时间】:2013-08-14 15:47:10
【问题描述】:

我有一个 SSRS 报告,我想对一个字段的值求和,但前提是另一个字段的值等于 1,因为我已使报告为每一行输出一个行号。基本上,我试图将不同的值相加得出一个总数。截图如下。对于超过 1 件商品的订单,我收到错误消息。我用来计算 Ship Cost 的表达式(红色文本)如下

=SUM(IIF(Fields!RowNumber.Value = 1, Fields!WEIGHT.Value, 0))

但我收到了#Error。包含文本 #Error 的单元格应该是 $11.25。

【问题讨论】:

  • 你如何确保表达式只查看给定订单号的行?
  • 我相信报告中的分组涵盖了这一点,该行按订单号分组。为第二个订单显示了正确的值,因此它似乎正在查看给定的订单。
  • 它看起来像一个格式化问题。 Fields!Weight.Value 字段的数据类型是什么?试试这个=SUM(IIF(Fields!RowNumber.Value = 1, CDBL(Fields!WEIGHT.Value), 0.0))。如果这不起作用尝试=SUM(CDBL(Fields!WEIGHT.Value)),看看您是否仍然遇到错误并从那里解决问题。
  • 嗨@Anup Agrawal,你是正确的,因为这是一个数据转换问题。谢谢。

标签: sql-server reporting-services ssrs-2008 ssrs-expression


【解决方案1】:

我认为您很可能在聚合中遇到数据类型不匹配的情况; SSRS 无法处理此类 IIf/aggregate 表达式中的隐式转换。

在您的表达式中,0 将被视为 int,并假设 Fields!WEIGHT.Value 的基础数据类型是 decimaldouble,这将引发运行时错误 - 如果您在 BIDS 中预览,它实际上应该会显示错误。

要解决这个问题,您需要确保两个 IIf 结果具有相同的数据类型 - 类似于:

=SUM(IIF(Fields!RowNumber.Value = 1, Fields!WEIGHT.Value, 0.0))

=SUM(IIF(Fields!RowNumber.Value = 1, Fields!WEIGHT.Value, CDec(0)))

=SUM(IIF(Fields!RowNumber.Value = 1, Fields!WEIGHT.Value, CDbl(0)))

根据底层数据类型,您可能需要尝试几种组合,但希望其中一个示例能够正常工作,

【讨论】:

  • 嘿@Ian Preston,就是这样!这是一个数据转换问题。你给我的第二个陈述成功了。非常感谢,这么简单的问题让我发疯了。
【解决方案2】:

请看这里:http://www.bidn.com/forums/microsoft-business-intelligence/reporting-services/589/how-to-sum-at-group-level

如果您的组名为“Order#”,您的表达式应为:
=SUM(IIF(Fields!RowNumber.Value = 1, Fields!Weight.Value, 0),"Order#")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 2016-01-18
    • 2022-01-02
    相关资源
    最近更新 更多