利用M语言进行数据填充--制作一张剧场售票统计报表(1)

有一个简单的购票系统,结构如下,有两张表,一张记录了用户购票信息,包括用户姓名和购票的座位号的起始号码和结束号码。例如John买了两张情侣票,起始号是15,结束号是16。Peter是单身汪,买了一张票,其实号是8,结束号也是8。另一种座位信息表记录了每个座位号的售价以及所在区域。
这里写图片描述
如果基于当前用户购票信息表单统计有哪些座位已售出,哪些没有售出,就需要将用户购票信息表和座位信息表进行结合,然后根据座位号一次判断当前座位是否已经被用户购买。

使用M语言解决该问题的步骤如下。在查询编辑器中选择合并查询中,然后选择用户购票信息表和座位信息表进行合并,合并依据是用户购票信息表中的Seat Start列和座位信息表中的Seat列,合并方式选择完全外部(两者中的所有行)。
这里写图片描述
合并之后可以看到一个新的表单类型列名为“Seat”,点击列头上的向外展开的箭头按钮,按照Seat列做展开就可以在用户购票信息表上增加一个座位号码列。按照座位号对当前表单数据进行排序就可以得到下表。
这里写图片描述
有了座位号列之后,需要将其他User,Seat Start和Seat End列进行数据填充,用来替换表中的空白值,以便为下一步标记那些座位已经被用户购买而做准备。
数据填充操作如下,分别选择需要填充的3个列,然后点击“填充”,选择“向下填充”即可。
这里写图片描述

通过填充过后的数据表可以看出,如果当前行中的Seat End 号码大于等于对应的Seats.Seat(座位)号,则表明当前座位号已售,如果Seat End小于对应的Seats.Seat(座位)号,则表明当前座位未被购买,仍然可以进行销售。基于该条件,可以创建一个条件列用来表哪些座位号已售。

这里写图片描述
条件列创建完成后获得座位销售信息,基于此信息,可以将用户列进行清理,进一步标出没有人购买的座位号。

这里写图片描述
这样,经过以上步骤整理之后,就可以将原始用户购票信息整理成一份基于完整座位号的销售情况表单。

这里写图片描述

基于整理过后的三列,座位号,座位售出情况以及座位所有者三项,就一个创建一个售票统计报表,用来展示售票情况。为了fancy一些,做了一个剧场座位示意图,用来展示每个区域售票情况,下个blog会介绍如何创建这个可视化的聚餐作为示意图。

这里写图片描述