code: function calculateDimensionRequestString(item, conceptIds, fullDimensions) {
    var hasAtLeastOneValuePerDimension = conceptIds.every(function(list) {
      return list.length > 0;
    });
    if (!hasAtLeastOneValuePerDimension) {
      return;
    }
    var nextConceptIndex = 0;
    var nonTimePeriodDimensions = fullDimensions.filter(function(dimension) {
      return item.timePeriodDimensionId !== dimension.id;
    });
    var dimensionRequestArrays = nonTimePeriodDimensions.map(function(
      dimension,
      dimensionIndex
    ) {
      if (dimension.id === item.regionDimensionId) {
        return [""]; // A missing id loads all ids.
      }
      if (item.aggregatedDimensionIds.indexOf(dimension.id) >= 0) {
        return [""]; // An aggregated dimension (eg. STATE when there's also LGA) loads all ids.
      }
      if (
        dimension.values.length === 1 &&
        item.forceShowDimensionIds.indexOf(dimension.id) === -1
      ) {
        // These do not appear as concepts - directly supply the only value's id.
        return [dimension.values[0].id];
      }
      return conceptIds[nextConceptIndex++];
    });
    if (dimensionRequestArrays.some(a => !defined(a))) {
      throw new TerriaError({
        sender: item,
        title: "Dimension has no allowed values",
        message:
          "One of this catalog item's dimensions has no allowed values. This can be caused by a badly-formed whitelist."
      });
    }
    return dimensionRequestArrays
      .map(function(values) {
        return values.join("+");
      })
      .join(".");
  }
docs: Returns the dimension request string, eg. "BD_2+BD_4.LGA_2013..A." appropriate for the active concept values. One trick is that the time dimension can appear in the dataflow, but should not be included in the data (or this request string). The dimension values need to be in the order of the original dimensions, not the concepts. Returns undefined if any dimension has no value selected. conceptIds should be the concept ids to load, eg. [['BD_2', 'BD_4'], ['A']].