Sunteți pe pagina 1din 10

March 6, 2013 SISTEME INFORMATICE PENTRU ASISTAREA DECIZIILOR

Introducere n OLAP: Analize unidimensionale - ROLLUP


n cele ce urmeaz vom prezenta cteva din cele mai importante funcii analitice, care extind nucleul SQL ctre probleme legate destul de strns de ceea ce ndeobte este cunoscut sub titulatura depozite de date (Data Warehouses). Agregarea simultan a datelor dup mai muli parametrii (dimensiuni) nsoit de determinarea subtotalurilor aferente face obiectul aa -numitei analize multidimensionale. Aceasta se bazeaz pe utilizarea funciilor anali tice dedicate procesrii analitice on-line (On Line Analytical Processing OLAP) i care au fost introduse n Oracle ncepnd cu versiunea 8i a acestuia. Pentru ilustrarea acestor funcii utilizm tabela VINZRI_CRI care, pentru o editur, conine informaii despre facturile emise - crile vndute librriilor i/sau distribuitorilor de carte i pres. Pentru simplificarea discuiei, tabela este denormalizat, iar singurul element care ne intereseaz despre fiecare carte este ISBN-ul. CREATE TABLE vanzari_carti ( NrFact NUMBER(6) NOT NULL, DataFact DATE NOT NULL, Client VARCHAR2(15), Loc VARCHAR2(15), Jud CHAR(2), ISBN CHAR(14), Cantit NUMBER (6), PretUn NUMBER (8), ValTotala NUMBER (12) ); Introducerea datelor n tabel: INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Pop Ion', 'Timisoara', 'TM', '973-585-547-x', 3, 45); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Pop Ion', 'Timisoara', 'TM', '973-585-456-x', 5, 55); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Pop Ion', 'Timisoara', 'TM', '973-5853-45-x', 1, 78); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Popescu Maria', 'Lugoj', 'TM', '973-585-234-x', 3, 33); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Popescu Maria', 'Lugoj', 'TM', '973-354-547-x', 3, 45); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Popescu Maria', 'Lugoj', 'TM', '973-585-456-x', 5, 55); 1 Introducere n OLAP ROLLUP, GROUPING | IE, an III

March 6, 2013 SISTEME INFORMATICE PENTRU ASISTAREA DECIZIILOR

INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Ana Mara', 'Jimbolia', 'TM', '973-585-547-x', 13, 45); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Tara Edgar', 'Jimbolia', 'TM', '973-487-547-x', 11, 15); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Meca Vasile', 'Jimbolia', 'TM', '973-585-547-x', 200, 45); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Bec Lavinia', 'Deva', 'HD', '927-345-547-x', 100, 45); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Werk Dacian', 'Deva', 'HD', '987-545-532-x', 400, 45); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Miodrag Ana', 'Hunedoara', 'HD', '978-534-523-x', 500, 45); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Varga Teo', 'Hunedoara', 'HD', '922-123-549-x', 250, 45); Update vanzari_carti set valtotala=cantit*pretun;

2 Introducere n OLAP ROLLUP, GROUPING | IE, an III

March 6, 2013 SISTEME INFORMATICE PENTRU ASISTAREA DECIZIILOR

ROLLUP
Prima funcie luat n discuie este ROLLUP. Se folosete pentru analiza datelor pe o singur dimensiune, dar la mai multe nivele de detaliere, atunci cnd n rapoarte sunt necesare subtotaluri incluse n alte subtotaluri, precum i un total general. ROLLUP este echivalentul opiunii SUBTOTALS din Excel i permite afiarea subtotalurilor, a unor funcii aplicate p e grupe de valori. Problema creia vrem s-i dm rspuns se formuleaz astfel: Care este totalul vnzrilor de carte, pe clieni, localiti i judee, precum i totalul general? Astfel de analize sunt ct se poate de frecvente i necesare pentru toate tipurile de firme. n lipsa unui operator de genul ROLLUP, soluia necesit reuniunea (UNION). Subtotaluri obinute prin reuniune: Grupare dup jude, localitate i client, calcul valoare total pe client:
SELECT jud, loc, client, SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti GROUP BY jud, loc, client ;

Grupare dup jude, localitate, calcul valoare total pe localitate:


SELECT jud, loc, 'Total localitate', SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti GROUP BY jud, loc ;

