普通视图

发现新文章,点击刷新页面。
昨天以前首页

糟糕的汇总功能

作者 xrspook
2025年6月1日 08:17

当年今日

智能化这个东西,我感觉是一个深渊、无底洞。理想很丰满,现实很骨感。几乎可以这么说,现在单位的所谓智能化,无论是单位的作业系统,还是集团公司的OA系统,都是一个四不像的东西。也不是说它们不能把某些数据呈现出来,关键是明明那些明细数据都已经收集齐全了,但是最终那些如何汇总可以这么说,两边都是一团糟。为什么都这么糟糕呢?为什么就不能把数据整合到一个让人舒服的模样呢?最基础的东西不断地让我填,填了一遍又一遍,但最后明明这个汇总结果根据已有的基础数据是完全可以组合生成出来的,但出来的东西就是非常的糟糕。比如说把不应该拼接的东西拼接在一起,结果那个结果就是还不如直接没有,因为放在那里只是碍眼而已,没有任何实质效果。两边的系统都存在这种问题。这是技术上实现不了的吗?显然不是。

因为浪潮现成的那些导出让我们的活没法干,所以我们单位的人也就只能写数据库查询,把我们想要的那些明细数据整合出来,然后通过Excel查询数据库,最终输出。我自己也在做同样的事情,我通过的是Excel的VBA,查询的是多个我自己的原始数据,有些数据只是一个复制粘贴,但有些数据需要日积月累手动录入,之所以不能直接使用系统的数据,因为某些数据是需要进行拆分微调的,某些则需要人肉添加某些必要的字段。为什么浪潮那里就不能把那些字段直接带入呢?还有那些微调,本来是不应该存在的,之所以存在,就是因为发生了一些非常规的业务。某些人觉得这么干没有问题,但实际上他根本没有考虑到我们的系统不支持你这么脑洞大开。再深一层的考虑,为什么会不支持?因为那的确不是一个白纸黑字明码标价说明可以这么操作的事情。难听一点,可以称之为违规,因为规范里根本没说过可以这么干,但如果人情一点,可以说这也是一条没什么问题的操作方式,只是原有的那些不够全面。最终到底认可还是不认可就看你怎么解释,听你解释的人是如何理解、有多大的容忍度。

无论是我的同事查询数据库,还是我用VBA查询多表,最终大家都是根据已有的明细数据生成一个我们觉得舒服、我们需要的那种表达方式。为什么我们能做出来,但是那些所谓系统却做不出来呢?浪潮做不出来,可能是他们根本没有在那个地方用过心。致远做不出来,居然跟我们说是因为我们给的钱不够。实际上有些功能是一期的时候给过钱,写过需求,要求他们那么干的,但实际上他们出来的效果不符合我们的要求。在这种情况下,你应该给我修正过来啊,但为什么没有呢?写需求的人没发现,发现的人不知道如何去反馈。基层单位不知道集团公司当初写的需求是什么。集团公司要基层单位使用这套系统的时候完全没有任何的指引。基层单位只能摸着石头过河,没有手册,没有讲课。我也不知道我应该看到些什么,不应该看到些什么。当我看到一些理论上跟我没有关系的东西的时候,我只能认为可能那套系统就这么个样子,就是可以让我看到,虽然那对我来说没有什么意义。

无论是浪潮还是致远,他们觉得基础数据的收集是他们得做的,而后续的汇总查询是额外的工作量。实际上换一个角度考虑,如果你能把那些字段构直接交给用户,让用户自己去设定流程查询,你完全没有任何工作量。你只需要教会用户如何组合就好了。汇总数据,无论是1个还是10个还是100个,都只是用户发挥想象力的事情而已。他们不敢放开这个,可能他们就没试过放开过。为什么会这么说呢?因为中兴云在介绍他们的系统的时候,就曾经说过这么一条:用户可以自己设定流程,生成自己的查询汇总数据,具备很强的拓展功能。说是这么说,实际上他能不能实现我不知道。显然即便开放了,这也不是一般人就能做得了的事情,起码他得懂一些东西。提出某些汇总需求的人得明确讲出他的数据是怎么来的,然后那个懂一些的人才知道该怎么给你凑出这个玩意。现在我估计情况是要汇总数据的人没有说清楚那是怎么来的,其次那个懂一些帮你设置那个流程的人不存在。

明明打通任督二脉就能轻而易举就解决的问题,现在翻来覆去、耗费大量人力物力。

使用内部数据就会卡?

作者 xrspook
2025年4月12日 08:35

当年今日

昨天说到一个很简单的SQL语句引用的数据库就只有一个字段两行记录,居然需要24秒才能得出结果。这让我觉得非常不可思议。首先可以肯定的是数据量非常少,为什么会出现这种问题呢?那只能是连接方面是不是出了什么故障,也不能说,那是失效的,因为的确还能查询得到想要查询的东西。在我测试的那个宏里面。我引用了两个文件,一个是外部文件,一个是内部文件。外部文件是含有比较多的数据,而内部文件,也就是我一开始说的那个只有两条数据。我感觉如果我的SQL再厉害一些,我对VBA再熟悉一些的话,那个内部文件可能我就不需要引用了,我直接就在VBA里创建一个数据库,然后把两条数据给写进去,用完以后就删掉,但显然现在我还没有很大的把握,一定能完美地做这件事情。把我某个文件里面的数据转化为数据库的数据我又烂熟,所以我采取了现在使用的这种方式。

