2020-10
23

我实现这些

By xrspook @ 10:16:14 归类于: 烂日记

渐渐地我越发有点明白自己想要的到底是什么。之所以让我纠结了半天,不知道该如何计算的某些数据,实际上是因为两种性质的东西混搭在一起了。我不知道别人是否真的搞得清,他们是有意糊弄我们的吗?是因为他们知道我们算不清这个,所以这么搞吗?这个问题很困扰我,是因为那个东西把正常的批次跟没有写明批次但要先进先出的混搭在一起。有明确批次的数量计算是不分仓号的,因为通常那意味着好几个仓进同一批货,开始计费的日期定在第1个仓刚开始进货的那天。所以,如果同批次还有其他仓,最后一个仓进货的时候可能已经是3天后,那个仓的免堆期等于要减去三天。如果某个客户所有东西都这么弄,不会有烦恼,因为无论进货还是出货,肯定会带入批次。

在Power Query的世界里,这就意味着要以批次和日期分组。各种仓号数据可以全部加在一起,无所谓。但同时,这个客户又有另外一种情况。如果他进货不是用船,而是用车,每天几千几千吨进货的话,我们跟他们签订的合同是按每天为一个批次。一个批次到达免堆期以后开始计费。现在我们的系统总的来说,根本没分清这种批次,计费完全是人肉计算的。但实际上,这种没有批次的批次,理论上也应该自动带入,入库的时候以日期为批次。所以有可能发生同一个批次有几个仓出库的时候,要以先进先出进行批次划分。进货的时候,一个批次可能有几个仓,但是出货的时候肯定是指定的。所以在这里要以仓好为分类,然后在对入库批次分割数量。比如某一个仓里第1个日期批次用完了再开始用第2个,第2个没用完,就留到以后继续分割。据说用SQL和Power Pivot能解决这个先进先出的问题。但貌似,我看到的Power Pivot的例子没有看到我想要的最终结果,也就是把那个出库数量自动分割成入库批次。先进先出是非常经典的会计问题,只不过我们的人从来都是我觉得我要指定这个,没有用过这些规则,当然也就没有思考该怎么自己动手去计算。一开始没有批次,用先进先出的规则,入库的时候自动添加批次,出库的时候按照入库的批次风格,最终得出来的数据,跟之前一开始就已经有批次的东西可以用同样的规则继续演算。

对我来说,有两个点我没想明白。首先,要怎么在PQ里以先进先出的规则,对出库数量进行批次分割呢?第二,因为实际上我们得到的信息是一个入库日期和出库日期。而这些日期通常都是不连续的,在不连续的日子里也要计算每天库存,到达一定时间之后,要每天计算堆存费。所以,该怎么在不连续的日子里插入一些日期,然后向下填充信息呢?之前我想到的办法是先建立一个日期索引。然后把有数据的东西合并到索引里,这就意味着有些日期可能是没有数据的。接着,把这些东西透视展开,把数据为空的那一列删掉,余下的东西向下填充,然后再把零数据替换为空,接下来再用一个逆透视恢复。这个方法比较笨。但可以一次性实现N个批次的插入和填充,至于速度如何,估计跟电脑的性能有关。我总觉得高手一定不需要用到这种先透视再逆透视的方法。他们是怎么插入日期,然后向下填充数据的呢?

想清楚了这些,离我想要的最终结果就会又近了一些。

2020-10
22

淘宝特价版这个神

By xrspook @ 8:47:28 归类于: 烂日记

当大家都在做同样的事的时候,我经常会有这么个想法:到底我跟大家有什么不一样?我有什么办法能做得比别人好?又或者是我根本没办法,除了勤快,没有别的选择。在那个时候,通常我就会想到,不如我去玩别的吧。618也好,双11也好,其实我都挺害怕的,现在还包括了过年之前那一个月的买买买。

自从有了淘宝特价版这个东西,我才明白到,原来那些东西可以那么便宜。据说上面的东西很多都是厂家直供到消费者,砍掉了中间的差价,所以价格低得离谱,完全是让人怀疑人生的节奏。比如说,几块钱几毛钱,甚至几分钱的东西居然可以包邮那。那些东西在日常生活中,别说包邮,你在大街上根本买不到这么便宜的货,但是为什么他们可以靠这种方式生存呢?这让我很困惑。也正是因为有了那个东西,所以我生活中绝大多数小玩意都不再是念想,不再是618双11的目标。天天都有红包,每几天就有一个大红包。习惯了淘宝拼尽全力做完所有任务才只有几毛钱之后遇到这些红包,让人有非买不可的欲望,所以,每到那个大红包出来的时候,几乎每次我都不得不绞尽脑汁去想自己到底要买些什么。但我也明白到淘宝特价版上面的东西因为价格低得实在太离谱,你不可能在上面买贵重的东西,比如电器之类。你只能买一些零零碎碎的小货品,比如说毛巾,比如说各类塑料制品。吃进肚子里的东西得想一下,当然了,水果除外。这里所说的食品是指经过加工的那些。我已经不记得自己在上面买过多少乱七八糟的小东西。登山扣我在一开始的时候买了好几个,近期买了一些毛巾,我还为我爸买过中性笔。一直以来我都在上面买牙线。到手价两块多就能买200个牙线棒,这简直无法想象。牙线棒这个东西,如果在超市买,200个估计得20块钱,而现在这个两块多钱的东西还是包邮的,质量还很好。买完牙线棒以后,我花了几天去适应,然后,我想买一些牙线试一下,结果现在我已经完全沉醉于牙线棒。淘宝特别版的出现,让我简直想不出自己生活还缺些什么。每天我都会养成个这么的习惯,去淘宝特价版的官方直播遛一圈,看一下他们在卖什么。那些东西里面,我有什么事需要的。大概这就是他们的策略,消费者如果不看,根本不会有购买的欲望,看了不一定买,但是看了又在各种催促之下,就会让人无意之中乱花钱。上面的东西不是所有都很便宜,有赚的也有亏的。

我不知道淘宝为什么要把特价版分离出来,同样的东西。淘宝里搜索不出这么低的价格。这种情况就像我当初不明白为什么要把淘宝和天猫分开。实际上二者都可以买同样的东西,淘宝特价版和淘宝也一样。同样是一家店,非常有可能淘宝能看到的货品种类要比特价版多。好长一段时间在淘宝上买东西前,我都会用微信助手搜索一下有没有优惠,但自从特价版出现了以后,几乎没有这个需要了。

淘宝的出现,几乎可以这么说,开启了我买买买的人生,而淘宝特价款的出现,颠覆了我对便宜的认知。

2020-10
21

批次问题

By xrspook @ 10:57:55 归类于: 烂日记

我以为我完成了任务,但实际上,我并没有做到。

之所以没有碰钉子,是因为我统计的那些数据,刚好那几个月,只有进没有出,也正是因为这样,我才侥幸的逃过一劫,如果仍然以我之前的批次确定方式,出的时候会出现负数。因为出的时候也是一个日期,而那个日期是之前没有过的。真搞不懂这个合同为什么要这么折腾,但或许这不是合同太折腾,而是我没有想到位。现在我想到的其中一个方法,是到了某个免堆期以后,把那些以日期命名的批次一次性转为一个统一的命名批次,比如无。这样那些一天一天积累入库的东西,到达某个时候就会统一混为一体。出的时候也是从这一个大块里一点一点的减出来。所以批次这种东西只出现在入库的某些部分,出的时候这些一点一点积累起来的东西的时候一律是无。

如果那个屌丝东西入了以后,没到免堆期结束就出了呢?理论上。这种东西是完全不应该计算堆存费,但是出的时候,没有带入入的时候的那个批次。所以入的东西一直挂在这里,出的那些则是从大单位里减去。所以理论上,这样算的话,堆存费就会少了。因为那些特例的东西无论是入还是出,都不影响堆存费,因为那些都不计算堆存费,但如果从大单位里减去,堆存费就少了。我非常想知道,那些算不清谁是谁的散货码头单位到底是如何解决这个问题的。如果能分清楚的东西还好说,比如说货柜,算得清什么时候来的,什么时候走的,但散货呢?一个大堆里,最里面的是最开始进的,最上面的是最后整上去的,但实际上出货的时候,你只能从上面到下面。散货码头界定的批次概念到底是每天进多少就一个批次还是说从的第1天开始,就算做一个批次呢?免堆期之内有进有出,这其中的数量,应该如何去计算呢?大概现在我很烦恼的东西是先进先出的问题。这种东西我现在都想不明白该如何用图表示。之所以想不到如何用图去表示。是因为我想不清楚出的是哪个批次。因为那些东西不是一个整数,如果出的数量少于某个入的批次,还好说,但如果跨越了几个批次呢?那几个批次里面,其中某些只是部分,这个东西又应该如何处理呢?之前我就已经稍微了解过先进先出这种东西。批次这东西,之前我也认为应该进行拆分,但这个拆分要怎么判断呢?考虑这个问题,以我现在的水平来说,显然超纲了,但是这是非常实际的问题,不可能避免。从整体来说好像是没有解决方案,但是如果细分到某个堆场估计能说得清。那些东西到底是什么时候进的,货物来源是哪里,出的时候要分开,应该使用什么规则呢?

我觉得我没搞清楚总分的关系,当分组到最细层次的时候一切都好说,但上面的合并要求不同,于是就会分叉出很多不同的东西。

2020-10
20

我要优化提速

By xrspook @ 8:36:19 归类于: 烂日记

当我终于把功能做出来以后,我却嫌弃出结果太慢了,居然要好几分钟。明明最终我想要的是一个表的合并,为了更快,我不得不拆分为两个查询。第2个查询以第1个查询的结果为基础。其实这么操作,无非我是想利用第1个查询已经得到的缓存结果。那个结果已经被我用表格输出。之前我试过从零开始弄第2个查询,结果发现实在太慢了。如果没有那么多的分组,速度还会那么慢吗?如果只是一个求和,根本无需分组,但问题是,每个批次的东西必须分开计算,然后才可以出现分段的结果。说白了,让我纠结的是一个累计求和。

累计求和这种东西的思路在PQ里通常都意味着新增一列,参数设定匹配某行的某些东西,符合条件就把某列的数据求和。所以实际上这是一个筛选的过程。如果数据很多,筛选肯定会很慢,但除了这样,还能有什么方法吗?据说可以用索引的方法。据说索引的方法比筛选的方法快非常多。如果用python的思路去考虑,我觉得筛选是一个列表的操作,而另外一个是字典的操作。如果不用二分法。历遍列表是非常慢的,但如果要立片字典,历遍是轻而易举的事,而且字典的效率比二分法还要高。所以我应该如何建立索引呢?如果筛选的是多条件,索引大法还能继续管用吗?我觉得现在我遇到的问题那些经常接触数据库的人估计已经纠结过了。这不仅仅是Power Query的问题,这是如何运用数据进行弯曲折叠的问题。只要是数据库,无论是SQL还是其他形式,都会有这种烦恼。

昨天我终于经历了一个Excel要跑好几分钟甚至十几分钟才能出结果的东西,我感觉那没多少数据。我曾经试过把那些东西输出,结果发现输出速度非常慢,每秒钟只处理了不到100个。那些数据粗略计算了一下,可能有超过2万条。为什么加载2万条数据会这么慢呢?这是一个令我纠结的结果,如果把最后的分组都做了,输出的数据只有365条,但如果不做最后的分组,有超过2万条。不做分组的话,那个结果可以在软件里直接展示出来,顶多只需要几秒的运算时间,但是不做分组,把数据输出却有超过2万条,即便我不输出表格只输出数据透视表,依然在输出的时候速度非常慢。为什么对2万条数据进行分组会这么慢呢?除了分组,还有其他快速的方式可以对某条件进行求和吗?整个操作之所以这么慢,除了因为分组,还有排序,还有一些,null转化为0,或者把0转化为null的操作,最后,还有一条我自己都觉得应该会很作死的向下填充。那个结果我花了好几分钟才计算出来,如果让高手去解答,估计运行时间会会是毫秒级的,顶多不会超过三秒钟。

