Mihaela Muntean
2015
Cuprins
Implementarea operatiilor OLAP de baza in SQL -traditional:
◦ Rollup
◦ Slice
◦ Dice
◦ Pivotare
SQL-2008
◦ Optiunea ROLLUP
◦ Optiunea CUBE, grouping sets
◦ Optiunea PIVOT
◦ RANK(), DENSE_RANK()
Mihaela Muntean
Operaţii de bază
Slice şi dice sau selecţii în cub.
◦ “Afişează vânzările anuale din Bucureşti”.
Drill down / rollup - utilizează ierarhiile din dimensiuni
şi măsurile pentru agregări sau de-agregări.
Drill across - combină mai multe cuburi cu una sau mai
multe dimensiuni comune (joncţiunea de cuburi).
Ranking sau top/bottom n -analize de tip “primii n” sau
“ultimii n” după anumite criterii.
Pivotare/rotirea unui cub pentru a pune în evidenţă alte
aspecte analitice.
Mihaela Muntean
Mihaela Muntean
SELECT –SQL traditional
Cererile OLAP utilizeaza:
◦ functii de agregare (COUNT, SUM, AVERAGE,
MIN, MAX )
◦ clauza GROUP By
roll-up, drill-down
slice, dice
pivot
Mihaela Muntean
Se considera urmatoarea tabela de fapte VVanzari cu masura Cantitate
Tabelele de dimensiuni:
VLocatie (MagId, Oras ……),
VProdus (ProdId, Denumire_prod, Categorie……) ,
VTimp (TimpId, luna…….)
Mihaela Muntean
Roll-up dimensional
pe tabela de fapte prin eliminarea unei dimensiuni /mai multor
dimensiuni, in timp ce dimensiunile ramase sunt reprezentate de
cheile lor in clauza Group By
Mihaela Muntean
Roll-up ierarhic
Mihaela Muntean
Roll-up ierarhic
Roll-up ierarhic dupa doua dimensiuni ( doua ierarhii )- vanzarile dupa
oras, categorie si zi
SELECT categorie, oras, TimpId, SUM(cantitate ) AS Tip_oras_Total
FROM Vvanzari v, VProdus p, VLocatie l
WHERE v.magId = l.magId AND v.ProdId = p.ProdId
GROUP BY categorie, oras, TimpId order by categorie, oras, timpid;
Roll-up dupa trei dimensiuni -vanzarile dupa categorie, oras si luna.
SELECT categorie, oras, luna,
SUM(cantitate ) AS Tip_oras_luna_Tot
FROM Vvanzari v, VProdus p, VLocatie l, VTimp t
WHERE v.magId = l.magId AND v.ProdId = p.ProdId
AND v.TimpId = t.TimpId
GROUP BY categorie, oras, luna order by categorie, oras, luna; Mihaela Muntean
Slice= Selectia unei sg valori dintr-o dimensiune
Wellington
Nelson
Auckland January February March
Linear 23 1 13
Wellington
Nelson
January February March
Auckland
Linear 23 1 13
Mihaela Muntean
GROUP BY ROLLUP (denumire, zi);
SELECT denumire, zi, SUM(cantitate) AS vanzari
FROM vanzari v, Locatie l, Timp t
Where V.Orasid = L.Orasid And V.Timpid = T.Timpid
Group By Denumire, Zi
Union
SELECT denumire,null, SUM(cantitate) AS vanzari
FROM vanzari v, Locatie l, Timp t
Where V.Orasid = L.Orasid And V.Timpid = T.Timpid
Group By Denumire, null
Union
SELECT null, null, SUM(cantitate) AS vanzari
FROM vanzari v, Locatie l, Timp t
Where V.Orasid = L.Orasid And V.Timpid = T.Timpid ;
Mihaela Muntean
Rollup parţial
Mihaela Muntean
Operatorul CUBE
Mihaela Muntean
Operatorul CUBE
SELECT denumire, zi, SUM(cantitate) AS vanzari
FROM vanzari v, Locatie l, Timp t
WHERE v.orasId = l.orasid AND v.TimpId = t.TimpId
GROUP BY CUBE (denumire, zi);
Nume, denumire, zi
denumire zi
nume
{}
Grouping SETS
Criterii de grupare mai selective decat la CUBE
Identic cu:
Group by denumire, zi
Union all
Group by denumire
SELECT denumire, zi, SUM(cantitate) AS vanzari
FROM vanzari v, Locatie l, Timp t
WHERE v.orasId = l.orasid AND v.TimpId = t.TimpId
GROUP BY grouping sets ((denumire, zi), (denumire), ());
ROLLUP(denumire, zi)!!!!!!
Select Null, Null, sum(cantitate) as vanzari
FROM vanzari v, Locatie l, Timp t
WHERE v.orasId = l.orasid AND v.TimpId = t.TimpId
Union All
SELECT denumire, zi, SUM(cantitate) AS vanzari
FROM vanzari v, Locatie l, Timp t
WHERE v.orasId = l.orasid AND v.TimpId = t.TimpId
GROUP BY denumire, zi
Union all
SELECT denumire, null, SUM(cantitate) AS vanzari
FROM vanzari v, Locatie l, Timp t
WHERE v.orasId = l.orasid AND v.TimpId = t.TimpId
GROUP BY denumire;
Operatia de pivotare
SELECT *
FROM <table-expr>
PIVOT
(aggregate-function(<column>)
FOR <pivot-column> IN (<value1>, <value2>,...,
<valuen>) ) AS <alias>
WHERE .....