CASE – WYSYŁKA OFERTY PRENUMERATY, POST NR 1



Cześć, 


Marcinie, kilka trików tytułem przypomnienia, powtórzenia, utrwalenia. Nim przejdziemy do ćwiczeń to musi być materiał, na którym popracujemy.


Zatem:  Wydawnictwo: Super Prenumeraty, to wydawnictwo oferuje prenumeratę czasopisma TAJEMNICE ŚWIATA, jedynie drogą pocztową sprzedaje. 


To wydawnictwo zaoferowało w dniu 31 grudnia 2014 roku 100 klientom  prenumeratę za 50% ceny, jeżeli od razu zdecydują się na 2 lata. Analogiczną akcję przeprowadziło 28 lutego 2015.


W tabeli WYSYLKA_1 są zgromadzone podstawowe informacje, do kogo została skierowana promocja oraz w przypadku gdy dana osoba pozytywnie zareagowała na ofertę w polu DATA_ODPOWIEDZI jest data prenumeraty.

Proszę Marcinie utwórz tabelę WYSYLKA_1, załaduj dane do niej oraz wykonaj drobne podsumowania/grupowania, sprawdź czy rzeczywiście jest 200 wierszy w tabeli, i tym podobne. 


Kod do utworzenia tabeli, prezentacja, excel w w którym konstruowałem INSERT, to jest dostępne pod następującymi linkami. 






I tak przy okazji, nie przejmuj się, że to tylko 200 wierszy. To nie jest słaby przykład. Przykłady nie muszą, nie ma potrzeby by były liczebne.


No bo wyobraźmy sobie, mam 100 klientów, w tym 10% odpowiedziało… ale nie, to mała próba… z „wyobraźmy sobie” jest ten problem, że wystarczy pomnożyć przez 100 i już będzie duża próba. 


Gdybyśmy badali rzeczywistą sytuację, to trzeba korzystać z danych, jak jest wysyłka kierowana do 1 mln osób, to by zbadać procent zwrotów, to skorzystać trzeba z danych w komplecie, ale do ćwiczeń wymyślać miliona nie ma sensu.


W. 







AdwentureWorksLT 2012, jak podczepić, jak zrobić diagram!



Dzieci rosną, już w walce o komputer mają silne argumenty. A też i inne zmiany miały miejsce. Dlatego zainwestowałem w sprzęt. Przerwa na blogu też wynikała z niedoboru sprzętu :-)


Nabyłem T400, Lenovo, chyba 6 letni sprzęt, 2 GB RAMU, z wersją legalną WINDOWS 7 wersja 64 bitowa, za 400 PLN na Allegro. Działa, starcza.


Na tym to sprzęcie zainstalowałem bazę SQL Server Microsoftu w wersji 2014 oraz Microsoft Management Studio. I teraz potrzeba jest przykładowa baza, no naklikałem się, aż w końcu skutecznie ściągnąłem bazę demonstracyjną  AdwentureWorksLT 2012.


I co więcej, skutecznie podczepiłem, widzę ją, udało mi się utworzyć diagram dla tej bazy, tj. taki obrazek klockowy tabelek i połączeń miedzy nimi, bo to nie SQL jest najtrudniejszy.

To wiedza co, gdzie jest w bazie jest kluczowa :-)


Linka prezentacji jak podczepiłem przykładową bazę i zrobiłem diagram.



I linka do jednego z tekstów na blogu, jak startować bazę.




W. 


Wykres w excel automatycznie dostosowujący się do danych...



No właśnie, jak na podstawie danych pozyskanych z bazy za pomocą kwerendy zrobić wykres? To jedna sprawa, ale jak sobie ułatwić życie, jak zautomatyzować czynność tak by odświeżenie wykresu było szybkie, proste, przyjemne, nie wymagało de facto tworzenia go prawie od nowa?

A tu coraz to więcej danych, najpierw mam dane za miesiąc, później za dwa i tak dalej i tak dalej. Jak to zrobić by wykres się dostosowywał do coraz większej liczby danych…

Swego czasu usłyszałem od swego przełożonego, po ukończeniu wykresu na podstawie zestawu danych: 
"a w przyszłości będzie coraz więcej danych i tu już początkujący informatyk zrobi tak by wykres się automatycznie rozszerzał*" 

Może to i prawda z tym informatykiem, ale do tej pory nie wiem jak, nie nadziałem się na początkującego informatyka :-) VBA osobiście słabo znam, ale, ale...

