2022-10
11

填充单价

By xrspook @ 9:49:59 归类于: 烂日记

工作出现了些许空余的时光,于是我赶紧继续开始看我的《DAX权威指南》。筛选上下文、行上下文这种东西实在让人非常抓狂。有些时候我是完全理解那种关系到底是什么,但实际上当用起来的时候又好像各处碰钉子。

一步步的学习DAX这没有任何问题,但学着学着自然而然我就会往自己的问题上面靠,于是心就飞走了,然后虽然已经学了100多页,但是感觉我还是找不到思路。我不知道如何在Power Pivot里面把两个日期扩充为一个日期列表。于是我就折腾了一番,这个在Power Query里实现我100%肯定是轻而易举就能做到的。以前我好像做过。支持我使用的方法是修改人家的高级例子,从前只是一步一步按部就班来。以日期扩充之后的表为基础查询模型里的计算库存不是不可以,但是翻来覆去非常耗时间。从前在PQ里计算库存,在情况不那么复杂的情况下弯曲折叠各种填充已经很耗费人力物力,而这种库存的计算实际上在DAX里面是秒杀完成的。这也就是为什么当年我放弃了继续走PQ这条路计算库存以及库存费用。在PP里,计算库存其实我早就已经搞出来了,虽然实际上那个筛选条件我至今都没搞懂。现在的问题是那个阶梯费用表达把我难住了。从简单的几个时间区间生成一堆连续日期单价对PQ来说实在太简单了,但为什么这种事情用DAX去表达却那么的难呢?所以实际上我觉得这个问题跟库存的计算一样,我还没想到那个方法该如何表达,也就是说理论上要做到这个也是很容易的。

如果我的单价用PQ实现,我的库存用PP去实现,最终我只需要很笨地把两边的数复制一下,然后在另外一个地方做一个很弱智的合并,显然这样也能曲线救国,以我现在的知识储备可以这般做到,但显然这不是我想要的效果。这个问题在近期我又开始纠结之前,已经困扰了我一年有多。

虽然不知道最后的那个灵感什么时候才会到来?但我知道那一定会到的。

就在这篇东西口述出来后,那个晚上我什么都没干,没有运动,也没做其它别的,一心就扑在PP里实现单价这个问题上。接近晚上10点,这个问题好像终于有了破解的苗头。用的是LASTNONBLANK函数,网上教程用的是LASTNONBLANKVALUE,但PP里没有这个东西,为什么呢?Power BI里面有但Excel里没有???

LASTNONBLANK ( <列名>, <表达式> ):为表的每行计值表达式,返回结果不为空的最后一个列值。

LASTNONBLANKVALUE ( <列名>, <表达式> ):为表的每行计值表达式,返回结果不为空的最后一个列值所对应的表达式的值。虽然被归为迭代函数,但与 LASTNONBLANK 不同的是,LASTNONBLANKVALUE 的<表达式>参数在筛选上下文中计值,这是由于存在一个隐式的 CALCULATE 将行上下文进行了转换。

https://www.powerbigeek.com/dax-functions-lastnonblank/?f=1
https://www.powerbigeek.com/dax-functions-lastnonblankvalue/?f=1

以我现在的水平我是搞不懂他俩到底什么情况,但Excel里没有我也没办法,把LASTNONBLANKVALUE的东西转化为适用于LASTNONBLANK,这又折腾了好些时间。其实这个东西说白了就是为了向下填充,如果这个地方空白,就用这一列对上一个有数的那个东西向下填充。当然,其实这个东西一开始的意图不是填充,是为了找到最后一条记录,这种东西要准确,通常默认跟时间关联。

虽然道路是曲折的,但我总算在单价这个问题上发现了我觉得应该很简单的实现方式。

2022-09
30

Power Pivot上瘾

By xrspook @ 8:52:56 归类于: 烂日记

