čtvrtek 11. února 2010

Jak na porovnání dvou verzí plánů v Oracle BI

Článek ukazuje, jak lze poměrně „jednoduše“ zajistit porovnání záznamů v tabulce faktů a zobrazit rozdíly mezi nimi.

Datový model (zjednodušeně):
Tabulka faktů: sloupce leden, unor, … prosinec, na úrovni business modelu dodělány součty po kvartálech ( Q1 až Q4) a celkový součet.

Dimenze: Verze plánu

Plán se vytváří na rok, jednotlivé verze ho zpřesňují na základě nových skutečností, případně již existujíc skutečnosti.

Základní report má následující tvar:

Úkolem je vytvořit velmi podobný report, který zobrazí data ze 2 verzí, které uživatel vybere a zobrazí mezi nimi rozdíly. Nejlépe bez nutnosti zasahovat do business vrstvy a vystačit pouze s klientskou částí aplikace Oracle BI. Takto vypadá výsledek:


Jak to udělat:
Prompt: po výběru hodnoty obou verzí nastavíme proměnné ( např. v1, v2)


Answer: uděláme jako kombinaci 2 dotazů


První dotaz uděláme standardně (vpodstatě kopie základního anter – viz první obrázek). Jediné nestandardní je omezení dotazu pomocí proměnných v1 a v2)


Druhý dotaz uděláme podobně jako první, vynecháme v něm sloupec Verze, místo něj dáme konstantu (např.) ‘Změna‘, tedy text, který se bude zobrazovat. Podmínky pro výběr zůstávají stejné jako u předchozího:


Místo původní hodnoty sloupce leden, unor, … je nyní vzorec, např pro leden:

SUM(CASE WHEN tB_form_Consol.Verze = '@{v2}{xx}' THEN -tB_form_Consol.leden/1000 ELSE tB_form_Consol.leden/1000 END)

(jinak řečeno, když verze = v2, pak otočím znaménko a pak celé sečtu, tedy dostanu rozdíl mezi hodnotou pro v1 a pro v2)

Grafická úprava: obarvení a zvýraznění rozdílových hodnot – např. takto (Vlastnosti sloupce -> podmíněné formátování)


Nakonec ještě pár fint, které se při tvorbě reportu využily:
1. Answer: obsahuje 17 sloupců, které mají velmi podobný vzorec – dá se snadno editovat ve formátu XML v záložce Pokročilé. Pozor – po úpravě nezapomenout zaškrtnout Vynechat mezipaměť a stisknout Nastavit XML


2. Dashboard: umístíme hotový report na dashboard. Po vstupu na něj je prompt prázdný a vytvořený Answer hlásí chyby, kterým běžný uživatel nerozumí. Proto byla nastavena vlastnost oddílu - řízená navigace, která zobrazí Answer jen tehdy, pokud vrací data.


3. Prompt: abych zabránil, aby se mi hodnota z promptu (verze) použila jako výzva pro omezení dotazu (protože z tohoto základního Answer jsem volal další Answer formou interakce sloupce/hodnoty a potřeboval jsem předávat hodnoty a verze se předávaly pomocí proměnných), dal jsem v promptu hodnotu do funkce, např: CONCAT(tVerze_csl_0.Verze, '')

Výše uvedení finty jsou popsány v jiných článcích.


Jan Jůza (CCA)

Žádné komentáře: