numberDisplay - 按最大键过滤

numberDisplay - filter by max key

我有一个 dc.js 仪表板,其中包含按月/期间分组的历史人数、疾病等信息。仪表板的用户希望在顶部的数字显示中看到最近一个月的数据(例如人数、患病率等)。

我的数据:

var data= [
{ "Month": "01/02/2014","Period": 201402,"Heads": 15123,"SchedHours":146000,"Sickness": 0,},
{ "Month": "01/03/2014","Period": 201403,"Heads": 15100,"SchedHours": 146000,"Sickness": 0,},
{ "Month": "01/04/2014","Period": 201404,"Heads": 14900,"SchedHours": 146000,"Sickness": 0,},
{ "Month": "01/05/2014","Period": 201405,"Heads": 14800,"SchedHours": 146000,"Sickness": 0,},
{ "Month": "01/06/2014","Period": 201406,"Heads": 14750,"SchedHours": 146000,"Sickness": 0,},
{ "Month": "01/07/2014","Period": 201407,"Heads": 14720,"SchedHours": 146000,"Sickness": 0,},
{ "Month": "01/08/2014","Period": 201408,"Heads": 14000,"SchedHours": 146000,"Sickness": 0,},
{ "Month": "01/09/2014","Period": 201409,"Heads": 13750,"SchedHours": 146000,"Sickness": 0,},
{ "Month": "01/10/2014","Period": 201410,"Heads": 13500,"SchedHours": 146000,"Sickness": 0,},
{ "Month": "01/11/2014","Period": 201411,"Heads": 13200,"SchedHours": 146000,"Sickness": 0,},
....]

当仪表板首次使用变量加载时,我可以弄清楚默认情况下如何执行此操作:

maxPeriod = dimPeriod.top(1)[0].Period;

但我正在努力弄清楚如何更新上面的变量以更新 numberDisplay 以始终对其进行过滤以按最大周期或月份显示头像。

我目前正在使用 Gordon 在另一个问题中提供的函数显示最新的 "Heads" 数量:

function choose_bin(group, key) {
return {
value: function() {
  return group.all().filter(kv => kv.key === key)[0].value;
    }
  }
}

那我的群是:

var latestMonth = choose_bin(groupHeads3, maxPeriod);

和数字显示:

numberChart
.group(latestMonth)
.valueAccessor(x => (x))
.formatNumber(d3.format(".0f"));

我有一个显示问题的基本 jsfiddle(应用过滤器后,值为 0):https://jsfiddle.net/kevinelphick/mzpoe555/2/

我的目标是根据折线图中过滤的最高周期更新正面值。我还希望包括最高周期值之前的月份,并提供两者的比较以显示趋势。

提前谢谢你。

你只是在运行时没有计算足够的东西。每次查询该组时,您都需要计算 maxPeriod 以及之后的所有内容。你可能想做这样的事情(如果你把它放到你的 JSFiddle 中就可以了:

var latestMonth = {
  all: function() { 
    maxPeriod = dimPeriod.top(1)[0].Period;
    return [choose_bin(groupHeads3, maxPeriod).value()]
  }
}