您好,欢迎访问一九零五行业门户网

教你实现销售漏斗(sales funnel)

前言
一个比较完整的crm,销售漏斗必不可少。它能直观的通过图形方式,指出公司的客户资源从潜在客户阶段,发展到意向客户阶段、谈判阶段和成交阶段的比例关系,或者说是转换率。这些信息对于任何一个销售者都是无比重要的,传统方式使用纸和笔计算统计出来,费时费力,不直观。销售漏斗的出现就是要解决这样一个问题的。那么,销售漏斗怎么实现呢?这个应该是大家比较关心的问题,听我一一讲述。
需求分析
通过highcharts插件实现销售漏斗图。(这是一个yii2的插件,大家自行下载安装,文章结尾我会附上下载地址)
效果图
实现思路
网上查过资料,没有找到任何一篇文章是直接说明销售漏斗的php用法,都是说js用法的。没有母本参照,只能自己下功夫。灵机一动,我把百度找来的js用法的数组格式转换成了php语言,成功了。插件虽语言不同,但用法还是有共性的哈哈。
代码分析
1、插件需求数组的参照格式。
$funnel=['0'=>[ 'name'=> 'unique users', 'data'=> [ ['website visits', 15654], ['downloads', 4064], ['requested price list', 1987], ['invoice sent', 976], ['finalized', 846] ] ] ];
2、按照插件需求的数组格式组数组。
public function actionindex() { $company_id=isset(yii::$app->user->identity->attributes['company_id'])?yii::$app->user->identity->attributes['company_id']:"-1"; $company=company::getalln($company_id); $funnel=[]; $_time=$this->currentmonth(); //调用销售漏斗方法 $funnel=$this->actioncountmoney($_time['begin_time'],$_time['end_time']); return $this->render('index', [ 'funnel'=>$funnel, 'company'=>$company, ]); }
/* *销售漏斗 *按公司按销售阶段统计线索的销售金额 */ public function actioncountmoney($begin_time,$end_time) { $company_id=isset(yii::$app->user->identity->attributes['company_id'])?yii::$app->user->identity->attributes['company_id']:"-1"; $uids=userservice::getcuser($company_id); $query = new query(); $query->select([ 'sell_status.status as status', 'sum(`money`) as count_money' ]) ->from('t_chance') ->groupby([ 'status' ]) ->join('left join','sell_status','t_chance.status = sell_status.id') ->orderby('status'); //匹配公司所有员工 $query->andwhere(['in','owner_id',$uids]); //按本月、本季度、本年查找 $query->andwhere(['between','end_date',strtotime($begin_time),strtotime($end_time)]); $data=$query->all(); //销售漏斗的主要数组格式部分(重点) $_data=[]; if(!empty($data)){ foreach ($data as $k => $val) { $data1[0]=$val['status']; if(empty($val['status'])){ $data1[0]=yii::t('yii','not status'); } $data1[1]=(int)$val['count_money'];//数字部分必须转为整型(int)才行 $_data[]=$data1; } }else{ $_data[]=[yii::t('yii','not status'),0]; } $data2['name']=yii::t('yii','sales amount'); $data2['data']=$_data; $_data2[0]=$data2; return $_data2; }
3、视图调用。
<?php use yii\helpers\html; use hr\assets\appasset; use miloschuman\highcharts\highcharts; use yii\web\jsexpression; ?>
<?php //这部分参设置的数组格式就是我前面说的仿造js格式来的。 echo highcharts::widget([ 'id'=>'funnel_highcharts', //定义一个唯一的id 'scripts' => [ 'modules/funnel', 'themes/funnel.src', ], 'options'=>[ 'chart'=>[ 'type'=> 'funnel', 'height'=>300, //设置图表的高度 'marginright'=>100 ], 'title'=> [ 'text'=>yii::t('yii','funnel chart of sales amount in different sales stages'), 'x'=>-50 ], 'plotoptions'=>[ 'series'=> [ 'datalabels'=> [ 'enabled'=>true, 'format'=>'<b>{point.name}</b>: {point.y:,.0f}', 'color'=> '(highcharts.theme && highcharts.theme.contrasttextcolor) || black', 'color' => new jsexpression('(highcharts.theme && highcharts.theme.contrasttextcolor) || "black"'), 'softconnector'=> true ], 'neckwidth'=>'15%', 'neckheight'=>'12.5%' ], 'funnel'=>[ 'height'=>250, //设置漏斗的高度 'width' => 200 ], ], 'legend'=>[ 'enabled'=>false ], 'series'=> $funnel, ] ]); ?>
注意事项
1、给插件定义一个唯一的id,避免一个页面多次使用同样的插件造成冲突。
2、按照插件需求的数组格式组数组,格式必须一致,数字部分必须转为整型(int)。
其它类似信息

推荐信息