Oracle Business Intelligence

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

OBI EE – Sortowanie raportów przez użytkownika na pulpicie

Posted by Marek Gregor on Luty 4th, 2010

Chciałbym przedstawić po krótce (a może przypomnieć) o sortowaniu raportów. Otóż jasnym jest że możemy wstępnie posortować raport jeszcze w fazie przygotowania

Stosując widok tabelki możemy zezwolić sobie/użytkownikowi (przyzwyczajonemu do łatwych przesortowań kolumn w excelach) do stosowania własnych sortowań poprzez kliknięcie w kolumnę tabeli. Wykonuje się to w opcjach widoku tabeli


Teraz mamy możliwość przesortowania raportu bezpośrednio na pulpicie po prostu klikając w nazwę kolumny oczywiście wielokrotne kliknięcie zmieni nam porządek sortowania a fakt posortowania odznaczy się małym trójkącikiem obok nazwy kolumny

Wszystko fajnie a co jeśli chcielibyśmy osiągnąć sortowanie po kilku kolumnach naraz np:malejąco po numerze pracownika i rosnąco po numerze zamówienia -w taki sposób


Okazuje się że jest to możliwe aczkolwiek w instrukcji zapomniano o tym wspomnieć.

Wystarczy użyć klawisza CTRL i po kliknięciu i przesortowaniu pierwszej kolumny “doklikiwać” z CTRLem kolejne sortowania

Bardzo miłe i użyteczne a tak jakby ukryte ;)

Posted in Answers, Business Intelligence | No Comments »

OBI EE Zmienne repozytorium reprezentujące czas c.d.

Posted by Marek Gregor on Styczeń 5th, 2010

W poprzednim wpisie (czyli tutaj) opisałem zmienne jakie stosuję w naszym systemie BI celem ułatwienia życia sobie i użytkownikom. Teraz może króciutki wpis jak zrobić zestaw takich zmiennych.
Wystarczy krótki SQL zapiąć do bloku inicjalizującego.
SQL wygląda tak (dla DB ORACLE):

SELECT
TRUNC (ADD_MONTHS (CURRENT_DATE, -12)) data12mago,
TO_DATE(TO_CHAR (TRUNC (ADD_MONTHS (CURRENT_DATE, -12)), ‘YYYY-MM’)||’01′,’YYYY-MM-DD’) first12mago ,
LAST_DAY(TRUNC (ADD_MONTHS (CURRENT_DATE, -12))) LAST12mago,
TO_CHAR (TRUNC (ADD_MONTHS (CURRENT_DATE, -12)), ‘YYYY-MM’) RM12mago,
TRUNC (ADD_MONTHS (CURRENT_DATE, -6)) data6mago,
TO_DATE(TO_CHAR (TRUNC (ADD_MONTHS (CURRENT_DATE, -6)), ‘YYYY-MM’)||’01′,’YYYY-MM-DD’) first6mago ,
LAST_DAY(TRUNC (ADD_MONTHS (CURRENT_DATE, -6))) LAST6mago,
TO_CHAR (TRUNC (ADD_MONTHS (CURRENT_DATE, -6)), ‘YYYY-MM’) RM6mago,
TRUNC (ADD_MONTHS (CURRENT_DATE, -3)) data3mago,
TO_DATE(TO_CHAR (TRUNC (ADD_MONTHS (CURRENT_DATE, -3)), ‘YYYY-MM’)||’01′,’YYYY-MM-DD’) first3mago ,
LAST_DAY(TRUNC (ADD_MONTHS (CURRENT_DATE, -3))) LAST3mago,
TO_CHAR (TRUNC (ADD_MONTHS (CURRENT_DATE, -3)), ‘YYYY-MM’) RM3mago,
TRUNC (ADD_MONTHS (CURRENT_DATE, -2)) data2mago,
TO_DATE(TO_CHAR (TRUNC (ADD_MONTHS (CURRENT_DATE, -12)), ‘YYYY-MM’)||’01′,’YYYY-MM-DD’) first2mago ,
LAST_DAY(TRUNC (ADD_MONTHS (CURRENT_DATE, -2))) LAST2mago,
TO_CHAR (TRUNC (ADD_MONTHS (CURRENT_DATE, -2)), ‘YYYY-MM’) RM2mago,
TRUNC (ADD_MONTHS (CURRENT_DATE, -1)) data1mago,
TO_DATE(TO_CHAR (TRUNC (ADD_MONTHS (CURRENT_DATE, -12)), ‘YYYY-MM’)||’01′,’YYYY-MM-DD’) first1mago ,
LAST_DAY(TRUNC (ADD_MONTHS (CURRENT_DATE, -1))) LAST1mago,
TO_CHAR (TRUNC (ADD_MONTHS (CURRENT_DATE, -1)), ‘YYYY-MM’) RM1mago,
TRUNC (ADD_MONTHS (CURRENT_DATE, -0)) data0mago,
TO_DATE(TO_CHAR (TRUNC (ADD_MONTHS (CURRENT_DATE, -0)), ‘YYYY-MM’)||’01′,’YYYY-MM-DD’) first0mago ,
LAST_DAY(TRUNC (ADD_MONTHS (CURRENT_DATE, -0))) LAST0mago,
TO_CHAR (TRUNC (ADD_MONTHS (CURRENT_DATE, -0)), ‘YYYY-MM’) RM0mago,
TO_DATE(TO_CHAR(CURRENT_DATE,’YYYY’)||’-01-01′,’YYYY-MM-DD’) FirstOfYear,
TRUNC (CURRENT_DATE-1) data1dago
FROM DUAL

