## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
eval = FALSE
)
## ----eval=FALSE---------------------------------------------------------------
# # This chunk uses include=FALSE in the actual Rmd
# library(brightspaceR)
# library(dplyr)
# library(lubridate)
# library(jsonlite)
#
# # Helpers: convert R vectors to JS array literals
# js_labels <- function(x) toJSON(as.character(x), auto_unbox = FALSE)
# js_values <- function(x) toJSON(as.numeric(x), auto_unbox = FALSE)
#
# # Fetch datasets
# enrollments <- bs_get_dataset("User Enrollments")
# roles <- bs_get_dataset("Role Details")
# grades <- bs_get_dataset("Grade Results")
# org_units <- bs_get_dataset("Org Units")
# users <- bs_get_dataset("Users")
#
# # Apply date filter from params
# enrollments <- enrollments |>
# filter(
# as.Date(enrollment_date) >= params$from_date,
# as.Date(enrollment_date) <= params$to_date
# )
#
# # KPIs
# total_users <- format(nrow(users), big.mark = ",")
# total_enrol <- format(nrow(enrollments), big.mark = ",")
# n_courses <- format(
# n_distinct(org_units$org_unit_id[org_units$type == "Course Offering"]),
# big.mark = ","
# )
# avg_grade <- grades |>
# filter(!is.na(points_numerator), points_numerator >= 0) |>
# summarise(m = round(mean(points_numerator, na.rm = TRUE), 1)) |>
# pull(m)
#
# # Chart data
# role_counts <- enrollments |>
# bs_join_enrollments_roles(roles) |>
# count(role_name, sort = TRUE) |>
# head(8)
#
# monthly_trend <- enrollments |>
# mutate(month = floor_date(as.Date(enrollment_date), "month")) |>
# count(month) |>
# arrange(month)
#
# grade_dist <- grades |>
# filter(!is.na(points_numerator), points_numerator >= 0) |>
# mutate(bracket = cut(points_numerator,
# breaks = seq(0, 100, 10), include.lowest = TRUE, right = FALSE
# )) |>
# count(bracket) |>
# filter(!is.na(bracket))
#
# top_courses <- enrollments |>
# bs_join_enrollments_orgunits(org_units) |>
# filter(type == "Course Offering") |>
# count(name, sort = TRUE) |>
# head(10)
## ----eval=FALSE---------------------------------------------------------------
# # In the Rmd, this is raw HTML (not an R chunk).
# # Inline R expressions like `r js_labels(...)` are replaced by knitr
# # with the evaluated JSON output before the HTML is finalised.
# #
# # Example Chart.js initialisation:
# #
# #
# #
## -----------------------------------------------------------------------------
# # Default: last 12 months
# rmarkdown::render("dashboard.Rmd",
# output_file = "brightspaceR_output/dashboard.html")
# browseURL("brightspaceR_output/dashboard.html")
## -----------------------------------------------------------------------------
# # This semester
# rmarkdown::render("dashboard.Rmd",
# params = list(from_date = as.Date("2026-01-01"), to_date = Sys.Date()),
# output_file = "brightspaceR_output/dashboard_s1_2026.html"
# )
#
# # Last year
# rmarkdown::render("dashboard.Rmd",
# params = list(from_date = as.Date("2025-01-01"), to_date = as.Date("2025-12-31")),
# output_file = "brightspaceR_output/dashboard_2025.html"
# )