如何根据行组中的行号对 SSRS 中的列进行分组

How do I Group Columns in SSRS on Row Number within a Row Group

我正在尝试创建一个报告,为每个学生输出一行,并为他们的每个 类 输出一列。显而易见的方法是通过矩阵,但是我正在为列组的设置而苦苦挣扎——我需要输出到 运行,如下所示:

数据是每个学生和组一行,如下:

所以我想要的基本上是一个矩阵,其中列分组设置为类似 ="Group" & CStr(RowNumber("RowGroup"))

不幸的是,SSRS 不允许我这样做,因为 RowGroup 不包含列组。那么我怎样才能做到这一点呢?我想我可以在自定义代码中做一个 vb 哈希表,但这很烦人而且感觉很笨拙,所以我宁愿有一个更好的解决方案。

不幸的是,唯一的方法是返回到您的查询并插入一个新列以根据学生对组进行分组 ID/Name

例如,将新的 ROW_NUMBER 行添加到您的查询中,如下所示

SELECT
 StudentID,
 StudentName,
 GroupID,
 Row_Number() OVER (PARTITION BY StudentID ORDER BY StudentID) AS GroupNum
FROM @MyData

导入数据集时,它现在将具有 GroupNum 列,您可以如图所示设置矩阵

得到这个输出

我相当确定无法从 SSRS 中分配此组号

答案原来是使用 VB 自定义代码的脏哈希表。这插入了自定义代码:

Dim MyTable As New System.Collections.Hashtable()

Public Function GroupNumbers(ByVal LearnerID As Integer, ByVal GroupCode As String) As Integer

    If MyTable Is Nothing Then
        Dim MyTable As New System.Collections.Hashtable()
    End If

    If MyTable.ContainsKey(LearnerID) Then
        If MyTable(LearnerID).ContainsKey(GroupCode) Then
            Return MyTable(LearnerID)(GroupCode)
        Else
            MyTable(LearnerID).Add(GroupCode, MyTable(LearnerID).Count + 1)
            Return MyTable(LearnerID)(GroupCode)
        EndIf
    Else
        MyTable.Add(LearnerID, New System.Collections.Hashtable())
        MyTable(LearnerID).Add(GroupCode, 1)
        Return MyTable(LearnerID)(GroupCode)
    End If
End Function

这需要学习者编号,并且只是在散列表中针对该学习者的每个组存储递增的数字,然后为下一个学习者重置计数 - 它非常粗糙,但似乎工作正常。

只需调用代码;

="Group" & CStr(Code.GroupNumbers(Fields!Learner_ID.Value, Fields!Group_Code.Value))