#設置工作路徑 D:\資料\天富盈\天富盈\erp\erp錄入
setwd("D:\\資料\\程序文檔")
#設置文件名
path="C:\\Users\\Jarvis\\Desktop\\12月平臺品類數據.xlsx"
sql_yuju<-"SELECT * FROM edb_order
WHERE SUBSTRING(`訂貨日期`,1,10) >= '2019-12-01'
AND SUBSTRING(`訂貨日期`,1,10) <= '2019-12-31'"
#導入包
library(openxlsx)
library(dplyr)
library(sqldf)
#library(RMySQL)
#鏈接數據庫
con<-RMySQL::dbConnect(RMySQL::MySQL(),host='127.0.0.1',port=3306,dbname="team fortune",user="root",password="123456")
#查看數據庫裏所有的表
dbListTables(con)
#設置編碼 GBK
dbSendQuery(con,'SET NAMES GBK')
#查詢數據
E<-dbGetQuery(con,sql_yuju)
str(E)
#E店寶數據
#E<-read.csv('12月.csv',header=TRUE,sep=',',colClasses="character")
#店鋪名稱對照表連入D:\資料\天富盈\天富盈
duizhao<-read.xlsx('D:\\資料\\天富盈\\天富盈\\對照表.xlsx',1)
E<-left_join(E,duizhao,by="產品名稱")
names(E)
unique(E$店鋪名稱)
#按店鋪篩選
TM_E<-E[which(E$店鋪名稱=="【天】chocky旗艦店"),]
TB_E<-E[which(E$店鋪名稱=="【淘】泰好吃食趣"),]
JD_POP_E<-E[which(E$店鋪名稱=="【京】比斯奇果屋巧客旗艦店"),]
JD_ZHUAN_E<-E[which(E$店鋪名稱=="【京】天富盈食品專營店"),]
PDD_E<-E[which(E$店鋪名稱=="【拼】比斯奇果屋巧客食品旗艦店"),]
WPH_E<-E[which(E$店鋪名稱=="【唯】唯品會"),]
YZ_E<-E[which(E$店鋪名稱=="【贊】泰國比斯奇果屋巧客"),]
XHY_E<-E[which(E$店鋪名稱=="【黑】小黑魚APP"),]
XCX_E<-E[which(E$店鋪名稱=="小程序"),]
HSQ_E<-E[which(E$店鋪名稱=="好食期"),]
shopname<-c(substitute(TM_E),substitute(TB_E),
substitute(JD_POP_E),substitute(JD_ZHUAN_E),
substitute(PDD_E),substitute(WPH_E),
substitute(YZ_E),substitute(XHY_E),
substitute(XCX_E),substitute(HSQ_E))
#銷售量彙總
##分類彙總
toushi<-function(tablename){
#做數據透視表,構建sql語句
sql<-paste('select "產品名稱",sum(訂貨數量),sum("實付金額"),"修改後名稱" from ',tablename,' group by "產品名稱"',sep=" ")
shops<-sqldf(sql)
names(shops)<-c("產品名稱","訂貨數量","實付金額","修改後名稱")
return(shops)
}
##數據處理 將分類名中有X的乘入 +號分開
clean<-function(tablname){
#提取修改名後有X的名稱
doubles<-grep(pattern = "X",x = tablname$修改後名稱,value = F)
#提取乘以倍數
LastBate<-as.integer(substr(tablname[doubles,]$修改後名稱,nchar(tablname[doubles,]$修改後名稱),nchar(shop[doubles,]$修改後名稱)))
#將訂貨數量乘以倍數,去掉修改名稱後面的乘項
tablname[doubles,]$訂貨數量 <- tablname[doubles,]$訂貨數量 * LastBate
tablname[doubles,]$修改後名稱<-substr(tablname[doubles,]$修改後名稱,1,nchar(tablname[doubles,]$修改後名稱)-2)
#提取修改名中有 + 的名稱
adds<-grep(pattern = "\\+",x = tablname$修改後名稱,value = F)
if (length(adds)!=0) {
#將有+的數據剔除,複製到新表
tichu<-tablname[adds,]
tablname<-tablname[-adds,]
#將修改名中有 + 的名稱用+切割爲list
xx<-strsplit(tichu$修改後名稱,split = "\\+")
#將有+的數據循環寫回原來的表
for (j in c(1:length(adds))) {
print("開始處理這個表")
pro<-cbind(tichu$產品名稱[j],tichu$訂貨數量[j],tichu$實付金額[j]/length(xx[[j]]),xx[[j]])
#print(pro)
colnames(pro)<-colnames(tablname)
tablname<-rbind(tablname,pro)
}
}else {
print("這個表無需處理")
}
return(tablname)
}
#循環查詢
mydata<-list()
for (i in shopname) {
shop<-toushi(i)
shop<-clean(shop)
#再進行一次透視處理
sql<-paste('select "修改後名稱",sum(訂貨數量),sum("實付金額") from ',substitute(shop),' group by "修改後名稱"',sep=" ")
shops<-sqldf(sql)
names(shops)<-c("產品名稱","訂貨數量","銷售額")
shops<-arrange(shops, desc(shops$訂貨數量))
mydata[[i]]<-shops
}
# 總體數據
shuju<-matrix(NA,0,3)
colnames(shuju)<-names(mydata[[1]])
shuju<-as.data.frame(shuju)
for (j in mydata){
shuju<-rbind(shuju,j)
}
shuju<-sqldf('select "產品名稱",sum(訂貨數量) "訂貨數量",sum("銷售額") "銷售額" from shuju group by "產品名稱" order by 訂貨數量 DESC')
#寫出list
names(mydata)<-c("天貓", "淘寶","京東旗艦店" ,"京東專營店","拼多多",
"唯品會" ,"有贊" ,"小黑魚","小程序","好食期")
shuju<-list(shuju)
#寫出
write.xlsx(c("總體"=shuju,mydata), path)
統計出庫數,sql查詢數據,sqldf做透視表,循壞處理數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.