Как отсортировать значения в функции Join с помощью LookUpSet в SSRS? - PullRequest
0 голосов
/ 19 марта 2020

Как я могу отсортировать значения, возвращенные функцией LookUpSet внутри функции Join?

Пример данных:

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

Конечный результат, который я хотел бы получить, - элемент CategoryB ItemB ItemB C». Когда я использую следующую комбинацию Join и LookUpSet, я получаю «ItemB CategoryB Item C».

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

Это выражение для ячейки в таблице. Группа рядов установлена ​​на Группу на TransNo, сортировка по TransNo. Я пробовал разные подходы к сортировке для группы, но всегда получал один и тот же результат.

Любые идеи о том, как я могу принудительно установить порядок данных из LookUpSet, чтобы они были объединены в порядке, который я хочу?

1 Ответ

0 голосов
/ 20 апреля 2020

В итоге я понял это, увидев другие вопросы, пытаясь получить отдельные значения только из функций Join (LookUpSet ()) и изменить их. Этот код основан на полезных ответах на этот другой вопрос SO .

  1. Go Свойства отчета
  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. Go к вашему выражению и замените функцию Join () новой функцией, вызвав JoinSortAlpha (). Мое новое выражение выглядит следующим образом:

    =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. Создать объект String с именем result для передачи окончательных значений.
  4. Оценить массив arr и записать значение в строку результата для каждого значения, содержащегося в массиве arr. Значениям в массиве присваивается числовое значение c, начинающееся с 0 и увеличивающееся на 1. Здесь мы говорим массиву продолжать заполнение строки результата с первого значения в массиве (в 0) до последнего значения в массив, который определяется длиной массива минус 1 (потому что массив начинается с 0, а не 1).
  5. Если ваша функция LookUpSet () не возвращает никаких значений, SSRS выдаст ошибку, если мы не учтем это в этой функции JoinSortAlpha. Чтобы справиться с любыми возможными возвращаемыми пробелами, мы используем оператор If, чтобы определить, является ли строка пустой, и в этом случае она просто ничего не возвращает. В противном случае он вернет значение плюс разделитель в конце функции (пробел "" в моем случае).
...