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.
187 lines
5.1 KiB
187 lines
5.1 KiB
|
|
# Functions
|
|
|
|
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)
|
|
}
|
|
)
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# Data import
|
|
|
|
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)
|
|
|
|
|
|
# Operations on Data and creation of other data
|
|
|
|
# S4HANA Sales with integration to C4 Quote configuration and integration process. Support controlling and project team towards impletation and go live.
|
|
# Little bit knowledge with Finance and SAP implementation. Data migration, testing, Go live.... ()
|
|
# BAM of S4 HANA, support key users with data migration, testing, training (On Site)
|
|
|
|
rawformat<- function(inputpath, inputdata="Contact", pathname="./contacts/raw-data/"){
|
|
conta <- lapply(inputpath, read_excel)
|
|
names(conta) <- gsub(pathname, "", inputpath)
|
|
c <- lapply(conta, nrow)
|
|
Input_data <- inputdata
|
|
#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))
|
|
|
|
return(temp)
|
|
}
|
|
|
|
input.summary<-
|
|
rbind(
|
|
rawformat(inputpath=contactinputpath, inputdata="Contacts",pathname="./contacts/raw-data/"),
|
|
rawformat(inputpath=accountinputpath, inputdata="Accounts", pathname="./accounts/raw-data/"),
|
|
rawformat(inputpath=projectinputpath, inputdata="Projects", pathname="./projects/raw-data/")
|
|
) |> arrange(desc(Observations))
|
|
|
|
input.summary.summ <- input.summary |>
|
|
group_by(Input_data) |>
|
|
summarise(Observations = sum(Observations)) |>
|
|
arrange(desc(Observations))
|
|
|
|
|
|
# Contacts
|
|
|
|
|
|
error.function<- function(filepath="./contacts/summary", filename="Error_Contact", country){
|
|
errfilepath <-
|
|
list.files(filepath,
|
|
pattern = "*_error.csv",
|
|
full.names = T)
|
|
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)) |>
|
|
filter(Country %in% country)
|
|
|
|
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 = filename)
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
contdup<-read.csv("duplicatecontacts.csv")
|
|
accdup<-read.csv("duplicateaccounts.csv")
|
|
empmissing<-read.csv("empmissinginsap.csv")
|
|
|
|
|
|
|
|
|