【问题标题】:SSRS 2008- Dealing with division by NULL ValuesSSRS 2008-处理除以 NULL 值
【发布时间】:2014-02-08 11:33:19
【问题描述】:

我将 Field_A 除以 Field_B。但问题是有时 Field_A 为 NULL(没有任何值)。我该如何检查?

如果是 Null,我猜结果应该是 0 或 Null。

【问题讨论】:

    标签: ssrs-2008 reporting-services


    【解决方案1】:

    在表达式中使用 IIF(内联 If 语句):

    =IIF(<Condition>,<TruePart>,<FalsePart>)
    
    =IIF(Field_A Is Nothing OR Field_B = 0, 0, Field_A/Field_B)
    

    这样,您可以确保 Field_A 不为空且 Field_B 不为零,也可以避免除以零错误。

    【讨论】:

    • 如果 Field_B 有可能为 0,那么你应该避免这个答案。 SSRS IIF 不执行短路评估。 IIF 的所有部分都会针对任何输入进行评估,因此如果 Field_B 为 0,那么您将收到异常 #ERROR
    • 谢谢,它让我忘记了在除以零修复中工作。答案已被编辑。
    • 我没有看到这里应用了除以 0 修复 - 它应该在 / 之后,而不是之前,例如stackoverflow.com/a/19190408/1787137
    • IIF 条件检查 Field_B 的值为 0。如果 Field_B 为零,则不执行计算。相反,它返回 0。
    【解决方案2】:

    最简单的方法是简单地将一个非常小的值添加到潜在的空值/零值 所以:

    =IIF(Field_A 什么都不是 OR Field_B = 0, 0, Field_A/(Field_B + .000001))

    当值为 null 或零时,这仍然会为您提供 0,但会防止在分母为 null 或零时出现#error

    另外:请注意确保您的类型相同;这意味着,如果您的 Field_A 的数据类型是十进制或双精度,请确保将少量 .000001 转换为 CDec(.000001)

    我发现确保表达式中的所有类型都相同是避免#Error 消息的关键

    【讨论】:

      【解决方案3】:

      是的,我认为上面“Jammie F”的评论是正确的。如果字段 B 为 0,那么您将得到除以零错误。 你可以使用的是:-

      iif(Field_B=0,0,Field_A/Field_B)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-04
        相关资源
        最近更新 更多