在 SSRS 中使用拆分功能时在某些字段中出现“#ERROR”

Getting "#ERROR" in certain fields when using Split function in SSRS

我正在使用拆分函数来分隔包含两个街道地址的列。

信息以,分隔。

有些行只有一个地址与之关联。

在我的街道地址 2 的那些行中,当我希望它是 null.

时,我得到 #ERROR

我已经为表达式尝试了 IIF() 语句,但我遇到了问题。

Split(Fields!Street.Value, ",").GetValue(2)

与 If 语句不同,IIf 语句计算所有代码路径,即使只使用一个代码路径也是如此。这意味着未使用的代码路径中的错误会冒泡到 IIf 语句中的错误,从而阻止它正确执行。

要解决此问题,您需要使用在没有任何内容可拆分时不会抛出错误的函数。

下面是一个代码示例,可以满足您的要求:

=IIf(
InStr(
    InStr(
        Parameters!Street.Value
        , ","
        ) + 1
    , 
    Parameters!Street.Value
    , ","
    ) = 0
, Nothing
, Right(
    Parameters!Street.Value
    , Parameters!Street.Value.ToString().Length - (
        InStr(
            InStr(
                Parameters!Street.Value
                , ","
                ) + 1
            , 
            Parameters!Street.Value
            , ","
            )
        )
    )
)

我们来分解一下。

我结合使用了 InStr()、Right()、Length() 和 IIf() 函数来拆分字符串而不引发错误。

InStr() 用于查找字符串“,”在地址中的位置。如果找不到字符串,这 returns 0 而不是错误。

InStr(Parameters!Street.Value, ",")

由于您似乎在寻找拆分函数中的第二个逗号,因此您需要嵌套 InStr 函数。使用第一个逗号的位置作为开始位置来搜索第二个逗号。不要忘记 +1,否则您会再次找到第一个逗号。

InStr(InStr(Parameters!Street.Value, ",") + 1, Parameters!Street.Value, ",")

现在即使不存在逗号,您也可以找到第二个逗号而不会引发错误。

根据第二个逗号的位置,使用 Right() 函数抓取第二个逗号右侧的所有字符。由于 Right() 需要知道从结尾而不是从开头算起有多少个字符,因此您需要从字符串的 Length() 中减去逗号的位置。这有效地在逗号处拆分了字符串。

Right(
    Parameters!Street.Value
    , Parameters!Street.Value.ToString().Length - (
        InStr(InStr(Parameters!Street.Value, ",") + 1, Parameters!Street.Value, ","))
    )
)

如果您有 2 个以上的逗号,您可以通过 Left() 函数查找第三个逗号的位置,从而只获取第二个和第三个逗号之间的字符串。

如果没有第二个逗号,现在您可以使用 IIf() 函数 return NULL(无)。顶部的函数显示了这一切是如何组合在一起的。

这可以通过使用函数来清理,但提供的代码向您展示了如何完成。

(为每个地址使用自定义函数。
改编自:Split String

     Public Function GetAddress1(ByVal a as String)
            Dim b() as string
            b=Split(a,",")
            Dim str_1(b.Length) As String
            Dim i As Integer
            For i = 0 To b.Length - 1
                str_1(i) = b(i).Split(",")(0)
            Next
       return str_1
    End Function

    Public Function GetAddress2 (ByVal a as String)
         Dim b() as string
         b=Split(a,",")
         Dim str_1(b.Length) As String
         Dim i As Integer
         For i = 0 To b.Length - 1
              str_1(i) = b(i).Split(",")(1)
         Next
        return str_1
End Function