【问题标题】:Nested iif statements in SSRSSSRS 中的嵌套 iif 语句
【发布时间】:2017-08-17 15:57:50
【问题描述】:

我正在尝试在 SSRS 中编写一个嵌套的 iif 语句,它将数字(isnumeric)的 varchar 值转换为整数并保持文本不变。我还想确定单元格中的值是否为“0”,它将返回空白或“”。请参阅下面我使用的代码。任何关于为什么非数字文本显示为 #Error 的见解将不胜感激。谢谢!

=iif(
Fields!O1_Parent_Line_Item_ID.Value is "0", "", iif(ISNUMERIC(Fields!O1_Parent_Line_Item_ID.Value), CInt(Fields!O1_Parent_Line_Item_ID.Value), Fields!O1_Parent_Line_Item_ID.Value))

【问题讨论】:

  • 我认为is 的第一个条件是错误的。将此Fields!O1_Parent_Line_Item_ID.Value is "0", "" 更改为InStr(Fields!O1_Parent_Line_Item_ID.Value,"0") > 0, ""
  • 感谢您的评论 WEI_DBA。这有助于我澄清我不是在字符串中寻找“0”值以将整个字段返回为空白,但只有当“0”是单元格中的唯一值时才应返回空白。我希望这有助于澄清请求。
  • 你需要检查ISNUMERIC是否返回true,所以...ISNUMERIC(Fields!O1_Parent_Line_Item_ID.Value) = 1...
  • 感谢 bjones,但我仍然收到关于空白值的 #error。
  • 您能否展示示例数据以及您对IIF 声明的条件的期望?

标签: sql reporting-services visual-studio-2015 type-conversion conditional-operator


【解决方案1】:

使用SWITCH 语句代替嵌套的IIFs 并首先测试非数字。 SWITCH 语句在第一个返回 true 的表达式处停止。

=SWITCH (
    ISNUMERIC((Fields!O1_Parent_Line_Item_ID.Value), CInt(Fields!O1_Parent_Line_Item_ID.Value), 
    Fields!O1_Parent_Line_Item_ID.Value = "0", ""
    True, Fields!O1_Parent_Line_Item_ID.Value
    )

上述语句将依次测试每个表达式,直到找到返回 true 的表达式。因此,如果它是数字,则转换为int。如果它是“0”返回和空字符串。如果这两个都返回 false,那么最后一个表达式将始终返回 true,因此您将获得原始值。

请注意,0 数值将返回 0 而不是 "",因为它们显然是数字,所以第一个表达式会捕获它。

【讨论】:

    猜你喜欢
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多