> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cognite.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Aggregation

> Learn how Cognite Data Fusion aggregates and interpolates time series data, and see the details about the available aggregation functions.

export const InterpolationContinuous = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20240%20110%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cline%20x1%3D%2260%22%20y1%3D%226%22%20x2%3D%2260%22%20y2%3D%22104%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22120%22%20y1%3D%226%22%20x2%3D%22120%22%20y2%3D%22104%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22180%22%20y1%3D%226%22%20x2%3D%22180%22%20y2%3D%22104%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cpath%20d%3D%22M%2025%2030%20L%2045%2045%20L%2078%2025%20L%20102%2050%20L%20140%2035%20L%20165%2055%20L%20195%2082%20L%20215%2040%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%2222%22%20y1%3D%2226%22%20x2%3D%2228%22%20y2%3D%2234%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2222%22%20y1%3D%2234%22%20x2%3D%2228%22%20y2%3D%2226%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2242%22%20y1%3D%2241%22%20x2%3D%2248%22%20y2%3D%2249%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2242%22%20y1%3D%2249%22%20x2%3D%2248%22%20y2%3D%2241%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2275%22%20y1%3D%2221%22%20x2%3D%2281%22%20y2%3D%2229%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2275%22%20y1%3D%2229%22%20x2%3D%2281%22%20y2%3D%2221%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2299%22%20y1%3D%2246%22%20x2%3D%22105%22%20y2%3D%2254%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2299%22%20y1%3D%2254%22%20x2%3D%22105%22%20y2%3D%2246%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22137%22%20y1%3D%2231%22%20x2%3D%22143%22%20y2%3D%2239%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22137%22%20y1%3D%2239%22%20x2%3D%22143%22%20y2%3D%2231%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22162%22%20y1%3D%2251%22%20x2%3D%22168%22%20y2%3D%2259%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22162%22%20y1%3D%2259%22%20x2%3D%22168%22%20y2%3D%2251%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22192%22%20y1%3D%2278%22%20x2%3D%22198%22%20y2%3D%2286%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22192%22%20y1%3D%2286%22%20x2%3D%22198%22%20y2%3D%2278%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22212%22%20y1%3D%2236%22%20x2%3D%22218%22%20y2%3D%2244%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22212%22%20y1%3D%2244%22%20x2%3D%22218%22%20y2%3D%2236%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2255%22%20y1%3D%2235.90909090909091%22%20x2%3D%2265%22%20y2%3D%2235.90909090909091%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2260%22%20y1%3D%2230.909090909090907%22%20x2%3D%2260%22%20y2%3D%2240.90909090909091%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2256.75%22%20y1%3D%2232.65909090909091%22%20x2%3D%2263.25%22%20y2%3D%2239.15909090909091%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.2%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2256.75%22%20y1%3D%2239.15909090909091%22%20x2%3D%2263.25%22%20y2%3D%2232.65909090909091%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.2%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22115%22%20y1%3D%2242.89473684210526%22%20x2%3D%22125%22%20y2%3D%2242.89473684210526%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22120%22%20y1%3D%2237.89473684210526%22%20x2%3D%22120%22%20y2%3D%2247.89473684210526%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22116.75%22%20y1%3D%2239.64473684210526%22%20x2%3D%22123.25%22%20y2%3D%2246.14473684210526%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.2%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22116.75%22%20y1%3D%2246.14473684210526%22%20x2%3D%22123.25%22%20y2%3D%2239.64473684210526%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.2%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22175%22%20y1%3D%2268.5%22%20x2%3D%22185%22%20y2%3D%2268.5%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22180%22%20y1%3D%2263.5%22%20x2%3D%22180%22%20y2%3D%2273.5%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22176.75%22%20y1%3D%2265.25%22%20x2%3D%22183.25%22%20y2%3D%2271.75%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.2%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22176.75%22%20y1%3D%2271.75%22%20x2%3D%22183.25%22%20y2%3D%2265.25%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.2%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"} alt={"Linear interpolation curve through the eight data points across four time ranges. A teal sparkle at the start of each interior range marks the linearly interpolated value at that boundary."} className="illustration" style={{
  width: '100%',
  maxWidth: '320px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

export const InterpolationStepwise = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20240%20110%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cline%20x1%3D%2260%22%20y1%3D%226%22%20x2%3D%2260%22%20y2%3D%22104%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22120%22%20y1%3D%226%22%20x2%3D%22120%22%20y2%3D%22104%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22180%22%20y1%3D%226%22%20x2%3D%22180%22%20y2%3D%22104%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cpath%20d%3D%22M%2025%2030%20L%2045%2030%20L%2045%2045%20L%2078%2045%20L%2078%2025%20L%20102%2025%20L%20102%2050%20L%20140%2050%20L%20140%2035%20L%20165%2035%20L%20165%2055%20L%20195%2055%20L%20195%2082%20L%20215%2082%20L%20215%2040%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%2222%22%20y1%3D%2226%22%20x2%3D%2228%22%20y2%3D%2234%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2222%22%20y1%3D%2234%22%20x2%3D%2228%22%20y2%3D%2226%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2242%22%20y1%3D%2241%22%20x2%3D%2248%22%20y2%3D%2249%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2242%22%20y1%3D%2249%22%20x2%3D%2248%22%20y2%3D%2241%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2275%22%20y1%3D%2221%22%20x2%3D%2281%22%20y2%3D%2229%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2275%22%20y1%3D%2229%22%20x2%3D%2281%22%20y2%3D%2221%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2299%22%20y1%3D%2246%22%20x2%3D%22105%22%20y2%3D%2254%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2299%22%20y1%3D%2254%22%20x2%3D%22105%22%20y2%3D%2246%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22137%22%20y1%3D%2231%22%20x2%3D%22143%22%20y2%3D%2239%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22137%22%20y1%3D%2239%22%20x2%3D%22143%22%20y2%3D%2231%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22162%22%20y1%3D%2251%22%20x2%3D%22168%22%20y2%3D%2259%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22162%22%20y1%3D%2259%22%20x2%3D%22168%22%20y2%3D%2251%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22192%22%20y1%3D%2278%22%20x2%3D%22198%22%20y2%3D%2286%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22192%22%20y1%3D%2286%22%20x2%3D%22198%22%20y2%3D%2278%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22212%22%20y1%3D%2236%22%20x2%3D%22218%22%20y2%3D%2244%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22212%22%20y1%3D%2244%22%20x2%3D%22218%22%20y2%3D%2236%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2255%22%20y1%3D%2245%22%20x2%3D%2265%22%20y2%3D%2245%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2260%22%20y1%3D%2240%22%20x2%3D%2260%22%20y2%3D%2250%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2256.75%22%20y1%3D%2241.75%22%20x2%3D%2263.25%22%20y2%3D%2248.25%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.2%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2256.75%22%20y1%3D%2248.25%22%20x2%3D%2263.25%22%20y2%3D%2241.75%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.2%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22115%22%20y1%3D%2250%22%20x2%3D%22125%22%20y2%3D%2250%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22120%22%20y1%3D%2245%22%20x2%3D%22120%22%20y2%3D%2255%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22116.75%22%20y1%3D%2246.75%22%20x2%3D%22123.25%22%20y2%3D%2253.25%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.2%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22116.75%22%20y1%3D%2253.25%22%20x2%3D%22123.25%22%20y2%3D%2246.75%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.2%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22175%22%20y1%3D%2255%22%20x2%3D%22185%22%20y2%3D%2255%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22180%22%20y1%3D%2250%22%20x2%3D%22180%22%20y2%3D%2260%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22176.75%22%20y1%3D%2251.75%22%20x2%3D%22183.25%22%20y2%3D%2258.25%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.2%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22176.75%22%20y1%3D%2258.25%22%20x2%3D%22183.25%22%20y2%3D%2251.75%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%221.2%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"} alt={"Stepwise curve through the eight data points across four time ranges. A teal sparkle at the start of each interior range marks the interpolated value, which equals the most recent data point value."} className="illustration" style={{
  width: '100%',
  maxWidth: '320px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

