【翻譯】mzPivotGrid: Ext JS的樞紐分析表格

來源:互聯網
上載者:User

原文地址:http://www.sencha.com/blog/mzpivotgrid-a-pivot-table-for-ext-js?mkt_tok=3RkMMJWWfF9wsRokvq3BZKXonjHpfsX77%2BsqWK%2B0lMI%2F0ER3fOvrPUfGjI4JSMZ0dvycMRAVFZl5nR9dFOOdfQ%3D%3D
在mzSolutions,我的工作是為Ext JS和Sencha Touch建立組件。在這篇文章中,我會告訴你如何在Sencha的Ext JS中使用mzPivotGrid。
什麼是樞紐分析表?Ext JS的Grid面板可以完美的顯示大型資料集,且提供了許多功能。但它不能顯示一種叫做樞紐分析表的資料類型。在談到表格的時候,就會用到樞紐分析表,因為它可以協助你組織和摘要資料並建立報告,它能使使用者根據資料做出更明智的決策。
mzPivotGrid是什嗎?mzPivotGrid是一個可以在Ext JS中用來建立樞紐分析表的組件。可以想象一下以下情形。一些銷售資料帶有以下欄位:國家country)、銷售人員salesperson)、訂單日期order date)、訂單金額order amoutnt)和訂單IDorder ID)。如果想去編輯這些資料,可輕易的通過GridPanel並使用CellEditing或RowEditing外掛程式來實現。
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1153104138-0.png" alt="" />如果要回答系列問題,要怎麼做:
可以使用mzPivotGrid來建立這些報表,以下是他們的顯示效果:650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1153105326-1.png" alt="" />650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1153106257-2.png" alt="" />650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1153103117-3.png" alt="" />
mzPivotGrid的使用方法mzPivotGrid繼承自Ext JS的Grid面板組件,因此可以使用哪些已經熟悉的功能:調整列寬、鎖定列、儲存格渲染器、行/儲存格事件等。當需要使用GridPanel沒有提供的匯總和資料透視功能的時候,就可以使用mzPivotGrid要根據銷售人員和年份分解資料集,只需要使用以下代碼設定頂部和左側的軸:

[javascript] view plaincopy

  1. leftAxis: [{  
  2.     width:      80,  
  3.     dataIndex:  'salesperson',  
  4.     header:     'Salesperson'  
  5. }],  
  6.    
  7. topAxis: [{  
  8.     dataIndex:  'year',  
  9.     header:     'Year',  
  10.     direction:  'ASC'  
  11. }]  

由於支援多層,因此可以在頂部或左側的軸來指定他們。在這裡對行或列進行分組很方便,因此可以簡單的通過設定enableGrouping為true來實現。

現在已經在頂部和左側的軸分解了資料集,可以對儲存格的值進行合計了。可用的彙總包括以下幾種:求和、求平均值、最小值、最大值以及計數等。如果這些還不能滿足需求,可以提供自己的彙總函式。 [javascript] view plaincopy
  1. aggregate: [{  
  2.     measure:    'amount',  
  3.     header:     'Sales',  
  4.     aggregator: 'sum',  
  5.     align:      'right',  
  6.     width:      85,  
  7.     renderer:   Ext.util.Format.numberRenderer('0,000.00')  
  8. },{  
  9.     measure:    'orderid',  
  10.     header:     'Qnt',  
  11.     aggregator: function(records, measure, matrix, rowGroupKey, colGroupKey) {  
  12.         // do your own algorithm  
  13.         return records.length;  
  14.     },  
  15.     align:      'right',  
  16.     width:      85,  
  17.     renderer:   Ext.util.Format.numberRenderer('0,000.00')  
  18. }]  

正如已經在以上例子留意到的,可以根據sales和quantity來彙總多個資料欄位。可以通過設定所有所需的集合來輕鬆紅絲線他們。650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1153103228-4.png" alt="" />
用來顯示的合計的行grand totals)的行或列的設定很簡單“enableRowGrandTotals: true” or “enableColGrandTotals: true”)。分組合計group totals)也可以通過enableRowSummary和enableColSummary來社會自。樣式也很容易,甚至可通過定義儲存格渲染器來實現。

樞紐分析表可以使用Ext JS中任何類型的Store,因而在Store對象中對資料進行過濾也相當容易。這意味著可以實現一個外掛程式來處理過濾。

Ext JS的資料模型類相當的棒,可以通過它強大的convert功能來擴充模型和在自訂的分組間隔內分解資料。例如以下樣本:
[javascript] view plaincopy
  1. fields: [  
  2.     {name: 'orderid',       type: 'int'},  
  3.     {name: 'salesperson',   type: 'string'},  
  4.     {name: 'country',       type: 'string'},  
  5.     {name: 'orderdate',     type: 'date', dateFormat: 'd/m/Y'},  
  6.     {name: 'amount',        type: 'int'},  
  7.     {  
  8.         name: 'person-range',  
  9.         convert: function(v, record){  
  10.             if(/^[a-j]/i.test(record.get('salesperson'))) return 'A-J';  
  11.             if(/^[k-s]/i.test(record.get('salesperson'))) return 'K-S';  
  12.             if(/^[t-z]/i.test(record.get('salesperson'))) return 'T-Z';  
  13.             return v;  
  14.         }  
  15.     },{  
  16.         name: 'year',  
  17.         convert: function(v, record){  
  18.             return Ext.Date.format(record.get('orderdate'), "Y");  
  19.         }  
  20.     }  
  21. ]  
  22.    

顯示效果如下:650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1153103R7-5.png" alt="" />
一個樣本用例: [javascript] view plaincopy
  1.  var pivotGrid = Ext.create('Mz.pivot.Grid', {  
  2.     title:          'Pivot grid',  
  3.     height:         400,  
  4.     width:          600,  
  5.     enableLocking:  false,  
  6.     enableGrouping: true,  
  7.     viewConfig: {  
  8.         trackOver:      true,  
  9.         stripeRows:     false  
  10.     },  
  11.     store: store,  
  12.     aggregate: [{  
  13.         measure:    'amount',  
  14.         header:     'Sales',  
  15.         aggregator: 'sum',  
  16.         align:      'right',  
  17.         width:      85,  
  18.         renderer:   Ext.util.Format.numberRenderer('0,000.00')  
  19.     }],  
  20.     caption:  'Sales report',  
  21.     leftAxis: [{  
  22.         width:      80,  
  23.         dataIndex:  'salesperson',  
  24.         header:     'Sales Person'  
  25.     }],  
  26.     topAxis: [{  
  27.         dataIndex:  'year',  
  28.         header:     'Year',  
  29.         direction:  'ASC'  
  30.     }]  
  31. });  

未來由於mzPivotGrid是一個商業產品,因而它會不斷的獲得改進,並會有新的外掛程式和功能。如果需要一些特別的實現,可以隨時聯絡我們。

要瞭解
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.