使用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。
感谢您提供的信息,但是我选择使用C#Razor构建我的数据表,因为我有许多不同的表要构建,并且DC.js可悲地不像用户希望的那样方便用户使用。 –
当然,理解 - dc.js dataTable几乎不是概念证明。当人们想要更好的东西时,他们通常会转向DataTables.js或类似的东西,将其挂接到dc事件和交叉过滤器数据中。对于后来遇到此问题的人,请参阅https://stackoverflow.com/questions/21596616/dc-js-data-table-using-jquery-data-table-plugin的答案,可以改进,但基本上是正确的想法。 – Gordon