Power Query分組功能也太強大了吧~!

2021-02-13 Excel星球

HI,大家好,我是星光。

分組聚合是數據處理與分析過程中最常用的技能之一,大家對此也並不陌生,比如將"成績"按"班級"分組求平均,將"工資"按"部門"0分組匯總等等。

正因為這傢伙太常用,因此各類軟體或語言大都提供了專門且高效的功能或語句,比如咱們所熟悉的Excel的分類匯總和數據透視表……

Power Query也不例外,而且相比於透視表,它在很多方面更加獨特且強大,可以對聚合欄位進行複雜的計算,在分組結果中篩選目標值、刪除特定值、去除重複值、合併同類項等。

今天就來給大家詳細介紹一下它。

一個例子

舉個例子還是。

有一份成績表,如下圖所示,包含了班級、小組、姓名、科目和成績等欄位。現在需要使用PowerQuery統計每個班級的綜合平均分。

首先將數據加載到Power Query編輯器。

在PQ編輯器的[主頁]選項卡下,單擊[分組依據]命令,打開對話框。

分組欄位選擇'班級',新列名輸入為'平均分',操作類型選擇'平均值',柱(也就是聚合運算的欄位)選擇'成績'。

確定後返回結果如下▼

如果我們需要查詢不同班級不同小組的總分以及平均分,只需要添加相關分組和聚合欄位即可。

在分組對話框內,選中[高級]單選按鈕。單擊[添加分組]命令,將分組欄位設置為'班級'和'小組'。單擊'添加聚合'命令,分別設置新列名、聚合方式以及聚合欄位。

確定後返回結果如下:

看到這兒,有些朋友可能會困惑,同樣的功能使用Excel透視表就可以輕鬆解決了,為什麼還要學習PQ的分組功能呢?

……

你最帥,但你這想法不大對。

這事主要有兩個原因。一個是PQ分組後的結果表可以嵌套在其它步驟表中繼續使用;另外一個是PQ的聚合方式支持函數運算,可以解決很多不單純的問題,比如在分組結果中刪除特定值、去除重複值、合併同類項等。此外,值得一提的是,它還有一個獨特的分組方式,按連續值分組。

我舉幾個小例子。

第1個例子

分組再查詢

依然以上圖所示的成績表為例,現在我們需要查詢個別班級和小組的總分及平均分數據,查詢名單如下▼

這查詢名單隨時可能發生變動,也就是說班級和小組可能增、改、刪……因此查詢結果必須是動態的。

操作步驟如下▼

首先將A:B列的數據以[自表格/區域]的方式加載到PQ編輯器。

然後將成績表的數據按之前咱們所分享的方式分組聚合,得出結果如下:


最後切換到查詢表,在[主頁]選項卡下單擊[合併查詢]。在打開的對話框中,主表設置為'查詢表',匹配表設置為'成績表',匹配欄位分別設置為'班級'和'小組',聯結種類為:左外部第1個中的所有行第2個中的匹配行,也就是返回第1張表的所有記錄以及第2張表與之相匹配的數據。

確定後返回結果如下▼

單擊[成績表]欄位右側的擴展按鈕,在彈出的菜單中去掉和主表欄位重複的'班級'和'小組',同時取消勾選【使用原始列名作為前綴】並確定,即可獲取查詢結果。

將查詢結果上載到Excel工作表,如果查詢名單發生了變更,只需要刷新即可。

第2個例子

聚合去重文本值

依然以上文的成績表為例,現在需要查詢各個班級不重複的人員名單並聚合展示,模擬結果如下圖所示。

將成績表數據加載到PQ編輯器,添加新步驟後,在編輯欄輸入以下函數即可。

= Table.Group(源,          {"班級"},         {"人名", each Text.Combine(List.Distinct(_[姓名]),",")}  )

這是一個標準的Table.Group函數,它的基本語法如下▼

=Table.Group(表,分組欄位,{新列名,聚合方式})

以上述公式為例,來源表名為源,分組欄位是'班級',新列名為'人名'……

重點是聚合部分。_[姓名]返回源表分組後的姓名列,是一個列表結構。List.Distinct對它去重複,Text.Combine函數再對去重複後的結果以逗號為分隔符合併為一個字符串。

