pondělí 9. června 2008

Oracle BI Metadata repository – VI. Nastavení časové dimenze a tvorba ukazatelů pro časové porovnávání

V článku "Oracle BI Metadata repository – V. Nastavení hierarchií pro dimenze, tvorba level-based a poměrových ukazatelů" je popsán "step-by-step" postup jak se v Business modelu vytvářejí hierarchie pro dimenze, a jak se na jejich základě vytvářejí level-based a poměrové ukazatele.

Cílem tohoto článku je ukázat "step-by-step" postup jak se v Business modelu nastaví časová dimenze, jak se vytvoří ukazatele pro časové porovnávaní (např. Výnosy zobrazující stav před určitým obdobím nebo YearToDate Výnosy). Dále pak, jak se jednoduše vytvoří ukazatele zobrazující změny (např. rozdíl, procenta, index), a nakonec, jak lze vše rozkategorizovat do složek a zpřístupnit koncovým uživatelům pro analytiku.

Výsledná Prezentační vrstva a Business model doplněny o ukazatele pro časové porovnávání


A/ Nastavení časové dimenze
Poznámka: Potřebujete-li vytvářet ukazatele typu "obdobíAgo" nebo "obdobíToDate", pak je nutné označit hierarchii časové dimenze příznakem "Time dimension".
V případě samotné fyzické tabulky pro časovou dimenzi je vhodné, aby datový typ sloupců pro jednotlivé úrovně (např. ROK=2008, MĚSÍC=200812) byl řetězec (STRING) - není vhodné používat číselný typ (NUMBER). Důvod je ten, že v případě použití číselného typu se ve fyzické vrstvě BI metadata repository použije typ DOUBLE (samozřejmě záleží o jaký fyzický datový typ jde), který pro "ROK=2008" bude zobrazovat hodnotu "2008,00". Toto pak může zapříčinit nesprávné fungování a počítání "Ago" ukazatelů
při drilování hodnot.

1. V Business Modelu „Prodeje“ vyberte stávající hierarchii časové dimenze DIM_OBDOBI > pravé tlačítko myši > Properties ... > a zde zaškrtněte checkbox "Time dimension"


2. Na úroveň KVARTAL v hierarchii DIM_OBDOBI přidejte sloupec KVARTAL_ID (sloupec z dimenze D_OBDOBI$ - jde o PK tabulky) a označte jej jako nový logický klíč (Drag&Drop přesuňte sloupec z dimenze do hierarchie > pravé tlačítko myši > New Logical Level Key ...)
Poznámka: Chronological key je sloupec obsahující postupně se zvětšující hodnotu v čase. Na datové typu klíče nezáleží, může jím být typ číselný, řetězec nebo datum. Klíčem by měl být zvolen sloupec, který je primárním klíčem dimenzní tabulky, tj. přes tento sloupec je proveden join mezi tabulkou dimenzní a faktovou.


3. Sloupec KVARTAL_ID označte jako Chronological Key (vyberte úroveň KVARTAL > pravé tlačítko myši > Properties ... > záložka Keys)



B/ Tvorba ukazatele zobrazující stav před obdobím
1. Do faktové tabulky F_PRODEJ$ založte nový logický sloupec pro ukazatel VYNOS_PRED_CTVRTLETIM, který bude počítán z již stávajícího ukazatele (v Business Modelu „Prodeje“ vyberte tabulku F_PRODEJ$ > pravé tlačítko myši > New Object > Logical Column ... > pojmenujte jej VYNOS_PRED_CTVRTLETIM > zaškrtněte Use existing logical columns as the source)


2. V Expression Builderu vytvořte výpočet pro zobrazení stavu před obdobím (Vyberte Functions > Time Series Functions > Ago > Insert)


3. Do AGO funkce za "Measure" doplňte Výnosy, za "Level" úroveň Čtvrtletí a za "Number of Periods" doplňte "1" (jedno čtvrtletí vzad).


4. Výsledkem je nově založený ukazatel VYNOS_PRED_CTVRTLETIM


5. Stejným způsobem založte ukazatele NAKLAD_PRED_CTVRTLETIM, VYNOS_PRED_ROKEM a NAKLAD_PRED_ROKEM (jako "Level" u ročních ukazatelů zvolte úroveň "Rok")