一方面,我很想知道如何提升运行速度,直接拿去问人显然是最显而易见的办法,但在这之前,我想自己先思考一下,毕竟走到这一步已经很不容易,我不想在最后一步认输。这让我想起了高中数学老师的某句经典语录,学习数学几个境界里的最后一句——全而不好(前几句是“不懂不会,会而不对,对而不全”)。

2020-10
19

工作的羁绊

By xrspook @ 14:45:11 归类于: 烂日记

到处去玩这种事貌似从来不能引起我的兴奋。学生时代每个学期的旅行很让我期待,但到底期待的是不用做作业、有零食吃还是喜欢玩本身呢,我实在说不清。可以肯定的是即便去了旅行,回来之后语文的游记还是少不了的。虽然其实写游记也不是太痛苦,但欢乐之后有种这样的作业始终会让人觉得不尽兴,但起码旅行那一天没有测验考试。我已经不记得小学时的旅行具体去过什么地方了。初中的时候我们去过长隆动物园和东方乐园,当时的东方乐园已经接近关闭状态,所有东西都旧旧的。据说我妈带过我的表哥去东方乐园,而且我妈去的时候东方乐园才刚开不久,为什么她就不带我去呢?从前我对机动游戏很感兴趣,但现在,那些东西再不能激起我的兴奋了,再过几年,估计会更加无感。因为我是晚婚晚育的孩子,所以当我年龄适合的时候我妈已经对那些东西没兴趣了,她注定不会带我去玩那些东西。

现在更加作死,无论是法定假期还是外出培训,对我来说根本就没有一天可以闲下来不工作的时候。从前外出的时候我带着笔记本电脑,因为我要写blog,我要上网,去那些小众的地方,但现在,让我非带着笔记本电脑不可的原因是我要继续处理单位的数据。一年到头就只有几天空闲。只要我速度快,每天的量其实我用几分钟,顶多30分钟就完成了,但每天都得有这么个心理负担,要处理那些东西。处理数据和写游记到底谁简单一些呢?处理数据完全不需要脑子,但游记的思路来了以后就是行云流水的操作。白天我可以随便玩,但到了晚上,我必须得纠结单位的数据什么时候出来,是不是只有一些而没有另外一些。没有人强迫我必须得这么干,但我觉得把东西堆到第一个工作去做更痛苦。我注定不是那些下班以后就可以拍拍屁股玩消失的人。这是一个简单的工作,但同时这也是一个困身的工作。之所以这么折磨,完全那是因为我把这件事太往心里去了,如果我是一个不怎么上心的人,估计不会有烦恼。生产线上的工人不在生产车间就没烦恼,我这种人无论身在何方,有数据就得干活,虽然除了远程处理数据以外我还有必须现场处理的实物纸质资料。今年国庆节8天假期,据说5号就开工,结果其实后面4天不是天天都有作业,但我还是得天天蹲在那里观察。那几天即便有作业也很少,与其每天都只是一点点,为什么就不能把那个押后到国庆节结束后再干呢?一方面我知道没东西干对单位不好,另一方面,我想真正放个没工作的假。过去这3年,我试图让自己习惯这种和数据共处全年无休的方式,虽然我已经优化了很多东西,让每日的工作尽可能地高效,但貌似和数据捆绑在一起的这个心魔我仍然挥之不去,不只是没有减轻,更有越发深刻的趋势。以前这么干是总公司逼着必须得这样,但现在,不是他们管辖范围内的东西,我仍然这般要求自己。

我注定不是个享受旅游的人。

© 2004 - 2026 我的天 | Theme by xrspook | Power by WordPress