续费模式下的客户增长率计算

阅读(1410) 标签: 结算, 循环, 日期范围, file, import, date, elapse,

l  问题

一家杀毒软件公司的产品采用按时间购买的方式销售,用户必须不断续购“许可key”才可以继续使用软件,“许可key”分为半年授权、一年授权和终身授权,详细情况如下:

ID

Key Type

TermOfValidity

Price

1

Six months

6 months

20

2

One Year

12 months

36

3

Unlimited

Infinity

500

下面是该公司推行这种销售模式后头几年的销售记录表:

 

如果客户授权到期而又没有续购授权,则停止软件使用,不再视为公司客户。请算出公司这头几年中每年的客户增长率。

l  思路

大致思路:此问题由于涉及到年底结算的问题,而年份又不是确定的,所以需要按天循环,同时用另一个序表来同步记录当前的客户,在每一天的循环中,删去已经过期的用户,添加新的用户,并给老用户续费,而后到了年底再结算用户数量即可。

1.  先写出每种key的有效期延长时间,并写入序表。由于延长时间不是确定的(大月小月平年闰年等),所以这里用after函数将其计算方法的算式写下来,后面的计算中直接调用即可。

2.  先做一些循环之前的准备,首先创建一个记录当前有效用户的序表,再建立一个记录年用户数和增长率的结果表。

3.  先标记好按天循环的前后范围,也就是销售记录的日期范围。

4.  循环销售记录日期范围内的每一天。循环体内,首先删除当天已经超过有效期的客户。

5.  找出当天的销售记录。

6.  循环这些记录,在客户表中找出相应的客户,如果没有则新建一条客户记录。

7.  按照销售记录所购买的key类型,算出用户的有效期。

8.  如果到了年底,将当前的客户数量写入前面的结果表中。

9.  循环结束后,再用结果表算出每一天的客户数量增长率。

 

l  代码

 

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)))

 

 

 

算出每年的客户增长率

 

l  结果