如何使用 SSRS 中的 LookUpSet 对 Join 函数中的值进行排序?

How to sort values in a Join function with LookUpSet in SSRS?

如何对从 Join 函数中的 LookUpSet 函数返回的值进行排序?

示例数据:

TransNo     MasterTran    Item    Category    ModifierLevel
1001000     1001000       ItemA   CategoryB   0
1002000     1001000       ItemB   CategoryC   1
1003000     1001000       ItemC   CategoryC   1

我想得到的最终结果是 "CategoryB ItemB ItemC"。当我使用以下 Join 和 LookUpSet 组合时,我最终得到 "ItemB CategoryB ItemC".

=Join(LookUpSet(Fields!MasterTransNo.Value, Fields!MasterTransNo.Value, Iif(Fields!ModifierLevel.Value > 0, Trim(Fields!ItemDescription.Value), Trim(Fields!CategoryDescription.Value)), "LineItemDetails"), " ")

这是 table 中单元格的表达式。 Row Group 设置为 Group on TransNo,按 TransNo 排序。我尝试了多种不同的方法来对组进行排序,但总是得到相同的结果。

关于如何强制 LookUpSet 中的数据顺序以使其按我想要的顺序加入的任何想法?

我最终通过查看其他问题来解决这个问题,这些问题希望仅从 Join(LookUpSet()) 函数中提取不同的值并对其进行修改。此代码基于 this other SO question 的有用答案。

  1. 转到报表属性
  2. 进入代码编辑器并将以下函数粘贴到自定义代码框中:

    Public Function JoinSortAlpha(arr As Object(), delimiter As String) As String
    System.Array.Sort(arr)
    Dim result As String = String.Empty
    For i As Integer = 0 To arr.Length - 1
        If Not arr(i) Is Nothing And arr(i) <> String.Empty Then
            If result = String.Empty Then
                result = arr(i)
            Else
                result = result + delimiter + arr(i)
            End If
    End If
    Next
    Return result End Function
    
  3. 转到您的表达式并通过调用 JoinSortAlpha() 将 Join() 函数替换为您的新函数。我的新表达式如下所示:

    =JoinSortAlpha(LookUpSet(Fields!MasterTransNo.Value, Fields!MasterTransNo.Value, Iif(Fields!ModifierLevel.Value > 0, Trim(Fields!ItemDescription.Value), Trim(Fields!CategoryDescription.Value)), "LineItemDetails"), " ")

以下是该函数的功能细分:

  1. 创建一个名为 JoinSortAlpha 的新函数,它将从表达式中传递值。在这种情况下,来自 LookUpSet() 函数的值。
  2. 对从函数参数传递的数组进行排序。默认情况下,正是这种类型使其按字母顺序排列。
  3. 创建一个名为 result 的字符串对象以将最终值传递给。
  4. 计算数组 arr 并为 arr 数组中包含的每个值将一个值写入结果字符串。数组中的值被赋予一个从 0 开始并递增 1 的数值。在这里,我们告诉数组从数组中的第一个值(0)到数组中的最后一个值继续填充结果字符串由数组的长度减去 1 确定(因为数组从 0 而不是 1 开始)。
  5. 如果您的 LookUpSet() 函数没有 return 任何值,如果我们没有在这个 JoinSortAlpha 函数中考虑到这一点,SSRS 将显示错误。为了处理任何可能被 return 编辑的空白,我们使用 If 语句来确定字符串是否为空,在这种情况下它只是 return 什么都没有。否则,它将 return 值加上函数末尾的定界符(在我的例子中是 space " ")。