我使用的Microsoft SQL Server 2017报表服务和报表生成器2016年
我已经创建了一个组表矩阵的名称和每个名称一次,并在名称中的表计数显示。事情是这样的:
4×富 2个酒吧
现在,我想获得一个包含所有逗号分隔的名称的文本(每个名称仅一次),并包含所有文本逗号分隔的名称计数。它应该是这样的:
富,酒吧 4,2
这怎么可能使用SSRS报表生成器?
我已经尝试过:
使用内置的功能,你可以结合LookupSet
,象这样Join
:
=Join(LookupSet(Fields!ID.Value, Fields!ID.Value, Fields!GRADE.Value, "DataSet1"), ", ")
希望这解释了如何使用Join
功能和宽慰你,这确实是可能的。这也不要紧,如果你使用一个表,数组或矩阵,或者如果你是一组或不在家。
然而,这不删除重复值或提供任何排序选项。为了做到这一点,你必须在报表属性中添加自定义功能。一旦你这样做,表达式应该是这样的:
=Join(Code.RemoveDuplicates(LookupSet(Fields!ID.Value, Fields!ID.Value, Fields!GRADE.Value, "DataSet1")), ", ")
这方面有VB代码,你可以搜索或者如果你需要这个功能实现自己的几个例子。
你想的代码是:
Public Shared Function RemoveDuplicates(ByVal items As Object()) As Object()
System.Array.Sort(items)
Dim k As Integer = 0
For i As Integer = 0 To items.Length - 1
If i > 0 AndAlso items(i).Equals(items(i - 1)) Then
Continue For
End If
items(k) = items(i)
k = k + 1
Next
Dim unique As[String]() = New[String](k - 1) {}
System.Array.Copy(items, 0, unique, 0, k)
Return unique
End Function
可以通过表达使用lookupset()
任一相关联的数据集或外部的区域中使用这一点。
对于外面,你可以使用:
=join(Code.RemoveDuplicates(lookupset(1,1, Fields!Name.Value, "DataSet1")), ", ")