在工作中,朋友們有沒有遇到過這種情況:
用Excel處理數(shù)據(jù),步驟繁瑣,容易出錯(cuò),且每隔一段時(shí)間就需要處理一次,比如:業(yè)績的日報(bào)、周報(bào)、月報(bào),潛意識里知道這些事情都可以用程序解決,但............................................實(shí)際情況是要么自己不會也不知道誰可以幫忙、要么自己會寫但不想花時(shí)間思考如何寫。
本篇分享一個(gè)常見的案例:“線索分配”,啥是線索分配呢?
1> 與銷售部門打交道過的朋友就會了解,銷售經(jīng)理獲得的客戶信息,一部分是自己的客戶積累,一部分來自公海線索的分配(即公司存量中暫無銷售服務(wù)的客戶,簡稱“公海”),我們把客戶信息稱為線索;
2> 將公海線索分配給銷售經(jīng)理需要一些規(guī)則,比如:優(yōu)質(zhì)客戶分配給成交率高的銷售,有地域?qū)傩缘木€索優(yōu)先分配給同地區(qū)的銷售。
來看個(gè)具體的例子吧:
1. 出題目,定邏輯
2. 貼代碼,抄作業(yè)
一、出題目,定邏輯
有99個(gè)客戶線索,需要分配給8位銷售經(jīng)理,具體要求如下:
1> 整體均勻分配,平均每人12個(gè)客戶線索,有3位銷售經(jīng)理可以分配到13個(gè)客戶線索;
2> 如果客戶所在城市有銷售經(jīng)理,優(yōu)先分配給該城市的銷售經(jīng)理;
3> 如果該客戶所在城市無銷售經(jīng)理,可以隨機(jī)分配銷售人員。
上述3個(gè)條件必須同時(shí)滿足。

code實(shí)現(xiàn)的主邏輯:給客戶線索表打銷售經(jīng)理的標(biāo)簽。
1> 對每一條線索,遍歷查找符合條件的銷售,使用for+for+if嵌套函數(shù);
2> 線索分配條件根據(jù)優(yōu)先級用3段邏輯實(shí)現(xiàn),城市匹配>隨機(jī)匹配>獎勵(lì)分配(線索不整除銷售經(jīng)理數(shù),余數(shù)線索的隨機(jī)分配)

二、貼代碼,抄作業(yè)
data_custs是線索數(shù)據(jù)集
data_sales是銷售經(jīng)理數(shù)據(jù)集

cnt<-as.integer(dim(data_custs)[1]/dim(data_sales)[1])?? # 每位銷售經(jīng)理均分得到的線索數(shù)
data_custs$sales<-'' # 定義線索表新列,用于記錄銷售經(jīng)理姓名
data_custs$city_sales<-'' # 定義線索表新列,用于記錄銷售經(jīng)理所屬城市
data_custs$label<-'' # 定義線索表新列,用于記錄分配條件的類型
1. 城市規(guī)則線索匹配:
for (i in 1:dim(data_custs)[1]) {
?for (j in 1:dim(data_sales)[1]) {
?if (data_custs$city[i]==data_sales$city_sales[j] & # 客戶城市與銷售城市相同
? ? data_custs$sales[i]=='' & # 客戶的銷售標(biāo)簽為空,尚未分配銷售
? ? length(data_custs$sales[data_custs$sales==data_sales$sales[j]])<cnt # 篩選當(dāng)前銷售分配到的線索,數(shù)量小于均值
?)
{
?data_custs$sales[i]<-data_sales$sales[j]
?data_custs$city_sales[i]<-data_sales$city_sales[j]
?data_custs$label[i]<-'1.城市匹配'
?print(paste0(i,'---線索分配成功!'))
?break
?}
?else { }
?}
?}

2. 隨機(jī)匹配
for (i in 1:dim(data_custs)[1]) {
?for (j in 1:dim(data_sales)[1]) {
?if (data_custs$sales[i]=='' & # 客戶的銷售標(biāo)簽為空,尚未分配銷售
? ? ?length(data_custs$sales[data_custs$sales==data_sales$sales[j]])<cnt # 篩選當(dāng)前銷售分配到的線索,數(shù)量小于均值
?)
?{
?data_custs$sales[i]<-data_sales$sales[j]
?data_custs$city_sales[i]<-data_sales$city_sales[j]
?data_custs$label[i]<-'2.隨機(jī)匹配'
?print(paste0(i,'---線索分配成功!'))
?break
?}
?else { }
?}
?}

3. 獎勵(lì)分配
for (i in 1:dim(data_custs)[1]) {
?for (j in 1:dim(data_sales)[1]) {
?if (data_custs$sales[i]=='' & # 客戶的銷售標(biāo)簽為空,尚未分配銷售
? ? ?length(data_custs$sales[data_custs$sales==data_sales$sales[j]])-1<cnt # 篩選當(dāng)前銷售分配到的線索,數(shù)量小于均值
?)
?{
?data_custs$sales[i]<-data_sales$sales[j]
?data_custs$city_sales[i]<-data_sales$city_sales[j]
?data_custs$label[i]<-'3.獎勵(lì)分配'
?print(paste0(i,'---線索分配成功!'))
?break
?}
?else { }
?}
?}

看看數(shù)據(jù)結(jié)果長啥樣,以及各種分配規(guī)則的匹配結(jié)果:
print(paste0('客戶線索數(shù):',length(unique(data_custs$mobile)),' ',
? ? ? ? ? ? ? ? ? ? '銷售經(jīng)理數(shù):',length(unique(data_custs$sales)),' ',
? ? ? ? ? ? ? ? ? ? '人均線索數(shù):',cnt))
print(table(data_custs$label)) # 線索分配情況
head(data_custs)

拿走不謝!~