2022-10
13

纠结迷茫中

By xrspook @ 9:09:44 归类于: 烂日记

我好像知道自己在做什么,我知道我要什么结果,但是我却好像完全没有头绪我正在做些什么。这句话看上去好像很矛盾。以前,当我用Power Pivot的时候,没有这个感觉,但是当我把《DAX权威指南》越看越多以后,我的茫然感在不断增加。这其中一个很重要的原因是他们在书里主要讲原理,虽然里也有很多例子,但并不是以实例出发。在DAX里,计值上下文是很重要的东西,其中又包括了筛选上下文以及行上下文,筛选上下文对整个模型起作用,行上下文只能迭代单表。这是两句看上去很绕的话,同样让人觉得很类似,但完全不一样的还有度量值和计算列。度量值这个东西,我个人感觉挺飘渺,在没有报表的前提下,我简直不知道该如何考究那个东西,但实际上度量值这个玩意最终无非是某些聚合。以数据透视表的逻辑去考虑,只能放在数据透视表右下角的值里面,所以归根到底那就是某个计算的东西,但是它有可能是某个文字吗?这是有可能的。但到那个时候估计就是不是求和,而是一个计数了。比如说如果你返回东西是一个表,那么估计最终你就只能顶多在外面再套一个函数计算表的行数,然后把那个结果表达出来,但显然你要的不是这个表的行数,而是要这个表本身。但是话又说回来,度量值最终理论上不应该返回这种东西。

以前我觉得计算列很简单,一般的Excel里面也经常会用到,那跟用超级表没什么区别。但是当我知道得越来越多以后,我简直不知道该如何碰那个东西了。因为好像怎么整都不对劲。之所以这样,是因为如果这只是一个Excel的表的话,我知道用什么东西能实现我的功能,但是到了PP里,所有东西都乱套了。但实际上之所以发生这种事,倒不是因为PP真的有问题,相比于度量值,我在计算列上碰到的问题少很多。但我为什么要用PP呢?因为我需要得到的那些结果是单纯的表无法给我的。从一个表查询另外一个表的数据,这个我可以做到,但是通过度量值生成的那个表,再以那个表为基础查询原始表的数据再互相结合这个又该如何做到呢?以前我觉得PP可以把很多表的各种关系联系起来。这样用很方便了。相比于从前的Excel只有用SQL连接,文件换了一个电脑行不通,因为数据库本身是存在第一台电脑的某个地方。

大概这是学习必然会经历的某个境界吧。当我扛过了这个烦恼,我就能重获新生。但在此之前,我不知道我还得挣扎多长时间,还有一个就是实际上我是不是不应该从那本《DAX权威指南》开始看起呢?我应该先找一些比较低端说人话的教程,慢慢去让自己接受这个体系?

学习过好几门计算机语言,也学习过不少理工科的东西,我觉得学习DAX是我这辈子以来学得最纠结迷茫的。

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的,但实际上没有明确指定学习这套东西你得用某个软件。光看不练会让人很迷茫,感觉自己看懂了,但实际上用的时候一团糟。

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

2022-09
29

颠覆自己

By xrspook @ 8:13:54 归类于: 烂日记

人随着年龄的增长,大脑会越来越卡顿不好用,尤其是当你要学习一门新东西的时候。或许一直以来的经验会对你有所帮助,在运动层面上我感觉是有帮助的,即便你从未接触过这项运动,但是你之前做过的其它运动会在你掌握这项运动的时候让你稍微容易入门一些,但是也会存在这么一个怪圈,因为之前已经接触过其他运动,于是你就自动进入了某种套路,但是那个套路不利于你在这项运动上进步。比如大学的时候,我的选修体育大一是网球,大二是羽毛球。学网球的时候,老师一再强调手腕要固定,挥拍靠的是肩膀的力量,还有整个躯干的力量,不要试图用手腕,因为网球拍太重,而且无论是正拍还是反拍,都要学会收拍,否则的话,肘关节也很容易废掉。但是到大二学羽毛球的时候,却变成了羽毛球用的就是手腕的力量。后来我感觉到,尤其是在扣球的过程之中,手腕的力量尤其重要。所以这还真挺矛盾的,当我习惯了不用手腕之后,突然又要我开发手腕这个技能。但幸好总的来说,这种事情发生的几率并不算太高,比如跑步积累回来的经验在其它运动上基本上都用得着,比如心肺能力,也比如清楚自己的极限,以及当前所处的运动强度的感知。