Wystarczy inaczej nieco realizować zadanie, przecież wykres nie musi się dostosowywać do zmiennej liczby danych. 

Wystarczy wybierać z bazy kolekcję danych o stałym zakresie, stałej liczbie okresów, na przykład: dane za ostatnie 14 dni, za ostatnie 12 miesięcy, czyli liczba słupków zawsze ta sama, ale inne nieco opisy. 
To zupełnie wystarcza i ma swoje uzasadnienie nawet. Wówczas tylko dane zaciągnij z bazy lub wklej z wyniku kwerendy i już.Ideę takiego podejście przedstawia rysunek. 
 
W. 

* to odtwarzam z dość dużej perspektywy czasu, idealnie nie jestem w stanie odtworzyć, ale sens taki właśnie wypowiedzi mego przełożonego był :-)

„Słowo się rzekło, kobyła u płotu” Rozwiazanie wyzwania z 11.11.




„Słowo się rzekło, kobyła u płotu” 


Tutaj:


polecam zajrzeć do informacji o pochodzeniu tego powiedzenia. Obiecałem to słowa dotrzymuję, aczkolwiek nieco rozczarowany Marcinie jestem, iż sam nie spróbowałeś podjąć wyzwania z dnia 11.11


Po kolei zatem:




Zwykłe grupowanie z użyciem GROUP BY to już na pewno znasz


Jak rozwiązałem wyzwanie, po kolei.



Tabela zawierające surowe/źródłowe dane to ROZLICZENIA_DO_OVER_PLUS (nazwa nie jest tu kluczowa, tak wyszło). Tabela posiada cztery pola (DATA_STANU, TYP_TOWARU, KONTRAKT, SALDO) i są w tej tabeli 52 wypełnione wiersze z danymi.


Używając klauzuli WITH tworzę tabelę na bazie ww. mającej identyczną liczbę wierszy co tabela źródłowa, do każdego wiersza danych dodaje dodatkowe informacje w trzech dodatkowych polach tj.: ZLICZ, SUMA_DATA_STANU, LICZBA_DATA_STANU.

  • ZLICZ – tu wartość jest stała i jest to 1,
  • SUMA_DATA_STANU – używam funkcji analitycznej SUM, ale z opcją OVER i wskazuję, iż partycjonowanie ma być po DATA_STANU, to powoduje , iż dla każdego wiersza, mającego tę samą wartość DATA_STANU będzie dodana suma SALDO w tej dacie.
  • LICZBA_DATA_STANU – używam funkcji analitycznej COUNT, ale z opcją OVER i wskazuję, iż partycjonowanie ma być po DATA_STANU, to powoduje , iż dla każdego wiersza, mającego tę samą wartość DATA_STANU będzie dodana liczba wierszy w danej dacie, czyli można to zinterpretować jako liczbę kontraktów w danej dacie.

Polecam podejrzeć zawartość tabeli TABELA_BUFOROWANA zaznaczając kwerendę w nawiasie po klauzuli WITH i ją uruchamiając/wykonując.


No jak już mamy TABELE_BUFOROWANĄ to z niej wybieramy ponownie dane, ale już grupując tradycyjnie po DATA_STANU i TYP_TOWARU.

Tu zwracam uwagę na użycie funkcji analitycznej MAX. Każdy wiersz w TABELA_BUFOROWANA, mający tę samą wartość w polu DATA_STANU ma tez tę samą wartość w polach SUMA_DATA_STANU i LICZBA_DATA_STANU. A potrzebujemy wartości jednej, to by nie przekombinować użycie MIN lub MAX ze zbioru tych samych wartości daje szybka jedną unikalną wartość. Ten patent polecam zapamiętaj Marcinie. 

I wynik Marcinie widzisz, puściłem kwerendy na bazie ORACLE oraz na bazie MS SQL SERVER. Baza ORACLE bardzo dobrze odczytała moje intencje jeżeli chodzi o typy danych ale MS SQL SERVER już nie. Stąd konieczność użycia CAST, ROUND a i tak wynik jeszcze odbiega od oczekiwane w zakresie formatowania, ale to już Ci Marcinie zostawię do samodzielnego wykończenia.



A tutaj na koniec kod do uruchomienia, poćwiczenia na MS SQL SERVER.




Pozdrawiam,

W.