code: function(observations, seriesKey, dimIdx, attrIdx) {
      if (observations === undefined || observations === null) return;
  
      // process each observation in object.
      for (var key in observations) {
        // convert key from string to an array of numbers
        var obsDimIdx = key.split(KEY_SEPARATOR).map(Number);
        obsDimIdx.forEach(updateObsKey);
  
        var value = observations[key];
        if (value === null) continue;
  
        results.push(
          iterator.call(
            context,
            // String of dimension id values e.g. 'M.FI.P.2000'
            obsKey.join(KEY_SEPARATOR),
            // Same as obsKey but without obs level dims
            seriesKey,
            // observation value
            value[0],
            // Array of dimension indices e.g. [ 0, 4, 5, 18 ]
            dimIdx.concat(obsDimIdx),
            // Array of attribute indices e.g. [ 1, 92, 27 ]
            attrIdx.concat(value.slice(1)),
            // Array of dimension objects
            allDims,
            // Array of attribute objects
            allAttrs
          )
        );
      }
    }
docs: Process observations object and call the iterator function for each observation. Works for both dataset and series level observations. Updates the results array.