2012-10-19 129 views
1

嗨我需要你的意见,需要帮助SSRS分裂功能

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

例如今天的字符串将是"ItemA,ItemB,ItemC",明天它只会是"itemA,ItemB"

2)我有一个有3列

3)的SSRS报告中,我想拆分此字符串"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"工作正常(逗号),

但是当我的字符串会将TO "ItemA,ItemB"我看到"#Error"在第三栏。

我理解错误,对

=Split("ItemA,ItemB,ItemC",",").GetValue(2)我们没有任何价值,因为该字符串现在只有2分应用功能后,值。

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

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

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

+0

你提的问题是很难与每一个阅读换句话说,在ALLCAPS中的位,编号的位置不太合理,交互问题等等。如果你稍微编辑一下你的问题,回答它可能会更容易(也更愉快)。 – Jeroen

+0

如果只有两个元素,您可以简单地隐藏第三列。如果你在sql查询中捕获了这种情况,那么会更好,然后显示正确的列数。 – TTT

回答

1

这与使用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 
    
  • 点击确定d返回报告

  • 您希望在表达细胞右键单击,然后单击表达
  • 插入下面的表达式:

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

值3是“列“,你想从Combo字段中提取,以获得第二个”列“,你将使用2.如果在该位置没有列,则返回一个空字符串。

0

你可以在第三列的可见性改变为隐藏,如果名称返回错误

0

您可以附加一个虚设的元素,然后分裂:

yourText = "ItemA,ItemB" 

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

item0 = ItemA 
item1 = ItemB 
item2 =