Task Analysis Dashboard
Load necessary libraries
library(shiny) library(dplyr) library(readxl) library(DT) library(lubridate) library(knitr) library(rmarkdown)
Define the UI
ui <- fluidPage( uiOutput(“dynamicTitle”),
sidebarLayout( sidebarPanel( fileInput(“file1”, “Upload Excel File”, accept = c(“.xls”, “.xlsx”)), textInput(“department”, “Department Name”, value = ““), dateInput(”task_date”, “Select Task Date”), downloadButton(“downloadPDF”, “Download Report (PDF)”) ),
mainPanel(
h3("Task Analysis by Assignees"),
dataTableOutput("assigneeTable"),
h3("Task Analysis by Project"),
dataTableOutput("projectTable")
)
) )
Define the server logic
server <- function(input, output, session) { output\(dynamicTitle <- renderUI({ department <- input\)department if (department != ““) { titlePanel(HTML(paste(”Task Analysis - “, department,”“))) } else { titlePanel(”Task Analysis”) } })
data <- reactive({ req(input\(file1) df <- read_excel(input\)file1\(datapath) df <- df %>% select(Project, Assignees, Task, Progress, `Task Date`) %>% mutate(`Task Date` = mdy(paste(`Task Date`, "2024")) %>% as.Date()) %>% filter(`Task Date` == input\)task_date) return(df) })
output$assigneeTable <- renderDataTable({ df <- data() assignee_summary <- df %>% group_by(Assignees) %>% summarise( Total_Tasks = n(), Completed_Percentage = mean(Progress == “Completed”) * 100 ) datatable(assignee_summary) })
output$projectTable <- renderDataTable({ df <- data() project_summary <- df %>% group_by(Project) %>% summarise( Total_Tasks = n(), Completed_Percentage = mean(Progress == “Completed”) * 100 ) datatable(project_summary) })
output\(downloadPDF <- downloadHandler( filename = function() { paste("task_analysis_", Sys.Date(), ".pdf", sep = "") }, content = function(file) { tempReport <- file.path(tempdir(), "report_template.Rmd") fileConn <- file(tempReport) writeLines(c( "---", "title: 'Task Analysis Report'", "output: pdf_document", "params:", " data: NULL", " department: ''", "---", "", "## Department: **`r params\)department`**“,”“,”{r, echo=FALSE, message=FALSE, warning=FALSE}", "library(dplyr)", "library(knitr)", "", "df <- params$data", "", "## Task Summary by Assignee", "assignee_summary <- df %>%", " group_by(Assignees) %>%", " summarise(", " Total_Tasks = n(),", " Completed_Percentage = mean(Progress == \"Completed\") * 100", " )", "kable(assignee_summary, caption = \"Task Summary by Assignee\")", "", "## Task Summary by Project", "project_summary <- df %>%", " group_by(Project) %>%", " summarise(", " Total_Tasks = n(),", " Completed_Percentage = mean(Progress == \"Completed\") * 100", " )", "kable(project_summary, caption = \"Task Summary by Project\")", "” ), fileConn) close(fileConn)
rmarkdown::render(tempReport, output_file = file, params = list(
data = data(),
department = input$department
))
}
) }
Run the Shiny app
shinyApp(ui = ui, server = server)