// no need to cross product if there is only one dataset
if( datasets.length==1 )
return datasets[0];
BigTupleList result = new BigTupleList(reporter);
result.addAll(datasets[0]);
for( int i=1;i<datasets.length;i++ )
{
Iterable<Tuple> dataset1 = result;
Iterable<Tuple> dataset2 = datasets[i];