def itervalues(self, index=None):
        '''
        Iterate through values in the ``index`` (defaults to all indices
        except the first index).

        When ``index is None``, yielded values depend on the length of indices (``N``):

            * if N <= 1: return
            * if N == 2: yield values in the 2nd index
            * if N > 2: yield values in all indices except the first index
              (each value is a list of ``N-1`` elements)
        '''
        N = len(self.indices)

        if index is None:
            if N <= 1:
                return
            elif N == 2:
                index = 1
                single = True
            else:
                index = slice(1, None)
                single = False
        else:
            index, single = convert_key_to_index(force_list(self.indices.keys()), index)

        multi = not single

        for key in self:
            item = MI_get_item(self, key)
            value = mget_list(item, index)
            if multi:
                value = tuple(value)  # convert list to tuple
            yield value