pondělí 23. června 2008

Interaktivní mapy na dashboardu

V souvislosti s OBI se často mluví o interaktivnosti, podpoře standardů, otevřenosti řešení. Že to nejsou jen prázdné pojmy se pokusím dokázat v následujícím příspěvku.


O co jde?
Uživatelé jistě ocení rozšíření analytických možností při zachování komfortu prostředí interaktivního dashboardu. Pro zkoumání dat z geografického hlediska můžeme analytikům nabídnout interaktivní mapu, do které jsou zaintegrovány informace z OBI.


K tomu, abychom zobrazili mapu na dashboardu a provázali ji s dalším obsahem není nutné být programátor a složitě integrovat draze zakoupený geografický software. Stačí využít možností, které nám poskytuje internet. Proč bychom tedy řešili něco, co někdo vyřešil za nás? Například portál atlas.cz nebo Google Maps (viz. ukázka využití Oracle BI v praxi) poskytuje na svých stránkách interaktivní mapy, k nimž je zároveň k dispozici otevřené API rozhraní, kterým je možno zobrazení mapy ovlivňovat. To nám umožní přímo z dashboardu zobrazit požadovaný výsek mapy v patřičném detailu, navíc s označením zvoleného města. Dodatečnou informaci o prodejích ve městě mohu získat v bublině. Ta je sice součástí mapy, ale díky tomu, že na konkrétní report v OBI se lze odkázat pomocí URL, mohu zajistit plnohodnotné zobrazení správně vyfiltrované sestavy týkající se daného města.


Přípravné práce
Předpokladem je, že v prezentační vrstvě máme k dispozici faktovou tabulku s navázanou geografickou dimenzí. V mém případě ji tvoří tabulka českých a slovenských měst (id a název) zařazeným do příslušného regionu a státu. Takto definovanou dimenzi je třeba pro naše účely rozšířit o sloupeček GPS do kterého vložíme GPS souřadnice každého města (upravené URL encoderem, např. pomocí http://www.opinionatedgeek.com/DotNet/Tools/
UrlEncode/Encode.aspx). Ty později využijeme pro volání požadované části mapy. Nový sloupeček je samozřejmě nutné zpropagovat přes fyzický a business model do příslušného prezentačního katalogu.

Faktová tabulka je kromě geografické dimenze dimenzována podle času (rok, měsíc, den) a dle produktů (kategorie produktů, produkt). Jsou v ní uloženy ukazatele Tržby, Náklady, Zisk a prodané jednotky.


Abychom mohli využívat API pro mapy na Atlas.cz, je třeba se zaregistrovat na adrese
http://amapy.atlas.cz/api/registration.aspx. Je zde také k prostudování dokumentace „AMapy API“, zejména příklady použití. Dále je potřeba mít povolené použití HTML a JavaScriptu v rámci Oracle BI reportů a dashboardů, návod naleznete zde.


Trocha JavaScriptu
Předtím, než přistoupíme k tvorbě reportů, je třeba si připravit pomocnou HTML stránku, přes kterou budeme komunikovat s Atlas mapami. Stránku musím umístit do adresáře webového serveru, v mém případě je to adresář Tomcatu (c:\Program Files\Tomcat 6.0\webapps\analytics\), jinak většinou adresář serveru přibaleného k OBI ($BI_HOME\oc4j_bi\j2ee\home\applications\analytics\analytics\).

Stěžejní částí celého postupu je kód této HTML stránky, která v hlavičce "HEAD" obsahuje JavaScriptové volání API funkcí specifikujících zobrazení mapy, v těle "BODY" pak definici velikosti oblasti "DIV", ve které se mapa objeví. Na tuto stránku se pak budeme z OBI odkazovat spolu s parametry, které API funkcím předají informaci o tom, které město se má označit.

Nejprve je třeba v hlavičce zavolat odkaz na JavaScript:

Poté s využitím dokumentace a příkladů k API může JavaScript vypadat například takto:


Kurzívou označená hodnota parametru maxUrl v kódu definuje URL odkaz na report, který se má zobrazit uvnitř mapy v bublině. Příslušný report zatím nemáme vytvořený, doplnění hodnoty můžeme nechat na později.

V samotném těle HTML dokumentu nám již stačí jen zavolat:



Příprava reportů
Nyní již máme vše připraveno k tomu, abychom mohli začít pracovat v Answers. K demonstraci řešení budeme potřebovat tři reporty:
  1. Navigační report – jednoduchý seznam měst, který použijeme pro nastavení mapy.
  2. Mapa – report, který zajistí samotné zobrazení mapy.
  3. Vnitřní report – report, který se objeví v bublině uvnitř mapy.

Navigační report je obyčejný číselník měst, které jsou pro přehlednost rozřazeny do regionů. Později, až budeme mít připravenu dashboardovou stránku zde doplníme ještě navigační link.


Zobrazení samotné mapy zajistíme zvláštním reportem, ve kterém využijeme typ zobrazení Narrative. Do výběru zařadíme sloupce Město, GPS a ID_mesta a přidáme filtr na jedno z měst. Ten slouží jako defaultní nastavení (v tomto případě nedoporučuji využít filtr typu „Is Prompted“ / "Obsahuje výzvu").

Do složeného zobrazení zařadíme jediný prvek Narrative (Popis) a do jeho těla vložíme následující HTML kód:


Kde místo localhost:8080 doplňte jméno a port vlastního serveru. Tím zajistíme zobrazení dříve připravené stránky jako součást reportu. Zároveň v URL předáváme parametry pomocí proměnných @číslo_sloupce, pomocí kterých je API funkcím předávána informace o tom, které město má být zobrazeno.


Třetím krokem je report, který se objeví v bublině uvnitř mapy. V něm uživateli předložíme podrobné informace o zvoleném městě. V mém případě jsem k městu zařadil několik ukazatelů s vazbou na časovou dimenzi (rok). Do filtru zařadíme číselný sloupec ID_mesta jako „Is Prompted“, který využijeme pro předání parametru.

Report upravíme do požadovaného zobrazení.


Po uložení se můžeme zpět vrátit k editaci HTML stránky s JavaSriptem a doplnit k hodnotě parametru maxURL správnou cestu k tomuto reportu.

http://localhost:8080/analytics/saw.dll?GO&Path=/shared//& Action=Navigate&P0=1&P1=eq&P2=Obchody.ID_mesta&P3='+id_mesta

V argumentu P2 je zadáno jméno tabulky a sloupečku (prezentační), dle kterého filtruji, do P3 předávám hodnotu JavaScript proměnné id_mesta. Více o zobrazení reportu či dashboardu pomocí URL naleznete v administrátorské dokumentaci k prezentačnímu serveru (Presentation Services Administration Guide) v kapitole Integrating Oracle BI Presentation Services into Corporate Environments Using HTTP.


Tvorba Dashboardu a revize výsledku
Nyní nám už stačí jen všechny připravené komponenty poskládat na jeden dashboard. Pro naše účely si vytvoříme zvláštní dashboard, nebo alespoň samostatnou stránku. Na něj zařadíme jednak navigační report a také samotný report s mapou.


Po uložení dashboardu se ještě vrátíme k editaci navigačního reportu, kde ve vlastnostech sloupce Město nastavíme navigaci na hodnoty. Jako cíl zvolíme právě vytvořenou dashboardovou stránku.



Rekapitulace - Fungující řešení dle popsaného postupu by mělo vypadat následovně:
V navigačním reportu na dashboardu klikneme na jedno z měst. Na akci zareaguje report s mapou, který označí vybrané město. V bublině uvnitř mapy, která ukazuje na zvolené město, se po maximalizaci zobrazí detailní report ke konkrétnímu městu.

A podrobněji:
  1. Kliknutím na konkrétní město v navigačním reportu si zavoláme znovu stránku, kterou máme zobrazenu. Na kliknutí ale zareaguje filtr v reportu s mapou (který není chráněný) a nastaví se zvolené město.
  2. Report s mapou přiřadí zvolenému městu příslušné ID_mesta a gps souřadnici. Tyto hodnoty předá jako URL parametry externí HTML stránce, kterou jsme si na začátku připravili.
  3. Tato stránka je schopna ve svém JavaScript kódu využít předané parametry jednak pro specifické volání API funkcí map na Atlas.cz a jednak pro sestavení URL pro zobrazení reportu v bublině pomocí URL.

Příspěvek vytvořil a zaslal Jakub Genža - BI/DW konzultant společnosti Sophia Solutions. Jakube díky!

Prezentováno na 1. Oracle Czech BI/DW Experts Bootcampu v sekci Úlohy, které jsem vyřešil a chci se o ně podělit s ostatními.

Žádné komentáře: