原文標(biāo)題:《哪位 Excel 高人琢磨出的這個(gè)數(shù)據(jù)整理技巧,太有用了!》
小 E 做了一場(chǎng)「直播驚喜活動(dòng)」,結(jié)束后有許多快遞需要發(fā)。
為了節(jié)約物流成本,他信心滿滿的跟老板說:可以將相同訂單數(shù)據(jù)匯總合并后,一起發(fā)貨。
老板一聽,決定全程交由他搞。這下好了,可憐的小 E 不僅要搞數(shù)據(jù),還要打包一堆快遞,非常的頭疼。
在之前的文章,我們給大家分享了函數(shù)和方方格子插件法。

今天,小爽就來給大家介紹一下其他的方法,看看利用 PQ,我們是如何解決這個(gè)問題的。
PS:PowerQuery (簡(jiǎn)稱 PQ),是 Excel 2016 及以上版本自帶的插件,M 函數(shù)是 PQ 中的函數(shù)叫法。
由于存在同個(gè)信息有多筆訂單數(shù)據(jù)的情況,為了簡(jiǎn)化問題的難度,方便大家理解,我們先制作一個(gè)匯總輔助表。

溫馨提示:PQ 的做法,需要涉及到幾個(gè)基礎(chǔ)的 M 函數(shù),不過也不難~

分組依據(jù)
使用 PQ,自然是需要先將數(shù)據(jù)源導(dǎo)入到 PQ 編輯器里面啦!
選中輔助表的表格區(qū)域,在【數(shù)據(jù)】選項(xiàng)卡下,單擊【來自表格 / 區(qū)域】,單擊【確定】按鈕。

進(jìn)入到 PQ 編輯器后,下一步,就是要進(jìn)行分組啦。
PQ 中的分組問題,我們用到的是分組依據(jù)功能~
?? 何為分組依據(jù)?
分組依據(jù)的功能,有點(diǎn)像數(shù)據(jù)透視表,對(duì)指定字段數(shù)據(jù)進(jìn)行篩選統(tǒng)計(jì)。它可以指定多個(gè)字段作為條件,也可以同時(shí)統(tǒng)計(jì)多個(gè)結(jié)果。
分組依據(jù)可以支持的統(tǒng)計(jì)方式包括:求和,平均值、最小值,非重復(fù)行計(jì)數(shù)和所有行。
知識(shí)點(diǎn)補(bǔ)充完畢,大家跟著我來看看操作~
選中需要分組的列,也就是我們的姓名和手機(jī)列,在【轉(zhuǎn)換】選項(xiàng)卡下單擊【分組依據(jù)】。

出現(xiàn)分組依據(jù)對(duì)話框。
新列名:發(fā)貨數(shù)量
操作:所有行

這個(gè)時(shí)候,我們可以看到表格按照姓名和手機(jī)號(hào)分組后,多了一個(gè)發(fā)貨數(shù)量列。
發(fā)貨數(shù)量列中每一行的 Table 里面就包含了當(dāng)前行篩選后的表格數(shù)據(jù)。


按行合并
分組后的類型 type 后面的內(nèi)容對(duì)全局不影響,為了代碼簡(jiǎn)潔性可以刪掉。

刪掉后,公式更簡(jiǎn)潔~
=Table.Group源,
{"姓名","手機(jī)號(hào)"},
{{"發(fā)貨數(shù)量",each_}})each_中的下劃線就代表每一行中的篩選后的表的數(shù)據(jù)。

緊接著,如下圖所示,我們需要把分組后發(fā)貨數(shù)量這一列里面,篩選后的數(shù)據(jù)表中的產(chǎn)品名稱和匯總個(gè)數(shù)用星號(hào) (*) 一一進(jìn)行合并。

如下圖:
=Table.Group源,
{"姓名","手機(jī)號(hào)"},
{{"發(fā)貨數(shù)量",each
Table.ToList(_,(x)=x{2}&"*"&Text.From(x{3}))
}})
Table.ToList(_,
(x)=x{2}&"*"&Text.From(x{3}))Table.ToList 函數(shù)主要是將表中每一行的產(chǎn)品名稱和匯總個(gè)數(shù)進(jìn)行處理。
其中,
產(chǎn)品名稱在每一行索引中的第 2 個(gè);
匯總個(gè)數(shù)在每一行索引的的第 3 個(gè)。

?? Table.ToList 函數(shù)是?
Table,是表的意思,ToList,是轉(zhuǎn)換列表的意思。這個(gè)函數(shù)就是用來處理每一行數(shù)據(jù)的。
Table.ToList 有兩個(gè)參數(shù):
=Table.ToList表,(x)=x)x 代表每一行形成的列表
小 Tip:
上面我加大了一點(diǎn)點(diǎn)難度,其實(shí)我們也可以事先在輔助表中先把產(chǎn)品名稱和匯總個(gè)數(shù)進(jìn)行合并了。這樣大家應(yīng)該更容易理解。

將輔助表導(dǎo)入分組后,直接取合并的列就可以了。


列表合并
最后一步,就是將合并后的產(chǎn)品名稱和匯總個(gè)數(shù),整個(gè)列表用分隔符合并起來。

在原先的基礎(chǔ)上,需要利用 Text.Combine 函數(shù)將 list 用逗號(hào)進(jìn)行合并。
?? Text.Combine 函數(shù)是?
Text,是文本的意思,Combine,是結(jié)合的意思。這個(gè)函數(shù)就是用來文本連接的!
Text.Combie 有兩個(gè)參數(shù):
=Text,Combie文本序列分隔符
案例中,加一個(gè) Text.Combie:
=Table.Group源,{"姓名","手機(jī)號(hào)"},{{"發(fā)貨數(shù)量",
eachText.Combine(
Table.ToList(_,(x)=x{2}&"*"&Text.From(x{3})),
",")
}})
如果有做合并列的輔助表。

=Table.Group源,
{"姓名","手機(jī)號(hào)"},
{{"發(fā)貨數(shù)量",eachText.Combine([合并],",")}})
到這里就搞定啦~
如果不想要有輔助表的做法,就需要兩層分組,思路跟前面是一樣的,就是多加了個(gè) Table.Group 分組,學(xué)有余力的小伙伴可以試試。
let
源=Excel.CurrentWorkbook(){【Name="表 1"】}【Content】,
分組的行=Table.Group源,
{"姓名","手機(jī)號(hào)"},
{
{"發(fā)貨數(shù)量",each
Text.Combine(
Table.ToList(
Table.Group_,
{"產(chǎn)品名稱"},
{{"a",(x)=Text.From(List.Sum(x【商品數(shù)量】)}}
),
(y)=y{0}&"*"&y{1}),
";")}
})
in
分組的行
最后的話
本文主要講解了「如何用 PQ 解決復(fù)雜合并同類項(xiàng)」的問題,為了簡(jiǎn)化問題,文中制作了一個(gè)輔助表。
其中涉及以下知識(shí)點(diǎn):
? 分組依據(jù),能夠?qū)⒍嘧侄芜M(jìn)行匯總合并統(tǒng)計(jì),如果想要返回所有行,在操作中選所有行就可以了。
? Table.ToLIst 可以對(duì)表中每一行數(shù)據(jù)進(jìn)行進(jìn)一步操作。
? Text.Combine 主要就是通過指定分隔符合并列表。
本文來自微信公眾號(hào):秋葉 Excel (ID:excel100),作者:小爽
廣告聲明:文內(nèi)含有的對(duì)外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。