Reporting Services ima mogućnost rada i sa hijerarhijskim podacima u izveštajima. Reporting Services podržava identifikaciju nivoa u rekurzivnoj hijererhiji i agregaciju informacija kroz nivoe unutar određene grane hijerarhije. Jedan tip rekurzivne hijerarhije možete sresti u skladištu podataka roditelj-dete dimenzija.
Druga hijerarhijska struktura kojoj Reporting Services može pristupiti je Analysis Services online analitička obrada (OLAP) baze podataka. Analysis Services, kao i Reporting Services, je u paketu sa SQL Server-om (u Express verziji Analysis Services nije u paketu SQL Server-a). Analysis Services je server-based OLAP engine koji struktuira podatke tako da se olakša pristup brzim i moćnim upitima što bi predstavljalo izazov postići sa tradicionalnim relacionim upitima. Kreiranje OLAP baze podataka ima tri glavna benefita:
- Njegova hijerarhijska struktura pojednostavljuje navigaciju korisnika.
- OLAP baza podataka može odgovoriti na upit brže nego relaciona baza zato što koristi hijerarhijsku strukturu za čuvanje proračunatih vrednosti.
- OLAP baza podataka koristi sofisticirane analitičke formule na serveru, naročito serije vremenskih analiza, kao što su godišnja poređenja.
Mnoge komercijalne softverske kompanije su razvile klijentske alate koje omogućavaju korisnicima da izvode interaktivne analize direktno sa OLAP bazom podataka. analysis directly with the OLAP database. Korišćenje Reporting Services-a za pristup OLAP podacima korišćenjem MDX (multidimensional expressions) upita imaju dve glavne prednosti. Prvo, možete obezbediti jednostavnu implementaciju thin-client rešenja kada većini korisnika ne treba fleksibilna analiza, ali žele da pristupe rezultatima server-based kalkulacija. Drugo, može se smanjiti vreme izvršavanja izveštaja u odnosu na vraćanje istih podataka iz relacionog izvora.
Prikazivanje hijerarhijskih podataka u regionu podataka
Da biste dodali rekurzivnu hijerarhiju regionu podataka, potrebno je da modifikujete svojstvo grupisanja u regionu podatak. Izraz za grupisanje mora biti izraz polja koje identifikuje jedinstvene zapise u hijerarhiji. Onda se specifikuje izraz grupisanja roditelja koji identifikuje zapise koji se odnose na roditelje. Na primer, u tabeli koja opisuje veze u organizaciji između zaposlenih i menadžera, svaki zapis zaposlenog ima kolonu koja je ključ i jedinstveno identifikuje zaposlenog i kolonu koja predstavlja ključ roditelja i na taj način pokazuje na roditeljski zapis - menadžera zaposlenog - u istoj tabeli. Možete izvršiti grupisanje zapsolenih po menadžerima korišćenjem kolone ključa i izvesti agregaciju vrednosti unutar tih grupa, kao što je broj zaposlenih po menadžeru ili ukupna prodaja po zaposlenima.
Sada ćete dodati nivo grupisanja tabeli za rekurzivnu hijerarhiju koja će imati zaposlene kao jedinstvene zapise i supervizore kao zapise roditelje.
- U Solution Explorer-u, desni klik na Reports folder u projektu My Adventure Works,
Postavite se na Add i kliknite na Existing Item da biste dodali Employee Salaries.rdl koji se nalazi, u repozitorijumu kursa, u folderu Materijali\3_12.
- Dupli klik na Employee Salaries.rdl izveštaj da biste ga otvorili u Document prozoru, i onda klik na Preview tab da biste potvrdili da vrh izveštaja izgleda kao na slici.
Izmenićete izveštaj tako da grupiše zaposlene po supervizoru.
- Kliknite na Layout tab, klik na tabelu, i onda klik na red detalja da biste selektovali red.
- U Properties prozoru, kliknite na dugme sa tri tačke za Grouping svojstvo.
- U Details Grouping dijalog boksu, za ime unesite RecursiveGroup.
- Izaberite =Fields!EmployeeKey.Value iz Expression padajuće liste.
- Izaberite =Fields!ParentEmployeeKey.Value iz padajuće liste Parent group tako da Details Grouping dijalog boks sada izgleda kao na slici.
- kliknite na OK.
- Kliknite na tabelu, desni klik na marker tabele u gornjem leviom uglu, a zatim kliknite na Properties
- Kliknite na Sorting tab.
- Izaberite =Fields!Salary.Value u Expression padajućoj listi, izaberite Descending u Direction padajućoj listi, i kliknite na OK.
- Snimite i pregledajte izveštaj sa zumom od 75%.
- Sada su zaposleni sortirani u grupama po supervizorima i sortirani unutar grupe po prodaji u opadajućem redosledu. Međutim, raspored se još ne vidi jasno.
Korišćenje Level funkcije
Level funkcija se koristi sa rekurzivnim hijerarhijskim listama za identifikovanje veze trenutnog reda sa vrhom hijerarhije. Sintaksa ove funkcije je Level(Scope) gde je Scope naziv grupisanja, region podataka ili dataset. Ako izostavite Scope, trenutni opseg izraza će biti korišćen. Funkcija vraća integer vrednost koja počinje sa 0 od vrha hijerarhije i inkrementira se za 1 za svaki sledeći nivo. Najčešće se ova funkcija koristi za promenu svojstava stila za različite nivoe hijerarhije.
Sada ćete koristiti Level funkciju za prikaz trenutnog nivoa u hijerarhiji i onda ćete formatirati ćelije po nivou.
- Klinite na Layout tab, desni klik na Level ćeliju u redu detalja, a onda klik na Expression.
- Unesite sledeći izraz: =Level("RecursiveGroup")
Opseg funkcije je RecursiveGroup, koja grupiše zaposlene, a to ste kreirali u prethodnoj proceduri.
- Kliknite na OK.
- Snimite i pregledajte izveštaj.
Sada možete videti grupisanje zaposlenih mnogo jasnije, ali se prikaz može poboljšati odgovarajućim formatiranjem.
- Kliknite na Layout tab, i onda kliknite na prvu ćeliju u redu detalja.
- U Properties prozoru, proširite Padding kategoriju, a onda izaberite <Expression…> u padajućoj listi Left svojstva.
- Zamenite podrazumevani izraz sa sledećim:
=2 + (Level("RecursiveGroup") * 20) & "pt"
Ovaj izraz povećava uvlačenja redova detalja kako se povećava nivo.
- Kliknite na OK.
- Kliknite na marker reda detalja u tabeli.
- U Properties prozoru, proširite Font svojstvo, i onda izaberite <Expression…> u padajućoj listi FontWeight svojstva.
- Zamenite podrazumevani izraz izrazom:
=IIf(Level ("RecursiveGroup")=0, "Bold", "Normal")
Izraz koristi podebljani tekst kada se renderuje zaposleni najvišeg nivoa u izveštaju.
- Kliknite na OK.
- Snimite i pogledajte izveštaj koji bi trebalo da izgleda kao na slici.
Korišćenje ključne reči Recursive
Ključna reč Recursive predstavlja modifikator bilo koje agregatne funkcije sa ciljem da se vrati vrednost koja ne uključuje samo redove detalja već i vrednost roditeljskog reda u grupi. Ključna reč se mora nalaziti posle Scope argumenta u agregatnoj funkciji.
Sada ćete koristiti ključnu reč Recursive sa agregatnim funkcijama Count i Sum.
- Kliknite na Layout tab, desni klik na Employee Count ćeliju u redu detalja, a onda izaberite Expression.
- Unesite sledeći izraz:
=Count(Fields!EmployeeKey.Value,"RecursiveGroup",Recursive)
- Kliknite na OK.
- Desni klik na Total Salary ćeliju u redu detalja, a onda klik na Expression.
- Izmenite izraz tako da izgleda kao ovaj:
=Sum(Fields!Salary.Value,"RecursiveGroup",Recursive)
Ovaj izraz računa ukupnu prodaju za zaposlenog u nivoima ispod tekućeg i uključuje prodaju za trenutni red.
- Kliknite na OK.
- Desni klik na Salary of Reports ćeliju u redu detalja i onda klik na Expression.
- Promenite izraz tako da izgleda kao sledeći:
=Sum(Fields!Salary.Value,"RecursiveGroup",Recursive)-Sum(Fields!Salary.Value)
Ovaj izraz oduzima prodaju trenutnog zaposlenog od rekurzivne agregacije tako da će samo vrednost zaposlenih ispod trenutnog zaposlenog biti uračunate.
- Kliknite na OK.
- Snimite i pregledajte izveštaj sa zumom od 75%. Trebalo bi da izgleda kao na slici
Pogledajte razliku između rezultata u Total Salary koloni i Salary of Reports koloni. Ako želite da vrednost u roditeljskom redu bude agregiran sa nižim nivoima koristite Recursive ključnu reč da biste dobili rezultat kao što je Total Salary kolona. Ako ne želite da uključite vrednost roditeljskog reda potrebno je da oduzmete vrednost trenutnog reda da biste dobili rezultat kao što je prikazan u Salary of Reports koloni.