2023-08
15

漫漫调试路

By xrspook @ 10:07:24 归类于: 烂日记

上周五基本上我已经完成了,自己第一个VBA+ADO+SQL的跨表查询,接下来我还得在那里逗留多长时间还得有多少bug需要改进说不准,得一边用一边发现问题。做的时候觉得没问题,用着用着就会发现各种问题。比如第一次发现的bug是明明那个ID理论上就只会有一条记录,因为所有和那连接的东西都是左外的,但问题是我这个合并的新手犯了个很无知的错误,在进行左外之前虽然我也已经做了分组,但是除了那唯一的ID以外,我把其它信息也一并分组了,虽然合并的时候指定的是ID,但实际上合并上去的其它性质不一样,即便分组了,合并的数据还是会产生很多行。最后出来的结果就是虽然其它性质的东西并没有体现在最终的合并表上,但是它们却以隐身的方式体现了出来,因为它们的存在,让那唯一的ID出现了好几行。把右边那个表的数累加起来,数据是正确的,但左边的那个ID一样的数据就重复了好几遍,结果只要是左边和右边交互生成的数据全部都乱套了。最终的解决办法很简单,就是在合并之前做最后的分组的时候除了合并的那个关键字以及已经分组聚合的数据,其它东西一律不要存在。

VBA方案中招了,python方案也中招了,但是PP的方案没中招,这在我意料之中,但是PQ的方案居然也没中招,这个是我无法理解的。为什么同样的思路同样的合并方式,PQ就不中招呢?还是说之所以PQ不中招,是因为第一次发现的时候我已经改过来了,只是后来我又忘记了?

周一的早上,当我在上报纸质数据之前做最后核对的时候,又发现了一个bug。汇总数量没有错,但是根据汇总数量生成的百分比不对。拿个计算器按一下就发现不对头,跟其它方式生成的数据相对比也不对头。百分比第二位小数都为0,引起了我的注意。因为正确的结果应该是不都为0。接着我马上想到了自己对其它不是百分比的数据全部都进行了四舍五入到三位小数,但是进度我也四舍五入到了三位小数,但实际上进度是有两位小数的百分数,也就是需要保留的是4位小数。我把最后一位抹掉了,当然出来的结果跟理论上的那个会有差别,而之所以在其他方式没有犯这个错误,是因为其它方式的计算过程中,我没有对进度这个字段进行四舍五入控制。所以解决方法也很简单,我把四舍五入的位数从三位改为四位,又或者是直接取消四舍五入就完了。
VBA是个奇怪的存在,因为实际上它所用的四舍五入并不是经典的四舍五入,而是科学领域常用的四舍六入五成双。我在大一学基础化学的时候第一次听说这个,那时真的让我每次都想半天才算得清这个东西。我毕业以后,去某个单位实习,做完某个检验需要计算结果,那个结果也需要使用四舍六入五成双,每次遇到那种数据我都得慢慢想清楚。VBA这个四舍六入五成双跟一般的Excel算出来的四舍五入效果不一样。这就会导致用脚本生成的数据可能会跟人肉算出来的有差别。程序员们只能用自己的方式重新把一般四舍五入的效果模拟出来,不得不放弃VBA原生就有的四舍五入函数round。我运气好,还没遇到这种问题,而之所以没有这种问题,是因为除了进行乘除法以外,加减法的时候,我是不会遇到小数点三位以上的数据的,所以起码能保证通过加减法出来的东西都不会有这种问题导致的误差。至于乘除法出来的数据,实际上我也只是看一下而已,比如那个进度,上报的进度数据我会在手工纸质的表上用一般的Excel公式生成。

越研究就会越觉得自己无知,那些实际过程中积累的经验比直接从别人那里一二三四学回来的深刻多了。

2018-01
29

直报系统那些事

By xrspook @ 16:42:42 归类于: 烂日记

