Kada dodate polje u tabelu, redovi podnožja za grupe u tabeli koriste podrazumevanu agregatnu funkciju,
Sum, za to polje kako bi se odredila ukupna vrednost redova za svaku grupu. Ista funkcija se koristi za računanje sveukupnog zbira za tabelu u podnožju tabele. U telu izveštaja, agregatna funkcija operiše nad setom redova definisanih u izrazu, kao što je polje i vraća polje, kao što je ukupna vrednost. Obično, agregatna funkcija operiše nad numeričkim vrednostima, ali pojedine agregatne funkcije rade sa stringovima. U zaglavlju i podnožju strane, neke agregatne funkcije mogu raditi samo na izrazima stavki izveštaja.
Pošto se izrazi računaju u telu izveštaja kada se izveštaj procesira, agregatna funkcija u telu izveštaja ima pristup dataset-u i tako može koristiti izraz polja kao argument. Međutim, izrazi u zaglavlju i podnožju strane se računaju nakon što se procesira telo izveštaja, a pre renderovanja. Ako pokušate da koristite izraz
=Sum(Fields!SalesAmount.Value) u podnožju strane, izveštaj se neće kompajlirati. Ovde je izraz stavke izveštaja spas, zato što može prisupiti informacijama procesirane strane i vratiti vrednost koja će se prikazati na renderovanoj strani. Tako, možete koristiti =Sum(ReportItems!SalesAmount.Value) za ukupnu vrednost svih textbox-ova označenih kao SalesAmount na strani.
Reporting Services podržava 14 standardnih agregatnih funkcija, prikazanih u tabeli:
Ove funkcije se tipično koriste u podnožjima redova tabele ili matrice, ali se mogu takođe koristiti u zasebnim textbox-ovima. Preostale tri funkcije se mogu koristiti u redovima detalja za prikaz vrednosti prethodnog reda, trenutnog broja reda ili akumulirane vrednosti. Ove funkcije su prikazane u sledećoj tabeli:
Iako je Report Designer dodao agregatnu funkcija
Sum kada ste prevukli polje u zaglavlje ili podnožje tabele, Vi možete takođe uneti agregatnu funkciju direktno u tabelu – na primer, kada je potrebno prikazati kumulativne vrednosti u redovima detalja ili srednju vrednost u redu podnožja. Agregati se mogu koristiti i van regiona podataka u zasebnim textbox-ovima, u telu izveštaja, u zaglavlju ili podnožju tabele. Na primer, možda ćete želeti da prikažete sveukupni zbir na prvoj strani izveštaja ili da prikažete zbir za stranu u podnožju svake strane. U slučaju nenumeričkih podataka, kao što je spisak zaposlenih, možda ćete želeti da prikažete ime prvog i poslednjeg zaposlenog u podnožju strane.
Korišćenje agregatnih funkcija u tabeli
Kada koristite agregatne funkcije u regionu podataka, kao što je tabela, potrebno je da razmislite o opsegu funkcije. Opseg u kontekstu regiona podataka određuje koji su redovi uključeni kada se računa agregatna vrednost. Opseg se može odnositi ne samo na grupisanje u regionu podataka, već i na čitav region podataka ili čak na tekući dataset.
Mnoge agregatne funkcije koriste sintaksu
Function(Expression,Scope), ali
RunningValue funkcija se konstruiše korišćenjem sledeće sintakse:
RunningValue(Expression,Function,Scope)
U ovoj funkciji, Expression ne može u sebi da sadrži agregatnu funkciju;
Function je agregatna funkcija koja će se primeniti (koja ne može da bude
RunningValue ili
RowNumber) i
Scope je ime regiona podataka ili grupisanja u regionu podataka i sadržana je unutar znaka navoda.
Sada ćete koristiti
RunningValue funkciju za računanje kumulativa po podkategorijama proizvoda.
- Kliknite na Layout tab, desni klik na Sales Amount marker kolone, a zatim kliknite na Insert Column To The Right.
- Unesite Cumulative u novu ćeliju u zaglavlju grupe Category (drugi red tabele).
- Kliknite na Align Right dugme u Report Formatting toolbar-u.
- Dodajte sledeći izraz u Cumulative ćeliju u redu detalja:
=RunningValue(Fields!SalesAmount.Value,Sum,"table1_SubCategory")
Ovaj izraz računa tekući zbir SalesAmount koji se poništava svaki put kada se Scope promeni. (U ovom slučaju Scope je naziv grupe baziran na SubCategory vrednosti.)
- Snimite solution i onda kliknite na Preview tab da biste proverili da li gornji levi deo Vašeg izveštaja izgleda kao na slici.
Zapazite da se Cumulative vrednost povećava sa svakim redom detalja u svakoj podkategoriji. Cumulative vrednost za poslednji red detalja je jednak međuzbiru za podkategoriju. Zatim se Cumulative vrednost postavlja na nulu i povećava se za svaki red detalja u sledećoj grupi. Zato što je Cumulative vrednost vezana za Sales Amount kolonu možete natpis postaviti iznad kolone što bi bolje objašnjavalo vrednost u Cumulative koloni.
Sada ćete spojiti ćelije u zaglavlju tabele i centrirati Sales Amount naziv iznad kolona u kojima se prikazuje stvarna i kumulativna vrednost.
- Kliknite na Layout tab, kliknite na Sales Amount zaglavlje tabele (prvi red), pritisnite Ctrl, i dok držite Ctrl taster kliknite na ćeliju sa desne strane, desnim klikom kliknite na bilo koju od selektovanih ćelija i zatim kliknite na Merge Cells. Spajanje ćelija je korisno za centriranje naziva preko više kolona u regionu podataka, kao što je tabela ili matrica.
- Kliknite na Center dugme u Report Formatting toolbar-u da biste centrirali tekst preko dve ćelije. Prve tri kolone tabele u dizajneru izgledaju kao na slici:
Korišćenje agregatnih funkcija u Textbox-u
Ponekad ćete želeti da prikažete rezultat agregatne funkcije nezavisno od regiona podataka koji sadrži podatke koji se koriste u agregatnoj funkciji. Možete postaviti agregatnu funkciju u zaseban textbox koji će se nalaziti bilo gde u izveštaju. Ako želite da uradite to, uključite i odgovarajući naziv koji možete smestiti u zaseban textbox ili kao deo izraza u istom textbox-u, kako biste naznačili šta prikazana vrednost u izveštaju znači. Kada koristite izraz za nadovezivanje stringova sa numeričkom vrednošću, kao što je agregacija, potrebno je da koristite Format funkciju u kojoj će se nalaziti agregatna funkcija, čija će vrednost biti konvertovana u string uz odgovarajuće formatiranje. Sintaksa Format funkcije glasi
Format(
Expression,
FormatString), gde je
FormatString string koji ćete koristiti u
Format svojstvu.
Kao što ste videli ranije, izraz korišćen u agregatnoj funkciji zavisi od njegove lokacije u izveštaju. Kada koristite agregatnu funkciju u telu izveštaja, morate koristiti izraz polja. U telu funkcije, opseg agregatne funkcije je uvek dataset, koji mora biti specificiran samo kada postoji više od jednog dataset-a u izveštaju. Zbog toga što se može desiti da kasnije dodate još neki dataset, bilo bi dobro da Vam uđe u naviku da uključite dataset u Scope argument i na taj način izbegnete kasnije izmene. Agregatna funkcija u zaglavlju ili podnožju strane mora koristiti izraz za stavku izveštaja.
Scope se nikada ne koristi u tom kontekstu, zato što tada dataset više nije dostupan.
Sada ćete koristiti
Sum funkciju da biste prikazali ukupnu prodaju proizvoda za sve kategorije u telu izveštaja umesto u tabeli.
- Klinite na Layout tab, kliknite na textbox u Toolbox prozoru, zatim u dizajneru, kliknite na mesto pored desnog gornjeg ugla slike.
- Koristeći marker za textbox podesite širinu na 2.5 inča i visinu na 0.25 inča kao što je na slici:
- Dodajte sledeći izraz u novi textbox:
=Sum(Fields!SalesAmount.Value,"DataDetail")
Pošto u izveštaju postoji samo jedan dataset Scope argument nije obavezan u izrazu. Mogli ste da napišete =Sum(Fields!SalesAmount.Value), međutim ako kasnije dodate još jedan dataset, moraćete da izmenite izraz kako bi se odnosio na odgovarajući dataset u Scope aergumentu.
- Kliknite na Preview tab i odskrolujte do desne strane izveštaja ako je neophodno. Možete videti da bi trebalo postaviti format i natpis koji bi govorio šta prikazana vrednost pretstavlja. Dok god je opseg agregatne funkcije u telu izveštaja dataset, suma predstavlja ukupnu prodaju svih proizvoda u izveštaju.
- Kliknite na Layout tab i izmenite izraz u textbox-u tako da dobijete izraz:
="Total Product Sales: "+Format(Sum(Fields!SalesAmount.Value, "DataDetail"), "c0")
Ovaj izraz pretstavlja primer kako se vrši nadovezivanje (konkatenacija) agregatne funkcije i teksta.
- Na Report Formatting toolbar-u kliknite na Italic dugme.
- Snimite solution i pregledajte izveštaj tako da vrh izveštaja izgleda kao na slici.
Sada imate sveukupni zbir svih proizvoda u dataset-u.
Sada ćete koristiti
First and
Last funkciju da biste prikazali ukupnu prodaju proizvoda za sve kategorije u telu izveštaja.
- Klinite na Layout tab, kliknite na textbox u Toolbox prozoru, kliknite na podnožje strane desno od postojećeg textbox-a, a zatim postavite širinu textbox-a na 2 inča i visinu 0.25 inča i pozicionirajte ga tako da mu leva strana bude poravnata sa oznakom 2 inča na horizontalnom lenjiru (U Properties prozoru textbox-a možete podesiti za Location vrednost Left na 2).
- Kliknite na prvu ćeliju reda detalja i proverite da li je Name svojstvo textbox-a u Properties prozoru Product. Ime textbox-a se dodeljuje automatski kada se prevuče Product polje u ćeliju. Ukoliko iz nekog razloga ime nije dobro, izmenite ga.
- Kliknite na textbox koji ste dodali u podnožje strane i unesite sledeći izraz:
=First(ReportItems!Product.Value)
Ovaj izraz će pronaći naziv proizvoda u prvom redu detalja na strani i rezultat će prikazati u podnožju strane.
- Kliknite na textbox sa First agregatnom funkcijom, a onda kliknite na Align Right dugme na Report Formatting toolbar-u.
- Kliknite na isti textbox, i dok držite pritisnut Ctrl taster, prevucite ga na desnu stranu i na taj način ćete napraviti kopiju textbox-a čija će se leva ivica poravnati sa desnom ivicom originalnog textbox-a i sa oznakom 4 na horizontalnom lenjiru.
- Izmenite sadržaj drugog textbox-a tako da dobijete izraz:
=" – " +Last(ReportItems!Product.Value)
Izraz sadrži crticu kao vizuelni separator između prve i poslednjeg vrednosti prikazane u podnožju strane. Reporting Services ne dozvoljava da se koriste dva izraza stavke izveštaja u istom textbox-u, ali možete postaviti dva textbox-a jedan pored drugog kako biste postigli isti efekat.
- Kliknite na textbox sa Last agregatnom funkcijom, a onda kliknite na Align Left dugme na Report Formatting toolbar-u.
- Snimite solution i pregledajte izveštaj, odskrolujte do dna strane. Dno strane treba da izgleda kao na slici.