export const InterpolationDataPoints = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20240%20110%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cline%20x1%3D%2260%22%20y1%3D%226%22%20x2%3D%2260%22%20y2%3D%22104%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22120%22%20y1%3D%226%22%20x2%3D%22120%22%20y2%3D%22104%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22180%22%20y1%3D%226%22%20x2%3D%22180%22%20y2%3D%22104%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%2222%22%20y1%3D%2226%22%20x2%3D%2228%22%20y2%3D%2234%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2222%22%20y1%3D%2234%22%20x2%3D%2228%22%20y2%3D%2226%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2242%22%20y1%3D%2241%22%20x2%3D%2248%22%20y2%3D%2249%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2242%22%20y1%3D%2249%22%20x2%3D%2248%22%20y2%3D%2241%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2275%22%20y1%3D%2221%22%20x2%3D%2281%22%20y2%3D%2229%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2275%22%20y1%3D%2229%22%20x2%3D%2281%22%20y2%3D%2221%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2299%22%20y1%3D%2246%22%20x2%3D%22105%22%20y2%3D%2254%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2299%22%20y1%3D%2254%22%20x2%3D%22105%22%20y2%3D%2246%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22137%22%20y1%3D%2231%22%20x2%3D%22143%22%20y2%3D%2239%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22137%22%20y1%3D%2239%22%20x2%3D%22143%22%20y2%3D%2231%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22162%22%20y1%3D%2251%22%20x2%3D%22168%22%20y2%3D%2259%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22162%22%20y1%3D%2259%22%20x2%3D%22168%22%20y2%3D%2251%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22192%22%20y1%3D%2278%22%20x2%3D%22198%22%20y2%3D%2286%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22192%22%20y1%3D%2286%22%20x2%3D%22198%22%20y2%3D%2278%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22212%22%20y1%3D%2236%22%20x2%3D%22218%22%20y2%3D%2244%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22212%22%20y1%3D%2244%22%20x2%3D%22218%22%20y2%3D%2236%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"} alt={"Four time ranges separated by vertical dividers, with eight scattered data points marked with X symbols distributed across the ranges and no line connecting them."} className="illustration" style={{
  width: '100%',
  maxWidth: '320px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

