pondělí 22. února 2010

Výběr Top N hodnot s dynamickým zadáním hodnoty N

Výběr N hodnot, které splňují nějaké Top kriterium, je pro Oracle BI velmi triviální úlohou. Řešíme ji obvykle zadáním fitru nad sloupcem, který slouží jako kriterium pro Top výběr. Filtr zadáme takto:


Omezením tohoto řešení je skutečnost, že budoucí uživatel takto vytvořeného pohledu na data nutně uvidí právě 20 Top hodnot. Můžeme do filtru zadat i jiné číslo, ale setkal jsem se ovšem s případem, že zákazník chtěl počet řádků vě výběru – tedy hodnotu N – určovat sám – tedy dynamicky.

Řešením, které mně napadlo, je použití proměnné prezentace.


Jak si proměnnou prezentace zadefinujeme a naplníme, se pokusím popsat na následujícím příkladu, kdy jsem k tomu použil Dashboard Prompt (omezený na stránku).

Ukázkový standardní business model znázorňuje obvyklé vazby mezi faktovou tabulkou a dimenzemi.

Protože budeme potřebovat nějaký logický sloupec pro zadání hodnoty „N“, doplnil jsem do logické tabulky Facts logický sloupec N a vložil do něj hodnotu 1.


Tím se zajistila hodnota Data Type implicitně jako Int. Sloupec N jsem přidal do prezentační vrstvy.


Logický sloupec N nyní lze použít v dashboard promptu. Ověříme si konzistenci a repository uložíme.
Přihlásíme se do Answers a vytvoříme Dasboard prompt. Jeho význam omezíme na Page:


Do promptu přidáme sloupec N.


Vhodně zvolíme hodnotu sloupců Operator, Control, Default to (zvolil jsem Specific Value =1), Set Variable (variable jsem pojmenoval X01) a do kolonky Label napíšeme text: Select value of N in TopN. Default value is 1.

Prompt graficky dotvoříme:

Uložíme jej jako např. Page_prompt1.

Ještě připravíme vhodný dotaz. Nesmíme v něm zapomenout na sloupec Rank(Facts.Units), který udává pořadí řádku ve výběru a bude slouži jako filtr, protože uživatel si bude zadávat právě hodnotu počtu řádků. Nejvyšší pořadí pak bude vlastně udávat počet vrácených řádků.


Filtrovací podmínka pro sloupec Rank(Facts.Units) byla vytvořena takto:


Defaultní hodnota 1 slouží k tomu, aby se v případě, že není zadána žádná hodnota proměnné X01, zobrazil právě jediný řádek.
Dotaz uložíme jako Select01 a spolu s promptem umístíme na dashboard.


Výsledek by měl být následující:
1)Nezadáme-li do promptu žádnou hodnotu, implicitně se do filtru nastaví hodnota 1 a vybere se jediný řádek.


2) Naopak, zadáme-li např. hodnotu 17, pak se do proměnné prezentace (Presentation Variable) pojmenované X01 nastaví hodnota 17 a vybere se 17 řádků .


Takto si uživatel může výbírat libovolný počet Top N řádků.



Jiří Doubravský (PIKE ELECTRONIC)

Žádné komentáře: