Экспорт отфильтрованной таблицы dc.js с использованием filesaver.js

dc.js filesaver.js

619 просмотра

1 ответ

138 Репутация автора

Я пытаюсь экспортировать отфильтрованные данные таблицы dc.js с помощью FileSaver.js .

Я использую приведенный ниже код, основанный на этом, что хорошо, за исключением того, что он экспортирует все поля (но фильтруется нормально), в то время как мне просто понадобятся поля, специфичные для таблицы, которые являются только несколькими из полей плюс 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');
    });

Есть ли способ, которым я могу указать на таблицу, а не это измерение?

Благодарю.

РЕДАКТИРОВАТЬ: рабочий код ниже

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');
});
Автор: stutray Источник Размещён: 19.07.2016 09:33

Ответы (1)


1 плюс

14981 Репутация автора

Решение

Хороший вопрос.

Фактически возможно форматировать данные в соответствии с определениями столбцов, используя некоторые недокументированные методы таблицы данных.

Я обновил пример с помощью радиокнопки, чтобы выбрать, какие данные загрузить.

Вот код, который преобразует и загружает данные так, как они закодированы в таблице:

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');
    });

По сути, когда tableвыбрано радио, мы построчно преобразуем данные, используя те же функции, что и таблица, используемая для форматирования данных.

Строки будут в порядке исходных данных, а не отсортированы, как в таблице. (И, строго говоря, столбцы могут быть не в том же порядке ). Это было бы большим усилием и могло бы потребовать новых функций в dc.js. Но это работает без каких-либо изменений. Надеюсь, это поможет!

Автор: Gordon Размещён: 19.07.2016 07:35
Вопросы из категории :
32x32