2024-08
11

很简单的问题其实不简单

By xrspook @ 8:46:32 归类于: 烂日记

如果人到中年,仍然是一副高高在上,觉得不对的东西这一定是别人做得不好,是非常可悲的一件事,因为这会显示出那个中年人的无知。当我准备这个开头的时候,其实我也在反思自己,我自己有没有干这种事情呢?很多时候,其实我内心深处我是有干这种事的,但绝大多数情况之下,我都没有说出口。

比如在处理某些Excel的数据问题上,你可以用数据透视表,你也用可以用公式。最重要的是只能得到一样的结果,我为什么要用数据透视表呢?又或者我为什么非得用公式呢?我是一个数据透视表的狂热分子,如果能用数据透视,我绝对不会用公式,但有些时候看到某些数据,我的第一反应也是用公式。因为第一感觉还没想到数据透视表要怎么实现这个东西,又或者那不是能很直观就能实现的玩意。对同一组数据进行不同维度的汇总,我会毫不犹豫地选择数据透视表。一个数据透视表搞出来以后,复制粘贴成N个,然后把里面的内容换成你想汇总的条件,结果就出来了。明细一定是统一的,汇总的结果也一定是一致的,完全不需要怀疑。如果某些东西出了状况,只能说明明细数据那里有点瑕疵。那个瑕疵会带到每一个复制出来的数据透视表里,所以一旦更新明细,所有汇总也都可以在一个全部刷新之后得到正确答案。如果用公式呢?作为高级的Excel的公式,条件汇总一点都没有问题,可以单条件可以,多条件混搭来使用,但是对一般的人来说,其实除了汇总的条件以外,筛选的字段其实也是一个难点。除非你非常肯定那个筛选的字段只有ABC,而不会出现D。否则的话,筛选字段不全,最终汇总的结果几乎可以这么说,不会跟明细表的实际合计数一致。当然如果要保证筛选条件齐全且唯一,也是有公式可以实现的而且那个是高端的动态公式unique。会条件汇总的人到底知不知道有这个动态公式的存在呢?这要求了使用者了解自己的数据,也要了解自己使用的Excel,了解Excel以前的公式和最新的公式,以及自己所使用的那个软件是否支持这些公式,当然这还包括如果这个文件还要给别人看,别人的电脑的Excel到底能不能支持显示这些内容。要一个普通人考虑那么多的问题,显然就有点难了。

一个求职者,在自己的简历上写着熟悉办公软件使用,但他到底有没有这个能力,我感觉这起码能把80%的人刷下来,之所以我没有说的那么彻底,因为还是会有一些奇迹存在。在我所在的单位,在新招回来的应届毕业生之中能考虑到那么多东西的人凤毛麟角。10多年前我大学毕业的时候,我也不懂这些,那时候我也不懂数据透视表。一个工科生的大学本科课程里涉及的计算机内容不会有这么具体的实际问题。多年以前,但我考职称计算机的时候,那里面对Excel有操作的要求,也没有这些内容。这个操作对一个需要在办公的时候处理这些数据的人来说,是必备的技能。所以无论你是大专毕业,本科毕业,硕士毕业还是博士毕业,光靠学校规定教学内容的那些课程,没办法直接帮助你解决这些实际问题。但读了那么多的书,难道就没用了吗?显然不是。我觉得高等教育最重要的是教会一个人如何学习,准确来说是如何自学,当遇到一个问题的时候,得学会拆解,知道我想要的是什么?我怎么才能实现?但是现在的大家,又是否真的能做到这一点呢?不管那个问题是不是跟你之前学的那些对口的。面对不对口的问题,更能考验学习能力。

我的学历不太高,我也比较粗心大意,但在学习新问题上,我一直都是比较好奇兴奋的,某些纯粹为了应试考证的问题除外。

2024-07
5

从小学数学题想到

By xrspook @ 8:20:18 归类于: 烂日记

星期三的晚上,初中的同学群突然有人发那两道小学数学题,他说他不会,接着另外一些同学去给他找来了作业帮和猿辅导,结果发现看完答案以后他依然不会。于是周四的早上上班之后,我就花了一些时间,列了个方程给他,但估计他还是不会。为什么作业帮跟猿辅导的那个他不会呢?因为直接看那里列出来的公式我也不大会,但我估计之所以那么简单粗暴地把题干里面出现的数字通过四则运算结合起来肯定是因为他们在套公式。在我自己得出答案之前,我没有看他们到底是如何解题的。虽然解题过程中我用了三个未知数,但实际上在整个运算的过程中只是一个未知数在操作而已,另外两个可以通过第1个算出来的结果继续推算出来。

