2024-05
10

进一步加权平均

By xrspook @ 10:06:46 归类于: 烂日记

之前说到了Power Query方案不完美,第2天我又更进了一步,真的老老实实做了两层加权平均。效果挺稳定,比之前那个还稳定,因为之前那个方案查询数据是跨表的方式获取,PQ可以跨表查询数据,但在数据转换的时候,可能会遇到一些问题,导致刷新通过不了,于是你得重新刷新,如果你的表格很多,会让你非常的烦恼。我这一次,我采用的方案是用VBA跨表抓取数据,相对于PQ的跨表来说,VBA的跨表更稳定。在不进行文本拼接的前提下,我对VBA里的SQL操作感觉是要比PQ熟练一些。 VBA抓取的数据很快,不会有卡顿的烦恼,除非VBA直接卡死了。VBA卡死的解决方案就是重新拿出之前备份好的那个重新刷。又或者是卡死了之后再弹出Excel,然后你选择把那个东西恢复,这两种通常都能解决问题。如果依然卡死,那么估计你就得重启电脑了,如果重启电脑还是不行,那就换一台电脑吧。前几个月基本上我每天又或者是每隔几天就会遇到VBA卡死,但近段时间又好像没有再遇到,我严重怀疑这跟win10的系统更新有关,尤其是框架的更新。

用VBA抓取数据,然后把那复制到要进行PQ处理的工作簿里,把需要手工填写的东西补上去,然后PQ就可以很快乐地在工作簿内弯曲折叠生成我想要的样式。如果说有什么事让我觉得我非得在PQ里而不想用VBA解决的,大概就只有文本拼接。在PQ、Python又或者真正的SQL里进行文本拼接都是很大路的货色,但是在Excel的SQL里,你就是没有一个很方便的方式实现,你只能把它输出到数组,然后再折腾半天。老领导要求的表格里,总少不了文本拼接。有可能是拼仓号的,有可能是拼品种的,有可能是拼客户的,也有可能是拼各种组合的。如果要拼这么多的东西,我首先想到的就是在PQ里做一个分组。PQ也是一个很神奇的存在,分组的时候就没有办法给我选择文本聚合,其实文本的聚合的方式就是文本拼接。所以每次你都是得随便选一个求和,然后在高级编辑器里面把求和改成文本拼接。

PQ经常让我绕来绕去绕不出去的还有if的使用。在其它编程语言下,括号逗号解决问题,但是M语言里if这些东西都没有。所以当我用常规的思路去进行我的条件设定的时候怎么都不对,最后我不得不使用自动生成的方式,接着才发现原来自己语法错误。

在PQ里使用加权平均,思路来说很简单,就是数量乘以单价求和后再除以数量之和。如果要分步操作,在分组之前要算出一个总价,分组以后在高级编辑器里面修改公式,用总价除以总数量,但实际上也有不需要分两步的方式,但是需要用到list.zip。其实我对PQ并不算太熟悉,在没有查找加权平均的方案之前,我试过用公式套叠,结果发现不行,在list.sum里面选择两个列,然后相乘实际上是不可以的。list.zip那种方式,让我想起了Python里面的元组操作。要完全搞懂PQ,学习成本非常高,他们的各种玩法套叠简直是到了那种让人眼花缭乱的程度,当然,其实Power Pivot,也就是DAX语言要玩得高深,同样很烧脑。对我这种初级玩家,主要是用来拼接文本的人来说,基本功能能顺利实现也就可以了。最终生成的数据,有一些地方肯定用了加权平均,我手动校核了一下,发现很OK,没有问题,但是我还没有测试过一种先单仓做平均,然后再多仓做平均的数据。这种数据肯定会有,但是今年的前几个月未必一定发生过。

手上的工具多了,用的时候得想想用那个最合适,又或者,联合使用也是个妙招。

2020-09
18

强大的查询

By xrspook @ 8:45:44 归类于: 烂日记

昨天我实现了前天还不能实现的功能,用起来果然很爽。Power Query拯救了用vlookup公式导致源数据界面输入卡顿的问题。关于vlookup的卡机,据说用Power Query或者Power Pivot都能实现,而且据说PP的效率比PQ还要高。PQ现在我知道应该在哪里写代码了,但PP的DAX到底在哪里写,至今我还没找到。相对来说,我觉得PQ界面的按钮多一些。PP的按钮感觉跟数据透视表很类似。这就意味着,厉害的功能就隐藏在普通的东西之中。PP跟PQ比起来,函数的数量少了很多。用过的人都说,PP要比PQ简单,PQ就像一个谜一样。

前几天当我搜索,PQ教程的时候,发现了里面居然有递归。在谈递归的时候,把迭代也放进去了。迭代跟递归有什么区别现在我还不知道,但我知道递归和循环有什么区别。当某个函数的控制可以把判断和循环都用上的话。再加上700多个已经事先设定好的系统函数。PQ要实现一些神一般的功能显然是理所当然的。只有你想不到,没有它做不到,但前提是,要做到某些功能,光靠可视化版面,根本不可能。要在高级编辑器里自行折腾,或者在自定义的地方选择性折腾。光靠鼠标点击按钮是没办法把PQ的函数层层套用的,没办法一次性套用多个函数,某些功能就比较难实现了。对小白来说,要掌握所有可视化的按钮,尚且没那么容易,但是真正的高手,是必须自己写码的。

