如何在SSRS中将多行转换为一行?

时间:2016-04-13 18:07:37

标签: reporting-services pivot grouping ssrs-2008-r2

我的MSSQL sql查询显示带有authcodes的Employee Hierarchy数据,如下所示

ManagerName     EmployeeName    AuthCode
Tim             Peter           csr2
Tim             Peter           sup
Tim             Peter           itil
Tim             Colt            csr2
Tim             Colt            sup

SSRS报告显示下面列出的结果,当我选择报告参数= Tim 时,结果只显示顶行而不是后续的AuthCodes,而查询显示所有

EmployeeName    AuthCode
Peter           csr2
Colt            csr2

我希望数据显示(它应该连接员工的authcodes):

EmployeeName    AuthCode
Peter           csr2, sup, itil
Colt            csr2, sup

有人可以建议我在SSRS中需要做什么,以便数据显示所有带逗号分隔值的authcodes?

2 个答案:

答案 0 :(得分:2)

这应该有效:

=JOIN(LOOKUPSET(Fields!EmployeeName.Value, Fields!EmployeeName.Value, Fields!AuthCode.Value, "DataSet1"), ", ")

LookupSet 根据EmployeeName获取所有AuthCodes。

JOIN 使用逗号分隔符将数组转换为字符串。

答案 1 :(得分:0)

除了汉诺威拳手的答案:
如果您需要与众不同的join + lookupset结果,则可以

转到报告的属性-> Code tab

在报表属性中添加一些VB代码(图1)

Public Shared Function RemoveDuplicates(m_Array As Object()) As String()

    System.Array.Sort(m_Array)
    Dim k As Integer = 0
    For i As Integer = 0 To m_Array.Length - 1
        If i > 0 AndAlso m_Array(i).Equals(m_Array(i - 1)) Then
            Continue For
        End If
        m_Array(k) = m_Array(i)
        k += 1
    Next

    Dim unique As [String]() = New [String](k - 1) {}
    System.Array.Copy(m_Array, 0, unique, 0, k)
    Return unique

End Function

并编辑单元格表达式:

=JOIN( Code.RemoveDuplicates( LOOKUPSET(Fields!EmployeeName.Value, Fields!EmployeeName.Value, Fields!AuthCode.Value, "DataSet1")), ", ")