Dynamiczne grupowanie kolumn w raporcie SSRS – Krok po kroku z obrazkami

17-Wrz-2012

Problem: Chcesz przygotować raport prezentujący, powiedzmy produkty pogrupowane ze względu na kolor, a w ramach kolorów ze względu na klasę lub odwrotnie i z tym odwrotnie masz właśnie kłopot. Użytkownik ma decydować o kolejności grupowania.

 

Po kolei:

Utwórz projekt:

Zdefiniuj DataSource

Dodaj do projektu raport (bez wizarda), wiec kliknj Add –> New Item –> Report

Dodaj DataSource odwołując się do wcześniej zdefiniowanego Shared Data Source:

Zdefiniuj DataSet:

Przeciągnij na raport  Table (Tablix) i wstępnie go wypełnij umieszczając poziomy grupowania statycznie:

Teraz raport wygląda prawie dobrze, ale jest statyczny:

Dodaj nowy parametr, nazwij go GroupBy1, dodaj do niego odpowiednią nazwę wyświetlaną użytkownikowi np „Group first by”

Parametr określi, które grupowanie jest pierwsze, dlatego w Available Values wprowadź przystępne dla użytkownika nazwy poziomu grupowania (do kolumny Label) oraz rzeczywiste nazwy kolumn grupujących (do kolumny Values)

Podobnie należy zdefiniować drugi poziom grupowania:

i określić wartości:

Teraz należy wskazać, że grupowanie ma się odbyć w oparciu o te przygotowane parametry. Dlatego kliknij prawym przyciskiem myszy na poziomie grupowania Color, wybierz Group Properties. Zauważ, że obecnie grupowanie odbywa się statycznie w oparciu o Color:

Kliknij przycisk f(x) i wskaż, że grupowanie ma być przeprowadzone w oparciu o pole wyliczone

Wygląd okienka definiującego grupowanie wygląda teraz tak:

Podobnie musisz zmienić poziom grupowania dla Klasy:

skonstruować dynamiczne wyrażenie:

co w efekcie da:

Włąsciwie już masz to co chciałeś, ale trzeba jeszcze zmienić opisy pól raportu. Dlatego kliknij w raporcie na polu Color i wybierz Expression i zdefiniuj wyrażenie:

Potem kliknij na polu Class i również zdefinuj wyrażenie:

Raport powinien teraz wyglądać tak:

A w podglądzie raportu po określecniu poziomu grupowania tak:

lub przy zmianie wartości parametrów  tak:

Jeżeli chcesz poprawić wygodę użytkownika twojego raportu dodaj do parametrów wartości domyślne. Dla koloru:

i dla klasy:

Pozostało jeszcze dodać wartość do raportu, jego projekt wygląda więc następująco:

A raport po uruchomieniu robi to co ma robić od razu!

Treść zapytania użytego do tego przykładu (do ewentualnych własnych testów) zamieszczam poniżej:

SELECT Color, Size, Class, SUM(ListPrice * ReorderPoint) AS Value
FROM Production.Product
WHERE
(Color IS NOT NULL) AND (Size IS NOT NULL) AND (Class IS NOT NULL)
GROUP BY Color, Size, Class

Dodaj komentarz:

Autor: Rafał Kraik