1

嗨,我需要你的建议,

1)我有一个动态字符串,每次都会改变。

例如,今天字符串将是"ItemA,ItemB,ItemC",明天它将是"itemA,ItemB"唯一的。

2) 我有一个 SSRS 报告,它有 3 列

3)我想拆分这个字符串"ItemA,ItemB,ItemC",并希望在 ssrs 表的这 3 列中显示拆分子字符串。分隔符是","(逗号)

4)我用过

=Split("ItemA,ItemB,ItemC",",").GetValue(0) in the first column of the report 

=Split("ItemA,ItemB,ItemC",",").GetValue(1) in the second column of the report

=Split("ItemA,ItemB,ItemC",",").GetValue(2) in the third column of the report

5)一切正常,直到我的字符串是"ItemA,ItemB,ItemC"

但是当我在第三列中"ItemA,ItemB"看到我的字符串更改时。"#Error"

我理解了这个错误,因为

=Split("ItemA,ItemB,ItemC",",").GetValue(2)我们没有任何值,因为在应用 split 函数后字符串现在只有 2 个值。

有什么办法可以避免#Error在第三列中。

注意:我必须在 ssrs 报告中强制使用 3 列。

我曾尝试=Replace(Split("ItemA,ItemB",",").GetValue(2),"#Error","NULL") 在第三列中使用,但这也行不通。

4

3 回答 3

3

这类似于使用 IIF 语句中的除零问题。问题是 IIF 不是表达式,它是一个具有三个参数的函数:

IIF(Condition, ValueIfTrue, ValueIfFalse)

因此,所有参数在传递给函数之前都会被评估,这会导致错误,因为即使条件应该意味着它不是,仍然会评估错误的表达式。

我看不到使用通常的解决方法来解决除以零情况下的问题的方法。我们需要的是一种没有这个问题的真正的语言。幸运的是,这可以通过自定义代码的形式获得。

请执行下列操作:

  • 右键单击没有报表对象的报表表面区域
  • 选择报告属性
  • 单击代码选项卡
  • 插入以下代码:

    Public Function ExtractCode(Combined As String, Position As Integer) As String
        if (Split(Combined, ",").Length >= Position) Then
            Return Split(Combined, ",").GetValue(Position-1)
        Else
            Return ""
        End If
    End Function
    
  • 单击确定并返回报告

  • 右键单击要在其中使用表达式的单元格,然后单击表达式
  • 插入以下表达式:

    =Code.ExtractCode(Fields!Combo.Value, 3)
    

值 3 是您要从 Combo 字段中提取的“列”,因此要获取第二个“列”,您将使用 2。如果该位置没有列,则返回一个空字符串。

于 2012-10-24T07:17:50.997 回答
0

如果名称返回错误,您可以将第三列的可见性更改为隐藏

于 2014-03-07T19:52:56.110 回答
0

您可以附加一个虚拟元素,然后拆分:

yourText = "ItemA,ItemB"

item0 = Split(yourText & ",", ",").GetValue(0)
item1 = Split(yourText & ",", ",").GetValue(1)
item2 = Split(yourText & ",", ",").GetValue(2)

item0 = ItemA
item1 = ItemB
item2 = 
于 2017-12-19T10:58:28.850 回答