2023-07
27

PQ为什么不改进

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

上周开始我就在用Power Query跟Power Pivot做跨表的数据合并。与其说是数据合并,不如说是数据查询。一开始我用的是PQ,因为从感觉上来说好像 PQ做这个就够了,但当我把东西都做出来了以后发现PQ很多规则都非常奇怪。让我觉得要试一下PP到底怎么样。根本原因是明明数据量很少,但是PQ的运行效率却很低,而且运行效果很不稳定。从0-1生成PQ的过程比较挣扎,虽然整体的思路我都有,我知道我要有什么后效果。但是该如何实现还是花费了我不少时间,比如查询参数应该用什么格式的表格表达出来。一开始我把4个日期和3个文本以左右的方式表达。的确这样的取数没有什么问题。虽然实际上PQ是用列去进行各种魔法运算的,但要精确定位到某个单元格也就是某条记录一点问题都没有。后来当我要用PP,那个东西至今我不知道如何在某列混杂着各种内容的单元格里获取我需要的数据。要顺畅用起PP,我得把日期参数跟文本参数拆分为两个表格。文本参数我不是直接给PP用,而先给PQ,所以横的竖的都无所谓。日期参数是直接在PP里做限定,所以必须以PP的规格去设定表格的形式。这仅仅是参数的表达,是最简单的东西。如果以普通人的视角考虑,某一列数据日期和文本混搭一点问题都没有,但是从机器的角度考虑,从我使用的那两个软件的规范考虑,显然这样是不行的,又或者说不是不行,是你为什么非得以一种如此随意的方式去做这么简单的设定呢?混搭的方式,肯定也会得到你想要的结果,但是对软件新手来说,绕那么一大圈显然就比较费劲了。

用PQ和PP的方式做出来的两个查询都能实现我的目标。数据都是没有问题的,但是一个文件体积很大,一个查询时间很长,且查询效率忽高忽低不稳定。这两个都不是我想要的。我不过是想做一个查询而已,很简单的东西,实际上我就只需要一个结果。那个结果以我想要的方式输出,后续的格式化纯粹是让我自己觉得比较顺眼好看而已。但是这两个Microsoft 365内置的Power都不能达到我的预期目标。

在挣扎之前,我觉得应该用PQ实现目标,但实际上出来的效果跟我想象的相差挺远,最根本的原因是我实在不太理解PQ的数据处理。PQ是用来做数据清洗的,所以从某个大表里获取数据,然后进行各种筛选,接着以各种目标形式输出表格,理论上这是很简单的事情。这大表的查询几乎可以这么说,一定是引用外表,因为源数据已经很大,你不可能在上面直接运行,虽然其实一直以来我都是这么干的,但是那个时候我并没有进行跨表操作。从现在的运行效果看来,即便是同一个代表同一个源数据,最终需要以几种方式输出分组筛选后的结果,最终要生成多少个查询效果,我就得把那个源数据查询多少次。理论上怎么会干这么傻的事情呢?直接把大的源数据查询一次缓存起来,往后就不需要调用了。但问题是从我现在的观察看来。最终我要多少个查询结果,他们就同时开始查询多少遍,于是有些时候就会导致有些查询结果失败,你得刷新再来。原因是这个查询正在使用那个源数据,那个查询也在用那个源数据,为了抢那个源数据打架了,抢不赢那个就刷新失败。都是查询一个源数据,我考虑过既然无法避免它们一次又一次查询,那么我就把那几个查询按顺序来,完了一个再到下一个,但实际上这个也是无法控制的。都说VBA是单线程的,但是PQ是多线程的,单线程虽然慢,但是多线程这样打架,最终反而得不到我想要的效果。从理论上说,我把那个大表一开始就缓存起来,后面的都用内存缓存,这很正常啊。我设置查询的优先等级,先刷新一些,然后再刷新另外一些,这也很正常啊,为什么却没有一个很直接的实现方式呢?有些人想到要用VBA去控制PQ的刷新顺序,但是VBA却很难判定某个刷新是不是完毕了,VBA也很难做到这个刷新完毕了再开始下一个。

