美文网首页
产量分析

产量分析

作者: 空白嗝子 | 来源:发表于2019-05-15 17:28 被阅读0次

    写在前面

    研究主题:状态点和缓存点的产量计算

    攻克难点: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.为避免篇幅较长和偏离重点,本文未将状态和缓存二者计算结果合并。实际上,为了能提供给前端干净整齐的计算结果,应当将二者合并。


    “嘿,你还在听吗?老兄”,浩克飞快的瞥了一眼钢铁侠。

    钢铁侠一时语塞,转过身去,他脑子里只有一个念头,无奈的开了口:“我只关心什么时候才能和我的手炮一起战斗,这些,是你这个物理学家该担心的事情!”

    浩克笑笑,“没办法,四肢发达,头脑更发达。”

    相关文章

      网友评论

          本文标题:产量分析

          本文链接:https://www.haomeiwen.com/subject/wckeoqtx.html