SSRS - используйте Join () внутри таблицы за пределами группы - PullRequest
0 голосов
/ 07 февраля 2019

Я использую Microsoft SQL Server 2017 со службами Reporting Services и Report Builder 2016.

Я получил набор данных, который выглядит следующим образом:
DataSet example

Я уже создал табликс, который группирует по Имени и показывает каждое Имя один раз и количество Имени в таблице.Примерно так:

4 x Foo
2 x Bar

Теперь я хочу получить текст, содержащий все имена, разделенные запятыми (каждое имя только один раз) и текст, содержащий все имена разделенных запятыми.Это должно выглядеть так:

Foo, Bar
4,2

Как это возможно с помощью SSRS Report Builder?

Я ужепробовал:

  • Использовать Join () внутри tablix (не работает)
  • Использовать список вместо tablix (обычно работает, но повторяет элементы по вертикали, а не по горизонтали)

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Код, который вам нужен:

Public Shared Function RemoveDuplicates(ByVal items As Object()) As Object()

    System.Array.Sort(items)  
    Dim k As Integer = 0 

    For i As Integer = 0 To items.Length - 1  
        If i > 0 AndAlso items(i).Equals(items(i - 1)) Then  
            Continue For  
        End If  

        items(k) = items(i)
        k = k + 1  
    Next  

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

Вы можете использовать это с помощью выражения, используя lookupset() либо в пределах области, связанной с набором данных, либо за ее пределами.

Для внешней, вы можете использовать:

=join(Code.RemoveDuplicates(lookupset(1,1, Fields!Name.Value, "DataSet1")), ", ")
0 голосов
/ 07 февраля 2019

Используя встроенные функции, вы можете комбинировать LookupSet с Join следующим образом:

=Join(LookupSet(Fields!ID.Value, Fields!ID.Value, Fields!GRADE.Value, "DataSet1"), ", ")

Надеюсь, это объясняет, как использовать функцию Join, и заверяет вас, что это действительно возможно,Также не имеет значения, используете ли вы таблицу, список или матрицу или находитесь в группе или нет.

Однако это не удаляет повторяющиеся значения и не предоставляет никаких вариантов сортировки.Для этого необходимо добавить пользовательскую функцию в свойствах отчета.Как только вы это сделаете, выражение будет выглядеть так:

=Join(Code.RemoveDuplicates(LookupSet(Fields!ID.Value, Fields!ID.Value, Fields!GRADE.Value, "DataSet1")), ", ")

Есть несколько примеров этого VB-кода, который вы можете искать или реализовывать самостоятельно, если вам нужна эта функциональность.

...