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.