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

---
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")
```