SSRS-在组外的Tablix中使用Join()

时间:2019-02-07 13:14:12

标签: sql-server reporting-services reportbuilder

我正在将Microsoft SQL Server 2017与Reporting Services和Report Builder 2016一起使用。

我有一个看起来像这样的数据集:
DataSet example

我已经创建了一个Tablix,它按Name分组,并一次显示每个Name以及表中Name的计数。像这样:

  

4 x Foo
  2 x巴

现在,我想获取一个包含所有逗号分隔名称的文本(每个名称只有一次)和一个包含所有逗号分隔名称计数的文本。它应该看起来像这样:

  

Foo,Bar
  4,2

如何使用SSRS报表生成器?

我已经尝试过:

  • 在tablix中使用Join()(不起作用)
  • 使用列表而不是tablix(通常可以正常工作,但它会垂直而不是水平地重复这些项目)

2 个答案:

答案 0 :(得分:0)

使用内置功能,您可以将LookupSetJoin结合使用,如下所示:

=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")), ", ")