3 Introducere n OLAP ROLLUP, GROUPING | IE, an III

March 6, 2013 SISTEME INFORMATICE PENTRU ASISTAREA DECIZIILOR

Grupare dup jude, calcul valoare total pe jude:


SELECT jud, 'Total judet', ' ', SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti GROUP BY jud ;

Total general:
SELECT ' ', 'TOTAL GENERAL ', ' ', SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti ;

4 Introducere n OLAP ROLLUP, GROUPING | IE, an III

March 6, 2013 SISTEME INFORMATICE PENTRU ASISTAREA DECIZIILOR Realizarea subtotalurilor cu ajutorul operatorului UNION:
SELECT jud, loc, client, SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti GROUP BY jud, loc, client UNION SELECT jud, loc, ' Subtotal LOCALITATE ' ||loc, SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti GROUP BY jud, loc UNION SELECT jud, ' Subtotal JUDET '||jud, ' ', SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti GROUP BY jud UNION SELECT ' ', 'TOTAL GENERAL ', ' ', SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti ;

Cu operatorul ROLLUP asemenea operaiuni devin mult mai simple: 5 Introducere n OLAP ROLLUP, GROUPING | IE, an III

March 6, 2013 SISTEME INFORMATICE PENTRU ASISTAREA DECIZIILOR Afiarea totalurilor la nivel de localitate i jude:
SELECT jud, loc, SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti GROUP BY ROLLUP(jud, loc) ;

Afiarea totalurilor la nivel de localitate, jude i client: SELECT jud, loc, client, SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti GROUP BY ROLLUP(jud, loc, client) ;

6 Introducere n OLAP ROLLUP, GROUPING | IE, an III

March 6, 2013 SISTEME INFORMATICE PENTRU ASISTAREA DECIZIILOR Se calculeaz valoarea funciei SUM pentru atributul cel mai din dreapta al ROLLUP -ului Client (acesta se consider a fi primul subtotal), apoi cte un subtotal pentru Loc, pentru Jud i, n final, totalul general. n total sunt 3 + 1 = 4 nivele de (sub)totalizare, 3 pentru cele trei atribute plus totalul general. n cazul operatorului ROLLUP, un singur argument va determina calculul i afiarea unui total general. Dac se utilizeaz dou argumente, primul calculeaz totalul general iar al doilea calculeaz i afieaz un subtotal pentru fiecare valoare distinct a cmpului an. n cazul utilizrii a trei argumente, primul determina calcularea unui total general (Grand Total), al doilea calculeaz media pentru fiecare valoare distinct a cmpului an, iar al treilea efectueaz un subtotal pentru fiecare combinaie (an, grup).

Combinarea funciilor ROLLUP i GROUPING


Pentru un plus de claritate, formulm o interogare care s combine Rollup cu Grouping. Funcia GROUPING are ca argument coloana de grupare, rezultatul ntors fiind 1 dac coloana respectiv este inclus ntr-un grup de agregare superior, sau 0 pentru liniile normale (n afara subtotalurilor). Valoarea 1 ntoars de funcia GROUPING pentru un atribut indic un subtotal pentru acel atribut, relativ la atributele din stnga, n ordinea declarat n clauza ROLLUP. SELECT jud, Loc, Client, SUM(ValTotala) AS Val_Vanzari, GROUPING (Jud) AS Grup_Jud, GROUPING (Loc) AS Grup_Loc, GROUPING (Client) AS Grup_Client FROM vanzari_carti GROUP BY ROLLUP(jud, loc, client) ORDER BY jud, loc, client ;

7 Introducere n OLAP ROLLUP, GROUPING | IE, an III

March 6, 2013 SISTEME INFORMATICE PENTRU ASISTAREA DECIZIILOR

ROLLUP-uri pariale
Este necesar uneori ca subtotalizarea atributelor de grupare s fie parial: fie nu intereseaz totalul general, fie subtotalizarea este necesar numai pentru anumite atribute sau grupuri de atribute. Din datele existente n tabela VANZARI_CARTI se dorete gruparea pe judee, localiti, clieni, dar i pe cri (ISBN-uri). Subtotalul, ns, trebuie calculat numai la nivel client i localitate. SELECT NVL(jud,' ') AS Judet, CASE WHEN GROUPING(jud)=1 THEN 'total general ' ELSE CASE WHEN GROUPING(loc)=1 THEN 'Subtotal-judet'||jud ELSE loc END END AS localitate, CASE WHEN GROUPING(loc)=1 THEN ' ' ELSE CASE WHEN GROUPING(client) =1 THEN ' Subtotal loc. '||loc ELSE client END END AS Client, CASE WHEN GROUPING(client)=1 THEN ' ' ELSE CASE WHEN GROUPING (ISBN)=1 THEN ' Subtotal -clientul '||client ELSE isbn END END AS ISBN, SUM(ValTotala) AS Vanzari FROM VANZARI_CARTI GROUP BY jud, loc, ROLLUP(client,isbn) ;

