Tabela przestawna



Dzisiaj nieco z innej beczki. Nieco z codzienności pracy analityka danych. Najpierw podłoże (tło zadania):

Firma sprzedaje tablety, komputery i akcesoria do nich. Sprzedażą zajmuje się kilkanaście osób podzielonych na cztery regiony. Każdy sprzedawany produkt  jest przypisany do jednej z czterech grup cenowych de facto oznaczających wysokość marży (1 – 2%, 2 – 5%, 3 – 7%, 4 – 10%, 5 – 13%). Sprzedaż jest prowadzona od początku 2010 roku i mamy dane za cztery lata.

Analityk danych został zaproszony na spotkanie jako konsultant -> źródło informacji. Spotkanie ma być pomiędzy Sprzedażą a Zarządem i będzie dotyczyć programu premiowania.

No właśnie, zatem jak ma się przygotować do tego spotkania Analityk, przecież nie będzie wyłącznie zbierał pytania :-)

Analityk danych ponieważ wie, iż w trakcie spotkania nie będzie miał połączenia z bazą danych przygotowuje sobie kostkę danych, po prostu danymi wstępnie już agregowanymi - poniżej przykładowa kwerenda. Te dane zapisuje w formacie EXCEL. Tak będąc przygotowanym jest w stanie szybko tworzyć dodatkowe wykresy, tabelki, podsumowania korzystając z wbudowanej funkcjonalności EXCEL tj. możliwości wstawienia tabeli przestawnej.

W załączeniu kilka slajdów jak ustawić tabelę przestawną (tutaj) oraz plik w excelu z przykładowymi danymi oraz zrobionymi przykładowymi tabelami przestawnymi i wykresem przestawnym (tutaj). 

select

  to_char(data_transakcji,'YYYY') rok
, to_char(data_transakcji,'YYYY-MM') rok_miesiac
, sprzedawca
, case
    when (produkt_kod,1,1)='K' then '1 Komputer'
    when (produkt_kod,1,1)='T' then '2 Tablet' 
  end linia_produktowa;
, grupa_cenowa
, case
    when region in (1,2,3,4) then 'Północ'
    when region in (5,6,7,8) then 'Południe'
    when region in (9,10,11,12) then 'Wschód'
    when region in (13,14,15,16,17) then 'Zachód'
  end region
, sum(kwota_transakcji) sprzedaz
, count(*) liczba transakcji

from baza_traksakcji

where

to_char(data_transakcji,'YYYY') in  ('2010','2011','2012','2013');
group by
to_char(data_transakcji,'YYYY')
, to_char(data_transakcji,'YYYY-MM')
, sprzedawca
, case
    when (produkt_kod,1,1)='K' then '1 Komputer'
    when (produkt_kod,1,1)='T' then '2 Tablet' 
   end
, grupa_cenowa
, case
    when region in (1,2,3,4) then 'Północ'
    when region in (5,6,7,8) then 'Południe'
    when region in (9,10,11,12) then 'Wschód'
    when region in (13,14,15,16,17) then 'Zachód'
    end;


W.

Oracle SQL Developer, eksport danych do formatu czytanego przez EXCEL



Marcinie,

Tym razem inaczej sprawę przedstawię niż dotychczas, dzisiaj premiera nowinki. Tu przyznam się, że takie rozwiązanie podpowiedziała mi koleżanka z pracy Aneta, dziękuję przy okazji. 

Po prostu jak wyeksportować wynik zapytania do formatu czytanego przez EXCEL przedstawia załączony krótki film.

Tu tylko dodam, to czego na filmie nie widać, iż by eksport przez Oracle SQL Developer był możliwy to każde pole, kolumna musi mieć unikalną nazwę.

Jeżeli w wyniku zapytania masz na przykład ID, ale raz z tabeli A, a drugi raz z tabeli B, czyli widzisz A.ID oraz B.ID, to nie może tak być – eksport się nie powiedzie, taki feler tego oprogramowania.

Jeżeli nie działa wklejony film to ten sam jest dostępny pod linkiem. 

W. 



Konkurs pierwszy zakończony!

Cześć, 

Wraz z Marcinem komunikuję, iż termin na nadsyłanie odpowiedzi minął. Był moment, iż Marcin miał rzutem na taśmę wysłać odpowiedź, bo nie był wykluczony z konkursu, by nie było iż nikt.
Nie było jednak potrzeby :-) Przyszła wiadomość a w niej prawidłowa odpowiedź :-) Oczywiście do prawidłowego wyniku można dojść w różny sposób, poniżej dwa sposoby. Pierwszy polega na wykorzystaniu dodatkowej klauzuli „having” drugi sposób to technika polegająca na wykorzystaniu możliwości wybierania nie z tabel, ale z zapytania. Oba sposoby dobre.

1 sposób 

select
   data_stanu
 , sum(saldo) saldo
 , (45000-sum(saldo) ) wykorzystanie_kredytu
   from salda group by data_stanu
 having sum(saldo) > 45000;

2 sposób


select
data_stanu
, suma_sald saldo
, -(suma_sald - 45000) wykorzystanie_kredytu
from
(select
  data_stanu
  , sum(saldo) suma_sald
   from salda
   group by data_stanu)
where suma_sald > 45000;

Zwycięzcą jest Aneta, której bardzo dziękuję za udział w konkursie, do niej trafi nieco zmodyfikowana wersja nagrody, mam nadzieję, iż się spodoba. Jeżeli nie, proszę o sygnał!
Pozdrawiam,
W.