我正在将Microsoft SQL Server 2017与Reporting Services和Report Builder 2016一起使用。
我已经创建了一个Tablix,它按Name分组,并一次显示每个Name以及表中Name的计数。像这样:
4 x Foo
2 x巴
现在,我想获取一个包含所有逗号分隔名称的文本(每个名称只有一次)和一个包含所有逗号分隔名称计数的文本。它应该看起来像这样:
Foo,Bar
4,2
如何使用SSRS报表生成器?
我已经尝试过:
答案 0 :(得分:0)
使用内置功能,您可以将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代码的示例,如果需要此功能,可以搜索或自行实现。
答案 1 :(得分:0)
您想要的代码是:
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")), ", ")