export const SumAggregate = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20484%20150%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cline%20x1%3D%2240%22%20y1%3D%2210%22%20x2%3D%2240%22%20y2%3D%22145%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22124%22%20y1%3D%2210%22%20x2%3D%22124%22%20y2%3D%22145%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22208%22%20y1%3D%2210%22%20x2%3D%22208%22%20y2%3D%22145%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22292%22%20y1%3D%2210%22%20x2%3D%22292%22%20y2%3D%22145%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22376%22%20y1%3D%2210%22%20x2%3D%22376%22%20y2%3D%22145%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22460%22%20y1%3D%2210%22%20x2%3D%22460%22%20y2%3D%22145%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Ctext%20x%3D%2226%22%20y%3D%22138%22%20fill%3D%22currentColor%22%20font-size%3D%2212%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E1%3C%2Ftext%3E%3Cline%20x1%3D%2237%22%20y1%3D%22134%22%20x2%3D%2243%22%20y2%3D%22134%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.2%22%20stroke-opacity%3D%220.7%22%2F%3E%3Ctext%20x%3D%2226%22%20y%3D%22110%22%20fill%3D%22currentColor%22%20font-size%3D%2212%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E2%3C%2Ftext%3E%3Cline%20x1%3D%2237%22%20y1%3D%22106%22%20x2%3D%2243%22%20y2%3D%22106%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.2%22%20stroke-opacity%3D%220.7%22%2F%3E%3Ctext%20x%3D%2226%22%20y%3D%2282%22%20fill%3D%22currentColor%22%20font-size%3D%2212%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E3%3C%2Ftext%3E%3Cline%20x1%3D%2237%22%20y1%3D%2278%22%20x2%3D%2243%22%20y2%3D%2278%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.2%22%20stroke-opacity%3D%220.7%22%2F%3E%3Ctext%20x%3D%2226%22%20y%3D%2254%22%20fill%3D%22currentColor%22%20font-size%3D%2212%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E4%3C%2Ftext%3E%3Cline%20x1%3D%2237%22%20y1%3D%2250%22%20x2%3D%2243%22%20y2%3D%2250%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.2%22%20stroke-opacity%3D%220.7%22%2F%3E%3Ctext%20x%3D%2226%22%20y%3D%2226%22%20fill%3D%22currentColor%22%20font-size%3D%2212%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E5%3C%2Ftext%3E%3Cline%20x1%3D%2237%22%20y1%3D%2222%22%20x2%3D%2243%22%20y2%3D%2222%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.2%22%20stroke-opacity%3D%220.7%22%2F%3E%3Ctext%20x%3D%2282%22%20y%3D%22124%22%20fill%3D%22currentColor%22%20font-size%3D%2211%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E5%3D5%3C%2Ftext%3E%3Ctext%20x%3D%22166%22%20y%3D%22124%22%20fill%3D%22currentColor%22%20font-size%3D%2211%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E4%2B3%2B4%3D11%3C%2Ftext%3E%3Ctext%20x%3D%22250%22%20y%3D%22124%22%20fill%3D%22currentColor%22%20font-size%3D%2211%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E2%2B3%3D5%3C%2Ftext%3E%3Ctext%20x%3D%22334%22%20y%3D%22124%22%20fill%3D%22currentColor%22%20font-size%3D%2211%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E1%2B3%2B4%3D8%3C%2Ftext%3E%3Ctext%20x%3D%22418%22%20y%3D%22124%22%20fill%3D%22currentColor%22%20font-size%3D%2211%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E5%3D5%3C%2Ftext%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%2279%22%20y1%3D%2218%22%20x2%3D%2285%22%20y2%3D%2226%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2279%22%20y1%3D%2226%22%20x2%3D%2285%22%20y2%3D%2218%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22133%22%20y1%3D%2246%22%20x2%3D%22139%22%20y2%3D%2254%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22133%22%20y1%3D%2254%22%20x2%3D%22139%22%20y2%3D%2246%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22163%22%20y1%3D%2274%22%20x2%3D%22169%22%20y2%3D%2282%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22163%22%20y1%3D%2282%22%20x2%3D%22169%22%20y2%3D%2274%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22193%22%20y1%3D%2246%22%20x2%3D%22199%22%20y2%3D%2254%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22193%22%20y1%3D%2254%22%20x2%3D%22199%22%20y2%3D%2246%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22217%22%20y1%3D%22102%22%20x2%3D%22223%22%20y2%3D%22110%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22217%22%20y1%3D%22110%22%20x2%3D%22223%22%20y2%3D%22102%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22277%22%20y1%3D%2274%22%20x2%3D%22283%22%20y2%3D%2282%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22277%22%20y1%3D%2282%22%20x2%3D%22283%22%20y2%3D%2274%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22301%22%20y1%3D%22130%22%20x2%3D%22307%22%20y2%3D%22138%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22301%22%20y1%3D%22138%22%20x2%3D%22307%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22331%22%20y1%3D%2274%22%20x2%3D%22337%22%20y2%3D%2282%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22331%22%20y1%3D%2282%22%20x2%3D%22337%22%20y2%3D%2274%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22361%22%20y1%3D%2246%22%20x2%3D%22367%22%20y2%3D%2254%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22361%22%20y1%3D%2254%22%20x2%3D%22367%22%20y2%3D%2246%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22415%22%20y1%3D%2218%22%20x2%3D%22421%22%20y2%3D%2226%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22415%22%20y1%3D%2226%22%20x2%3D%22421%22%20y2%3D%2218%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"} alt={"Five labelled time ranges divide the chart, with a y-axis from 1 to 5 on the left and small ticks at each integer value. Each range contains one or more data points marked with X symbols at integer values. A sum expression sits between the rows for values 2 and 1 inside each range: \"5=5\" in the first range, \"4+3+4=11\" in the second, \"2+3=5\" in the third, \"1+3+4=8\" in the fourth (with the value-1 data point drawn just below the label), and \"5=5\" in the fifth, illustrating how the sum function adds the values of all data points in each time range."} className="illustration" style={{
  width: '100%',
  maxWidth: '720px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

export const CountAggregate = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20484%20130%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cline%20x1%3D%2267%22%20y1%3D%2210%22%20x2%3D%2267%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22137%22%20y1%3D%2210%22%20x2%3D%22137%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22207%22%20y1%3D%2210%22%20x2%3D%22207%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22277%22%20y1%3D%2210%22%20x2%3D%22277%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22347%22%20y1%3D%2210%22%20x2%3D%22347%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22417%22%20y1%3D%2210%22%20x2%3D%22417%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Ctext%20x%3D%22102%22%20y%3D%22110%22%20fill%3D%22currentColor%22%20font-size%3D%2211%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E3%3C%2Ftext%3E%3Ctext%20x%3D%22172%22%20y%3D%22110%22%20fill%3D%22currentColor%22%20font-size%3D%2211%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E2%3C%2Ftext%3E%3Ctext%20x%3D%22242%22%20y%3D%22110%22%20fill%3D%22currentColor%22%20font-size%3D%2211%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E3%3C%2Ftext%3E%3Ctext%20x%3D%22312%22%20y%3D%22110%22%20fill%3D%22currentColor%22%20font-size%3D%2211%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E2%3C%2Ftext%3E%3Ctext%20x%3D%22382%22%20y%3D%22110%22%20fill%3D%22currentColor%22%20font-size%3D%2211%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E1%3C%2Ftext%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%2236%22%20y1%3D%2246%22%20x2%3D%2242%22%20y2%3D%2254%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2236%22%20y1%3D%2254%22%20x2%3D%2242%22%20y2%3D%2246%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2276%22%20y1%3D%2241%22%20x2%3D%2282%22%20y2%3D%2249%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2276%22%20y1%3D%2249%22%20x2%3D%2282%22%20y2%3D%2241%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2299%22%20y1%3D%2258%22%20x2%3D%22105%22%20y2%3D%2266%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2299%22%20y1%3D%2266%22%20x2%3D%22105%22%20y2%3D%2258%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22122%22%20y1%3D%2246%22%20x2%3D%22128%22%20y2%3D%2254%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22122%22%20y1%3D%2254%22%20x2%3D%22128%22%20y2%3D%2246%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22154%22%20y1%3D%2251%22%20x2%3D%22160%22%20y2%3D%2259%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22154%22%20y1%3D%2259%22%20x2%3D%22160%22%20y2%3D%2251%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22184%22%20y1%3D%2264%22%20x2%3D%22190%22%20y2%3D%2272%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22184%22%20y1%3D%2272%22%20x2%3D%22190%22%20y2%3D%2264%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22214%22%20y1%3D%2246%22%20x2%3D%22220%22%20y2%3D%2254%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22214%22%20y1%3D%2254%22%20x2%3D%22220%22%20y2%3D%2246%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22242%22%20y1%3D%2271%22%20x2%3D%22248%22%20y2%3D%2279%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22242%22%20y1%3D%2279%22%20x2%3D%22248%22%20y2%3D%2271%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22266%22%20y1%3D%2256%22%20x2%3D%22272%22%20y2%3D%2264%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22266%22%20y1%3D%2264%22%20x2%3D%22272%22%20y2%3D%2256%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22296%22%20y1%3D%2251%22%20x2%3D%22302%22%20y2%3D%2259%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22296%22%20y1%3D%2259%22%20x2%3D%22302%22%20y2%3D%2251%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22326%22%20y1%3D%2264%22%20x2%3D%22332%22%20y2%3D%2272%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22326%22%20y1%3D%2272%22%20x2%3D%22332%22%20y2%3D%2264%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22379%22%20y1%3D%2256%22%20x2%3D%22385%22%20y2%3D%2264%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22379%22%20y1%3D%2264%22%20x2%3D%22385%22%20y2%3D%2256%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22442%22%20y1%3D%2251%22%20x2%3D%22448%22%20y2%3D%2259%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22442%22%20y1%3D%2259%22%20x2%3D%22448%22%20y2%3D%2251%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"} alt={"Six vertical lines divide the chart into five labelled time ranges. Eleven scattered data points marked with X symbols are distributed across the ranges, with one extra point to the left of the first range and one to the right of the last. The number of data points contained in each range is labelled below the chart: 3, 2, 3, 2, and 1, illustrating how the count function returns the number of stored data points in each time range."} className="illustration" style={{
  width: '100%',
  maxWidth: '720px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

export const MinInterpolatedEdgeExcluded = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20240%20140%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cline%20x1%3D%2240%22%20y1%3D%2215%22%20x2%3D%2240%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22160%22%20y1%3D%2215%22%20x2%3D%22160%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cpath%20d%3D%22M%2020%2035%20L%2072%2072%20L%20125%2055%20L%20195%20120%20L%20220%2095%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%2217%22%20y1%3D%2231%22%20x2%3D%2223%22%20y2%3D%2239%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2217%22%20y1%3D%2239%22%20x2%3D%2223%22%20y2%3D%2231%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2269%22%20y1%3D%2268%22%20x2%3D%2275%22%20y2%3D%2276%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2269%22%20y1%3D%2276%22%20x2%3D%2275%22%20y2%3D%2268%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22122%22%20y1%3D%2251%22%20x2%3D%22128%22%20y2%3D%2259%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22122%22%20y1%3D%2259%22%20x2%3D%22128%22%20y2%3D%2251%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22192%22%20y1%3D%22116%22%20x2%3D%22198%22%20y2%3D%22124%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22192%22%20y1%3D%22124%22%20x2%3D%22198%22%20y2%3D%22116%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22217%22%20y1%3D%2291%22%20x2%3D%22223%22%20y2%3D%2299%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22217%22%20y1%3D%2299%22%20x2%3D%22223%22%20y2%3D%2291%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2260%22%20y1%3D%22115%22%20x2%3D%2268.7711511416821%22%20y2%3D%2286.31085732110894%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%2F%3E%3Cpath%20d%3D%22M%200%200%20L%20-7%20-5%20L%20-7%205%20Z%22%20fill%3D%22%232db4a3%22%20stroke%3D%22none%22%20transform%3D%22translate(70.52538137001852%2C80.57302878533073)%20rotate(-73)%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%22190%22%20y1%3D%2260%22%20x2%3D%22168.78679656440357%22%20y2%3D%2281.21320343559643%22%20stroke%3D%22%23e23a3a%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%2F%3E%3Cpath%20d%3D%22M%200%200%20L%20-7%20-5%20L%20-7%205%20Z%22%20fill%3D%22%23e23a3a%22%20stroke%3D%22none%22%20transform%3D%22translate(164.54415587728428%2C85.45584412271572)%20rotate(135)%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22rotate(135%20179.74695167279506%2070.25304832720494)%22%3E%3Cline%20x1%3D%22175.74695167279506%22%20y1%3D%2266.25304832720494%22%20x2%3D%22183.74695167279506%22%20y2%3D%2274.25304832720494%22%20stroke%3D%22%23e23a3a%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22175.74695167279506%22%20y1%3D%2274.25304832720494%22%20x2%3D%22183.74695167279506%22%20y2%3D%2266.25304832720494%22%20stroke%3D%22%23e23a3a%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"} alt={"Linear curve through five data points across an aggregation range bounded by vertical lines. The curve dips below the lowest stored data point inside the range as it approaches the right boundary, producing a low interpolated value at the edge that the min function ignores. A red arrow with a red X marks that excluded interpolated edge value, and a green arrow points to the lowest stored data point inside the range, which is what the min function returns."} className="illustration" style={{
  width: '100%',
  maxWidth: '320px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

export const MaxInterpolatedEdgeExcluded = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20240%20140%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cline%20x1%3D%2240%22%20y1%3D%2215%22%20x2%3D%2240%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22160%22%20y1%3D%2215%22%20x2%3D%22160%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cpath%20d%3D%22M%2020%2038%20L%2072%20100%20L%20125%2072%20L%20175%2048%20L%20215%20115%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%2217%22%20y1%3D%2234%22%20x2%3D%2223%22%20y2%3D%2242%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2217%22%20y1%3D%2242%22%20x2%3D%2223%22%20y2%3D%2234%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2269%22%20y1%3D%2296%22%20x2%3D%2275%22%20y2%3D%22104%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2269%22%20y1%3D%22104%22%20x2%3D%2275%22%20y2%3D%2296%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22122%22%20y1%3D%2268%22%20x2%3D%22128%22%20y2%3D%2276%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22122%22%20y1%3D%2276%22%20x2%3D%22128%22%20y2%3D%2268%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22172%22%20y1%3D%2244%22%20x2%3D%22178%22%20y2%3D%2252%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22172%22%20y1%3D%2252%22%20x2%3D%22178%22%20y2%3D%2244%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22212%22%20y1%3D%22111%22%20x2%3D%22218%22%20y2%3D%22119%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22212%22%20y1%3D%22119%22%20x2%3D%22218%22%20y2%3D%22111%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2280%22%20y1%3D%2260%22%20x2%3D%22108.97777478867205%22%20y2%3D%2267.76457135307562%22%20stroke%3D%22%232db4a3%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%2F%3E%3Cpath%20d%3D%22M%200%200%20L%20-7%20-5%20L%20-7%205%20Z%22%20fill%3D%22%232db4a3%22%20stroke%3D%22none%22%20transform%3D%22translate(114.77332974640646%2C69.31748562369074)%20rotate(15)%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%22220%22%20y1%3D%2240%22%20x2%3D%22190.45576740963378%22%20y2%3D%2245.20944533000791%22%20stroke%3D%22%23e23a3a%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%2F%3E%3Cpath%20d%3D%22M%200%200%20L%20-7%20-5%20L%20-7%205%20Z%22%20fill%3D%22%23e23a3a%22%20stroke%3D%22none%22%20transform%3D%22translate(184.54692089156052%2C46.25133439600949)%20rotate(170)%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22rotate(170%20205.720287581323%2042.51789857617049)%22%3E%3Cline%20x1%3D%22201.720287581323%22%20y1%3D%2238.51789857617049%22%20x2%3D%22209.720287581323%22%20y2%3D%2246.51789857617049%22%20stroke%3D%22%23e23a3a%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22201.720287581323%22%20y1%3D%2246.51789857617049%22%20x2%3D%22209.720287581323%22%20y2%3D%2238.51789857617049%22%20stroke%3D%22%23e23a3a%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"} alt={"Linear curve through five data points across an aggregation range bounded by vertical lines. A peak data point near the right boundary is marked with a red X to indicate that the high interpolated value at the edge of the range is not considered. A green arrow points to the highest stored data point inside the range, which is what the max function returns."} className="illustration" style={{
  width: '100%',
  maxWidth: '320px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

export const ContinuousRangeNoPrevious = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20484%20130%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cline%20x1%3D%2265%22%20y1%3D%2210%22%20x2%3D%2265%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22150%22%20y1%3D%2210%22%20x2%3D%22150%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22235%22%20y1%3D%2210%22%20x2%3D%22235%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22320%22%20y1%3D%2210%22%20x2%3D%22320%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22405%22%20y1%3D%2210%22%20x2%3D%22405%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Ctext%20x%3D%22107.5%22%20y%3D%2222%22%20fill%3D%22currentColor%22%20font-size%3D%2212%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E1h%3C%2Ftext%3E%3Ctext%20x%3D%22192.5%22%20y%3D%2222%22%20fill%3D%22currentColor%22%20font-size%3D%2212%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E1h%3C%2Ftext%3E%3Ctext%20x%3D%22277.5%22%20y%3D%2222%22%20fill%3D%22currentColor%22%20font-size%3D%2212%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E1h%3C%2Ftext%3E%3Ctext%20x%3D%22362.5%22%20y%3D%2222%22%20fill%3D%22currentColor%22%20font-size%3D%2212%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E1h%3C%2Ftext%3E%3Cpath%20d%3D%22M%20360%20130%20L%20360%2058%20L%20405%2070.11538461538461%20L%20405%20130%20Z%22%20fill%3D%22currentColor%22%20fill-opacity%3D%220.18%22%20stroke%3D%22none%22%2F%3E%3Cline%20x1%3D%22125%22%20y1%3D%2245%22%20x2%3D%22360%22%20y2%3D%2258%22%20stroke%3D%22%23e23a3a%22%20stroke-width%3D%221.4%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22360%22%20y1%3D%2258%22%20x2%3D%22438%22%20y2%3D%2279%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.4%22%20stroke-linecap%3D%22round%22%2F%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%2242%22%20y1%3D%2224%22%20x2%3D%2248%22%20y2%3D%2232%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2242%22%20y1%3D%2232%22%20x2%3D%2248%22%20y2%3D%2224%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2282%22%20y1%3D%2269%22%20x2%3D%2288%22%20y2%3D%2277%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2282%22%20y1%3D%2277%22%20x2%3D%2288%22%20y2%3D%2269%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22122%22%20y1%3D%2241%22%20x2%3D%22128%22%20y2%3D%2249%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22122%22%20y1%3D%2249%22%20x2%3D%22128%22%20y2%3D%2241%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22357%22%20y1%3D%2254%22%20x2%3D%22363%22%20y2%3D%2262%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22357%22%20y1%3D%2262%22%20x2%3D%22363%22%20y2%3D%2254%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22435%22%20y1%3D%2275%22%20x2%3D%22441%22%20y2%3D%2283%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22435%22%20y1%3D%2283%22%20x2%3D%22441%22%20y2%3D%2275%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"} alt={"A continuous time series with five data points across four labelled 1 hour ranges. Two isolated data points sit to the left of all ranges, representing data more than one hour before the time range. A third data point near the start of the first labelled range is connected by a red line to a fourth data point near the end of the last labelled range, because CDF refuses to interpolate from such a distant previous data point. A black segment from that fourth data point continues to a fifth data point past the rightmost range. The area below the line between the fourth data point and the rightmost range boundary is shaded to indicate the only portion where the average aggregate can be computed."} className="illustration" style={{
  width: '100%',
  maxWidth: '720px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

export const ContinuousRange = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20240%20140%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cline%20x1%3D%2277.5%22%20y1%3D%2210%22%20x2%3D%2277.5%22%20y2%3D%22120%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22167.5%22%20y1%3D%2210%22%20x2%3D%22167.5%22%20y2%3D%22120%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cpath%20d%3D%22M%2077.5%20120%20L%2077.5%2064.0909090909091%20L%20102.5%2080%20L%20142.5%2060%20L%20167.5%2077.5%20L%20167.5%20120%20Z%22%20fill%3D%22currentColor%22%20fill-opacity%3D%220.18%22%20stroke%3D%22none%22%2F%3E%3Cpath%20d%3D%22M%2047.5%2045%20L%20102.5%2080%20L%20142.5%2060%20L%20192.5%2095%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%2244.5%22%20y1%3D%2241%22%20x2%3D%2250.5%22%20y2%3D%2249%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2244.5%22%20y1%3D%2249%22%20x2%3D%2250.5%22%20y2%3D%2241%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2299.5%22%20y1%3D%2276%22%20x2%3D%22105.5%22%20y2%3D%2284%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2299.5%22%20y1%3D%2284%22%20x2%3D%22105.5%22%20y2%3D%2276%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22139.5%22%20y1%3D%2256%22%20x2%3D%22145.5%22%20y2%3D%2264%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22139.5%22%20y1%3D%2264%22%20x2%3D%22145.5%22%20y2%3D%2256%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22189.5%22%20y1%3D%2291%22%20x2%3D%22195.5%22%20y2%3D%2299%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22189.5%22%20y1%3D%2299%22%20x2%3D%22195.5%22%20y2%3D%2291%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2281.5%22%20y1%3D%2216%22%20x2%3D%22163.5%22%20y2%3D%2216%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%2281.5%22%20y1%3D%2211%22%20x2%3D%2281.5%22%20y2%3D%2221%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22163.5%22%20y1%3D%2211%22%20x2%3D%22163.5%22%20y2%3D%2221%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Ctext%20x%3D%22122.5%22%20y%3D%2210%22%20fill%3D%22currentColor%22%20font-size%3D%2212%22%20font-weight%3D%22bold%22%20text-anchor%3D%22middle%22%3E2h%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E"} alt={"Continuous curve linearly interpolating the four data points with two vertical lines marking a 2 hour time range, and the area below the curve shaded between the range boundaries to illustrate the aggregate integral."} className="illustration" style={{
  width: '100%',
  maxWidth: '320px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

export const StepwiseRange = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20240%20140%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cline%20x1%3D%2277.5%22%20y1%3D%2210%22%20x2%3D%2277.5%22%20y2%3D%22120%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22167.5%22%20y1%3D%2210%22%20x2%3D%22167.5%22%20y2%3D%22120%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cpath%20d%3D%22M%2077.5%20120%20L%2077.5%2045%20L%20102.5%2045%20L%20102.5%2080%20L%20142.5%2080%20L%20142.5%2060%20L%20167.5%2060%20L%20167.5%20120%20Z%22%20fill%3D%22currentColor%22%20fill-opacity%3D%220.18%22%20stroke%3D%22none%22%2F%3E%3Cpath%20d%3D%22M%2047.5%2045%20L%20102.5%2045%20L%20102.5%2080%20L%20142.5%2080%20L%20142.5%2060%20L%20192.5%2060%20L%20192.5%2095%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%2244.5%22%20y1%3D%2241%22%20x2%3D%2250.5%22%20y2%3D%2249%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2244.5%22%20y1%3D%2249%22%20x2%3D%2250.5%22%20y2%3D%2241%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2299.5%22%20y1%3D%2276%22%20x2%3D%22105.5%22%20y2%3D%2284%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2299.5%22%20y1%3D%2284%22%20x2%3D%22105.5%22%20y2%3D%2276%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22139.5%22%20y1%3D%2256%22%20x2%3D%22145.5%22%20y2%3D%2264%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22139.5%22%20y1%3D%2264%22%20x2%3D%22145.5%22%20y2%3D%2256%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22189.5%22%20y1%3D%2291%22%20x2%3D%22195.5%22%20y2%3D%2299%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22189.5%22%20y1%3D%2299%22%20x2%3D%22195.5%22%20y2%3D%2291%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2281.5%22%20y1%3D%2216%22%20x2%3D%22163.5%22%20y2%3D%2216%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%2281.5%22%20y1%3D%2211%22%20x2%3D%2281.5%22%20y2%3D%2221%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22163.5%22%20y1%3D%2211%22%20x2%3D%22163.5%22%20y2%3D%2221%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Ctext%20x%3D%22122.5%22%20y%3D%2210%22%20fill%3D%22currentColor%22%20font-size%3D%2212%22%20font-weight%3D%22bold%22%20text-anchor%3D%22middle%22%3E2h%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E"} alt={"Stepwise curve through the four data points with two vertical lines marking a 2 hour time range, and the area below the curve shaded between the range boundaries to illustrate the aggregate integral."} className="illustration" style={{
  width: '100%',
  maxWidth: '320px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

export const DataPointsRange = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20240%20140%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cline%20x1%3D%2277.5%22%20y1%3D%2210%22%20x2%3D%2277.5%22%20y2%3D%22120%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22167.5%22%20y1%3D%2210%22%20x2%3D%22167.5%22%20y2%3D%22120%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%2244.5%22%20y1%3D%2241%22%20x2%3D%2250.5%22%20y2%3D%2249%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2244.5%22%20y1%3D%2249%22%20x2%3D%2250.5%22%20y2%3D%2241%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2299.5%22%20y1%3D%2276%22%20x2%3D%22105.5%22%20y2%3D%2284%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2299.5%22%20y1%3D%2284%22%20x2%3D%22105.5%22%20y2%3D%2276%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22139.5%22%20y1%3D%2256%22%20x2%3D%22145.5%22%20y2%3D%2264%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22139.5%22%20y1%3D%2264%22%20x2%3D%22145.5%22%20y2%3D%2256%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22189.5%22%20y1%3D%2291%22%20x2%3D%22195.5%22%20y2%3D%2299%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22189.5%22%20y1%3D%2299%22%20x2%3D%22195.5%22%20y2%3D%2291%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"} alt={"Four scattered data points marked with X symbols and two vertical lines marking the start and end of an aggregation time range that contains some, but not all, of the points."} className="illustration" style={{
  width: '100%',
  maxWidth: '320px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

export const ContinuousAggregates = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20240%20140%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cpath%20d%3D%22M%2047.5%2045%20L%20102.5%2080%20L%20142.5%2060%20L%20192.5%2095%20L%20192.5%20120%20L%2047.5%20120%20Z%22%20fill%3D%22currentColor%22%20fill-opacity%3D%220.18%22%20stroke%3D%22none%22%2F%3E%3Cpath%20d%3D%22M%2047.5%2045%20L%20102.5%2080%20L%20142.5%2060%20L%20192.5%2095%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%2244.5%22%20y1%3D%2241%22%20x2%3D%2250.5%22%20y2%3D%2249%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2244.5%22%20y1%3D%2249%22%20x2%3D%2250.5%22%20y2%3D%2241%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2299.5%22%20y1%3D%2276%22%20x2%3D%22105.5%22%20y2%3D%2284%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2299.5%22%20y1%3D%2284%22%20x2%3D%22105.5%22%20y2%3D%2276%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22139.5%22%20y1%3D%2256%22%20x2%3D%22145.5%22%20y2%3D%2264%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22139.5%22%20y1%3D%2264%22%20x2%3D%22145.5%22%20y2%3D%2256%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22189.5%22%20y1%3D%2291%22%20x2%3D%22195.5%22%20y2%3D%2299%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22189.5%22%20y1%3D%2299%22%20x2%3D%22195.5%22%20y2%3D%2291%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"} alt={"Continuous curve linearly interpolating the four data points with the area between the curve and a baseline shaded, illustrating the area below the curve used to compute the average aggregate."} className="illustration" style={{
  width: '100%',
  maxWidth: '320px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

export const StepwiseAggregates = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20240%20140%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cpath%20d%3D%22M%2047.5%2045%20L%20102.5%2045%20L%20102.5%2080%20L%20142.5%2080%20L%20142.5%2060%20L%20192.5%2060%20L%20192.5%2095%20L%20192.5%20120%20L%2047.5%20120%20Z%22%20fill%3D%22currentColor%22%20fill-opacity%3D%220.18%22%20stroke%3D%22none%22%2F%3E%3Cpath%20d%3D%22M%2047.5%2045%20L%20102.5%2045%20L%20102.5%2080%20L%20142.5%2080%20L%20142.5%2060%20L%20192.5%2060%20L%20192.5%2095%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%2244.5%22%20y1%3D%2241%22%20x2%3D%2250.5%22%20y2%3D%2249%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2244.5%22%20y1%3D%2249%22%20x2%3D%2250.5%22%20y2%3D%2241%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2299.5%22%20y1%3D%2276%22%20x2%3D%22105.5%22%20y2%3D%2284%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2299.5%22%20y1%3D%2284%22%20x2%3D%22105.5%22%20y2%3D%2276%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22139.5%22%20y1%3D%2256%22%20x2%3D%22145.5%22%20y2%3D%2264%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22139.5%22%20y1%3D%2264%22%20x2%3D%22145.5%22%20y2%3D%2256%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22189.5%22%20y1%3D%2291%22%20x2%3D%22195.5%22%20y2%3D%2299%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22189.5%22%20y1%3D%2299%22%20x2%3D%22195.5%22%20y2%3D%2291%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"} alt={"Stepwise curve through the four data points with the area between the curve and a baseline shaded, illustrating the area below the curve used to compute the average aggregate."} className="illustration" style={{
  width: '100%',
  maxWidth: '320px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

export const ContinuousInterpretation = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20240%20140%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cpath%20d%3D%22M%2047.5%2045%20L%20102.5%2080%20L%20142.5%2060%20L%20192.5%2095%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%2244.5%22%20y1%3D%2241%22%20x2%3D%2250.5%22%20y2%3D%2249%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2244.5%22%20y1%3D%2249%22%20x2%3D%2250.5%22%20y2%3D%2241%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2299.5%22%20y1%3D%2276%22%20x2%3D%22105.5%22%20y2%3D%2284%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2299.5%22%20y1%3D%2284%22%20x2%3D%22105.5%22%20y2%3D%2276%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22139.5%22%20y1%3D%2256%22%20x2%3D%22145.5%22%20y2%3D%2264%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22139.5%22%20y1%3D%2264%22%20x2%3D%22145.5%22%20y2%3D%2256%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22189.5%22%20y1%3D%2291%22%20x2%3D%22195.5%22%20y2%3D%2299%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22189.5%22%20y1%3D%2299%22%20x2%3D%22195.5%22%20y2%3D%2291%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"} alt={"The same four data points connected by straight diagonal line segments, representing linear interpolation between samples."} className="illustration" style={{
  width: '100%',
  maxWidth: '320px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

export const StepwiseInterpretation = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20240%20140%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cpath%20d%3D%22M%2047.5%2045%20L%20102.5%2045%20L%20102.5%2080%20L%20142.5%2080%20L%20142.5%2060%20L%20192.5%2060%20L%20192.5%2095%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%2244.5%22%20y1%3D%2241%22%20x2%3D%2250.5%22%20y2%3D%2249%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2244.5%22%20y1%3D%2249%22%20x2%3D%2250.5%22%20y2%3D%2241%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2299.5%22%20y1%3D%2276%22%20x2%3D%22105.5%22%20y2%3D%2284%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2299.5%22%20y1%3D%2284%22%20x2%3D%22105.5%22%20y2%3D%2276%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22139.5%22%20y1%3D%2256%22%20x2%3D%22145.5%22%20y2%3D%2264%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22139.5%22%20y1%3D%2264%22%20x2%3D%22145.5%22%20y2%3D%2256%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22189.5%22%20y1%3D%2291%22%20x2%3D%22195.5%22%20y2%3D%2299%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22189.5%22%20y1%3D%2299%22%20x2%3D%22195.5%22%20y2%3D%2291%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"} alt={"The same four data points connected by horizontal segments that hold the previous value until each new sample, then jump vertically to the new value."} className="illustration" style={{
  width: '100%',
  maxWidth: '320px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

export const DataPoints = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20240%20140%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cg%3E%3Cg%3E%3Cline%20x1%3D%2244.5%22%20y1%3D%2241%22%20x2%3D%2250.5%22%20y2%3D%2249%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2244.5%22%20y1%3D%2249%22%20x2%3D%2250.5%22%20y2%3D%2241%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%2299.5%22%20y1%3D%2276%22%20x2%3D%22105.5%22%20y2%3D%2284%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2299.5%22%20y1%3D%2284%22%20x2%3D%22105.5%22%20y2%3D%2276%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22139.5%22%20y1%3D%2256%22%20x2%3D%22145.5%22%20y2%3D%2264%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22139.5%22%20y1%3D%2264%22%20x2%3D%22145.5%22%20y2%3D%2256%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22189.5%22%20y1%3D%2291%22%20x2%3D%22195.5%22%20y2%3D%2299%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%22189.5%22%20y1%3D%2299%22%20x2%3D%22195.5%22%20y2%3D%2291%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"} alt={"Four scattered data points marked with X symbols, with no line connecting them."} className="illustration" style={{
  width: '100%',
  maxWidth: '320px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

export const GranularityAlignment = () => <img src={"data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20480%20200%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%20font-family%3D%22system-ui%2C%20-apple-system%2C%20Segoe%20UI%2C%20Roboto%2C%20sans-serif%22%3E%3Cstyle%3E%0A%20%20%20%20%20%20svg%20%7B%20color%3A%20%23171717%3B%20%7D%0A%20%20%20%20%20%20%40media%20(prefers-color-scheme%3A%20dark)%20%7B%0A%20%20%20%20%20%20%20%20svg%20%7B%20color%3A%20%23e5e5e5%3B%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E%3Cline%20x1%3D%2272%22%20y1%3D%2214%22%20x2%3D%2272%22%20y2%3D%22166%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22240%22%20y1%3D%2214%22%20x2%3D%22240%22%20y2%3D%22166%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Cline%20x1%3D%22408%22%20y1%3D%2214%22%20x2%3D%22408%22%20y2%3D%22166%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%2F%3E%3Ctext%20x%3D%2272%22%20y%3D%22182%22%20fill%3D%22currentColor%22%20font-size%3D%2212%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E3%3A00%3C%2Ftext%3E%3Ctext%20x%3D%22240%22%20y%3D%22182%22%20fill%3D%22currentColor%22%20font-size%3D%2212%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E4%3A00%3C%2Ftext%3E%3Ctext%20x%3D%22408%22%20y%3D%22182%22%20fill%3D%22currentColor%22%20font-size%3D%2212%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E5%3A00%3C%2Ftext%3E%3Cg%3E%3Cline%20x1%3D%2278%22%20y1%3D%22130%22%20x2%3D%22234%22%20y2%3D%22130%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%2F%3E%3Cline%20x1%3D%2278%22%20y1%3D%22122%22%20x2%3D%2278%22%20y2%3D%22138%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%2F%3E%3Cline%20x1%3D%22234%22%20y1%3D%22122%22%20x2%3D%22234%22%20y2%3D%22138%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%2F%3E%3Ctext%20x%3D%22156%22%20y%3D%22118%22%20fill%3D%22currentColor%22%20font-size%3D%2214%22%20font-weight%3D%22bold%22%20text-anchor%3D%22middle%22%3E1h%3C%2Ftext%3E%3C%2Fg%3E%3Cg%3E%3Cline%20x1%3D%22194%22%20y1%3D%2258%22%20x2%3D%22362%22%20y2%3D%2258%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%2F%3E%3Cline%20x1%3D%22194%22%20y1%3D%2250%22%20x2%3D%22194%22%20y2%3D%2266%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%2F%3E%3Cline%20x1%3D%22362%22%20y1%3D%2250%22%20x2%3D%22362%22%20y2%3D%2266%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%2F%3E%3Ctext%20x%3D%22278%22%20y%3D%2246%22%20fill%3D%22currentColor%22%20font-size%3D%2214%22%20font-weight%3D%22bold%22%20text-anchor%3D%22middle%22%3E60m%3C%2Ftext%3E%3C%2Fg%3E%3Ctext%20x%3D%22194%22%20y%3D%2280%22%20fill%3D%22currentColor%22%20font-size%3D%2212%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E3%3A43%3A25%3C%2Ftext%3E%3Ctext%20x%3D%22362%22%20y%3D%2280%22%20fill%3D%22currentColor%22%20font-size%3D%2212%22%20text-anchor%3D%22middle%22%20opacity%3D%220.7%22%3E4%3A43%3A25%3C%2Ftext%3E%3C%2Fsvg%3E"} alt={"Hour boundaries at 3:00, 4:00, and 5:00. A 1 hour aggregate aligns to 3:00-4:00. A 60 minute window from start time 3:43:25 runs to 4:43:25 and crosses the 4:00 boundary."} className="illustration" style={{
  width: '100%',
  maxWidth: '720px',
  height: 'auto',
  display: 'block',
  margin: '0 auto'
}} />;

<Info>
  Examples use `externalId` for asset-centric projects. For data modeling, use `instanceId` instead. See [Time series and datapoints](/api-reference/concepts/20230101/time-series-data) for details.
</Info>

Learn how Cognite Data Fusion **aggregates** and **interpolates** time series data, and see the details about the available [aggregation functions](#aggregation-functions).

## Aggregation in Cognite Data Fusion

To improve **performance** and to reduce the amount of data transferred in query responses, Cognite Data Fusion **pre-calculates** the most common **aggregates** for numerical data points in time series. These aggregates are available with **millisecond response time** even when you are querying across large data sets.

In your queries, you can specify one or more aggregates (for example `average`, `min` and `max`) and also the **time granularity** for the aggregates (for example `1h` for one hour).

Aggregates are aligned to the start time modulo of the granularity unit. If you ask for daily average temperatures since Monday afternoon last week, the first aggregated data point will contain averages for the whole of Monday, the second for Tuesday, etc.

<Note>
  Cognite Data Fusion determines aggregate alignment based only on the granularity unit. If you specify hour aggregates, and the start time of the request is in the middle of the hour, the start time will be rounded down to the start time of the hour.

  As a result, you can get different results if you aggregate over 60 minutes than if you aggregate over 1 hour because the two queries are aligned differently. For example, if the start time is `3:43:25`:

  <Frame>
    <GranularityAlignment />
  </Frame>
</Note>

### Aggregating data points

Aggregation is to group together the values of many data points to form a single summary value. For example, the `count` aggregate gives the number of data points for a time range. The timestamp of the aggregate marks the beginning of the time range.

### Interpolating data points

Interpolation is to construct new data points within the range of a discrete set of known data points. The returned data points have a timestamp and a value, where the value represents the interpolated value at the time of the timestamp. The interpolation method depends on whether the time series is **stepwise** or **continuous**. Interpolated data points aren't stored and are only visible as the aggregation/interpolation results.

### Stepwise vs continuous

Interpolation and aggregation depend on how the time series is interpreted between the stored data points. A stepwise time series is assumed to keep its last reported value until a new value comes in, and then immediately jump to that new value. A continuous time series is assumed to gradually change between the stored data points and is modeled with linear interpolation.

<table style={{ tableLayout: 'fixed', width: '100%' }}>
  <tbody>
    <tr>
      <th style={{ width: '33.33%' }}>Data points <Frame><DataPoints /></Frame></th>
      <th style={{ width: '33.33%' }}>Stepwise interpretation <Frame><StepwiseInterpretation /></Frame></th>
      <th style={{ width: '33.33%' }}>Continuous interpretation <Frame><ContinuousInterpretation /></Frame></th>
    </tr>
  </tbody>
</table>

How the times series is interpreted affects the value of aggregates. For example, the `average` aggregate, which is based on the average distance to zero, will be calculated as the area below the curve, divided by the size of the time range.

<table style={{ tableLayout: 'fixed', width: '100%' }}>
  <tbody>
    <tr>
      <th style={{ width: '50%' }}>Stepwise interpretation <Frame><StepwiseAggregates /></Frame></th>
      <th style={{ width: '50%' }}>Continuous interpretation <Frame><ContinuousAggregates /></Frame></th>
    </tr>
  </tbody>
</table>

### Granularity

Granularity defines the time range that each aggregate is calculated from. It consists of a time unit and a size. Valid time units are `day` or `d`, `hour`or `h`, `minute` or `m` and `second` or `s`, for example, `2h` means that each time range should be 2 hours wide, `3m` means 3 minutes.

The value of an aggregate for a time range may also depend on data outside of the time range because lines have to be drawn to the edge of the time range to compute the aggregates.

<table style={{ tableLayout: 'fixed', width: '100%' }}>
  <tbody>
    <tr>
      <th style={{ width: '33.33%' }}>Data points <Frame><DataPointsRange /></Frame></th>
      <th style={{ width: '33.33%' }}>Stepwise interpretation <Frame><StepwiseRange /></Frame></th>
      <th style={{ width: '33.33%' }}>Continuous interpretation <Frame><ContinuousRange /></Frame></th>
    </tr>
  </tbody>
</table>

### Missing data

CDF doesn't return aggregates or interpolations for time ranges that have no data points, even if there are previous and next data points present for that period. As a result, the returned aggregates may skip large periods of time if the underlying data is sparse.

### Previous and next data point

To interpolate a time series to the edges of the time range, many aggregates and interpolations depend on knowing the last data point before the time range, and the first data point after.

For **continuous** time series, CDF doesn't use the previous and next data points if they're more than one hour away from the time range. This is to avoid interpolating data when the underlying sensor has been down for an extended period of time.

For **stepwise** series, CDF uses the previous and next data points regardless of how distant they are.

We do not *extrapolate* backward from the first point in a time series or forward from the last point.
This is also the case in stepwise time series, even though they are assumed to continuously maintain the value of the previous data point until the next point appears.
The rationale behind this is that we can not know the reason that the sensor isn't sending new data: it could be because the value is unchanged, or because the sensor is down.
We want to avoid implying that the sensor is always up.

## Unexpected aggregation results

### Average can be higher than max (or lower than min)

The `average` aggregate is **time-weighted**, not a simple arithmetic mean of stored data points. For continuous time series (`isStep=false`), CDF linearly interpolates between data points and computes the integral of the resulting curve divided by the time range.

Because `min` and `max` only consider **stored** data points (not interpolated values), the average can fall outside the min/max range.

Consider a continuous time series with these data points:

| Timestamp | Value |
| --------- | ----- |
| 13:30:00  | 0.0   |
| 13:45:00  | 0.0   |
| 14:00:00  | 1.0   |

If you query with `granularity="15m"` and `aggregates=["average", "min", "max"]`, the window from 13:45 to 14:00 contains only one stored data point (value `0.0` at 13:45).

However, CDF knows the next data point is `1.0` at 14:00, so it interpolates a straight line from `0.0` to `1.0` across the window. The result:

* `min` = `0.0` (only stored data points)
* `max` = `0.0` (only stored data points)
* `average` = `0.5` (area under the interpolated line / time range)

### Average vs arithmetic mean

The `average` aggregate and the arithmetic mean of data points are different calculations:

| Aspect                      | `average` aggregate                             | Arithmetic mean                                  |
| --------------------------- | ----------------------------------------------- | ------------------------------------------------ |
| **Method**                  | Integral of the interpolated curve / time range | Sum of data point values / number of data points |
| **Considers interpolation** | Yes                                             | No                                               |
| **Affected by `isStep`**    | Yes                                             | No                                               |

<Tip>
  To retrieve the arithmetic mean instead, request `sum` and `count` aggregates and compute `sum / count` locally.
</Tip>

### Granularity rounding

Aggregate intervals are aligned to the **start of the granularity unit**, not to your query's start time. When you use relative time expressions like `start="2w-ago"`, the actual start time depends on when you send the request. CDF then rounds this down to the nearest granularity boundary.

For example, if you query at 14:30 on August 5 with `start="2w-ago"` and `granularity="14d"`:

1. `2w-ago` resolves to 14:30 on July 22.
2. CDF rounds down to midnight UTC July 22 (or midnight in the specified time zone, if set).
3. 14 days from midnight July 22 is midnight August 5, which is *before* your query end time (`now` = 14:30 August 5).
4. CDF returns **two** aggregate periods instead of one.

<Tip>
  To avoid unexpected period boundaries, use explicit timestamps instead of relative expressions.
</Tip>

## Aggregation functions

To use the aggregation functions, you construct requests that look like this:

```json wrap theme={"languages":{"custom":["/_languages/kuiper.json","../_languages/kuiper.json"]}}
POST /api/v1/projects/{project}/timeseries/data/list
Content-Type: application/json

{
  "items": [
    {
      "limit": 10000,
      "externalId": "your external id",
      "aggregates": ["aggregate function 1","aggregate function 2"],
      "granularity": "1h",
      "start": 1541424400000,
      "end":"now"
    }
  ]
}
```

Cognite Data Fusion (CDF) supports the aggregation functions described below.

| Function                                     | How it's calculated                                                                                              | When to use                                                                |
| -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| [average](#average)                          | Integral of time series divided by the size of time range.                                                       | Downsampling many noisy RAW data points.                                   |
| [max](#max)                                  | The highest value of all stored data points.                                                                     |                                                                            |
| [maxDatapoint](#maxDatapoint)                | The highest value, along with its timestamp, of all stored data points.                                          |                                                                            |
| [min](#min)                                  | The lowest value of all stored data points.                                                                      |                                                                            |
| [minDatapoint](#minDatapoint)                | The lowest value, along with its timestamp, of all stored data points.                                           |                                                                            |
| [count](#count)                              | The count of stored data points.                                                                                 |                                                                            |
| [sum](#sum)                                  | The sum of values of all stored data points.                                                                     |                                                                            |
| [interpolation](#interpolation)              | The interpolated value at the start of each time range.                                                          | Interpolating sparse irregular data to regularly spaced time series.       |
| [stepInterpolation](#stepinterpolation)      | The interpolated value at the start of each time range, treating time series as stepwise.                        |                                                                            |
| [continuousVariance](#continuousvariance)    | The variance of the underlying function when assuming linear or step behavior between data points.               | Uneven spacing between data points, if interpolation is a good assumption. |
| [discreteVariance](#discretevariance)        | The variance of the discrete set of data points, no weighting for density of points in time.                     | Evenly spaced data points.                                                 |
| [totalVariation](#totalvariation)            | The sum of absolute differences between neighboring data points in a period. *(Deprecated — retired 2027-04-21)* | Data quality checks or outlier detection.                                  |
| [countGood](#status-code-aggregates)         | The count of stored data points with a good status code.                                                         |                                                                            |
| [countUncertain](#status-code-aggregates)    | The count of stored data points with an uncertain status code.                                                   |                                                                            |
| [countBad](#status-code-aggregates)          | The count of stored data points with a bad status code.                                                          |                                                                            |
| [durationGood](#status-code-aggregates)      | Duration of data points with a good status code.                                                                 |                                                                            |
| [durationUncertain](#status-code-aggregates) | Duration of data points with an uncertain status code.                                                           |                                                                            |
| [durationBad](#status-code-aggregates)       | Duration of data points with a bad status code.                                                                  |                                                                            |

### average

<table style={{ tableLayout: 'fixed', width: '100%' }}>
  <tbody>
    <tr>
      <th style={{ width: '33.33%' }}>Data points <Frame><DataPointsRange /></Frame></th>
      <th style={{ width: '33.33%' }}>Stepwise interpretation <Frame><StepwiseRange /></Frame></th>
      <th style={{ width: '33.33%' }}>Continuous interpretation <Frame><ContinuousRange /></Frame></th>
    </tr>
  </tbody>
</table>

The `average` function computes the time-weighted average value of the time series, for each time range.
The value is defined as the integral of the time series divided by the length of the time range.
In the figures, this is represented as the average height of the grey area.

<Note>
  The `average` function interpolates between data points, including points outside the time range. This can produce values higher than `max` or lower than `min`. For a worked example, see [unexpected aggregation results](#unexpected-aggregation-results).
</Note>

When calculating the average, there is a difference between the stepwise and continuous data.

The stepwise data always extends to the previous/next data point, no matter the distance. It also extends to end of the period after the last data point.

For a continuous time series, if there is no data previous/next to the time range, or that data is more than 1 hour away,
CDF doesn't interpolate backwards/forwards, and the integral is only done on parts of the time range.
Continuous data ends at the last data point.

<Frame caption="Continuous time series with no previous data points">
  <ContinuousRangeNoPrevious />
</Frame>

### max

For each time range, the `max` function returns the highest value of the stored data points in the time range.

<table style={{ tableLayout: 'fixed', width: '100%' }}>
  <tbody>
    <tr>
      <th>max function <br /><Frame><MaxInterpolatedEdgeExcluded /></Frame></th>
    </tr>
  </tbody>
</table>

The function doesn't include interpolated values at the edges of the time range. This means that the average can be greater than max.

### maxDatapoint

`maxDatapoint` is the same as `max`, but it returns an object with the highest value and its timestamp. If there are multiple data points with the same maximum value, the one with the earliest timestamp is returned. If `includeStatus` is true, we also return the status code where it is not `Good`.

### min

For each time range, the `min` function returns the lowest value of all stored data points.

<table style={{ tableLayout: 'fixed', width: '100%' }}>
  <tbody>
    <tr>
      <th>min function <br /><Frame><MinInterpolatedEdgeExcluded /></Frame></th>
    </tr>
  </tbody>
</table>

The function doesn't include interpolated values at the edges of the time range.

### minDatapoint

`minDatapoint` is the same as `min`, but it returns an object with the lowest value and its timestamp. If there are multiple data points with the same minimum value, the one with the earliest timestamp is returned. If `includeStatus` is true, we also return the status code where it is not `Good`.

### count

The `count` function returns the number of data points for each time range. If there are no data points in a time range, this function returns no data.

<Frame caption="count function">
  <CountAggregate />
</Frame>

### sum

The `sum` function returns the sum of the values of all data points in the time range, or nothing if there are no data points.

<Frame caption="sum function">
  <SumAggregate />
</Frame>

### interpolation

The `interpolation` function interpolates the value of the time series at the start of each time range. The method of interpolation is based on whether the time series is continuous or stepwise.

**Note:** For stepwise time series this is the same as the `stepInterpolation` function.

<table style={{ tableLayout: 'fixed', width: '100%' }}>
  <tbody>
    <tr>
      <th style={{ width: '33.33%' }}>Data points <Frame><InterpolationDataPoints /></Frame></th>
      <th style={{ width: '33.33%' }}>Stepwise interpretation <Frame><InterpolationStepwise /></Frame></th>
      <th style={{ width: '33.33%' }}>Continuous interpretation <Frame><InterpolationContinuous /></Frame></th>
    </tr>
  </tbody>
</table>

### stepInterpolation

Same as `interpolation`, but always treats the time series as stepwise.

### continuousVariance

The variance of a function *f* is the expectation value of *f* squared, minus the square of the expectation value of *f*.

If CDF only has the value of *f* in a finite number of points, there are different approaches to approximate the variance. The continuous variance aggregate is intended for situations where the piecewise linear function that interpolates between the data points is a good approximation. If this function is *f*, CDF defines the continuous variance in a time period from *t*=*a* to *t*=*b* as:

$$
V_c = \frac{1}{b-a}\int_a^b f(t)^2 dt - \left(\frac{1}{b-a}\int_a^b f(t) dt\right)^2
$$

The time intervals between data points can vary due to a sampling setting that tries to capture the behavior of *f* with a piecewise linear function (or a step function) using relatively few data points. These are cases when the continuous variance is a meaningful variance for the function. On the other hand, if the data points are sampled at even time intervals, independently of the value of *f*, the piecewise linear function will cut away extremal points, and CDF will get a variance lower than the actual variance.

### discreteVariance

The `discreteVariance`function is for cases where the data points are measured at regular time intervals, independently of the values they measure. In these cases, CDF can regard the data points as a random sampling of the values in the time period. CDF defines the variance as:

$$
V_d = \frac{1}{n}\sum_{i=1}^n f(t_i)^2 - \left(\frac{1}{n}\sum_{i=1}^n f(t_i)\right)^2
$$

### totalVariation

<Warning>
  The `totalVariation` aggregate for numeric time series is **deprecated** as of April 21, 2026, and **retired** on April 20, 2027. Until the retirement date, the aggregate continues to work as documented. After that date, requests to the time series data list endpoint (`/timeseries/data/list`) that include `totalVariation` return an error. Review integrations that use the API, an SDK, dashboards, or derived pipelines, and migrate to another aggregate or compute the value client-side from raw data points. For more information, see [Deprecated and retired features](/cdf/deprecated).
</Warning>

The `totalVariation` function returns the total absolute change in the function values within a time interval. If the time interval goes from *t*=*a* to *t*=*b* with *n* data points, the total variation is defined as:

$$
V = |f(t_1) - f(a)| + \sum_{i=1}^{n-1} |f(t_{i+1}) - f(t_i)| + |f(b) - f(t_n)|
$$

CDF uses the interpolated values for *f* at *a* and *b*.

<Note>
  Unlike [most other aggregates](/dev/concepts/reference/status_codes#aggregate-behavior), `totalVariation` is not affected by the [`ignoreBadDataPoints`](/api-reference/concepts/20230101/time-series-data) request parameter. Data points treated as bad are always omitted from the `totalVariation` calculation, regardless of the value of `ignoreBadDataPoints`.
</Note>

### status code aggregates

The `count<status>` and `duration<status>` aggregates use the [status code](/dev/concepts/reference/status_codes) of the data points, not the values. Only the [main status codes](/dev/concepts/reference/status_codes#main-status-codes), `Good`, `Uncertain`, and `Bad` are used.

The `count<status>` aggregates returns the number of data point in each interval with the given status.

The `duration<status>` aggregates adds up the duration (milliseconds) the time series has in the given status. Equivalent, the duration that the previous data point has the given status, and is in range.

### state aggregates

<Note>
  These aggregates are only available for [state time series](/dev/concepts/resource_types/state_timeseries).
</Note>

State time series support specialized aggregations for analyzing discrete operational states and state transitions:

| Function                              | How it's calculated                                        | When to use                                           |
| ------------------------------------- | ---------------------------------------------------------- | ----------------------------------------------------- |
| [stateCount](#statecount)             | The number of data points for each state in the time range | Analyzing state frequency within periods              |
| [stateTransitions](#statetransitions) | The number of transitions into each state                  | Detecting state change patterns and equipment cycling |
| [stateDuration](#stateduration)       | The total time (milliseconds) spent in each state          | Calculating uptime, downtime, or state-based KPIs     |

#### stateCount

For each time range and each state, the `stateCount` aggregate returns the number of data points with that state. This only counts data points with a `Good` status (or `Uncertain` if `treatUncertainAsBad` is false).

The results are returned in the `stateAggregates` array, with one entry per state present in the time range.

#### stateTransitions

For each time range and each state, the `stateTransitions` aggregate counts the number of times the equipment transitioned **into** that state from a different state (or bad status).

<Note>
  The first data point of a time series is counted as a transition if it has a `Good` status (or `Uncertain` if `treatUncertainAsBad` is false). Transitioning from no state to an initial state counts as a transition.
</Note>

This is useful for detecting:

* Equipment cycling patterns (frequent `ON`/`OFF` transitions).
* State instability.
* Equipment behavior anomalies.

#### stateDuration

For each time range and each state, the `stateDuration` aggregate returns the total time (in milliseconds) the equipment was in that state.

<Note>
  State durations only extend to the end of an aggregate period if there is a subsequent data point after the period ends.

  For example, if a state changes from `CLOSED` to `OPEN` at 08:00, the `CLOSED` duration will be calculated up to 08:00, and the `OPEN` duration will be zero. This applies regardless of the current time or the end of the aggregate period, unless there is a new data point after the aggregate period ends.
</Note>

This is useful for:

* Calculating uptime/downtime percentages.
* State-based performance metrics.
* Compliance reporting (time in specific operational modes).

<Warning>
  Traditional numeric aggregations (like `min`, `max`, `average`, `sum`, `variance`) are not applicable to state time series and will return an error if requested.
</Warning>
