|
|
|
|
---
|
|
|
|
|
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 echo=FALSE, message=FALSE, warning=FALSE}
|
|
|
|
|
contactinputpath<-list.files("./contacts/raw-data", pattern="*.xls", full.names = T)
|
|
|
|
|
accountinputpath<-list.files("./accounts/raw-data", pattern="*.xls", full.names = T)
|
|
|
|
|
projectinputpath<-list.files("./projects/raw-data", pattern="*.xls", 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(".xls","",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(".xls","",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(".xls","",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 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 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 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 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_Contact"
|
|
|
|
|
)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### Errors in details {.tabset .tabset-pills}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##### Mandatory
|
|
|
|
|
|
|
|
|
|
###### Contact
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```{r}
|
|
|
|
|
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}
|
|
|
|
|
codeerrfilepath<-list.files("./contacts/errors/codelist", pattern="*.csv", full.names = T)
|
|
|
|
|
codeerrfiles<-lapply(codeerrfilepath, read.csv)
|
|
|
|
|
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(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}
|
|
|
|
|
lenerrfilepath<-list.files("./contacts/errors/length", pattern="*.csv", full.names = T)
|
|
|
|
|
lenerrfiles<-lapply(lenerrfilepath, read.csv)
|
|
|
|
|
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 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 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 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}
|
|
|
|
|
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}
|
|
|
|
|
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}
|
|
|
|
|
codeerrfilepath<-list.files("./accounts/errors/codelist", pattern="*.csv", full.names = T)
|
|
|
|
|
codeerrfiles<-lapply(codeerrfilepath, read.csv)
|
|
|
|
|
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}
|
|
|
|
|
lenerrfilepath<-list.files("./accounts/errors/length", pattern="*.csv", full.names = T)
|
|
|
|
|
lenerrfiles<-lapply(lenerrfilepath, read.csv)
|
|
|
|
|
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 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 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 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}
|
|
|
|
|
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}
|
|
|
|
|
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}
|
|
|
|
|
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}
|
|
|
|
|
codeerrfilepath<-list.files("./projects/errors/codelist", pattern="*.csv", full.names = T)
|
|
|
|
|
codeerrfiles<-lapply(codeerrfilepath, read.csv)
|
|
|
|
|
#codeerrdf<-do.call(ltodf, codeerrfiles)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
data.table::rbindlist(codeerrfiles) |> 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}
|
|
|
|
|
lenerrfilepath<-list.files("./contacts/errors/length", pattern="*.csv", full.names = T)
|
|
|
|
|
lenerrfiles<-lapply(lenerrfilepath, read.csv)
|
|
|
|
|
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))
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 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"
|
|
|
|
|
)
|
|
|
|
|
```
|
|
|
|
|
|