Depiwotyzacja raportyzacji

https://xpil.eu/cmk

W 艣wiecie hurtowni danych mamy do czynienia nie tylko z r贸偶owymi jednoro偶cami pierdz膮cymi wonn膮, wielobarwn膮 t臋cz膮 a'la Chanson D'Eau.

Trafiaj膮 si臋 te偶 brzydkie, kostropate, utyt艂ane w ko艅skim g贸wnie stare hipopotamy, kt贸re w zasadzie powinny ju偶 dawno umrze膰 ze staro艣ci, ale skoro ju偶 trafi艂y do korporacyjnego systemu podtrzymywania 偶ycia, strasz膮 teraz uczciwych programist贸w, wywo艂uj膮c koszmary, nocne moczenie oraz bezdech.

Z jednym takim hipciem mia艂em (nie)przyjemno艣膰 wzi膮膰 si臋 jaki艣 czas temu za bary. Z potyczki wyszed艂em zwyci臋sko, wbrew oczekiwaniom czaj膮cych si臋 tu i 贸wdzie na moj膮 padlin臋 s臋p贸w.

Do艣wiadczeniem, kt贸rego nabra艂em w mi臋dzyczasie, podziel臋 si臋 dzi艣 z moimi Czytelnikami.

Prosz臋 si臋 nie obawia膰, to nie jest wpis wysoce specjalistyczny. Nie b臋dziemy pisa膰 kodu 馃槈

Zaczniemy od pocz膮tku, czyli od opisania sytuacji og贸lnej.

Jest sobie firma. Du偶a, z wieloma dzia艂ami, oddzia艂ami i przedzia艂ami (a tak偶e podzia艂ami, charakterystycznymi dla du偶ych firm).

Szef jednego z dzia艂贸w wymy艣li艂 sobie, 偶e podpisze umow臋 z zewn臋trznym dostawc膮 danych, firm膮, dajmy na to, X.

Jakich danych? To akurat bez wi臋kszego znaczenia. Mog膮 to by膰 dane o klientach, o cenach produkt贸w lub o gie艂dowych kursach stolca. Wsioryba. Wa偶ne, 偶e firma X jest w stanie te dane dostarcza膰 tak cz臋sto, jak jest to potrzebne.

Umow臋 podpisano, przez kilka lat wszystko sz艂o jak z p艂atka: firma zewn臋trzna dostarcza艂a nam dane w uzgodnionym formacie, sporadycznie trafia艂y si臋 babole, kt贸re rozwi膮zywano na bie偶膮co, wszyscy byli zadowoleni.

艢wiat jednak nie stoi w miejscu i po trzech latach okaza艂o si臋, 偶e konkurencja, firma Y, te偶 mo偶e te dane dostarczy膰. I to nie tylko taniej, ale r贸wnie偶 w szerszym zakresie.

Co robi w tym momencie firma X?

Szybciutko nadgania zaleg艂o艣ci i informuje nas, 偶e oni r贸wnie偶 mog膮 dostarczy膰 te same dane, co firma Y, za te same pieni膮dze. A je偶eli podpiszemy nowy kontrakt i op艂acimy go za trzy lata z g贸ry, mog膮 nam da膰 upust.

Skoro tak, to szkoda zachodu na zmian臋 dostawcy. Podpisujemy nowy kontrakt z firm膮 X, na kolejnych 36 miesi臋cy. Po czym odbieramy pierwsz膮 paczk臋 danych...

... i tu zaczyna si臋 moja przygoda 馃槈

Albowiem paczka danych w nowej wersji wygl膮da tak:

Plik XLSX, a w nim:
- pi臋膰 linii nag艂贸wka technicznego (data wygenerowania pliku, nazwa pliku, jakie艣 inne ma艂o istotne 艣mieci)
- jedna pusta linia
- jeszcze dwie puste linie... a nie, wr贸膰. Wcale nie takie puste. Po przewini臋ciu kilkadziesi膮t kolumn w prawo okazuje si臋, 偶e w wierszach 7 i 8 znajduj膮 si臋 tu i 贸wdzie daty. W kom贸rkach scalonych poziomo.
- linia nag艂贸wkowa, z nazwami kolumn. 艁膮cznie prawie 300 kolumn. Niekt贸re nazwy si臋 powtarzaj膮.
- jedna pusta linia
- pierwszy wiersz danych, z wype艂nion膮 wy艂膮cznie trzeci膮 kolumn膮 (czyli C, reszta kolumn - pusto)
- drugi wiersz danych (i kolejne) - w ko艅cu jakie艣 konkrety, wszystkie lub prawie wszystkie kolumny wype艂nione sensownymi danymi
- kilkaset wierszy ni偶ej - wiersz z podsumowaniem. Du偶o pustych kom贸rek, tu i 贸wdzie jaka艣 etykieta lub warto艣膰 sumaryczna.
- wiersz odst臋pu
- zn贸w wiersz danych z wype艂nion膮 wy艂膮cznie kolumn膮 trzeci膮 (kolumna C)
- du偶o danych.
- podsumowanie
- odst臋p (pusta linia)

... i tak dalej, przez mniej wi臋cej dwadzie艣cia tysi臋cy linii.

Reasumuj膮c: kto艣 wzi膮艂 dane, zrobi艂 z nich raport hierarchiczny, poci膮gn膮艂 go pivotem albo przepu艣ci艂 przez jak膮艣 inn膮 maszyn臋-straszyn臋. W efekcie wyszed艂 "raport" excelowy o rozmiarach mniej wi臋cej 300 x 20000 kom贸rek, z kt贸rego ja mam teraz zrobi膰 co艣 sensownego. Najlepiej zassa膰 go do stale rosn膮cej hurtowni danych w celu dalszych analiz.

Moja pierwsza reakcja:
(uwaga: nie klika膰 przy ma艂oletnich)
http://memy.pl/show/big/uploads/Post/23098/14469874495846.jpg

Reakcja zosta艂a przez koleg贸w oraz szefostwo przyj臋ta z pe艂nym zrozumieniem. Zapytany o dalsze kroki odrzek艂em bez wahania, 偶e nale偶y poprosi膰 firm臋 X o dane 藕r贸d艂owe, na podstawie kt贸rych wygenerowano tego excelowego potwora. W przeciwnym bowiem razie b臋dziemy musieli we w艂asnym zakresie przeprowadzi膰 de-piwotyzacj臋, granulkowanie oraz od艣miecanie tego hipopotama tylko po to, 偶eby znale藕膰 si臋 w jakim艣 sensownym punkcie startowym do raportowania.

Kto艣 tam uzna艂, 偶e gadam z sensem. Moja sugestia zosta艂a w uprzejmy spos贸b przekazana firmie X, kt贸ra jeszcze tego samego dnia odrzek艂a, 偶e owszem, takie rozwi膮zanie by艂oby najlepsze dla wszystkich, ale niestety oni nie s膮 w stanie tych surowych danych nam przekaza膰, bo co艣tam co艣tam licencja, co艣tam co艣tam stary system, co艣tam co艣tam zamkni臋ty kod, co艣tam co艣tam ju偶 tu nie pracuje, co艣tam co艣tam...

Czyli klasyka. Zap艂acili艣cie za dane, dostali艣cie dane, a 偶e dane s膮 w formacie kojarz膮cym si臋 nieco ze schematem systemu telefonii naziemnej Bangladeszu, to ju偶 wasz problem, nie nasz.

Z lekkim niepokojem oraz niewiele od niego mniejszym obrzydzeniem zabra艂em si臋 za rozbieranie padliny z hipopotama na czynniki pierwsze.

Min臋艂y dwie godziny...

... i oto mia艂em dzia艂aj膮cy kawa艂ek kodu VBA, kt贸ry ca艂e to dra艅stwo rozbiera na atomy, po czym zapisuje te atomy do osobnego arkusza w 艂adnej, standardowej postaci tabelki z pi臋cioma kolumnami oraz...

... dwa b艂臋dy p贸藕niej...

docelowo sze艣cioma milionami wierszy, tylko 偶e cholera Excel ma tylko milion z niedu偶ym hakiem. Sze艣ciu milion贸w nie zmieszcz臋, cho膰bym po nich skaka艂 i pr贸bowa艂 ugnie艣膰 jak jak膮艣 kapust臋 w beczce. No nie da si臋 i ju偶.

Co robi膰?

Wal臋 do szefostwa z zapytaniem ile w艂a艣ciwie mam na to czasu. Dostaj臋 odpowied藕, 偶e tyle, ile potrzebuj臋, bo nikt inny nie chcia艂 si臋 za to zabra膰 nawet pod gro藕b膮 tygodniowej s艂u偶by przy niszczarce. W zasadzie dobrze by by艂o, gdybym si臋 wyrobi艂 w tydzie艅, ale no pressure.