PQ用的是M语言,貌似我在VSCode的插件里面没找到相关的东西。里面有DAX的插件,可以自动补全和语法高亮。M语言更需要这种插件,因为光是函数的大小写就会把人搞疯掉。英语输入默认全部都是半角,但是如果我们的脚本里面还有中文,那就意味着中文跟英文得不断切换。光是逗号这种东西就会搞死人。而且我们的脚本里面,还不可能不出现中文。的确,函数可以起英文名字,但是,要处理的数据的列名,必然有中文,因为表格的内容有中文。我不知道那些写码的人是如何克服这种中文英文切换标点符号的问题,反正我是觉得,双引号,逗号,小括号这种东西经常让我很烦恼。不过幸好,据说,Office 2016以后的PQ,在写码的时候有自动补全功能,的确现在我的Microsoft 365可以这样,不仅仅是函数可以自动补全,连变量也可以自动补全。我不知道其他人写码的时候是怎样的,反正自从我习惯了python以后,我实在不能接受没有规范缩进的脚本。也正是因为有了python的习惯,所以我也默认把缩进从tab换成了4个空格。习惯了在VSCode里4个空格是4个圆点,现在PQ里没有这种东西。总让我觉得很不智能。

所有office文件都可以修改后缀,变成一个压缩文件。里面你看得懂或者看不懂的东西实际上就是数据以及你执行的步骤,所以PQ虽然有可视化界面,但实际上,它的高级编辑器让我觉得,那东西还原出了office软件数据处理的本身。

今年我的计划是学R语言,但实际上,我迷上了python,接着现在,我又迷上了M语言。

2020-09
16

迷上Power Query

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

从完全不用Power Query到天天都用那个东西,我感觉这实在太不可思议了。这种变化仅仅发生在一周之内。一周前我还在纠结,为什么我的Microsoft 365用不了Power Pivot和Power Query。自从我重新能用PP以后,我就在不断地探索,但是平时我处理的东西已经没什么可探索的了,因为那都是用了几年的成熟方案。我觉得已经很顺畅了。如果要再高效一点,就是把所有东西放进数据库,但我又不想真那样。并不是说我的确做不了,而是我还是想把这些东西用普通的office软件解决,毕竟实在说不准以后会怎样。会不会某一天我不续费365,又或者是我可以这么操作,但是和我搭档的人无法接受我的高端。如果我只是把软件交给他们用,这对他们来说学不到什么东西,他们只是用软件。当然这对我来说是很有好处的,因为无论是软件的使用还是软件的开发,我都了如指掌。这也正是我一直都很着迷的事。我不仅仅喜欢研究某一个部分,从某一个部分开始,我会快乐地发散开去,无论是纵向的还是横向的,最后全流程我都熟悉了。大概到了那个时候,我会换另一种东西开玩。

说回PQ这个东西。其实几年之前我已经听说这个强大的存在。Office 2003有个MS Query,但那个东西跟PQ其实是两回事,MS Query更类似于数据库的界面,PQ我觉得应该是Power BI的一个组成部分。Power BI除了PQ以外,还有Power Pivot和Power View。说是这么说,实际上我没用过Power BI。PV这个东西非常强大,动态展示数据,五颜六色,各种花式,但问题是,即便我能把那些东西放在网上,当我要交作业的时候,领导还是比较喜欢长篇大论。其实我更倾向于做个PPT,然后由我上去讲我的想法,而不只是写一篇纸上静态的东西说明问题。

PQ让我着迷的首先是逆透视。逆透视在从前的教学里,唯有通过数据透视表高级处理,现在貌似我已经不记得应该怎么用了,但是PQ非常简单,没有做不到,只有你想不到。二维表变一为表是秒杀的事。既然可以逆透视,当然也可以透视,所以你也可以把一维表变成二维的,为什么会有这种需要呢?之前我也不觉得要这么干,但昨天论坛里某个网友还真提出了这样的要求。他要合并两个表的数据,其中一个表的某两列得先进行透视处理。为什么会这么折腾呢?从原始数据看来,我不觉得他的表有什么问题。如果是我设计的原始表格,也就那样了。最终,他想做到的效果也很正常,因为那一大堆的数据,最后要得到的,其实也就是为了看那些东西。一开始,我想用PP连接两个表。结果发现连不上,说那不是唯一的ID,我有点理解为什么会连不上,因为实际上两个表除了某列数据有共同点以外,其他东西完全不相干,但是PQ却可以把他们用接近变态的方式粘合起来。从最后组成的大表结构看来,的确很乱来,但是要的不就是最后的数据吗?整合之后,一点问题都没有,当然,如果你要筛选两个表格,关联部分以外的字段肯定会出状况,而且这个状况是无法避免的,因为那些根本是不共有的信息。

我对PQ有好感的另外一个原因是那个东西有高级编辑器这种神奇之物。那种感觉就像PQ是一个可视化的网页制作软件,而它的高级编辑器就像是源代码。路人甲玩的是可视化,高手操控的是源代码。PQ的源代码用的是M语言。这是一种介乎于函数和编程语言之间的东西。能玩好这个的人没多少,能玩好这个的人绝对会让别人觉得是个神。数据的整理变成弹指间的东西,非常的伟大。几句代码就能解决平时我们只能靠努力,甚至非常努力都仍然解决不了的问题。

是网友们的问题,让我的脑洞又大了。

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