B/ Tvorba ukazatele YearToDate
1. Do faktové tabulky F_PRODEJ$ založte nový logický sloupec pro ukazatel VYNOS_YEAR_TODATE, který bude počítán z již stávajícího ukazatele (v Business Modelu „Prodeje“ vyberte tabulku F_PRODEJ$ > pravé tlačítko myši > New Object > Logical Column ... > pojmenujte jej VYNOS_YEAR_TODATE > zaškrtněte Use existing logical columns as the source)


2. V Expression Builderu vytvořte výpočet pro zobrazení stavu ToDate (Vyberte Functions > Time Series Functions > ToDate > Insert)


3. Do ToDate funkce za "Measure" doplňte Výnosy, za "Level" úroveň Rok.


4. Výsledkem je nově založený ukazatel VYNOS_YEAR_TODATE


5. Stejným způsobem založte ukazatel NAKLAD_YEAR_TODATE


C/ Tvorba ukazatelů zobrazující změnu mezi současností a minulostí
Poznámka: Pro účely porovnávání dvou ukazatelů je k dispozici
"Calculation Wizard", který Vám usnadní tvorbu typických ukazatelů jako jsou Změna, Procentní změna, Index nebo Procenta, a na víc Vám pomůže ošetřit výjimky jako je dělení nulou nebo práce s NULL hodnotou.

1. Ve faktové tabulce F_PRODEJ$ vyberte sloupec VYNOS > pravé tlačítko myši > Calculation Wizard


2. Vyberte ukazatele, které chce porovnávat s ukazatelem Výnos (vyberte VYNOS_PRED_CTVRTLETIM a VYNOS_PRED_ROKEM)


3. Pro oba ukazatele nechte vygenerovat ukazatele zobrazující změnu a změnu v procentech


4. Calculation Wizard vygeneruje čtyři nové ukazatele


5. Stejným způsobem postupujte i pro ukazatel Náklad


C/ Kategorizace, přesun a přejmenování nových ukazatelů v Prezentační vrstvě
Poznámka: Pro zjednodušení orientace koncových uživatelů při návrhu reportů lze prezentační metadata kategorizovat do různých podsložek. Výsledkem pak může být podobná stromová struktura:


1. Přesuňte a přejmenujte nově vytvořené ukazatele do Prezentační vrstvy


2. V Prezentační vrstvě vyberte oblast „Prodeje > pravé tlačítko myši > New Presentation Table


3. Složku pojmenujte „- Výnosy“


4. Stejným způsobem vytvořte složky se jmény „- Náklady“ a „- Zisk“



5. Do nově vytvořených složek rozdělte (Drag&Drop) dle významu ukazatele ze složky Prodej

Výsledkem jsou nově založené ukazatele zobrazující stav před obdobím, kumulativní ukazatele zobrazující YearToDate a ukazatele zobrazující změnu mezi současností a minulostí.



Příští a zároveň poslední díl bude věnován tomu, jak toto všechno dát do provozu a tím zpřístupnit koncovým uživatelům pro reporting a analýzy.
Erik Eckhardt.

3 komentáře:

kicSoftware řekl(a)...

Este by som spomenul, ze atribut, ktory chceme sledovat musi mat v logickej vrstve definovany typ agregacie, inak nebude mozne funkciu AGO pouzit.

Got BI blog řekl(a)...

Dobrý den,
náš tým řeší problematiku kalkulace délky trvání procesu, který může být i několik dnů vč. víkendů. Můžete nám poradit jak nejlépe odstranit časové úseky jako jsou víkendy a státní svátky, tak abychom získali pouze čistý čas zpracování ? V OBI jsme podobné funkce nenašli.
Podobně nevíte náhodou zda existuje nějaká funkce, která vrací počet víkendových dní v daném časové periodě?
Díky za každou radu.
Honza

BI.DW.CZ řekl(a)...

Dobrý den,
v OBI existuje funkce DayOfWeek, která vrátí číslo v rozsahu 1 až 7 odpovídající dni v týdnu (pondělí až neděle) pro zadané datum. S pomocí této funkce si můžete vytvořit umělý sloupec a na něj nastavit filtr, který bude vracet pouze pracovní dny.
Bohužel na svátky žádná funkce není.
Nejlepší bude, když si vytvoříte vlastní dimezi, která bude mít pomocný sloupec označující pracovní dny. Víkendy se dají doplnit automaticky při generování dimenze, svátky budete muset někde na internetu stáhnout a pak do dimenze doplnit.
Poté v OBI tuto dimenzi použijete s filtrem pro zobrazení pouze pracovních dnů.

S pozdravem

Eckhardt Erik