Excel之PowerQuery 先語法后原理
網(wǎng)友提問:



回答網(wǎng)友問題:
語文:先會寫部分文字,再談寫作文。所以小學(xué)一年級沒有作文課,只有看圖說話。
數(shù)學(xué):先認(rèn)識0~9這十個數(shù)字,才能進(jìn)行加減法。
英語:先認(rèn)識26個字母,再說學(xué)單詞。
M和DAX兩種語言,必先要先懂語法,再談原理。
有些人學(xué)DAX時就是混學(xué),還說什么語法原理不分家,用的時候不分家,學(xué)的時候就是先語法后原理。否則學(xué)不會是小事,魔怔了。。。張口就是內(nèi)層、外層、隱形、顯形、循環(huán)依賴、數(shù)據(jù)沿襲,讓他解釋一下,他說不清楚,我用生活中的案例解釋清楚了,他又說凡是一句話說不清楚的就是自己還沒弄明白。
您現(xiàn)在的疑問是原理,而我在這節(jié)課一開始講的語法您沒有認(rèn)真聽。
讓我們回到故事開始的地方,2020年9月2日..........
各位觀眾朋友,您現(xiàn)在看到的是 List.Accumulate 語法部分

語法:要知道這里的x代表什么,y代表什么,當(dāng)然可以不用x和y,你寫成孫悟空、豬八戒也可以。如下圖所示


名稱完全是自己定義的,所以讀什么不重要,我一直把Nikon讀成耐克:)
當(dāng)我們知道了語法,以x和y為例,x是哪個參數(shù),y是哪個參數(shù),接下來進(jìn)入原理
= List.Accumulate({1,2,3},0,(x,y)=>x+y)
已知:第1參數(shù)是個列表,y代表第一參數(shù)中的每個值,第1參數(shù)中的每個值依次傳遞給y
? ? ? ? ? ?x初始值是0
解:
? ? ? ? 第一次:x=0 , y =1 , x+y = 0+1 = 1 , 結(jié)果1賦值給x
? ? ? ? 第二次:x=1, y=2 ,? ?x+y=1+2=3? ,??結(jié)果3賦值給x
? ? ? ? 第三次:x =3, y=3? ?,? x+y = 6? ? ? ? 結(jié)束了,答案是6

如果有人覺得上面說的是廢話,那之后的理解就難嘍。。。
如果你認(rèn)為上面說的有用,那下面自己就理解了。

再說網(wǎng)友的問題:
= List.Accumulate(源[銷售],{},(x,y)=>x&{List.Sum({List.Last(x),y})})
源[銷售]? 就是一張表中的某個列,本身就是一個列表,如果你對公式運算規(guī)則不理解時,建議簡便數(shù)據(jù),比如我可以寫成
= List.Accumulate({1,2,3},{},(x,y)=>x&{List.Sum({List.Last(x),y})})
意思沒變吧?再談規(guī)則
已知:x初始值是一個空列表{}
? ? ? ? ? ?y是列表{1,2,3}中的每一個值。(注意,是列表中的每一個值,在這里是數(shù)字1、2、3)
? ? ? ? ? ?List.Last函數(shù)是列表中最后一個值。(不是最大值,是最后一個元素)
? ? ? ? ? ?List.Sum函數(shù)是對列表求和
解:
? ? ?第一次:{ } & {List.Sum({List.Last({}),1})} = {} & {List.Sum({null,1})}?={}&{1}={1}? ?
結(jié)果{1}賦值給x
空列表中最后一個元素還是空(null),null與1組成的列表求和結(jié)果就是1
& 兩邊的數(shù)據(jù)類型要求是一樣的
? ? 第二次:{1} &?{List.Sum({List.Last({1}),2})}= {1} & {List.Sum({1,2})} = {1} & {3} = {1,3}
結(jié)果{1,3}賦值給x
? ? 第三次:{1,3} &?{List.Sum({List.Last({1,3}),3})}={1,3} &?{List.Sum({3,3})}? = {1,3} & {6} = {1,3,6}? ? ?完成了 這個列表就是最后的結(jié)果


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