【问题标题】:RDLC expression resulting in #errorRDLC 表达式导致 #error
【发布时间】:2011-09-10 04:01:57
【问题描述】:

我有两个小数字段,利润和收入。它们显示在 tablix 控件中,每个都有自己的列。在第三列中,我想将利润除以收入。当这些字段中的任何一个为零时的结果是#error,我猜这是由于除以零。我想出了以下表达式来解决这个问题:

=iif(Cint(Fields!revenue.Value) = 0 orelse cint(Fields!profit.Value) = 0 ,"",FormatPercent(Fields!profit.Value / Fields!revenue.Value,2))

该表达式仍会导致#error。我做了一些测试并取出了表达式的错误部分。表达式如下所示:

=iif(Cint(Fields!revenue.Value) = 0 orelse cint(Fields!profit.Value) = 0 ,"No","Divide")

运行该表达式时,原来有 #error 的点现在显示“否”。这告诉我表达式的工作方式与我预期的一样,但是为什么当我在错误条件下添加除法时它会抛出#error。它不应该击中表达式的那一部分。任何帮助表示赞赏。我也尝试了一个 switch 语句,但结果是一样的。每当我在表达式中有除法时,它都会抛出#error。

【问题讨论】:

  • 只是想添加,别忘了在 Visual Studio 的调试输出窗口中查看。错误原因将显示在此处。

标签: sql visual-studio-2010 reporting-services reporting rdlc


【解决方案1】:

非常类似于: Reporting Services expression gives error in some circumstances

IIF 评估所有参数。如果任何一个参数产生错误,那么整个函数都会抛出一个错误,而不管这三个参数应该返回哪一个。

试试这个代码:

=iif(Cint(Fields!revenue.Value) = 0,"",FormatPercent(Fields!profit.Value / iif(Cint(Fields!revenue.Value) = 0, Fields!revenue.Value, 1 ),2))

这段代码有第二个 iif,它可以防止任何参数被零除。 (我将代码直接编辑到浏览器中:它可能需要稍作调整。另外,您确实应该使用单元格或占位符属性将格式设置为百分比,而不是您的表达式。)

【讨论】:

  • 谢谢。我不知道它评估表达式的两边。
  • 哇,我正要在同样的场景中拔掉头发。感谢您的信息!
  • 哇!!如果 M$ 能够解决这个问题,那就太好了,这样我们就不会花太多时间来寻找解决这个问题的方法。可笑!!!
  • 谢谢,负数有问题,我用Math.Abs((Sum(Fields!Amount.Value))解决了
【解决方案2】:

小心,

您似乎不能在报告 iif 表达式中使用不受支持的数据类型。

这是我所拥有的:

=IIf(Fields!MyNotSoComplexObject.Value is nothing, "No object", Fields!MyOtherField.Value )

当“MyNotSoComplexObject”为空时,一切正常,当它被赋值时,我有#error。

我通过尝试在报告中直接显示“MyNotSoComplexObject”发现了这一点。

我的工作是在我的数据集中放置一个布尔值,以验证“MyNotSoComplexObject”是否具有价值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 2021-04-17
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多