2014-02-18 4 views
1

Я пытаюсь обобщить таблицу данных с помощью dc.js, и я использую плагин dynaTable для разбивки на страницы и другие параметры.dc js - Создать несколько столбцов Размер

Обычно в таблице данных dc.js мы получаем все данные, отображаемые в данных. Но я пытаюсь обобщить данные как сводную таблицу и отобразить ее в Интернете, и когда выбор произойдет, таблица данных должна измениться.

Я сделал это, создав dimension и group, и передал эту группу dynaTable. И он работает нормально.

Предположим, у меня есть 5 столбцов данных. Я могу создать измерение в любом столбце.

Пример: Я создаю измерение в первых столбцах и группируюсь по значению последнего столбца, скажем, что это A-20, B-42, C-50, D-20.. Теперь моя группа содержит эти значения и переменную.

Но я ищу, чтобы создать измерение, объединяющее 2-3 столбца.

Пример:

 
A,AA,20 
A,AB,10 
A,AC,30 
A,AD,80 
B,BA,30 
B,BB,40 
B,BC,50 
B,BD,90 
C,CA,70 
C,CB,20 
C,CC,10 
C,CD,80 
D,DA,30 
D,DB,40 
D,DC,60 
D,DD,80 

Можно ли создать измерение по нескольким столбцам, как это?

Если да, пожалуйста, помогите мне.

Вот скрипка: http://jsfiddle.net/3v68c/3/

ответ

2

Если вы предоставляете JSFiddle или нечто подобное, я могу предоставить вам рабочий пример. Но ответ да, вы можете определить измерение, основанное на столько столбцов, сколько хотите. Вам просто нужно иметь разделитель, который не используется ни в одном из значений. Допустим, у вас есть столбцы a, b и c, и вы собираетесь использовать разделитель ','. Тогда вы:

var xfilter = crossfilter(data); 
var multidimension = xfilter.dimension(function (d) { 
    return d.a + ',' + d.b + ',' + d.c; 
}); 
+0

Привет, пользователь3206082, я знаю, что вы попросили меня взглянуть на это (исходя из нашей предыдущей темы), но Этан указал вам в правильном направлении. Если вы создаете диаграмму DC с данными, вы можете убедиться, что ваша группа также разбита на отдельные поля отдельно.Другими словами, используйте конкатенацию для определения измерения во многих столбцах, а затем укажите фактические значения для этих столбцов в группе. –

+0

@Ethan Чтобы избежать ограничения ограничителя, вы можете определить размерность как массив, например. return [d.a, d.b, d.c]; –

+1

@SimonGiles Я думаю, что это обычно так, но в других случаях, что происходит в Crossfilter, это то, что массив принудительно используется с использованием .toString(), поэтому внутри CrossFilter он фактически рассматривается как строка с разделителями-запятыми. Я слышал некоторые истории о том, что происходит во время этого преобразования, поэтому я не говорю, что другие люди используют массивы, но я тайно использую их самостоятельно ;-) –

0

Я создал jsfiddle для этого в http://jsfiddle.net/djmartin_umich/7R9wd/. Он может использовать некоторую очистку, но он имеет смысл.

1) Создайте свое измерение с помощью конкатенированных полей (как предложил Итан). Я создал новое измерение, потому что вы, вероятно, хотите, чтобы ваш график использовал только измерение даты. В этом случае я преобразовал дату в строку перед конкатенацией.

var dateLableDim = ndx.dimension(function(d) { return parseDate(d3.time.day.floor(d.date)) + " - " + d.label }); 

2) Сохраните текущую дату и метку как часть метода группирования:

var dateDimTotal = dateDim.group().reduce(reduceAdd, reduceRemove, reduceInitial); 

    function reduceAdd(p, v) { 
     p.date = parseDate(d3.time.day.floor(v.date)); 
     p.label = v.label; 
     ++p.count; 
     p.total += v.value; 
     if (p.count == 0) { 
      p.average = 0; 
     } else { 
      p.average = p.total/p.count; 
     }; 
     return p; 
    } 

3) См этих полей в вашем DataTable (или dynaTable):

var datatable = $('.table').dataTable({ 
     "aaData" : dateDimTotal.top(Infinity), 
     "bDestroy": true, 
     "aoColumns": [ 
      { "mData": function(d) { return d.value.label; }, "sDefaultContent": ""},     
      { "mData": function(d) { return d.value.date; }, "sDefaultContent": ""}, 
      { "mData": function(d) { return d.value.count; }, "sDefaultContent": ""}, 
      { "mData": function(d) { return d.value.average; }, "sDefaultContent": ""} 
     ] 
    }) 
0

Вы также можете создать одно измерение непосредственно в dc.js как массив из нескольких ключевых полей, если вы посмотрите на простой конкретный пример диаграммы для диаграммы серии dc.js Github, вы можете увидеть, как это делается.

 Смежные вопросы

  • Нет связанных вопросов^_^