当heatMap boxOnClick时,从dataTable中筛选出带有0的行

时间:2019-02-19 16:27:10

标签: javascript d3.js dc.js

我想从我的dataTable中过滤出FTE值为0的行,但是仅当从heatMap中选择一个框时才行。如果未选择任何框,则dataTable应显示FTE值为0的行。

我发现了这一点:https://groups.google.com/forum/#!topic/dc-js-user-group/PgVi1TS8WDw谈论将群组伪装成维度。

dataTable维度:

var dimension = ndx.dimension(function (d) {
    return d.Resource + ' ' + d.Month + ' ' + d.FTE;
});

dataTabel:

var index = 0;      
detailedTable = dc.dataTable('.detailedTable')
    .dimension(dimension)
    .group(function (d) {
        return '';
     })
     .columns([
         function (d) {
             index = index + 1;
             return resultStart + index;
         },
         function (d) {
             return d.Resource;
         },
         function (d) {
             return d.FTE;
         },
         function (d) {
             return d.Month;
         }
      ])
      .size(Infinity)
      .on('renderlet', function (c) {
          index = 0,
          displayResult();
       });

heatMap boxOnClick:

heatMap.boxOnClick(function (d) {

    //filter dataTable here

    //Deflut boxOnClick:
    var filter = d.key;
    dc.events.trigger(function () {
        heatMap.filter(filter);
        heatMap.redrawGroup();
    });
});

https://jsfiddle.net/_M_M_/fcjhxa16/19/

1 个答案:

答案 0 :(得分:2)

很抱歉让我感到困惑-如果我这次正确理解了您,那么这完全是微不足道的,这是您想要“伪造尺寸”的罕见情况之一。

伪维将读取原始维,并根据谓词对其进行过滤。谓词将说“要么该行的FTE> 0,要么在heatMap上没有选择任何内容”

function filtered_dimension(dimension, f) {
  return {
    top: function(N) {
      return dimension.top(N).filter(f);
    },
    bottom: function(N) {
      return dimension.bottom(N).filter(f);
    }
  };
}

var dimension_with_no_fte_zeros_if_heatmap_selected = filtered_dimension(dimension, function(row) {
  return row.FTE || heatMap.filters().length === 0;
});

detailedTable = dc.dataTable('.detailedTable')
  .dimension(dimension_with_no_fte_zeros_if_heatmap_selected)

您不需要点击处理程序-级别太低-您无需汇总任何内容,只需进行过滤即可。

Fork of your fiddle