Dynamische Reports mit R
Vor kurzem hat mich jemand gefragt, wie man denn mit R Reports dynamisch gestalten könne. Ausgehend von Erfahrungen, die ich damals beim automatisierten Textsatz eines Konferenzprogramms sammeln konnte, war die Lösung nicht schwer.
Ausgangspunkt ist eine CSV Datei, die über das RSQLite Paket in eine in-memory Datenbank geladen wird. Auf des Basis dieser Datenbank werden dann ein paar SQL-Statements aufgebaut, die dann beliebig ausgewertet werden können.
# read excel table from csv to dataframe df = read.table("g:/datasource.csv",sep=";",header=TRUE) # set up plot window par(mfrow = c(3,2)) # load SQlite library library("RSQLite") # create fresh database in memory db <- dbConnect(SQLite(),dbname=".memory.") # write dataframe to database dbWriteTable(db, "kpi", df) # list all tables in db dbListTables(db) # get a vector of all departments departments = dbGetQuery(db, "Select distinct(department) from kpi") for(i in 1:nrow(departments)){ print(paste("Department",departments[i,1],sep=" ")) statement = paste("Select distinct(manager) from kpi where department='",departments[i,1],"'",sep="") # print(statement) manager = dbGetQuery(db, statement) for(j in 1:nrow(manager)){ print(paste("Manager",manager[j,1],sep=" ")) statement = paste("Select distinct(employee) from kpi where department='",departments[i,1],"'"," and manager='",manager[j,1],"'",sep="") # print(statement) employee = dbGetQuery(db, statement) for(k in 1:nrow(employee)){ print(paste("Employee",employee[k,1],sep=" ")) statement = paste("Select kpi1,kpi2,kpi3 from kpi where department='",departments[i,1],"'"," and manager='",manager[j,1],"' and employee='",employee[k,1],"'",sep="") # print(statement) fulldata_employee = dbGetQuery(db, statement) # print(fulldata_employee) x <- c(1,2,3) plot(x,fulldata_employee,type="l",main=paste(departments[i,1],manager[j,1],employee[k,1],sep=" ")) } } } dbDisconnect(db) |