Banner

utorok 17. marca 2015

Moderný reporting–prvý report (1. časť)

 

Dostávame sa k prvej biznisovej otázke:

Koľko jednotlivý predajca predal áut v danom regióne, pričom platí, že predajcovia kolujú medzi predajňami.

Na nasledujúcom obrázku máme vyznačné tabuľky, vrámci ktorých budeme pripravovať query:

Pic1

Ak použijeme jednoduchú query na počet záznamov (predajov) dostaneme nasledujúci výsledok:

select count(*) as 'Počet' from sales; výsledok: 17472

Čo je na Škoda auto celkom málo, avšak relevantné data ešte len prídu. Ak si rozšírime query podľa rokov a mesiacov, dostaneme nasledujúci výsledok:

select Mesiac, Rok, count(*) as 'Počet' from sales group by Mesiac, Rok;

image

Teraz nasleduje pripojenie Predajcov, takže použijeme Join klauzulu. Všimnite si logiku pochodu, kde celkový počet rozdeľujem do detailov, pričom Grand Total mi slúži ako kontrola selektu (Predchádzajúcu tabuľku som pripravil v Exceli samozrejme):

select sales.Mesiac as 'Mesiac', sales.Rok as 'Rok', Dealer.Predajca as 'Díler', count(*) as 'Počet' from sales left join Dealer on sales.Predajca = Dealer.ID group by sales.Mesiac, sales.Rok, Dealer.Predajca;

Výsledok, vzhľadom k tomu, že sa už v tomto prípade jedná o celkom veľkú Pivotku je obmedzený na rok 2014 vo filtri, kde si môžeme prepínaním overiť predajnosť dealerov vzhľadom k totálu (728 vozidiel pre všetky mesiace, 672 ročný predaj každého dílera):

image

Vezmime si teraz napríklad Romana, ktorého celkový predaj za Január v roku 2014 má byť 56 vozidiel. Rozšírime tento skript o hodnoty z tabuľky City:

select sales.Mesiac as 'Mesiac', sales.Rok as 'Rok', City.Mesto as 'Mesto', Dealer.Predajca as 'Díler', count(*) as 'Počet' from sales left join Dealer on sales.Predajca = Dealer.ID  left join City on sales.Mesto = City.ID group by sales.Mesiac, sales.Rok, Dealer.Predajca, City.Mesto;

image

Celkovo si všimnite, že sa nám mesačná predajnosť zhoduje (56 áut) spolu s celkovou predajnosťou dílera za rok 2014 (672 áut).

Ako posledný skript budeme uvažovať doplnenie o typ auta, t.z. pridanie tabuľky Car:

select sales.Mesiac as 'Mesiac', sales.Rok as 'Rok', City.Mesto as 'Mesto', Car.Auto as 'Auto', Dealer.Predajca as 'Díler', count(*) as 'Počet' from sales left join Dealer on sales.Predajca = Dealer.ID  left join City on sales.Mesto = City.ID left join Car on sales.Auto = car.ID  group by sales.Mesiac, sales.Rok, Dealer.Predajca, City.Mesto, Car.Auto;

image

Platí, že pre každý mesiac predá presne po jednom kuse špecifického modelu.

Ako už iste tušíte, tieto data nepatria medzi najvhodnejšie vrámci budovania reportov. No vzhľadom k tomu, že chcem aby sa Vám SQL-ko dostalo čo najskôr pod kožu, zvolil som túto predbežnú cvičnú databázku (17472 = 728 x 12 x 2 – Tabuľka 1 alebo 56 x 12 x 13 x [2 – Filter] – Tabuľka2 alebo 8 x 7 x 12 x [13 x 2 – Filter] alebo 7 x 1 x 12 x [13 x 2 x 8 – Filter] – Tabuľka3).

Nabudúce si povieme niečo k obsahu reportu, resp. ako má report vyzerať a budeme kresliť Winking smile