這裡涉及到M函數的容器結構、函數式參數、上下文運算等概念,如果沒有M函數基礎,一時看不懂,攤手,那就不懂,了解一下,混個面熟也是好的。

第3個例子

按連續值分組

通常意義上的分組,是對整表相同類型的數據進行歸納,比如把整張表同為2班的數據分為一組等。PQ除了支持這樣的全局分組模式外,也支持局部分組,或者說連續值分組。

什麼意思呢?

我舉個例子。

如下圖所示,A列是中英文混雜的數據,需要將其轉換為右圖所示的結構,即中文在A列,英文合併在B列。

將A列數據加載到PQ編輯器,新增步驟後在編輯欄輸入以下函數即可。

= Table.Group(源,              "數據",               {"英文",each Text.Combine(List.Skip(_[數據]),",")},              0,              (x,y)=>Number.From(y>"z") )

和上一個例子相比,Table.Group函數新增了兩個可選的參數。

=Table.Group(表,分組欄位,{新列名,聚合方式},分組模式,分組依據)

第4參數分組模式是可選的。如果為1,或省略,則為全局分組;如果為0,則為局部連續值分組。本例為0。

第5參數是一個函數參數。其中x代表真元素,y代表真元素以下的其它元素。以本例而言,代碼開始運行時,默認第1個元素為真元素,即x為'星光',y代表'星光'以下的其它元素。

Number.From(y>"z"),判斷元素是否為中文,如果是,則返回1,否則返回0。


如果該值為0,則元素為假元素,將其劃分為真元素的組中,比如starshine和starlight屬於'看見星光';如果該值為1,則元素為真元素,比如'英語',則新開一組,x為真元素'英語',y為真元素'英語'以下的其它元素……以此類推,直至數據盡頭。

獲取分組結果後,用List.Skip函數刪除分組列表首個元素,再用Text.Combine將分組列表元素以逗號為分隔符合併為一個字符串。

……

沒了,打完收工,左上角點關注,咱們下期再見。

文件下載百度網盤..▼
https://pan.baidu.com/s/19BLVZx6ANy05_Zu_eTgKTQ 

提取碼: u7r4

♥♥溫馨小提示▼

公眾號每天會發布1篇函數教程+1篇編程教程+1個技巧小視頻,如果你沒有收到我的更新,是由於微信按算法顯示公眾號而不是實際更新時間——這時就需要如下圖所示星標我一下啦,撒花✿

