SSRS 表达式 - 值中逗号后的第 break/new 行

SSRS Expression - Line break/new line after coma in value

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

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

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

我相当有信心,如果不假设逗号之间的值始终是相同的长度,那么您想要的是不可能的。

您的文本在值的 'middle' 处中断,因为 SSRS 不知道您的逗号应该被视为中断字符,就像 space.

因此,您的选择是有限的,并且取决于此文本框的用途。如果您只想显示数据,那么您不必担心中断是如何定义的,但如果您需要在其他地方使用此数据,您 do 需要担心。

如果您需要通过复制和粘贴在别处使用数据,而您绝对不能拥有 spaces,那您就太不走运了。如果您不必在任何地方复制数据,您有两个选择,您可以在逗号后简单地添加 spaces 以在报告中获得您想要的中断:

选项 1 - 可见 Space 字符

使用 replace 将所有逗号字符替换为逗号和 space,这将显示在报告中。虽然这在美学上可能并不理想,但至少报告中发生的事情很明显,与选项 2 不同...

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

选项 2 - Non-Visible Space 字符

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

你需要的unicode字符数是8203,你可以使用ChrW ssrs函数:

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

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

此函数接受两个参数,要拆分的行和最大大小以及 returns 新行断开以不超过 最大尺寸且不破坏文字。

Public 函数 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)