如果你經(jīng)常使用Excel中分類匯總,那么你一定要學(xué)習(xí)一下PQ中分組依據(jù)(Table.Group),他可以說(shuō)是對(duì)分類匯總進(jìn)行了系統(tǒng)全面的增強(qiáng)和升級(jí) 直接上來(lái)就講PQ中的Table.Group估計(jì)很多人都要懵,所以我們先來(lái)通過(guò)大家熟悉的功能引入! 引子 | Excel基礎(chǔ)功能-分類匯總 這樣的數(shù)據(jù),我們先按照銷售員做一個(gè)匯總,并且可以看到明細(xì),這個(gè)時(shí)候,我們就可以使用分類匯總 動(dòng)畫操作演示: 1、對(duì)分組的銷售員排序 2、點(diǎn)擊【數(shù)據(jù)】-【分類匯總】 本質(zhì)是分組+聚合!但是PQ中的分組功能,做了增強(qiáng)了,是那種真正的增強(qiáng)了很多! 類似的功能,我們看看PQ如何處理-分組依據(jù)(Table.Group) 關(guān)于如何把數(shù)據(jù)加入到PQ編輯器等基礎(chǔ)問(wèn)題,這里就不再啰嗦,因?yàn)榍懊嬉呀?jīng)寫過(guò)基礎(chǔ)專題,推薦0基礎(chǔ)閱讀一下,構(gòu)建基本的知識(shí)框架 ▍PQ 第一期 | Power Query是什么?怎么學(xué)? ▍PQ 第二期 | 懂Excel為什么還是學(xué)不好PQ? ▍PQ 第三期 | M函數(shù)基礎(chǔ)及上下文詳解 下面,我們直接來(lái)看功能演示及講解! PQ中的分組依據(jù)功能,使用界面操作,也是分兩步 ①:分組 - 根據(jù)那(幾)個(gè)列把內(nèi)容分成幾組 ②:聚合 - 對(duì)每一組中指定的列進(jìn)行聚合操作(如求和、平均等) PQ中不僅僅可以進(jìn)行類似分類匯總的常規(guī)數(shù)組聚合操作,可以還是可以對(duì)一些文本進(jìn)行聚合處理,比如文本使用指定分隔符連接到一起等! 下面是我們通過(guò)界面操作,自動(dòng)生成的M函數(shù)公式,有點(diǎn)像錄制宏!
入門 | Table.Group函數(shù)基礎(chǔ)語(yǔ)法 通過(guò)上面的引子,我們大概了解了Table.Group,下圖就是Table.Group函數(shù)的基礎(chǔ)語(yǔ)法拆解,說(shuō)明都通過(guò)注釋的方式在圖中說(shuō)明,先有一個(gè)大概的了解,我們?cè)倏磧蓚€(gè)案例鞏固 第一參數(shù)比較好理解,就是一個(gè)加載到PQ中的表,部分同學(xué)不太理解第二、三參數(shù) 下面通過(guò)一個(gè)案例說(shuō)明一下,第二、三參數(shù) ▎案例:理解第二、三參數(shù) ▼ 格式化一下代碼,加上注釋 對(duì)照著我們的手工操作,大家對(duì)Table.Group前三個(gè)參數(shù)應(yīng)該有了進(jìn)一步的認(rèn)識(shí)、一般我們熟悉后,可以自己來(lái)書寫,每個(gè)分組的第三參數(shù)是指定類型,也可以不寫。 基礎(chǔ) | 文本聚合問(wèn)題 上面我們說(shuō)到PQ中分組可以對(duì)文本進(jìn)行聚合,大大增強(qiáng)了分組匯總功能,不過(guò)我們看到默認(rèn)的操作界面是沒(méi)有關(guān)于文本的處理的,需要我們自己來(lái)寫! ▼ 文本聚合 新手階段,我們可以使用分組依據(jù)功能+修改來(lái)處理,等大家熟悉了之后就可以直接手工來(lái)寫M函數(shù),跟VBA學(xué)習(xí)中的從錄制宏,修改宏,到手寫VBA差不多! 我們把之前界面操作生成的一些List.Sum求和等按照自己的需求修改為文本拼接函數(shù)Text.Combine即可輕松按地區(qū)把姓名按照指定分隔符聚合到一列!當(dāng)然我們單獨(dú)的演示聚合 = Table.Group(源, {"地區(qū)"}, {{"銷售員", each Text.Combine([銷售員],"/")}}) 我們對(duì)姓名去重-List.Distinct,實(shí)際可以去重合并 ▼ 去重+合并 以上幾個(gè)案例,想必大家對(duì)Table.Group已經(jīng)有了一些基礎(chǔ)的認(rèn)知,完成一些常規(guī)的分組聚合應(yīng)該完全OK了。鋪墊了那么多,下面才是我們今天的硬核知識(shí) - 局部分組問(wèn)題! 我們都是對(duì)指定列的內(nèi)容全部相同的分到一組,這其中知識(shí)把分類匯總的過(guò)程在內(nèi)部完成了,但是有的需求,不做排序,我們只需要判斷連續(xù)的內(nèi)容。 這里就要說(shuō)到Table.Group的第四和第五參數(shù)! 進(jìn)階 | Table.Group 局部分組-第三參數(shù) 為了大家更好的理解局部分組,我們先來(lái)看一個(gè)簡(jiǎn)單的案例 第三參數(shù),決定了,我們是全局還是局部分組 第三參數(shù):1或者不寫,默認(rèn)全局分組,所謂全局,就是掃描這個(gè)字段,把相同的全部分到一組,這個(gè)你直接案例分類匯總理解即可 第三參數(shù):0,局部分組,局部相對(duì)全局,從上往下相同的分到一組,遇到不同的就停止,分為下一組 比如上面,我們看到李四有兩組 811.4正好是最后三個(gè)數(shù)的合計(jì) 關(guān)于局部分組的規(guī)則,其實(shí)我們還可以自己來(lái)定義,這也是第五參數(shù)的作用,自由度越大,相對(duì)也就越難,這個(gè)道理大家應(yīng)該能明白! 高階 | Table.Group 局部分組-自定義規(guī)則 默認(rèn)情況,局部分組就是從上往下,遇到不同,上面的內(nèi)容就分為一組,這里的判斷邏輯有兩個(gè),一個(gè)是基準(zhǔn)點(diǎn)(x),一個(gè)是下一個(gè)不同(y) 具體運(yùn)行規(guī)則,我們還是來(lái)看案例 案例:整理小組成員 這里我們的分組依據(jù)就是是否內(nèi)容包含組,如果是我們就分成一組 = Table.Group( 源,"內(nèi)容",{"組員",each _}, 0, (x,y)=>Byte.From(Text.EndsWith(y,"組"))) 核心內(nèi)容就是 (x,y)=>Byte.From(Text.EndsWith(y,"組")),下面我們來(lái)拆解一下運(yùn)行邏輯 初始x就是首個(gè)內(nèi)容,下面的每一個(gè)都是y,然后我們直接自己寫的邏輯判斷,是否已組結(jié)尾 判斷的結(jié)果無(wú)法是True或者False,當(dāng)是True的時(shí)候停止,True上面的內(nèi)容分組一組,True的位置變成新的x,x下面的內(nèi)容是新一次的y |
|
來(lái)自: Excel辦公實(shí)戰(zhàn) > 《待分類》