Pentaho Report Designer - automatyzowanie raportów
W poprzednim artykule, Pentaho Report Designer - podstawy, dowiedział(a)ś się jak utworzyć pierwszy raport w Pentaho Report Designer. Teraz zajmiemy się automatycznym tworzeniem raportów w PRD. PRD umożliwia jak wiele takich narzędzi tworzenie raportów które możesz eksportować do statycznych formatów jak PDF, HTML, CSV... Cała jednak moc tego narzędzia to przygotowywanie treści dynamicznie, w zależności od obecnego stanu danych.
Dzięki temu możliwe jest np. tworzenie:
- Plików Excela zawierających podsumowania dla każdego z kontrahentów
- Mailingu do klientów
- Raportów z obrotem każdej dywizji sprzedażowej z podziałem na grupy handlowe uzupełniony wykresami
- Wygenerowanie i wysyłka faktur do klientów
Cel tego ćwiczenia
W tym artykule przejdziemy przez kilka kroków które doprowadzą nas do utworzenia szablonu raportu. Szablon ten wykorzystamy w kroku transformacji Kettle produkującej raport zawierający dane w zależności od wartości parametru - dane na raporcie będą się zmieniać w zależności od warunków wykonania tej transformacji. Będzie to raport prezentujący dane, obroty regionów, w określonym zakresie czasowym. Parametr do zatem data ale rozumiejąc jak działa przesyłanie parametrów do szablonu raportu, możesz przesłać tam dowolny parametr jak i różną ich liczbę.
Przygotowanie danych
Naszym źródłem danych będzie baza MySQL. Użyj poniższego zapytania by stworzyć tabelę z danymi (np w bazie "test"):
DROP TABLE IF EXISTS `table1`;
CREATE TABLE IF NOT EXISTS `table1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`data_sprzedazy` date NOT NULL,
`obrot` int(11) NOT NULL,
`region` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
Wklej gotowe dane:
INSERT INTO `table1` (`id`, `data_sprzedazy`, `obrot`, `region`) VALUES
(1, '2020-02-01', 345, 'Katowice'),
(2, '2020-02-02', 872, 'Warszawa'),
(3, '2020-02-02', 234, 'Opole'),
(4, '2020-02-04', 761, 'Olsztyn'),
(5, '2020-02-05', 563, 'Gdansk'),
(6, '2020-02-05', 782, 'Wroclaw'),
(7, '2020-02-03', 501, 'Krakow'),
(8, '2020-02-06', 439, 'Poznan');
COMMIT;
Tworzenie transformacji - źródła danych
Źródłem danych raportu będzie nie JDBC ale transformacja Kettle. Rozpoczniemy proces od utworzenia transformacji Kettle. Uruchom Pentaho Kettle, rozpocznij nową transformację i zdefiniuj połączenie do bazy danych:
Nasza transformacja będzie zawierać jeden krok; "Table input" (zapytanie wybierające wszystkie rekordy z tabeli "table1"). Uruchom transformację i sprawdź czy wybiera rekordy z bazy danych. Celowo nie definiujemy żadnego parametru dla tej transformacji w tym momencie by, z jednej strony, zrozumieć jak transformacja Kettle dostarcza dane dla PRD a z drugiej strony nie komplikować tworzenia raportu w tym momencie. Zapisz działającą transformację.
Tworzenie szablonu raportu
Uruchom PRD i wybierz "New". W panelu "Data" dla źródła danych wybierz "Pentaho Data Integration". W oknie wybierz transformację Kettle która będzie źródłem danych.
Upewnij się że widzisz dane z tego poziomu wciskając przycisk "Preview". Kliknij "OK". W oknie "Data" pojawią się wszystkie kolumny tabeli "table1". Zauważ, że w ten sposób jesteś w stanie dostarczyć do PRD dane z jakiegokolwiek źródła, z praktycznie dowolnego formatu. Przeciągnij je do sekcji "Details" raportu. Nie poświęcaj czasu na formatowanie raporty (kolorów, czcionek, rozmieszczenia elementów) - w tej chwili nie jest to ważne. Sprawdź czy raport jest generowany wybierając zieloną strzałkę z paska narzędzi a następnie "print preview". Zapisz raport w formacie "prpt".
Tworzenie transformacji - wykonanie raportu w Pentaho Kettle
Tworzymy teraz transformację Kettle która będzie korzystać z szablonu PRD który przed chwilą stworzyliśmy. Nasza testowa transformacja będzie produkować raport zawierający dane sprzedażowe za konkretny dzień. W realnym świecie mógłby to być np dzień N - 1 (np. mogłby to być dzień bieżący - 1 ... czyli za wczoraj). Tutaj "na sztywno" wpiszemy dany dzień - tylko by pokazać jak należy przesłać parametr do raportu. Działać to będzie tak:
Transformacja tworząca raport = (parametr dzień)=>Raport PRD =(parametr dzień)=> Transformacja dostarczająca dane
Nasza transformacja będzie zawierać trzy kroki:
- Generate rows. Transformacja nie wykona się jeśli nie będzie wyzwalacza. Ustaw "limit" na 1.
- Modified Java Script Value. Tutaj określimy połozenie szablonu raportu oraz scieżkę dokąd mamy zapisać wygenerowany raport. Kod tego kroku (zmienne jako string):
Report_Template = getVariable("Internal.Transformation.Filename.Directory"," ")+"/tuto1_raport.prpt";
Report_Name = "raport.pdf";
Report_Output = getVariable("Internal.Transformation.Filename.Directory"," ")+"/"+Report_Name;
Report_Template = substr(Report_Template,6);
Report_Output = substr(Report_Output,6);
- Pentaho reporting output. W tym kroku określ definicję raportu i położenie rezultatu (ścieżki). Wybierz PDF jako format.
Zapisz transforamcję i wykonaj ją. W rezultacie otrzymasz plik/raport w formacie PDF zawierający dane z tabeli.
Dodawanie parametru daty
W przed chwilą utworzonej naszej transformacji, w kroku "Generate rows" dodaj pole "data1". Type "Date", format "yyyy-MM-dd", value "2020-02-5". Sprawdz "preview" że uzyskujesz poprawną datę. W kroku "Pentaho reporting output" jako "Parameter name" wpisz "date1" a w polu "Field name" wybierz pole "data1". Zapisz transformację.
Otwórz transformację która jest naszym źródłem danych dla raportu. Kliknij prawym przyciskiem myszy gdziekolwiek w oknie transformacji i wybierz menu "properties". W zakładce "Parameters" wpisz jako parametr "data1". Zapisz transformację.
Następnie dodaj krok który odbierze parametr przychodzący z raportu - "Get variables". Umieść go przed krokiem "Table input". Oto jego zawartość:
Pozostało nam jeszcze zmodyfikować zapytanie w kroku "Table input". Teraz będzie ono dynamiczne. Bedzie odbierać parametr dla składni WHERE:
Idź do programu Pentaho Report Designer i otwórz szablon naszego raportu. W oknie w prawym, górnym rogu ekranu wybierz zakładkę "Data". Na samym dole tego okna znajdziesz sekcję "Parameters". Kliknij prawym przyciskiem myszy i wybierz "Add parameter". Nazwa parametru to "data1" a value type to "String". Zapisz i zamknij okno. W tym samym panelu, "Data", kliknij dwukrotnie na źródło danych "Pentaho Data Integration:...". Otworzy się okno definicji źródła w którym masz zdefiniowaną transformację dostarczającą dane dla naszego raportu. Wybierz przycisk "Edit Parameter". W następnym oknie wpisz dla "Name" data1 a w polu Value z rozwijalnej listy wybierz pole "=[data1]". Zapisz i zamknij.
Wykonaj transformację zawierającą krok "Pentaho reporting output". Raport który zapisze się w wyniku tej operacji na dysku będzie zawierać tylko rekordy dla dnia "2020-02-05".
Możesz dalej edytować raport lub transformacje. Teraz rozumiesz już jak działa przesyłanie parametrów miedzy Pentaho Kettle i Pentaho Reporting Design.