8 Introducere n OLAP ROLLUP, GROUPING | IE, an III

March 6, 2013 SISTEME INFORMATICE PENTRU ASISTAREA DECIZIILOR

Tem: BAZ DE DATE PENTRU EVIDENA CONTRACTELOR NCHEIATE DE O AGENIE DE TURISM


O agenie de turism dorete s-i informatizeze activitatea de gestionare a contractelor ncheiate pentru pachetele de servicii pe care le ofer. Turitii sunt persoane fizice care se identific printr un cod unic nume prenume, CNP, serie i numr CI, data naterii, telefon, numr paaport. Agenia ofer mai multe categorii de servicii (excursii, cazare, bilete avion); fiecare categorie de servicii include tipuri de servicii (excursii circuit sau sejur, cazare all-inclusive sau demipensiune, bilete de avion dus, ntors, dus-ntors) pentru care se memoreaz un cod unic i denumirea serviciului. Indiferent de natura serviciului, se impune specificarea rii destinaie identificat prin cod unic i denumire; pentru ara destinaie se precizeaz localitatea destinaie, pentru care se reine codul i numele. Pentru ca oferta s fie ct mai atractiv, agenia acord anumite reduceri n funcie de vrsta turitilor; astfel, pentru turitii care au vrtsa mai mic sau egal cu 12 ani, se acord o reducere de 40% din tariful standard aferent fiecrui serviciu, iar copii care nu au mplinit nc 2 ani beneficiaz de gratuitate. 9 Introducere n OLAP ROLLUP, GROUPING | IE, an III

March 6, 2013 SISTEME INFORMATICE PENTRU ASISTAREA DECIZIILOR Fiecare prestator de servicii se identific printr-un cod unic, denumire, numrul de telefon, categoria din care se ncadreaz (compania aerian, firm de transport terestru, unitate cazare). Pentru serviciile prestate, agenia ncheie un contract de care pot beneficia mai muli turiti (de exemplu, o familie). n cadrul contractului, pe lng numrul i data ncheierii acestuia, se precizeaz turistul/turitii beneficiar(i), clauzele contractuale (drepturile/obligaiile prilor contractante), avansul, data pn la care poate achita valoarea integral a contractului, tariful standard aferent serviciului respectiv, data plecrii i data de sosire. Dac turistul renun din vina sa la serviciile care fac obiectul respectivului contract, el datoreaz ageniei despgubiri difereniate n funcie de momentul renunrii (mai exact, numrul de zile nante de data plecrii). 1. 2. 3. 4. 5. 6. 7. 8. 9. S se execute gruparea i calculul sumei tarifelor la nivel de categorii de servicii. S se execute gruparea i calculul sumei tarifelor la nivel de tipuri de servicii. S se afieze suma tuturor tarifelor. S se execute gruparea i suma tarifelor la nivel de categorie de serviciu i tip de serviciu. S se creeze subtotaluri folosind operatorul UNION, calculndu-se suma tarifelor la nivel de categorie de serviciu. S se creeze subtotaluri folosind operatorul UNION, adugndu-se interogrii anterioare gruparea i calcularea sumei tarifelor la nivel de tip de serviciu. S se scrie interogarea SQL folosind operatorul ROLLUP pentru a calcula suma tarifelor, criteriul de grupare fiind doar categoria de serviciu. S se scrie interogarea SQL folosind operatorul ROLLUP pentru a calcula suma tarifelor, criteriile de grupare fiind categoria si tipul de serviciu. S se scrie interogarea SQL folosind operatorul ROLLUP pentru a calcula suma tarifelor, criteriile fiind categoria de serviciu, tipul de serviciu i ara.

10 Introducere n OLAP ROLLUP, GROUPING | IE, an III

S-ar putea să vă placă și