Excel 特殊分組彙總示例
在 Excel 中分析資料時,往往會用到資料透視表。透過透視表,可以對資料從不同維度、不同類別來彙總和分析。但是透視表功能很簡單,分組依據也很固化。需要將部分資料合併、分割槽間或者允許重複的特殊條件來分組彙總時便沒法實現。針對 Excel 透視表的分組難點,本文列出一些常用的分組示例,解析難點並提供 SPL 解決程式碼。SPL 是專業計算引擎 esProc 使用的語言,用於處理結構化資料的運算非常方便。
一、常規完全分組
這裡有一份 2019 年的產品銷售表,表中記錄了每個銷售對某產品的銷售明細。現在想要按銷售員工統計出每人的銷售總量,並報告出銷售量的前三名予以嘉獎。
Excel 檔案中資料如下:
期望結果:
使用 Excel 的透視表來做這種常規分析,能用但不好用。之所以說能用,是因為使用透視表畢竟還是可以將所有資料彙總出來,然後透過排序得出名次,再複製出前三名的資料得到期望結果。但這麼多的手工操作,當資料量大,或者待保留的名次比較多時,使用起來就不那麼方便。
SPL 能遵循自然思路,分步計算:
|
A | B |
1 | =clipboard().import@t() | /從剪貼簿匯入帶標題的銷售資料 |
2 | =A1.groups(Sale;sum(Amount):Total) | /根據銷售彙總,統計出每個銷售的銷售總量 Total |
3 | =A2.top(-3;Total) | /只取銷售總量前三名 |
4 | =A3.derive(#:Rank) | /增加一個排名欄位 |
5 | =clipboard(A4.export@t()) | /將彙總結果放回到剪貼簿 |
程式碼執行完成後,只需在Excel 中貼上便可得到期望結果。
本文中 SPL 示例,都透過剪貼簿跟 Excel 進行資料互動。首先從 Excel 中將要分析的資料複製到剪貼簿,然後在集算器設計器裡編輯 SPL 指令碼,最後執行程式碼,並在 Excel 中貼上計算結果。
二、併入“其它”
有時候,並不希望統計每一明細資料。而是隻關注其中一部分,其餘的全部合併。比如上例中按產品分組統計時,只關注每種水果的銷量,其他的蔬菜則全部合併統計。
期望結果:
這種依賴具體資料的合併要求,使用透視表沒法做出。只能去寫 VBA 宏,用程式針對特定資料分組,麻煩且有一定難度。
SPL 可以採用具體列舉值來進行劃分:
|
A | B |
1 | =clipboard().import@t() | /從剪貼簿匯入銷售記錄 |
2 | =A1.align@an(["Orange","Grape","Apple","Banana","Strawberry"],Product) | /根據水果列表,將銷售記錄分組,並且使用 n 選項,將其他歸為一組 |
3 | =A2.new(Product,~.sum(Amount):Total) | /計算每組總銷量,產生新的序表 |
4 | =A3(A3.len()).Product="Others" | /將最後一項的其他產品名稱改為 Others |
5 | =clipboard(A3.export@t()) | /將結果匯出後放置到剪貼簿 |
執行結束後,在Excel 中貼上,便可得到期望結果。
三、補充對齊
透視表只能根據資料做常規分組,對於空缺的資料,不會產生相應分組。比如對銷量表按日期分組時,由於部分月份沒有銷售記錄,因此使用透視表分組後得到的結果為:
其中 3 月等沒有資料的月份,也沒有相應分組,結果看起來不整齊,現在想要這樣的結果:
這種需求,透視表仍然沒法做到。寫 VBA 程式碼實現的難度跟上一節類似。
SPL 可以使用條件分組,事先預置出分組類別:
|
A | B |
1 | =clipboard().import@t() | /從剪貼簿匯入銷售記錄 |
2 | =A1.run(Date=date(Date,"yyyy/MM/dd")) | /將串型日期欄位轉換為日期型別 |
3 | =A2.align@a(12,month(Date)) | /將日期按照固定的 12 個月來分組 |
4 | =A3.new(#:Month,~.sum(Amount):Total) | /統計分組後的資料,產生新的序表 |
5 | =clipboard(A4.export@t()) | /將結果匯出後放置到剪貼簿 |
四、按區間分組
如下為學生的考試成績表,現在需要根據分數所屬區間,比如 60 分以下評為 C,90 分以下評為 B,90 以上評為 A,然後按照區間評級統計各分數段的人次。
考生的成績表:
期望結果:
按照成績劃分割槽間段來分組時,定義好值的劃分割槽間後,只需用 pseg 函式便可以將分數分好段,然後統計出各段人次即可。
SPL 程式碼如下:
|
A | B |
1 | =clipboard().import@t() | /從剪貼簿匯入分數表 |
2 | =[0,60,90] | /定義分數分段區間 |
3 | =["C","B","A"] | /定義對應區間名稱 |
4 | =A1.align@a(A2.len(),A2.pseg(Score)) | /算出成績所在段,按照段分組 |
5 | =A4.new(A3(#):Level,~.count():Count) | /統計各段人次,產生新序表 |
6 | =clipboard(A5.export@t()) | /將匯出結果放置到剪貼簿 |
五、可重疊分組
如下為 2019 年部分國家的 GDP 產值。現在想按已開發國家,發展中國家以及金磚五國分類,計算一下各類的平均 GDP。
2019 年部分國家 GDP 資料 (單位:億美元):
期望結果:
可以看到,其中的發展中國家跟金磚五國,是有重複資料的。像這種重複劃分的需求,可以使用 enum 列舉函式,透過對數值的列舉,可以很自由地定義分組條件。
SPL 程式碼:
|
A | B |
1 | =clipboard().import@t() | /從剪貼簿匯入國家 GDP 產值表 |
2 | ["America","Japan","Germany","Britain","France","Italy","Canada","Korea","Australia"].pos(?)>0 | /列舉出已開發國家 |
3 | ["China","India","Mexico","SouthAfrica"].pos(?)>0 | /列舉發展中國家 |
4 | ["Brazil","Russia","India","China","South Africa"].pos(?)>0 | /列舉金磚五國 |
5 | =[A2:A4] | /構造列舉條件序列 |
6 | =["Developed","Developing","BRICS"] | /列舉條件的對應名稱 |
7 | =A1.enum@r(A5,Country) | /使用列舉函式對國家分組,注意如果允許重複數值的分組,要帶上選項 r |
8 | =A7.new(A6(#):Countries,~.avg(GDP):Average) | /對分組後的數值計算平均 GDP,併產生新序表 |
9 | =clipboard(A8.export@t()) | /將結果匯出並放置到剪貼簿 |
《 》中還有更多敏捷計算示例。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69957599/viewspace-2735035/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Excel資料分類彙總Excel
- 分類彙總excel怎麼設定 分類彙總後如何顯示2級內容Excel
- Oracle 分組彙總統計函式的使用Oracle函式
- Excel常用快捷鍵彙總Excel
- 在Excel2013中使用分類彙總功能Excel
- linux shell特殊字元詳解彙總Linux字元
- Istio service mesh示例教程彙總
- Kendo UI常用示例彙總(二十)UI
- Kendo UI常用示例彙總(十九)UI
- Kendo UI常用示例彙總(I樹列表示例)UI
- sql server分組查詢示例SQLServer
- excel表格匯入word方法彙總Excel
- HTML特殊字元的html、js、css寫法彙總HTML字元JSCSS
- Kendo UI常用示例彙總(二十四)UI
- Kendo UI常用示例彙總(二十二)UI
- Kendo UI常用示例彙總(二十一)UI
- Struts2匯出Excel步驟及問題彙總 poi分頁(一)Excel
- Android 遊戲引擎分類彙總Android遊戲引擎
- 資料庫分庫分表解決方案彙總資料庫
- Android 特殊使用者通知用法彙總 - Notification 原始碼分析Android原始碼
- 報告彙總資料使用組函式函式
- 分析函式系列之sum(col1) over(partition by col2 order by col3):實現分組彙總或遞增彙總函式
- excel相同名稱數量相加彙總 excel相同名稱自動合併求和Excel
- excel最常用的八個函式彙總 excel中各函式的用途功能Excel函式
- Excel上傳示例及後臺解析ExcelExcel
- 在前端使用 JS 進行分類彙總前端JS
- 機器學習常見演算法分類彙總機器學習演算法
- Vagrant box 命令彙總彙總
- 如何將Excel中多個不同的工作表彙總成一張總表Excel
- 「Excel技巧」Excel中根據某列的值去彙總另外一列的值Excel
- MySQL:網際網路公司常用分庫分表方案彙總!MySql
- Python常用的組合資料型別彙總Python資料型別
- Yii 中特殊行為 ActionFilter 的使用示例Filter
- 字串分組相加方法四之總結字串
- Angular2 興趣小組 & 問題及回答彙總Angular
- PHPExcel讀取excel檔案示例PHPExcel
- Oracle 10gR2分析函式彙總Oracle 10g函式
- 一分鐘看完蘋果釋出會——精華彙總蘋果