You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1411 lines
34 KiB
1411 lines
34 KiB
---
|
|
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")
|
|
```
|
|
|
|
|