Pentaho Report Designer - automatyzowanie raportów

W tym artykule zajmiemy się automatycznym tworzeniem raportów w Pentaho Report Designer (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

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.