写在前面
研究主题:状态点和缓存点的产量计算
攻克难点:SAP HANA参数的使用
计算工具:SAP HANA
引子
灭霸用行星飞船炸毁了复仇者联盟基地,企图毁灭宇宙,建立新宇宙……
钢铁侠站在屋脊的最高处,满面疲倦,凝神仰望三万五千里英尺外的繁星点点。向上看,那里一望无垠,不是安详静谧,而是腥风血雨;向下看,有这个夜里最挑动他内心深处所有情绪的那根琴弦,他的女儿,摩根,长长的眸子在月光下闪动,仿佛记录了这世间所有的单纯与美好。“爱你,三千万次”,钢铁侠在心中默念……
“这个假期休的够久了吧,老兄”,钢铁侠突然觉得天地在晃动,回头一看,原来是大块头浩克,没等钢铁侠开口,浩克继续说道:“听着,至少为这个小天使,你必须重新战斗!”
钢铁侠抬头看着他,“我的手炮和我一样,度假太久了,故障停机了,你至少得给我的武器一点时间吧”。浩克松了一口气,笑道:“早已准备就绪”。
钢铁侠和浩克来到萨哈尔拉工厂,这里生产复仇者联盟的所有武器,萨哈尔拉是隐藏在新基地的地下工厂,24小时不间断生产,为复仇者们提供最强大的战斗武器。
屏幕上实时展示每个车间的生产情况,钢铁侠十分好奇,向浩克询问细节,浩克娓娓道来:
萨哈尔拉工厂共有3个生产车间,所有武器的加工过程都依次经过1号、2号、3号车间,生产工序由小到大递增,工序划分如下:
工序划分每个武器经过每个生产工位都会添加一条记录,记录各种武器在各个工位的生产日期,形成总体生产信息记录,如下:
总体生产信息记录目标结果:输入指定任意日期或者默认当前时刻,计算该日期或当前时刻的各车间进出入产品数量和缓存产品数量。
计算思路
零部件按照1号车间、2号车间、3号车间的顺序进行生产,不同产品的加工工位可能不同,但都必须通过每个车间的起始和结束工位。
首先,对工位进行分类和定义,将工位分为两种类型:
1.状态工位:每个生产车间的起始/结束工位,计算每日通过起始/结束工位的产品数量。
2.缓存工位:每个生产车间的非起始/结束工位,计算每日最后状态位于各个车间内的产品数量。
工位划分在计算时,需要注意一个十分重要的问题:
状态工位的数量计算是每日开始到每日结束,缓存工位的数量计算是从过往到每日结束。
产生这种差别的原因是,对于缓存工位的计算来说,可能出现产品一整日都没有生产的情况,它停在了某一生产车间,但是因为没有生产,所以生产信息记录表里没有那一日的数据,而实际上它仍然停留在车间内。
计算过程
状态工位的计算
1.计算视图-STATUS_BASE:获取每日各车间进出入工位的产品数量,如下图:
STATUS_BASE该计算模型可分为两步:
步骤1:生产信息记录表与工位划分表进行关联(实际并没有关联的字段),join_1的结果类似于两者的笛卡尔积;判断工位是否等于车间起始/结束工位(判断条件如下)。计算结果如下图。
判断条件 步骤1计算结果步骤2:筛选出位于车间起始/结束工位的数据,即TYPE为进入/离开的数据。
最终得到结果:
STATUS_BASE计算结果2.计算视图-STATUS:添加参数INPUT_DATE,输入指定日期或默认当前日期,得出指定日期的各车间进出入数量。
STATUS筛选出日期等于INPUT_DATE的数据(INPUT_DATE默认当前日期),根据日期、车间、类型(进入/离开),对产品进行聚合(count),得到以下计算结果(输入日期为2015-08-06为例)。
STATUS计算结果缓存工位的计算
1.计算视图-PROCESS_BASE:获取每日各车间内部的产品数量,计算方法与状态工位基本类似,区别在于步骤1TYPE的判断方式不同。
PROCESS_BASE步骤1:计算思路与状态工位基本相同,区别在于TYPE的判断方式不同,缓存计算时,认为当工序介于某个车间的起始和结束工位时,则表明该产品位于该车间内。
判断条件步骤1计算结果:
步骤1计算结果步骤2:筛选出位于车间内的缓存数据,即TYPE为1的数据。最终结果如下:
PROCESS_BASE计算结果2.计算视图PROCESS:添加参数INPUT_DATE,输入指定日期或默认当前日期,得出指定日期的各车间缓存数量。
PROCESS步骤1:添加参数INPUT_DATE(默认当前日期);筛选数据,此处有别于状态工位的计算,时间不是等于INPUT_DATE,而是小于,是为了避免上文提到的产品一整天都并未发生工位变化的情况。
步骤2:选出每种产品的最后状态(工序最大)
步骤3:因为步骤2丢失了最后状态对应的车间,步骤三再次关联,找回车间。
最后根据车间,对产品进行聚合(count),得到以下计算结果(输入日期以2015-08-06为例)。
PROCESS计算结果( 输入参数2015-08-06 )说明
1.本例中没有将起始和结束工位看做车间内的缓存工位,即左右全开,可以根据实际情况设为左开右闭或左闭右开,将会影响计算结果。
2.本例的应用场景是无需同时获得每日生产数据的情况,比如生产车间的LED大屏,仅需实时显示当前生产数量,这种情况可以采取输入参数的形式,可以大大提高计算速度。
3.为避免篇幅较长和偏离重点,本文未将状态和缓存二者计算结果合并。实际上,为了能提供给前端干净整齐的计算结果,应当将二者合并。
“嘿,你还在听吗?老兄”,浩克飞快的瞥了一眼钢铁侠。
钢铁侠一时语塞,转过身去,他脑子里只有一个念头,无奈的开了口:“我只关心什么时候才能和我的手炮一起战斗,这些,是你这个物理学家该担心的事情!”
浩克笑笑,“没办法,四肢发达,头脑更发达。”
网友评论