当我做完第1道题,在做第2道题的时候,发现二者很相似,虽然有所不同。在做第2道题的时候,我发现题干那里有个括号写着牛吃草问题,然后我就意识到这肯定是一类题目的总称。关键点通常就在于草量有多少?草的生长速度是多少?牛的消耗速度是多少?你有多少头牛?大概就是这几个变量在翻来覆去。同学的那两道题跟经典的牛吃草问题没啥区别,但是你却不能直接的用牛吃草的那个经典公式去套用,因为两道题都有了一丝的变化。对只会套用公式的人来说,这会直接让题目变得无解,但是我根本不知道什么公式,我也不知道这是什么题型,我只是按照我的理解把相等的变量连接在一起,然后通过方程求解得出结果,有些变量可能你根本得不到一个确切的数字,但搞得清它们之间的关系,也算是解决问题了。

在我印象之中,小学的时候我好像没有遇到过这样的数学题,但是在初中,尤其是初二或者初三的时候,的确是有这种题目的。通常问你那个水箱进水多少,漏水多好,出水多少,什么时候会出空之类。初中的时候遇到这种问题,根本没有考虑套公式,因为这些题目通常都不是一个选择题,而是一个大题。那个时候变量xyz就出来了。因为做题的那个学生是小升初,所以我感觉小学六年级方程里面出现x肯定是可以的,xy同时出现有没有我不确定。我那个时候好像还没有。如果xy同时出现他搞不定,其实也可以通过某些替代的方式,让公式里面只剩下x。我不知道学生是如何死记硬背那些公式的。现在回想起来,就像噩梦一样,反倒如果你让我设变量的话,一切都好解决,思路也很清晰。无论你的题目怎么变,我总能得出结果。那些套用的公式,感觉看上去就是设定了变量以后,解题过程中的某些步骤。

我做题的时候就想不明白,为什么小学居然要干这种事情,后来才渐渐意识到牛吃草问题可能不是一般小学数学的题目,而是小学奥数的题目。如果这是小学奥数的题目,一定有公式套路,意味着你把题干里面的所有数字,经过各种排列组合跟四则运算进行做各种配对以后,就能很快的得出结果。本来我那个提问的同学小学初中的时候成绩就很一般,也就是说在他读书的时候,他就没有在这些问题上耗费过时间,所以他很难理解这些公司套路也就很正常了。小学生的固有思维就是虽然一道题可能有很多个解法,但如果你用的不是老师说的那种,他就会默认不接受。当然,这只是小学生的想法,当他书读的越来越多以后,他会发现要达到某个目的地,途径是多种多样的。比如哪怕你正在解一道几何图形题,那也可以转化为极坐标用代数的方式通过计算证明出结果,但是要让他们明白到这个道理,估计又得过好几年。家长在辅导孩子的时候,通常不会翻他们的教材,像这种奥数的问题,估计一般教材里也不会写,于是你不会知道一个普通的数学老师,那种不是教奥数的数学老师是怎么给孩子讲这种题目的。如果那是我的小孩,他问我这样的问题,我默认会用设定未知数方程的方式解出答案,可能孩子会明白我为什么要这么做,但是他也许也会提出问题。如果老师不让他们用列方程的方式,他该如何解答?所以现在回想起来,小学时候那些不让列方程不让设未知数光是要学生死记硬背套公式可能他们根本不知道演算过程来龙去脉到底是什么。这样唯一的好处只是让他们在做题目的时候速度更快。他们只是知道了一种方法,但可能他们根本不知道这个方法到底是怎么来的?还有没有其他的方法?在小学奥数的世界里,结果就是一切,绝大多数时候他们都不会要求计算过程。因为那些所谓技巧的东西,很多都是有套路的,而那些套路有时真的简单到无需描述。你只能用已经形成的条件反射把答案得出。

是什么?怎么做?为什么要这样做?经典的人生三问。我觉得真的不应该当人的经验积累到一定程度,才觉得最后那个提问很有必要。

2024-04
12

有理有据地做选择

By xrspook @ 8:17:23 归类于: 烂日记

花了大概一天的时间整理出一个用来算库存价值的东西,这里我没有使用VBA,是因为我需要一个更稳的方式。之所以不用VBA,因为已经不需要跨文件加入数据了,所有东西都将在一个文件里解决,而且相对于我得用VBA来干掉的那些,这里的数据相对来说很少,所以这一次我用的是Power Query。我有考虑过要不要用Power Pivot,但最终可能我的数据要以普通表格或者是数据透视表的方式表现出来,通过查询生成的东西最终可能要粘贴到经典的纸质版二维表里,数据透视表在这个情况下就不怎么适合复制粘贴,尤其是当我的数据透视表选项里有合并居中的设定。

在这个做这个的过程中,我有考虑过用Excel自带的公式,但无论是经典的lookup还是新函数xlookup效率都太低了,我不知道是我的电脑太渣,还是的确就那么回事。如果用PQ,在一个低端的Excel里,的确可能效果是很糟糕的,但如果我已经把刷新好的数据发给别人,别人即便刷新不出来,数据也都能看到,不影响,但如果用的是高级的公式,可能那里就一团糟了。还记得多年以前,单位有异地储备玉米,对方把到达码头和已经装船发货地数据发给我,用了sumifs,那个时候我用的office是2003的,那个公式我根本没办法使用,全部显示的都是一团糟,所以我不得不为了打开那个文件看到里面的数据又在电脑上装了个WPS。那次之后,我才努力的尝试用office 2016,之所以会跳过2013,是因为2013在数据透视表方面有无可救药的bug。如果是office 2010,高级公式依然打不开,所以现在当我要实现某个功能的时候,我要考虑什么东西会高效一点,什么东西兼容性好一点。VBA的兼容性很好,但是不是人人都敢打开宏文件。因为在以前,宏文件通常都意味着有木马之类的东西。同时,我设定了宏万一某些时候有问题,别人就会只会弹出错误,的不到结果,也会让人很紧张。

这一次我做的文件,可能后面见到的人会很多,他们可能会用不同的电脑,可能是win10,也可能是win11,有可能是office 2021、2019,又或者是Microsoft 365,也有可能是WPS,到底的WPS里面能不能正常打开并使用PQ我不知道,我估计是不行的,但是能不能看到数据呢?我觉得应该可以,但是无法通过修改某些条件刷新出新的东西。

微软的AI据说很厉害,但关键是在中国和俄罗斯用不了,所以那些都是扯淡。前段时间说Excel通过安装插件可以使用Python,但是那个Python处理是需要把数据送到远端的服务器再传送回来的,我感觉最终会跟微软AI的命运差不多。现在的Power Query相对于我第一次在office 2016里看到的那个已经成熟了很多。还记得我是第一次在自己的笔记本电脑 office 2016家庭版里见到的PQ,那个时候那就是个四不像,中文英文各有一点,翻译都不全。有些功能也不知道是我用得不对还是怎么样,反正就会卡住。对照一些经典案例,的确能得到某些结果,但是我却一直都没有经常使用,因为真的不是每个office都兼容那个东西,而且不同版本的office看到的结果和刷新到的效率可能相差很远。

要解决同样的问题,到底用什么样的工具?当我手上的工具只有唯一的时候,就只能选那个,但是当我可以做选择的时候,我会考虑数据大小、运行速度,以及不同windows和不同office下的兼容性。

2024-04
9

犯下各种错误

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

感觉近期我经常会犯一些这样那样的错误,有一些错误是系统性的,比如公式设置不当,这种错误修改起来很简单,但是一旦追溯,可能涉及的东西会很多。这种错误一般很难被发现,因为那些固定的公式一直以来都是那么用的,你知道那是公式,所以你不会动,但关键是某些情况发生了变化,那些位置是需要做变动的,如果这个时候没去改,系统错误就会一直延续下去。设定公式的时候,我肯定是经过多方考虑经过各种测试,之所以那个公式会使用,肯定也意味着好长一段时间我也是这般做下来没有问题。有些时候公式可能会让某些情况自动的被剔除在外,这个我是可以预测的。所以在那个时候,我就得手动验证一下公式是否合理。理论上这种事情我需要在情况发生变化的时候验证,但万一在那个时候我没有做验证呢?上个月发现的某个系统公式错误延续了我好几年的数据。虽然那个数据看上去刺眼,但实际上不影响我其它地方的数据使用,所以一直没有被发现。表格最终在报出来之前,我都经过多方验证,但是偏偏那个公式不到位的地方从来都不是我验证的范围。那次错误以后,我修正了某些公式,让那个之前从来不被我关注的地方也纳入验证。

另外一些让我出错的地方是某些数据要体现出来,但是跟前后左右都毫无关联。如果你光看纸质的表格,你会觉得出那样的错误是根本说不过去,因为不符合那里的勾稽关系,但实际上,如果看过电子表格的话会发现原来那里我没有做任何的勾稽关系,为什么那个地方会被排除在外呢?因为在出错之前,那个地方无法用公式实现。因为那个东西跟其它数据完全没有交互。如果按照以前一贯的做法,即便没有交互那个数据也不会出错,因为把月末数直接复制粘贴到期初库存那里就可以,但偏偏出错的那一次就在于那个数不知道为什么被我例外处理了。之所以会出现这个例外,是因为除了那个数以外,我都使用等于的关系来处理那一列的其它数据,理论上那个期初库存也可以用等于的公式直接取数过去,但我的公式没有覆盖到那里。所以为什么我在复制粘贴的时候没有发现这个问题呢?还有就是为什么当我做核对,当我把纸质版打印出来,再三校验的时候也没有发现这个问题呢?发现这些问题都是我自己,不是其他人告诉我出错了。被动地等待别人帮我找出问题,显然这是不可能的。

