Есть ли способ получить список всех значений столбцов из нескольких наборов данных - PullRequest
0 голосов
/ 11 апреля 2019

У нас есть 2 набора данных. Оба набора данных имеют столбец с именем Office. Скажем, столбец Dataset1 Office имеет значения London, Liverpool и Dataset2, столбец Office имеет значения Washington, California.

Есть ли в SSRS какой-либо способ сделать что-то вроде UNION ALL (но внутри SSRS), который создает список всех значений Office в одном столбце таблицы?

1 Ответ

1 голос
/ 12 апреля 2019

Могут быть и более элегантные способы сделать это, но это все, что я мог придумать ..

Вам необходимо иметь уникальный числовой идентификатор для каждой записи

Предполагая, что вы не можете просто объединить их вместе в запросе к набору данных, если вы можете добавить числовой идентификатор к каждой записи, вы можете сделать это (хотя и немного неуклюже)

Для начала я создал два набора данных ds1 и ds2 для хранения двух списков названий офисов.

Например, первый запрос к набору данных был именно таким ...

DECLARE @t TABLE(OfficeID int, Office varchar(20))
INSERT INTO @t VALUES
(1, 'London'),
(2, 'Liverpool')
SELECT * FROM @t

а второй был такой.

DECLARE @t TABLE(OfficeID int, Office varchar(20))
INSERT INTO @t VALUES
(10, 'Washington'),
(11, 'California')
SELECT * FROM @t

Как видите, теперь у каждого офиса есть уникальный числовой идентификатор

Затем мне понадобился еще один набор данных со списком номеров, который охватывал весь диапазон служебных идентификаторов. В этом примере диапазон составляет всего 20 чисел примечание: для этой работы на SQL Server для других систем вам потребуется другой способ получения списка чисел

Итак, запрос для dsNums

declare @n table(num int)
insert into @n
select top 20 row_number() over(order by t1.number) as N
from   master..spt_values t1 
       cross join master..spt_values t2
SELECT * FROM @n

Затем я добавил таблицу в отчет, сократил ее до двух столбцов и привязал к dsNums. Первый столбец - это просто поле [num].

Второе - это выражение, которое выполняет два поиска и принимает первый непустой результат. Выражение было

=IIF(
    LEN(LOOKUP(Fields!num.Value, Fields!OfficeID.Value, Fields!Office.Value, "ds1"))>0
    , LOOKUP(Fields!num.Value, Fields!OfficeID.Value, Fields!Office.Value, "ds1")
    , LOOKUP(Fields!num.Value, Fields!OfficeID.Value, Fields!Office.Value, "ds2")
    )

Если мы запустим отчет сейчас, мы получим .. enter image description here

Наконец нам нужно скрыть пустые строки. Для этого я установил для выражения Row Visibilty значение

=LEN(ReportItems!LookupResult.Value) = 0

Результат таков (очевидно, вам не нужен столбец num, но это было только для иллюстрации)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...