【问题标题】:Issue Related to IIF Condition in SSRS Expression与 SSRS 表达式中的 IIF 条件相关的问题
【发布时间】:2015-03-18 09:31:43
【问题描述】:

我有带有 SSRS 报告的 ASP.NET MVC 应用程序..

我在表达式中编写了以下代码:

=iif(Fields!Aggr3.Value is nothing,"", iif(cStr(Fields!Aggr3.Value).IndexOf(".") >=0 , Format(Fields!Aggr3.Value,"C"),Fields!Aggr3.Value))

字段 Aggr3 包含动态值,它可以是“Null”或十进制值或整数值。 如果值为十进制,我想用 $ 货币对其进行格式化。否则,如果值是整数值,那么我想将其视为正常值。

所以我写了上面的表达式..但是在生成报告列值时显示#Error

我将 iif Condition 更改为 Switch 条件如下:

=Switch(IsNothing(Fields!Aggr2.Value), "", 
not IsNothing(Fields!Aggr2.Value),
Switch(cstr(Fields!Aggr2.Value).IndexOf(".") >=0,Format(Fields!Aggr2.Value,"C"),
cstr(Fields!Aggr2.Value).IndexOf(".") <0,Fields!Aggr2.Value))

但它也会引发错误..

什么是错误以及如何解决它??

谢谢

【问题讨论】:

    标签: c# asp.net-mvc reporting-services ssrs-2008


    【解决方案1】:

    您的问题是使用 .IndexOf 方法测试“。” - 这在用于空值时会导致错误。您应该改用 SSRS 函数 inStr(),如下所示:

    inStr(cStr(Fields!Aggr3.Value), ".") >=0
    

    这应该可以避免错误 - 我使用一些示例数据对此进行了测试,结果看起来不错。

    【讨论】:

      【解决方案2】:

      许多人对 IIF 的工作方式存在误解。在 IIF 中,无论第一个参数是真还是假,都会评估所有参数,因此在您的情况下,如果 Fields!Aggr3.Value 什么都不是,它仍然会评估表达式“iif(cStr(Fields!Aggr3.Value)。 IndexOf(".") >=0 , Format(Fields!Aggr3.Value,"C"),Fields!Aggr3.Value)",如果它试图评估这个表达式(当 Aggr3 是无效的)。请参阅这篇文章了解更多信息:http://softwarecafeblog.blogspot.com/2010/04/iff-statement-in-vbnet.html

      一个建议是将您的条件作为正常的“如果”放在报告代码中。有关如何添加报告代码的信息,请参阅本文https://msdn.microsoft.com/en-us/library/ms156028.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-28
        • 2015-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-20
        • 1970-01-01
        相关资源
        最近更新 更多