Jak widać ten SQL zwraca jeden wiersz z preparowanymi na podstawie dzisiejszej daty różnymi wariacjami dat.

Teraz wystarczy tylko poszczególnym kolumnom zwróconym przez blok inicjalizacyjny podpiąć odpowiednie nazwy zmiennych jak we wpisie poprzednim (oczywiście można użyć dowolnej nazwy :) )
z21

Nie zapomnijmy ustaiwić odświeżania tego bloku przynajmniej 1 raz dziennie

z22

Posted in Administracja | No Comments »

OBI EE Filtrowanie po datach użycie zmiennych repozytorium predefiniowanych

Posted by Marek Gregor on Grudzień 18th, 2009

Wpis ten potraktuję jako pomoc użytkownikom w mojej firmie ale można go też potraktować jako good practice.

So, go on….

Bardzo często filtrujemy po datach i bardzo dobrze po to są. Więc tworzymy mozolnie raport, robimy skomplikowane funkcje, przestawiamy to wszystko w tabelach przestawnych, robimy super kolorowe wykresy i… dodajemy filtr na daty tak aby pokazać wynik za poprzedni miesiąc czyli np filtrujemy jakies pole aby zawierało się w datach 2009-11-01 do 2009-11-30. Zapisujemy ten raport na pulpicie i już mamy  gotowca którego możemy oglądać codziennie i cieszyć się dobrymi wynikami ale…. tylko przez miesiąc za miesiąc musimy wejść i przestawić datę i tak co miesiąc. Jeszcze gorzej jest gdy mamy raport filtrowany datą dzienną czyli załóżmy zawsze na wczoraj. Jakie jest rozwiązanie

1. Filtrować funkcją opartą na dacie (nie o tym ten topik ale pokażę) czyli np zamiast filtrować na sztywno w raporcie  Data=’2009-11-16′ robimy filtr na funkcji która wygląda następująco:

Data=TIMESTAMPDIFF(SQL_TSI_DAY,Current_Date,1)

O funkcjach na datach zrobię osobny wpis

2. Użyć zmiennych przedefiniowanych przez administratora (czyli w VB Leasing przeze mnie :) )

Otóż
Zrobiłem na potrzeby użytkowników szereg zmiennych tzw repozytorium które zwracają różne daty ustalane na podstawie bieżącej daty.
Oto lista tych zmiennych wraz z komentarzem i przykładem co zwróci taka zmienna zakładając że wykonana jest w dniu zrobienia tego wpisu tj w dniu: 2009-12-16

