需要有关SSRS SPLIT功能的帮助

时间:2012-10-19 22:25:07

标签: function reporting-services split

大家好我需要你的建议,

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)我们没有任何值,因为在应用拆分函数后,字符串现在只有2个值。

有没有办法可以避免在第三栏中#Error

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

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

3 个答案:

答案 0 :(得分:2)

这类似于使用IIF语句中的divide by zero issue。问题是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.如果该位置没有列,则返回空字符串

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以追加虚拟元素,然后拆分:

yourText = "ItemA,ItemB"

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

item0 = ItemA
item1 = ItemB
item2 =