dc.js 使用 filesaver.js 筛选 table 导出

dc.js filtered table export using filesaver.js

我正在尝试使用 FileSaver.js.

导出 dc.js 过滤的 table 数据

我使用以下基于 的代码,这很好,除了它导出所有字段(但过滤正常),而我只需要 table 特定字段,这只是其中的一部分字段加 2 计算。

d3.select('#download')
    .on('click', function() {
        var blob = new Blob([d3.csv.format(dateDim.top(Infinity))], {type: "text/csv;charset=utf-8"});
        saveAs(blob, DateT + '.csv');
    });

有什么方法可以指向 table 而不是那个维度?

谢谢。

编辑:下面的工作代码

d3.select('#download')
  .on('click', function() {
        var data = MYTABLEDIM.top(Infinity);
        {
            data = data.map(function(d) {
                var row = {};
                MYTABLENAME.columns().forEach(function(c) {
                    row[MYTABLENAME._doColumnHeaderFormat(c)] = MYTABLENAME._doColumnValueFormat(c, d);
                });
                return row;
            });
        }
        var blob = new Blob([d3.csv.format(data)], {type: "text/csv;charset=utf-8"});
        saveAs(blob, 'data.csv');
});

好问题。

实际上可以根据列定义格式化数据,方法是使用一些未记录的数据方法 table。

我更新了 the example,增加了一个单选按钮来选择要下载的数据。

这里是转换和下载在 table 中编码的数据的代码:

d3.select('#download')
    .on('click', function() {
        var data = nameDim.top(Infinity);
        data = data.map(function(d) {
            var row = {};
            table.columns().forEach(function(c, i) {
                // if you're using the "original method" for specifying columns,
                // use i to index an array of names, instead of table._doColumnHeaderFormat(c)
                row[table._doColumnHeaderFormat(c)] = table._doColumnValueFormat(c, d);
            });
            return row;
        });
        var blob = new Blob([d3.csv.format(data)], {type: "text/csv;charset=utf-8"});
        saveAs(blob, 'data.csv');
    });

Basically, when the table radio is selected, we'll tr​​ansform the data row-by-row using the same functions that the table uses to format its data.

行将按照原始数据的顺序排列,而不是像 table 那样排序。 (严格来说,the columns may not be in the same order either)。这将是一项更大的努力,并且可能需要 dc.js 中的新功能。但这没有任何变化。希望对您有所帮助!