Excel之PowerQuery 先语法后原理
网友提问:



回答网友问题:
语文:先会写部分文字,再谈写作文。所以小学一年级没有作文课,只有看图说话。
数学:先认识0~9这十个数字,才能进行加减法。
英语:先认识26个字母,再说学单词。
M和DAX两种语言,必先要先懂语法,再谈原理。
有些人学DAX时就是混学,还说什么语法原理不分家,用的时候不分家,学的时候就是先语法后原理。否则学不会是小事,魔怔了。。。张口就是内层、外层、隐形、显形、循环依赖、数据沿袭,让他解释一下,他说不清楚,我用生活中的案例解释清楚了,他又说凡是一句话说不清楚的就是自己还没弄明白。
您现在的疑问是原理,而我在这节课一开始讲的语法您没有认真听。
让我们回到故事开始的地方,2020年9月2日..........
各位观众朋友,您现在看到的是 List.Accumulate 语法部分

语法:要知道这里的x代表什么,y代表什么,当然可以不用x和y,你写成孙悟空、猪八戒也可以。如下图所示


名称完全是自己定义的,所以读什么不重要,我一直把Nikon读成耐克:)
当我们知道了语法,以x和y为例,x是哪个参数,y是哪个参数,接下来进入原理
= List.Accumulate({1,2,3},0,(x,y)=>x+y)
已知:第1参数是个列表,y代表第一参数中的每个值,第1参数中的每个值依次传递给y
x初始值是0
解:
第一次:x=0 , y =1 , x+y = 0+1 = 1 , 结果1赋值给x
第二次:x=1, y=2 , x+y=1+2=3 , 结果3赋值给x
第三次:x =3, y=3 , x+y = 6 结束了,答案是6

如果有人觉得上面说的是废话,那之后的理解就难喽。。。
如果你认为上面说的有用,那下面自己就理解了。

再说网友的问题:
= List.Accumulate(源[销售],{},(x,y)=>x&{List.Sum({List.Last(x),y})})
源[销售] 就是一张表中的某个列,本身就是一个列表,如果你对公式运算规则不理解时,建议简便数据,比如我可以写成
= List.Accumulate({1,2,3},{},(x,y)=>x&{List.Sum({List.Last(x),y})})
意思没变吧?再谈规则
已知:x初始值是一个空列表{}
y是列表{1,2,3}中的每一个值。(注意,是列表中的每一个值,在这里是数字1、2、3)
List.Last函数是列表中最后一个值。(不是最大值,是最后一个元素)
List.Sum函数是对列表求和
解:
第一次:{ } & {List.Sum({List.Last({}),1})} = {} & {List.Sum({null,1})} ={}&{1}={1}
结果{1}赋值给x
空列表中最后一个元素还是空(null),null与1组成的列表求和结果就是1
& 两边的数据类型要求是一样的
第二次:{1} & {List.Sum({List.Last({1}),2})}= {1} & {List.Sum({1,2})} = {1} & {3} = {1,3}
结果{1,3}赋值给x
第三次:{1,3} & {List.Sum({List.Last({1,3}),3})}={1,3} & {List.Sum({3,3})} = {1,3} & {6} = {1,3,6} 完成了 这个列表就是最后的结果


PowerQuery合集:https://www.bilibili.com/video/BV1oa4y1j75e