近期之所以会出现这种瑕疵,一定程度上跟我的某个心态有一点波动有关。理论上,处理数据的时候,我的注意力应该高度集中,但有些时候突然间就会冒出这么松懈的念头,为什么会这样呢?以前我从来不会这样。虽然我也明白,以前不出错,不意味着以后也没有问题。虽然主观上我已经很努力地使用各种方式避免错误的发生,但是客观上还是有一些瑕疵不定时冒出来。人无完人,但我觉得犯下这些低级错误会让我良心过意不去,虽然我也没什么好后悔的。

要彻底避免这个问题,我得挖出自己确切的病根。

2020-09
19

我喜欢Excel

By xrspook @ 20:53:41 归类于: 烂日记

Excel的一般公式,我比较熟练,一些高级公式的叠加,我需要找教程套用,但起码我知道那是可以做到的。一般的数据透视表,是我一直以来用得相对来说最顺溜的东西,至于高级的数据透视表,也就是超级数据透视表我几乎不了解它的高级用法。在数据的筛选查询方面,之前我用的是公式,而近期,我知道了有Power Query这种神器。在这之前,我已经知道可以SQL语言查询。去年我开始系统学习了Excel VBA。这让我大大提升了某些工作的效率。当然这是非常有针对性的。对我来说,要开发一个VBA脚本需要好些时间,并不是一写就能用的那种类型,期间要经过不少修改。所以其实总的来说,对Excel的了解我还是比较全面的。

也正是因为有这样的经历,所以当我遇到某些综合性的问题的时候,当别人把目光主要集中在某个他们很熟悉的版块的时候,我会凭借我的直觉找问题,而不局限于他们觉得出问题的那个地方。比如在把SQL查询跟VBA结合的时候,别人会把精力放在SQL查询有没有写错上面。SQL有没有写错,其实我根本没看,对我来说那些东西太长了,看不懂,而且那个人写的VBA脚本缩进很有问题,看得我很郁闷,所以我就更加没有心情在那里琢磨。那既然能计算出一个正确答案,说明那个查询语句应该没什么问题。也正是因为写脚本的人的那堆东西格式比较混乱,所以我有理由怀疑那是拼凑起来的脚本,因为居然在脚本的开头连变量的定义都没有。为什么VBA里没有进行规范的变量定义,后面也居然可以照样使用呢?这让我有点惊讶,毕竟这是个VBA,不是python。C语言里,如果不先进性变量定义,后面根本用不了。在我记忆之中,VBA的变量在使用之前是需要先定义的。最终我发现是那个人的脚本之所以出错,是因为某些语句的套用搞错了,为什么他会把那个东西放在里?我觉得大概是因为他没有明白他一开始做的那个with是什么意思。但如果你问我为什么他把那堆东西套在里面会出错,而且是某些地方出错,不是全部出错,我回答不出来。理论上这种错误能在恰当的调试中体现出来,但实际上,VBA的调试句子我还用得不算很熟练。或者你会说,这是因为我的VBA学习还不够系统化,但我觉得我已经用了学习VBA最靠谱的那本书了。可以肯定的是,一些很基础的调试方式我还没掌握,如果我学会了那些东西,我可以大大提升我的调试效率,把错误定位得更精准。VBA脚本这种东西,我觉得最根本的是必须得理解。如果纯粹是各种套用,基础功能的确可以快速实现,但是当遇到的问题比较综合的时候,就会出现一些他们完全料想不到的状况。那种状况有可能与脚本本身的内容无关,与脚本的结构有关。

相对来说,Excel里我用得最弱的是高级公式的套用。如何用一个非常复杂的公式解决一些高端的问题是我一直以来都不大上心,或者说记得不够好的部分。非常复杂的公式,尤其是数组公式,虽然能解决一些神一般的问题,但问题是,其实那些公式需要耗费大量资源,所以在处理大数据的时候,非常有可能出状况。我是一个实用主义者,能做到某个功能,但是做起来的效率不高不好,我为什么要选择那种只是看上去很炫酷的方式呢?情况就像用VBA解决同一问题的时候,如果只是在工作表层面处理和先用内存数组处理再在工作表层面表达,效率千差万别。

Excel对我来说,除了要最终结果,过程也得追求高效和方便。

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