【问题标题】:Using DC.js datatable to create a table with aggregated data by year使用 DC.js 数据表创建按年份聚合数据的表
【发布时间】:2018-02-17 13:28:07
【问题描述】:

我一直在尝试使用 dc.js 和 crossfilter 从某个数据集构建图表和表格。

到目前为止,构建图表工作正常,但我想使用数据表功能构建一个小的 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"},
];

到目前为止,这段代码每行数据返回一行结果,虽然感觉应该是一个简单的操作,但我想不出正确的语法来构建一个每年一行的汇总表:

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()

函数将维度转换为变量,然后将其传递给 .group() 参数,但我总是以编译错误告终,我现在很无能为力。

我正在寻找的 SQL 翻译是这样的:

SELECT 
    Year,
    NbEmp = SUM(NbEmploye)

FROM DB

GROUP BY
    Year

ORDER BY 
    Year

提前感谢您的帮助!

【问题讨论】:

    标签: dc.js crossfilter


    【解决方案1】:

    dataTable 的组 is not a group - 是的,从所有其他图表中的含义来看,使用这种方法来处理 mean something completely different 非常令人困惑。在这里,它是一个函数,在其他任何地方它都是一个交叉过滤器对象。

    dataTable 在 dc.js 图表中是独一无二的,因为它从 .dimension() 对象中读取数据。这是因为它默认显示原始数据行,而不是聚合数据。

    但是,它can be used to display a group instead。这是因为它实际调用维度的唯一方法是.top(),如果您选择显示in descending order

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

    【讨论】:

    • 感谢您提供的信息,但是我选择使用 C# Razor 构建我的数据表,因为我有很多不同的表要构建,而 DC.js 对表的用户友好性不如我所愿.
    • 当然,明白 - dc.js dataTable 只是概念证明。当人们想要更好的东西时,他们通常会转向 DataTables.js 或类似的东西,将其连接到 dc 事件和交叉过滤数据中。对于以后遇到此问题的任何人,请参阅例如stackoverflow.com/questions/21596616/… 的答案,可以改进但基本上是正确的想法。
    • @AlokReddyKatanguri 你试过在 React.JS 上使用它吗?
    • @PrivateOmega 不,我已经独立使用了它。为了反应更好的选择在 npm 上可用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2022-01-12
    • 2015-03-24
    • 2014-03-03
    • 2019-09-21
    • 2021-07-04
    • 2019-08-29
    相关资源
    最近更新 更多