2015-12-15 2 views
1

Это похоже на dc.js - how to create a row chart from multiple columns, но я хочу сделать еще один шаг и включить фильтрацию при щелчке по строкам.dc.js - Создание диаграммы строк из нескольких столбцов и включение фильтрации

Чтобы ответить на вопрос «Что он должен фильтровать?» - Отображать только записи со значением> 0. Например, если щелкнуть Row 'a', будут показаны только записи со значением для a> 0. Следовательно, круговая диаграмма Тип изменится на foo: 1, bar: 2

Думаю, мне нужно перезаписать метод onClick? Но я не знаю, как это сделать.

chart.onClick = function(d) {}

jsfiddle от ответа на поставленный выше вопрос - http://jsfiddle.net/gordonwoodhull/37uET/6/

Любые предложения?

Спасибо!

+0

Думаю, вам нужно переопределить обработчик фильтра. –

ответ

1

Хорошо, вот решение, в котором, если запись имеет значения> 0 для любого из выбранных строк, эта запись включена. По словам @Ethan, это вопрос определения обработчика фильтра:

sidewaysRow.filterHandler(function(dim, filters) { 
    if(filters && filters.length) 
     dim.filterFunction(function(r) { 
      return filters.some(function(c) { 
       return r[c] > 0; 
      }); 
     }) 
    else dim.filterAll(); 
    return filters; 
}); 

Кроме того, поскольку filterFunction имеет доступ только к ключу, мы проходим всю запись через как ключ. Это не делает много смысла в «реальном мире», но так как мы уже использовали crossfilter боком, это, вероятно, хорошо:

var dim = ndx.dimension(function(r) { return r; }); 

Новая версия скрипкой: http://jsfiddle.net/gordonwoodhull/37uET/18/

BTW это звучит так, будто вы хотите выбрать только одну строку за раз. Вот как это сделать:

sidewaysRow.addFilterHandler(function(filters, filter) { 
    filters.length = 0; 
    filters[0] = filter; 
    return filters; 
}) 

(Это будет проще в постоянном 2.1 на разработках отрасли, где графики используют результат обработчиков фильтров вместо требуя, чтобы изменить фильтры на месте, тело становится просто return [filter];)