Home > Answers, Direct Database Request, OBIEE > Bezpośrednie zapytanie do bazy danych

Bezpośrednie zapytanie do bazy danych

Kilka uwag odnośnie bezpośredniego zapytania. Pisałem już o tym tutaj.

Plusy dodatnie:

1. Daje możliwość połączenia kostek z istniejących już w OBI obszarów zainteresowań z tabelami/widokami/materializowanymi widokami, których nie przewidywaliśmy w ogóle do objęcia BI’jem, oraz co nawet ciekawsze – z obiektami innej bazy danych (poprzez Database Links). Czyli możemy sobie zrobić w jednym zapytaniu klauzulę from tabela, tabela@inna_baza_danych. Bez grzebania w repozytorium.

Przydaje się to w sytuacjach, gdy potrzebujemy zrobić coś na szybko, lub raport jest potrzebny tylko np. jednej osobie do ściśle określonego celu.

2. Można sumować, ale na tabeli przestawnej, na tabeli zwykłej nie można (chodzi mi o podsumowanie całkowite)

3. Można pokolorować kolumny, można zrobić wykres, czyli nasze bezpośrednie zapytanie wygląda całkiem jak poważny raport :)

Oto tabela przestawna z prostego zapytania:

SELECT CALENDAR_YM_NAME,
CALENDAR_YM_DESC,
1 AS ilosc_dni
FROM times
WHERE year = 2009

times to standardowa tabela wymiaru czasu wygenerowana ze skryptu.

bezp

Plusy ujemne:

1. Problem z komentarzami:

SELECT CALENDAR_YM_NAME,
CALENDAR_YM_DESC,
1 AS ilosc_dni
–comment
FROM times
WHERE year = 2009

nie pójdzie …

2. Brak możliwości filtrowania w kryteriach zapytania – w pivocie można w ograniczonym zakresie. Najlepiej posortować sobie wcześniej SQL-em

3. Dla użytkownika, który ma mieć dostęp do wykonywania bezpośrednich zapytań należy dać uprawnienia:

- Wykonywanie bezpośrednich zapytań do bazy danych (w Administrowanie uprawnieniami/Aplikacja Answers)

- Edycja bezpośrednich zapytań do bazy danych (w Administrowanie uprawnieniami/Aplikacja Answers) – jeśli chcemy, żeby użytkownik mógł sam sobie to zapytanie edytować (z tym oczywiście ostrożnie)

- Direct Database Access w Administracji repozytorium: Manage/Security po wybraniu użytkownika(grupy) Permissions ustalamy Allow do odpowiedniej bazy:

bezp1

4. Bywa, że raport się nie uruchamia i niespecjalnie daje się wejść na kryteria żeby zobaczyć SQL-a. Raporty standardowo znajdują się w lokalizacji OracleBIData\web\catalog\XXX\root\shared… w postaci plików w formacie xml. Po skopiowaniu, trzeba zamienić ' na ‘ przy stringach, >= na > itp.