对上一次晚上10点之前单位就结束所有业务,晚上11点之前我已经完成了所有事已经不知道是多久以前的事了。晚上11的时候我一个人坐在宿舍在书桌前,关了空调,开着风扇,一边等头发干,一边在看Power系列的书。通常在那个时候我都不会看技术类的书,因为非常有可能越看越精神,然后我就睡不着了。绝大多数情况下,在那个场合,我会看小说,但不知道为什么,前天晚上我选择了拿下一本已经被我放在书架上冷落好久的Power纸质书。那本书里面主要是说Excel里面的Power Query和Power Pivot。一本书要讲好这两个强大的东西,尤其是Power Query,显然不可能讲得那么透彻,但实际上我只是想看PP。办公室我正在看的那本叫《DAX权威指南》,那本书跟我放在宿舍里那本薄薄的2合1来说高端太多了,但是权威指南准确来说是一本翻译的书,我觉得原书的作者以及翻译的人都很用心,所以看上去并没有感觉太别扭,但因为里面所引用的事例全部都是英文的。示例里面用的是英文,但实际上翻译的时候有些地方用英文,有些地方用中文,虽然都很简单,翻来覆去都那几个单词,但是你还是得有一些反应时间,但是宿舍的那本书,完全是中国人写的,里面以一问一答的方式开展教学。一方面我觉得这挺弱智的,另一方面我觉得因为他们的软件以及他们的示例都是基于中文,这样的话我就可以快速阅读很多东西,因为这不是一本翻译的书,所以在某些表述上我会觉得比较正常。如果某一天我也要去教学,我也会用一些比较通俗的话来解释那些比较深奥的东西,但我又明白那些看上去很深奥的东西,实际上是术语,所以正规翻译得那样,但有些时候只要把问题讲清楚,让不懂的人搞懂就可以了。机器有机器的语言,但要把某些东西教会别人,还是得说人话。最高境界当然是用通俗的语言把机器的思路讲清楚讲明白,但显然这不是一件容易的事。

还有一件很尴尬的事,就是《DAX权威指南》非常牛逼,书本配套了大量素材,但问题是学习的时候我应该用什么软件呢?我应该怎么使用那些素材呢?如果是Excel教程,他们会告诉你这本书是基于什么版本的Excel,然后你找那个版本就好了,但是这个东西你可以在Excel的PP里运行,当然了,只有某些版本的Excel才自带这个东西,有些即便自带了,却有一些模棱两可的感觉,好像部分翻译了,但是又翻译得不太到位。在我印象之中,家庭学生版的Office2016有PQ,但是界面有些是中文,有些是英文,后来不知道从什么渠道我才知道理论上Office2016的家庭学生版是没有power系列的。后来当我用上了Office365就再也没有遇到过中英文对半这个情况,而且好像相对而言PQ的启动速度会更快。

Power系列的工具原生在Power BI里出现,但是除了Power BI,其实Excel里某些东西也都能用,我用的是Microsoft365,但PQ很正常,但PP会出现卡顿,当你要调试某个东西的时候,总感觉那不是一个靠谱的窗口。当高手们要在Excel里面使用PP,估计都会装个DAX studio。studio装上后写代码爽快多了,但问题测试度量值要看报表效果,根本没办法在studio里做,所以还是得把studio的代码贴到Excel里。这样显然就很不科学。PQ里有高级编辑器,你在里面敲代码就行了,既然PP也需要这种东西,为啥我就不能在某个地方敲代码呢?如果它内置了一片可以用来敲代码的编辑器的话,我也就不需要跳到studio里实现了。《DAX权威指南》可能是基于Power BI的,但实际上没有明确指定学习这套东西你得用某个软件。光看不练会让人很迷茫,感觉自己看懂了,但实际上用的时候一团糟。

一旦上瘾了,我就完全停不下来了。办公室看,宿舍看,家里也看,幸好从前买的书够多,可以到处放一本。

2021-04
13

新悟汇总

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

前段时间我看了几页POWER BI的教程,然后我就重新开始了之前我没有完成的事。因为我知道我肯定是要把那个东西搞定。虽然POWER BI的教程只看了几页,我已经对数据的理解有了一个确切的答案。如果可以的话,如果分析软件足够强大的话,又或者说个人电脑足够厉害,我们完全可以利用最基础的原始数据进行各种蹂躏,这样的话,颗粒度是最小的,也能够组合出最多的信息。但很多时候因为最原始的东西信息量实在太大了,有可能电脑吃不消。也有可能是别人问起来的时候还得各种加工处理,比较麻烦,所以就有了汇总数据这种东西。在汇总数据上面做汇总数据,的确能得到某些东西,但这样的话,显然就限制了想象力。因为一开始某些数据已经被汇总起来了,于是里面的某些细节再也不可能被打散。这样做不得不牺牲一些东西。可能那些东西暂时来说没什么必要,但说不准什么时候就会用到。所以可以的话,我还是比较喜欢对最初级的东西进行处理,而不是在汇总的基础上做汇总。在汇总的基础上做汇总,最终只能得出某些目标结果而不能天马行空,我觉得这样挺无聊的,但很多时候大家为了纯粹完成任务,不得不这么干。我觉得如果非得这么干的话,不如写个VBA脚本,全套自动运行没有烦恼。毕竟如果真这么干的话,做的纯粹是条件反射,循规蹈矩得出那些东西我觉得基本上不怎么需要动脑子。脑子应该用在制定程序上面而不是一次又一次重复某些步骤。在重复步骤这个能力上,人类远远比不上机器。我仅仅看了几页的POWER BI教程,已经给我明确了过去我一直都隐约觉得,但是却一直都没有总结出来的东西。现在我证实了我的直觉是正确的。

POWER BI之所以是POWER BI,因为它们可以处理Excel不能处理的东西,百万级的东西可以轻松搞定。从前那些不得不分几个Excel才能得出来的结果只要从那里导入,根本没有底线这个说法。我还记得新冠疫情某段时间英国说他们的统计数据出现的问题,有些数据被漏报了,原因是信息量超过了Excel最大的行数。这也实在太扯淡了吧!他们怎么会不用数据库呢?数据库的底线好像我还没听说过。如果Excel有底线的话,完全可以把数据分在几个Excel文件里,然后通过POWER BI把数据联合起来。所以他们给出那种完全不能让人接受的答案的时候,我在那里呵呵。那种数据级别居然还在用Excel,而没有没有专业的数据库去处理,这实在太让人震惊了,是因为他们只习惯于用Excel吗?大概是因为改数据的时候比较方便吧。毕竟进入数据库进入服务器的东西是会留痕的,但Excel可以随心所欲颠倒黑白,想怎么写就怎么写。

我不知道现在的世界到底有多么的水深火热,反正今年的股市就一直都很不咋地,我的基金被套住了,一开始只套一点,现在越套越多了,于是我也懒得去看到底是怎样。与其把人生耗费在钱生钱上面,不如干一些实实在在的东西。

2020-10
13

Excel的高端玩法

By xrspook @ 8:43:14 归类于: 烂日记

数据本身没有问题,如果我们不能让它们确立某种关系,只是因为我们对那个东西还不够了解而已。在Excel里做一件事,你可以通过很多方法,比如说函数,比如说VBA,比如说SQL查询,又或者Power Query或Power Pivot。当然,我这里所说的,主要是针对查询,或者说数据清洗类的东西。如果纯粹是针对单元格的格式化,函数以及Power BI系列以及SQL是没办法做到的。

同样一个数据,用不同的方法都可以得出目标答案,但是哪个会更简便快捷一些呢?函数我觉得挺被动的,尤其是在处理大量数据的时候,效率非常低。因为在处理一些复杂东西的时候通常要用到数组函数,即便不需要用到数据函数本身,其实也在运用着数组函数的变体。而且函数这种东西受Excel本身版本的限制,越是低版本的Excel越是没办法轻而易举地实现某些逼格的功能。于是就出现了你不得不为了某个功能升级Excel,又或者因为你的伙伴升级了Excel,用了一些高端的函数,但是你却看不到,工作就没办法继续下去了。SQL和VBA是两个大杀器,很早以前Excel就已经支持。与其说他们是Office软件的一部分,不如说这两个东西更接近于编程语言。我对Excel里面的SQL不是十分熟悉,因为至今为止,虽然已经折腾了不少网站,但是我从未试过操作数据库。SQL在Excel可以用,但我觉得可能在Access里SQL会用得更顺手一些。比如说如果改变数据源,比如移动文件之后,SQL需要重新连接。若没有VBA的帮助,这是无解的。我不喜欢用SQL的其中一个原因是它会在硬盘的某个位置生成某个数据库。

VBA这个东西强大到任何你想到想不到的东西都可以控制,无论是数据本身还是说单元格的格式,一律通杀,它甚至可以让Excel自杀,又或者让你的系统自杀。VBA用得好不好直接决定了某个脚本的运行效率。是对初级用户来说,VBA的学习成本实在是高,除非你从来不打算要建立自己的规则而纯粹只是用别人的东西。

至于Power BI系列的Power Query和Power Pivot现在我仍然处在甚至还不能说入门的阶段,我只是稍微了解了一点这两个东西。在数据清洗和建立关系的时候,它们实在太强大了。但是要使用这两个东西,Excel的版本就必须有要求。所以这也导致了不少免费用户直接绕过这两个强大的东西。我也不知道为什么自己在使用Excel高级函数几乎还没入门的情况下,我就去折腾M语言。我觉得那个东西一定程度上颠覆了我对数据的理解。Power Query对数据的处理方式就像通过各种蹂躏就能得出你想要的东西,其间你没有修改原数据,所以实际上在写M语言的时候就像是手工编写一个宏,而那个宏要比一般的VBA简洁很多。之所以简洁,一定程度是因为那是在高级套用的前提下。Power Query里玩的数据转换实际上是在折叠、删除以及扩充,一定程度上就像是在用类似于递归或者迭代的方式。

别人把时间耗在应付考试上,我把时间耗在折腾自己上。

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