Oracle Business Intelligence

blog związany z Business Intelligence, używanie, wdrażanie, doświadczenia

Raport filtrowany wstępnie po faktach

Posted by Marek Gregor on 13th Listopad 2009

W mojej codziennej pracy spotykam się z wieloma problemami i pytaniami dotyczącymi tworzenia raportów. Jednym z nich dość ciekawym było pytanie: Dlaczego raport nie filtruje chociaż filtr ustawiony jest dość jasno a raport jest dość prosty. Po isię raportowi okazało się że użytkownik chciał pokazać sumę sprzedaży różnych oddziałów ale tylko takich produktów gdzie sprzedaż była znaczna tzn powyżej jakiejś wartości. Oto odwzorowanie tego problemu na schemacie SH. Załóżmy że chcemy zrobić raport sprzedaży dla regiony Ameryka dla produktów o znacznej sprzedaży tzn takich których suma sprzedaży w tych regionach przekroczyła 100000$ (nie interesuje nas drobnica). Na początek sprawdźmy jaka jest sprzedaż całkowita dla regionu Ameryki

filtrpofaktach3

i wynik

filtrpofaktach2

Zróbmy więc raport z filtrem 100000$ :

filtrpofaktach1

Na pierwszy rzut oka wydawałoby się że  to jest to o co nam chodzi -  sprawdźmy wynik:

filtrpofaktach2

Taki sam jak poprzednio – czy filtr nie działa? Oczywiście działa lecz ponieważ filtrujemy fakt to tak naprawdę najpierw dokonywana jest grupowanie szczegółów dla regionu ameryki a potem odfiltrowywane są te regiony które mają sprzedaż poniżej 100000$ (tutaj takich nie ma więc nic nie zostało odfiltrowane).

Aby zrobić poprawnie raport na filtrowanych wstępnie faktach mamy dwie metody:

1) użyć tabel przestawnych ( dobry ale czasami  otrzemy się o  limit rekordów dla tabel przestawnych)

2) użyć mechanizmu podraportów

Metoda 1

Wyciągamy szczegół na którego poziomie miałby byc zastosowany filtr dla sumy sprzedaży ( w naszym wypadku jak powiedzieliśmy wcześniej nie chcemy produktów gdzie sprzedaż była mniejsza niż 100000$ a więc jest to Nazwa produktu)

filtrpofaktach4

jak widać na wyniku odfiltrowaliśmy sprzedaż gdzie suma była mniejsza niż 100000$

filtrpofaktach5

ok ale my chcieliśmy tylko prosty wynik w postaci sumy całości a nie szczegóły. Sprawę załatwia prosty Pivot table czyli po naszemu tabela przestawna

filtrpofaktach6

Tak więc w ten prosty sposób uzyskaliśmy to o co nam chodziło – sumę sprzedaży dla regionu Ameryki produktów których wartość sprzedaży była większa niż 1000000$

Metoda 2

Tworzymy prosty raport z  filtrami jak powyżej i zostawiamy tylko kolumnę nazwa produktu

filtrpofaktach7

zapisujemy go pod dowolną nazwą i przystępujemy do stworzenia raportu końcowego:

w którym filtrujemy nazwę produktu na podstawie wcześniej stworzonego wstępnego raportu w którym określiliśmy już kryteria filtrowania. Filtrowanie na podstawie zapisanego raportu można dokonać w okienku Filtrowania pod przyciskiem “Zaawansowane” – wybieramy raport i kolumnę której dotyczy filtrowanie

filtrpofaktach8

ostatecznie mamy

filtrpofaktach9

i poprawny wynik

filtrpofaktach10

Jak widać drugą metodą osiągnęliśmy ten sam rezultat . Użycie tabel przestawnych jest w zasadzie szybsze ale spotkałem się z sytuacją że analizowane były poszczególne transakcje które były filtrowane po fakcie i po odfiltrowaniu zostało ich tak wiele iż użytkownik otrzymał komunikat o przekroczeniu limitu rekordów ustawionego dla tabel przestawnych (które są notabene miniaturowymi kostkami OLAP) i w takim przypdku pozostało użycie metody 2.

Jeśli często filtrujemy po jakimś fakcie na poziomie wymiaru należało by sie zastanowić czy nie przeprojektować hurtownię/ repozytorium OBI EE (a w zasadzie jednego z jej wymiarów) tak by w tabeli wymiarów dla każdego rekordu przechowywać zagregowany na odpowiednim poziomie dany fakt  po którym w łatwy sposób będzie można filtrować. W tym momencie ten sam fakt będziemy mieć w tabeli wymiarów (jako  zagregowanie) i w tabeli faktów jako policzalny/sumowalny  fakt .

Czuwaj

Tags: ,
Posted in Answers, Podstawy analizy | No Comments »

OBI EE Raporty -Selektor kolumn potężna funkcjonalność -brakujące możliwości

Posted by Marek Gregor on 21st Październik 2009

Selektor kolumn – bardzo użyteczne narzędzie pozwalające wymienić dowolną kolumne na inną oszczędzając nam miejsce na pulpicie i pozwalające prezentować dowolny zestaw raportów za pomoca kilku selektorów i jednego widoku. W szczególności zestaw 3 selektorów kolumn i tabeli przestawnej pozwoli nam zbudować raport który użytkownik będzie mógł wybrać dowolną miarę w kolumnie, dowolną miarę w wierszu i dowolny fakt na przecięciu.
Zróbmy przykładowy raport (prosty pivot ze schematu obszaru Sample Sales)

columnselector1

Jak widać wstawiłem dwa wymiary i kilka faktów w tym jeden jest faktem obliczanym z formułą:

Zróbmy z tego pivota używając do tego dostępnych na raporcie miar i jednego z faktów

columnselector2

i już mamy gotowy raport pokazujący zyski każdego sklepu w poszczególnych miesiącach 2008 roku.

I teraz sedno sprawy

Dodajmy do raportu selektor kolumn – jeśli dodamy selektor do obu wymiarów i faktu będziemy mieli (a w zasadzie użytkownik końcowy będzie miał) możliwość dowolnego wyboru co ma być w kolumnie rzędzie i jaki fakt ma być na przecięciu

columnselector3

Od tej chwili użytkownik na pulpicie może dowolnie wybierać dane wyświetlane w tabelce (na jednej stronie pulpitu – zamiast na kilu podstronach). Oczywiście możliwość wyboru ograniczoną tylko do kolumn zdefiniowanych w selekorze.

np zysk w podziale obszar na typ klienta

columnselector4

lub ten sam przekrój ale inny fakt to jest Ilosc wyfakturowaną

columnselector5

Jak widać do selektora kolumn możemy dodać dowolną z kolumn dostępną w repozytorium – nie musi być ona składową pierwotnego raportu możemy wybrać dowolną kolumnę z repozytorium

Ale………

No właśnie czy czegoś wam tu nie brakuje – a co z kolumnami które z tak mozolnie wyliczamy na raporcie ( różnymi Case’mi filtrami mnożeniami dodawaniami potęgowaniami i czym tam można sobie jeszcze wyobrazić)

Teoretycznie na pierwszy rzut oka nie można … a jednak od czegóż pocciwy XML dostępny poprzez zaawansowane funkcje raportu (przepraszam “moich” użytkowników – wiem że nie widzicie tej zakładki)

Zróbmy więc mały example i wystawmy możliwość przełączenia faktu z zysku (Revenue) na kolumnę obliczaną w raporcie którą jest Avg revenue będące ilorazem revenue przez quantity

Na początek wyciągnijmy sobie XMLa z zawansowanych do jakiegoś edytora najlepiej z podświetlaną składnią XML.

Szukamy składni odpowiedzialnej za kolumn selektor czyli:

columnselectorxml1

Doklejamy (lub przerabiamy dotychczasową kolumnę) nowy fakt który ma formułe obliczaną

columnselectorxml2

wklejamy z powrotem w zakładce zaawansowane nie zapominając kliknąć guziczka ustaw XML – który zwaliduje nam XMLa

i oglądamy wynik

columnselector8

I co widzimy – Można już wybrać fakt obliczany na podstawie wzoru i faktycznie pokaże nam się średnia wartość zysku dla wymiarów jednakże opis w wyborze faktu jest niezadawalający ( być może tu tego nie widać ale w przypadku stosowania składni CASE we wzorze obliczeniowym nazwa ta będzie zupełnie nieczytelna). Wymieńmy ją więc na dowolną nazwę. Dokonamy tego oczywiście przez dalszą edycję XMLA i dodamy składnię odpowiedzialną za nazwę wybieranej kolumny:

Musimy dodać do XMLa w odpowiednim miejscu następujące znaczniki:

columnselectorxml3

i mamy to co chcieliśmy czyli mozłiwość wybrania obliczenej kolumny z dowolną nazwą w selektorze wyboru.

W podobny sposób możemy przeprowadzić formatowanie tak wybranej kolumn (kolorki, miejsca po przecinku itp, itd)

Jednakże jak zwykle uważam że w nowej wersji Colum Selector powinien być wzbogacony o wybór formatu i możliwość wprowadzenia funkcji.

Bezt Regardz

Tags: , ,
Posted in Answers, Business Intelligence | No Comments »