... trzy godziny p贸藕niej...

Mam dzia艂aj膮cy, nieco wi臋kszy kawa艂ek kodu VBA, kt贸ry robi dok艂adnie to samo, co przedtem, tylko zamiast zapisywa膰 wyniki do osobnego arkusza XLSX, pisze bezpo艣rednio do tabeli w warstwie stage hurtowni danych.

Jedyny problem to pr臋dko艣膰. Sto rekord贸w na sekund臋. Zapisanie sze艣ciu milion贸w rekord贸w zajmie mu {..liczu, liczu...} jakie艣 siedemna艣cie godzin, pi x oko. Je偶eli wszystko p贸jdzie bez b艂臋d贸w rzecz jasna.

Wal臋 raz jeszcze do szefostwa i pytam, ilu takich hipopotam贸w si臋 spodziewamy w jednostce czasu. Okazuje si臋, 偶e nie wiadomo. W najlepszym przypadku jednego na miesi膮c. W najgorszym - jednego dziennie.

Poniewa偶 prawa Murphy'ego nie 艣pi膮, nastawiam si臋 od razu na dwa hipopotamy dziennie i siadam do dalszej optymalizacji.

P贸艂 godziny i szklanic臋 kawy p贸藕niej mam jeszcze ciut wi臋kszy kawa艂ek kodu VBA, kt贸ry "obrabia" hipopotama w tempie mniej wi臋cej dziesi臋ciu tysi臋cy kom贸rek na sekund臋. Przy sze艣ciu milionach daje to jakie艣 dziesi臋膰 minut na ca艂o艣膰.

Not bad - klepi臋 si臋 po plecach - not bad at all - dodaj臋 po cichutku.

Z dum膮 prezentuj臋 swoje rozwi膮zanie swemu bezpo艣redniemu prze艂o偶onemu, a ten na to, 偶ebym cicho siedzia艂 i bro艅 bo偶e si臋 nie chwali艂, 偶e mamy gotowca. Bo oni na to zabud偶etowali minimum tydzie艅, a tak naprawd臋 s膮 przygotowani na dwa. Wi臋c wreszcie b臋dzie troch臋 luzu.

Dziwny 艣wiat.

https://xpil.eu/cmk

3 komentarze

  1. Dlatego na mojej sawannie [afaik tam rosn膮 jednoro偶ce i g贸wnopotamy] wprowadzili艣my co艣 takiego jak interfejs agreemenet. Wtedy 偶ycie zaskakuje nas mniej 馃槈

  2. Czytam i czytam i jestem zawiedziony. Z tytu艂y wywnioskowa艂em, 偶e b臋dzie co艣 o piwie a tu dupa. I to tak w pi膮tek!!!!

    Swoj膮 drog膮 to lubi臋 takie zlecenia. Gigantyczne ilo艣ci danych, mo偶na si臋 wy偶y膰 programistycznie, ci艣nienia nie ma, bo nikt nie wie, ile czasu to zamie. I kasa super, bo skoro nikt inny tematu nie wzi膮艂, to w takim wypadku ja stawiam warunki finansowe.

    Kiedy艣 opisa艂em histori臋, jak dosta艂em do zrobienia tablice pami膮tkowe, jakie艣 1000 nazwisk. Teoretycznie r臋cznego klepania na tydzie艅 i zwyk艂y DTPowiec tak by to dziuba艂. Ale w PHP zrobi艂em kr贸tki programik, kt贸ry wst臋pnie przygotowa艂 potrzebne dane, dzi臋ki czemu ca艂o艣膰 zaj臋艂a mi kilka godzin. Po przeliczeniu roboczogodzin wysz艂o mi ponad 100 EURO na godzin臋 馃檪

  3. takie akcje wzbudzaj膮 szacunek. To co艣 jakby jednym machni臋ciem kopary zerwa膰 gaz 艣redniego ci艣nienia i wodoci膮g na wsi przed samymi 艣wi臋tami Bo偶ego Narodzenia. Jest satysfakcja i dreszczyk emocji.

Leave a Comment

Komentarze mile widziane.

Je偶eli chcesz do komentarza wstawi膰 kod, u偶yj sk艂adni:
[code]
tutaj wstaw sw贸j kod
[/code]

Je偶eli zrobisz liter贸wk臋 lub zmienisz zdanie, mo偶esz edytowa膰 komentarz po jego zatwierdzeniu.