ADO+SQL的这种方式,因为我们是跨表引用,所以意味着数据肯定来源于多个文件。他们有可能是同一个工作簿的不同工作表,也有可能是在不同的工作簿里。对我来说,只要是在一个工作簿里,那么起码一开始设定指向的时候就得有一个数据源。最经典的方式引用的那个数据源在使用数据的时候,在from后面不需要进行进一步的引用,其它的就得麻烦一些。我的第一个反应是,是不是引用数据的那个语句出现了变动呢?比如说现在我用的是Excel12。在数据源引用方面,我又折腾了一番,发现好像还是那样,没什么进展。会拖慢查询的那个数据源,我甚至把它放到了主数据源里,结果发现还是很慢,于是这就排除了是数据源引用语句变动导致缓慢。

所以这到底是什么原因造成的呢?因为我有很多个跨表引用的查询。有些查询是内部数据外部数据都有,有些只有外部数据,经过测试后我发现好像只有引用了内部数据的查询才会变慢。

为了证明我这个想法,星期三的晚上我编造了一些数据做测试。主要原理就是研究是不是数据源的关系导致这种变慢。一开始我的设计就是一个排列组合的方式,因为我默认的数据引用是要跨表的,所以我把数据源根据内内、内外、外外和外内这4种方式测试,实际上内内和外外是一回事,也就不需要进行两个引用了,所以我又把那两个东西拿了出来,同样进行测试。结果让人有点吃惊,凡是有内部数据参与的查询都会变慢。我测试的数据就只有一个字段几条记录,内内和内外需要12秒,外外需要0.1秒,外内需要24秒。这就能解释为什么我的那些变慢的查询起码都要24秒才能出结果。因为我永远把内部数据放在后面。究其原因是因为我设计那些查询的时候,我后来才想到要在那个查询文件里面搭一个加脚手架,把一些基础的东西加上去,在这种情况下我加得最多的是日期表。

关于这个测试的来龙去脉以及最终的结果,我在ExcelHome里面做了一个详细的帖子,在这里就不再具体阐述了。

折腾了这么一番以后,我发现这个锅还真不是我整出来的。造锅的是微软,不知道更新出了什么状况导致了。

Excel用多了,不知不觉我也居然能挑出微软的毛病。

查询突然变慢

作者 xrspook
2025年4月11日 08:14

当年今日

周三的下午跟往常一样,我点一下自己写的ADO+SQL+VBA的跨表查询文件,结果发现之前一秒就能出结果的东西等了好久,鼠标在那里转圈,我都甚至怀疑是Excel不知道因为什么原因卡死了,但我又有理由相信这不是卡死,因为当VBA要运行很长时间的时候,就会出现那种假死的状态。以前我遇到过这种情况,当我要查询一整年的平均库存的时候,就会这样,如果只是查询一个月的,没有问题。之所以一整年会出状况,是因为需要处理的数据的确有点多,如果我用的不是Excel的VBA的SQL,如果我要做的那个平均库存是在数据库里,用正儿八经规范标准的SQL做,我感觉不需要那么长时间。要长时间运行,无可避免会出现假死状态。周三下午,我就经历了一次,但我觉得那个查询不应该会假死。那个查询文件我用了接近两年,一直以来都没什么问题,因为数据不多,很简单,所以正常情况下,一秒之内出结果。其它查询可能需要的时间长一点,因为涉及的数据量比较大,但是这一次让我卡死的那个,一直以来,当我测试成功通过以后,就没有卡死过。

为什么会这样呢?我把自己写的所有查询文件全部都点了一遍。我觉得既然最简单的那个都要卡24秒,那些之前需要更长运行时间,会让人疯掉。测试结果让我有点意外。我猜想会更疯狂的那些居然没事,跟以前一样,运行时间没什么区别,但有些我感觉没有难度的东西,反倒卡住了。最卡的那个卡了97秒,实际上那个查询平时只需要0.5秒。

遇到这种情况,首先我不觉得是因为我的查询文件出了状况,因为这几天它没改动过,除非有人动了我的电脑,但这个几率太低。我觉得出状况最大的可能性是那个源文件的结构发生了某些变化,因为我引用的是Excel文件。用的那个范围是一个超级表,而如果在那个超级表以外的某个地方出现了一些奇怪的数据,比如说在纯日期的列里面出现了文本,那么就会导致在SQL转化数据的过程之中出现一些意想不到的事情。为了避免这种事情,我把源数据的那些空白行和列全部都删除处理。这就保证了我的原始数据是符合规定的,和以前的格式是一致的。接下来我觉得这会不会是更新的问题,所以我对windows系统以及Microsoft 365都进行了手动的更新。这两个东西的确都是需要安装更新的。更新完成了以后,问题依旧。

接下来我有两个选择,一个是就这样等死,反正现在的情况也不是出不了查询结果,只是用时很长而已。万一这真的是微软升级的bug,说不定哪一天他们就会解决掉,但也说不准他们永远都不解决这个我认为是bug的问题。第二个选择是我主动出击,逐个测试VBA查询里的语句。找出那条让我运行时间很长的语句,然后判定到底是什么原因。

那个理论上一秒就应该结束的查询,实际上是Excel工作表里面汇集了多个汇总查询。我只是把结果都在一个页面展示而已,所以首先,我要找出导致最终结果很慢的是哪个查询。这是一个反推的过程。让我有点意外的是,那些涉及很多数据的查询居然都没有问题,一个我觉得根本不会出问题的问东西里居然出问题了。出问题的那个查询实际上只涉及了一个字段两条数据。这简直让我震惊了,怎么居然这样呢?

这个问题是我之前没有遇到过的,但从发现这个奇葩之后,我觉得自己有点跟那杠上了。

❌
❌