{"id":55144,"date":"2020-01-13T00:00:00","date_gmt":"2020-01-12T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/tableau-v-roznitse-realno"},"modified":"2020-02-18T14:03:13","modified_gmt":"2020-02-18T11:03:13","slug":"tableau-v-roznitse-realno","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/news\/tableau-v-roznitse-realno","title":{"rendered":"Tableau w detalicznej sprzeda\u017cy, naprawd\u0119?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><b>Czas raportowania w Excelu szybko mija \u2014 trend na wygodne narz\u0119dzia do prezentacji i analizy informacji jest widoczny we wszystkich dziedzinach. Od dawna dyskutowali\u015bmy o cyfryzacji budowania raport\u00f3w i wybrali\u015bmy system wizualizacji oraz analityki self-service Tableau. Aleksander Bezug\u0142y, kierownik dzia\u0142u rozwi\u0105za\u0144 analitycznych i raportowania Grupy \"M.Wideo-Eldorado\", opowiedzia\u0142 o do\u015bwiadczeniach i rezultatach budowy funkcjonalnego dashboardu.<\/b><\/p>\n<p>Powiem od razu, nie wszystko, co by\u0142o zaplanowane, uda\u0142o si\u0119 zrealizowa\u0107, ale do\u015bwiadczenie by\u0142o ciekawe, mam nadziej\u0119, \u017ce b\u0119dzie r\u00f3wnie\u017c przydatne dla was. A je\u015bli ktokolwiek ma pomys\u0142y na to, jak mo\u017cna by\u0142o zrobi\u0107 to lepiej \u2013 b\u0119d\u0119 bardzo wdzi\u0119czny za sugestie i pomys\u0142y.<\/p>\n<p><img decoding=\"async\" alt=\"Tableau w detalicznej sprzeda\u017cy, naprawd\u0119?\" src=\"\/wp-content\/uploads\/2020\/01\/81c41899e9b3acf1858a4faa627c121b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPoni\u017cej o tym, z czym si\u0119 zmierzyli\u015bmy i czego si\u0119 dowiedzieli\u015bmy.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Od czego zaczynali\u015bmy<\/h4>\n<p>\nW \"M.Wideo-Eldorado\" istnieje dobrze opracowany model danych: zorganizowane informacje z wymagan\u0105 g\u0142\u0119boko\u015bci\u0105 przechowywania i ogromna ilo\u015b\u0107 raport\u00f3w o sta\u0142ej formie (zobacz szczeg\u00f3\u0142y <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mvideo\/blog\/462015\/\">w tym artykule<\/a><\/noindex>). Z nich analitycy tworz\u0105 albo tabele przestawne, albo formatowane wysy\u0142ki w Excelu, albo \u0142adne prezentacje w PowerPoint dla u\u017cytkownik\u00f3w ko\u0144cowych.<\/p>\n<p>Oko\u0142o dwa lata temu zamiast raport\u00f3w o sta\u0142ej formie zacz\u0119li\u015bmy tworzy\u0107 raporty analityczne w SAP Analysis (dodatek do Excela, w zasadzie \u2013 tabela przestawna nad silnikiem OLAP). Ale to narz\u0119dzie nie mog\u0142o zaspokoi\u0107 potrzeb wszystkich u\u017cytkownik\u00f3w, wi\u0119kszo\u015b\u0107 nadal korzysta\u0142a z informacji dodatkowo przetworzonych przez analityk\u00f3w.<\/p>\n<p>Nasi u\u017cytkownicy ko\u0144cowi dziel\u0105 si\u0119 na trzy kategorie:<\/p>\n<p><b>Top management<\/b>. \u017b\u0105da informacji w dobrze przedstawionej i zrozumia\u0142ej formie.<\/p>\n<p><b>Middle management<\/b>, zaawansowani u\u017cytkownicy. Zainteresowani badaniem danych i zdolni do samodzielnego tworzenia raport\u00f3w w obecno\u015bci narz\u0119dzi. To oni stali si\u0119 kluczowymi u\u017cytkownikami raport\u00f3w analitycznych w SAP Analysis.<\/p>\n<p><b>U\u017cytkownicy masowi<\/b>. Nie s\u0105 zainteresowani samodzieln\u0105 analiz\u0105 danych, korzystaj\u0105 z raport\u00f3w o ograniczonej swobodzie, w formie wysy\u0142ek i tabel przestawnych w Excelu.<\/p>\n<p>Nasza idea opiera\u0142a si\u0119 na zaspokojeniu potrzeb wszystkich u\u017cytkownik\u00f3w i zapewnieniu im jednego wygodnego narz\u0119dzia. Zdecydowali\u015bmy si\u0119 zacz\u0105\u0107 od mened\u017cer\u00f3w wy\u017cszego szczebla. Potrzebowali oni wygodnych paneli do analizy kluczowych wynik\u00f3w biznesowych. Tak wi\u0119c zacz\u0119li\u015bmy od Tableau i na pocz\u0105tek wybrali\u015bmy dwa kierunki: wska\u017aniki sprzeda\u017cy w detalicznej i online z ograniczon\u0105 g\u0142\u0119boko\u015bci\u0105 i szeroko\u015bci\u0105 analizy, kt\u00f3re pokry\u0142yby oko\u0142o 80% danych, o kt\u00f3re prosili mened\u017cerowie wy\u017cszego szczebla.<\/p>\n<p>Poniewa\u017c u\u017cytkownikami pulpit\u00f3w nawigacyjnych byli mened\u017cerowie wy\u017cszego szczebla, pojawi\u0142 si\u0119 jeszcze jeden dodatkowy KPI produktu \u2013 czas reakcji. Nikt nie b\u0119dzie czeka\u0142 20-30 sekund, a\u017c dane si\u0119 zaktualizuj\u0105. Nawigacja powinna by\u0142a zmie\u015bci\u0107 si\u0119 w 4-5 sekundach, a najlepiej dzia\u0142a\u0107 natychmiast. Niestety, nie uda\u0142o nam si\u0119 tego osi\u0105gn\u0105\u0107.<\/p>\n<p>Oto jak wygl\u0105da\u0142 projekt naszego g\u0142\u00f3wnego pulpitu nawigacyjnego:<\/p>\n<p><img decoding=\"async\" alt=\"Tableau w detalicznej sprzeda\u017cy, naprawd\u0119?\" src=\"\/wp-content\/uploads\/2020\/01\/a7a028feee6542dfbc1fd3c2feeaa3de.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKluczowa idea \u2013 po\u0142\u0105czy\u0107 kluczowe wska\u017aniki KPI, kt\u00f3rych w sumie zebra\u0142o si\u0119 19, z lewej strony i przedstawia\u0107 ich dynamik\u0119 oraz podzia\u0142y wed\u0142ug kluczowych atrybut\u00f3w po prawej stronie. Zadanie wydaje si\u0119 proste, wizualizacja logiczna i zrozumia\u0142a, dop\u00f3ki nie zatoniesz w szczeg\u00f3\u0142ach.<\/p>\n<h2>Szczeg\u00f3\u0142 1. Obj\u0119to\u015b\u0107 danych<\/h2>\n<p>\nNasza g\u0142\u00f3wna tabela sprzeda\u017cy za rok zajmuje oko\u0142o 300 mln wierszy. Poniewa\u017c musimy odzwierciedli\u0107 dynamik\u0119 w por\u00f3wnaniu do ubieg\u0142ego i przedubieg\u0142ego roku, obj\u0119to\u015b\u0107 danych tylko dotycz\u0105cych rzeczywistej sprzeda\u017cy wynosi oko\u0142o 1 miliarda wierszy. A dodatkowo przechowywane s\u0105 osobno informacje o danych planowanych i bloku sprzeda\u017cy internetowej. Dlatego, nawet mimo i\u017c u\u017cywali\u015bmy kolumnowej bazy danych w pami\u0119ci SAP HANA, czas odpowiedzi na zapytania dotycz\u0105ce wszystkich wska\u017anik\u00f3w z jednego tygodnia z bie\u017c\u0105cych magazyn\u00f3w wynosi\u0142 oko\u0142o 15-20 sekund. Rozwi\u0105zanie tego problemu samo si\u0119 nasuwa \u2013 dodatkowa materializacja danych. Ale w tym r\u00f3wnie\u017c s\u0105 pu\u0142apki, o kt\u00f3rych powiem p\u00f3\u017aniej.<\/p>\n<h2>Szczeg\u00f3\u0142 2. Nieadtytywne wska\u017aniki<\/h2>\n<p>\nWiele naszych KPI zwi\u0105zanych jest z liczb\u0105 paragon\u00f3w. I ten wska\u017anik to COUNT DISTINCT liczby wierszy (nag\u0142\u00f3wk\u00f3w paragon\u00f3w), kt\u00f3ry pokazuje r\u00f3\u017cne kwoty w zale\u017cno\u015bci od wybranych atrybut\u00f3w. Na przyk\u0142ad, jak ten wska\u017anik oraz jego pochodne powinny by\u0107 liczone:<\/p>\n<p><img decoding=\"async\" alt=\"Tableau w detalicznej sprzeda\u017cy, naprawd\u0119?\" src=\"\/wp-content\/uploads\/2020\/01\/0a6d676f0a5c2b779a5e7892b1f54929.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAby zapewni\u0107 poprawno\u015b\u0107 oblicze\u0144, mo\u017cna:<\/p>\n<ul>\n<li>Przeprowadza\u0107 obliczenia takich wska\u017anik\u00f3w na bie\u017c\u0105co w magazynie;\n<\/li>\n<li>Przeprowadza\u0107 obliczenia na ca\u0142ej obj\u0119to\u015bci danych w Tableau, t.j. na \u017c\u0105danie w Tableau zwraca\u0107 wszystkie dane wed\u0142ug wybranych filtr\u00f3w w szczeg\u00f3\u0142owo\u015bci pozycji paragon\u00f3w;\n<\/li>\n<li>Stworzy\u0107 materializowan\u0105 witryn\u0119, w kt\u00f3rej zostan\u0105 obliczone wszystkie wska\u017aniki we wszystkich wariantach pr\u00f3bek, daj\u0105cych r\u00f3\u017cne nieaddytywne wyniki.\n<\/li>\n<\/ul>\n<p>\nJasne jest, \u017ce w przyk\u0142adzie UTE1 i UTE2 \u2013 to atrybuty materia\u0142u, reprezentuj\u0105ce hierarchi\u0119 towarow\u0105. To nie jest statyczna rzecz, przez ni\u0105 zarz\u0105dzanie w firmie, poniewa\u017c za r\u00f3\u017cne grupy towarowe odpowiadaj\u0105 r\u00f3\u017cni mened\u017cerowie. Mieli\u015bmy wiele globalnych przegl\u0105d\u00f3w tej hierarchii, kiedy zmienia\u0142y si\u0119 wszystkie poziomy, gdy przegl\u0105dano wzajemne powi\u0105zania, a tak\u017ce sta\u0142e, punktowe zmiany, gdy jedna grupa przechodzi z jednego w\u0119z\u0142a do drugiego. W zwyk\u0142ych raportach wszystko to jest liczone na bie\u017c\u0105co z atrybut\u00f3w materia\u0142u, w przypadku materializacji tych danych konieczne jest opracowanie mechanizmu \u015bledzenia takich zmian i automatycznego prze\u0142adowywania danych historycznych. Do\u015b\u0107 nietrywialne zadanie.<\/p>\n<h2>Cz\u0119\u015b\u0107 3. Por\u00f3wnanie danych <\/h2>\n<p>\nTen punkt jest podobny do poprzedniego. Chodzi o to, \u017ce w firmie podczas analizy przyjmuje si\u0119 utworzenie kilku poziom\u00f3w por\u00f3wnania z poprzednim okresem:<\/p>\n<p><i>Por\u00f3wnanie z poprzednim okresem (dzie\u0144 do dnia, tydzie\u0144 do tygodnia, miesi\u0105c do miesi\u0105ca)<\/i><\/p>\n<p>W tym por\u00f3wnaniu zak\u0142ada si\u0119, \u017ce w zale\u017cno\u015bci od wybranego przez u\u017cytkownika okresu (na przyk\u0142ad 33 tydzie\u0144 roku) musimy pokaza\u0107 dynamik\u0119 do 32 tygodnia. Gdyby\u015bmy wybrali dane za miesi\u0105c, na przyk\u0142ad maj, to to por\u00f3wnanie pokaza\u0142oby dynamik\u0119 do kwietnia.<\/p>\n<p><i>Por\u00f3wnanie z poprzednim rokiem<\/i><\/p>\n<p>G\u0142\u00f3wnym niuansem jest to, \u017ce por\u00f3wnuj\u0105c dni i tygodnie, nie mo\u017cna wzi\u0105\u0107 dok\u0142adnie tego samego dnia z poprzedniego roku, czyli nie mo\u017cna po prostu wzi\u0105\u0107 bie\u017c\u0105cego roku minus jeden. Trzeba patrze\u0107 na por\u00f3wnywany dzie\u0144 tygodnia. Natomiast przy por\u00f3wnywaniu miesi\u0119cy nale\u017cy wzi\u0105\u0107 dok\u0142adnie ten sam dzie\u0144 kalendarzowy z poprzedniego roku. S\u0105 te\u017c niuanse zwi\u0105zane z latami przest\u0119pnymi. W \u017ar\u00f3d\u0142owych zbiorach wszystkie informacje s\u0105 roz\u0142o\u017cone na dni, nie ma oddzielnych p\u00f3l dla tygodni, miesi\u0119cy, lat. Dlatego, aby uzyska\u0107 pe\u0142ny analityczny przekr\u00f3j w panelu, nale\u017cy liczy\u0107 nie jeden okres, na przyk\u0142ad tydzie\u0144, ale 4 tygodnie, a nast\u0119pnie te dane jeszcze por\u00f3wna\u0107, odzwierciedli\u0107 dynamik\u0119, odchylenia. Odpowiednio, t\u0119 logik\u0119 tworzenia por\u00f3wna\u0144 w dynamice mo\u017cna r\u00f3wnie\u017c realizowa\u0107 albo w Tableau, albo po stronie witryny. Tak, i oczywi\u015bcie znali\u015bmy te detale i my\u015bleli\u015bmy o nich ju\u017c na etapie projektowania, ale ich wp\u0142yw na wydajno\u015b\u0107 ko\u0144cowego dashboardu by\u0142o trudno przewidzie\u0107.<\/p>\n<p>Podczas wdra\u017cania dashboardu przeszli\u015bmy d\u0142ug\u0105 drog\u0119 Agile. Naszym zadaniem by\u0142o jak najszybsze udost\u0119pnienie dzia\u0142aj\u0105cego narz\u0119dzia do test\u00f3w z potrzebnymi danymi. Dlatego pracowali\u015bmy w sprintach i skupiali\u015bmy si\u0119 na minimalizacji prac po stronie bie\u017c\u0105cego magazynu.<\/p>\n<h2>Cz\u0119\u015b\u0107 1. Wiara w Tableau<\/h2>\n<p>\nAby upro\u015bci\u0107 wsparcie IT i szybkie wdra\u017canie zmian, zdecydowali\u015bmy si\u0119 stworzy\u0107 logik\u0119 obliczania wska\u017anik\u00f3w nieaddytywnych i por\u00f3wnania przesz\u0142ych okres\u00f3w w Tableau.<\/p>\n<h3>Etap 1. Wszystko na \u017cywo, \u017cadnych poprawek witryn.<\/h3>\n<p>\nNa tym etapie po\u0142\u0105czyli\u015bmy Tableau z bie\u017c\u0105cymi witrynami i postanowili\u015bmy sprawdzi\u0107, jak b\u0119dzie liczone \u0142\u0105cznie paragon\u00f3w za jeden rok.<\/p>\n<p><b>Wynik:<\/b><\/p>\n<p>Odpowied\u017a by\u0142a przygn\u0119biaj\u0105ca \u2013 20 minut. Przesy\u0142 danych przez sie\u0107, du\u017ce obci\u0105\u017cenie Tableau. Zrozumieli\u015bmy, \u017ce logik\u0119 z wska\u017anikami nieaddytywnymi nale\u017cy zrealizowa\u0107 na HANA. Nie przera\u017ca\u0142o nas to zbytnio, mieli\u015bmy ju\u017c podobne do\u015bwiadczenie z BO i Analysis i potrafili\u015bmy budowa\u0107 szybkie witryny w HANA, kt\u00f3re dostarczaj\u0105 prawid\u0142owo obliczone wska\u017aniki nieaddytywne. Teraz pozosta\u0142o tylko dostosowa\u0107 je do Tableau.<\/p>\n<h3>Etap 2. Tunelujemy witryny, \u017cadnej materializacji, wszystko na \u017cywo.<\/h3>\n<p>\nStworzyli\u015bmy osobny nowy panel, kt\u00f3ry na bie\u017c\u0105co przekazywa\u0142 wymagane dane do TABLEAU. Og\u00f3lnie uzyskali\u015bmy dobry wynik, skracaj\u0105c czas generowania wszystkich wska\u017anik\u00f3w z jednego tygodnia do 9-10 sekund. Szczerze m\u00f3wi\u0105c, spodziewali\u015bmy si\u0119, \u017ce czas odpowiedzi dashboardu w Tableau wyniesie 20-30 sekund przy pierwszym otwarciu, a nast\u0119pnie dzi\u0119ki pami\u0119ci podr\u0119cznej od 10 do 12 sekund, co w sumie by nas zadowoli\u0142o.<\/p>\n<p><b>Wynik:<\/b><\/p>\n<p>Pierwsze otwarcie dashboardu: 4-5 minut<br \/>\nKa\u017cde klikni\u0119cie: 3-4 minuty<br \/>\nNikt nie spodziewa\u0142 si\u0119 takiego dodatkowego wzrostu wydajno\u015bci panelu.<\/p>\n<h2>Cz\u0119\u015b\u0107 2. Zanurzenie w Tableau<\/h2>\n<p><\/p>\n<h3>Etap 1. Analiza wydajno\u015bci Tableau i szybka optymalizacja<\/h3>\n<p>\nZacz\u0119li\u015bmy analizowa\u0107, na co Tableau po\u015bwi\u0119ca najwi\u0119cej czasu. W tym celu dysponujemy ca\u0142kiem dobrym zestawem narz\u0119dzi, co jest oczywi\u015bcie plusem Tableau. G\u0142\u00f3wnym problemem, kt\u00f3ry zidentyfikowali\u015bmy, by\u0142y bardzo skomplikowane zapytania SQL, kt\u00f3re generowa\u0142o Tableau. By\u0142y one przede wszystkim zwi\u0105zane z:<\/p>\n<p> \u2014 transponowaniem danych. Poniewa\u017c w Tableau brakuje narz\u0119dzi do transponowania zestaw\u00f3w danych, musieli\u015bmy tworzy\u0107 tabel\u0119 przez case, aby skonstruowa\u0107 lew\u0105 cz\u0119\u015b\u0107 dashboardu z dok\u0142adnym przedstawieniem wszystkich KPI. Rozmiar zapyta\u0144 SQL w bazie danych osi\u0105ga\u0142 120 000 znak\u00f3w.<\/p>\n<p><img decoding=\"async\" alt=\"Tableau w detalicznej sprzeda\u017cy, naprawd\u0119?\" src=\"\/wp-content\/uploads\/2020\/01\/8fc4d99017ddd604bbabb5ea0a19b38d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n \u2014 wyborem okresu czasu. Takie zapytanie na poziomie bazy danych zajmowa\u0142o wi\u0119cej czasu na kompilacj\u0119 ni\u017c na wykonanie:<\/p>\n<p><img decoding=\"async\" alt=\"Tableau w detalicznej sprzeda\u017cy, naprawd\u0119?\" src=\"\/wp-content\/uploads\/2020\/01\/a9b9cc6ddd6b03c643935d070532728e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTzn. przetwarzanie zapytania 12 sekund + 5 sekund wykonanie.<\/p>\n<p>Postanowili\u015bmy upro\u015bci\u0107 logik\u0119 oblicze\u0144 po stronie Tableau i przenie\u015b\u0107 kolej cz\u0119\u015b\u0107 oblicze\u0144 na panel i poziom bazy danych. To przynios\u0142o dobre rezultaty.<\/p>\n<p>Na pocz\u0105tku dokonali\u015bmy transpozycji na bie\u017c\u0105co, stosuj\u0105c pe\u0142ne po\u0142\u0105czenie zewn\u0119trzne na ko\u0144cowym etapie obliczenia WIDOKU, zgodnie z podej\u015bciem opisanym na wiki <noindex><a rel=\"nofollow\" href=\"http:\/\/en.wikipedia.org\/wiki\/Transpose\">Transpose \u2014 Wikipedia, wolna encyklopedia<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"http:\/\/en.wikipedia.org\/wiki\/Elementary_matrix#Row-addition_transformations\">Elementary matrix \u2014 Wikipedia, wolna encyklopedia<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Tableau w detalicznej sprzeda\u017cy, naprawd\u0119?\" src=\"\/wp-content\/uploads\/2020\/01\/5259995831dc8ae379a34bfe84e52daa.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo znaczy, \u017ce stworzyli\u015bmy tabel\u0119 konfiguracyjn\u0105 \u2013 macierz transponuj\u0105c\u0105 (21x21) i uzyskali\u015bmy wszystkie wska\u017aniki w rozbiciu wierszowym.<\/p>\n<p>By\u0142o:<br \/>\n<img decoding=\"async\" alt=\"Tableau w detalicznej sprzeda\u017cy, naprawd\u0119?\" src=\"\/wp-content\/uploads\/2020\/01\/9382ee65a1482cc137a52b5f80c39eeb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSta\u0142o si\u0119:<br \/>\n<img decoding=\"async\" alt=\"Tableau w detalicznej sprzeda\u017cy, naprawd\u0119?\" src=\"\/wp-content\/uploads\/2020\/01\/1d6653ec427ce0621b441943f589d860.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa samo transponowanie bazy danych czas w\u0142a\u015bciwie si\u0119 nie traci. Zapytanie po wszystkich wska\u017anikach za tydzie\u0144 dzia\u0142a\u0142o nadal w oko\u0142o 10 sekund. Jednak utracona zosta\u0142a elastyczno\u015b\u0107 w budowie dashboardu dla konkretnego wska\u017anika, tzn. w prawej cz\u0119\u015bci dashboardu, gdzie przedstawiona jest dynamika i szczeg\u00f3\u0142owy podzia\u0142 konkretnego wska\u017anika, wcze\u015bniej witryna dzia\u0142a\u0142a w 1-3 sekundy, poniewa\u017c zapytanie dotyczy\u0142o jednego wska\u017anika, a teraz baza danych zawsze wybiera\u0142a wszystkie wska\u017aniki i filtruje wynik ju\u017c przed zwr\u00f3ceniem rezultatu w Tableau.<\/p>\n<p>W rezultacie pr\u0119dko\u015b\u0107 dzia\u0142ania dashboardu zmniejszy\u0142a si\u0119 prawie trzy razy.<\/p>\n<p><b>Wynik:<\/b><\/p>\n<ol>\n<li>5 sek \u2014 parsowanie dashboardu, wizualizacji<\/li>\n<li> 15-20 sek \u2014 przygotowanie do kompilacji zapyta\u0144 z wykonaniem wst\u0119pnych oblicze\u0144 w Tableau<\/li>\n<li> 35-45 sek \u2014 kompilacja zapyta\u0144 SQL i jednoczesne sekwencyjne ich wykonanie w Hana<\/li>\n<li> 5 sek \u2014 przetwarzanie wynik\u00f3w, sortowanie, przeliczenie wizualizacji w Tableau<\/li>\n<li>Oczywi\u015bcie takie wyniki nie by\u0142y akceptowalne dla biznesu, wi\u0119c kontynuowali\u015bmy optymalizacj\u0119.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Etap 2. Minimum logiki w Tableau, pe\u0142na materializacja<\/h3>\n<p>\nRozumieli\u015bmy, \u017ce zbudowanie dashboardu z czasem reakcji w kilku sekundach na witrynie, kt\u00f3ra dzia\u0142a 10 sekund, jest niemo\u017cliwe i rozwa\u017cali\u015bmy opcje materializacji danych po stronie bazy danych w\u0142a\u015bnie pod wymagany dashboard. Jednak napotkali\u015bmy globalny problem, opisany powy\u017cej \u2013 nieadekwatne wska\u017aniki. Nie mogli\u015bmy zrobi\u0107 tak, aby przy zmianie filtr\u00f3w lub rozwini\u0119\u0107 Tableau elastycznie prze\u0142\u0105cza\u0142o si\u0119 mi\u0119dzy r\u00f3\u017cnymi witrynami i poziomami, wst\u0119pnie obliczonymi dla r\u00f3\u017cnych hierarchii towarowych (w przyk\u0142adzie trzy zapytania bez UTE, z UTE1 i UTE2 tworz\u0105 r\u00f3\u017cne wyniki). Dlatego podj\u0119li\u015bmy decyzj\u0119 o uproszczeniu dashboardu, porzuceniu hierarchii towarowej w dashboardzie i zobaczeniu, jak szybki mo\u017ce by\u0107 w uproszczonej wersji.<\/p>\n<p>Tak wi\u0119c na tym ostatnim etapie zebrali\u015bmy osobne repozytorium, w kt\u00f3rym z\u0142o\u017cono w transponowanej formie wszystkie KPI. Po stronie bazy danych ka\u017cde zapytanie do takiego repozytorium dzia\u0142a w 0,1 \u2013 0,3 sekundy. W dashboardzie uzyskali\u015bmy nast\u0119puj\u0105ce wyniki:<\/p>\n<p>Pierwsze otwarcie: 8-10 sekund<br \/>\nKa\u017cde klikni\u0119cie: 6-7 sekund<\/p>\n<p>Czas, kt\u00f3ry wydaje Tableau, sk\u0142ada si\u0119 z:<\/p>\n<ol>\n<li>0,3 sek \u2014 parsowanie dashboardu i kompilacja zapyta\u0144 SQL\n<\/li>\n<li>1,5-3 sek \u2014 wykonanie zapyta\u0144 SQL w Hana dla g\u0142\u00f3wnych wizualizacji (uruchamiane r\u00f3wnolegle z pkt. 1)\n<\/li>\n<li>1,5-2 sek. \u2014 renderowanie, przeliczenie wizualizacji\n<\/li>\n<li>1,3 sek. \u2014 wykonywanie dodatkowych zapyta\u0144 SQL w celu uzyskania odpowiednich warto\u015bci filtr\u00f3w (Marka, Dzia\u0142, Miasto, Sklep), parsowanie wynik\u00f3w\n<\/li>\n<\/ol>\n<p><\/p>\n<h3>Je\u015bli podsumowa\u0107 w skr\u00f3cie<\/h3>\n<p>\nPodoba\u0142 nam si\u0119 tool Tableau z punktu widzenia wizualizacji. Na etapie projektowania rozwa\u017cali\u015bmy r\u00f3\u017cne elementy wizualizacji i wszystkie je znale\u017ali\u015bmy w bibliotekach, w tym z\u0142o\u017cone, wielowarstwowe segmentacje i wiele sterownik\u00f3w waterfall.<\/p>\n<p>Implementuj\u0105c dashboardy z kluczowymi wska\u017anikami sprzeda\u017cy, napotkali\u015bmy na trudno\u015bci wydajno\u015bciowe, kt\u00f3rych jeszcze nie uda\u0142o nam si\u0119 pokona\u0107. Po\u015bwi\u0119cili\u015bmy ponad dwa miesi\u0105ce i uzyskali\u015bmy funkcjonalnie niepe\u0142ny dashboard, kt\u00f3rego czas reakcji jest na granicy akceptowalnego. Wyci\u0105gn\u0119li\u015bmy wnioski:<\/p>\n<ol>\n<li>Tableau nie obs\u0142uguje du\u017cych wolumen\u00f3w danych. Je\u015bli w pierwotnym modelu danych masz wi\u0119cej ni\u017c 10 GB danych (oko\u0142o 200 mln x 50 wierszy), dashboard powa\u017cnie spowalnia \u2014 od 10 sekund do kilku minut na ka\u017cdy klik. Eksperymentowali\u015bmy zar\u00f3wno podczas po\u0142\u0105cze\u0144 na \u017cywo, jak i przy ekstrakcie. Pr\u0119dko\u015b\u0107 pracy by\u0142a por\u00f3wnywalna.\n<\/li>\n<li>Ograniczenia przy u\u017cyciu kilku zbior\u00f3w danych. Nie ma mo\u017cliwo\u015bci standardowymi narz\u0119dziami wskaza\u0107 powi\u0105za\u0144 zbior\u00f3w danych. Je\u015bli u\u017cy\u0107 obej\u015bciowych rozwi\u0105za\u0144 do po\u0142\u0105czenia zbior\u00f3w danych, wp\u0142ynie to znacz\u0105co na wydajno\u015b\u0107. W naszym przypadku rozwa\u017cali\u015bmy opcj\u0119 materializacji danych w ka\u017cdym wymaganym zestawieniu wizualizacji, a na tych zmaterializowanych zbiorach danych dokonywa\u0107 prze\u0142\u0105cze\u0144 z zachowaniem wcze\u015bniej wybranych filtr\u00f3w \u2014 co okaza\u0142o si\u0119 niemo\u017cliwe do zrealizowania w Tableau.\n<\/li>\n<li>W Tableau nie mo\u017cna tworzy\u0107 dynamicznych parametr\u00f3w. Nie mo\u017cesz uzupe\u0142nia\u0107 parametru, kt\u00f3ry jest wykorzystywany do filtrowania zbioru danych w ekstrakcie lub przy po\u0142\u0105czeniu na \u017cywo, wynikiem innego zestawienia z zbioru danych lub rezultatem innego zapytania SQL, tylko natywnym wk\u0142adem u\u017cytkownika lub sta\u0142\u0105.\n<\/li>\n<li>Ograniczenia zwi\u0105zane z budowaniem dashboardu z elementami OLAP|Tabeli przestawnej. <br \/>\nW MSTR, SAP SAC, SAP Analysis, je\u015bli dodajesz zestaw danych do raportu, to wszystkie obiekty s\u0105 domy\u015blnie ze sob\u0105 powi\u0105zane. W Tableau nie ma tego, po\u0142\u0105czenia trzeba ustawia\u0107 r\u0119cznie. To, mo\u017ce, jest bardziej elastyczne, ale dla wszystkich naszych pulpit\u00f3w nawigacyjnych to wym\u00f3g dotycz\u0105cy element\u00f3w \u2013 dlatego to dodatkowy nak\u0142ad pracy. Co wi\u0119cej, je\u015bli robisz powi\u0105zane filtry, aby na przyk\u0142ad przy filtrowaniu regionu lista miast by\u0142a ograniczona tylko do miast w tym regionie, od razu trafiasz na kaskadowe zapytania do bazy danych lub ekstraktu, co znacznie spowalnia pulpit.<\/li>\n<li>Ograniczenia w funkcjach. Zar\u00f3wno nad ekstraktem, jak i TYM BARDZIEJ nad zestawem danych z Live-connecta nie mo\u017cna robi\u0107 masowych przekszta\u0142ce\u0144. Mo\u017cna to robi\u0107 przez Tableau Prep, ale to dodatkowy nak\u0142ad pracy i jeszcze jedno narz\u0119dzie, kt\u00f3re trzeba nauczy\u0107 si\u0119 i utrzyma\u0107. Na przyk\u0142ad, nie mo\u017cesz przetransponowa\u0107 danych, po\u0142\u0105czy\u0107 ich samych ze sob\u0105. To zamyka si\u0119 w przekszta\u0142ceniach w poszczeg\u00f3lnych kolumnach lub polach, kt\u00f3re trzeba wybiera\u0107 przez case lub if, co generuje bardzo skomplikowane zapytania SQL, przy kt\u00f3rych baza g\u0142\u00f3wnie traci czas na kompilacj\u0119 tekstu zapytania. Te sztywno\u015bci narz\u0119dzia musia\u0142y by\u0107 rozwi\u0105zane na poziomie witryny, co prowadzi do komplikacji w przechowywaniu, dodatkowych \u0142adowaniach i przekszta\u0142ceniach.\n<\/li>\n<\/ol>\n<p>\nNie skre\u015blili\u015bmy Tableau. Ale jako narz\u0119dzie zdolne do budowania przemys\u0142owych pulpit\u00f3w nawigacyjnych i \u015brodek, za pomoc\u0105 kt\u00f3rego mo\u017cna zast\u0105pi\u0107 i zdigitalizowa\u0107 ca\u0142y system korporacyjnego raportowania firmy, Tableau nie jest rozwa\u017cane.<\/p>\n<p>Obecnie aktywnie opracowujemy podobny pulpit w innym narz\u0119dziu i r\u00f3wnolegle staramy si\u0119 przemy\u015ble\u0107 architektur\u0119 pulpitu w Tableau, aby upro\u015bci\u0107 j\u0105 jeszcze bardziej. Je\u015bli spo\u0142eczno\u015bci b\u0119dzie to interesowa\u0107 \u2013 opowiemy o wynikach.<\/p>\n<p>Czekamy r\u00f3wnie\u017c na wasze pomys\u0142y lub sugestie, jak w Tableau mo\u017cna budowa\u0107 szybkie pulpity nad tak du\u017cymi ilo\u015bciami danych, poniewa\u017c mamy r\u00f3wnie\u017c stron\u0119, na kt\u00f3rej danych jest znacznie wi\u0119cej ni\u017c w sprzeda\u017cy detalicznej.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mvideo\/blog\/483656\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0440\u0435\u043c\u044f \u043e\u0442\u0447\u0451\u0442\u043d\u043e\u0441\u0442\u0438 \u0432 Excel \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0445\u043e\u0434\u0438\u0442 \u2014 \u0442\u0440\u0435\u043d\u0434 \u043d\u0430 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432\u0438\u0434\u0435\u043d \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u0444\u0435\u0440\u0430\u0445. \u041c\u044b \u0434\u0430\u0432\u043d\u043e \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043e\u0442\u0447\u0451\u0442\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 self-service \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 Tableau. \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0411\u0435\u0437\u0443\u0433\u043b\u044b\u0439, \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043e\u0442\u0434\u0435\u043b\u0430 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0438 \u043e\u0442\u0447\u0451\u0442\u043d\u043e\u0441\u0442\u0438 \u0413\u0440\u0443\u043f\u043f\u044b \u00ab\u041c.\u0412\u0438\u0434\u0435\u043e-\u042d\u043b\u044c\u0434\u043e\u0440\u0430\u0434\u043e\u00bb, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043e\u0431 \u043e\u043f\u044b\u0442\u0435 \u0438 \u0438\u0442\u043e\u0433\u0430\u0445 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0431\u043e\u0435\u0432\u043e\u0433\u043e \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430. \u0421\u043a\u0430\u0436\u0443 \u0441\u0440\u0430\u0437\u0443, \u043d\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-55144","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0440\u0435\u043c\u044f \u043e\u0442\u0447\u0451\u0442\u043d\u043e\u0441\u0442\u0438 \u0432 Excel \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0445\u043e\u0434\u0438\u0442 \u2014 \u0442\u0440\u0435\u043d\u0434 \u043d\u0430 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432\u0438\u0434\u0435\u043d \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u0444\u0435\u0440\u0430\u0445.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/news\/tableau-v-roznitse-realno\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Tableau \u0432 \u0440\u043e\u0437\u043d\u0438\u0446\u0435, \u0440\u0435\u0430\u043b\u044c\u043d\u043e? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0440\u0435\u043c\u044f \u043e\u0442\u0447\u0451\u0442\u043d\u043e\u0441\u0442\u0438 \u0432 Excel \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0445\u043e\u0434\u0438\u0442 \u2014 \u0442\u0440\u0435\u043d\u0434 \u043d\u0430 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432\u0438\u0434\u0435\u043d \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u0444\u0435\u0440\u0430\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/news\/tableau-v-roznitse-realno\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-01-12T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:13+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Tableau w handlu detalicznym, naprawd\u0119? | ProHoster","description":"Czas raportowania w Excelu szybko mija \u2014 trend na wygodne narz\u0119dzia do prezentacji i analizy informacji widoczny jest we wszystkich dziedzinach.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/news\/tableau-v-roznitse-realno","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Tableau \u0432 \u0440\u043e\u0437\u043d\u0438\u0446\u0435, \u0440\u0435\u0430\u043b\u044c\u043d\u043e? | ProHoster","og:description":"\u0412\u0440\u0435\u043c\u044f \u043e\u0442\u0447\u0451\u0442\u043d\u043e\u0441\u0442\u0438 \u0432 Excel \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0445\u043e\u0434\u0438\u0442 \u2014 \u0442\u0440\u0435\u043d\u0434 \u043d\u0430 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432\u0438\u0434\u0435\u043d \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u0444\u0435\u0440\u0430\u0445.","og:url":"https:\/\/prohoster.info\/pl\/blog\/news\/tableau-v-roznitse-realno","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-01-12T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:13+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55144","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:50:02","updated":"2022-10-05 23:10:07","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/55144","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=55144"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/55144\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=55144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=55144"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=55144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}