l 问题
下面有一个简化的超市的库存管理系统内的一些表,为考察销售情况,需要算出6月份“生鲜”类的商品在超市内的平均停留时间。需要的表如下:
首先是商品表,记录各种产品的信息:
下面是进货记录表,超市在每天早上5点钟进货,下表记录了每次进货每种商品的进货数量:
下面是超市的销售记录详表:
l 思路
大致思路:首先要解决“平均停留时间”这个数据要如何计算,超市不可能为每件商品做单独的记录,所以计算每件商品的停留时间是行不通的。通过数学换算,可以知道,“平均停留时间”可以通过平均卖出时间减去平均进货时间得到,这个算法可以解决我们当前的问题。只要筛选出指定类别商品的进货和销售记录,接下来进行时间平均值的统计也是很容易进行的了。
1. 首先将进货表和销售表的商品字段都替换为商品表中相应的记录。
2. 筛选出“生鲜”分类的进货记录。
3. 筛选出“生鲜”分类的销售记录。
4. 求出总的进货数量。
5. 以月初为起点,算出进货时间和起点时间的时间差乘以进货数量的积的总和。
6. 求出总的销售数量。
7. 以月初为起点,算出销售时间和起点时间的时间差乘以销售数量的积的总和。
8. 对剩余的商品,即没卖出的商品,将其“销售时间”取为月底。
9. 平均销售时间减去平均进货时间,即为平均滞留时间。
10. 整理结果格式,将时间单位换算为天,并舍去过多的小数位,即为结果。
l 代码
|
A |
|
1 |
=file("C:\\txt\\Stock.txt").import@t().select(month(Datetime)==6). derive() |
6月的进货表 |
2 |
=file("C:\\txt\\Sale.txt").import@t().select(month(Datetime)==6). derive() |
6月的销售表 |
3 |
=file("C:\\txt\\Commodity.txt").import@t() |
商品表 |
4 |
Fresh |
指定的类别 |
5 |
>A1.keys(Commodity), A2.keys(Commodity), A3.keys(ID) |
设置三个表的主键 |
6 |
>A1.switch(Commodity,A3), A2.switch(Commodity,A3) |
将进货和销售表的商品字段替换为记录 |
7 |
=A1.select(Commodity.Category==A4) |
筛选出指定分类的进货记录 |
8 |
=A2.select(Commodity.Category==A4) |
筛选出指定分类的销售记录 |
9 |
=A7.sum(Volume) |
求出总进货数量 |
10 |
=A7.sum(long(interval@s("2009-6-1 00:00:00",Datetime)*Volume)) |
以月初为起点,算出进货时间和起点的时间差总和 |
11 |
=A8.sum(Volume) |
求出总销售数量 |
12 |
=A8.sum(long(interval@s("2009-6-1 00:00:00",Datetime)*Volume)) |
以月初为起点,算出销售时间和起点的时间差总和 |
13 |
=long((A9-A11)*interval@s("2009-6-1 00:00:00","2009-7-1 00:00:00")) |
对没卖出的商品,设置其滞留时间截止到月底 |
14 |
=(A12+A13)/A9-A10/A9 |
平均销售时间减去平均进货时间,即为平均滞留时间 |
15 |
=floor(A14/60/60/24,1) |
换算成天数,并舍去多余小数,方便查看 |
l 结果