使用DC.js数据表按年创建一个包含汇总数据的表格

问题描述:

我一直在尝试使用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 

预先感谢您的帮助!

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://*.com/questions/21596616/dc-js-data-table-using-jquery-data-table-plugin的答案,可以改进,但基本上是正确的想法。 – Gordon