V seriálu o hierarchiích pokračujeme dalším článkem. Minule jsem ukazoval Jak správně vytvořit hierarchii v databázi a Jak se dá rekurzivním dotazem dotazovat na hierarchii v SQL. Dnes zabrousíme do Reporting Services, které mají integrovanou podporu pro hierarchie v SSRS nativně. Nemusíte tak data před reportováním nijak transformovat a vše funguje “na tlačítko”.
Jak reportovat hierarchie v Reporting services (SSRS)
Založení SSRS projektu a reportu
Založíme si čistý Reporting services projekt a poté report, který jsem nazval “Hierarchy report”. Pokud nevíte jak na to, tak jsem na to napsal návod – Založení SSRS projektu a reportu
Založení Data source a Datasetu v Reporting services (SSRS)
Jako Data source nastavíme Databázi, kde leží tabulka “zamestnanci”, se kterou jsme pracovali v článku “Jak správně vytvořit hierarchii v databázi”. Pro připomenutí – tabulka obsahuje seznam 15-ti zaměstnanců a cizí klíč, který určuje vztah nadřízenosti a podřízenosti. Jako dataset nastavíme tabulku zamestnanci (pokud nevíte jak na to, tak návod jdem napsal zde – Založení Data source v SSRS + Jak nastavit dataset v SSRS).
Vytvořenní matice (matrixu) v SSRS
Vytvoříme matici (matrix) o 3 sloupcích a vyplníme pole tak jako na obrázku
Nyní vytvoříme hierarchii, což je relativně nejsložitější část
- (4a) Klikneme pravým tlačítkem na Row Group “jmenoprijmeni” a jako group kritérium nastavíme id_zamestnanec
- (4b) Poté v tom samém okně klikneme na advanced a nastavíme Recursive parent na id_nadrizeny.
- (4c) V tento moment by měla být hierarchie funkční, nicméně se nám stále budou zobrazovat řádky pod sebou a hierarchie nebude mít hezký tvar (viz obrázek), to změníme.
- (4d) Nejdříve nastavíme zarovnání. Každý člen hierarchie má svou úroveň – ředitel má úroveň 0, manažeři úroveň 1 a zaměstnanci úroveň 2. Toho využijeme a u zarovnání zleva nastavíme vzorec. Level hierarchie zjistíme prostřednictvím výrazu v SSRS =Level(“jmenoprijmeni”) , který vrátí číslo (úroveň hierarchie). No a pokud známe úroveň hierarchie, tak můžeme vyplnit zarovnání zleva jako =Level(“jmenoprijmeni”) * 20 & “pt” – jinými slovy úroveň * 20 bodů. Tím zabezpečíme, že vrchní členové (parent) budou zarovnáni o 20 bodu více vlevo než jejich členové (children).
- (4e) Průběžný výsledek už vypadá lépe a vidíme, že jsou zaměstnanci pěkně srovnaní. Ještě to trošku vylepšíme
- (4f) Klikneme znovu na Row group “jmenoprijmeni” a přejdeme na kartu visibility. Označíme Hide a označíme Display can be toggled by this report item: a vybereme jmenoprijmeni
- (4g) Finální report vypadá OK, všichni členové hierarchie jsou odsazeni a zabaleni =)