国粮局的直报系统是个好事,比填手工表然后层层上报方便多了,但问题是基本上填报就只是填报人的事,如果是纸质的的还要找领导签完几个名再报,虽然呢,签名就只是签名,不会有什么审核之类的操作,但从程序的角度来说,领导应该被告知,然后领导加签了才能上报。但之所以这样的设计也是为了能做到公平公正,统计员报出的数据不受他人主观意愿的影响。但是万一统计员疏忽出错了呢?难道月报要到下个月再报的时候才去改?直报系统这种东西到底要靠什么去把关报送质量呢?即便里面某些行列的数据是通过计算勾稽关系得来的,但原始数据一旦出问题还是会歇菜。需要填写的原始数据该怎么把关?光靠责任心这显然太看得起粗心大意的人类了。

上个月底总公司就发了个文说2月2日之前要填写并审核上报统计年报的数据,2月9日之前要提交相关的统计分析,但直到上周直报系统的年报模块还没启用上线。一开始呢,启用是启用了,但根本填不了,版面还停留在2016年那里。又过了一些时间,年报的板块直接消失了。上周去问的时候被告知据说27日开放填写,我没有27号(周六)真的那么积极去关注,但虽然忍住一直没在家里的电脑里打开那个网页,但这件事也一直让我如鲠在喉,因为我很想打开继续工作,但我得控制住不让自己做。之所以不做是因为我知道我一旦开干就会完全停不下来,其次是家里的显示屏是19寸宽屏,单位的是22寸宽屏,22寸宽屏按照某些设置才能刚刚显示完全的某些页面,家里的19寸当然做不到。表太宽了,缩小看得很辛苦,为什么要这么折磨自己呢。而且即便今天才开始处理那些东西,填表我有5个工作日的时间,写分析我有10个工作日的时间,无论如何都做得完。我需要做的是慢下来而不是一股脑什么都急匆匆地赶着去搞定。

今天核对报表的时候我发现了个不是问题的问题,之所以有那个“1”的误差是因为一年累计下来12次四舍五入数据造成的,这个误差只有“1”是因为自从我开始报送报表,我都保证报表的期末数永远都和实际期末数对上,于是呢,期间的变化数就会因此多1或者少1,久而久之,累积起来“1”的误差就来了。让我觉得很神奇的是流通报表里商品粮、市储、县储的年报里白色的单元格都能修改,唯独省储的就不能改,而误差恰恰发生在省储的单元格里。这种bug实在让人感觉很无语。粮食局说年报白色部分是可修改的,的确大部分的可修改,但偏偏就是我数据最多最复杂的那个报表改不了,囧。粮食流通年报这东西是自动生成的,按照1-12月的报表自动生成1年的年报,理论上每个月都不错年报就没有问题,但四舍五入很可恶啊啊啊~~~ 报表要求单位是吨,实际上我们的统计最小单位是公斤,所以这种不是问题的问题会持续发生。误差不能避免,所以为什么他们就不能来一条可以备注情况说明的呢?毕竟“1”是每个单元格里最小的统计单位了。

系统是人做出来的,人不完美,所以系统也肯定不可能完美。

2010-07
30

外行人的抓狂

By xrspook @ 21:43:22 归类于: 烂日记

从前,觉得四舍五入是个很伟大的发明,上大学后知道了有个更高明的四舍六入五成双,这些伟大的数学处理,在闭合的统计报表且没有任何明确的填写说明面前都变得那么的苍白无力,只能把你气得狂锤桌子、大喘粗气却无一得。一个显浅的常规问题,却没有个官方的说明,当我抓狂到极点的时候,我不得不大吼一句:“大叔大妈们!你们到底在用什么潜规则啊!”法律法规只有大条道理,报表里没有填写说明,如此粗放的形式代代相传,难道就没有人觉得有问题?还是,问题见多了,就不能算是问题。

哎~~~

Excel默认不会四舍五入只会保留小数位,但经过公式设置后可以全舍、全入或者如你所想的那样四舍五入。但,制表人,你到底想怎么着呢?只有你清楚自己要怎么着,才能控制Excel怎么着啊。

闭合的表格,没有备注的余地,除了少部分数据输入格子就是公式自动计算,这些很先进的Excel设置在更伟大的事实面前二者原来是有那么一点点不同,有矛盾,那该怎么办呢???

我在困惑,大概因为我一直都只是个业余的,是一个外行人吧。

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