SSRS - 使用join()方法一表矩阵内的组外

问题描述 投票:1回答:2

我使用的Microsoft SQL Server 2017报表服务和报表生成器2016年

我有一个数据集,它看起来像: DataSet example

我已经创建了一个组表矩阵的名称和每个名称一次,并在名称中的表计数显示。事情是这样的:

4×富 2个酒吧

现在,我想获得一个包含所有逗号分隔的名称的文本(每个名称仅一次),并包含所有文本逗号分隔的名称计数。它应该是这样的:

富,酒吧 4,2

这怎么可能使用SSRS报表生成器?

我已经尝试过:

  • 使用JOIN()内表矩阵(不工作)
  • 使用列表,而不是一个表矩阵(通常工作,但其水平和垂直不重复的项目)
sql-server reporting-services reportbuilder
2个回答
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代码,你可以搜索或者如果你需要这个功能实现自己的几个例子。


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")), ", ")
© www.soinside.com 2019 - 2024. All rights reserved.