множественное измерение в таблице данных d c. js - PullRequest
1 голос
/ 15 апреля 2020

У меня есть 5 столбцов pid, cid, date, types, probability в данных. Я могу фильтровать по одному столбцу (pid), но я хочу фильтровать и по другим значениям столбца.

https://blockbuilder.org/ninjakx/f442f5ccbf25eb853c7508194688d25d

Строка 152 (индекс. js):

// Setup different dimensions for plots
dim.tableMaxConfidence = cf.dimension(function (d) {
  return d.pid;
});

Я должен сделать это для многомерной фильтрации.

Строка 187 (индекс. js):

.on('pretransition', function (table) {
     table.selectAll('td.dc-table-column._0')
          .on('click',function(d){
                console.log(d);
                table.filter(d.pid)
                dc.redrawAll();
           })
     table.selectAll('td.dc-table-column._1')
          .on('click',function(d){
                console.log("select:",d);
                table.filter(d.cid)
                dc.redrawAll();
           })
     table.selectAll('td.dc-table-column._2')
          .on('click',function(d){
                table.filter(d.date)
                dc.redrawAll();
           })
      table.selectAll('td.dc-table-column._4')
         .style("background-color", function(d){ 
          return color(d.probability)});
  }); 

Работает только для pid, поскольку в измерении есть только pid.

Так что мой вопрос можно ли фильтровать по другим значениям столбца. Если да, то как?

Любой намек будет заметен.

1 Ответ

1 голос
/ 15 апреля 2020

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

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

Вместо фильтрации по таблице вы можете go прямо к измерению - для этой диаграммы нет никакой разницы. (Вам нужно использовать .filter() диаграммы только тогда, когда он реализует пользовательский интерфейс выбора / фильтрации.)

Конечно, размеры должны соответствовать тому, что вы фильтруете:

 const cidDimension = cf.dimension(d => d.cid),
      dateDimension = cf.dimension(d => d.date);

 table.selectAll('td.dc-table-column._1')
      .on('click',function(d){
            console.log("select:",d);
            cidDimension.filter(d.cid)
            dc.redrawAll();
       })
 table.selectAll('td.dc-table-column._2')
      .on('click',function(d){
            dateDimension.filter(d.date)
            dc.redrawAll();
       })

A ссылка сброса для одного из этих измерений должна вызывать

cidDimension.filter(null);

или

dateDimension.filter(null);

Если у вас есть ссылка «сбросить все», вы можете либо добавить эти коды к ней, либо переопределить таблицу filterAll:

table.filterAll = () => {
    table.dimension().filter(null); 
    cidDimension.filter(null);
    dateDimension.filter(null);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...