SSRS表达式 - 昏迷后的换行符/换行值

时间:2018-03-19 07:57:55

标签: reporting-services ssrs-2008

其中一个文本框包含逗号分隔的值集,如下所示

1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,1234

现有产出:

1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,123  
4,1234,1234,1234,1234

预期产出:

1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,
1234,1234,1234,1234,1234

线应仅在昏迷值之后断开而不是打破值1234

我正在寻找实现这一目标的表达方式。 更改文本框大小不在范围内。

2 个答案:

答案 0 :(得分:0)

如果不假设逗号之间的值总是相同的长度,我相信你想要的东西是不可能的。

您的文字在某个值的“中间”中断,因为SSRS不知道您的逗号应该被视为中断字符,就像space一样。

因此,您的选项有限,取决于此文本框的用途。如果您只是想显示数据,那么您可以更少关注如何定义中断,但如果您需要在其他地方使用此数据,那么需要担心。

如果你需要通过复制和粘贴在其他地方使用这些数据而你绝对不能拥有这些空间,那么你运气不好。如果您不必在任何地方复制数据,则可以在逗号后面添加空格,以便在报告中获得所需的中断:

选项1 - 可见空格字符

使用replace将所有逗号字符与逗号和空格交换,该逗号和空格将显示在报告上。虽然这可能不符合美学要求,但至少很明显报告中发生了什么,不像选项2 ......

=replace(Fields!YourCol.Value, ",", ", ")

选项2 - 不可见空格字符

再次使用replace,但用逗号和Zero-Width Space字符交换逗号。虽然在报告设计中这一点很明显,但任何试图复制数据的人都可能会遇到问题,因为存在无法看到的字符。您可以通过选择他重新文本来看到这一点。当您按住shift并使用箭头键左右移动时,您会注意到需要额外按下才能在here之间进行操作。

您需要的unicode字符编号是8203,您可以将其与ChrW ssrs函数一起使用:

=replace(Fields!YourCol.Value, ",", "," & chrw(8203))

答案 1 :(得分:0)

另一种方法是通过一个函数将行拆分为单词然后将其分组 重新排列预定义大小的单词。

此函数接受两个参数,即要拆分的行和最大大小,并返回一个不超过的新行 最大尺寸,不会破坏文字。

Public Function splitlineaftercomma(byval line as string,linesize as integer)as string

dim words() as string=line.split(",") 
dim newlines() as string={""}
dim i as integer=0  
dim j as integer=0
for i=0 to words.length - 1
    if len(newline(j)+words(i)+",")>linesize then 'if the line is overflown create new line
        array.resize(newlines, newlines.length+1) 
        j+=1
    end if
    newlines(j)+=words(i)+"," 'add word plus comma to current line
next i
newlines(j)=newlines(j).trimend(",") ' remove last comma
return string.join(vbcrlf,newlines) 

结束功能

假设您的盒子大小为30个字符,那么您可以将该函数称为:

=Code.splitlineaftercomma(linetosplit,30)