在工作中,朋友们有没有遇到过这种情况:
用Excel处理数据,步骤繁琐,容易出错,且每隔一段时间就需要处理一次,比如:业绩的日报、周报、月报,潜意识里知道这些事情都可以用程序解决,但............................................实际情况是要么自己不会也不知道谁可以帮忙、要么自己会写但不想花时间思考如何写。
本篇分享一个常见的案例:“线索分配”,啥是线索分配呢?
1> 与销售部门打交道过的朋友就会了解,销售经理获得的客户信息,一部分是自己的客户积累,一部分来自公海线索的分配(即公司存量中暂无销售服务的客户,简称“公海”),我们把客户信息称为线索;
2> 将公海线索分配给销售经理需要一些规则,比如:优质客户分配给成交率高的销售,有地域属性的线索优先分配给同地区的销售。
来看个具体的例子吧:
1. 出题目,定逻辑
2. 贴代码,抄作业
一、出题目,定逻辑
有99个客户线索,需要分配给8位销售经理,具体要求如下:
1> 整体均匀分配,平均每人12个客户线索,有3位销售经理可以分配到13个客户线索;
2> 如果客户所在城市有销售经理,优先分配给该城市的销售经理;
3> 如果该客户所在城市无销售经理,可以随机分配销售人员。
上述3个条件必须同时满足。
code实现的主逻辑:给客户线索表打销售经理的标签。
1> 对每一条线索,遍历查找符合条件的销售,使用for+for+if嵌套函数;
2> 线索分配条件根据优先级用3段逻辑实现,城市匹配>随机匹配>奖励分配(线索不整除销售经理数,余数线索的随机分配)
二、贴代码,抄作业
data_custs是线索数据集
data_sales是销售经理数据集
cnt<-as.integer(dim(data_custs)[1]/dim(data_sales)[1]) # 每位销售经理均分得到的线索数
data_custs$sales<-'' # 定义线索表新列,用于记录销售经理姓名
data_custs$city_sales<-'' # 定义线索表新列,用于记录销售经理所属城市
data_custs$label<-'' # 定义线索表新列,用于记录分配条件的类型
1. 城市规则线索匹配:
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]=='' & # 客户的销售标签为空,尚未分配销售
length(data_custs$sales[data_custs$sales==data_sales$sales[j]])<cnt # 筛选当前销售分配到的线索,数量小于均值
)
{
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. 随机匹配
for (i in 1:dim(data_custs)[1]) {
for (j in 1:dim(data_sales)[1]) {
if (data_custs$sales[i]=='' & # 客户的销售标签为空,尚未分配销售
length(data_custs$sales[data_custs$sales==data_sales$sales[j]])<cnt # 筛选当前销售分配到的线索,数量小于均值
)
{
data_custs$sales[i]<-data_sales$sales[j]
data_custs$city_sales[i]<-data_sales$city_sales[j]
data_custs$label[i]<-'2.随机匹配'
print(paste0(i,'---线索分配成功!'))
break
}
else { }
}
}
3. 奖励分配
for (i in 1:dim(data_custs)[1]) {
for (j in 1:dim(data_sales)[1]) {
if (data_custs$sales[i]=='' & # 客户的销售标签为空,尚未分配销售
length(data_custs$sales[data_custs$sales==data_sales$sales[j]])-1<cnt # 筛选当前销售分配到的线索,数量小于均值
)
{
data_custs$sales[i]<-data_sales$sales[j]
data_custs$city_sales[i]<-data_sales$city_sales[j]
data_custs$label[i]<-'3.奖励分配'
print(paste0(i,'---线索分配成功!'))
break
}
else { }
}
}
看看数据结果长啥样,以及各种分配规则的匹配结果:
print(paste0('客户线索数:',length(unique(data_custs$mobile)),' ',
'销售经理数:',length(unique(data_custs$sales)),' ',
'人均线索数:',cnt))
print(table(data_custs$label)) # 线索分配情况
head(data_custs)
拿走不谢!~