Power Query中如何把多列數(shù)據(jù)合并置逻?升級篇

之前我們了解到了如何把2列數(shù)據(jù)進行合并的基本操作,Power Query中如何把多列數(shù)據(jù)合并备绽?也就是把多個字段進行組合并轉(zhuǎn)成表券坞。那如果這類的數(shù)據(jù)很多,如何批量轉(zhuǎn)換呢肺素?我們需要把轉(zhuǎn)換的這一部分做成循環(huán)的函數(shù)即可恨锚。

多列組合=(x)=>

Table.Combine(List.Transform({1..x},

? ? ? ? ? ? each Table.FromColumns(

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?List.Range(字段數(shù)據(jù)列表,0,1)&

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?List.Range(字段數(shù)據(jù)列表,(_*3-3)+1,3)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )

? ? ? ? ? ? ? ? ? ? ? ? ? ? ) ? ? ? ? ?

? ? ? ? ? ? )

這個函數(shù)是在當前查詢功能中進行的書寫,但是實際我們在平時想要調(diào)用的時候压怠,還有很多需要進一步的進行修改及優(yōu)化眠冈。

1.?????生成一個表格參數(shù)變量

生成這個參數(shù)變量是為了我們之后可以在直接調(diào)用來處理同類表格。

我們了解到在代碼中的字段數(shù)據(jù)列表實際上是個已經(jīng)經(jīng)過Table.ToColumns處理過的一個列表嵌套列表格式菌瘫。所以我們在優(yōu)化代碼的時候可以把這一步處理的過程直接作為自定義函數(shù)的部分流程蜗顽。同時我們在這個里面直接把函數(shù)的參數(shù)數(shù)量及類型給固定住。


let

多列組合=(需要操作的表 as table, x as number) as table=>

Table.Combine(List.Transform({1..x},

? ? ? ? ? ? each Table.FromColumns(

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?List.Range( Table.ToColumns(需要操作的表),0,1)&

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?List.Range( Table.ToColumns(需要操作的表),(_*3-3)+1,3)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )

? ? ? ? ? ? ? ? ? ? ? ? ? ? ) ? ? ? ? ?

? ? ? ? ? ? )

in

多列組合

2.?????生成固定列變量

添加固定列終點變量雨让,可以用于固定列的選擇雇盖。

let

多列組合=(需要操作的表 as table, x as number,optional 固定列終點 as number) as table=>

Table.Combine(List.Transform({1..x},

? ? ? ? ? ? each Table.FromColumns(

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?List.Range( Table.ToColumns(需要操作的表),0,固定列終點)&

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?List.Range( Table.ToColumns(需要操作的表),(_*3-3)+1,3)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )

? ? ? ? ? ? ? ? ? ? ? ? ? ? ) ? ? ? ? ?

? ? ? ? ? ? )

in

多列組合

解釋:這里我們把固定列從第1列開始,往后延伸栖忠,例如輸入?yún)?shù)2代表的是從第一列開始崔挖,連續(xù)2列作為固定列贸街。

3.?????確定終點的默認值

既然這個變量是作為可選變量,那我們要給予一個默認值狸相,這樣才不會讓程序出現(xiàn)錯誤薛匪。

我們設(shè)置的默認值為第一列作為固定標題。

let

多列組合=(需要操作的表 as table, x as number, optional 固定列終點 as number) as table=>

Table.Combine(List.Transform({1..x},

? ? ? ? ? ? each Table.FromColumns(

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?List.Range( Table.ToColumns(需要操作的表),0,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if 固定列終點=null then 1 else 固定列終點

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )&

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?List.Range( Table.ToColumns(需要操作的表),(_*3-3)+1,3)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )

? ? ? ? ? ? ? ? ? ? ? ? ? ? ) ? ? ? ? ?

? ? ? ? ? ? )

in

多列組合

解釋:通過if…then…else語句脓鹃,我們給固定列終點進行一個判斷逸尖,如果為空值則給與一個默認值1,也就是從0開始的1列瘸右,也就是第一列娇跟。

4.?????確定需循環(huán)的列數(shù)

還有一個需要作為變量的,也就是確定是多少列進行轉(zhuǎn)換合并太颤。我們上面的例子中是以每3列進行合并苞俘,但是我們要做為一個能靈活使用的函數(shù),更多的變量能讓我們更方便的使用龄章,適合更多的場景吃谣。

這里我們設(shè)置成為變量y。

let

多列組合=(需要操作的表 as table, x as number, y as number, optional 固定列終點 as number) as table=>

Table.Combine(List.Transform({1..x},

? ? ? ? ? ? each Table.FromColumns(

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?List.Range( Table.ToColumns(需要操作的表),0,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if 固定列終點=null then 1 else 固定列終點

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )&

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?List.Range( Table.ToColumns(需要操作的表),(_-1)*y+固定列終點),y)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )

? ? ? ? ? ? ? ? ? ? ? ? ? ? ) ? ? ? ? ?