跟运动比起来,要在知识上从零开始学习一门新的东西,我感觉随着年龄的增长越难越入脑了。以前很快就上手的东西,现在可能卡在那里半天不知道怎么回事。尤其是遇到一些逻辑已经跟之前不太一样的事物的时候。对我来说Power Query和Power Pivot是两个怪兽,它们很强大,但问题是它们使用的逻辑又跟一般的编程,或者跟平时使用的Excel又有很大的区别。你明明知道它们很强大,但问题是要驾驭那种强大,你就得让大脑按照它们的规则去运行。可以这么说,平时你看这个人你是从正面看,侧面看或者后面看,但它们所要求的那种逻辑是让你从头顶往下看,又或者从脚底往上看。从头顶往下看或者你还会遇到过,但是从脚底往上看这种情况,唯有叫那个人站在一个玻璃上面,然后你从玻璃底下抬头看。人还是那个人,但是改变观察的方式你会觉得自己很渺小很无助,但你必须接受这种不一般的视角。情况就好像去做CT。断层扫描之后,人被切成了一片一片的,但那些东西组合起来的确是个人。这样被切片的人跟我们平时所见到的那个人是一样的,但是你能根据某个人的某些切片而辨认出那就是某个人吗?Power系列的某些东西给我的感觉就像CT切片那么神那么玄乎,的确很伟大,但是却颠覆了我一直以来的认知。学习的时候,你当然希望自己能抛开之前的一切,但实际上这又谈何容易。尤其是当你看到这个的时候你自然条件反射的时候,过往的经验就会自动蹦出一些纠结,为什么居然是这样?

没有人强迫我必须得学习这个,必须得颠覆自己之前所熟悉的那些东西,但我觉得现在是时候直面那些之前我一直在逃避的坎了。

2021-06
3

PP大显神威

By xrspook @ 8:39:11 归类于: 烂日记

我觉得我是那种越强越强的人,所以你越是把问题抛在我面前,我越是能不知道为什么找到解决方案,这是我最大的特点,也是我最大的优点,同时也是我有别于别人的地方。有些人遇到这种东西,还没开始找对策,就会躲避,但显然我不是那种人。

要解决问题,有时候我觉得其实也是要靠一点灵感的,比如说一直以来我都想解决单位的某些结算问题,但是我却一直都找不到合适的方案,应该用什么方式去处理那些数据呢?昨天我花了半个下午的时间研究了一番Power Pivot,好像被我找到了合适的方案。当然之所以这样,是因为我需要处理的那些数据还不算非常过分。其实之前我也用Power Query处理过类似的问题,但是PP跟PQ比起来,PP显然强大非常多,结果是秒出的,根本不需要有任何的等待,PQ还得考虑各种清洗折叠,但是PP完全不需要,而且运算速度快非常多,这是让人非常震惊的。现在回想起来,之前我不就是想要这样的效果吗,但是那个时候我用了PQ,PQ里我费了九牛二虎之力才终于实现那种效果。可以肯定的是,无论是PP还是PQ,无论处理过程快还是慢,结果都是动态的。我不知道为什么入门的时候我选择的是PQ,如果我一开始选择的是PP,可能上手速度会快非常多,而且也不需要在某些问题上纠结半天。一定程度上我觉得这两个东西虽然能实现同样的效果,但是二者的思路非常不一样。如果说跟编程比较类似的话,我觉得是PQ,PP的思维有点我转不过弯来,虽然翻来翻去也是一些逻辑上的问题。

PP非常重视数据的适用范围以及上下文。如果范围搞歪了,那完全是白搭的节奏。之前我之所以一直在玩PQ而没有玩PP,是因为 PP非常依赖net framework这个框架。每次加载数据,每次刷新都要一段时间,显示的就在load那个东西。之前我玩PQ的时候,用的是win7系统,那个系统的net framework被我折腾来折腾去以后已经有点不太正常了,所以说不准PP什么时候就会死机挂掉。相对而言,PQ虽然处理时间会长一些,但起码那个东西不会因为net framework有点不正常而卡住。 PP也好,PQ也好,都是Power BI的一部分。所以其实这两个工具不是孤立的,两个东西都各有所长。数据分析的前提是数据整理也就是俗话说的数据清洗,PQ才是数据清洗的高手,但后面的分析环节折叠汇总,那就要靠PP的功力了。

话说回来,虽然我实现了某个功能,但实际上我对那段抄回来的东西还是有点不理解,为什么会那样?那是一段求历史累计数据的公式。如果只是求今年出到现在的数据,PP有一个智能的时间公式可以直接套用,非常的简便,但是如果我要求的数据有特殊的时间范围,比如说跨年,就只能自己写一个度量值去实现。日期表上的首天这个我可以理解,日期表上的末天这个我也可以理解,但之后那个过滤公式的叙述我有点搞不懂,之所以这样大概是因为我还没有清楚的了解PP是怎么运行的,PQ完全就只是一个脚本,只要读懂语法,你从第一行开始就可以一直沿着思路到最后一行,就能得出你想要的结果,但PP的数据到底是怎么开始进入然后输出的呢?有时我觉得自己懂,但有些时候我又觉得我好像不知道那在说什么。

显然,我是时候从零开始学PP了。

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