2017-09-08 48 views
1

我一直在嘗試使用dc.js和crossfilter來從某個數據集構建圖表和表格。使用DC.js數據表按年創建一個包含彙總數據的表格

迄今爲止建設的圖表工作正常,但我想用數據表功能建立一個小型的HTML表格彙總數據如下:

|Year|TotalEmployees| 
|2015|555| 
|2016|666| 
|2017|777| 

我的數據集有大約20 000行,這裏有一個樣本數據:

var data = [ 
{"Year":"2015","Category":"1","NbEmployee":"51"}, 
{"Year":"2015","Category":"2","NbEmployee":"31"}, 
{"Year":"2015","Category":"3","NbEmployee":"14"} 
{"Year":"2016","Category":"1","NbEmployee":"51"}, 
{"Year":"2016","Category":"2","NbEmployee":"55"}, 
{"Year":"2016","Category":"3","NbEmployee":"65"}, 
{"Year":"2017","Category":"1","NbEmployee":"76"}, 
{"Year":"2017","Category":"2","NbEmployee":"98"}, 
]; 

到目前爲止,這段代碼返回每個數據的行結果一行,雖然感覺它應該是一個簡單的操作,我不能找出正確的語法建設DA總結表,每年有一行:

var ndx = crossfilter(data); 
var tableDim = ndx.dimension(function(d) { 
    return d.Year; 
}); 

var datatable = dc.dataTable("#dc-data-table"); 

datatable 
    .dimension(tableDim) 
    .group(function(d) { 
     d.NbEmployee += d.NbEmployee; 
     return d.Year; 
     }) 
    .columns([ 
     function(d) {return d.Year;}, 
     function(d) {return d.NbEmployee;}, 
    ]); 

我試過無數次的

.group().reduceSum() 

功能尺寸應用到一個變量,然後將它傳遞給。集團()參數,但我總是以編譯錯誤結束,現在我很無能。

SQL翻譯的東西我要找的是這樣的:

SELECT 
    Year, 
    NbEmp = SUM(NbEmploye) 

FROM DB 

GROUP BY 
    Year 

ORDER BY 
    Year 

預先感謝您的幫助!

回答

2

dataTable的組is not a group - 是的,在所有其他圖表中使用此方法對mean something completely different的含義都相當混淆。在這裏,它是一個函數,在其他地方它是一個交叉過濾對象。

dataTable是dc.js圖表​​中唯一的,它從.dimension()對象讀取其數據。這是因爲它默認顯示原始數據行,而不是聚合數據。

但是,它can be used to display a group instead。這是可行的,因爲如果您選擇顯示in descending order,它實際上在維上調用的唯一方法是.top()

如果要以升序顯示,您可以use a fake group to produce an object which supports the .bottom() method

+0

感謝您提供的信息,但是我選擇使用C#Razor構建我的數據表,因爲我有許多不同的表要構建,並且DC.js可悲地不像用戶希望的那樣方便用戶使用。 –

+1

當然,理解 - dc.js dataTable幾乎不是概念證明。當人們想要更好的東西時,他們通常會轉向DataTables.js或類似的東西,將其掛接到dc事件和交叉過濾器數據中。對於後來遇到此問題的人,請參閱https://stackoverflow.com/questions/21596616/dc-js-data-table-using-jquery-data-table-plugin的答案,可以改進,但基本上是正確的想法。 – Gordon

相關問題