5. Kostki nie powinny mieć typu integer, tylko double oraz nie char tylko varchar – inaczej jest problem z prawidłowym wyświetlaniem wyników. Użycie funkcji cast załatwia sprawę (CAST(expr AS number) da nam double w Answers .

6. Zapytanie bezpośrednie “podpada” pod defaultowe ograniczenie zbyt wielu wyświetlanych wierszy.  Rozwiązanie tu: http://obiee101.blogspot.com/2008/02/obiee-controling-pivot-view-behavior.html (osobiście nie testowałem).

7. Lepiej używać do bezpośrednich zapytań IE, – u mnie w Firefoxie dłuższe SQL-e na zakładce kryteriów czasem ulegają dziwnemu obcięciu – choć samo zapytanie działa – ciekawe.

8. Nie możemy używać tego sposobu pisania zapytań w przypadku baz xml-owych takich jak Sample Sales (dostarczana z systemem). Przynajmniej mi się nie udało …

  1. December 21st, 2009 at 04:50 | #1

    Tak, pewnie tak jest

  2. January 5th, 2010 at 17:21 | #2

    The matchless theme, very much is pleasant to me :)

  3. Sebastian
    April 9th, 2010 at 10:21 | #3

    Czy można używać w zapytaniach bezpośrednich monitów w podobny sposób jak to jest w Answerze np. na datę danych?

  4. April 9th, 2010 at 23:56 | #4

    Tak, można. Można skorzystać ze zmiennej prezentacji.
    W monicie, w kolumnie “ustaw zmienną” wybieramy z rozwijanki pozycję “Zmienna prezentacji”, w pole poniżej wpisujemy nazwę zmiennej, np. MojaZmienna.

    Potem w zapytaniu w klauzuli where używamy tej zmiennej np.

    where pole_tekstowe = @{MojaZmienna}{‘wartosc_domyslna’}

    gdzie wartosc_domyslna to defaultowa wartość zmiennej – warto jej użyć, żeby raport od razu się jakoś filtrował.

    Przy modyfikacji zapytania bezpośredniego, trzeba przed zapisem kliknąć zawsze przycisk “Zweryfikuj SQL i pobierz kolumny” – inaczej raport wywala się czasami (nie wiem czemu, w każdym razie u mnie tak jest).

    Oczywiście można też zrobić zmienną na datę, czyli np.:

    where pole_daty = @{MojaZmienna}{’2010-04-09′}

    Potem można już sobie zmieniać datę w monicie.

  5. Sebastian
    April 12th, 2010 at 11:15 | #5

    Bardzo dziękuję, dokładnie o to mi chodziło.

    Mam jednak jeszcze jedno pytanie w sprawie zapytań bezpośrednich. Czasami muszę zrobić zapytanie, które wykonuje się dość długo, nawet do 2h. Jednak po ok 1h występuje efekt jakby utraty połączenia pomiędzy przeglądarką internetową, a repozytorium (komunikat o błędzie utraty połączenia zwracany przez przeglądarkę). Zapytanie nadal jest widoczne w menadżerze sesji repozytorium, jednak nawet jak się zakończy, dane nie są zwracane przez Answera. Efekt ten występuje tylko jeśli zapytanie jest bezpośrednio do bazy, a nie przez standardowe Obszary zainteresowań.

    Czy jest na to jakiś sposób?

  6. April 12th, 2010 at 22:59 | #6

    Hmm… Nie robiłem takich długich zapytań tym sposobem, więc trudno mi powiedzieć.
    Może to kwestia przegladarki ? Czasem nie wszystko działa np. w Firefoxie, czy Chromie (w Operze w ogóle nie specjalnie). Proponuję poeksperymentować. A najlepiej to w ogóle porobić sobie wcześniej jakieś agregaty, jeśli to oczywiście możliwe, żeby unikać tak długich zapytań – ja zawsze staram się wcześniej poprzeliczać sobie co się da na materializowanych widokach. Ale tak jak pisałem, pewnie nie zawsze się trak da.

  7. Sebastian
    April 23rd, 2010 at 14:12 | #7

    Dziękuję za odpowiedź.

    W międzyczasie pojawił sie nowy problem nie dotyczący samych zapytań bezpośrednich. Jak pewnie Pan wie można odkładać logi zapytań do tabeli (nazwa użytkownika, treść, data startu itp). Między innymi jest odkładana ścieżka zapytania do kolumny SAW_SRC_PATH. I tutaj pojawia się moje pytanie, czy można bezpośrednio w zapytaniu, np. w tekście statycznym “przejąć” tą wartość?

    Analizując menadżera zapytań zauważyłem, że treść ścieżki w której znajduje się raport jest ustawiana jako zmienna:
    ——————– SQL Request:
    SET VARIABLE QUERY_SRC_CD=’Report’,SAW_SRC_PATH=’/shared/BHD/Raport testowy’; SELECT…

    Czy jest możliwość użyć tej zmiennej na raporcie?

  8. April 27th, 2010 at 23:25 | #8

    Jakoś nigdy nie próbowałem tego zrobić, raczej nie zadziała to jak typowa zmienna prezentacji. Jeśli uda się panu ją wykorzystać to proszę dać znać. Ja też coś spróbuję znaleźć.

  1. No trackbacks yet.
You must be logged in to post a comment.