接下来我要试一下python方案,我的目标是查询时间小于10秒,生成的文件小于100K。

2016-09
9

bug bug bug

By xrspook @ 13:36:05 归类于: 烂日记

连续第三晚做梦、做稀奇古怪的梦,昨晚的梦绝大部分内容已经忘记了,但其中有一个情节是我们一队人要到达某个地方,要去那里,我们要通过一个秘道,开通那个秘道需要把一个厕所搞起来,然后通过里面的洞钻到另外一个地方。那队人里有我的同事也有也有一些我不认识的实习生,正是那些实习生把那个厕所里面的便便搞到我的鞋上。记忆之中,昨晚的梦里就只剩下这些。显然,我的触觉视觉听觉在梦里都可以很好地表达,但我的嗅觉却是一片空白,因为即便在厕所里看到屎,甚至搞到了我的鞋上,我还是闻不到一点味道。也就是说,我大脑里嗅觉的体验相比于其他几种感觉比较弱。嗅觉的数据库没有其它那么丰富,所以我做梦的时候当然也就不能很好地表达出来,一些简单的味道尚且不重现,更不用说那些很复杂的。也不知道是梦里还是梦醒的时候,我记得昨晚我拖了个手表,今天早上醒来的时候,我的确发现我左腕的手表不见了,那东西出现在我枕头旁边。做梦和事实,磨磨糊糊交融的时候,你简直不知道你自己在干什么。

昨天小米手环又吃掉了我的步数,早上6点多到中午11点半的数据一个都没有。那里有六千多步的内容啊亲,上周六才刚吃掉我2.3万步,现在又吃掉我六千多,它到底想怎么着?这些数据并不是因为手环没有同步到手机上,手机和手环的数据都是存在的,但问题就是,已经导入到手机上的数据无法跟app形成关系。情况就等于你找到了一大堆外语资料,但你却不知道如何把它翻译为中文,交作业的时候,老师不管你的资料里有没有外语的,TA要的只是中文,所以你的资料就少了一大段,但实际上你找来的东西真不少。为什么我会这么说?因为如果在应用管理那里清除小米运动app的缓存数据。那么小米运动app状态的那个步数跟详细的那个步数就一致了,但只要一下拉同步,把缓存里面的东西添加到状态,前面跟后面的数据又差了一大截。综上所述,缓存数据里就有那些总步数跟实际记录步数差别的内容,但问题是缓存里的东西,无论如何也转化不了成记录,这个不是硬件罢工的问题,显然这是app软件上的bug。这种事一再发生,无论是小米手环一代,心率版,二代,都存在这个问题,而且版本越新存在的问题越是多,这到底是怎么回事?遇到这种问题,实际上,通过把缓存保存到另外一个地方,再用别的手段把数据上传到数据库,就可以解决了,但问题是华米从来都不给你这条后路,他们的客服也从来不会回答遇到这些问题该怎么解决。因为遇到的人实在太多了。即便遇到这些问题的人很多,但工程师还是不作为,又或者说他们的确作为了,但他们人手不够,他们都努力远远不够用户生成问题的速度快。与其把一大帮工程师用在开发新产品上,更不如在旧产品上面投入一定的客服,解决掉之前没有解决的问题。这样的服务到底要骗谁呢!这样的服务能赢来忠实客户吗?当小米运动app里前面的数据跟后面的一致的时候,就意味着你唯有一条途径让他们统一起来。那就是砍掉你之前你已经走过很多的步数,让又后面少了一大截的步数去覆盖。具体方法是把手环结绑,然后重新绑定。无法同步的时候,他们会跟你说,同步完数据,然后解绑让后重新绑定。如果我的数据能同步的话,我会蛋痛做这个吗?!就是因为我同步不了,我才被迫这么干。他们提出的解决方案,简直就是在绕圈圈,考验你的逻辑,忽悠你。

在信息爆炸的时代,只求快不求质量,终有一天会大大地栽跟头。

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