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