class QuarkCube {

  public static Set<Set<Dimension>> getDimensionSets(Set<Dimension> dimensions) {
    Set<Set<Dimension>> result = Sets.newHashSet();
    result.add(new HashSet<>());
    for (Dimension d : dimensions) {
      // traverse only the top level dimension i.e., with no parents
      if (d.parentDimension == null) {
        result = cartesian(ImmutableList.of(result,
            getHierarichalSet(d, new AtomicBoolean(false))));
      }
    }
    return result;
  }

  public  QuarkCube(String name, Object sql, List<Measure> measures,
                   List<Dimension> dimensionList,
                   List<String> tableName, String groupingColumn);
  public  QuarkCube(String name, Object sql, List<Measure> measures,
                   List<Dimension> dimensionList,
                   List<Group> groupList,
                   List<String> tableName, String groupingColumn);
  public  QuarkCube(String name, Object sql, List<Measure> measures,
                   List<Dimension> dimensionList,
                   List<Group> groupList,
                   List<String> tableName, String groupingColumn,
                   List<String> alias);

}