? ? ? ? ? ? )

in

多列組合

解釋:其中需要注意的是(_-1)*y+固定列終點這個寫法做裙。這個是判斷合并數(shù)據(jù)起始位置的提取基协。_相當于x的需要處理循環(huán)的次數(shù),y相當于需要轉(zhuǎn)換的列數(shù)菇用。

提取的次數(shù)X值Y值固定列終點提取的位置

11311

22314

33317

5.?????添加函數(shù)使用備注

let

多列組合=(需要操作的表 as table, x as number, y as number, optional 固定列終點 as number) as table=>

Table.Combine(List.Transform({1..x},

? ? ? ? ? ? each Table.FromColumns(

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?List.Range( Table.ToColumns(需要操作的表),0,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if 固定列終點=null then 1 else 固定列終點 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )&

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?List.Range( Table.ToColumns(需要操作的表),((_-1)*y+固定列終點),y)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )

? ? ? ? ? ? ? ? ? ? ? ? ? ? ) ? ? ? ? ?

? ? ? ? ? ? ),

元數(shù)據(jù)=[Documentation.Name="批量多列合并",

? ? ? Documentation.Description="可以把多列相同的數(shù)據(jù)合并到一起。

第1參數(shù)是需要操作的表陷揪,第2參數(shù)x代表的是循環(huán)幾次惋鸥,第3參數(shù)代表的是多少列循環(huán),第4參數(shù)是固定標題的結(jié)束位置",

? ? ? Documentation.Examples={[Description="第1列為固定列悍缠,每3列進行合并存放卦绣,一共循環(huán)2次",

? ? ? ? ? ? ? ? ? ? ? ? ? ? Code="批量多列合并(源,2,3,1)",

? ? ? ? ? ? ? ? ? ? ? ? ? ? Result=" ?"]

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?]

in

Value.ReplaceType(多列組合,Value.Type(多列組合) meta 元數(shù)據(jù))

這樣我們就做好了一個可以適應(yīng)大部分多列數(shù)據(jù)合并的自定義函數(shù)。

我們可以再來嘗試下不同的數(shù)據(jù)表格來使用此函數(shù)的效果飞蚓。

例1:

像這種固定列有3列滤港,數(shù)據(jù)列是3列為一組,一共轉(zhuǎn)換3次(3組同類數(shù)據(jù))進行組合趴拧。結(jié)果如下圖

因為我們可以直接調(diào)用我們之前的自定義函數(shù)溅漾。

批量多列合并(源,3,3,3)

解釋:批量多列合并,這個是自定義查詢的函數(shù)名稱著榴,源代表的是需處理的數(shù)據(jù)表添履,第2參數(shù)的3代表需要循環(huán)處理的次數(shù),第3參數(shù)的3代表需要合并數(shù)據(jù)的列數(shù)脑又,第4參數(shù)的3代表保留前3列作為固定列暮胧。

例2:

固定列是2列锐借,循環(huán)5次,數(shù)據(jù)列也是2列往衷。使用函數(shù)后獲得的效果钞翔。

批量多列合并(源,5,2,2)

請多多轉(zhuǎn)發(fā)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末席舍,一起剝皮案震驚了整個濱河市布轿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌俺亮,老刑警劉巖驮捍,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異脚曾,居然都是意外死亡东且,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門本讥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來珊泳,“玉大人,你說我怎么就攤上這事拷沸∩椋” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵撞芍,是天一觀的道長秧了。 經(jīng)常有香客問我,道長序无,這世上最難降的妖魔是什么验毡? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮帝嗡,結(jié)果婚禮上晶通,老公的妹妹穿的比我還像新娘。我一直安慰自己哟玷,他們只是感情好狮辽,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巢寡,像睡著了一般喉脖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上讼渊,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天动看,我揣著相機與錄音,去河邊找鬼爪幻。 笑死菱皆,一個胖子當著我的面吹牛须误,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仇轻,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼京痢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了篷店?” 一聲冷哼從身側(cè)響起祭椰,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疲陕,沒想到半個月后方淤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡蹄殃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年携茂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诅岩。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡讳苦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吩谦,到底是詐尸還是另有隱情鸳谜,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布式廷,位于F島的核電站咐扭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏滑废。R本人自食惡果不足惜草描,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望策严。 院中可真熱鬧,春花似錦饿敲、人聲如沸妻导。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽倔韭。三九已至,卻和暖如春瓢对,著一層夾襖步出監(jiān)牢的瞬間寿酌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工硕蛹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留醇疼,地道東北人硕并。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像秧荆,于是被迫代替她去往敵國和親倔毙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容