объединение строк в хранимой процедуре и использование ее в отчете ssrs - PullRequest
0 голосов
/ 19 марта 2020

Я хочу объединить несколько строк в хранимой процедуре и использовать эти данные в отчете ssrs.

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

    CustomerId | Reference | Date     | Product | Quantity
    1          | 1         | 1/1/2019 | Glass   | 6
    1          | 1         | 1/1/2019 | Plate   | 6
    1          | 2         | 2/1/2019 | Glass   | 1
    2          | 3         | 2/1/2019 | Fork    | 3

Как я хочу показать это в отчете :

    CustomerId | Reference | Date     | Glass | Plate | Fork
    1          | 1         | 1/1/2019 | 6     | 6     | NULL
    1          | 2         | 2/1/2019 | 1     | NULL  | NULL
    2          | 3         | 2/1/2019 | NULL  | NULL  | 3   

Я хочу напечатать отчет с этими данными за определенный c месяц. Существует множество различных продуктов, и не все продукты используются в течение месяца. Чтобы не загромождать отчет, я хочу показать только используемые продукты.

Я нашел, как получить эту таблицу с помощью динамического c сводного запроса из этого вопроса: SQL Динамики сервера c запрос PIVOT?

Однако я не знаю, как получить это в отчете. Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Нет необходимости поворачивать эти данные в SQL. Службы Reporting Services могут сделать это за вас.

Создайте новый отчет и добавьте новый набор данных; запрос к набору данных должен возвращать результаты в соответствии с данными вашего примера.

Я использовал следующий запрос для репликации вашего data

DECLARE @t TABLE(CustomerID int, Reference int, [date] date, Product varchar(10), Quantity int)
INSERT INTO @t VALUES 
(1,1,'2019-01-01', 'Glass', 6),
(1,1,'2019-01-01', 'Plate', 6),
(1,2,'2019-01-02', 'Glass', 1),
(2,3,'2019-01-02', 'Fork', 3)
SELECT * FROM @t

Добавить матричный элемент управления в отчет.

Перетащите поле «Клиент» с панели данных отчета в местозаполнитель «строк» ​​в матрице, затем перетащите поле «Товар» в местозаполнитель «Столбцы» и, наконец, перетащите Количество в местозаполнитель «Данные».

Дизайн отчета будет выглядеть примерно так (еще не закончен ...) enter image description here

Дважды щелкните RowGroup (в моем примере это CustomerID) под основным дизайном панель и установите группировку по CustomerID (который уже должен быть там), Reference и Date, чтобы он выглядел следующим образом ...

enter image description here

next right щелкните текстовое поле CustomerID в своей матрице и выберите «Вставить столбец => Внутри группы - справа». Повторите это, чтобы добавить еще один столбец.

В двух новых столбцах щелкните раскрывающийся список и выберите поля ссылки и даты. Если ваше поле ссылки равно цифре c, SSRS добавит его как SUM (ссылка). В этом случае щелкните правой кнопкой мыши текстовое поле, выберите «выражение» и измените его на просто =Fields!Reference.Value

Наконец, щелкните текстовое поле даты в матрице и установите для его свойства формата значение dd/MM/yyyy

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

enter image description here

Когда мы запускаем отчет, мы получаем это ..

enter image description here

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

По мере добавления новой даты, продуктов и c матрица будет корректироваться соответствующим образом.

0 голосов
/ 19 марта 2020

Вот краткий пример того, как динамически поворачивать ваши данные.

Declare @SQL varchar(max) = '
Select *
 From (
        Select CustomerID
              ,Reference
              ,Product
              ,Date
              ,Quantity
         From  YourTable
         Where month(Date)=1  -- Or desired filter
      ) src
 Pivot (sum([Quantity]) For [Product] in (' + Stuff((Select Distinct ','+QuoteName(Product) 
                                                       From #YourTable  
                                                       Where month(Date)=1  -- Or desired filter
                                                       For XML Path('')),1,1,'')  + ') ) p'
Exec(@SQL);
--Print @SQL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...