线索分配的Rcode实现

在工作中,朋友们有没有遇到过这种情况:
用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)

拿走不谢!~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值