列运算_Power Query列运算的几种方法比较
有時(shí)候我們需要在報(bào)表中進(jìn)行列之間的運(yùn)算,例如下面這個(gè)例子:
在Excel中,這種計(jì)算很常見、很簡單,只需要新增一列,把相關(guān)的兩列相加,然后替換掉原來的“總客戶數(shù)”列中的數(shù)據(jù)就可以了,那么在PQ中可以怎么做呢?
方法1:Table.AddColumn
最簡單的方法是新增一列,把兩列相加,但本例要求計(jì)算結(jié)果要放在原來的位置,并保持相同的列名稱,而PQ中新增的列只能在原表的最右側(cè),這就需要調(diào)換列順序,而新增列的時(shí)候又不能和原列名稱重復(fù),這意味著新列必須新重名,比如說把它重名為“總客戶數(shù)1”,然后刪除原來的“總客戶數(shù)”列,再把“總客戶數(shù)1”重命名為“總客戶數(shù)”,方法雖然簡單,但很是繁瑣,以下是詳細(xì)步驟。
第1步:添加自定義列,把兩列數(shù)值相加,同時(shí)因?yàn)椴荒芘c原列重名,所以只好命名為“總客戶數(shù)1”;
第2步:原來的兩列計(jì)算之后已不再需要,把它們刪除;
第3步:新列順序要和原來保持一致,需要調(diào)整列順序,在列數(shù)不多的情況下還算容易,當(dāng)列數(shù)較多時(shí)這一步需要列出所有列名,很繁瑣,而且刷新的時(shí)候也容易出錯(cuò),所以需要優(yōu)化代碼,這在另一篇文章中會(huì)講到;
第4步:把“總客戶數(shù)1”改回為原來的名稱“總客戶數(shù)”,工作完成。
方法2:Table.TransformRows配合Record.TransformFields
PQ中無法把一列數(shù)據(jù)直接加到另一列上(excel中也不行,都需要另加一列進(jìn)行計(jì)算),但是通過代碼分解,分步運(yùn)算,在運(yùn)算的過程通過命名數(shù)據(jù)來達(dá)到目的,具體方法為:
第1步:用Table.TransformRows把表轉(zhuǎn)化為記錄,然后在記錄中修改字段值,來達(dá)到列間直接運(yùn)算的目的:
s1兩列相加 = Table.TransformRows(源, each let 總客戶數(shù) = [總客戶數(shù)], 新增客戶數(shù) = [新增客戶數(shù)],修改字段值 = Record.TransformFields(_, {"總客戶數(shù)", each 總客戶數(shù)+新增客戶數(shù)})in 修改字段值),得到的結(jié)果是:
第2步:然后用Table.FromRecords把Records重新轉(zhuǎn)化為表,得到如下結(jié)果:
可以看出,新增客戶數(shù)已經(jīng)被直接加到總客戶數(shù)中,不需要再新加列且重命名了。
第3步:然后只需刪除已不需要的“新增客戶數(shù)”列就可以了。
方法3:用Table.CombineColumns直接得出結(jié)果
其實(shí)在PQ中Table.CombineColumns的用途很廣,不只是合并文字列這一點(diǎn)用處,它還可以進(jìn)行列之間的各種組合運(yùn)算,比如本例中就可以利用它來進(jìn)行兩列數(shù)字的加和運(yùn)算,并且是直接相加,不用新增不必要的列,只需要寫一行簡單的代碼就可以了;
s1合并的列 = Table.CombineColumns(源,{"新增客戶數(shù)", "總客戶數(shù)"},each List.Sum(_), "總客戶數(shù)")處理結(jié)果如下:
可以看出,只需一步,只需一步,只需一步,就可得出和前面的方法1和方法2同樣的結(jié)果,新增客戶數(shù)被直接加到總客戶數(shù)上了,然后它就不再保留,直接刪掉了。
Table.CombineColumns(table as table, /* 參數(shù)1 */sourceColumns as list,/* 參數(shù)2 */ combiner as function, /* 參數(shù)3 */column as text /* 參數(shù)4 */) as table分析Table.CombineColumns函數(shù)語法,可以看出關(guān)鍵在參數(shù)3,在這個(gè)例子中,處理的對象是{451, 58}, {372, 87}, {247, 126}這三個(gè)List,對于每個(gè)List我們都要把其中的兩個(gè)數(shù)字相加,這就是each List.Sum(_)所進(jìn)行的操作,每一個(gè)List都求和,就這么簡單。
對比三種方法,可以說各有優(yōu)勢:
- 方法1最好理解,但略顯繁瑣,在剛開始玩PQ的時(shí)候可以用這種方法,但玩了一段時(shí)間之后會(huì)發(fā)現(xiàn)有時(shí)候它相當(dāng)繁瑣,效果也不高,這時(shí)候可以玩一下方法2:
- 方法2的原理就是先把表轉(zhuǎn)化為記錄,在記錄里處理好了之后再轉(zhuǎn)化為表,它可以進(jìn)行表格列之間的各種復(fù)雜運(yùn)算:
- 而方法3的效率是最高的,它一步到位,充分利用了合并列公式的功能,其實(shí)它本來的目的就是列間運(yùn)算,而不僅是合并這么簡單,但是它會(huì)把多列合并為一列,在需要保留原有各列的情況下還需要對合并之后的列進(jìn)行展開,在這種情況下可以先增加一列輔助列,復(fù)制需要保留的那一列數(shù)據(jù),然后把這加在需要合并的那一列上就行了。
好了,PQ中的列間運(yùn)算就是這樣玩的,這是我總結(jié)出來的幾種玩法,親愛的讀者朋友們學(xué)會(huì)了嗎,當(dāng)然可用的方法可能不止這三種,如果你有更聰明的玩法,一定要記得告訴我喲,寓教于樂,是最高效的學(xué)習(xí)方法,樂在其中,使我們能夠更充分地享受工作,享受生活。
實(shí)例下載:
https://pan.baidu.com/s/1DfzsiXEMzKCcN5Bh48FWxw?pan.baidu.com提取碼:rndy
總結(jié)
以上是生活随笔為你收集整理的列运算_Power Query列运算的几种方法比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python人脸识别环境搭建_怎样用3分
- 下一篇: 怎么让e-charts折线图只有6个刻度