Archive

Archive for December, 2009

Porównywanie dat w Answers (TIMESTAMPDIFF)

December 30th, 2009 2 comments

Jeśli chcemy porównać dwie daty w Answers OBIEE możemy to zrobić na przykład przy użyciu funkcji

TIMESTAMPDIFF(interval, expr, timestamp2)

gdzie:

interval

SQL_TSI_DAY,
SQL_TSI_WEEK,
SQL_TSI_MONTH,
SQL_TSI_QUARTER,
SQL_TSI_YEAR

oraz

SQL_TSI_SECOND,
SQL_TSI_MINUTE,
SQL_TSI_HOUR

(ale wtedy musimy mieć daty w formacie timestamp (z godzinami))

expr

pierwsza data do porównania

timestamp2

druga data do porównania

Przykład:

daty

Uzyskujemy różnicę w datach w postaci ilości dni:

daty1

Kostkę “Różnica dat” możemy wykorzystać do stwierdzenia, czy te daty są różne i o ile dni się różnią. Przy zastosowaniu innych wartości klauzuli interval możemy sprawdzać różnicę w sekundach, miesiącach czy latach.

Możemy sobie teraz przefiltrować np. tylko te rekordy, które mają różne daty, bądź daty różne od siebie np. o 3 dni …

Categories: Answers, OBIEE Tags: , , ,

Bezpośrednie zapytanie do bazy danych

December 8th, 2009 8 comments

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 …