Skip to content

1.6 Wsadowe generowanie wielu raportów

zozlak edited this page Oct 25, 2016 · 10 revisions

Automatyczne generowanie raportów dla wielu odbiorców jest realizowane przy użyciu funkcji generujRaporty() pakietu MLAK. Aby z niej skorzystać niezbędne jest stworzenie krótkiego skryptu w języku R, który załaduje pakiet MLAK, a następnie wywoła funkcję generujRaporty() z odpowiednimi argumentami. W tym celu należy:

  • Przygotować szablon raportu, plik danych oraz plik definicji odbiorców, tak jak w wypadku generowania pojedynczego raportu.

  • Utworzyć nowy skrypt R – w RStudio:

    • wybrać menu File => New File => R Script
    • wybrać menu File => Save i zapisać skrypt w wybranej lokalizacji (najlepiej w tym samym katalogu, w którym znajdują się plik szablonu, danych oraz definicji odbiorców)
  • Wpisać kod skryptu, odpowiednio dostosowując ścieżki do plików:

    library(MLAK)
    generujRaporty(
      'ścieżkaDoPlikuSzablonuRaportu',
      'ścieżkaDoPlikuDefinicjiOdbiorców',
      'ścieżkaDoPlikuDanych',
      'ścieżkaDoDodatkoweogPlikuDanych',
      'katalogDoKtóregoZostanąZapisaneRaporty'
    )
    • W wypadku, gdy korzystamy z tylko jednego pliku danych:

      library(MLAK)  
      generujRaporty(  
        'ścieżkaDoPlikuSzablonuRaportu',  
        'ścieżkaDoPlikuDefinicjiOdbiorców',  
        'ścieżkaDoPlikuDanych',
        katalogWy = 'katalogDoKtóregoZostanąZapisaneRaporty'  
      )  
  • Ustawić katalog roboczy na katalog skryptu – w RStudio wybrać menu Session => Set Working Directory => To Source File Location

  • Wykonać skrypt – w RStudio wykonać jedną z czynności:

    • wybrać w menu Code => Run Region => Run All,
    • nacisnąć kombinację klawiszy CTRL+ALT+R,
    • zaznaczyć cały skrypt i nacisnąć kombinację klawiszy CTRL+ENTER. W wyniku wykonania skryptu we wskazanym katalogu zapisane zostaną raporty dla wszystkich odbiorców opisanych w pliku definicji odbiorców.

Uwaga! Za nazwy plików dla poszczególnych odbiorców przyjęte zostaną wartości z pierwszej zmiennej (kolumny) pliku definicji odbiorców. W wypadku, jeśli zmienna ta nie będzie miała unikalnych wartości, wtedy dla duplikatów raporty wygenerowane później nadpiszą te wygenerowane wcześniej.

Uwaga! Jako że funkcja generujRaporty() sama kolejno wczytuje właściwych odbiorców, wszystkie wywołania funkcji wczytajOdbiorce() zostaną automatycznie pominięte. Nie trzeba więc usuwać ich z szablonu raportu przed automatycznym wygenerowaniem raportów dla wielu odbiorców.

Przykład

Załóżmy, że w tym samym katalogu przygotowaliśmy:

Szablon raportu szablon.Rmd:

---
title: "Mój raport"
output:
  pdf_document
---
```{r, echo = FALSE}
library(MLAK)
wczytajOdbiorce('odbiorcy.csv', 'dane.csv')

filtr = Id == IdOdbiorcy
```
Średnia ocen dla `r NazwaOdbiorcyCel`: `r E(Ocena[filtr])`

Plik danych dane.csv:

Id Ocena
1 |     2
1 |     3
1 |     3
1 |     2
1 |     4
2 |     3
2 |     4
2 |     5
2 |     5
2 |     3

Plik definicji odbiorców odbiorcy.csv:

NazwaOdbiorcy IdOdbiorcy NazwaOdbiorcyCel
odbiorca X 1 odbiorcy X
odbiorca Y 2 odbiorcy Y

Skrypt do automatycznej generacji raportów skrypt.R:

library(MLAK)
generujRaporty(
  'szablon.Rmd',
  'odbiorcy.csv',
  'dane.csv',
  katalogWy = 'raporty'
)

Wykonanie skryptu spowoduje utworzenie katalogu raporty, w którym znajdować się będą pliki odbiorca X.pdf oraz odbiorca Y.pdf – raporty dla wszystkich odbiorców zdefiniowanych w pliku definicji odbiorców.