相關焦點

  • Power Query 閃開,最牛的Excel合併公式來了
    蘭色分享兩種高能方法,一種是power Query轉換,第二種是用函數公式。一、使用Power Query 1、效果演示在power Query編輯器中,複製日期列,並分別轉換成月和天分組依據 - 選取高級 - 添加和設置月份和日期 為分組項,然後對員工進行求和。
  • Excel實戰:power query整理表格的神器
    其實有一個功能可以輕鬆搞定,它就是power query設置步驟:1、啟用power query選取表格區域,數據 - 自表格/區域 - 創建表2、透視列在power query編輯器中,選中部門列 - 轉換 - 透視列 - 值列選中「值班人員」;高級選項選取「不要聚合」點確定按鈕後轉換完成:
  • Python數據核對系列之2—power query VS pandas
    power query加載csv錯行?在query函數列表裡有下面這幾個JoinKind.RightOuter :右外連接在上面的案例中,我們選擇的是RightOuter。以後我們仔細介紹query的M函數,之前的多篇文章我們也有所涉及。在數據量相對不大的時候(大概300萬內吧看電腦性能),M函數真的很好用。比如上的Table函數,還有List函數、Text函數等,數據清洗利器!
  • Power Query速成班招生開始了
    很多同學想學power query,它來了。
  • Excel Power Query中的分組函數Table.Group用法,這回整理全了.
    分組聚合(求和、平均值、最大值、最小值、計數等)是Excel中最常見的操作。在工作表中這些功能只是一些最常見的功能。在Excel Power Query中的【分組依據】功能同樣是十分地很強大。但是眾所周知,要實現高級功能往往離不開函數。那麼今天的主角就是——Table.Group函數。
  • querySelector-強大的原生DOM選擇器
    下面要說的是querySelector和querySelectorAll。這是操作DOM的新方式,目前所有的瀏覽器廠商均已經支持。就連IE都在IE8上面做出了支持。下面一起來看一下如何使用吧!注意:querySelector() 方法僅僅返回匹配指定選擇器的第一個元素。如果你需要返回所有的元素,請使用 querySelectorAll() 方法替代。
  • 如何用 Excel Power Query 設置分組序號?分組內遞增,換組從頭計數
    今天再給大家分享一個案例,如何在 Power Query 中添加分組索引?這個需求我曾經交過大家在 Excel 中如何實現,詳情請參閱 Excel 循環序號、按規定次數重複每個序號,這些你都會嗎?如果大家了解了一些基礎的 M 語言,在 Power Query 中實現也非常簡單。
  • EXCEL中的POWER QUERY功能簡介
    因為它將極大的優化你的工作:解決一些EXCEL公式性能很差的情況解決一些EXCEL公式無法實現的功能.接下來就跟著本文的示例,看看怎麼使用EXCEL中的這個工具吧.一個常見的需求.可以完成大部分SQL編輯器的常用功能.比如表關聯(JOIN), 表連接(UNION) 等. 更多功能等待你的親自嘗試哦.比起VLOOKUP . 上述操作步驟顯得比較複雜. 數據量不大的情況,還是建議大家使用VLOOKUP.因為操作簡單.如果數據量較大,或者想使用更複雜的操作時,POWER QUERY的優勢就顯示出來了,極大的提升了性能.
  • Power Query從網絡抓取數據
    要從網頁獲取更新, 只需轉到功能區的 "外部數據" 選項卡, 然後單擊"全部刷新":如果您找到HTML表標記, 則確認power Query 可以從該頁面獲取一個表, 但是不能保證它是你實際需要的表, 因為頁面上可能還有其他表,所以你可以在之前我講過的
  • Power Query技巧之合併字符串
    解決方案:利用【刪除重複項】和M函數等功能實現。第 1 步 選取數據源表中數據區域的任意一個單元格,以【自表格/區域】的方式進入「異空間」。第 2 步 選取「省級」列,單擊【主頁】選項卡下的【刪除行】下拉按鈕,在下拉選項中選擇【刪除重複項】,如圖 8-20 所示。
  • 高性能Pandas​:eval() 與 query() 上篇
    正如我們在前面的文章中已經介紹過的,Python 數據科學生態環境的強大力量是建立在 NumPy 和 Pandas 的基礎之上,並通過直觀的語法將基本操作轉換成
  • Excel新增的「翻譯」功能也太強大了吧!
    Excel早期版本中已有翻譯功能,但讓蘭色驚奇的,在最新版本右鍵菜單中已偷偷增加了【翻譯】命令。
  • Power Query—Excel的另一個江湖
    而在Excel2016版的Excel中,微軟直接把Power Query的功能嵌入進來,放在數據選項卡下:PowerQuery是在Excel平臺控制及轉換數據的最佳工具(沒有之一)。他可以實現:數據獲取從不同來源,不同結構,不同形式獲取數據並按統一格式進行橫向合併,縱向(追加)合併,條件合併等。
  • excel中數據透視表的應用——如何利用分組功能進行數據統計?
    在excel中,數據透視表是一個比較簡單而又十分強大的功能,分組算是數據透視表中經典應用了,下面就給大家介紹一下分組功能在數據透視表中的作用吧。一、建立數據透視表。建立數據透視表大部分朋友習慣從插入選項卡中創建,或者一次按alt、D、P鍵利用數據透視表嚮導創建,其實還有一種比較簡單的方法,就是利用ctrl+Q中的表格功能建立數據透視表。這種方法除了創建空白數據透視表,還推薦了幾個數據透視表樣式。
  • 博主推薦的敬邦嬰兒車,功能也太強大了吧
    敬邦手推車第一次給寶寶買東西可一點兒也不能馬虎,某東、某貓都被我逛遍了,問了身邊好多朋友,發現她們雖然以為人母,但是對嬰兒車並沒有完全了解,後來一個朋友建議我去找一些測評的博主,能夠最大程度的了解到嬰兒車的質量、功能
  • 用Power BI構建M代碼(Power Query)中文庫參考大全
    Power BI 獲取數據在Power BI或Excel 2016中新增的獨特功能【獲取數據】可以幫助我們快速地從多種數據源獲取並整理數據,這在之前稱為「Power Query」組件。關於Power Query組件的能力請參考: