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 Listopad 13th, 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

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>