Function 如何在SSRS中使用LookUpSet对连接函数中的值进行排序?

Function 如何在SSRS中使用LookUpSet对连接函数中的值进行排序?,function,reporting-services,reportbuilder3.0,Function,Reporting Services,Reportbuilder3.0,如何在连接函数中对lookupper函数返回的值进行排序 示例数据: TransNo MasterTran Item Category ModifierLevel 1001000 1001000 ItemA CategoryB 0 1002000 1001000 ItemB CategoryC 1 1003000 1001000 ItemC CategoryC 1 我想得到的最终结果是

如何在连接函数中对lookupper函数返回的值进行排序

示例数据:

TransNo     MasterTran    Item    Category    ModifierLevel
1001000     1001000       ItemA   CategoryB   0
1002000     1001000       ItemB   CategoryC   1
1003000     1001000       ItemC   CategoryC   1
我想得到的最终结果是“CategoryB ItemB ItemC”。当我使用Join和lookupper的以下组合时,我最终得到了“itembcategoryb ItemC”

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


关于如何强制LookUnder中的数据顺序以使其按我想要的顺序连接,有什么想法吗

我最后发现了这一点,因为我看到了其他问题,这些问题只希望从Join(lookupper())函数中提取不同的值,并对其进行了修改。此代码基于的是来自的有用答案

  • 转到报告属性
  • 输入代码编辑器并在自定义代码框中输入以下函数:

    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
    
    公共函数jointortalpha(arr作为对象(),分隔符作为字符串)作为字符串
    System.Array.Sort(arr)
    Dim结果为String=String.Empty
    对于i,整数=0到阵列长度-1
    如果不是,则arr(i)为Nothing,arr(i)字符串为空
    如果result=String.Empty,则
    结果=arr(i)
    其他的
    结果=结果+分隔符+arr(i)
    如果结束
    如果结束
    下一个
    返回结果结束函数
    
  • 转到表达式,通过调用JoinSortAlpha()将Join()函数替换为新函数。我的新表达式如下所示:

    =JoinSortAlpha(LookUpSet(Fields!MasterTransNo.Value,Fields!MasterTransNo.Value,Iif(Fields!ModifierLevel.Value>0,Trim(Fields!itemsdescription.Value),Trim(Fields!CategoryDescription.Value)),“LineItemDetails”),”)

  • 下面是函数所做工作的分解:

  • 创建一个名为JoinSortAlpha的新函数,该函数将从表达式中传递值。在本例中,LookUpSet()函数中的值
  • 对从函数参数传递的数组进行排序。默认情况下,这种排序将使其按字母顺序排列
  • 创建一个名为result的字符串对象,将最终值传递给
  • 对数组arr求值,并为arr数组中包含的每个值向结果字符串写入一个值。数组中的值给定一个从0开始并递增1的数值。这里,我们告诉数组继续填充结果字符串,从数组中的第一个值(0)开始,直到数组中的最后一个值,该值由数组的长度减去1决定(因为数组从0开始,而不是从1开始)
  • 如果lookupper()函数没有返回任何值,那么如果我们不在这个JoinSortAlpha函数中说明这一点,SSRS将显示一个错误。为了处理任何可能返回的空格,我们使用If语句来确定字符串是否为空,在这种情况下它只返回零。否则,它将返回值加上函数末尾的分隔符(在我的例子中是空格“”)
    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