DC,Crossfilter维度:多列作为不同的键?

时间:2016-12-22 12:52:34

标签: javascript d3.js dc.js crossfilter

我有50个应用程序中的每一个都有两个日期列(startYear和endYear)。最早的startYear是1994年,最新的endYear是2030年。

我想将时间小部件条形图添加到现有的DC仪表板中。从1994年到2030年,每年将有一个酒吧,每个酒吧应显示该年度现有的应用程序数量。我的目标是在我的crossfilter组中使用以下数据结构:

group(36) = [
{key:1994, value:1},
{key:1995, value:4},
{key:1996, value:5},
{key:1997, value:10},
{key:1998, value:30},
... etc
]

(实际上,密钥需要有一个日期数据类型,但你明白我的意思。)

通常我会有一个名为year的字段并在其上创建一个维度。但实际上从1994年到2030年没有全年价值的字段。所以我制作了假数据'。目前我正在创建假字段,称为1994年,1995年等,在我的数据上运行:

data.forEach(function(d){
      for (var i=1994; i<2031; i++) {
        if (i>=d.start && i<=d.end) {
          d[i]=1;
        } else {
          d[i]=0;
        }
      }
}

我为那一年存在的应用分配1,为那些不存在的应用分配0。这很好用。但是现在我需要将36个字段组合成一个维度,使36个字段成为维度的不同键。在这一点上,我被卡住了。我一直得到:关键:{1994:1,1995:4,1996:5 ......等}或类似于数组。最新努力:

var timeDimension = facts.dimension(function(d){ return {
  1994:d[1994], 1995:d[1995], 1996:d[1996], 1997:d[1997], 1998:d[1998], 1999:d[1999],
  2000:d[2000], 2001:d[2001], 2002:d[2002], 2003:d[2003], 2004:d[2004], 2005:d[2005],
  2006:d[2006], 2007:d[2007], 2008:d[2008], 2009:d[2009], 2010:d[2010], 2011:d[2011],
  2012:d[2012], 2013:d[2013], 2014:d[2014], 2015:d[2015], 2016:d[2016], 2017:d[2017]
}; });

是否有人知道是否可以通过这种方式将多个字段组合到一个维度中?也许我需要更改虚假数据,例如每个应用程序的单个字段数组,如[0,0,0,1,1,1,1 ...]。但是,如果我这样做,我如何在1994 - 2030年产生维度,当这些维度不存在于任何地方?

我最糟糕的情况是创建额外的行,因此每个数据点重复35次,持续不同年份。我想避免这种情况,但不知道如何。

感谢您的帮助

艾玛

0 个答案:

没有答案