src/Aggregate.js
function generate(base, tuple, index) {
    var name = dims[index],
        v = vals[index++],
        k, key;

    for (k in v) {
      tuple[name] = v[k];
      key = base ? base + '|' + k : k;
      if (index < n) generate(key, tuple, index);
      else if (!curr[key]) aggr.cell(key, tuple);
    }
  }
function generate(base, tuple, index) {
    var name = dims[index],
        v = vals[index++],
        k, key;

    for (k in v) {
      tuple[name] = v[k];
      key = base ? base + '|' + k : k;
      if (index < n) generate(key, tuple, index);
      else if (!curr[key]) aggr.cell(key, tuple);
    }
  }
function generate ( base , tuple , index ) { var name = dims [ index ] , v = vals [ index ++ ] , k , key ; for ( k in v ) { tuple [ name ] = v [ k ] ; key = base ? base + '|' + k : k ; if ( index < n ) generate ( key , tuple , index ) ; else if ( ! curr [ key ] ) aggr . cell ( key , tuple ) ; } }
iterate over key cross-product, create cells as needed
iterate over key cross - product create cells as needed