续费模式下的客户增长率计算
问题
一家杀毒软件公司的产品采用按时间购买的方式销售,用户必须不断续购“许可 key”才可以继续使用软件,“许可 key”分为半年授权、一年授权和终身授权,详细情况如下:
ID | Key Type | TermOfValidity | Price |
---|---|---|---|
1 | Six months | 6 months | 20 |
2 | One Year | 12 months | 36 |
3 | Unlimited | Infinity | 500 |
下面是该公司推行这种销售模式后头几年的销售记录表:
如果客户授权到期而又没有续购授权,则停止软件使用,不再视为公司客户。请算出公司这头几年中每年的客户增长率。
思路
大致思路:此问题由于涉及到年底结算的问题,而年份又不是确定的,所以需要按天循环,同时用另一个序表来同步记录当前的客户,在每一天的循环中,删去已经过期的用户,添加新的用户,并给老用户续费,而后到了年底再结算用户数量即可。
-
先写出每种 key 的有效期延长时间,并写入序表。由于延长时间不是确定的(大月小月平年闰年等),所以这里用 after 函数将其计算方法的算式写下来,后面的计算中直接调用即可。
-
先做一些循环之前的准备,首先创建一个记录当前有效用户的序表,再建立一个记录年用户数和增长率的结果表。
-
先标记好按天循环的前后范围,也就是销售记录的日期范围。
-
循环销售记录日期范围内的每一天。循环体内,首先删除当天已经超过有效期的客户。
-
找出当天的销售记录。
-
循环这些记录,在客户表中找出相应的客户,如果没有则新建一条客户记录。
-
按照销售记录所购买的 key 类型,算出用户的有效期。
-
如果到了年底,将当前的客户数量写入前面的结果表中。
-
循环结束后,再用结果表算出每一天的客户数量增长率。
代码
A | B | C | D | ||
---|---|---|---|---|---|
1 | =file("C:\\txt\\AVwareSales.txt").import@t().sort(Date) | 销售记录表 | |||
2 | /ID | / 算式 | 写出各种 Key 的日期算式备用 | ||
3 | 1 | elapse@m(?,6) | 算式备用 | ||
4 | 2 | elapse@y(?,1) | |||
5 | 3 | ’null | |||
6 | =create(ID,Pattern).record([A3:B5],0) | =A6.keys(ID) | 将 KeyID 和算式写入序表 | ||
7 | =create(User,TermOfValidity) | =A7.keys(User) | 创建一个当前用户表 | ||
8 | =create(Year,NoOfUsers,GrowthRate) | 创建一个记录增长率结果表 | |||
9 | =date(A1.Date) | =date(A1.m(-1).Date) | 循环起始日期和结束日期 | ||
10 | for | >A7.delete(A7.select(TermOfValidity!=null && TermOfValidity<A9)) | 循环每天。删除当天已经过有效期的用户 | ||
11 | =A1.select(date(Date)==A9) | 找出当天的销售记录 | |||
12 | for B11 | =A7.find(B12.User) | 循环这些销售记录,找出相应的用户记录 | ||
13 | if C12==null | >A7.insert(0,B12.User,A9) | 如果没有,就新建记录 | ||
14 | >C12=A7.m(-1) | ||||
15 | >C12.run(TermOfValidity=eval(A6.find(B12.KeyID).Pattern,TermOfValidity)) | 按照 key 相应的算式,算出新的有效期 | |||
16 | if month(A9)==12 && day(A9)==31 | 如果到了年底 | |||
17 | >A8.insert(0,year(A9),A7.count()) | 记下当前的用户数量 | |||
18 | >A9=elapse@d(A9,1) | 循环变量增进一天 | |||
19 | if A9>B9 | break | 如果循环超过了销售记录的日期范围,就可以结束循环了 | ||
20 | =A8.run(if(#>1,GrowthRate=round((NoOfUsers-NoOfUsers[-1])/NoOfUsers[-1],2))) | 算出每年的客户增长率 |
英文版
大佬,有没有这个案例的数据源?
安装目录里有,C:\Program Files\raqsoft\esProc\demo\zh\txt
数据文件
AVwareSales.txt