0
votes

I'm working on a visualization utilizing the crossfilter.js library, and I'm a bit confused on how to create some dimensions from nested attributes within my dataset. For instance, each instance of the dataset has multiple dates associated with it, resulting in a data structure that looks like this:

[ { name: 'instance_name',
  dates: ['2014-11-11', '2013-07-06', '2011-02-04'],
  category: 'category 1' },
{ name: 'instance_name2',
  dates: ['2012-01-01', '2013-03-07'],
  category: 'category 2' } ]

I'd like to be able to create dimensions that will allow for filtering based on, say, the dates and the category and dimensions are a straightforward way to do this with crossfilter. However, I'm not sure how to parse the dates. I've tried first creating a date dimension using something like:

var cf = crossfilter(data);
var dateDim = cf.dimension(function(d) { return d.dates; });

and then tried to store just the dates as a variable using the .map() method like so:

var date = dateDim.top(Infinity).map(function(d) { return d.dates; });

The above does retrieve just the dates and stores them as a variable, however (a) this is just an array of dates each of which is a string, and (b) this doesn't get me any closer to linking the dateDim to other crossfilter dimensions I'd like to create for the visualization. Any help would be greatly appreciated. Thanks for reading.

1

1 Answers

0
votes

My recommendation is be to flatten your structure before loading it in to Crossfilter. So your 1st record will become 3 records (1 for each date) and your 2nd record will become 2 records. You can then parse the dates and treat them as a dimension in Crossfilter without too much trouble. The downside is that counting because a problem, but that is manageable with custom grouping functions.