code: function buildBody({lineDescriptor, timeseriesesByRange}, descriptorFlags,
      revisionInfo) {
    const descriptorParts = getDescriptorParts(lineDescriptor, descriptorFlags);
  
    // getColor_() uses this to look up this body's head color in colorByLine.
    const descriptor = ChartTimeseries.stringifyDescriptor(lineDescriptor);
  
    const scalarRowsByLabel = new Map();
    const linkRowsByLabel = new Map();
    const columnCount = timeseriesesByRange.length;
    for (const [columnIndex, {range, timeserieses}] of enumerate(
        timeseriesesByRange)) {
      const setScalar = (rowLabel, value, unit) => setCell(
          scalarRowsByLabel, rowLabel, columnCount, columnIndex, {value, unit});
      const setLink = (rowLabel, href, label) => setCell(
          linkRowsByLabel, rowLabel, columnCount, columnIndex, {href, label});
  
      DetailsTable.buildCell(setLink, setScalar, timeserieses, range,
          revisionInfo);
    }
  
    const scalarRows = collectRowsByLabel(scalarRowsByLabel);
    const linkRows = collectRowsByLabel(linkRowsByLabel);
    return {descriptor, descriptorParts, scalarRows, linkRows};
  }
docs: Build a table body {descriptorParts, scalarRows, linkRows} to display the detailed data in timeseriesesByRange.