Nazwa zmiennej Opis Przykład (dla dnia 2009-12-16)
varData1dago wczorajsza data 2009-12-15
varData0mago dzisiejsza data 2009-12-16
varData1mago data miesiąc temu 2009-11-16
varData2mago 2 miesiące temu 2009-10-16
varData3mago 3 miesiące temu 2009-09-16
varData4mago 4 miesiące temu 2009-08-16
varData5mago 5 miesiące temu 2009-07-16
varData6mago 6 miesiące temu 2009-06-16
varData12mago 12 miesiące temu 2008-12-16
varFirstCurrent pierwszy dzien bieżącego miesiąca 2009-12-01
varFirst1mago pierwszy dzień 1 miesiąc temu 2009-11-01
varFirst2mago pierwszy dzień 2 miesiąc temu 2009-10-01
varFirst3mago pierwszy dzień 3 miesiąc temu 2009-09-01
varFirst4mago pierwszy dzień 4 miesiąc temu 2009-08-01
varFirst5mago pierwszy dzień 5 miesiąc temu 2009-07-01
varFirst6mago pierwszy dzień 6 miesiąc temu 2009-06-01
varFirst12mago pierwszy dzień 12 miesiąc temu 2008-12-01
varLastCurrent ostatni dzien bieżącego miesiąca 2009-12-31
varLast1mago ostatni dzień 1 miesiąc temu 2009-11-30
varLast2mago ostatni dzień 2 miesiąc temu 2009-10-31
varLast3mago ostatni dzień 3 miesiąc temu 2009-09-30
varLast4mago ostatni dzień 4 miesiąc temu 2009-08-31
varLast5mago ostatni dzień 5 miesiąc temu 2009-07-31
varLast6mago ostatni dzień 6 miesiąc temu 2009-06-30
varLast12mago ostatni dzień 12 miesiąc temu 2008-12-31
varRMcurrent Rok miesiąć dzisiejszej daty 2009-12
varRM1mago Rok miesiąć 1 miesiąc temu 2009-11
varRM2mago Rok miesiąć 2 miesiące temu 2009-10
varRM3mago Rok miesiąć 3 miesiące temu 2009-09
varRM6mago Rok miesiąć 6 miesięcy temu 2009-06
varRM12mago Rok miesiąć 12 miesięcy temu 2008-12
varRcurrent bieżący rok 2009
varLastCurrent ostatni dzień bieżącego roku 2009-12-31

Tak więc użycie tak więc użycie takiej zmiennej i dynamiiczne filtrowanie danych będzie polegało na zastąpieniu statycznie wprowadzonej daty zmienną repozytorium.

Przykład:

Tworzymy raport z polem daty do filtrowania i filtrujemy

zmienne 1

Wybieramy zmienną serwera
zmienne 2

Wpisujemy zmienną z tabeli wyzej (na przykłądzie chce pokazac raport z dnia wczorajszego więc użyję zmiennej varData1dago)
zmienne 3

i cieszymy się wynikiem
zmienne 4

Dodano 2010-01-05

Dodałem jeszcze parę zmiennych do tego zestawu tj
tj zestaw zwracający daty od 13 do 24 miesięcy wstecz
varData13mago

varData14mago

varData15mago

varData16mago

varData17mago

varData18mago

varData19mago

varData20mago

varData20mago

varData20mago

varData20mago



Posted in Administracja, Answers, zmienne | No Comments »

Prezentacja wdrożenia BI w VB Leasing Polska

Posted by Marek Gregor on Grudzień 13th, 2009

Dnia 9.12.2009 zaproszono nas na konferencję organizowaną przez Oracle Polska dla firm z sektora finansowego. Na konferencji tej pt: ” Trzeci wymiar integracji” zaprezentowaliśmy wdrożenie jakie przeprowadziliśmy w naszej firmie. Prezentację (ponieważ była przewidziana dla ludzi z biznesu) przygotowaliśmy w formie jak było przed i jak jest teraz w wybranych działach naszej firmy. Troszkę się “rozpływaliśmy” na temat Oracle Business Intelligence – no ale cóż jakby ta technologia nas nie zafascynowała to dziś by tego blogu nie było. Myślę że wypadliśmy nieźle – byliśmy przerywnikiem od mocno techniczno-informatycznych wystąpień poprzedników.
Konkluzja z naszej prezentacji jest taka:

  • udało nam się bardzo szybko pokazać wyniki tj po miesiącu od rozpoczęcia wdrożenia można już było analizować dane w rewolucyjny jak dla naszego biznesu  sposób (wcześniej dominował Excel).
  • udał nam się odejść od nieszczęśliwego Excela -użytkownik biznesowy nie szuka już wartości analizująć pojedyńcze transakcję w Excelu tj filtrując i sumując wyciągając komórkę nr H:45678 w której ma jakiś tam wynik oznaczony kolorem zielonym. Teraz użytkownik ma jak na talerzu podaną tę “zieloną” wartość wartość na której trzeba skupić uwagę  jako pierwszą i jeśli będzie chciał to używając drill-down i nawigacji kierowanej będzie mógł analizować szczegóły.
  • W końcu jest jeden spójny obraz na firmę i że użytkownik może zrobić dosłownie wszystko samemu.
  • Drastycznie wzrosła “kultura” raportowa użytkownika w naszej firmie.
  • Na raporty się nie czeka (max 3 min ) a większość tj 90% casz oczekiwania wynosi 0 -10 sek (oczywiście po “scaschowaniu”) wogóle się nie czeka.
  • No i IT ma mniej roboty :)

Jednocześnie nasz zarząd pojechał na Leasing Forum do Wiednia gdzie spotkały się wszystkie spółki holdingu. Przedstawiono tam BI wdrożony w polskiej spółce  a w zasadzie sposób zarządzania firmą poprzez Buisniess Intelligence. Pokaz live przygotowany specjalnie na maszynie wirtualnej – najpierw myśleliśmy o roamingu iPlusa i VPN do siedziby w Posce ale cena 100kb transmisji pakietowej  w roamingu nas powaliła – ok 1 EURO ). Trochę obawialiśmy się o tę maszynę wirtualną (baza, serwer aplikacj, serwer BI) czy zarząd poradzi sobie z uruchomieniem (szczególnie w przypadku problemów z uruchomieniem VM). Na szczęście tego dnia nie dostaliśmy SMSó ani telefonów w stylu: “nie działa”. Dostaliśmy jedynie takiego: “cytat po prezentacji: “Polacy przesiedli się z furmanki do Ferrari- gratulacje”

Posted in Uncategorized | 2 Comments »

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

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

OBIEE Debugowanie BI Publisher

Posted by Marek Gregor on Październik 28th, 2009

Deprymującym jest fakt iż w przypadku wystąpienia błędu przy użytkowaniu BI publishera ne mamy łatwej możliwości podejrzenia co idzie nie tak (błędne SQLe, zmienne,templatey itp) zamiast tego mamy wątpliwej jakości komunikaty typu “error” bądź “skontaktuj się z administratorem” (sprawdzałem to nic nie daje). Od razu widać że BI Publsher i BI Server pochodzą pierwotnie od różnych producentów. W BI Server mamy przynajmniej mozliwość włączenia logowania dla userów i debugowana błędów na róznm poziomie szczegółowości.

Możemy jadnak właczyć debugowanie BI Publishaera w tym celu należy zlokalizować na serwerze aplikacji udostępniającym Publishera scieżkę gdzie zainstalowano Java SE Development Kit (JDK) Dla systemu windows moze to być np:

c:\Program Files\Java\jdk1.6.0_10\jre\lib\xdodebug.cfg”

(jak się dowiedziałem ostatnio z metalinka OBIEE nie supportuje Javyw wersji 1.6 ale nie mówcie o tym nikomu)

tworzymy plik xdodebug.cfg w poniższej scieżce:

c:\Program Files\Java\jdk1.6.0_10\jre\lib\xdodebug.cfg”

Do pliku tego wpisujemy co następuje:

LogLevel=STATEMENT
LogDir=c:\OracleBI\xmldebug

Gdzie LogDir to katalog gdzie będziemy się składować logi ( w szczególności plik xdo.log – który zawiera SQLe wysyłane do bazy). Oczywiście taki katalog musi istnieć na serwerze.
Przeładowywujemy serwer aplikacji (OAS,OC4J) i powtarzamy błąd w BI Publisher by po chwili wychwycić go w logach, naprawić, poprawić i zapomnieć.

Znalazłem jeszcz następujący opis plików dostępnych w katalogu logowania:

xdo.log : główny plik logu
xdo_…xsl : XSL-FO wersja templateu RTF
xdo_…xml : Dane w postaci XML uzyte w raporcie
xdo_…fo : temporary file created by the FO Engine (only RTF / XSL templates)
xdo_…out : output file (may not exist in case of complete failure)

Tags:
Posted in BI Publisher | No Comments »

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

Posted by Marek Gregor on Październik 21st, 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 »

OBIEE – zawijanie wierszy (white-space: nowrap)

Posted by Marek Gregor on Sierpień 26th, 2009

Załóżmy że chcemy przedstawić liczby z “polskim” separatorem tysiąca czyli spacją

p2

Jednakże wynik moze nam sie leciutko “rojechać” tzn liczba będzie zawinięta.

p1

Dzieje się tak gdzyż taka jest natura HTMLa który traktuje spacje jako potencjalne rozdzielenie tekstu i pozwala sobie na zawijanie liczb

Aby uniknąć zawijania oczywiście możemy

a)wyłączyć pokazywanie separatora tysięcy – wrócimy do punktu wyjścia – liczba będzie znów nieczytelna

p3

b) zastosować separator w postaci np kropki – jak ktoś lubi

c) użyś styli CSS

w tym celu należy we właściwościach kolumny w sekcji niestandardowe style CSS wpisać poniższy tekst

white-space: nowrap

p4

i mamy sformatowany tekst bez zawijania na spacjach

p5

Użyteczne chociaż moim zdaniem w OBIEE powinnien byc dostepna wlasciwość rodzaju (checkbox) : nie zawijaj tekstu

CU

Posted in Answers | 4 Comments »

OBIEE Nawigacja kierowana – jeden pulpit różne raporty

Posted by Marek Gregor on Sierpień 18th, 2009

Wyobraźmy sobie taką sytuację iż mamy personel na poziomie centrali który monitoruje pracę w oddziałach oraz managerów tychże oddziałów. Celem jest stworzenie pulpitu wspólnego dla menadżerów zarówno w centrali jak i w oddziałach. Problem jest w tym ze menadżerowie w centrali chcą widzieć w pierwszej kolejności wyniki oddziałów, natomiast menedżerowie oddziałów chcą widzieć wyniki za które to oni są odpowiedzialni czyli: swoich sklepów/ pracowników itp/itd
W przykładach oprę się na schemacie Sample Sales dostarczany przez Oracla

A więc w schemacie tym mamy wymiar sklepu “Market”

market

Jak widać mamy tutaj Distrykty (nazwijmy je Oddziałami) oraz sklepy. Załóżmy że pracownik centrali chce obserwować wyniki na poziomie oddziałów  zaś kierownicy oddziałów chcą obserwowac wyniki swoich sklepów. Jak napisałem wyżej chcemy aby odbyło sie to na wspólnym dla wszystkich pulpicie pt: Dochody

W tym celu musimy (o ile juz nie mamy) przypisac poszczególnych kierowników Oddziałów do wspolnej grupy  która nazwiemy Oddzialy

na potrzeby tego tematu założę użytkownika Oddziału 1 o nazwie: Adam.Nowak

Dodam też tego uzytkownika grupy ODDZIALY

user-nowak

Stwórzmy dwa raporty jeden na potrzeby pracownika centrali  – nazwiemy go Dochody w oddziałach

dochody_w_oddzialach

Drugi na potrzeby Oddziału 1 – nazwiemy go Dochody oddzału 1

dochody_oddzialu_1

Dodatkowo zróbmy prosty raport który będzie zwracał wynik o ile zaloguje się ktoś z oddziału

W tym celu użyjemy zmiennej GROUP która wyświetla nam do jakich grup prynależy uzytkownik oraz funkcji LOCATE która jest podobna do Funkcji INSTR znanej z wielu języków (w tym SQL) i  zwraca numer znaku szukanego ciągu

Nasza funkcja wyglądać będzie następująco

LOCATE(VALUEOF(NQ_SESSION.GROUP),'ODDZIALY')

a cały raport tak:

raport_warunkowy

Nieważna jest zawartość takiego raportu ważne że zwróci on wiersze wyłacznie gdy uzytkownik będzie należał do grupy ODDZIALY w innym pryzpadku funkcja LOCATE zwróci zero i rekordy zostaną odfiltrowane (brak wyników)

Raport ten posłuży nam jako raport warunkowy nawigacji sterowanej sekcji na pulpicie.

Stwórzmy więc pulpit o nazwie DOCHODY. Jak wspomniałem idea tego pulpitu że jest to jeden wspólny dla całej firmy pulpit do monitorowania dochodów lecz zależnie od stopnia manadżera widzi on różne raporty (bardziej szczegółowe dla manadżera oddziału , mniej szczegółowe dla manadżera w centrali.

Umieśćmy na tym pulpicie dwie sekcje i rozmieśćmy oba raporty: Dochody w oddziałach i Dochody oddzału 1 – każdy w osobnej sekcji.

Teraz każdą z sekcji oznaczamy iż ma byś sterowana poprzez funkcję Nawigacji Sterowanej. Jako raport sterujący wybieramy raport z funkcją LOCATE utworzony poprzednio i dla pierwszej sekcji oznaczamy iż sekcja ma się pokazywać gdy raport nie zwaraca żadnych wierszy

sekcja_nawigacja1

Natomiast w drugiej sekcji  ustawmy odwrotnie czyli opcję Jeśli raport zwraca wiersze

Teraz możemy przetestować pulpit. Logując się jako użytkownik nie należący do grupy ODDZIALY zobaczymy pulpit z raportem przeznaczonym dla centrali:

pulpity_centrala

Natomiast logując się jako pracownik Oddziału Adam Nowak widzimy pulpit z raportem przygotowanym dla oddziału:

pulpit_oddzial

Zauważmy że raport przeznaczony dla oddziału wstępnie przefiltrowaliśmy dla oddziału 1 – oczywiście powiiniśmy zastosować dynamiczne filtrowanie w zależnośći z jakiego oddziału pochodzi uzytkownik logujący się do OBI – tak aby Manager Oddziału 1 widział dane Oddziału 1, Manager oddziału 2 – dane oddziału 2 itd. Zagadnienie to jest szczegółowo poruszone w tutorianu dostępnym na OTN ie – Ja też za parę dni sprobuję pokazać/ przypomnieć jak dla naszego stworzonego pulpitu filtrować dane dynamicznie.

Uff – cięzko mi idzie ale mam nadzieję że się rozkręcę



Posted in Answers, Uncategorized | No Comments »

Obsługa dat w BI – funkcje, konwersje, analizy po datach nie posiadających hierarchii

Posted by Marek Gregor on Czerwiec 5th, 2009

Postanowiłem że opiszę jak stosować daty w szczególności w aplikacji Answers.
Być może temat ten nie zainteresuje zaawansowanych użytkowników dobrze obeznanych z funkcjami w BI jednak pomyślałem że blog ten może być świetną formą szkolenia dla pracowników naszej firmy używających BI do bieżącej pracy – tym bardziej że brak jest jakichkolwiek podręczników a i szkoleń firmowych też nie za dużo.
Postaram się więc wyjaśnić w prosty sposób i na przykładach to co jest sednem rożnych systemó BI – czyli grupowanie i agregowanie “w locie” a zrobię to na przykładzie dat.
Często wynika potrzeba grupowania czegoś po częściach dat (roku, miesiącu ). Dla podstawowej daty (będącej wymiarem) takie rozbicie jest wykonane w systemie – stworzona jest też do takiej miary hierarchia (np taka: Rok->Kwartał->Miesiąc->Dekada-Dzień lub w skromniejszej formie: Rok -> Miesiąc -> Dzień – komplet takich atrybutów stanowi tzw: Wymiar czasu i można tworzyć raporty po dowolnym elemencie z tego wymiaru agregując fakty do poziomu np miesiąca,qwartału czy roku. W systemie występje jednak więcej niż jedna data. Np może wystąpić data sprzedaży (która będzie wymiarem czasu) ale może także wystąpić np data odbioru, data płatnośći która jest atrybutem i która występuje w systeme tylko i wyłącznie w postaci YYYY-MM-DD (np. 2009-05-20). Oczywiśćie grupowanie po częściach składowych tej daty jest w aplikacji Answers jak najbardziej możliwe. Przejdźmy jednak do przykładów
Weźmy sobie dla przykładu atrybut daty jakim jest data faktury oraz ilość takich faktur (UWAGA: Dane są fikcyjne )
daty_p1

Read the rest of this entry »

Posted in Answers, Podstawy analizy | No Comments »