--- title: "Report" author: "Data Science Team, LaNubia" date: '`r format(Sys.time(), "%d %B, %Y")`' output: html_document: theme: lumen highlight: tango self_contained: true toc: true toc_depth: 4 toc_float: true css: style.css includes: in_header: plausible.html --- ```{r setup, include=FALSE} knitr::opts_chunk$set( echo = FALSE, error = TRUE, message = FALSE, warning = FALSE ) library(readxl) library(DT) library(tidyr) library(dplyr) library(highcharter) library(purrr) library(stringr) rxl <- function(path, ...) { tryCatch( read_excel(path, ...), error = function(c) { c$message <- "No Data" print("No Data") stop(c) } ) } ltodf <- function(path, ...) { tryCatch( rbind.data.frame(path, ...), error = function(c) { c$message <- "No Data" print("No Data") stop(c) } ) } ``` **Non commercial license of Highchart library used** ## Status Report ### Input Available ```{r input available, echo=FALSE, message=FALSE, warning=FALSE} contactinputpath <- list.files("./contacts/raw-data", pattern = "*.xlsx", full.names = T) accountinputpath <- list.files("./accounts/raw-data", pattern = "*.xlsx", full.names = T) projectinputpath <- list.files("./projects/raw-data", pattern = "*.xlsx", full.names = T) supportinputpath <- list.files("./support/raw-data", pattern = "*.xls", full.names = T) conta <- lapply(contactinputpath, read_excel) names(conta) <- gsub("./contacts/raw-data/", "", contactinputpath) c <- lapply(conta, nrow) Input_data <- "Contact" #Country<-gsub(".xlsx","",names(conta)) Observations <- c temp <- data.frame(Input_data, Observations) |> pivot_longer(cols = (-1), names_to = "Country", values_to = "Observations") |> mutate(Country = gsub(".xlsx", "", Country)) input.summary <- temp acco <- lapply(accountinputpath, read_excel) names(acco) <- gsub("./accounts/raw-data/", "", accountinputpath) a <- lapply(acco, nrow) Input_data <- "Accounts" #Country<-gsub(".xlsx","",names(conta)) Observations <- a temp <- data.frame(Input_data, Observations) |> pivot_longer(cols = (-1), names_to = "Country", values_to = "Observations") |> mutate(Country = gsub(".xlsx", "", Country)) input.summary <- rbind(input.summary, temp) proja <- lapply(projectinputpath, read_excel) names(proja) <- gsub("./projects/raw-data/", "", projectinputpath) p <- lapply(proja, nrow) Input_data <- "Projects" #Country<-gsub(".xlsx","",names(conta)) Observations <- p temp <- data.frame(Input_data, Observations) |> pivot_longer(cols = (-1), names_to = "Country", values_to = "Observations") |> mutate(Country = gsub(".xlsx", "", Country)) input.summary <- rbind(input.summary, temp) suppo <- lapply(supportinputpath, read_excel) names(suppo) <- gsub("./support/raw-data/", "", supportinputpath) s <- lapply(suppo, nrow) Input_data <- "Support" #Country<-gsub(".xlsx","",names(conta)) Observations <- s temp <- data.frame(Input_data, Observations) |> pivot_longer(cols = (-1), names_to = "Country", values_to = "Observations") |> mutate(Country = gsub(".xls", "", Country)) input.summary <- rbind(input.summary, temp) # datatable(input.summary, extensions = "Buttons", # options = list(paging = TRUE, # scrollX=TRUE, # searching = TRUE, # ordering = TRUE, # dom = 'Bfrtip', # buttons = c('copy', 'csv', 'excel', 'pdf'), # pageLength=10, # lengthMenu=c(3,5,10) )) input.summary <- input.summary |> arrange(desc(Observations)) input.summary.summ <- input.summary |> group_by(Input_data) |> summarise(Observations = sum(Observations)) |> arrange(desc(Observations)) input.summary.drilldown <- input.summary |> group_nest(Input_data) |> mutate( id = Input_data, type = "column", data = map(data, mutate, name = Country, y = Observations), data = map(data, list_parse) ) tt <- tooltip_table(c("No. of Observations(Input)"), c("{point.Observations}")) hchart( input.summary.summ, "column", hcaes( x = Input_data, y = Observations, name = Input_data, drilldown = Input_data ), name = "Segment view", colorByPoint = TRUE ) |> hc_drilldown(allowPointDrilldown = TRUE, series = list_parse(input.summary.drilldown)) |> hc_tooltip(pointFormat = tt, # "{point.name} {point.pop}" useHTML = TRUE, valueDecimals = 0) |> hc_yAxis(title = list(text = "Number of observations")) |> hc_xAxis(title = "Segment") |> hc_credits(enabled = TRUE, text = "LaNubia Data Science", href = "https://www.lanubia.com/") |> hc_exporting(enabled = TRUE, # always enabled filename = "Input Summary") |> hc_title(text = "Observations by segment") |> hc_subtitle(text = "Click on the bar to view details by country") ``` Simplified view ```{r simplified view, echo=FALSE} input.summary |> pivot_wider(names_from = Country, values_from = Observations) |> datatable( extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10) ) ) ``` ### Contacts #### Template SAP templates available: ```{r contacts_template, echo=FALSE} datatable( data.frame(Templates = unique( rxl("./contacts/template.xlsx", sheet = "Field_Definitions")[, 1] )), extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10) ) ) ``` #### Summary of Errors ```{r contacts_soe, echo=FALSE, message=FALSE, warning=FALSE} sumerrfilepath <- list.files("./contacts/summary", pattern = "*sumerror.csv", full.names = T) errfilepath <- list.files("./contacts/summary", pattern = "*_error.csv", full.names = T) sumerrfiles <- lapply(sumerrfilepath, read.csv) # datatable(unique(do.call(ltodf, sumerrfiles)), extensions = "Buttons", # options = list(paging = TRUE, # scrollX=TRUE, # searching = TRUE, # ordering = TRUE, # dom = 'Bfrtip', # buttons = c('copy', 'csv', 'excel', 'pdf'), # pageLength=10, # lengthMenu=c(3,5,10) )) tdf <- unique(do.call(ltodf, sumerrfiles)) |> arrange(desc(Expected)) tdf <- tdf |> mutate(Pending = Expected - Actual) |> select(-Name) |> unique() tdf |> hchart( "bullet", hcaes(x = Country, y = Actual, target = Expected), color = "black", name = "Observations (Output)" ) |> hc_chart(inverted = TRUE) |> hc_add_series(tdf, "pie", hcaes(x = Country, y = Pending), name = "Pending (Major Issues)") |> hc_plotOptions(pie = list( center = c('70%', '70%'), size = 200, dataLabels = list(enabled = FALSE), showInLegend = T )) |> hc_title(text = "Expect vs Actual") |> hc_subtitle(text = "Pie shows number of major issues identified") |> hc_credits(enabled = TRUE, text = "LaNubia Data Science", href = "https://www.lanubia.com/") |> hc_exporting(enabled = TRUE, # always enabled filename = "ErrorSum_Contact") ``` #### Error by template ```{r contacts_ebt, echo=FALSE, message=FALSE, warning=FALSE} errfiles <- lapply(errfilepath, read.csv) tdf <- unique(do.call(ltodf, errfiles)) tdf <- tdf |> mutate(err.deep = word(err.type, -1)) |> mutate(err = word(err.type, 1, -2)) |> select(-err.type) |> select(c(Name, Country, err, err.deep, err.count)) |> arrange(desc(err.count)) tdf.country <- tdf |> group_by(Country) |> summarize(err.count = sum(err.count)) |> arrange(err.count) Lvl1dfStatus <- tibble( name = tdf.country$Country, y = tdf.country$err.count, drilldown = tolower(name) ) Level_2_Drilldowns <- lapply(unique(tdf$Country), function(x_level) { tdf.err <- tdf[tdf$Country == x_level, ] tdf.err <- tdf.err |> group_by(err) |> summarize(err.count = sum(err.count)) |> arrange(err.count) Lvl2dfStatus <- tibble( name = tdf.err$err, y = tdf.err$err.count, drilldown = tolower(paste(x_level, name, sep = "_")) ) list( id = tolower(x_level), type = "column", data = list_parse(Lvl2dfStatus), name = "High Level Error" ) }) Level_3_Drilldowns <- lapply(unique(tdf.country$Country), function(x_level) { tdf.err <- tdf[tdf$Country == x_level, ] lapply(unique(tdf.err$err), function(y_level) { tdf.err.deep <- tdf.err[tdf.err$err == y_level, ] tdf.err.deep <- tdf.err.deep |> group_by(err.deep) |> summarize(err.count = sum(err.count)) |> arrange(err.count) Lvl3dfStatus <- tibble(name = tdf.err.deep$err.deep, y = tdf.err.deep$err.count) list( id = tolower(paste(x_level, y_level, sep = "_")), type = "column", data = list_parse2(Lvl3dfStatus), name = "Deep Dive" ) }) }) |> unlist(recursive = FALSE) highchart() |> hc_xAxis(type = "category") |> hc_add_series( Lvl1dfStatus, "column", hcaes(x = name, y = y), name = "Country View", showInLegend = F ) |> hc_plotOptions(column = list(stacking = "normal"), lang = list(drillUpText = "Back")) |> hc_drilldown( allowPointDrilldown = TRUE, series = c(Level_2_Drilldowns, Level_3_Drilldowns) ) |> hc_yAxis(title = list(text = "Number of errors")) |> hc_title(text = "Error Count") |> hc_subtitle(text = "Click on bar for deep dive") |> hc_credits(enabled = TRUE, text = "LaNubia Data Science", href = "https://www.lanubia.com/") |> hc_tooltip() |> hc_exporting(enabled = TRUE, # always enabled filename = "Error_Contact") ``` #### Errors in details {.tabset .tabset-pills} ##### Mandatory ###### Contact ```{r mand_contact} manderrfilepath <- list.files("./contacts/errors/mandatory", pattern = "*.csv", full.names = T) manderrfiles <- lapply(manderrfilepath, read.csv) manderrdf <- do.call(ltodf, manderrfiles) datatable( manderrdf, extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10), filter = TRUE ) ) ``` ##### Codelist ```{r codelist_contact} codeerrfilepath <- list.files("./contacts/errors/codelist", pattern = "*.csv", full.names = T) codeerrfiles <- lapply(codeerrfilepath, read.csv) if(length(codeerrfiles)>0){ codeerrdf <- do.call(ltodf, codeerrfiles) codeerrdf |> select(c(3, 4)) |> rename(ColValues = def.rows.val, ColNames = def.colname) |> count(ColValues, ColNames) |> rename(Occurences = n) |> datatable( manderrdf, extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10), filter = TRUE ) ) } ``` ##### Length ```{r length_contact} lenerrfilepath <- list.files("./contacts/errors/length", pattern = "*.csv", full.names = T) lenerrfiles <- lapply(lenerrfilepath, read.csv) if(length(lenerrfiles)){ lenerrdf <- do.call(ltodf, lenerrfiles) datatable( lenerrdf, extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10), filter = TRUE ) ) } ``` ### Accounts #### Template SAP templates available: ```{r accounts_template, echo=FALSE} datatable( data.frame(Templates = unique( rxl("./accounts/template.xlsx", sheet = "Field_Definitions")[, 1] )), extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10) ) ) ``` #### Summary of Errors ```{r accounts_soe, echo=FALSE, message=FALSE, warning=FALSE} sumerrfilepath <- list.files("./accounts/summary", pattern = "*sumerror.csv", full.names = T) errfilepath <- list.files("./accounts/summary", pattern = "*_error.csv", full.names = T) sumerrfiles <- lapply(sumerrfilepath, read.csv) # datatable(unique(do.call(ltodf, sumerrfiles)), extensions = "Buttons", # options = list(paging = TRUE, # scrollX=TRUE, # searching = TRUE, # ordering = TRUE, # dom = 'Bfrtip', # buttons = c('copy', 'csv', 'excel', 'pdf'), # pageLength=10, # lengthMenu=c(3,5,10) )) tdf <- unique(do.call(ltodf, sumerrfiles)) |> arrange(desc(Expected)) tdf <- tdf |> mutate(Pending = Expected - Actual) |> select(-Name) |> unique() tdf |> hchart( "bullet", hcaes(x = Country, y = Actual, target = Expected), color = "black", name = "Observations (Output)" ) |> hc_chart(inverted = TRUE) |> hc_add_series(tdf, "pie", hcaes(x = Country, y = Pending), name = "Pending (Major Issues)") |> hc_plotOptions(pie = list( center = c('70%', '70%'), size = 200, dataLabels = list(enabled = FALSE), showInLegend = T )) |> hc_title(text = "Expect vs Actual") |> hc_subtitle(text = "Pie shows number of major issues identified") |> hc_credits(enabled = TRUE, text = "LaNubia Data Science", href = "https://www.lanubia.com/") |> hc_exporting(enabled = TRUE, # always enabled filename = "ErrorSumm_Account") ``` #### Error by template ```{r accounts_ebt, echo=FALSE, message=FALSE, warning=FALSE} errfiles <- lapply(errfilepath, read.csv) # datatable(unique(do.call(ltodf, errfiles)), extensions = "Buttons", # options = list(paging = TRUE, # scrollX=TRUE, # searching = TRUE, # ordering = TRUE, # dom = 'Bfrtip', # buttons = c('copy', 'csv', 'excel', 'pdf'), # pageLength=10, # lengthMenu=c(3,5,10) )) tdf <- unique(do.call(ltodf, errfiles)) tdf <- tdf |> mutate(err.deep = word(err.type, -1)) |> mutate(err = word(err.type, 1, -2)) |> select(-err.type) |> select(c(Name, Country, err, err.deep, err.count)) |> arrange(desc(err.count)) tdf.country <- tdf |> group_by(Country) |> summarize(err.count = sum(err.count)) |> arrange(err.count) Lvl1dfStatus <- tibble( name = tdf.country$Country, y = tdf.country$err.count, drilldown = tolower(name) ) Level_2_Drilldowns <- lapply(unique(tdf$Country), function(x_level) { tdf.err <- tdf[tdf$Country == x_level, ] tdf.err <- tdf.err |> group_by(err) |> summarize(err.count = sum(err.count)) |> arrange(err.count) Lvl2dfStatus <- tibble( name = tdf.err$err, y = tdf.err$err.count, drilldown = tolower(paste(x_level, name, sep = "_")) ) list( id = tolower(x_level), type = "column", data = list_parse(Lvl2dfStatus), name = "High Level Error" ) }) Level_3_Drilldowns <- lapply(unique(tdf.country$Country), function(x_level) { tdf.err <- tdf[tdf$Country == x_level, ] lapply(unique(tdf.err$err), function(y_level) { tdf.err.deep <- tdf.err[tdf.err$err == y_level, ] tdf.err.deep <- tdf.err.deep |> group_by(err.deep) |> summarize(err.count = sum(err.count)) |> arrange(err.count) Lvl3dfStatus <- tibble(name = tdf.err.deep$err.deep, y = tdf.err.deep$err.count) list( id = tolower(paste(x_level, y_level, sep = "_")), type = "column", data = list_parse2(Lvl3dfStatus), name = "Deep Dive" ) }) }) |> unlist(recursive = FALSE) highchart() |> hc_xAxis(type = "category") |> hc_add_series( Lvl1dfStatus, "column", hcaes(x = name, y = y), name = "Country View", showInLegend = F ) |> hc_plotOptions(column = list(stacking = "normal"), lang = list(drillUpText = "Back")) |> hc_drilldown( allowPointDrilldown = TRUE, series = c(Level_2_Drilldowns, Level_3_Drilldowns) ) |> hc_yAxis(title = list(text = "Number of errors")) |> hc_title(text = "Error Count") |> hc_subtitle(text = "Click on bar for deep dive") |> hc_credits(enabled = TRUE, text = "LaNubia Data Science", href = "https://www.lanubia.com/") |> hc_tooltip() |> hc_exporting(enabled = TRUE, # always enabled filename = "Error_Account") ``` #### Errors in details {.tabset .tabset-pills} ##### Mandatory {.tabset .tabset-pills} ###### Account ```{r mand_accounts} manderrfilepath <- list.files("./accounts/errors/mandatory", pattern = "*.csv", full.names = T) manderrfiles <- lapply(manderrfilepath, read.csv) manderrdf <- do.call(ltodf, manderrfiles[c(1, 3, 5, 7, 9)]) datatable( manderrdf, extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10), filter = TRUE ) ) ``` ###### Account Team ```{r mand_account_team} manderrdf <- do.call(ltodf, manderrfiles[c(2, 4, 6, 8, 10)]) datatable( manderrdf, extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10), filter = TRUE ) ) ``` ##### Codelist ```{r codelist_account} codeerrfilepath <- list.files("./accounts/errors/codelist", pattern = "*.csv", full.names = T) codeerrfiles <- lapply(codeerrfilepath, read.csv) if(length(codeerrfiles)>0){ codeerrdf <- do.call(ltodf, codeerrfiles) codeerrdf |> select(c(3, 4)) |> rename(ColValues = def.rows.val, ColNames = def.colname) |> count(ColValues, ColNames) |> rename(Occurences = n) |> datatable( manderrdf, extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10), filter = TRUE ) ) } ``` ##### Length ```{r length_accounts} lenerrfilepath <- list.files("./accounts/errors/length", pattern = "*.csv", full.names = T) lenerrfiles <- lapply(lenerrfilepath, read.csv) if(length(lenerrfiles)){ lenerrdf <- do.call(ltodf, lenerrfiles) datatable( lenerrdf, extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10), filter = TRUE ) ) } ``` ### Projects #### Template SAP templates available: ```{r project_template, echo=FALSE} datatable( data.frame(Templates = unique( rxl("./projects/template.xlsx", sheet = "Field_Definitions")[, 1] )), extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10) ) ) ``` #### Summary of Errors ```{r project_soe, echo=FALSE, message=FALSE, warning=FALSE} sumerrfilepath <- list.files("./projects/summary", pattern = "*sumerror.csv", full.names = T) errfilepath <- list.files("./projects/summary", pattern = "*_error.csv", full.names = T) sumerrfiles <- lapply(sumerrfilepath, read.csv) # datatable(unique(do.call(ltodf, sumerrfiles)), extensions = "Buttons", # options = list(paging = TRUE, # scrollX=TRUE, # searching = TRUE, # ordering = TRUE, # dom = 'Bfrtip', # buttons = c('copy', 'csv', 'excel', 'pdf'), # pageLength=10, # lengthMenu=c(3,5,10) )) tdf <- unique(do.call(ltodf, sumerrfiles)) |> arrange(desc(Expected)) tdf <- tdf |> mutate(Pending = Expected - Actual) |> select(-Name) |> unique() tdf |> hchart( "bullet", hcaes(x = Country, y = Actual, target = Expected), color = "black", name = "Observations (Output)" ) |> hc_chart(inverted = TRUE) |> hc_add_series(tdf, "pie", hcaes(x = Country, y = Pending), name = "Pending (Major Issues)") |> hc_plotOptions(pie = list( center = c('70%', '70%'), size = 200, dataLabels = list(enabled = FALSE), showInLegend = T )) |> hc_title(text = "Expect vs Actual") |> hc_subtitle(text = "Pie shows number of major issues identified") |> hc_credits(enabled = TRUE, text = "LaNubia Data Science", href = "https://www.lanubia.com/") |> hc_exporting(enabled = TRUE, # always enabled filename = "ErrorSumm_Project") ``` #### Error by template ```{r project_ebt, echo=FALSE, message=FALSE, warning=FALSE} errfiles <- lapply(errfilepath, read.csv) # datatable(unique(do.call(ltodf, errfiles)), extensions = "Buttons", # options = list(paging = TRUE, # scrollX=TRUE, # searching = TRUE, # ordering = TRUE, # dom = 'Bfrtip', # buttons = c('copy', 'csv', 'excel', 'pdf'), # pageLength=10, # lengthMenu=c(3,5,10) )) tdf <- unique(do.call(ltodf, errfiles)) tdf <- tdf |> mutate(err.deep = word(err.type, -1)) |> mutate(err = word(err.type, 1, -2)) |> select(-err.type) |> select(c(Name, Country, err, err.deep, err.count)) |> arrange(desc(err.count)) tdf.country <- tdf |> group_by(Country) |> summarize(err.count = sum(err.count)) |> arrange(err.count) Lvl1dfStatus <- tibble( name = tdf.country$Country, y = tdf.country$err.count, drilldown = tolower(name) ) Level_2_Drilldowns <- lapply(unique(tdf$Country), function(x_level) { tdf.err <- tdf[tdf$Country == x_level, ] tdf.err <- tdf.err |> group_by(err) |> summarize(err.count = sum(err.count)) |> arrange(err.count) Lvl2dfStatus <- tibble( name = tdf.err$err, y = tdf.err$err.count, drilldown = tolower(paste(x_level, name, sep = "_")) ) list( id = tolower(x_level), type = "column", data = list_parse(Lvl2dfStatus), name = "High Level Error" ) }) Level_3_Drilldowns <- lapply(unique(tdf.country$Country), function(x_level) { tdf.err <- tdf[tdf$Country == x_level, ] lapply(unique(tdf.err$err), function(y_level) { tdf.err.deep <- tdf.err[tdf.err$err == y_level, ] tdf.err.deep <- tdf.err.deep |> group_by(err.deep) |> summarize(err.count = sum(err.count)) |> arrange(err.count) Lvl3dfStatus <- tibble(name = tdf.err.deep$err.deep, y = tdf.err.deep$err.count) list( id = tolower(paste(x_level, y_level, sep = "_")), type = "column", data = list_parse2(Lvl3dfStatus), name = "Deep Dive" ) }) }) |> unlist(recursive = FALSE) highchart() |> hc_xAxis(type = "category") |> hc_add_series( Lvl1dfStatus, "column", hcaes(x = name, y = y), name = "Country View", showInLegend = F ) |> hc_plotOptions(column = list(stacking = "normal"), lang = list(drillUpText = "Back")) |> hc_drilldown( allowPointDrilldown = TRUE, series = c(Level_2_Drilldowns, Level_3_Drilldowns) ) |> hc_yAxis(title = list(text = "Number of errors")) |> hc_title(text = "Error Count") |> hc_subtitle(text = "Click on bar for deep dive") |> hc_tooltip() |> hc_credits(enabled = TRUE, text = "LaNubia Data Science", href = "https://www.lanubia.com/") |> hc_exporting(enabled = TRUE, # always enabled filename = "Error_Project") ``` #### Errors in details {.tabset .tabset-pills} ##### Mandatory {.tabset .tabset-pills} ###### Opportunity ```{r mand_project} manderrfilepath <- list.files("./projects/errors/mandatory", pattern = "*.csv", full.names = T) manderrfiles <- lapply(manderrfilepath, read.csv) manderrdf <- do.call(ltodf, manderrfiles[c(1, 3, 6)]) datatable( manderrdf, extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10), filter = TRUE ) ) ``` ###### Opportunity Sales Team Party In ```{r mand_oppo_sales} manderrfilepath <- list.files("./projects/errors/mandatory", pattern = "*.csv", full.names = T) manderrfiles <- lapply(manderrfilepath, read.csv) manderrdf <- do.call(ltodf, manderrfiles[c(2, 5, 8)]) datatable( manderrdf, extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10), filter = TRUE ) ) ``` ###### Opportunity Party Information ```{r mand_opp_party} manderrfilepath <- list.files("./projects/errors/mandatory", pattern = "*.csv", full.names = T) manderrfiles <- lapply(manderrfilepath, read.csv) manderrdf <- do.call(ltodf, manderrfiles[c(4, 7)]) datatable( manderrdf, extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10), filter = TRUE ) ) ``` ##### Codelist ```{r codelist_project} codeerrfilepath <- list.files("./projects/errors/codelist", pattern = "*.csv", full.names = T) codeerrfiles <- lapply(codeerrfilepath, read.csv) if(length(codeerrfiles)>0){ codeerrdf <- do.call(ltodf, codeerrfiles) codeerrdf |> select(c(3, 4)) |> rename(ColValues = def.rows.val, ColNames = def.colname) |> count(ColValues, ColNames) |> rename(Occurences = n) |> datatable( manderrdf, extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10), filter = TRUE ) ) } ``` ##### Length ```{r length_project} lenerrfilepath <- list.files("./projects/errors/length", pattern = "*.csv", full.names = T) lenerrfiles <- lapply(lenerrfilepath, read.csv) if(length(lenerrfiles)){ lenerrdf <- do.call(ltodf, lenerrfiles) datatable( lenerrdf, extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10), filter = TRUE ) ) } ``` ```{r} # lenerrdf # opp_notes<-data.frame(matrix(nrow=34, ncol=6)) # names(opp_notes)<-c( # "External_Key", # "Opportunity_External_Key", # "Opportunity_ID", # "Text", # "Type_Code", # "Author_Name") # # opp_notes$Opportunity_External_Key<-lenerrdf$rowval # opp_notes$External_Key<-paste0("NOTE",opp_notes$Opportunity_External_Key) # opp_notes$Opportunity_ID<-c("") # opp_notes$Text<-lenerrdf$colval # opp_notes$Type_Code<-"10001" # opp_notes$Author_Name<-c("") # # write.csv( # opp_notes, # "./projects/output/combined/oppnotes.csv", # row.names = F, # na = "", # fileEncoding = "UTF-8", # sep = "," # ) # # openxlsx::write.xlsx(opp_notes,"./projects/output/combined/oppnotes.xlsx") ``` ### Support #### Template SAP templates available: ```{r echo=FALSE} datatable( data.frame(Templates = unique( rxl("./support/template.xlsx", sheet = "Field_Definitions")[, 1] )), extensions = "Buttons", options = list( paging = TRUE, scrollX = TRUE, searching = TRUE, ordering = TRUE, dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf'), pageLength = 10, lengthMenu = c(3, 5, 10) ) ) ``` #### Summary of Errors ```{r echo=FALSE, message=FALSE, warning=FALSE} sumerrfilepath <- list.files("./support/summary", pattern = "*sumerror.csv", full.names = T) errfilepath <- list.files("./support/summary", pattern = "*_error.csv", full.names = T) sumerrfiles <- lapply(sumerrfilepath, read.csv) # datatable(unique(do.call(ltodf, sumerrfiles)), extensions = "Buttons", # options = list(paging = TRUE, # scrollX=TRUE, # searching = TRUE, # ordering = TRUE, # dom = 'Bfrtip', # buttons = c('copy', 'csv', 'excel', 'pdf'), # pageLength=10, # lengthMenu=c(3,5,10) )) tdf <- unique(do.call(ltodf, sumerrfiles)) |> arrange(desc(Expected)) tdf <- tdf |> mutate(Pending = Expected - Actual) |> select(-Name) |> unique() tdf |> hchart( "bullet", hcaes(x = Country, y = Actual, target = Expected), color = "black", name = "Observations (Output)" ) |> hc_chart(inverted = TRUE) |> hc_add_series(tdf, "pie", hcaes(x = Country, y = Pending), name = "Pending (Major Issues)") |> hc_plotOptions(pie = list( center = c('70%', '70%'), size = 200, dataLabels = list(enabled = FALSE), showInLegend = T )) |> hc_title(text = "Expect vs Actual") |> hc_subtitle(text = "Pie shows number of major issues identified") |> hc_credits(enabled = TRUE, text = "LaNubia Data Science", href = "https://www.lanubia.com/") |> hc_exporting(enabled = TRUE, # always enabled filename = "ErrorSumm_Support") ``` #### Error by template ```{r echo=FALSE, message=FALSE, warning=FALSE} errfiles <- lapply(errfilepath, read.csv) # datatable(unique(do.call(ltodf, errfiles)), extensions = "Buttons", # options = list(paging = TRUE, # scrollX=TRUE, # searching = TRUE, # ordering = TRUE, # dom = 'Bfrtip', # buttons = c('copy', 'csv', 'excel', 'pdf'), # pageLength=10, # lengthMenu=c(3,5,10) )) tdf <- unique(do.call(ltodf, errfiles)) tdf <- tdf |> mutate(err.deep = word(err.type, -1)) |> mutate(err = word(err.type, 1, -2)) |> select(-err.type) |> select(c(Name, Country, err, err.deep, err.count)) |> arrange(desc(err.count)) tdf.country <- tdf |> group_by(Country) |> summarize(err.count = sum(err.count)) |> arrange(err.count) Lvl1dfStatus <- tibble( name = tdf.country$Country, y = tdf.country$err.count, drilldown = tolower(name) ) Level_2_Drilldowns <- lapply(unique(tdf$Country), function(x_level) { tdf.err <- tdf[tdf$Country == x_level, ] tdf.err <- tdf.err |> group_by(err) |> summarize(err.count = sum(err.count)) |> arrange(err.count) Lvl2dfStatus <- tibble( name = tdf.err$err, y = tdf.err$err.count, drilldown = tolower(paste(x_level, name, sep = "_")) ) list( id = tolower(x_level), type = "column", data = list_parse(Lvl2dfStatus), name = "High Level Error" ) }) Level_3_Drilldowns <- lapply(unique(tdf.country$Country), function(x_level) { tdf.err <- tdf[tdf$Country == x_level, ] lapply(unique(tdf.err$err), function(y_level) { tdf.err.deep <- tdf.err[tdf.err$err == y_level, ] tdf.err.deep <- tdf.err.deep |> group_by(err.deep) |> summarize(err.count = sum(err.count)) |> arrange(err.count) Lvl3dfStatus <- tibble(name = tdf.err.deep$err.deep, y = tdf.err.deep$err.count) list( id = tolower(paste(x_level, y_level, sep = "_")), type = "column", data = list_parse2(Lvl3dfStatus), name = "Deep Dive" ) }) }) |> unlist(recursive = FALSE) highchart() |> hc_xAxis(type = "category") |> hc_add_series( Lvl1dfStatus, "column", hcaes(x = name, y = y), name = "Country View", showInLegend = F ) |> hc_plotOptions(column = list(stacking = "normal"), lang = list(drillUpText = "Back")) |> hc_drilldown( allowPointDrilldown = TRUE, series = c(Level_2_Drilldowns, Level_3_Drilldowns) ) |> hc_yAxis(title = list(text = "Number of errors")) |> hc_title(text = "Error Count") |> hc_subtitle(text = "Click on bar for deep dive") |> hc_tooltip() |> hc_credits(enabled = TRUE, text = "LaNubia Data Science", href = "https://www.lanubia.com/") |> hc_exporting(enabled = TRUE, # always enabled filename = "Error_Support") ```