Oracle Business Intelligence

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

  • Meta

  •  

    January 2012
    M T W T F S S
    « Oct    
     1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031  

OBI EE – Podraporty (filtrowane z raportu nadrzędnego) z użyciem GoURL

Posted by Marek Gregor on October 5th, 2010

W poprzednim wpisie opisałem składnię GoURL. Teraz pokażę jak użyc taki link w praktyce na pulpicie. W założeniu GoURL miał pozwolić na integrowanie Oracle Business Intelligence z zewnętrznymi serwisami. NIc jednak nie stoi na przeszkodzie aby wykorzystać ten mechanizm wewnątrz samego BI.
Zobaczmy więc jak przygotować pulpit z Raportem w postaci tabelarycznej który po kliknięciu w dana wartość (w tym przypadku “Area”) będzie filtrował wykres w innym miejscu tego pulpitu-

Czyli bez żadnych monitów klikając w tabelce w obszar będziemy przefiltrowywać inny raporcik na tym samym pulpicie dynamicznie

oczywiście posłużę się schematem Sample Sales a w zasadzie Sample Sales Reduced
Stwórzmy więc raport

a następnie podraport (wykresik)

teraz (korzystając z mojego porzedniego wpisu stworzyłem sobie adresik GoURL do wywołania tego raportu (przetestowałem w przeglądarce – działa)

http://vbobisrv:9704/analytics/saw.dll?GO&Path=/users/marek%2egregor/obiee/raport_wewnetrzny&Action=Navigate&P0=1&P1=eq&P2=”Other%20Dimensions”.Area&P3=”Area%204″

Jak widać na końcu przekazuję parametrem filtr na Area= Area04

połaczmy te raporty w jedną aplikację

Aby tego dokonać musimy

1. zapisać raporty

2. umioeścić raport zewnętrzny (u mnie Raport_1) na pulpicie

3. Dodać na tym samym pulpicie pole tekstowe i w treść wpisać

<IFRAME src=http://vbobisrv:9704/analytics/saw.dll?GO&Path=/users/marek%2egregor/obiee/raport_wewnetrzny&Action=Navigate&P0=1&P1=eq&P2=”Other%20Dimensions”.Area&P3=”Area%204″ width=800 height=400 name=moj_wykresik></IFRAME>

oraz zaznaćzyć checkbox Zawiera kod HTML

To co zrobiłem to wstawiłem w ramce(IFRAME) odwołanie do raportu wewnętrznego wywołane składnią GoURL. Ale całe sedno w tym żeby ten obiekt nazwać (u mnie name=moj_wykresik). Równie dobrze mogłem wstawić pustą ramkę lub ramkę z wykresem bez filtra, ważne żeby miał nazwę

4. Edytujemy raport wywołujący (zewnęrrzny) i w pole funkcji wpisujemy:

‘<a href=http://vbobisrv:9704/analytics/saw.dll?GO&Path=/users/marek%2egregor/obiee/raport_wewnetrzny&Action=Navigate&P0=1&P1=eq&P2=”Other%20Dimensions”.Area&P3=’||REPLACE(“Other Dimensions”.Area,’ ‘,’%20′) ||’ target=moj_wykresik>’ || “Other Dimensions”.Area|| ‘</a>’

oraz zanzaczamy iż jest to zawartość HTML

Jak widać zamieniłem nazwę kolumny na aktywny link który przekazuje swój wynik do obiektu o nazwie mój_wykresik – a jest on po prostu dynamicznym składanym adresem GoURL z przekazaniem jako parametr kolumny Area

Teraz wynik wygląda tak:

a jak klikniemy sobie w inny obszar to wygląda tak.

Prawda że fajne

PS

Podejrzewam że w Oracle Business Intelligence 11g taka funkcjonalność jest dostępna natywnie poprzez twz Active Linki lub jeszcze proście – ale póki co w 10g można sobie radzić w ten sposób.

A ja zabieram się do instalacji 11g

Posted in Uncategorized | No Comments »

OBIEE 10g – Brak wykresów na raportach

Posted by Marek Gregor on October 3rd, 2010

Jeśli zdarzy wam się coś takiego


lub w konsekwencji coś takiego

czyli taki komunikat

Error Generating Chart
An error occurred d
uring execution of “connect”. No connection could be made because the targe
t machine actively refused it.
Error Details
Error Codes: ETI2U8FA

To czym prędzej sprawdzcie czy działa serwis Java Host. Cały dziń dzisiaj z tym walczyłem i niejednokrotnie restartowałem usługi lecz serwis Java Host jakoś mi umknał. Efekt jest taki iż bez tego serwisu wszystko wydaje się działac poprawnie tylko wykresów brak :(

Posted in Administracja, Business Intelligence, Uncategorized | No Comments »

OBI EE 10g – GoURL – opis składni

Posted by Marek Gregor on September 26th, 2010

GoURL  systemu Oracle Business Intelligence 10g.  Składnia i opis

Jednym z zastosowan GoURL jest integrowanie wyników raportów/pulpitów z innymi serwisami korporacji. Czy to np. stronami intranetowymi, czy też np aplikacjami webowymi. W naszej korporacji używamy prezentacji raportów o kliencie w wewnętrznej aplikacji CRMowej. Innym ciekawym zastosowaniem które zaimplementowaliśmy na pulpitach jest użycie GoURL w połczeniu z IFRAME wewnątrz warstwy prezentacji ale o tym napiszę w kolejnym wpisie. Czym jest funkcjonalność GoURL- jest to po prostu wywołanie określonego, raportu lub dashboardu poprzez adres URL.
W poniższym wpisie pokrótce opiszę jak złożyć taki link GOURL. Wpis ten potraktuję jako składnicę wiedzy również dla mnie gdyż przyznam się otwarcie iż nie stosuję skrótów GOURL na codzień tylko w razie potrzeby – a jak już zaimplementuję to zapominam składnie i wracam do dokumentacji. Tu przygotuje sobie gotowy przepis na linki GOURL
Więc zaczynamy:
link GoURL musi zaczyanać się od słowa GO – to logiczne przeciez to GoURL

http://host:port/analytics/saw.dll?GO


Taka składnia obowiązuje oczywiście gdy wywołujemy raport z zewnętrznej aplikacji. Jeśli chcemy użyć mechnizmu GoURL wewnątrz “BI” możemy użyć rótkiej formu tj: saw.dll?GO
Następnie przekazujemy szereg parametrów potrzebnych do wywołania żądania raportu/pulpitu
Wszyskie parametry wywołujemy w ten sposób iż dołaczamy znakiem & parametr z przekazaniem wartosci parametru
czyli: &Parametr=Wartosc

Nnajważniejszym jest wymagany  parametr:

  • Pathw parametrze tym przekazujemy scieżkę do raportu bądź też zakładki pulpitu który chcemy wyświetlić. Należy przestrzegać zasady iż spacje w nazwach raportów zastępujemy znakiem +“. Niedobrą informacją jest fakt iż z polskimi znakami może być kłopot. Oficjalna odpowiedź metalinku-bo zgłosiłem problem: Nie używać znaków narodowych. OK w nazwach raportów to nie problem można zapisać z nazwą bez polskich liter, gorzej w przypadku przekazywania parametrów – stosuje pewne obejścia – jeśli ktoś zainteresowany to w komentarzach.

Przykład:  &Path=/shared/handel/wyniki+handlowcow
Nasz link ma więc postać:

http://host:port/analytics/saw.dll?GO&Path=/shared/handel/wyniki+handlowcow

i to już będzie działać

Reszta  parametrów jest opcjonalna

  • NQUser- Opcjonalna nazwa użytkownika – jeśli nie użyjemy to pojawi sie ekran logowania do systemu BI i użytkownik poproszony zostanie o uwierzetelnienie
  • NQPasswordOpcjonalnie hasło użytkownika (nie będe sie wypowiadał tu o bezpieczeństwie – lepiej użyć innych technik przesyłania hasła np. metodę POST gdzie hasło nie jest bezpośrednio pokazywane). U nas w firmie stosujemy jednak zasadę iż każdy musi się zalogować do BI niezależnie czy korzysta z BI czy też z aplikacji webowej odwołującej się do BI

Po przekazaniu tych parametrów nasz link będzie wyglądał następująco:

http://host:port/analytics/saw.dll?GO&Path=/shared/handel/wyniki+handlowcow&NQUser=Administrator&NQPassword=haslo

Link taki zwróci domyślny widok raportu do którego się odwołujemy(widok złożony,tabeli,wykresu,pivota itd)

Jeśli chcemy wyswietić inny niż domyślny widok musimy użyć parametru

  • ViewName  - w parametrze tym przekazujemy nazwę widoku który czhemy wyświetlić czyli np ViewName=Chart (nie sprawdzałem ale chyba używamy dokłądnej Polskiej nazwy- czyli np Wykres)

Dostępnych jest jescze wiele opcji do ustawienia w linku – nie będe się nad nimi skupiał zapraszam do dokumentacji – można jednak wybierać style , przedstawiać jako printer friendly, linkować do modyfikacj raportu i wiele innych opcji.

Najciekawszą funkcjonalnością GoURL jest jednak Przekazywanie zmiennych używanych do filtrowania w linku GoURL

Jak to się robi

Po pierwsze musimy wywołać akcje nawigacji poprzez doklejenie w linku parametru

  • Action=Navigate

A następnie przekazać w linku

    Parametry (co najmniej 4 (3 przy stosowaniu operatorów null nnull-  P0,P1,P2,P3  ):

    PO – ilość kolumn które będziemy filtrować (i ilość par parametrów P1,P2,P3)

    P1-operator
    jeden z:

    nnul ( wtym przypadku parametru P3 nie wpisujemy)
    eq równe lub zawiera(in)
    neq nie równe lub nie zwiera( not in_.
    lt – mniejsze.
    gt – większe
    ge mniejsze równe
    le większe równe
    bwith zaczyna się od
    ewith kończy się na
    cany zawiera jedno
    call zawiera wszystkie
    like operator like (uwaga zamiast procenta trzeba wpisywać ‘%25′
    top
    bottom
    bet Between
    nnul ( wtym przypadku parametru P3 nie wpisujemy)
    null ( wtym przypadku parametru P3 nie wpisujemy)

    P2- nazwa kolumny – używamy dokłądnej nazwy kolumny( takiej jak użyta w funkcji)- czyli z nazwą tabeli zamiast spacji wpisujemy %20 (i otaczamy cudzysłowiami)

    P2=”tabela%20klienci”.”nazwa%20kolumny”

    P3 – wartość bądź lista wartości dla operatorów (in,cany,call) – zasada jest taka  P3=n+xxx+yyy

    gdzie n informuje ile razy wystąpi argument czyli dla jednejwartosci bedzie zawsze =1 a dla listy będzie ilością elementów listy

    P3=1+”Wroclaw” , lub P3=4+”Wroclaw”+”Warszawa”+”Katowice”+”Krakow”


    jeśli filtrujemy więcej niż jedną kolumnę czyli P0>1 to specyfikujemy kolejne pary (Na dzień dzisiejszy dokumentacja do OBI EE 10g mówi o 6 kolumnach możliwych do fitrowania:

    P4,P5,P6

    P7,P8,P9

    Wydaje się skomplikowane ale nie jest

    Przykład – chcemy przefiltrować dane o kliencie po jego nipie (jeden parametr)

    P0=1&P1=eq&P2=Klienci.Numer%20NIP&P3=1+999111999111

    Chcemy wyświetlić zyski większą niż 10000

    P0=1&P1=gt&P2=Fakty.zysk&P3=1+10000

    Chcemy wyświetlić sprzedawców którzy sprzedali więcej niż za 100000  z dwóch oddziałów (filtrujemy 2 kolumny czyli wpiszemy dwie pary parametrów P1,P2,P3  i P4,P5,P6)

    P0=2&P1=gt&P2=Fakty.Suma&P3=1+100000&P4=eq&P5=Sprzeawca.Region&P6=2+Katowice+Krakow

cały link wyglądałby więc następująco:
http://host:port/analytics/saw.dll?GO&Path=/shared/handel/wyniki+sprzedawcow&Action=Navigation&P0=2&P1=gt&P2=Fakty.Suma&P3=1+100000&P4=eq&P5=Sprzeawca.Region&P6=2+Katowice+Krakow

Prawda że proste


Posted in Answers, Business Intelligence, Uncategorized | No Comments »

Wracam do gry

Posted by Marek Gregor on September 18th, 2010

Troche się zaniedbałem z pisaniem. To przez to że jestem trochę zarobiony – no i przez to że było ciepło to sie całymi dniami coś robiło przed domem. Jednak postanowiłem sobie mocno że zacznę spowrotem publikować pomysły które wdrażam z sukcesami w naszej firmie. Ponadto praca nad hurtowni danych – projektujemy i implementujemy w naszej firmie hurtownię danych a niedługo termin kiedy powinna zacząć działać – więc i czasu na własne sprawy mniej. Ale wracam do pisania postaram się coś w tym tygodniu opisać.

Posted in Uncategorized | No Comments »

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

Posted by Marek Gregor on February 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 January 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 December 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 December 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 November 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 October 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 »