diff --git a/.github/release-notes/0.3.0.md b/.github/release-notes/0.3.0.md index 5945c154..7639ffd4 100644 --- a/.github/release-notes/0.3.0.md +++ b/.github/release-notes/0.3.0.md @@ -1,43 +1,30 @@ -# Flint 0.3 +Flint 0.3 makes charts easier to explore after they are created. The MCP App can now switch chart types and edit chart properties in place, while the original Flint spec stays compact and readable. -Flint 0.3 makes charts easier to explore after they are created. The MCP App can -now switch between compatible chart types and edit chart properties in place, -while keeping the original Flint spec compact and readable. +### Explore chart types -## Explore chart types - -Move between compatible views without asking the agent to rebuild the chart. -Flint preserves the data roles and derives the details needed by the new chart -type. +Move between compatible views without rebuilding the chart. For example, turn a dense Line Chart of food prices into compact Sparkline rows for easier comparison. Flint preserves the data roles and derives the details for the new chart type. Switching a line chart to a Sparkline in the Flint MCP App -## Edit chart properties +### Edit chart properties -Common chart properties are available directly in the widget. Changes are -immediate, and the available controls follow the selected chart and backend. +Edit common properties directly in the widget. For example, turn labels on in a correlation heatmap to reveal the value in every cell. Controls adapt to the selected chart and backend, and changes appear immediately. Turning labels on for a heatmap in the Flint MCP App -## Flint in Chinese +### Flint in Chinese -The website and documentation are now available in Chinese, including guides for -getting started, authoring charts, and extending Flint. +The website and documentation are now available in Chinese, including guides for getting started, authoring charts, and extending Flint. The Chinese Flint website and documentation -## Smaller updates +### Also in 0.3 - Added backend-neutral chart recommendations and chart transformations. -- Improved sparse area charts, grouped bars, boxplots, Gantt charts, and - Waterfall charts across supported backends. -- Improved semantic formatting for axes, aggregates, and Sparkline averages. -- Sparklines now self-scale each row and no longer expose a shared-Y option. -- Added PNG copy, download, and reset actions to the MCP App. -- Expanded chart-property guidance in the bundled agent skill and reference - documentation. - -See the [changelog](https://github.com/microsoft/flint-chart/blob/main/CHANGELOG.md#030---2026-07-19) -for migration notes and the complete technical summary. +- Improved sparse areas, grouped bars, boxplots, Gantt charts, and Waterfall charts across backends. +- Improved semantic formatting and made Sparkline rows self-scale by default. +- Added PNG copy, download, and reset actions, plus expanded agent guidance. + +See the [changelog](https://github.com/microsoft/flint-chart/blob/main/CHANGELOG.md#030---2026-07-19) for migration notes and the complete technical summary. **Full Changelog**: https://github.com/microsoft/flint-chart/compare/0.2.1...0.3.0 \ No newline at end of file diff --git a/docs/README.md b/docs/README.md index fbcf3cc7..9002ee4a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -851,9 +851,9 @@ interface ChartTemplateDef { ### `OverflowStrategy` -Customizable per-template. The default strategy in `filter-overflow.ts` handles: -connected marks (keep all for continuity), user sorts, auto-sorts, -bar sum-aggregate, numeric sort, first-N. +Customizable per-template. The default strategy in `filter-overflow.ts` keeps +the first values in the selected display order: explicit user sort, canonical +semantic order, numeric order, then data encounter order. ```typescript type OverflowStrategy = ( @@ -1009,13 +1009,14 @@ When discrete channels overflow the canvas budget, the library: count, placeholder string 5. Emits `ChartWarning` for the UI -The default overflow strategy priority: -1. Connected marks (line, area) → keep all (truncation breaks continuity) -2. User-specified sort → keep top/bottom N by sort order -3. Quantitative opposite axis → sort by opposite, keep top N -4. Bar with count aggregate → sum-aggregate and keep top N -5. Numeric field → numeric sort, keep first N -6. Fallback → keep first N in data order +The default overflow strategy follows the chart's display order: +1. User-specified sort → keep the first N values in that order +2. Canonical semantic order (months, ranks, quarters, etc.) → keep the first N +3. Numeric discrete field → numeric ascending, keep the first N +4. Fallback → keep the first N in data encounter order + +Overflow does not introduce a measure-based top-N ranking. Select an explicit +value sort when the largest or smallest categories should be retained. --- diff --git a/docs/architecture.md b/docs/architecture.md index efa192cf..dd11bf70 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -39,10 +39,10 @@ Most design logic lives in Stages 1–2 and is identical across backends. |-------|------------|----------------|-------------| | **1. Compiler frontend** | Resolve semantic context | Phase 0 — `resolveChannelSemantics()` | `ChannelSemantics` per channel | | **2. Optimizer** | Fit layout to canvas | Phase 1 — `computeLayout()`, `filterOverflow()` | `LayoutResult`, truncated data | -| **3. Code generator** | Emit library-native spec | Phase 2 — `build*Encodings()`, `template.instantiate()` | VL / EC / CJS spec | +| **3. Code generator** | Emit backend-native output | Phase 2 — `build*Encodings()`, `template.instantiate()` | VL / EC / CJS spec or Office.js program | ```text -assembleVegaLite(input) // or assembleECharts, assembleChartjs +assembleVegaLite(input) // or assembleECharts, assembleChartjs, assembleExcel │ ▼ ══ STAGE 1 — COMPILER FRONTEND (core/) ═════════════════════════ @@ -150,6 +150,27 @@ Registries: `vlTemplateDefs`, `ecTemplateDefs`, `cjsTemplateDefs`. Lookup: `vlGe New backends implement Stage 3 only; the frontend and optimizer stay unchanged. See [Extending backends](/documentation/adding-a-backend). +### Excel backend + +Excel is a Stage 3 backend in `packages/flint-js`, parallel to Vega-Lite, ECharts, and Chart.js. It is not a separate package or an additional architectural layer. + +Office.js is imperative and requires an Excel host, so the backend first builds a typed native-chart artifact (`ExcelNativeChartSpec`) containing the worksheet matrix, native chart type, series bindings, dimensions, axes, labels, legend, and formatting. This versioned artifact is the contract between compilation and execution. + +The native-chart plan is an intermediate representation of the Excel backend, not a second user-authored chart specification. Callers continue to author the same semantic Flint input used by every backend: + +```text +semantic Flint input + │ + ▼ +assembleExcel() → ExcelNativeChartSpec + │ + ├── renderExcelChart(Excel, artifact) → native Excel chart + │ + └── generateOfficeJs(artifact) → standalone Office.js source +``` + +The normal add-in path transports the artifact and passes it, with the live Excel host, to `renderExcelChart()`. `generateOfficeJs()` is an optional projection for callers that need portable Office.js source; it is not a second contract or a required step in rendering. Host concerns such as worksheet selection, image capture, and process lifecycle stay outside compilation. Test harnesses may provide those host services, but they do not define Excel chart semantics. + --- # §6 Inputs @@ -178,9 +199,11 @@ packages/flint-js/src/ ├── vegalite/ Stage 3 — Vega-Lite templates + assembleVegaLite ├── echarts/ Stage 3 — ECharts templates + assembleECharts ├── chartjs/ Stage 3 — Chart.js templates + assembleChartjs +├── excel/ Stage 3 — native Excel chart planning + Office.js generation └── test-data/ gallery fixtures (TEST_GENERATORS) packages/flint-py/ Python port preview (package planned later) +test-harness/excel/ Office.js runner + visual evaluations of Excel artifacts site/ demo site (gallery, editor, documentation) ``` diff --git a/docs/reference-vegalite.md b/docs/reference-vegalite.md index 574c4acc..75f12e48 100644 --- a/docs/reference-vegalite.md +++ b/docs/reference-vegalite.md @@ -6,7 +6,7 @@ The Vega-Lite backend serves as Flint's reference implementation and offers the ## What this page covers -This reference lists the 34 chart types currently supported by the Vega-Lite backend, grouped into 6 categories. Each chart entry shows: +This reference lists the 35 chart types currently supported by the Vega-Lite backend, grouped into 6 categories. Each chart entry shows: - **Encoding channels** — the visual roles accepted in `chart_spec.encodings`, such as `x`, `y`, `color`, `size`, `column`, or `row`. - **Options** — template-specific `chart_spec.chartProperties` keys, including control type, domain, default, availability, and description. @@ -345,6 +345,16 @@ _No template-specific parameters._ | `sortSlices` | choice | `none` (Data order), `descending` (Largest first), `ascending` (Smallest first) | `none` | always | Sort slices | | `independentYAxis` | toggle | on / off | `false` | conditional | Use independent y-scales for facets. | +### Donut Chart + +**Encoding channels:** `size`, `color`, `column`, `row` + +| Parameter | Control | Domain | Default | Availability | Description | +|---|---|---|---|---|---| +| `innerRadius` | number | 0 – 100 (step 5) | `0` | always | Inner radius as a percentage of the outer radius. | +| `sortSlices` | choice | `none` (Data order), `descending` (Largest first), `ascending` (Smallest first) | `none` | always | Sort slices | +| `independentYAxis` | toggle | on / off | `false` | conditional | Use independent y-scales for facets. | + ### ![](chart-icon-rose.svg) Rose Chart **Encoding channels:** `x`, `y`, `color`, `column`, `row` diff --git a/package-lock.json b/package-lock.json index 5ed9d821..83286a2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9615,7 +9615,8 @@ "chart.js": "^4.0.0", "echarts": "^5.0.0 || ^6.0.0", "vega": "^5.0.0 || ^6.0.0", - "vega-lite": "^5.0.0 || ^6.0.0" + "vega-lite": "^5.0.0 || ^6.0.0", + "plotly.js": "^2.0.0 || ^3.0.0" }, "peerDependenciesMeta": { "chart.js": { @@ -9629,6 +9630,9 @@ }, "vega-lite": { "optional": true + }, + "plotly.js": { + "optional": true } } }, @@ -9854,7 +9858,8 @@ "remark-math": "^6.0.0", "vega": "^6.0.0", "vega-embed": "^7.1.0", - "vega-lite": "^6.4.1" + "vega-lite": "^6.4.1", + "plotly.js-dist-min": "^2.35.2" }, "devDependencies": { "@types/react": "^18.3.0", @@ -9864,6 +9869,12 @@ "typescript": "^5.6.0", "vite": "^7.3.5" } + }, + "node_modules/plotly.js-dist-min": { + "version": "2.35.3", + "resolved": "https://registry.npmjs.org/plotly.js-dist-min/-/plotly.js-dist-min-2.35.3.tgz", + "integrity": "sha512-sz2HLP8gkysLx/BanM2PtJTtZ1PLPwdHwMWNri2YxLBy3IOeuDsVQtlmWa4hoK3j/fi4naaD3uZJqH5ozM3zGg==", + "license": "MIT" } } } diff --git a/packages/flint-js/package.json b/packages/flint-js/package.json index f19123cd..43d33893 100644 --- a/packages/flint-js/package.json +++ b/packages/flint-js/package.json @@ -50,11 +50,21 @@ "import": "./dist/echarts/index.js", "require": "./dist/echarts/index.cjs" }, + "./plotly": { + "types": "./dist/plotly/index.d.ts", + "import": "./dist/plotly/index.js", + "require": "./dist/plotly/index.cjs" + }, "./chartjs": { "types": "./dist/chartjs/index.d.ts", "import": "./dist/chartjs/index.js", "require": "./dist/chartjs/index.cjs" }, + "./excel": { + "types": "./dist/excel/index.d.ts", + "import": "./dist/excel/index.js", + "require": "./dist/excel/index.cjs" + }, "./test-data": { "types": "./dist/test-data/index.d.ts", "import": "./dist/test-data/index.js", @@ -87,6 +97,7 @@ }, "peerDependencies": { "chart.js": "^4.0.0", + "plotly.js": "^2.0.0 || ^3.0.0", "echarts": "^5.0.0 || ^6.0.0", "vega": "^5.0.0 || ^6.0.0", "vega-lite": "^5.0.0 || ^6.0.0" @@ -103,6 +114,9 @@ }, "chart.js": { "optional": true + }, + "plotly.js": { + "optional": true } }, "devDependencies": { diff --git a/packages/flint-js/src/core/filter-overflow.ts b/packages/flint-js/src/core/filter-overflow.ts index fee7c815..39cd07b1 100644 --- a/packages/flint-js/src/core/filter-overflow.ts +++ b/packages/flint-js/src/core/filter-overflow.ts @@ -145,7 +145,7 @@ export function filterOverflow( warnings.push({ severity: 'warning', code: 'overflow', - message: `${omittedCount} of ${uniqueValues.length} values in '${fieldName}' were omitted (showing top ${valuesToKeep.length}).`, + message: `${omittedCount} of ${uniqueValues.length} values in '${fieldName}' were omitted (showing first ${valuesToKeep.length} in sort order).`, channel, field: fieldName, }); @@ -153,7 +153,7 @@ export function filterOverflow( truncations.push({ severity: 'warning', code: 'overflow', - message: `${omittedCount} of ${uniqueValues.length} values in '${fieldName}' were omitted (showing top ${valuesToKeep.length}).`, + message: `${omittedCount} of ${uniqueValues.length} values in '${fieldName}' were omitted (showing first ${valuesToKeep.length} in sort order).`, channel, field: fieldName, keptValues: valuesToKeep, @@ -178,19 +178,16 @@ export function filterOverflow( /** * Default overflow strategy: decides which discrete values to keep. * - * - Connected marks (line/area/trail): preserve natural order (first N) * - User-specified sort: respect it - * - Auto-sort: sort by quantitative opposite axis or color, keep top N - * - Bar charts: sum-aggregate for sort (total bar height matters) + * - Canonical semantic order (months, ranks, etc.): keep the first N + * - Numeric categories: keep the first N numerically + * - Otherwise preserve data encounter order */ const defaultOverflowStrategy: OverflowStrategy = ( channel, fieldName, uniqueValues, maxToKeep, context, ) => { const { data, channelSemantics, encodings, allMarkTypes } = context; - // Connected marks need chronological/natural order preserved - const hasConnectedMark = allMarkTypes.has('line') || allMarkTypes.has('area') || allMarkTypes.has('trail'); - // Determine sort intent from user encodings const encoding = encodings[channel]; const sortBy = encoding?.sortBy; @@ -199,7 +196,7 @@ const defaultOverflowStrategy: OverflowStrategy = ( // Infer sort field and direction let sortField: string | undefined; let sortFieldType: string | undefined; - let isDescending = true; + let isDescending = false; if (sortBy) { // User explicitly specified sort @@ -221,46 +218,10 @@ const defaultOverflowStrategy: OverflowStrategy = ( } isDescending = sortOrder === 'descending'; } - } else { - // Auto-detect sort: quantitative opposite axis or quantitative color - const oppositeChannel = channel === 'x' ? 'y' : channel === 'y' ? 'x' : undefined; - - const colorCS = channelSemantics.color; - const oppositeCS = oppositeChannel ? channelSemantics[oppositeChannel] : undefined; - - // For rect marks (heatmaps), color is the primary value — don't auto-sort by it - const markType = allMarkTypes.has('rect') ? 'rect' : undefined; - if (markType !== 'rect' && colorCS?.type === 'quantitative') { - sortField = colorCS.field; - sortFieldType = colorCS.type; - } else if (oppositeCS?.type === 'quantitative') { - sortField = oppositeCS.field; - sortFieldType = oppositeCS.type; - } else { - isDescending = false; - } - } - - // For quantitative field values treated as nominal, sort numerically - const fieldOriginalType = inferVisCategory(data.map(r => r[fieldName])); - if (fieldOriginalType === 'quantitative' || channel === 'color') { - return uniqueValues.sort((a, b) => a - b) - .slice(0, maxToKeep); } - // Facet channels: first N - if (channel === 'column' || channel === 'row') { - return uniqueValues.slice(0, maxToKeep); - } - - // Connected marks: preserve natural order - if (hasConnectedMark) { - return uniqueValues.slice(0, maxToKeep); - } - - // Sort by aggregate of the quantitative sort field + // Explicit value sort takes precedence over the category field's own type. if (sortField && sortFieldType === 'quantitative') { - // Bar charts: sum aggregate (total bar height). Others: max. let aggregateOp = Math.max; let initialValue = -Infinity; if (allMarkTypes.has('bar') && sortField !== channelSemantics.color?.field) { @@ -268,10 +229,10 @@ const defaultOverflowStrategy: OverflowStrategy = ( initialValue = 0; } - const valueAggregates = new Map(); + const valueAggregates = new Map(); for (const row of data) { const fieldValue = row[fieldName]; - const sortValue = row[sortField] || 0; + const sortValue = Number(row[sortField] ?? 0); if (valueAggregates.has(fieldValue)) { valueAggregates.set(fieldValue, aggregateOp(valueAggregates.get(fieldValue)!, sortValue)); } else { @@ -286,9 +247,33 @@ const defaultOverflowStrategy: OverflowStrategy = ( .map(v => v.value); } - // Descending explicit sort: reverse then take first N + const canonicalOrder = channelSemantics[channel]?.ordinalSortOrder; + if (!sortBy && !sortOrder && canonicalOrder?.length) { + const present = new Set(uniqueValues); + const ordered = canonicalOrder.filter(value => present.has(value)); + const canonicalValues = new Set(ordered); + ordered.push(...uniqueValues.filter(value => !canonicalValues.has(value))); + return ordered.slice(0, maxToKeep); + } + + // Match the display default for quantitative values treated as discrete. + const fieldOriginalType = inferVisCategory(data.map(r => r[fieldName])); + if (fieldOriginalType === 'quantitative' || channel === 'color') { + return [...uniqueValues].sort((a, b) => Number(a) - Number(b)) + .slice(0, maxToKeep); + } + + // Facet channels: first N + if (channel === 'column' || channel === 'row') { + return uniqueValues.slice(0, maxToKeep); + } + + // Explicit field-order sort follows the displayed label order. if (sortOrder === 'descending') { - return uniqueValues.reverse().slice(0, maxToKeep); + return [...uniqueValues].sort((a, b) => String(b).localeCompare(String(a), undefined, { numeric: true })).slice(0, maxToKeep); + } + if (sortOrder === 'ascending') { + return [...uniqueValues].sort((a, b) => String(a).localeCompare(String(b), undefined, { numeric: true })).slice(0, maxToKeep); } // Default: first N values diff --git a/packages/flint-js/src/docs/README.md b/packages/flint-js/src/docs/README.md index 3af97308..8a3140a2 100644 --- a/packages/flint-js/src/docs/README.md +++ b/packages/flint-js/src/docs/README.md @@ -851,9 +851,9 @@ interface ChartTemplateDef { ### `OverflowStrategy` -Customizable per-template. The default strategy in `filter-overflow.ts` handles: -connected marks (keep all for continuity), user sorts, auto-sorts, -bar sum-aggregate, numeric sort, first-N. +Customizable per-template. The default strategy in `filter-overflow.ts` keeps +the first values in the selected display order: explicit user sort, canonical +semantic order, numeric order, then data encounter order. ```typescript type OverflowStrategy = ( @@ -1013,13 +1013,14 @@ When discrete channels overflow the canvas budget, the library: count, placeholder string 5. Emits `ChartWarning` for the UI -The default overflow strategy priority: -1. Connected marks (line, area) → keep all (truncation breaks continuity) -2. User-specified sort → keep top/bottom N by sort order -3. Quantitative opposite axis → sort by opposite, keep top N -4. Bar with count aggregate → sum-aggregate and keep top N -5. Numeric field → numeric sort, keep first N -6. Fallback → keep first N in data order +The default overflow strategy follows the chart's display order: +1. User-specified sort → keep the first N values in that order +2. Canonical semantic order (months, ranks, quarters, etc.) → keep the first N +3. Numeric discrete field → numeric ascending, keep the first N +4. Fallback → keep the first N in data encounter order + +Overflow does not introduce a measure-based top-N ranking. Select an explicit +value sort when the largest or smallest categories should be retained. --- diff --git a/packages/flint-js/src/excel/artifact.ts b/packages/flint-js/src/excel/artifact.ts new file mode 100644 index 00000000..728cf0ed --- /dev/null +++ b/packages/flint-js/src/excel/artifact.ts @@ -0,0 +1,104 @@ +import type { ExcelNativeChartSpec } from './types'; + +export const EXCEL_ARTIFACT_SCHEMA = 'flint.excel.chart/v1' as const; + +export const SUPPORTED_EXCEL_CHART_TYPES = [ + 'Area', + 'AreaStacked', + 'BarClustered', + 'BarStacked', + 'BoxWhisker', + 'Bubble', + 'ColumnClustered', + 'ColumnStacked', + 'Doughnut', + 'Funnel', + 'Line', + 'Pie', + 'RadarMarkers', + 'StockOHLC', + 'Sunburst', + 'Treemap', + 'Waterfall', + 'XYScatter', + 'XYScatterLines', +] as const; + +const supportedChartTypes = new Set(SUPPORTED_EXCEL_CHART_TYPES); + +export interface PreparedExcelArtifact { + spec: ExcelNativeChartSpec; + data: Array>; + rows: number; + columns: number; + rangeA1: string; + chartType: string; + numericAxis: boolean; + dateAxis: boolean; + hasAxes: boolean; + isBar: boolean; + isLine: boolean; + seriesCount: number; +} + +export function excelColumnLetter(index: number): string { + if (!Number.isInteger(index) || index < 0) { + throw new Error('Column index must be a non-negative integer.'); + } + let result = ''; + let remaining = index + 1; + while (remaining > 0) { + const digit = (remaining - 1) % 26; + result = String.fromCharCode(65 + digit) + result; + remaining = Math.floor((remaining - 1) / 26); + } + return result; +} + +export function prepareExcelArtifact(value: unknown): PreparedExcelArtifact { + if (!value || typeof value !== 'object') { + throw new Error('Excel artifact must be an object.'); + } + const spec = value as Partial; + if (spec.schema !== EXCEL_ARTIFACT_SCHEMA || spec.kind !== 'chart') { + throw new Error(`Expected a ${EXCEL_ARTIFACT_SCHEMA} chart artifact.`); + } + const chartType = spec.chartType; + if (typeof chartType !== 'string' || !supportedChartTypes.has(chartType)) { + throw new Error(`Unsupported Excel chart type: ${String(spec.chartType)}.`); + } + if (spec.seriesBy !== 'Columns' && spec.seriesBy !== 'Rows') { + throw new Error('Excel artifact seriesBy must be Columns or Rows.'); + } + if (!Array.isArray(spec.data) || spec.data.length < 2 || spec.data.some((row) => !Array.isArray(row))) { + throw new Error('Excel artifact data must contain a header and at least one data row.'); + } + const columns = Math.max(...spec.data.map((row) => row.length)); + if (columns < 2) { + throw new Error('Excel artifact data must contain at least two columns.'); + } + const rows = spec.data.length; + const data = spec.data.map((row) => { + const padded = row.slice(); + while (padded.length < columns) padded.push(null); + return padded; + }); + const seriesCount = /Treemap|Sunburst/i.test(chartType) + ? 1 + : spec.series?.length ?? (spec.seriesBy === 'Rows' ? rows - 1 : columns - 1); + + return { + spec: spec as ExcelNativeChartSpec, + data, + rows, + columns, + rangeA1: `A1:${excelColumnLetter(columns - 1)}${rows}`, + chartType, + numericAxis: /XYScatter|Bubble/i.test(chartType), + dateAxis: /Stock/i.test(chartType), + hasAxes: !/Pie|Doughnut|Treemap|Sunburst|Funnel/i.test(chartType), + isBar: /Bar|Column/i.test(chartType), + isLine: /Line/i.test(chartType), + seriesCount, + }; +} diff --git a/packages/flint-js/src/excel/assemble.ts b/packages/flint-js/src/excel/assemble.ts new file mode 100644 index 00000000..de1b538d --- /dev/null +++ b/packages/flint-js/src/excel/assemble.ts @@ -0,0 +1,576 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Excel chart assembly — Stage-3 code generator for Office.js Excel charts. + * + * Reuses the SAME core analysis pipeline as the other backends: + * Phase 0: convertTemporalData + resolveChannelSemantics → ChannelSemantics + * (this decides each channel's role: quantitative = MEASURE, + * nominal/ordinal/temporal = CATEGORY — no heuristics) + * Stage 3: pivot the long/tidy rows into Excel's WIDE matrix and emit an + * ExcelChartSpec (native Office.js chart description). + * + * Excel charts consume a rectangular range (`charts.add(type, range, seriesBy)`), + * so the long/tidy data is pivoted: category field → first column, series field + * → series columns, measure → cells. Visual STYLE stays native to Excel (its + * own palette/gridlines); only Flint's LAYOUT decisions (which field is the + * category, number format, legend, orientation) are carried over. + */ + +import type { + ChartAssemblyInput, + ChartEncoding, + ChartWarning, + LayoutDeclaration, + SemanticResult, +} from '../core/types'; +import { resolveChannelSemantics, convertTemporalData } from '../core/resolve-semantics'; +import { detectBandedAxisFromSemantics } from '../core/axis-detection'; +import { computeChannelBudgets, deriveStretchCaps, resolveBaseSize } from '../core/compute-layout'; +import { filterOverflow } from '../core/filter-overflow'; +import { formatSpecToExcel } from './chart-types'; +import { excelGetTemplateDef } from './templates'; +import type { + ExcelAxisSpec, + ExcelChartSpec, + ExcelNativeChartSpec, + ExcelNativeSeriesSpec, + ExcelSeriesBy, +} from './types'; + +type Cell = string | number | null; + +const EXCEL_SERIES_COLORS = ['#4472C4', '#ED7D31', '#70AD47', '#FFC000', '#5B9BD5', '#A5A5A5']; + +function niceStep(span: number, targetTicks = 5): number { + if (!(span > 0)) return 1; + const rough = span / targetTicks; + const power = 10 ** Math.floor(Math.log10(rough)); + const fraction = rough / power; + const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10; + return niceFraction * power; +} + +function focusedNumericAxis(values: number[]): Partial> { + const finite = values.filter(Number.isFinite); + if (finite.length === 0) return {}; + const dataMinimum = Math.min(...finite); + const dataMaximum = Math.max(...finite); + const dataSpan = dataMaximum - dataMinimum; + const referenceSpan = dataSpan > 0 ? dataSpan : Math.max(1, Math.abs(dataMaximum) * 0.1); + const majorUnit = niceStep(referenceSpan); + const precision = 10 ** Math.max(0, -Math.floor(Math.log10(majorUnit)) + 1); + const round = (value: number) => Math.round(value * precision) / precision; + if (dataSpan === 0) { + return { + minimumScale: round(dataMinimum - majorUnit), + maximumScale: round(dataMaximum + majorUnit), + majorUnit, + }; + } + const onMajorTick = (value: number) => Math.abs(value / majorUnit - Math.round(value / majorUnit)) < 1e-9; + const minimumScale = dataMinimum >= 0 && dataMinimum <= referenceSpan * 0.1 + ? 0 + : round(Math.floor(dataMinimum / majorUnit) * majorUnit); + const nextMajorTick = Math.ceil(dataMaximum / majorUnit) * majorUnit; + const maximumScale = onMajorTick(dataMaximum) + ? dataMaximum + majorUnit * 0.25 + : nextMajorTick; + return { + minimumScale, + maximumScale: round(maximumScale), + majorUnit, + }; +} + +function temporalLabelSpacing(categoryCount: number, width: number): number | undefined { + const labelBudget = Math.max(12, Math.floor((width - 90) / 14)); + return categoryCount > labelBudget ? Math.ceil(categoryCount / labelBudget) : undefined; +} + +/** Normalize shorthand (`"x": "field"`) to `{ field }`. */ +function normalizeEncodings( + raw: Record, +): Record { + const out: Record = {}; + for (const [ch, v] of Object.entries(raw ?? {})) { + if (v == null) continue; + out[ch] = typeof v === 'string' ? { field: v } : (v as ChartEncoding); + } + return out; +} + +/** Distinct values of a field, first-seen order. */ +function distinct(rows: any[], field: string): Cell[] { + const seen = new Set(); + const out: Cell[] = []; + for (const r of rows) { + const v = r[field]; + if (!seen.has(v)) { seen.add(v); out.push(v as Cell); } + } + return out; +} + +function interpolateMissing(values: Cell[]): Cell[] { + const output = [...values]; + for (let index = 0; index < output.length; index += 1) { + if (output[index] != null) continue; + let previous = index - 1; + let next = index + 1; + while (previous >= 0 && output[previous] == null) previous -= 1; + while (next < output.length && output[next] == null) next += 1; + if (previous < 0 || next >= output.length) continue; + const start = Number(output[previous]); + const end = Number(output[next]); + if (!Number.isFinite(start) || !Number.isFinite(end)) continue; + output[index] = start + ((end - start) * (index - previous)) / (next - previous); + } + return output; +} + +function normalizedBubbleSizes( + rows: any[], + field: string, + type: string | undefined, + width: number, + height: number, +): Map { + const values = rows.map((row) => row[field]).filter((value) => value != null); + const unique = [...new Set(values)]; + const maximumArea = Math.round(Math.max(16, Math.min(361, (width * height / Math.max(1, rows.length)) * 0.6))); + const minimumArea = type === 'quantitative' || type === 'temporal' + ? 9 + : Math.round(maximumArea / 4); + const output = new Map(); + if (type !== 'quantitative' && type !== 'temporal') { + unique.forEach((value, index) => { + const t = unique.length > 1 ? index / (unique.length - 1) : 0.5; + output.set(value, minimumArea + t * (maximumArea - minimumArea)); + }); + return output; + } + + const numeric = values.map(Number).filter(Number.isFinite); + const maximum = numeric.length > 0 ? Math.max(...numeric) : 1; + const sqrtMaximum = Math.sqrt(Math.max(0, maximum)); + unique.forEach((value) => { + const numericValue = Number(value); + const t = sqrtMaximum > 0 && Number.isFinite(numericValue) + ? Math.sqrt(Math.max(0, numericValue)) / sqrtMaximum + : 0; + output.set(value, minimumArea + t * (maximumArea - minimumArea)); + }); + return output; +} + +function interpolateColor(start: string, end: string, t: number): string { + const channel = (color: string, offset: number) => Number.parseInt(color.slice(offset, offset + 2), 16); + const hex = (value: number) => Math.round(value).toString(16).padStart(2, '0'); + return `#${hex(channel(start, 1) + (channel(end, 1) - channel(start, 1)) * t)}${hex(channel(start, 3) + (channel(end, 3) - channel(start, 3)) * t)}${hex(channel(start, 5) + (channel(end, 5) - channel(start, 5)) * t)}`; +} + +/** + * Assemble an {@link ExcelChartSpec} from a {@link ChartAssemblyInput}. + * + * @throws if the chart type has no native Excel equivalent (e.g. Heatmap). + */ +export function assembleExcel(input: ChartAssemblyInput): ExcelChartSpec { + const flintType = input.chart_spec.chartType; + const semanticTypes = input.semantic_types ?? {}; + const rawData: any[] = input.data.values ?? []; + const encodings = normalizeEncodings(input.chart_spec.encodings); + + // ── Phase 0 (reused core): resolve per-channel semantics ──────────────── + let convertedData = convertTemporalData(rawData, semanticTypes); + const sem: SemanticResult = resolveChannelSemantics( + encodings, rawData, semanticTypes, convertedData, + ); + const typeOf = (ch: string) => sem[ch]?.type; + const isMeasure = (ch: string) => typeOf(ch) === 'quantitative'; + const fieldOf = (ch: string) => encodings[ch]?.field; + const overflowOrder = new Map(); + const chartTemplate = excelGetTemplateDef(flintType); + if (!chartTemplate) { + throw new Error(`Excel backend does not support chart type "${flintType}" as a native Office.js chart.`); + } + if (fieldOf('column') || fieldOf('row')) { + throw new Error(`Excel backend does not support faceting in one native Excel chart: "${flintType}".`); + } + const templateContext = { input, table: convertedData, semantics: sem, fieldOf, typeOf }; + const unsupportedReason = chartTemplate.validate?.(templateContext); + if (unsupportedReason) { + throw new Error(`Excel backend ${unsupportedReason}: "${flintType}".`); + } + + if (chartTemplate.instantiate) { + return chartTemplate.instantiate(templateContext); + } + + if (flintType === 'Bar Chart' || flintType === 'Grouped Bar Chart' || flintType === 'Stacked Bar Chart') { + const detected = detectBandedAxisFromSemantics(sem, convertedData, { preferAxis: 'x' }); + const declaration: LayoutDeclaration = { + axisFlags: detected ? { [detected.axis]: { banded: true } } : { x: { banded: true } }, + resolvedTypes: detected?.resolvedTypes, + }; + const baseSize = resolveBaseSize(input.chart_spec.baseSize, input.chart_spec.canvasSize); + const options = { + facetFixedPadding: { width: 50, height: 40 }, + facetGap: 10, + targetBandAR: 10, + ...deriveStretchCaps(baseSize, input.chart_spec.canvasSize, {}), + }; + const budgets = computeChannelBudgets(sem, declaration, convertedData, baseSize, options); + const overflowResult = filterOverflow( + sem, + declaration, + encodings, + convertedData, + budgets, + new Set(['bar']), + ); + convertedData = overflowResult.filteredData; + overflowResult.truncations.forEach((truncation) => { + overflowOrder.set(truncation.field, truncation.keptValues as Cell[]); + }); + } + + const mapping = chartTemplate.typeMapping; + + // ── Resolve roles (category / measure / series) from semantics ────────── + let catCh: string | undefined; + let measCh: string | undefined; + let seriesCh: string | undefined; + let orientation: 'vertical' | 'horizontal' = 'vertical'; + let isXY = false; + + // categorical series candidate (group preferred, else categorical color) + const seriesCand = encodings.group + ? 'group' + : encodings.color && !isMeasure('color') + ? 'color' + : undefined; + const seriesField0 = seriesCand; + + if (mapping.noAxes) { + // pie/doughnut: color = slices (category), size/theta/y = value + catCh = encodings.color ? 'color' : encodings.x ? 'x' : undefined; + measCh = encodings.size ? 'size' : encodings.theta ? 'theta' : encodings.y ? 'y' : undefined; + seriesCh = undefined; + } else if (mapping.xy) { + catCh = 'x'; measCh = 'y'; isXY = true; seriesCh = seriesField0; + } else if (isMeasure('x') && !isMeasure('y')) { + catCh = 'y'; measCh = 'x'; orientation = 'horizontal'; seriesCh = seriesField0; + } else { + catCh = 'x'; measCh = 'y'; seriesCh = seriesField0; + } + + const catField = catCh ? fieldOf(catCh) : undefined; + const measField = measCh ? fieldOf(measCh) : undefined; + const seriesField = seriesCh ? fieldOf(seriesCh) : undefined; + const dashField = fieldOf('strokeDash'); + const orderField = fieldOf('order'); + const sizeField = fieldOf('size'); + const base = input.chart_spec.baseSize ?? { width: 480, height: 320 }; + const bubbleSizes = sizeField + ? normalizedBubbleSizes(convertedData, sizeField, typeOf('size'), base.width, base.height) + : undefined; + const warnings: ChartWarning[] = []; + + if (!catField || !measField) { + throw new Error( + `Excel backend could not resolve category/measure for "${flintType}" ` + + `(category=${catField}, measure=${measField}).`, + ); + } + + const numericXLine = flintType === 'Line Chart' && isMeasure('x') && isMeasure('y'); + if (numericXLine) { + isXY = true; + catCh = 'x'; + measCh = 'y'; + } + + // ── Stage 3: pivot long → wide matrix ─────────────────────────────────── + const data: Array> = []; + let explicitSeries: ExcelNativeSeriesSpec[] | undefined; + let seriesFormats: ExcelNativeChartSpec['seriesFormats']; + if (isXY) { + const seriesKeys = seriesField ? distinct(convertedData, seriesField) : [measField]; + const needsExplicitSeries = Boolean(seriesField || sizeField); + if (needsExplicitSeries) { + const columnsPerSeries = sizeField ? 3 : 2; + const groupedRows = seriesKeys.map((seriesKey) => { + const rows = convertedData.filter((row) => !seriesField || row[seriesField] === seriesKey); + if (!orderField) return rows; + return [...rows].sort((left, right) => { + const leftValue = left[orderField]; + const rightValue = right[orderField]; + const leftNumber = Number(leftValue); + const rightNumber = Number(rightValue); + if (Number.isFinite(leftNumber) && Number.isFinite(rightNumber)) return leftNumber - rightNumber; + const leftTime = new Date(String(leftValue)).getTime(); + const rightTime = new Date(String(rightValue)).getTime(); + if (Number.isFinite(leftTime) && Number.isFinite(rightTime)) return leftTime - rightTime; + return String(leftValue).localeCompare(String(rightValue), undefined, { numeric: true }); + }); + }); + const rowCount = Math.max(0, ...groupedRows.map((rows) => rows.length)); + explicitSeries = seriesKeys.map((seriesKey, index) => ({ + name: String(seriesKey), + xColumn: index * columnsPerSeries, + yColumn: index * columnsPerSeries + 1, + rowCount: groupedRows[index].length, + bubbleSizeColumn: sizeField ? index * columnsPerSeries + 2 : undefined, + })); + data.push(seriesKeys.flatMap((seriesKey) => [ + `${String(seriesKey)} ${catField}`, + `${String(seriesKey)} ${measField}`, + ...(sizeField ? [`${String(seriesKey)} ${sizeField}`] : []), + ])); + for (let rowIndex = 0; rowIndex < rowCount; rowIndex += 1) { + data.push(groupedRows.flatMap((rows) => { + const row = rows[rowIndex]; + if (!row) return new Array(columnsPerSeries).fill(null); + return [ + row[catField] as Cell, + Number(row[measField]), + ...(sizeField ? [bubbleSizes?.get(row[sizeField]) ?? 9] : []), + ]; + })); + } + } else { + data.push([catField, measField]); + const rows = orderField + ? [...convertedData].sort((left, right) => { + const leftValue = left[orderField]; + const rightValue = right[orderField]; + const leftNumber = Number(leftValue); + const rightNumber = Number(rightValue); + if (Number.isFinite(leftNumber) && Number.isFinite(rightNumber)) return leftNumber - rightNumber; + const leftTime = new Date(String(leftValue)).getTime(); + const rightTime = new Date(String(rightValue)).getTime(); + if (Number.isFinite(leftTime) && Number.isFinite(rightTime)) return leftTime - rightTime; + return String(leftValue).localeCompare(String(rightValue), undefined, { numeric: true }); + }) + : convertedData; + for (const r of rows) { + const x = r[catField]; + const y = r[measField]; + if (x == null || y == null) continue; + data.push([x as Cell, Number(y)]); + } + } + } else { + let categories = distinct(convertedData, catField); + const rankedCategories = overflowOrder.get(catField); + if (rankedCategories) categories = rankedCategories; + if (flintType === 'Line Chart' || flintType === 'Area Chart') { + if (typeOf(catCh!) === 'temporal') { + categories = [...categories].sort((a, b) => new Date(String(a)).getTime() - new Date(String(b)).getTime()); + } else if (typeOf(catCh!) === 'quantitative') { + categories = [...categories].sort((a, b) => Number(a) - Number(b)); + } + } + let seriesKeys = seriesField ? distinct(convertedData, seriesField) : [measField]; + if (seriesField && (flintType === 'Stacked Bar Chart' || flintType === 'Bar Chart')) { + seriesKeys = [...seriesKeys].sort((a, b) => String(a).localeCompare(String(b), undefined, { numeric: true })); + if (orientation === 'vertical') seriesKeys.reverse(); + } + const dashValues = dashField ? distinct(convertedData, dashField) : []; + const seriesDescriptors = dashField + ? convertedData.reduce>((output, row) => { + const seriesValue = (seriesField ? row[seriesField] : measField) as Cell; + const dashValue = row[dashField] as Cell; + const key = `${String(seriesValue)}\u0001${String(dashValue)}`; + if (!output.some((descriptor) => descriptor.key === key)) { + output.push({ + key, + label: seriesField ? `${String(seriesValue)} — ${String(dashValue)}` : String(dashValue), + seriesValue, + dashValue, + }); + } + return output; + }, []) + : seriesKeys.map((seriesValue) => ({ + key: String(seriesValue), + label: String(seriesValue), + seriesValue, + dashValue: null, + })); + const orderedSeries = Boolean(seriesField) + && typeOf(seriesCh!) === 'ordinal'; + const numericSeriesValues = orderedSeries + ? seriesKeys.map(Number).filter(Number.isFinite) + : []; + const seriesMinimum = numericSeriesValues.length > 0 ? Math.min(...numericSeriesValues) : 0; + const seriesMaximum = numericSeriesValues.length > 0 ? Math.max(...numericSeriesValues) : 1; + const orderedSeriesColor = (value: Cell) => { + const numericValue = Number(value); + const t = Number.isFinite(numericValue) && seriesMaximum !== seriesMinimum + ? (numericValue - seriesMinimum) / (seriesMaximum - seriesMinimum) + : 0.5; + return interpolateColor('#D9E2F3', '#2F5597', t); + }; + if (orderedSeries) { + seriesFormats = seriesDescriptors.map((descriptor) => ({ + color: orderedSeriesColor(descriptor.seriesValue), + })); + } + if (dashField) { + seriesFormats = seriesDescriptors.map((descriptor) => ({ + color: EXCEL_SERIES_COLORS[Math.max(0, seriesKeys.indexOf(descriptor.seriesValue)) % EXCEL_SERIES_COLORS.length], + lineStyle: dashValues.indexOf(descriptor.dashValue) === 0 ? 'Continuous' : 'Dash', + })); + } + + // aggregate duplicates per (category × series) using the measure's default + const agg = sem[measCh!]?.aggregationDefault ?? 'sum'; + const acc = new Map(); + for (const r of convertedData) { + const cv = r[catField]; + if (cv == null) continue; + const seriesValue = seriesField ? r[seriesField] : measField; + const sv = dashField + ? `${String(seriesValue)}\u0001${String(r[dashField])}` + : seriesValue; + const num = Number(r[measField]); + if (!Number.isFinite(num)) continue; + const key = `${String(cv)}\u0000${String(sv)}`; + const e = acc.get(key) ?? { sum: 0, count: 0 }; + e.sum += num; e.count += 1; acc.set(key, e); + } + const valueAt = (cv: Cell, sv: Cell): Cell => { + const e = acc.get(`${String(cv)}\u0000${String(sv)}`); + if (!e) return null; + return agg === 'average' ? e.sum / e.count : e.sum; + }; + + let seriesValues = seriesDescriptors.map((descriptor) => categories.map((category) => valueAt(category, descriptor.key))); + if (flintType === 'Line Chart' || flintType === 'Area Chart') { + seriesValues = seriesValues.map(interpolateMissing); + } + if (flintType === 'Area Chart' && typeOf(catCh!) === 'quantitative' && categories.length > 1) { + const sourceX = categories.map(Number); + const sampleCount = Math.min(97, Math.max(49, categories.length)); + const minimum = sourceX[0]; + const maximum = sourceX[sourceX.length - 1]; + const targetX = Array.from( + { length: sampleCount }, + (_value, index) => minimum + (index / (sampleCount - 1)) * (maximum - minimum), + ); + seriesValues = seriesValues.map((values) => { + let right = 1; + return targetX.map((x) => { + while (right < sourceX.length - 1 && sourceX[right] < x) right += 1; + const left = Math.max(0, right - 1); + const span = sourceX[right] - sourceX[left]; + const t = span === 0 ? 0 : (x - sourceX[left]) / span; + const leftValue = Number(values[left]); + const rightValue = Number(values[right]); + if (!Number.isFinite(leftValue)) return Number.isFinite(rightValue) ? rightValue : null; + if (!Number.isFinite(rightValue)) return leftValue; + return leftValue + (rightValue - leftValue) * t; + }); + }); + const tickLabels = new Map(Array.from( + { length: 5 }, + (_value, index) => [ + Math.round((index / 4) * (sampleCount - 1)), + Number((minimum + (index / 4) * (maximum - minimum)).toPrecision(4)), + ] as const, + )); + categories = targetX.map((_value, index) => tickLabels.get(index) ?? ''); + } + data.push([catField, ...seriesDescriptors.map((descriptor) => descriptor.label)]); + for (let categoryIndex = 0; categoryIndex < categories.length; categoryIndex += 1) { + data.push([ + String(categories[categoryIndex]), + ...seriesValues.map((values) => values[categoryIndex]), + ]); + } + } + + // ── Chart type + styling (native Excel) ───────────────────────────────── + let excelChartType = orientation === 'horizontal' && mapping.horizontal + ? mapping.horizontal + : mapping.vertical; + if (numericXLine) excelChartType = 'XYScatterLines'; + if (flintType === 'Connected Scatter Plot') excelChartType = 'XYScatterLines'; + if (flintType === 'Scatter Plot' && sizeField) excelChartType = 'Bubble'; + if (flintType === 'Area Chart' && seriesField) excelChartType = 'AreaStacked'; + if (flintType === 'Bar Chart' && seriesField) { + excelChartType = orientation === 'horizontal' ? 'BarStacked' : 'ColumnStacked'; + } + const isBarFamily = /Column|Bar/.test(excelChartType); + const hasNumericAxes = /XYScatter|Bubble/.test(excelChartType); + const numberFormat = formatSpecToExcel(measCh ? sem[measCh]?.format : undefined); + const seriesBy: ExcelSeriesBy = 'Columns'; + + const spec: ExcelNativeChartSpec = { + schema: 'flint.excel.chart/v1', + kind: 'chart', + chartType: excelChartType, + title: `${measField} by ${catField}`, + seriesBy, + series: explicitSeries, + seriesFormats, + bubbleScale: flintType === 'Scatter Plot' && sizeField ? 20 : undefined, + doughnutHoleSize: flintType === 'Donut Chart' + ? Math.max(10, Math.min(90, Number(input.chart_spec.chartProperties?.innerRadius ?? 50))) + : undefined, + data, + width: base.width, + height: base.height, + warnings, + _flint: { flintType, catField, measField, seriesField, orientation, isXY }, + }; + + if (!mapping.noAxes) { + const measureValues = convertedData + .map((row) => Number(row[measField])) + .filter(Number.isFinite); + const measureMinimum = measureValues.length > 0 ? Math.min(...measureValues) : undefined; + const measureMaximum = measureValues.length > 0 ? Math.max(...measureValues) : undefined; + const focusedLineMinimum = flintType === 'Line Chart' && measureMinimum !== undefined && measureMaximum !== undefined + ? Math.max(0, measureMinimum - (measureMaximum - measureMinimum) * 0.05) + : undefined; + const numericXScale = hasNumericAxes + ? focusedNumericAxis(convertedData.map((row) => Number(row[catField]))) + : {}; + const numericYScale = hasNumericAxes + ? focusedNumericAxis(measureValues) + : {}; + spec.categoryAxis = { + title: catField, + labelFontSize: orientation === 'horizontal' && data.length > 25 + ? Math.max(5, Math.min(10, ((base.height - 80) / (data.length - 1)) * 0.72)) + : undefined, + tickLabelSpacing: orientation === 'vertical' && typeOf(catCh!) === 'temporal' + ? temporalLabelSpacing(data.length - 1, base.width) + : undefined, + reversePlotOrder: orientation === 'horizontal' && typeOf(catCh!) !== 'temporal', + ...numericXScale, + }; + spec.valueAxis = { + title: measField, + numberFormat, + minimumScale: flintType === 'Area Chart' ? 0 : focusedLineMinimum, + ...numericYScale, + }; + } + spec.legend = mapping.noAxes + ? { visible: true, position: 'Right' } + : seriesField || dashField + ? { visible: true, position: 'Bottom' } + : { visible: false }; + if (isBarFamily) spec.gapWidth = 60; + if (flintType === 'Grouped Bar Chart') { + const seriesCount = Math.max(1, data[0].length - 1); + spec.gapWidth = Math.min(500, (excelChartType.startsWith('Column') ? 60 : 40) * seriesCount); + spec.overlap = 0; + } + + return spec; +} diff --git a/packages/flint-js/src/excel/chart-types.ts b/packages/flint-js/src/excel/chart-types.ts new file mode 100644 index 00000000..bdb6063c --- /dev/null +++ b/packages/flint-js/src/excel/chart-types.ts @@ -0,0 +1,95 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Excel chart-type mapping + FormatSpec → Excel number format. + * + * Excel's native chart types are a fixed enum (`Excel.ChartType`), so a Flint + * chart type maps to the closest native Excel chart. Orientation (vertical vs + * horizontal) is decided by the assembler from channel semantics and selects + * the Column* vs Bar* family. + */ + +import type { FormatSpec } from '../core/field-semantics'; + +/** Which native Excel family a Flint chart maps to. */ +export interface ExcelTypeMapping { + /** Vertical (category on x) Excel.ChartType. */ + vertical: string; + /** Horizontal (category on y) Excel.ChartType, when the family supports it. */ + horizontal?: string; + /** True for pie/doughnut/… charts that have no value/category axes. */ + noAxes?: boolean; + /** True for XY (both-measure) charts. */ + xy?: boolean; +} + +/** Flint chart type (display name) → Excel chart family. */ +export const EXCEL_TYPE_MAP: Record = { + 'Bar Chart': { vertical: 'ColumnClustered', horizontal: 'BarClustered' }, + 'Grouped Bar Chart': { vertical: 'ColumnClustered', horizontal: 'BarClustered' }, + 'Stacked Bar Chart': { vertical: 'ColumnStacked', horizontal: 'BarStacked' }, + 'Pyramid Chart': { vertical: 'BarStacked', horizontal: 'BarStacked' }, + 'Histogram': { vertical: 'ColumnClustered' }, + 'Line Chart': { vertical: 'Line' }, + 'Area Chart': { vertical: 'Area', horizontal: undefined }, + 'Scatter Plot': { vertical: 'XYScatter', xy: true }, + 'Connected Scatter Plot': { vertical: 'XYScatterLines', xy: true }, + 'Pie Chart': { vertical: 'Pie', noAxes: true }, + 'Donut Chart': { vertical: 'Doughnut', noAxes: true }, + 'Boxplot': { vertical: 'BoxWhisker' }, + 'Candlestick Chart': { vertical: 'StockOHLC' }, + 'Waterfall Chart': { vertical: 'Waterfall' }, + 'Radar Chart': { vertical: 'RadarMarkers' }, + 'Funnel Chart': { vertical: 'Funnel', noAxes: true }, + 'Treemap': { vertical: 'Treemap', noAxes: true }, + 'Sunburst Chart': { vertical: 'Sunburst', noAxes: true }, +}; + +/** Chart types this backend can render natively in Excel. */ +export function isExcelSupported(flintChartType: string): boolean { + return flintChartType in EXCEL_TYPE_MAP; +} + +/** + * Map a Flint {@link FormatSpec} to an Excel number-format string. + * + * Excel formats are pattern strings (`"$#,##0"`, `"0.0%"`, `"#,##0"`), distinct + * from d3/Vega patterns, so we translate from the FormatSpec's intent (prefix, + * suffix, abbreviate) rather than its d3 `pattern`. + */ +export function formatSpecToExcel(fmt: FormatSpec | undefined): string | undefined { + if (!fmt) return undefined; + const prefix = fmt.prefix ?? ''; + const suffix = fmt.suffix ?? ''; + const pat = fmt.pattern ?? ''; + + // percent + if (suffix === '%' || pat.includes('%')) { + const decimals = decimalsFromPattern(pat); + return decimals > 0 ? `0.${'0'.repeat(decimals)}%` : '0%'; + } + + // decide the numeric core + const decimals = decimalsFromPattern(pat); + let core = decimals > 0 ? `#,##0.${'0'.repeat(decimals)}` : '#,##0'; + if (fmt.abbreviate) core = '#,##0,"K"'; // thousands abbreviation (approx) + + const pre = prefix ? escapeLiteral(prefix) : ''; + const suf = suffix ? escapeLiteral(suffix) : ''; + if (!pre && !suf && !fmt.abbreviate && decimals === 0) return 'General'; + return `${pre}${core}${suf}`; +} + +/** Number of fractional digits requested by a d3-ish pattern (best-effort). */ +function decimalsFromPattern(pat: string): number { + const m = pat.match(/\.(\d+)/); + return m ? Number(m[1]) : 0; +} + +/** Wrap non-numeric literal text so Excel treats it literally in a format. */ +function escapeLiteral(s: string): string { + // A leading/trailing currency symbol is fine bare; wrap other text in quotes. + if (s === '$' || s === '€' || s === '£' || s === '¥') return s; + return `"${s}"`; +} diff --git a/packages/flint-js/src/excel/codegen.ts b/packages/flint-js/src/excel/codegen.ts new file mode 100644 index 00000000..099f549c --- /dev/null +++ b/packages/flint-js/src/excel/codegen.ts @@ -0,0 +1,157 @@ +import { prepareExcelArtifact } from './artifact'; +import type { ExcelAxisSpec, ExcelNativeChartSpec } from './types'; + +export interface OfficeJsCodegenOptions { + scale?: number; + cleanWorksheet?: boolean; + functionName?: string; +} + +export interface GeneratedOfficeJs { + code: string; + meta: { + schema: ExcelNativeChartSpec['schema']; + rangeA1: string; + chartType: string; + rows: number; + columns: number; + }; +} + +function axisCode(axisName: 'categoryAxis' | 'valueAxis', axis: ExcelAxisSpec): string[] { + const target = `chart.axes.${axisName}`; + const lines: string[] = []; + if (axis.title) { + lines.push(` ${target}.title.text = ${JSON.stringify(axis.title)};`); + lines.push(` ${target}.title.visible = true;`); + } + if (axis.numberFormat) lines.push(` ${target}.numberFormat = ${JSON.stringify(axis.numberFormat)};`); + if (axis.labelFontSize !== undefined) lines.push(` ${target}.format.font.size = ${axis.labelFontSize};`); + if (axis.tickLabelSpacing !== undefined) lines.push(` ${target}.tickLabelSpacing = ${axis.tickLabelSpacing};`); + if (axis.reversePlotOrder !== undefined) lines.push(` ${target}.reversePlotOrder = ${axis.reversePlotOrder};`); + if (axis.minimumScale !== undefined) lines.push(` ${target}.minimum = ${axis.minimumScale};`); + if (axis.maximumScale !== undefined) lines.push(` ${target}.maximum = ${axis.maximumScale};`); + if (axis.majorUnit !== undefined) lines.push(` ${target}.majorUnit = ${axis.majorUnit};`); + return lines; +} + +function positiveScale(value: number | undefined): number { + const scale = value ?? 3; + if (!Number.isFinite(scale) || scale <= 0) throw new Error('Office.js image scale must be positive.'); + return scale; +} + +export function generateOfficeJs(value: unknown, options: OfficeJsCodegenOptions = {}): GeneratedOfficeJs { + const prepared = prepareExcelArtifact(value); + const { spec } = prepared; + const functionName = options.functionName ?? 'renderFlintChart'; + if (!/^[$A-Z_a-z][$\w]*$/.test(functionName)) { + throw new Error('Office.js functionName must be a valid JavaScript identifier.'); + } + const width = spec.width ?? 400; + const height = spec.height ?? 300; + const scale = positiveScale(options.scale); + const imageWidth = Math.round(width * (96 / 72) * scale); + const imageHeight = Math.round(height * (96 / 72) * scale); + const lines = [ + `async function ${functionName}(context) {`, + ' const sheet = context.workbook.worksheets.getActiveWorksheet();', + ]; + + if (options.cleanWorksheet) { + lines.push( + " sheet.charts.load('items/name');", + ' const previousRange = sheet.getUsedRangeOrNullObject();', + ' await context.sync();', + ' sheet.charts.items.forEach((existingChart) => existingChart.delete());', + ' if (!previousRange.isNullObject) previousRange.clear();', + ); + } + + lines.push( + ` const values = ${JSON.stringify(prepared.data)};`, + ` const dataRange = sheet.getRange(${JSON.stringify(prepared.rangeA1)});`, + ' dataRange.numberFormat = values.map((row, rowIndex) =>', + ` row.map((_cell, columnIndex) => rowIndex === 0 ? '@' : columnIndex === 0 && ${prepared.dateAxis} ? 'yyyy-mm-dd' : columnIndex === 0 && ${!prepared.numericAxis} ? '@' : 'General'),`, + ' );', + ' dataRange.values = values;', + ` const chart = sheet.charts.add(${JSON.stringify(prepared.chartType)}, dataRange, ${JSON.stringify(spec.seriesBy)});`, + ); + + if (spec.series?.length) { + lines.push(" chart.series.load('items');", ' await context.sync();'); + lines.push(` if (chart.series.items.length < ${spec.series.length}) throw new Error('Excel inferred too few series.');`); + spec.series.forEach((binding, index) => { + lines.push( + ` chart.series.items[${index}].name = ${JSON.stringify(binding.name)};`, + ` chart.series.items[${index}].setXAxisValues(sheet.getRangeByIndexes(1, ${binding.xColumn}, ${binding.rowCount}, 1));`, + ` chart.series.items[${index}].setValues(sheet.getRangeByIndexes(1, ${binding.yColumn}, ${binding.rowCount}, 1));`, + ); + if (binding.bubbleSizeColumn !== undefined) { + lines.push(` chart.series.items[${index}].setBubbleSizes(sheet.getRangeByIndexes(1, ${binding.bubbleSizeColumn}, ${binding.rowCount}, 1));`); + } + }); + lines.push( + ` for (let index = chart.series.items.length - 1; index >= ${spec.series.length}; index -= 1) {`, + ' chart.series.getItemAt(index).delete();', + ' await context.sync();', + ' }', + ); + } + + lines.push(` chart.width = ${width};`, ` chart.height = ${height};`); + if (spec.title) { + lines.push(` chart.title.text = ${JSON.stringify(spec.title)};`, ' chart.title.visible = true;'); + } + if (spec.legend) { + lines.push(` chart.legend.visible = ${spec.legend.visible};`); + if (spec.legend.visible && spec.legend.position) { + lines.push(` chart.legend.position = ${JSON.stringify(spec.legend.position)};`); + } + } + if (spec.dataLabels) { + lines.push(` chart.dataLabels.visible = ${spec.dataLabels.visible};`); + if (spec.dataLabels.position) lines.push(` chart.dataLabels.position = ${JSON.stringify(spec.dataLabels.position)};`); + if (spec.dataLabels.numberFormat) lines.push(` chart.dataLabels.numberFormat = ${JSON.stringify(spec.dataLabels.numberFormat)};`); + if (spec.dataLabels.fontColor) lines.push(` chart.dataLabels.format.font.color = ${JSON.stringify(spec.dataLabels.fontColor)};`); + if (spec.dataLabels.fontSize !== undefined) lines.push(` chart.dataLabels.format.font.size = ${spec.dataLabels.fontSize};`); + } + if (prepared.hasAxes) { + if (spec.categoryAxis) lines.push(...axisCode('categoryAxis', spec.categoryAxis)); + if (spec.valueAxis) lines.push(...axisCode('valueAxis', spec.valueAxis)); + } + + lines.push(` const seriesFormats = ${JSON.stringify(spec.seriesFormats ?? [])};`); + lines.push(` for (let index = 0; index < ${prepared.seriesCount}; index += 1) {`, ' const series = chart.series.getItemAt(index);', ' const format = seriesFormats[index];'); + if (prepared.isBar && spec.gapWidth !== undefined) lines.push(` series.gapWidth = ${spec.gapWidth};`); + if (prepared.isBar && spec.overlap !== undefined) lines.push(` series.overlap = ${spec.overlap};`); + if (/Bubble/i.test(prepared.chartType) && spec.bubbleScale !== undefined) lines.push(` series.bubbleScale = ${spec.bubbleScale};`); + if (/Doughnut/i.test(prepared.chartType) && spec.doughnutHoleSize !== undefined) lines.push(` series.doughnutHoleSize = ${spec.doughnutHoleSize};`); + if (/BoxWhisker/i.test(prepared.chartType) && spec.boxWhiskerOptions) lines.push(` series.boxwhiskerOptions.set(${JSON.stringify(spec.boxWhiskerOptions)});`); + if (/Waterfall/i.test(prepared.chartType) && spec.showConnectorLines !== undefined) lines.push(` series.showConnectorLines = ${spec.showConnectorLines};`); + lines.push(' if (format?.color) {'); + if (!prepared.isLine) lines.push(' series.format.fill.setSolidColor(format.color);'); + lines.push(' series.format.line.color = format.color;', ' }', ' if (format?.lineStyle) series.format.line.lineStyle = format.lineStyle;', ' }'); + lines.push( + ` const image = chart.getImage(${imageWidth}, ${imageHeight}, Excel.ImageFittingMode.fit);`, + ' await context.sync();', + ' return image.value;', + '}', + '', + 'async function main() {', + ` return Excel.run(${functionName});`, + '}', + '', + ); + + return { + code: lines.join('\n'), + meta: { + schema: spec.schema, + rangeA1: prepared.rangeA1, + chartType: prepared.chartType, + rows: prepared.rows, + columns: prepared.columns, + }, + }; +} diff --git a/packages/flint-js/src/excel/index.ts b/packages/flint-js/src/excel/index.ts new file mode 100644 index 00000000..15f2770f --- /dev/null +++ b/packages/flint-js/src/excel/index.ts @@ -0,0 +1,52 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * @module flint-chart/excel + * + * Excel backend for flint-chart. + * + * Compiles the core semantic layer into a native Office.js Excel chart spec + * (a wide/matrix data range + chart type, axes, legend). A host renders it via + * the Office.js Excel API (`sheet.charts.add(...)` + `chart.getImage()`). + * + * Architecture contrast with other backends: + * VL: encoding-channel-based — { encoding: { x, y }, mark } + * EC: series-based — { series: [...], xAxis, yAxis } + * CJS: dataset-based — { type, data: { labels, datasets } } + * Excel: range/matrix-based — { chartType, data: [[...]], seriesBy, axes } + * + * Same core Phase 0 (semantics); Excel-specific Stage 3 output. + */ + +export { assembleExcel } from './assemble'; +export { + EXCEL_ARTIFACT_SCHEMA, + SUPPORTED_EXCEL_CHART_TYPES, + excelColumnLetter, + prepareExcelArtifact, +} from './artifact'; +export type { PreparedExcelArtifact } from './artifact'; +export { generateOfficeJs } from './codegen'; +export type { GeneratedOfficeJs, OfficeJsCodegenOptions } from './codegen'; +export { renderExcelChart } from './runtime'; +export type { ExcelRenderOptions, ExcelRenderResult, OfficeJsExcelApi } from './runtime'; +export { EXCEL_TYPE_MAP, isExcelSupported, formatSpecToExcel } from './chart-types'; +export { + excelAllTemplateDefs, + excelGetTemplateDef, + excelGetTemplateChannels, +} from './templates'; +export type { ExcelTemplateContext, ExcelTemplateDef } from './templates'; +export type { + ExcelChartSpec, + ExcelNativeChartSpec, + ExcelNativeSeriesSpec, + ExcelNativeSeriesFormatSpec, + ExcelAxisSpec, + ExcelLegendSpec, + ExcelDataLabelsSpec, + ExcelBoxWhiskerOptionsSpec, + ExcelSeriesBy, + ExcelLegendPosition, +} from './types'; diff --git a/packages/flint-js/src/excel/runtime.ts b/packages/flint-js/src/excel/runtime.ts new file mode 100644 index 00000000..82603ca2 --- /dev/null +++ b/packages/flint-js/src/excel/runtime.ts @@ -0,0 +1,195 @@ +import { prepareExcelArtifact, type PreparedExcelArtifact } from './artifact'; + +export interface OfficeJsExcelApi { + run(callback: (context: any) => Promise): Promise; + ImageFittingMode: { fit: any }; +} + +export interface ExcelRenderOptions { + scale?: number; + cleanWorksheet?: boolean; + inspectNativeChart?: boolean; +} + +export interface ExcelRenderResult { + pngBase64: string; + inspection: unknown | null; +} + +function applyChartFormat(chart: any, prepared: PreparedExcelArtifact): void { + const { spec } = prepared; + if (spec.legend) { + chart.legend.visible = spec.legend.visible; + if (spec.legend.visible && spec.legend.position) chart.legend.position = spec.legend.position; + } + if (prepared.hasAxes) { + const axes = [ + [chart.axes.categoryAxis, spec.categoryAxis], + [chart.axes.valueAxis, spec.valueAxis], + ] as const; + for (const [axis, format] of axes) { + if (!format) continue; + if (format.title) { + axis.title.text = format.title; + axis.title.visible = true; + } + if (format.numberFormat) axis.numberFormat = format.numberFormat; + if (format.labelFontSize !== undefined) axis.format.font.size = format.labelFontSize; + if (format.tickLabelSpacing !== undefined) axis.tickLabelSpacing = format.tickLabelSpacing; + if (format.reversePlotOrder !== undefined) axis.reversePlotOrder = format.reversePlotOrder; + if (format.minimumScale !== undefined) axis.minimum = format.minimumScale; + if (format.maximumScale !== undefined) axis.maximum = format.maximumScale; + if (format.majorUnit !== undefined) axis.majorUnit = format.majorUnit; + } + } + if (spec.dataLabels) { + chart.dataLabels.visible = spec.dataLabels.visible; + if (spec.dataLabels.position) chart.dataLabels.position = spec.dataLabels.position; + if (spec.dataLabels.numberFormat) chart.dataLabels.numberFormat = spec.dataLabels.numberFormat; + if (spec.dataLabels.fontColor) chart.dataLabels.format.font.color = spec.dataLabels.fontColor; + if (spec.dataLabels.fontSize !== undefined) chart.dataLabels.format.font.size = spec.dataLabels.fontSize; + } + for (let index = 0; index < prepared.seriesCount; index += 1) { + const series = chart.series.getItemAt(index); + const format = spec.seriesFormats?.[index]; + if (format?.color) { + if (!prepared.isLine) series.format.fill.setSolidColor(format.color); + series.format.line.color = format.color; + } + if (format?.lineStyle) series.format.line.lineStyle = format.lineStyle; + if (prepared.isBar && spec.gapWidth !== undefined) series.gapWidth = spec.gapWidth; + if (prepared.isBar && spec.overlap !== undefined) series.overlap = spec.overlap; + if (/Bubble/i.test(prepared.chartType) && spec.bubbleScale !== undefined) series.bubbleScale = spec.bubbleScale; + if (/Doughnut/i.test(prepared.chartType) && spec.doughnutHoleSize !== undefined) series.doughnutHoleSize = spec.doughnutHoleSize; + if (/BoxWhisker/i.test(prepared.chartType) && spec.boxWhiskerOptions) series.boxwhiskerOptions.set(spec.boxWhiskerOptions); + if (/Waterfall/i.test(prepared.chartType) && spec.showConnectorLines !== undefined) series.showConnectorLines = spec.showConnectorLines; + } +} + +async function inspectChart(context: any, sheet: any, dataRange: any, chart: any): Promise { + try { + dataRange.load('address,values,numberFormat'); + const usedRange = sheet.getUsedRangeOrNullObject(); + usedRange.load('isNullObject,address,values'); + chart.load('name,chartType'); + chart.series.load('items/name,items/chartType,items/axisGroup,items/formula'); + await context.sync(); + for (const series of chart.series.items) { + series.binOptions.load('type,count,width,allowOverflow,overflowValue,allowUnderflow,underflowValue'); + } + const primaryCategoryAxis = chart.axes.getItemOrNullObject('Category', 'Primary'); + const primaryValueAxis = chart.axes.getItemOrNullObject('Value', 'Primary'); + const secondaryValueAxis = chart.axes.getItemOrNullObject('Value', 'Secondary'); + for (const axis of [primaryCategoryAxis, primaryValueAxis, secondaryValueAxis]) { + axis.load('isNullObject,axisType,axisGroup,visible,minimum,maximum,numberFormat'); + axis.title.load('text,visible'); + } + await context.sync(); + const describeAxis = (axis: any) => axis.isNullObject ? null : { ...axis.toJSON(), title: axis.title.toJSON() }; + return { + sourceRange: { + address: dataRange.address, + values: dataRange.values, + numberFormat: dataRange.numberFormat, + }, + usedRange: usedRange.isNullObject ? null : { + address: usedRange.address, + values: usedRange.values, + }, + chart: { + name: chart.name, + chartType: chart.chartType, + series: chart.series.items.map((series: any) => ({ + ...series.toJSON(), + binOptions: series.binOptions.toJSON(), + })), + axes: { + primaryCategory: describeAxis(primaryCategoryAxis), + primaryValue: describeAxis(primaryValueAxis), + secondaryValue: describeAxis(secondaryValueAxis), + }, + }, + }; + } catch (error) { + return { error: error instanceof Error ? error.message : String(error) }; + } +} + +function imageScale(value: number | undefined): number { + const scale = value ?? 3; + if (!Number.isFinite(scale) || scale <= 0) throw new Error('Office.js image scale must be positive.'); + return scale; +} + +export async function renderExcelChart( + excelApi: OfficeJsExcelApi, + value: unknown, + options: ExcelRenderOptions = {}, +): Promise { + const prepared = prepareExcelArtifact(value); + const { spec } = prepared; + const scale = imageScale(options.scale); + return excelApi.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + if (options.cleanWorksheet !== false) { + sheet.charts.load('items/name'); + const previousRange = sheet.getUsedRangeOrNullObject(); + await context.sync(); + sheet.charts.items.forEach((existingChart: any) => existingChart.delete()); + if (!previousRange.isNullObject) previousRange.clear(); + } + + const dataRange = sheet.getRange(prepared.rangeA1); + dataRange.numberFormat = prepared.data.map((row, rowIndex) => row.map((_cell, columnIndex) => + rowIndex === 0 + ? '@' + : columnIndex === 0 && prepared.dateAxis + ? 'yyyy-mm-dd' + : columnIndex === 0 && !prepared.numericAxis ? '@' : 'General', + )); + dataRange.values = prepared.data; + const chart = sheet.charts.add(prepared.chartType, dataRange, spec.seriesBy); + + if (spec.series?.length) { + chart.series.load('items'); + await context.sync(); + if (chart.series.items.length < spec.series.length) { + throw new Error(`Excel inferred ${chart.series.items.length} series; ${spec.series.length} required.`); + } + for (const [index, binding] of spec.series.entries()) { + const series = chart.series.items[index]; + series.name = binding.name; + series.setXAxisValues(sheet.getRangeByIndexes(1, binding.xColumn, binding.rowCount, 1)); + series.setValues(sheet.getRangeByIndexes(1, binding.yColumn, binding.rowCount, 1)); + if (binding.bubbleSizeColumn !== undefined) { + series.setBubbleSizes(sheet.getRangeByIndexes(1, binding.bubbleSizeColumn, binding.rowCount, 1)); + } + } + for (let index = chart.series.items.length - 1; index >= spec.series.length; index -= 1) { + chart.series.getItemAt(index).delete(); + await context.sync(); + } + } + + const width = spec.width ?? 400; + const height = spec.height ?? 300; + chart.width = width; + chart.height = height; + if (spec.title) { + chart.title.text = spec.title; + chart.title.visible = true; + } + applyChartFormat(chart, prepared); + await context.sync(); + const image = chart.getImage( + Math.round(width * (96 / 72) * scale), + Math.round(height * (96 / 72) * scale), + excelApi.ImageFittingMode.fit, + ); + await context.sync(); + const inspection = options.inspectNativeChart + ? await inspectChart(context, sheet, dataRange, chart) + : null; + return { pngBase64: image.value, inspection }; + }); +} diff --git a/packages/flint-js/src/excel/templates/area.ts b/packages/flint-js/src/excel/templates/area.ts new file mode 100644 index 00000000..6fa36d6d --- /dev/null +++ b/packages/flint-js/src/excel/templates/area.ts @@ -0,0 +1,13 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import type { ExcelTemplateDef } from './types'; + +export const excelAreaChartDef: ExcelTemplateDef = { + chart: 'Area Chart', + channels: ['x', 'y', 'color'], + typeMapping: { vertical: 'Area' }, + validate: ({ typeOf }) => typeOf('y') !== 'quantitative' + ? 'requires a quantitative y field for a native Excel area chart' + : undefined, +}; \ No newline at end of file diff --git a/packages/flint-js/src/excel/templates/bar.ts b/packages/flint-js/src/excel/templates/bar.ts new file mode 100644 index 00000000..14e97d21 --- /dev/null +++ b/packages/flint-js/src/excel/templates/bar.ts @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import type { ExcelTemplateDef } from './types'; + +export const excelBarChartDef: ExcelTemplateDef = { + chart: 'Bar Chart', + channels: ['x', 'y', 'color'], + typeMapping: { vertical: 'ColumnClustered', horizontal: 'BarClustered' }, + validate: ({ typeOf }) => typeOf('x') !== 'quantitative' && typeOf('y') !== 'quantitative' + ? 'requires one quantitative measure axis for a native Excel bar chart' + : undefined, +}; + +export const excelGroupedBarChartDef: ExcelTemplateDef = { + chart: 'Grouped Bar Chart', + channels: ['x', 'y', 'group'], + typeMapping: { vertical: 'ColumnClustered', horizontal: 'BarClustered' }, + validate: (context) => excelBarChartDef.validate?.(context) + ?? (context.typeOf('group') === 'quantitative' || context.typeOf('group') === 'temporal' + ? 'does not support continuous grouping in a native Excel grouped bar chart' + : undefined), +}; + +export const excelStackedBarChartDef: ExcelTemplateDef = { + chart: 'Stacked Bar Chart', + channels: ['x', 'y', 'color'], + typeMapping: { vertical: 'ColumnStacked', horizontal: 'BarStacked' }, + validate: (context) => excelBarChartDef.validate?.(context) + ?? (context.typeOf('color') === 'quantitative' || context.typeOf('color') === 'temporal' + ? 'does not support continuous color in a native Excel stacked bar chart' + : undefined), +}; \ No newline at end of file diff --git a/packages/flint-js/src/excel/templates/boxplot.ts b/packages/flint-js/src/excel/templates/boxplot.ts new file mode 100644 index 00000000..051ca7cf --- /dev/null +++ b/packages/flint-js/src/excel/templates/boxplot.ts @@ -0,0 +1,65 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { formatSpecToExcel } from '../chart-types'; +import type { ExcelTemplateDef } from './types'; + +export const excelBoxplotDef: ExcelTemplateDef = { + chart: 'Boxplot', + channels: ['x', 'y', 'color'], + typeMapping: { vertical: 'BoxWhisker' }, + validate: ({ input, fieldOf, typeOf }) => { + if (!fieldOf('x') || typeOf('x') === 'temporal') { + return 'requires a categorical x field for a native Excel box and whisker chart'; + } + if (!fieldOf('y') || typeOf('y') !== 'quantitative') { + return 'requires a quantitative y field for a native Excel box and whisker chart'; + } + if (fieldOf('color')) { + return 'does not yet support color-grouped native Excel box and whisker charts'; + } + if (fieldOf('column') || fieldOf('row')) { + return 'does not support faceting in one native Excel box and whisker chart'; + } + if (input.chart_spec.chartProperties?.whiskerMethod === 'minmax') { + return 'does not support min-max whiskers because Office.js exposes no native BoxWhisker whisker-method control'; + } + return undefined; + }, + instantiate: ({ input, table, semantics, fieldOf }) => { + const categoryField = fieldOf('x')!; + const valueField = fieldOf('y')!; + const rows = table.filter((row) => row[categoryField] != null && Number.isFinite(Number(row[valueField]))); + const base = input.chart_spec.baseSize ?? { width: 480, height: 320 }; + const properties = input.chart_spec.chartProperties; + + return { + schema: 'flint.excel.chart/v1', + kind: 'chart', + chartType: 'BoxWhisker', + title: `${valueField} by ${categoryField}`, + seriesBy: 'Columns', + data: [ + [categoryField, valueField], + ...rows.map((row) => [String(row[categoryField]), Number(row[valueField])]), + ], + categoryAxis: { title: categoryField }, + valueAxis: { + title: valueField, + numberFormat: formatSpecToExcel(semantics.y?.format), + }, + legend: { visible: false }, + boxWhiskerOptions: { + quartileCalculation: 'Inclusive', + showInnerPoints: false, + showMeanLine: false, + showMeanMarker: false, + showOutlierPoints: properties?.showOutliers !== false, + }, + width: base.width, + height: base.height, + warnings: [], + _flint: { flintType: 'Boxplot', categoryField, valueField, rawObservations: rows.length }, + }; + }, +}; \ No newline at end of file diff --git a/packages/flint-js/src/excel/templates/candlestick.ts b/packages/flint-js/src/excel/templates/candlestick.ts new file mode 100644 index 00000000..fada1375 --- /dev/null +++ b/packages/flint-js/src/excel/templates/candlestick.ts @@ -0,0 +1,107 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { formatSpecToExcel } from '../chart-types'; +import type { ExcelTemplateDef } from './types'; + +const PRICE_CHANNELS = ['open', 'high', 'low', 'close'] as const; +const EXCEL_EPOCH = Date.UTC(1899, 11, 30); +const DAY_MILLISECONDS = 24 * 60 * 60 * 1000; + +function excelDateSerial(value: unknown): number { + return (new Date(value as string | number | Date).getTime() - EXCEL_EPOCH) / DAY_MILLISECONDS; +} + +function niceStep(span: number): number { + const rough = span / 5; + const power = 10 ** Math.floor(Math.log10(rough)); + const fraction = rough / power; + return (fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10) * power; +} + +export const excelCandlestickDef: ExcelTemplateDef = { + chart: 'Candlestick Chart', + channels: ['x', 'open', 'high', 'low', 'close'], + typeMapping: { vertical: 'StockOHLC' }, + validate: ({ table, fieldOf, typeOf }) => { + const xField = fieldOf('x'); + if (!xField || !['temporal', 'ordinal'].includes(typeOf('x') ?? '')) { + return 'requires a temporal or ordered x field for a native Excel stock chart'; + } + for (const channel of PRICE_CHANNELS) { + if (!fieldOf(channel) || typeOf(channel) !== 'quantitative') { + return `requires a quantitative ${channel} field for a native Excel stock chart`; + } + } + if (fieldOf('color') || fieldOf('group') || fieldOf('detail')) { + return 'does not support color, group, or detail encodings in a native Excel stock chart'; + } + if (table.length === 0) { + return 'requires at least one OHLC row for a native Excel stock chart'; + } + + let previousTime = Number.NEGATIVE_INFINITY; + for (const [index, row] of table.entries()) { + const time = new Date(row[xField]).getTime(); + if (!Number.isFinite(time)) { + return `requires a valid date at row ${index + 1} for a native Excel stock chart`; + } + if (time <= previousTime) { + return 'requires x values sorted in strictly increasing chronological order for a native Excel stock chart'; + } + previousTime = time; + + const rawPrices = PRICE_CHANNELS.map((channel) => row[fieldOf(channel)!]); + const [open, high, low, close] = rawPrices.map(Number); + if (rawPrices.some((value) => value == null || value === '') || ![open, high, low, close].every(Number.isFinite)) { + return `requires finite open, high, low, and close values at row ${index + 1} for a native Excel stock chart`; + } + if (high < Math.max(open, low, close) || low > Math.min(open, high, close)) { + return `requires coherent OHLC values at row ${index + 1} (high >= open/close/low and low <= open/close/high)`; + } + } + return undefined; + }, + instantiate: ({ input, table, semantics, fieldOf }) => { + const xField = fieldOf('x')!; + const fields = PRICE_CHANNELS.map((channel) => fieldOf(channel)!); + const base = input.chart_spec.baseSize ?? { width: 480, height: 320 }; + const labelBudget = Math.max(12, Math.floor((base.width - 90) / 14)); + const tickLabelSpacing = table.length > labelBudget ? Math.ceil(table.length / labelBudget) : undefined; + const lows = table.map((row) => Number(row[fields[2]])); + const highs = table.map((row) => Number(row[fields[1]])); + const minimum = Math.min(...lows); + const maximum = Math.max(...highs); + const majorUnit = niceStep(Math.max(maximum - minimum, Math.abs(maximum) * 0.1, 1)); + const minimumScale = Math.floor(minimum / majorUnit) * majorUnit; + const maximumScale = Math.ceil(maximum / majorUnit) * majorUnit; + + return { + schema: 'flint.excel.chart/v1', + kind: 'chart', + chartType: 'StockOHLC', + title: `${fields[3]} by ${xField}`, + seriesBy: 'Columns', + data: [ + [xField, ...fields], + ...table.map((row) => [ + excelDateSerial(row[xField]), + ...fields.map((field) => Number(row[field])), + ]), + ], + categoryAxis: { title: xField, numberFormat: 'yyyy-mm-dd', tickLabelSpacing }, + valueAxis: { + title: 'Price', + numberFormat: formatSpecToExcel(semantics.close?.format), + minimumScale, + maximumScale: maximumScale === maximum ? maximumScale + majorUnit : maximumScale, + majorUnit, + }, + legend: { visible: false }, + width: base.width, + height: base.height, + warnings: [], + _flint: { flintType: 'Candlestick Chart', xField, priceFields: fields }, + }; + }, +}; \ No newline at end of file diff --git a/packages/flint-js/src/excel/templates/funnel.ts b/packages/flint-js/src/excel/templates/funnel.ts new file mode 100644 index 00000000..401037de --- /dev/null +++ b/packages/flint-js/src/excel/templates/funnel.ts @@ -0,0 +1,69 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { formatSpecToExcel } from '../chart-types'; +import type { ExcelTemplateDef } from './types'; + +export const excelFunnelChartDef: ExcelTemplateDef = { + chart: 'Funnel Chart', + channels: ['y', 'size'], + typeMapping: { vertical: 'Funnel', noAxes: true }, + validate: ({ table, fieldOf, typeOf }) => { + if (!fieldOf('y') || typeOf('y') === 'quantitative') { + return 'requires a categorical y stage field for a native Excel funnel chart'; + } + if (typeOf('size') !== 'quantitative') { + return 'requires a quantitative size field for a native Excel funnel chart'; + } + const valueField = fieldOf('size')!; + if (table.some((row) => Number.isFinite(Number(row[valueField])) && Number(row[valueField]) < 0)) { + return 'requires non-negative values for a native Excel funnel chart'; + } + return undefined; + }, + instantiate: ({ input, table, semantics, fieldOf }) => { + const stageField = fieldOf('y')!; + const valueField = fieldOf('size')!; + const stageValues = new Map(); + for (const row of table) { + const stage = row[stageField]; + const value = Number(row[valueField]); + if (stage == null || !Number.isFinite(value)) continue; + const label = String(stage); + stageValues.set(label, (stageValues.get(label) ?? 0) + value); + } + + const rows = [...stageValues.entries()]; + const sort = input.chart_spec.chartProperties?.sort ?? 'descending'; + if (sort === 'descending') rows.sort((left, right) => right[1] - left[1]); + if (sort === 'ascending') rows.sort((left, right) => left[1] - right[1]); + + const base = input.chart_spec.baseSize ?? { width: 480, height: 320 }; + return { + schema: 'flint.excel.chart/v1', + kind: 'chart', + chartType: 'Funnel', + title: `${valueField} by ${stageField}`, + seriesBy: 'Columns', + data: [[stageField, valueField], ...rows], + legend: { visible: false }, + dataLabels: { + visible: true, + numberFormat: formatSpecToExcel(semantics.size?.format), + fontColor: '#FFFFFF', + fontSize: 11, + }, + seriesFormats: [{ color: '#4472C4' }], + width: base.width, + height: base.height, + warnings: [], + _flint: { + flintType: 'Funnel Chart', + stageField, + valueField, + sort, + valueNumberFormat: formatSpecToExcel(semantics.size?.format), + }, + }; + }, +}; \ No newline at end of file diff --git a/packages/flint-js/src/excel/templates/histogram.ts b/packages/flint-js/src/excel/templates/histogram.ts new file mode 100644 index 00000000..bf6964eb --- /dev/null +++ b/packages/flint-js/src/excel/templates/histogram.ts @@ -0,0 +1,80 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import type { ExcelTemplateDef } from './types'; + +function niceBinStep(minimum: number, maximum: number, maxBins: number): number { + const raw = Math.max(Number.EPSILON, maximum - minimum) / Math.max(1, maxBins); + const power = 10 ** Math.floor(Math.log10(raw)); + const error = raw / power; + const factor = error >= 5 ? 10 : error >= 2 ? 5 : error >= 1 ? 2 : 1; + return factor * power; +} + +export const excelHistogramDef: ExcelTemplateDef = { + chart: 'Histogram', + channels: ['x', 'color'], + typeMapping: { vertical: 'ColumnClustered' }, + validate: ({ fieldOf, typeOf }) => { + const valueChannel = fieldOf('x') ? 'x' : 'y'; + return !fieldOf(valueChannel) || typeOf(valueChannel) !== 'quantitative' + ? 'requires a quantitative value field for a native Excel histogram' + : undefined; + }, + instantiate: ({ input, table, fieldOf }) => { + const valueField = fieldOf('x') ?? fieldOf('y')!; + const values = table.map((row) => Number(row[valueField])).filter(Number.isFinite); + if (values.length === 0) throw new Error('Excel histogram requires finite numeric values.'); + + const requestedBins = Number(input.chart_spec.chartProperties?.binCount); + const maxBins = Number.isFinite(requestedBins) && requestedBins > 0 + ? Math.max(1, Math.round(requestedBins)) + : 10; + const minimum = Math.min(...values); + const maximum = Math.max(...values); + const binWidth = maximum > minimum ? niceBinStep(minimum, maximum, maxBins) : 1; + const binMinimum = Math.floor(minimum / binWidth) * binWidth; + const binMaximum = Math.ceil(maximum / binWidth) * binWidth; + const binCount = Math.max(1, Math.round((binMaximum - binMinimum) / binWidth)); + const labels = Array.from({ length: binCount }, (_value, index) => { + const lower = binMinimum + index * binWidth; + const upper = binMinimum + (index + 1) * binWidth; + return `${Number(lower.toFixed(2))}-${Number(upper.toFixed(2))}`; + }); + const colorField = fieldOf('color'); + const seriesKeys = colorField + ? [...new Set(table.map((row) => String(row[colorField])))] + : ['Count']; + const seriesCounts = seriesKeys.map(() => new Array(binCount).fill(0)); + for (const row of table) { + const value = Number(row[valueField]); + if (!Number.isFinite(value)) continue; + const binIndex = Math.min( + binCount - 1, + Math.max(0, Math.floor((value - binMinimum) / binWidth)), + ); + const seriesIndex = colorField ? seriesKeys.indexOf(String(row[colorField])) : 0; + if (seriesIndex >= 0) seriesCounts[seriesIndex][binIndex] += 1; + } + const base = input.chart_spec.baseSize ?? { width: 480, height: 320 }; + return { + schema: 'flint.excel.chart/v1', + kind: 'chart', + chartType: colorField ? 'ColumnStacked' : 'ColumnClustered', + title: `Distribution of ${valueField}`, + seriesBy: 'Columns', + data: [ + [valueField, ...seriesKeys], + ...labels.map((label, index) => [label, ...seriesCounts.map((series) => series[index])]), + ], + categoryAxis: { title: valueField }, + valueAxis: { title: 'Count', numberFormat: '0' }, + legend: { visible: Boolean(colorField), position: 'Bottom' }, + gapWidth: 0, + width: base.width, + height: base.height, + warnings: [], + _flint: { flintType: 'Histogram', valueField, colorField, binCount, binMinimum, binMaximum }, + }; + }, +}; \ No newline at end of file diff --git a/packages/flint-js/src/excel/templates/index.ts b/packages/flint-js/src/excel/templates/index.ts new file mode 100644 index 00000000..367fbb5a --- /dev/null +++ b/packages/flint-js/src/excel/templates/index.ts @@ -0,0 +1,49 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import type { ExcelTemplateDef } from './types'; +import { excelAreaChartDef } from './area'; +import { excelBarChartDef, excelGroupedBarChartDef, excelStackedBarChartDef } from './bar'; +import { excelBoxplotDef } from './boxplot'; +import { excelCandlestickDef } from './candlestick'; +import { excelFunnelChartDef } from './funnel'; +import { excelHistogramDef } from './histogram'; +import { excelLineChartDef } from './line'; +import { excelDonutChartDef, excelPieChartDef } from './pie'; +import { excelPyramidChartDef } from './pyramid'; +import { excelRadarChartDef } from './radar'; +import { excelConnectedScatterPlotDef, excelScatterPlotDef } from './scatter'; +import { excelSunburstChartDef } from './sunburst'; +import { excelTreemapDef } from './treemap'; +import { excelWaterfallChartDef } from './waterfall'; + +export const excelAllTemplateDefs: ExcelTemplateDef[] = [ + excelBarChartDef, + excelGroupedBarChartDef, + excelStackedBarChartDef, + excelPyramidChartDef, + excelLineChartDef, + excelAreaChartDef, + excelScatterPlotDef, + excelConnectedScatterPlotDef, + excelPieChartDef, + excelDonutChartDef, + excelHistogramDef, + excelBoxplotDef, + excelCandlestickDef, + excelWaterfallChartDef, + excelRadarChartDef, + excelFunnelChartDef, + excelTreemapDef, + excelSunburstChartDef, +]; + +export function excelGetTemplateDef(chartType: string): ExcelTemplateDef | undefined { + return excelAllTemplateDefs.find((template) => template.chart === chartType); +} + +export function excelGetTemplateChannels(chartType: string): string[] { + return excelGetTemplateDef(chartType)?.channels ?? []; +} + +export type { ExcelTemplateContext, ExcelTemplateDef } from './types'; \ No newline at end of file diff --git a/packages/flint-js/src/excel/templates/line.ts b/packages/flint-js/src/excel/templates/line.ts new file mode 100644 index 00000000..871d6f4b --- /dev/null +++ b/packages/flint-js/src/excel/templates/line.ts @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import type { ExcelTemplateDef } from './types'; + +export const excelLineChartDef: ExcelTemplateDef = { + chart: 'Line Chart', + channels: ['x', 'y', 'color', 'strokeDash'], + typeMapping: { vertical: 'Line' }, + validate: ({ typeOf }) => { + if (typeOf('y') !== 'quantitative') { + return 'requires a quantitative y field for a native Excel line chart'; + } + if (typeOf('color') === 'quantitative' || typeOf('color') === 'temporal') { + return 'does not support continuous color on a native Excel line chart'; + } + return undefined; + }, +}; \ No newline at end of file diff --git a/packages/flint-js/src/excel/templates/pie.ts b/packages/flint-js/src/excel/templates/pie.ts new file mode 100644 index 00000000..38d71c14 --- /dev/null +++ b/packages/flint-js/src/excel/templates/pie.ts @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import type { ExcelTemplateDef } from './types'; + +export const excelPieChartDef: ExcelTemplateDef = { + chart: 'Pie Chart', + channels: ['color', 'size', 'theta'], + typeMapping: { vertical: 'Pie', noAxes: true }, +}; + +export const excelDonutChartDef: ExcelTemplateDef = { + chart: 'Donut Chart', + channels: ['color', 'size', 'theta'], + typeMapping: { vertical: 'Doughnut', noAxes: true }, +}; \ No newline at end of file diff --git a/packages/flint-js/src/excel/templates/pyramid.ts b/packages/flint-js/src/excel/templates/pyramid.ts new file mode 100644 index 00000000..33724f04 --- /dev/null +++ b/packages/flint-js/src/excel/templates/pyramid.ts @@ -0,0 +1,115 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { formatSpecToExcel } from '../chart-types'; +import type { ExcelTemplateDef } from './types'; + +function niceMaximum(value: number): { maximum: number; majorUnit: number } { + const roughStep = Math.max(value, 1) / 5; + const power = 10 ** Math.floor(Math.log10(roughStep)); + const fraction = roughStep / power; + const majorUnit = (fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10) * power; + return { maximum: Math.ceil(value / majorUnit) * majorUnit, majorUnit }; +} + +function absoluteNumberFormat(format: string | undefined): string { + const positive = !format || format === 'General' ? '#,##0' : format; + return `${positive};${positive};0`; +} + +export const excelPyramidChartDef: ExcelTemplateDef = { + chart: 'Pyramid Chart', + channels: ['x', 'y', 'color'], + typeMapping: { vertical: 'BarStacked', horizontal: 'BarStacked' }, + validate: ({ table, fieldOf, typeOf }) => { + const xIsMeasure = typeOf('x') === 'quantitative'; + const yIsMeasure = typeOf('y') === 'quantitative'; + if (xIsMeasure === yIsMeasure) { + return 'requires exactly one quantitative measure axis for a native Excel pyramid chart'; + } + const categoryChannel = xIsMeasure ? 'y' : 'x'; + if (!fieldOf(categoryChannel) || typeOf(categoryChannel) === 'quantitative') { + return 'requires a discrete category axis for a native Excel pyramid chart'; + } + const groupField = fieldOf('color'); + if (!groupField || ['quantitative', 'temporal'].includes(typeOf('color') ?? '')) { + return 'requires a discrete color field for a native Excel pyramid chart'; + } + const groups = [...new Set(table.map((row) => row[groupField]).filter((value) => value != null))]; + if (groups.length !== 2) { + return `requires exactly two groups for a native Excel pyramid chart (found ${groups.length})`; + } + const measureField = fieldOf(xIsMeasure ? 'x' : 'y')!; + if (table.some((row) => Number.isFinite(Number(row[measureField])) && Number(row[measureField]) < 0)) { + return 'requires non-negative values for a native Excel pyramid chart'; + } + return undefined; + }, + instantiate: ({ input, table, semantics, fieldOf, typeOf }) => { + const measureChannel = typeOf('x') === 'quantitative' ? 'x' : 'y'; + const categoryChannel = measureChannel === 'x' ? 'y' : 'x'; + const measureField = fieldOf(measureChannel)!; + const categoryField = fieldOf(categoryChannel)!; + const groupField = fieldOf('color')!; + const categories = [...new Set(table.map((row) => row[categoryField]).filter((value) => value != null))]; + const groups = [...new Set(table.map((row) => row[groupField]).filter((value) => value != null))]; + const totals = new Map(); + for (const row of table) { + const category = row[categoryField]; + const group = row[groupField]; + const value = Number(row[measureField]); + if (category == null || group == null || !Number.isFinite(value)) continue; + const key = `${String(category)}\u0000${String(group)}`; + totals.set(key, (totals.get(key) ?? 0) + value); + } + const valueAt = (category: unknown, group: unknown): number | null => { + const value = totals.get(`${String(category)}\u0000${String(group)}`); + return value === undefined ? null : value; + }; + const maximumValue = Math.max(0, ...totals.values()); + const { maximum, majorUnit } = niceMaximum(maximumValue); + const numberFormat = formatSpecToExcel(semantics[measureChannel]?.format); + const base = input.chart_spec.baseSize ?? { width: 560, height: 360 }; + + return { + schema: 'flint.excel.chart/v1', + kind: 'chart', + chartType: 'BarStacked', + title: `${measureField} by ${categoryField} and ${groupField}`, + seriesBy: 'Columns', + data: [ + [categoryField, ...groups.map(String)], + ...categories.map((category) => { + const leftValue = valueAt(category, groups[0]); + return [ + String(category), + leftValue === null ? null : -leftValue, + valueAt(category, groups[1]), + ]; + }), + ], + categoryAxis: { title: categoryField, reversePlotOrder: true }, + valueAxis: { + title: measureField, + numberFormat: absoluteNumberFormat(numberFormat), + minimumScale: -maximum, + maximumScale: maximum, + majorUnit, + }, + legend: { visible: true, position: 'Bottom' }, + seriesFormats: [{ color: '#4472C4' }, { color: '#C55A5A' }], + gapWidth: 45, + overlap: 100, + width: base.width, + height: base.height, + warnings: [], + _flint: { + flintType: 'Pyramid Chart', + categoryField, + measureField, + groupField, + groups: groups.map(String), + }, + }; + }, +}; \ No newline at end of file diff --git a/packages/flint-js/src/excel/templates/radar.ts b/packages/flint-js/src/excel/templates/radar.ts new file mode 100644 index 00000000..2be88dde --- /dev/null +++ b/packages/flint-js/src/excel/templates/radar.ts @@ -0,0 +1,111 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import type { ExcelTemplateDef } from './types'; + +function niceMaximum(value: number): number { + if (!(value > 0)) return 1; + const power = 10 ** Math.floor(Math.log10(value)); + const fraction = value / power; + const niceFraction = fraction <= 1 ? 1 + : fraction <= 2 ? 2 + : fraction <= 2.5 ? 2.5 + : fraction <= 5 ? 5 + : 10; + return niceFraction * power; +} + +export const excelRadarChartDef: ExcelTemplateDef = { + chart: 'Radar Chart', + channels: ['x', 'y', 'color'], + typeMapping: { vertical: 'RadarMarkers' }, + validate: ({ table, fieldOf, typeOf }) => { + if (!fieldOf('x') || typeOf('x') === 'quantitative' || typeOf('x') === 'temporal') { + return 'requires a categorical metric x field for a native Excel radar chart'; + } + if (!fieldOf('y') || typeOf('y') !== 'quantitative') { + return 'requires a quantitative y field for a native Excel radar chart'; + } + if (fieldOf('color') && (typeOf('color') === 'quantitative' || typeOf('color') === 'temporal')) { + return 'requires a discrete color field for native Excel radar series'; + } + if (fieldOf('column') || fieldOf('row')) { + return 'does not support faceting in one native Excel radar chart'; + } + const valueField = fieldOf('y')!; + if (table.some((row) => Number(row[valueField]) < 0)) { + return 'requires non-negative values for a native Excel radar chart'; + } + return undefined; + }, + instantiate: ({ input, table, fieldOf }) => { + const metricField = fieldOf('x')!; + const valueField = fieldOf('y')!; + const seriesField = fieldOf('color'); + const metrics = [...new Set(table.map((row) => String(row[metricField])))]; + if (metrics.length < 3) { + throw new Error('Excel radar chart requires at least three metric axes.'); + } + const seriesKeys = seriesField + ? [...new Set(table.map((row) => String(row[seriesField])))] + : [valueField]; + const metricMaximums = new Map(metrics.map((metric) => { + const values = table + .filter((row) => String(row[metricField]) === metric) + .map((row) => Number(row[valueField])) + .filter(Number.isFinite); + return [metric, niceMaximum(values.length > 0 ? Math.max(...values) : 1)] as const; + })); + const accumulators = new Map(); + for (const row of table) { + const metric = String(row[metricField]); + const series = seriesField ? String(row[seriesField]) : valueField; + const value = Number(row[valueField]); + if (!Number.isFinite(value)) continue; + const key = `${series}\u0000${metric}`; + const accumulator = accumulators.get(key) ?? { sum: 0, count: 0 }; + accumulator.sum += value; + accumulator.count += 1; + accumulators.set(key, accumulator); + } + const normalizedValue = (series: string, metric: string): number => { + const accumulator = accumulators.get(`${series}\u0000${metric}`); + if (!accumulator) return 0; + return (accumulator.sum / accumulator.count) / metricMaximums.get(metric)!; + }; + const base = input.chart_spec.baseSize ?? { width: 480, height: 400 }; + const filledRequested = input.chart_spec.chartProperties?.filled !== false; + return { + schema: 'flint.excel.chart/v1', + kind: 'chart', + chartType: 'RadarMarkers', + title: `${valueField} by ${metricField}`, + seriesBy: 'Columns', + data: [ + [metricField, ...seriesKeys], + ...metrics.map((metric) => [ + `${metric} (${metricMaximums.get(metric)})`, + ...seriesKeys.map((series) => normalizedValue(series, metric)), + ]), + ], + valueAxis: { minimumScale: 0, maximumScale: 1, majorUnit: 0.25 }, + legend: { visible: Boolean(seriesField), position: 'Bottom' }, + width: base.width, + height: base.height, + warnings: filledRequested ? [{ + severity: 'info', + code: 'excel-radar-fill-unsupported', + message: 'Excel Radar uses outlines and markers because Office.js does not expose translucent chart-series fills.', + }] : [], + _flint: { + flintType: 'Radar Chart', + metricField, + valueField, + seriesField, + metricMaximums: Object.fromEntries(metricMaximums), + normalized: true, + filledRequested, + }, + }; + }, +}; \ No newline at end of file diff --git a/packages/flint-js/src/excel/templates/scatter.ts b/packages/flint-js/src/excel/templates/scatter.ts new file mode 100644 index 00000000..62972b3e --- /dev/null +++ b/packages/flint-js/src/excel/templates/scatter.ts @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import type { ExcelTemplateDef } from './types'; +import { requireQuantitativeAxes } from './types'; + +export const excelScatterPlotDef: ExcelTemplateDef = { + chart: 'Scatter Plot', + channels: ['x', 'y', 'color', 'size'], + typeMapping: { vertical: 'XYScatter', xy: true }, + validate: (context) => requireQuantitativeAxes(context) + ?? (context.typeOf('color') === 'quantitative' || context.typeOf('color') === 'temporal' + ? 'does not support continuous color in a native Excel Scatter or Bubble chart' + : undefined), +}; + +export const excelConnectedScatterPlotDef: ExcelTemplateDef = { + chart: 'Connected Scatter Plot', + channels: ['x', 'y', 'order', 'color', 'detail'], + typeMapping: { vertical: 'XYScatterLines', xy: true }, + validate: (context) => requireQuantitativeAxes(context) + ?? (!context.fieldOf('order') + ? 'requires an explicit order field for a native Excel connected scatter chart' + : context.fieldOf('detail') + ? 'does not support an unlegended detail series in a native Excel connected scatter chart' + : context.typeOf('color') === 'quantitative' || context.typeOf('color') === 'temporal' + ? 'does not support continuous color in a native Excel connected scatter chart' + : undefined), +}; \ No newline at end of file diff --git a/packages/flint-js/src/excel/templates/sunburst.ts b/packages/flint-js/src/excel/templates/sunburst.ts new file mode 100644 index 00000000..57f18331 --- /dev/null +++ b/packages/flint-js/src/excel/templates/sunburst.ts @@ -0,0 +1,67 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import type { ExcelTemplateDef } from './types'; + +export const excelSunburstChartDef: ExcelTemplateDef = { + chart: 'Sunburst Chart', + channels: ['color', 'size', 'group', 'detail'], + typeMapping: { vertical: 'Sunburst', noAxes: true }, + validate: ({ table, fieldOf, typeOf }) => { + if (!fieldOf('color') || typeOf('color') === 'quantitative') { + return 'requires a categorical color field for a native Excel sunburst chart'; + } + if (typeOf('size') !== 'quantitative') { + return 'requires a quantitative size field for a native Excel sunburst chart'; + } + if (fieldOf('group') && typeOf('group') === 'quantitative') { + return 'requires a categorical group field for a native Excel sunburst hierarchy'; + } + if (fieldOf('detail') && !fieldOf('group')) { + return 'requires a group field before detail in a native Excel sunburst hierarchy'; + } + if (fieldOf('detail') && typeOf('detail') === 'quantitative') { + return 'requires a categorical detail field for a native Excel sunburst hierarchy'; + } + const valueField = fieldOf('size')!; + if (table.some((row) => Number.isFinite(Number(row[valueField])) && Number(row[valueField]) < 0)) { + return 'requires non-negative values for a native Excel sunburst chart'; + } + return undefined; + }, + instantiate: ({ input, table, fieldOf }) => { + const categoryField = fieldOf('color')!; + const groupField = fieldOf('group'); + const detailField = fieldOf('detail'); + const valueField = fieldOf('size')!; + const hierarchyFields = [categoryField, groupField, detailField].filter((field): field is string => Boolean(field)); + const leaves = new Map(); + for (const row of table) { + const path = hierarchyFields.map((field) => row[field]); + const value = Number(row[valueField]); + if (path.some((part) => part == null) || !Number.isFinite(value)) continue; + const labels = path.map(String); + const key = labels.join('\u0000'); + const existing = leaves.get(key); + leaves.set(key, { path: labels, value: (existing?.value ?? 0) + value }); + } + + const base = input.chart_spec.baseSize ?? { width: 480, height: 320 }; + return { + schema: 'flint.excel.chart/v1', + kind: 'chart', + chartType: 'Sunburst', + title: `${valueField} by ${hierarchyFields[hierarchyFields.length - 1]}`, + seriesBy: 'Columns', + data: [ + [...hierarchyFields, valueField], + ...[...leaves.values()].map((leaf) => [...leaf.path, leaf.value]), + ], + legend: { visible: false }, + width: base.width, + height: base.height, + warnings: [], + _flint: { flintType: 'Sunburst Chart', hierarchyFields, valueField }, + }; + }, +}; \ No newline at end of file diff --git a/packages/flint-js/src/excel/templates/treemap.ts b/packages/flint-js/src/excel/templates/treemap.ts new file mode 100644 index 00000000..d604a228 --- /dev/null +++ b/packages/flint-js/src/excel/templates/treemap.ts @@ -0,0 +1,65 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import type { ExcelTemplateDef } from './types'; + +export const excelTreemapDef: ExcelTemplateDef = { + chart: 'Treemap', + channels: ['color', 'size', 'detail'], + typeMapping: { vertical: 'Treemap', noAxes: true }, + validate: ({ table, fieldOf, typeOf }) => { + if (!fieldOf('color') || typeOf('color') === 'quantitative') { + return 'requires a categorical color field for a native Excel treemap'; + } + if (typeOf('size') !== 'quantitative') { + return 'requires a quantitative size field for a native Excel treemap'; + } + if (fieldOf('detail') && typeOf('detail') === 'quantitative') { + return 'requires a categorical detail field for a native Excel treemap hierarchy'; + } + const valueField = fieldOf('size')!; + if (table.some((row) => Number.isFinite(Number(row[valueField])) && Number(row[valueField]) < 0)) { + return 'requires non-negative values for a native Excel treemap'; + } + return undefined; + }, + instantiate: ({ input, table, fieldOf }) => { + const categoryField = fieldOf('color')!; + const detailField = fieldOf('detail'); + const valueField = fieldOf('size')!; + const leaves = new Map(); + for (const row of table) { + const category = row[categoryField]; + const detail = detailField ? row[detailField] : undefined; + const value = Number(row[valueField]); + if (category == null || (detailField && detail == null) || !Number.isFinite(value)) continue; + const categoryLabel = String(category); + const detailLabel = detailField ? String(detail) : undefined; + const key = `${categoryLabel}\u0000${detailLabel ?? ''}`; + const existing = leaves.get(key); + leaves.set(key, { + category: categoryLabel, + detail: detailLabel, + value: (existing?.value ?? 0) + value, + }); + } + + const rows = [...leaves.values()]; + const base = input.chart_spec.baseSize ?? { width: 480, height: 320 }; + return { + schema: 'flint.excel.chart/v1', + kind: 'chart', + chartType: 'Treemap', + title: `${valueField} by ${detailField ?? categoryField}`, + seriesBy: 'Columns', + data: detailField + ? [[categoryField, detailField, valueField], ...rows.map((row) => [row.category, row.detail!, row.value])] + : [[categoryField, valueField], ...rows.map((row) => [row.category, row.value])], + legend: { visible: false }, + width: base.width, + height: base.height, + warnings: [], + _flint: { flintType: 'Treemap', categoryField, detailField, valueField }, + }; + }, +}; \ No newline at end of file diff --git a/packages/flint-js/src/excel/templates/types.ts b/packages/flint-js/src/excel/templates/types.ts new file mode 100644 index 00000000..e7b5f0a4 --- /dev/null +++ b/packages/flint-js/src/excel/templates/types.ts @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import type { ChartAssemblyInput, SemanticResult } from '../../core/types'; +import type { ExcelTypeMapping } from '../chart-types'; +import type { ExcelNativeChartSpec } from '../types'; + +export interface ExcelTemplateContext { + input: ChartAssemblyInput; + table: any[]; + semantics: SemanticResult; + fieldOf: (channel: string) => string | undefined; + typeOf: (channel: string) => string | undefined; +} + +export interface ExcelTemplateDef { + chart: string; + channels: string[]; + typeMapping: ExcelTypeMapping; + validate?: (context: ExcelTemplateContext) => string | undefined; + instantiate?: (context: ExcelTemplateContext) => ExcelNativeChartSpec; +} + +export function requireQuantitativeAxes(context: ExcelTemplateContext): string | undefined { + if (context.typeOf('x') !== 'quantitative' || context.typeOf('y') !== 'quantitative') { + return 'requires quantitative x and y fields for a native Excel XY chart'; + } + if (context.fieldOf('shape')) { + return 'does not support a shape encoding in native Excel charts'; + } + return undefined; +} \ No newline at end of file diff --git a/packages/flint-js/src/excel/templates/waterfall.ts b/packages/flint-js/src/excel/templates/waterfall.ts new file mode 100644 index 00000000..f368565c --- /dev/null +++ b/packages/flint-js/src/excel/templates/waterfall.ts @@ -0,0 +1,68 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { resolveTotalsMode } from '../../chart-types/waterfall'; +import { formatSpecToExcel } from '../chart-types'; +import type { ExcelTemplateDef } from './types'; + +export const excelWaterfallChartDef: ExcelTemplateDef = { + chart: 'Waterfall Chart', + channels: ['x', 'y', 'color'], + typeMapping: { vertical: 'Waterfall' }, + validate: ({ input, table, fieldOf, typeOf }) => { + if (!fieldOf('x')) return 'requires a category x field for a native Excel waterfall chart'; + if (typeOf('y') !== 'quantitative') { + return 'requires a quantitative y field for a native Excel waterfall chart'; + } + if (fieldOf('color') && typeOf('color') === 'quantitative') { + return 'requires color to contain start/delta/end roles for a native Excel waterfall chart'; + } + const valueField = fieldOf('y')!; + const typeField = fieldOf('color'); + const values = table.map((row) => Number(row[valueField])).filter(Number.isFinite); + if (typeField) { + const unsupportedTotal = table.findIndex((row, index) => { + const role = String(row[typeField] ?? '').toLowerCase(); + return index > 0 && (role === 'start' || role === 'end' || role === 'total'); + }); + if (unsupportedTotal >= 0) { + return 'cannot mark non-initial total points because Office.js does not expose Waterfall total-point semantics'; + } + } else { + const totals = resolveTotalsMode(values, input.chart_spec.chartProperties?.totals); + if (totals === 'last' || totals === 'both') { + return 'cannot mark a final total because Office.js does not expose Waterfall total-point semantics'; + } + } + return undefined; + }, + instantiate: ({ input, table, semantics, fieldOf }) => { + const categoryField = fieldOf('x')!; + const valueField = fieldOf('y')!; + const rows = table.filter((row) => row[categoryField] != null && Number.isFinite(Number(row[valueField]))); + + const base = input.chart_spec.baseSize ?? { width: 480, height: 320 }; + return { + schema: 'flint.excel.chart/v1', + kind: 'chart', + chartType: 'Waterfall', + title: `${valueField} by ${categoryField}`, + seriesBy: 'Columns', + data: [ + [categoryField, valueField], + ...rows.map((row) => [String(row[categoryField]), Number(row[valueField])]), + ], + categoryAxis: { title: categoryField }, + valueAxis: { + title: valueField, + numberFormat: formatSpecToExcel(semantics.y?.format), + }, + legend: { visible: false }, + showConnectorLines: true, + width: base.width, + height: base.height, + warnings: [], + _flint: { flintType: 'Waterfall Chart', categoryField, valueField }, + }; + }, +}; \ No newline at end of file diff --git a/packages/flint-js/src/excel/types.ts b/packages/flint-js/src/excel/types.ts new file mode 100644 index 00000000..8d236eb5 --- /dev/null +++ b/packages/flint-js/src/excel/types.ts @@ -0,0 +1,140 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Excel backend types. + * + * The Excel "native spec" is a declarative description of an Office.js chart: + * a wide/matrix data range plus chart type, axes, legend, and series config. + * A host renders it imperatively via the Office.js Excel API + * (`sheet.charts.add(type, range, seriesBy)` + `chart.getImage()`). + * + * This mirrors how the other backends emit a native artifact (Vega-Lite spec, + * ECharts option, Chart.js config) — here the artifact targets Excel charts. + */ + +import type { ChartWarning } from '../core/types'; + +/** Excel `ChartSeriesBy` orientation. */ +export type ExcelSeriesBy = 'Columns' | 'Rows'; + +/** Excel `ChartLegendPosition` (subset we emit). */ +export type ExcelLegendPosition = 'Top' | 'Bottom' | 'Left' | 'Right'; + +export interface ExcelAxisSpec { + /** Axis title text (from the field display name). */ + title?: string; + /** Axis-label font size in points, used when dense categories need explicit sizing. */ + labelFontSize?: number; + /** Number of categories between displayed labels; underlying data stays intact. */ + tickLabelSpacing?: number; + /** Excel number format string, e.g. `"$#,##0"`, `"0.0%"`, `"#,##0"`. */ + numberFormat?: string; + /** Reverse Excel's native category plotting order (horizontal nominal bars). */ + reversePlotOrder?: boolean; + /** Explicit native-axis minimum, used for zero-anchored length/area charts. */ + minimumScale?: number; + /** Explicit native-axis maximum, used to avoid excessive automatic headroom. */ + maximumScale?: number; + /** Interval between major ticks on a numeric axis. */ + majorUnit?: number; +} + +export interface ExcelLegendSpec { + visible: boolean; + position?: ExcelLegendPosition; +} + +export interface ExcelDataLabelsSpec { + visible: boolean; + position?: 'BestFit' | 'Center' | 'InsideBase' | 'InsideEnd' | 'OutsideEnd'; + numberFormat?: string; + fontColor?: string; + fontSize?: number; +} + +export interface ExcelNativeSeriesSpec { + /** Legend/series name. */ + name: string; + /** Zero-based worksheet column containing X values, excluding the header row. */ + xColumn: number; + /** Zero-based worksheet column containing Y values, excluding the header row. */ + yColumn: number; + /** Number of populated worksheet rows in this series. */ + rowCount: number; + /** Optional zero-based worksheet column containing bubble sizes. */ + bubbleSizeColumn?: number; +} + +export interface ExcelNativeSeriesFormatSpec { + /** Native HTML color shared by related series segments. */ + color?: string; + /** Excel.ChartLineStyle string. */ + lineStyle?: 'Continuous' | 'Dash' | 'DashDot' | 'DashDotDot' | 'Dot' | 'RoundDot'; +} + +export interface ExcelBoxWhiskerOptionsSpec { + quartileCalculation?: 'Inclusive' | 'Exclusive'; + showInnerPoints?: boolean; + showMeanLine?: boolean; + showMeanMarker?: boolean; + showOutlierPoints?: boolean; +} + +interface ExcelRenderSpecBase { + /** Stable discriminator for serialized Flint Excel artifacts. */ + schema: 'flint.excel.chart/v1'; + /** Chart title. */ + title?: string; + /** Source values written to the worksheet. */ + data: Array>; + /** Target width/height in points (from Flint layout / baseSize). */ + width?: number; + height?: number; + /** Flint assembler warnings (overflow, etc.). */ + warnings?: ChartWarning[]; + /** Provenance for debugging (not consumed by the renderer). */ + _flint?: Record; +} + +/** A conventional native Excel chart rendered through `Chart.getImage()`. */ +export interface ExcelNativeChartSpec extends ExcelRenderSpecBase { + kind: 'chart'; + /** + * The Office.js `Excel.ChartType` enum string, e.g. `"ColumnClustered"`, + * `"BarStacked"`, `"Line"`, `"XYScatter"`, `"Pie"`. + */ + chartType: string; + /** Whether series run down columns or across rows of the data range. */ + seriesBy: ExcelSeriesBy; + /** Explicit bindings for XY/bubble series when Excel cannot infer grouped ranges. */ + series?: ExcelNativeSeriesSpec[]; + /** Formatting aligned with the rendered series order. */ + seriesFormats?: ExcelNativeSeriesFormatSpec[]; + /** Category (label) axis. Absent for pie/doughnut (no axes). */ + categoryAxis?: ExcelAxisSpec; + /** Value (measure) axis. Absent for pie/doughnut. */ + valueAxis?: ExcelAxisSpec; + /** Legend visibility + position. */ + legend?: ExcelLegendSpec; + /** Native chart data labels. */ + dataLabels?: ExcelDataLabelsSpec; + /** Bar/column gap width (%) — bar family only. */ + gapWidth?: number; + /** Bar/column series overlap (%) — 2-D bar family only. */ + overlap?: number; + /** Excel bubble-size percentage (0-300), applied to every bubble series. */ + bubbleScale?: number; + /** Doughnut hole size percentage (10-90), applied to every doughnut series. */ + doughnutHoleSize?: number; + /** Statistical options applied to every native box-and-whisker series. */ + boxWhiskerOptions?: ExcelBoxWhiskerOptionsSpec; + /** Display native connector lines between Waterfall points. */ + showConnectorLines?: boolean; +} + +/** A backend-native Excel chart artifact. */ +export type ExcelChartSpec = ExcelNativeChartSpec; + +/** Preferred name for the backend artifact; retained alongside ExcelChartSpec. */ +export type ExcelRenderSpec = ExcelChartSpec; diff --git a/packages/flint-js/src/index.ts b/packages/flint-js/src/index.ts index 5f121268..824f9746 100644 --- a/packages/flint-js/src/index.ts +++ b/packages/flint-js/src/index.ts @@ -14,6 +14,7 @@ * vegalite/ — Vega-Lite backend: assembly, templates, spec instantiation * echarts/ — ECharts backend: assembly, templates, spec instantiation * chartjs/ — Chart.js backend: assembly, templates, spec instantiation + * plotly/ — Plotly backend: assembly, templates, spec instantiation * * Assembly functions: * assembleVegaLite(input) — Vega-Lite spec @@ -52,3 +53,7 @@ export * from './echarts'; // Chart.js backend: assembleChartjs, templates, spec instantiation export * from './chartjs'; +export * from './plotly'; + +// Excel backend: assembleExcel + Excel chart spec types +export * from './excel'; diff --git a/packages/flint-js/src/plotly/assemble.ts b/packages/flint-js/src/plotly/assemble.ts new file mode 100644 index 00000000..628bb304 --- /dev/null +++ b/packages/flint-js/src/plotly/assemble.ts @@ -0,0 +1,361 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Plotly chart assembly — Two-Stage Pipeline Coordinator. + * + * Reuses the **same core analysis pipeline** as the other backends: + * Phase 0: resolveChannelSemantics → ChannelSemantics + * Step 0a: declareLayoutMode → LayoutDeclaration + * Step 0b: convertTemporalData → converted data + * Step 0c: filterOverflow → filtered data, nominalCounts + * Phase 1: computeLayout → LayoutResult + * + * Then diverges for Phase 2 (Plotly-specific): + * template.instantiate → builds the Plotly figure structure + * plApplyLayoutToSpec → applies layout decisions to the figure + * + * Key structural difference from the other backends' output: + * PL: { data: [{ type, x, y, … }], layout: { xaxis, yaxis, … } } + * Figures are pure JSON — no callback functions anywhere — so compiled + * specs survive serialization across process boundaries. + * + * column/row facets render as a subplot grid (see facet.ts), mirroring the + * Chart.js backend's facet decisions (shared nice y-domain, leftmost-only + * y labels, column wrapping). + * + * This module has NO React, Redux, or UI framework dependencies. + */ + +import { + ChartTemplateDef, + ChartAssemblyInput, + AssembleOptions, + LayoutDeclaration, + InstantiateContext, +} from '../core/types'; +import type { ChartWarning } from '../core/types'; +import { applyEncodingOverrides } from '../core/encoding-overrides'; +import { applyAggregation } from '../core/aggregate'; +import { plGetTemplateDef } from './templates'; +import { resolveChannelSemantics, convertTemporalData } from '../core/resolve-semantics'; +import { computeZeroDecision } from '../core/semantic-types'; +import { filterOverflow } from '../core/filter-overflow'; +import { computeLayout, computeChannelBudgets, deriveStretchCaps, resolveBaseSize } from '../core/compute-layout'; +import { decideColorMaps } from '../core/color-decisions'; +import { plApplyLayoutToSpec, plApplyTooltips } from './instantiate-spec'; +import { plCombineFacetPanels, niceBounds, type PlotlyFacetPanel } from './facet'; +import { normalizeStaticSeries } from '../core/static-series'; +import { normalizeChartProperties } from '../core/normalize-properties'; + +// --------------------------------------------------------------------------- +// Public API +// --------------------------------------------------------------------------- +/** + * Assemble a Plotly figure object (`{ data, layout }`). + * + * ```ts + * const figure = assemblePlotly({ + * data: { values: myRows }, + * semantic_types: { weight: 'Quantity' }, + * chart_spec: { chartType: 'Bar Chart', encodings: { x: { field: 'category' }, y: { field: 'value' } } }, + * }); + * ``` + * + * @returns A Plotly figure with optional `_warnings` and `_width`/`_height` hints + */ +export function assemblePlotly(input: ChartAssemblyInput): any { + const chartType = input.chart_spec.chartType; + const semanticTypes = input.semantic_types ?? {}; + const sizeCeiling = input.chart_spec.canvasSize; + const baseSize = resolveBaseSize(input.chart_spec.baseSize, sizeCeiling); + const canvasSize = baseSize; + const options = input.options ?? {}; + const chartTemplate = plGetTemplateDef(chartType) as ChartTemplateDef; + if (!chartTemplate) { + throw new Error(`Unknown Plotly chart type: ${chartType}. Use plAllTemplateDefs to see available types.`); + } + + const warnings: ChartWarning[] = []; + + const normalizedProps = normalizeChartProperties( + chartTemplate.properties, input.chart_spec.chartProperties, + ); + const chartProperties = normalizedProps.chartProperties; + warnings.push(...normalizedProps.warnings); + + // ═══════════════════════════════════════════════════════════════════════ + // PRE-PHASE: Static Series Normalization + // ═══════════════════════════════════════════════════════════════════════ + const rawData = input.data.values ?? []; + const normalized = normalizeStaticSeries( + input.chart_spec.encodings, rawData, semanticTypes, + ); + let data = normalized.data; + const staticSeries = normalized.staticSeries; + + const encodings = applyEncodingOverrides(chartTemplate, normalized.encodings, chartProperties); + + // Optional aggregation transform — see vegalite/assemble for rationale. + data = applyAggregation(encodings, data); + + // ═══════════════════════════════════════════════════════════════════════ + // PHASE 0: Resolve Semantics (shared — completely target-agnostic) + // ═══════════════════════════════════════════════════════════════════════ + + const tplMark = chartTemplate.template?.mark; + const templateMarkType = typeof tplMark === 'string' ? tplMark : tplMark?.type; + + const convertedData = convertTemporalData(data, semanticTypes); + + const channelSemantics = resolveChannelSemantics( + encodings, data, semanticTypes, convertedData, + ); + + // Finalize zero-baseline (requires template mark knowledge) + const effectiveMarkType = templateMarkType || 'point'; + for (const [channel, cs] of Object.entries(channelSemantics)) { + if ((channel === 'x' || channel === 'y') && cs.type === 'quantitative') { + const numericValues = data + .map(r => r[cs.field]) + .filter((v: any) => v != null && typeof v === 'number' && !isNaN(v)); + cs.zero = computeZeroDecision( + cs.semanticAnnotation.semanticType, channel, effectiveMarkType, numericValues, + ); + } + } + + // ═══════════════════════════════════════════════════════════════════════ + // STEP 0a: declareLayoutMode (shared hook) + // ═══════════════════════════════════════════════════════════════════════ + + const declaration: LayoutDeclaration = chartTemplate.declareLayoutMode + ? chartTemplate.declareLayoutMode(channelSemantics, data, chartProperties) + : {}; + + const effectiveOptions: AssembleOptions = { + ...options, + ...(declaration.paramOverrides || {}), + }; + + Object.assign(effectiveOptions, deriveStretchCaps(baseSize, sizeCeiling, effectiveOptions)); + + const { + addTooltips: addTooltipsOpt = false, + } = effectiveOptions; + + // ═══════════════════════════════════════════════════════════════════════ + // STEP 0b: filterOverflow (shared) + // ═══════════════════════════════════════════════════════════════════════ + + const allMarkTypes = new Set(); + if (templateMarkType) allMarkTypes.add(templateMarkType); + + const budgets = computeChannelBudgets( + channelSemantics, declaration, convertedData, canvasSize, effectiveOptions, + ); + const facetGridResult = budgets.facetGrid; + + const overflowResult = filterOverflow( + channelSemantics, declaration, encodings, convertedData, + budgets, allMarkTypes, + ); + + const values = overflowResult.filteredData; + warnings.push(...overflowResult.warnings); + + // ═══════════════════════════════════════════════════════════════════════ + // PHASE 1: Compute Layout (shared — completely target-agnostic) + // ═══════════════════════════════════════════════════════════════════════ + + const layoutResult = computeLayout( + channelSemantics, + declaration, + values, + canvasSize, + effectiveOptions, + facetGridResult, + ); + + layoutResult.truncations = overflowResult.truncations; + + // ═══════════════════════════════════════════════════════════════════════ + // PHASE 2: Instantiate Plotly Figure (PL-specific) + // ═══════════════════════════════════════════════════════════════════════ + + const resolvedEncodings: Record = {}; + for (const [channel, encoding] of Object.entries(encodings)) { + const cs = channelSemantics[channel]; + if (cs) { + resolvedEncodings[channel] = { + field: cs.field, + type: cs.type, + aggregate: encoding.aggregate, + }; + } + } + + const instantiateContext: InstantiateContext = { + channelSemantics, + layout: layoutResult, + table: values, + fullTable: convertedData, + resolvedEncodings, + encodings, + chartProperties, + staticSeries, + canvasSize, + semanticTypes, + chartType, + assembleOptions: effectiveOptions, + colorDecisions: decideColorMaps({ + chartType, + encodings, + channelSemantics, + table: values, + background: 'light', + }), + }; + + const colField = channelSemantics.column?.field; + const rowField = channelSemantics.row?.field; + const hasFacet = !!(colField || rowField); + + let figure: any; + if (hasFacet) { + const colValues = colField ? [...new Set(values.map((r: any) => String(r[colField])))] : ['']; + const rowValues = rowField ? [...new Set(values.map((r: any) => String(r[rowField])))] : ['']; + + // Shared y-domain across panels (mirror the Chart.js backend): nice + // bounds so the shared top/bottom land on round tick values. + const yField = channelSemantics.y?.field; + let sharedYDomain: { min: number; max: number } | undefined; + if (yField) { + const nums = values + .map((r: any) => r[yField]) + .filter((v: any) => typeof v === 'number' && Number.isFinite(v)) as number[]; + if (nums.length > 0) { + const rawMin = Math.min(...nums); + const rawMax = Math.max(...nums); + const forceZero = !!channelSemantics.y?.zero?.zero; + const min = forceZero ? Math.min(0, rawMin) : rawMin; + const max = forceZero ? Math.max(0, rawMax) : rawMax; + sharedYDomain = niceBounds(min, max); + } + } + + // Column wrapping: a column-only facet with more categories than fit + // in one row wraps into a 2D grid (matching the other backends). The + // wrap width comes from the shared facet-grid budget. + const maxColsPerRow = (colField && !rowField) + ? (facetGridResult?.columns ?? colValues.length) + : colValues.length; + const wrapColumnOnly = !!colField && !rowField && maxColsPerRow < colValues.length; + + const gridRows: Array> = []; + if (wrapColumnOnly) { + for (let i = 0; i < colValues.length; i += maxColsPerRow) { + gridRows.push( + colValues.slice(i, i + maxColsPerRow).map((cv) => ({ colVal: cv, rowVal: '' })), + ); + } + } else { + for (let ri = 0; ri < rowValues.length; ri++) { + gridRows.push(colValues.map((cv) => ({ colVal: cv, rowVal: rowValues[ri] }))); + } + } + const gridCols = Math.max(1, ...gridRows.map(r => r.length)); + + // Panel plot size — same discrete/continuous rules as plApplyLayoutToSpec. + const xIsDiscrete = layoutResult.xNominalCount > 0 || layoutResult.xContinuousAsDiscrete > 0; + const yIsDiscrete = layoutResult.yNominalCount > 0 || layoutResult.yContinuousAsDiscrete > 0; + let panelWidth: number; + let panelHeight: number; + if (xIsDiscrete && layoutResult.xStepUnit !== 'group') { + const n = layoutResult.xNominalCount || layoutResult.xContinuousAsDiscrete || 0; + panelWidth = n > 0 ? layoutResult.xStep * n : (layoutResult.subplotWidth || canvasSize.width); + } else { + panelWidth = layoutResult.subplotWidth || canvasSize.width; + } + if (yIsDiscrete && layoutResult.yStepUnit !== 'group') { + const n = layoutResult.yNominalCount || layoutResult.yContinuousAsDiscrete || 0; + panelHeight = n > 0 ? layoutResult.yStep * n : (layoutResult.subplotHeight || canvasSize.height); + } else { + panelHeight = layoutResult.subplotHeight || canvasSize.height; + } + + const panels: PlotlyFacetPanel[] = []; + for (let ri = 0; ri < gridRows.length; ri++) { + const cells = gridRows[ri]; + for (let ci = 0; ci < cells.length; ci++) { + const { colVal, rowVal } = cells[ci]; + const panelData = values.filter((r: any) => { + if (colField && String(r[colField]) !== colVal) return false; + if (rowField && String(r[rowField]) !== rowVal) return false; + return true; + }); + + const panelFigure: any = structuredClone(chartTemplate.template); + const panelContext: InstantiateContext = { + ...instantiateContext, + table: panelData, + }; + chartTemplate.instantiate(panelFigure, panelContext); + if (chartTemplate.postProcess) chartTemplate.postProcess(panelFigure, panelContext); + + panels.push({ + rowIndex: ri, + colIndex: ci, + rowHeader: rowField ? rowVal : undefined, + colHeader: colField ? colVal : undefined, + figure: panelFigure, + }); + } + } + + figure = plCombineFacetPanels(panels, { + rows: gridRows.length, + cols: gridCols, + panelWidth, + panelHeight, + sharedYDomain, + hasColHeader: !!colField, + hasRowHeader: !!rowField, + colHeaderPerRow: wrapColumnOnly, + showLegend: !!channelSemantics.color?.field, + }); + + // Apply the shared x-label rotation / font decisions to every panel axis. + if (layoutResult.xLabel) { + for (const key of Object.keys(figure.layout)) { + if (!/^xaxis\d*$/.test(key)) continue; + const ax = figure.layout[key]; + if (layoutResult.xLabel.labelAngle) { + ax.tickangle = Math.abs(layoutResult.xLabel.labelAngle); + } + if (layoutResult.xLabel.fontSize) { + ax.tickfont = { ...(ax.tickfont || {}), size: layoutResult.xLabel.fontSize }; + } + } + } + if (addTooltipsOpt) plApplyTooltips(figure); + } else { + figure = structuredClone(chartTemplate.template); + chartTemplate.instantiate(figure, instantiateContext); + plApplyLayoutToSpec(figure, instantiateContext, warnings); + if (addTooltipsOpt) plApplyTooltips(figure); + if (chartTemplate.postProcess) chartTemplate.postProcess(figure, instantiateContext); + } + + // ═══════════════════════════════════════════════════════════════════════ + // RESULT + // ═══════════════════════════════════════════════════════════════════════ + + if (warnings.length > 0) { + figure._warnings = warnings; + } + + figure._dataLength = values.length; + + return figure; +} diff --git a/packages/flint-js/src/plotly/colormap.ts b/packages/flint-js/src/plotly/colormap.ts new file mode 100644 index 00000000..54afa6d3 --- /dev/null +++ b/packages/flint-js/src/plotly/colormap.ts @@ -0,0 +1,160 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +// Plotly 专用调色板定义。 +// 承接 core/color-decisions.ts 中的抽象 colormap 信息(schemeType / schemeId / categoryCount), +// 但真正的颜色数组与选盘策略完全在 Plotly backend 本地实现,并尽量贴近 Plotly 默认配色。 + +import type { ColorDecision, ColorMapType } from '../core/color-decisions'; + +export type PlotlyPaletteId = 'plotly10' | 'light24' | 'viridis' | 'RdBu' | string; + +export interface PlotlyColorMapDef { + id: PlotlyPaletteId; + type: ColorMapType; + supportsDiscrete: boolean; + supportsContinuous: boolean; + background: 'light' | 'dark' | 'any'; + colorblindSafe?: boolean; + maxCategories?: number; + diverging?: boolean; + preferredMidpoint?: number; + colors: string[]; +} + +/** + * Plotly 常用的基础配色。plotly10 即 plotly.js 默认 `layout.colorway`; + * light24 对应 px.colors.qualitative.Light24 的前 20 色,用于高基数类别。 + */ +const PLOTLY_COLOR_MAPS: PlotlyColorMapDef[] = [ + { + id: 'plotly10', + type: 'categorical', + supportsDiscrete: true, + supportsContinuous: false, + background: 'any', + maxCategories: 10, + colorblindSafe: false, + colors: [ + '#636efa', // blue-violet + '#EF553B', // red-orange + '#00cc96', // green + '#ab63fa', // purple + '#FFA15A', // orange + '#19d3f3', // cyan + '#FF6692', // pink + '#B6E880', // light green + '#FF97FF', // magenta + '#FECB52', // yellow + ], + }, + { + id: 'light24', + type: 'categorical', + supportsDiscrete: true, + supportsContinuous: false, + background: 'light', + maxCategories: 24, + colorblindSafe: false, + colors: [ + '#FD3216', '#00FE35', '#6A76FC', '#FED4C4', '#FE00CE', + '#0DF9FF', '#F6F926', '#FF9616', '#479B55', '#EEA6FB', + '#DC587D', '#D626FF', '#6E899C', '#00B5F7', '#B68E00', + '#C9FBE5', '#FF0092', '#22FFA7', '#E3EE9E', '#86CE00', + '#BC7196', '#7E7DCD', '#FC6955', '#E48F72', + ], + }, + { + id: 'viridis', + type: 'sequential', + supportsDiscrete: true, + supportsContinuous: true, + background: 'any', + colorblindSafe: true, + colors: [ + '#440154', '#46327e', '#365c8d', '#277f8e', + '#1fa187', '#4ac16d', '#a0da39', '#fde725', + ], + }, + { + id: 'RdBu', + type: 'diverging', + supportsDiscrete: true, + supportsContinuous: true, + background: 'any', + diverging: true, + preferredMidpoint: 0, + colors: [ + '#b2182b', '#d6604d', '#f4a582', '#fddbc7', + '#f7f7f7', + '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', + ], + }, +]; + +function getMapById(id: PlotlyPaletteId | undefined): PlotlyColorMapDef | undefined { + if (!id) return undefined; + const key = String(id).toLowerCase(); + return PLOTLY_COLOR_MAPS.find(m => m.id.toLowerCase() === key); +} + +export function getPaletteForScheme(id: PlotlyPaletteId): string[] | undefined { + const entry = getMapById(id); + return entry?.colors; +} + +/** + * Plotly 侧的「选盘」函数:等价于 chartjs/colormap.ts 的 pickChartJsPalette。 + * + * 策略: + * 1)若用户显式指定了 schemeId,则优先按该 id 取 palette。 + * 2)否则根据 schemeType + categoryCount 自动挑选合适的盘: + * - categorical:按类别数量在 plotly10 / light24 之间选; + * - sequential:优先 viridis; + * - diverging :优先 RdBu。 + * 3)若都无法命中,回退到 Plotly 默认 categorical palette(plotly10)。 + */ +export function pickPlotlyPalette(decision: ColorDecision | undefined): string[] { + if (!decision) { + const fallback = getPaletteForScheme('plotly10'); + return fallback && fallback.length ? fallback : []; + } + + const { schemeType, schemeId, categoryCount } = decision; + + if (schemeId) { + const fromId = getPaletteForScheme(schemeId); + if (fromId && fromId.length > 0) { + return fromId; + } + } + + const mapsOfType = PLOTLY_COLOR_MAPS.filter(m => m.type === schemeType); + + if (schemeType === 'categorical') { + const k = categoryCount ?? 0; + const candidates = mapsOfType.filter(m => m.supportsDiscrete); + if (candidates.length) { + const byCapacity = candidates + .filter(m => m.maxCategories == null || m.maxCategories >= k) + .sort((a, b) => (a.maxCategories ?? Infinity) - (b.maxCategories ?? Infinity)); + const picked = byCapacity[0] ?? candidates[0]; + if (picked.colors.length) { + return picked.colors; + } + } + } else if (schemeType === 'sequential') { + const seq = mapsOfType.find(m => m.supportsContinuous) ?? getMapById('viridis'); + if (seq && seq.colors.length) { + return seq.colors; + } + } else if (schemeType === 'diverging') { + const divergingFirst = mapsOfType.find(m => m.diverging) ?? getMapById('RdBu'); + if (divergingFirst && divergingFirst.colors.length) { + return divergingFirst.colors; + } + } + + const fallback = getPaletteForScheme('plotly10'); + return fallback && fallback.length ? fallback : []; +} diff --git a/packages/flint-js/src/plotly/facet.ts b/packages/flint-js/src/plotly/facet.ts new file mode 100644 index 00000000..fe2a6ebe --- /dev/null +++ b/packages/flint-js/src/plotly/facet.ts @@ -0,0 +1,216 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Plotly facet grid assembly. + * + * Combines per-panel figures (one template instantiation per column/row cell) + * into a single Plotly figure using per-panel axis pairs (`xaxis`/`xaxis2`/…) + * with explicit domains — the Plotly-native equivalent of the Chart.js + * backend's facet panel grid (chartjs/assemble.ts), mirroring its decisions: + * - shared, nice-rounded y-domain across all panels + * - only the leftmost column draws y tick labels and the y-axis title + * - column-only facets wrap into a 2D grid using the shared facet budget + * - column headers above panels, row headers rotated on the left + * - one legend entry per series (deduped across panels via legendgroup) + */ + +/** One instantiated facet cell. */ +export interface PlotlyFacetPanel { + rowIndex: number; + colIndex: number; + rowHeader?: string; + colHeader?: string; + /** The per-panel figure produced by template.instantiate ({ data, layout }). */ + figure: any; +} + +/** + * Round a [min, max] interval outward to "nice" round numbers so the shared + * facet axis lands its endpoints on clean tick values (same rule as the + * Chart.js backend / Vega-Lite `nice: true`). + */ +export function niceBounds(min: number, max: number, targetTicks = 5): { min: number; max: number } { + if (!(Number.isFinite(min) && Number.isFinite(max)) || max <= min) { + return { min, max }; + } + const niceNum = (range: number, round: boolean): number => { + const exp = Math.floor(Math.log10(range)); + const frac = range / 10 ** exp; + let niceFrac: number; + if (round) { + niceFrac = frac < 1.5 ? 1 : frac < 3 ? 2 : frac < 7 ? 5 : 10; + } else { + niceFrac = frac <= 1 ? 1 : frac <= 2 ? 2 : frac <= 5 ? 5 : 10; + } + return niceFrac * 10 ** exp; + }; + const step = niceNum(niceNum(max - min, false) / Math.max(1, targetTicks - 1), true); + return { + min: Math.floor(min / step) * step, + max: Math.ceil(max / step) * step, + }; +} + +const FACET_GAP_PX = 16; +const COL_HEADER_H = 22; +const ROW_HEADER_W = 28; +const MARGIN = { l: 64, r: 24, t: 16, b: 48 }; +const LEGEND_GUTTER = 96; + +/** + * Combine instantiated facet panels into one Plotly figure. + * + * Each panel's own `layout.xaxis` / `layout.yaxis` (category arrays, titles, + * range modes) is copied onto that panel's axis pair; traces are re-pointed at + * the pair. Domains are computed from the designed pixel grid so the figure + * scales exactly like the other backends' facet output. + */ +export function plCombineFacetPanels( + panels: PlotlyFacetPanel[], + opts: { + rows: number; + cols: number; + panelWidth: number; + panelHeight: number; + sharedYDomain?: { min: number; max: number }; + hasColHeader: boolean; + hasRowHeader: boolean; + /** Wrapped column-only facets repeat the header band above every row. */ + colHeaderPerRow: boolean; + showLegend: boolean; + }, +): any { + const { + rows, cols, panelWidth, panelHeight, sharedYDomain, + hasColHeader, hasRowHeader, colHeaderPerRow, showLegend, + } = opts; + + // Row headers sit on the RIGHT (Vega-Lite style): the left edge is already + // occupied by y tick labels + the y-axis title, so a left-side header would + // collide with them in a single combined figure. + const rowHeaderW = hasRowHeader ? ROW_HEADER_W : 0; + const headerBands = colHeaderPerRow ? rows : (hasColHeader ? 1 : 0); + + const plotW = cols * panelWidth + (cols - 1) * FACET_GAP_PX; + const plotH = rows * panelHeight + (rows - 1) * FACET_GAP_PX + + headerBands * COL_HEADER_H; + const totalW = MARGIN.l + plotW + rowHeaderW + MARGIN.r + (showLegend ? LEGEND_GUTTER : 0); + const totalH = MARGIN.t + plotH + MARGIN.b; + + // Paper-fraction geometry (Plotly domains live inside the margins). + const paperW = plotW + rowHeaderW; + const paperH = plotH; + const xFrac = (px: number) => px / paperW; + const yFrac = (px: number) => px / paperH; + + const colX0 = (ci: number) => ci * (panelWidth + FACET_GAP_PX); + // Row band top (px from paper top), accounting for header bands. + const rowY0 = (ri: number) => (colHeaderPerRow + ? ri * (COL_HEADER_H + panelHeight + FACET_GAP_PX) + COL_HEADER_H + : (hasColHeader ? COL_HEADER_H : 0) + ri * (panelHeight + FACET_GAP_PX)); + + const figure: any = { + data: [], + layout: { + margin: { ...MARGIN }, + showlegend: showLegend, + annotations: [], + }, + _facet: true, + _facetRows: rows, + _facetCols: cols, + _width: totalW, + _height: totalH, + }; + figure.layout.width = totalW; + figure.layout.height = totalH; + + const seenLegend = new Set(); + + for (const panel of panels) { + const { rowIndex: ri, colIndex: ci } = panel; + const n = ri * cols + ci + 1; + const xName = n === 1 ? 'xaxis' : `xaxis${n}`; + const yName = n === 1 ? 'yaxis' : `yaxis${n}`; + const xRef = n === 1 ? 'x' : `x${n}`; + const yRef = n === 1 ? 'y' : `y${n}`; + + const x0 = xFrac(colX0(ci)); + const x1 = xFrac(colX0(ci) + panelWidth); + // Plotly y-domain runs bottom-up; our rows run top-down. + const yTopPx = rowY0(ri); + const y1 = 1 - yFrac(yTopPx); + const y0 = 1 - yFrac(yTopPx + panelHeight); + + const panelLayout = panel.figure?.layout ?? {}; + const xAxis: any = { ...(panelLayout.xaxis ?? {}), domain: [x0, x1], anchor: yRef }; + const yAxis: any = { ...(panelLayout.yaxis ?? {}), domain: [y0, y1], anchor: xRef }; + + // Shared y-domain across panels (mirror CJS: fixed nice range, no + // per-panel autorange). Rangemode would fight an explicit range. + if (sharedYDomain) { + yAxis.range = [sharedYDomain.min, sharedYDomain.max]; + delete yAxis.rangemode; + } + // Only the leftmost column shows y tick labels + title. + if (ci > 0) { + yAxis.showticklabels = false; + delete yAxis.title; + } + // X-axis titles only on the bottom row (a per-panel title would + // collide with the next row's column headers in a single figure). + if (ri < rows - 1) { + delete xAxis.title; + } + + figure.layout[xName] = xAxis; + figure.layout[yName] = yAxis; + + for (const trace of panel.figure?.data ?? []) { + const placed: any = { ...trace, xaxis: xRef, yaxis: yRef }; + const legendKey = String(placed.name ?? ''); + if (legendKey) { + placed.legendgroup = legendKey; + placed.showlegend = !seenLegend.has(legendKey); + seenLegend.add(legendKey); + } else { + placed.showlegend = false; + } + figure.data.push(placed); + } + + // Column header annotation (per wrapped row, or once on the top row). + if (panel.colHeader != null && (colHeaderPerRow || ri === 0)) { + figure.layout.annotations.push({ + text: String(panel.colHeader), + showarrow: false, + xref: 'paper', yref: 'paper', + x: (x0 + x1) / 2, + y: 1 - yFrac(yTopPx - COL_HEADER_H / 2), + xanchor: 'center', yanchor: 'middle', + font: { size: 12 }, + }); + } + + // Row header annotation (rightmost side, Vega-Lite style), rotated. + if (panel.rowHeader != null && ci === cols - 1) { + figure.layout.annotations.push({ + text: String(panel.rowHeader), + showarrow: false, + textangle: 90, + xref: 'paper', yref: 'paper', + x: xFrac(plotW + rowHeaderW / 2), + y: (y0 + y1) / 2, + xanchor: 'center', yanchor: 'middle', + font: { size: 12 }, + }); + } + } + + if (!showLegend) { + figure.layout.showlegend = false; + } + + return figure; +} diff --git a/packages/flint-js/src/plotly/index.ts b/packages/flint-js/src/plotly/index.ts new file mode 100644 index 00000000..9dd7d029 --- /dev/null +++ b/packages/flint-js/src/plotly/index.ts @@ -0,0 +1,34 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * @module flint-chart/plotly + * + * Plotly backend for flint-chart. + * + * Compiles the core semantic layer into Plotly figure objects. + * Contains PL-specific assembly, spec instantiation, and chart templates. + * + * Architecture contrast with other backends: + * VL: encoding-channel-based — { encoding: { x: { field, type }, y: ... } } + * EC: series-based — { series: [{ type, data }], xAxis, yAxis } + * CJS: dataset-based — { type, data: { labels, datasets[] }, options } + * PL: trace-based — { data: [{ type, x, y }], layout } + * + * Same core pipeline (Phase 0 + Phase 1), different Phase 2 output. + * Figures are pure JSON (no callback functions). + */ + +// PL assembly function +export { assemblePlotly } from './assemble'; + +// PL spec instantiation (Phase 2) +export { plApplyLayoutToSpec, plApplyTooltips } from './instantiate-spec'; + +// PL template registry +export { + plTemplateDefs, + plAllTemplateDefs, + plGetTemplateDef, + plGetTemplateChannels, +} from './templates'; diff --git a/packages/flint-js/src/plotly/instantiate-spec.ts b/packages/flint-js/src/plotly/instantiate-spec.ts new file mode 100644 index 00000000..fe2f0ead --- /dev/null +++ b/packages/flint-js/src/plotly/instantiate-spec.ts @@ -0,0 +1,124 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * ============================================================================= + * PHASE 2: INSTANTIATE SPEC — Plotly backend + * ============================================================================= + * + * Translates semantic decisions (Phase 0) and layout dimensions (Phase 1) + * into Plotly-specific figure properties. + * + * Key differences from the other backends: + * - PL figures are `{ data: traces[], layout }` and stay pure JSON — axis + * tick formatting uses declarative `tickformat`/axis types, never + * callback functions + * - PL sizing via `layout.width` / `layout.height` + * - PL label rotation via `layout.xaxis.tickangle` + * + * PL dependency: **Yes — this is where Plotly-specific syntax lives** + * ============================================================================= + */ + +import type { + InstantiateContext, + ChartWarning, +} from '../core/types'; + +/** + * Phase 2: Apply layout and semantic decisions to the Plotly figure. + * + * Handles common Plotly plumbing across all templates: + * - Figure sizing (_width, _height + layout.width/height) + * - Axis label rotation and font sizing + * - Overflow truncation warnings + */ +export function plApplyLayoutToSpec( + figure: any, + context: InstantiateContext, + warnings: ChartWarning[], +): void { + const { layout, canvasSize } = context; + + if (!figure.layout) figure.layout = {}; + + // ── Figure dimensions ──────────────────────────────────────────────── + if (!figure._width) { + const PADDING = 80; // approximate space for axes, labels + + const xIsDiscrete = layout.xNominalCount > 0 || layout.xContinuousAsDiscrete > 0; + const yIsDiscrete = layout.yNominalCount > 0 || layout.yContinuousAsDiscrete > 0; + + let plotWidth: number; + let plotHeight: number; + + if (xIsDiscrete && layout.xStepUnit !== 'group') { + const xItemCount = layout.xNominalCount || layout.xContinuousAsDiscrete || 0; + plotWidth = xItemCount > 0 ? layout.xStep * xItemCount : (layout.subplotWidth || canvasSize.width); + } else { + plotWidth = layout.subplotWidth || canvasSize.width; + } + + if (yIsDiscrete && layout.yStepUnit !== 'group') { + const yItemCount = layout.yNominalCount || layout.yContinuousAsDiscrete || 0; + plotHeight = yItemCount > 0 ? layout.yStep * yItemCount : (layout.subplotHeight || canvasSize.height); + } else { + plotHeight = layout.subplotHeight || canvasSize.height; + } + + const legendGutter = figure.layout.showlegend ? 96 : 0; + figure._width = plotWidth + PADDING + legendGutter; + figure._height = plotHeight + PADDING; + } + + figure.layout.width = figure._width; + figure.layout.height = figure._height; + figure.layout.margin = figure.layout.margin ?? { t: 24 }; + + // ── X-axis label rotation and font sizing ──────────────────────────── + if (layout.xLabel) { + if (!figure.layout.xaxis) figure.layout.xaxis = {}; + if (layout.xLabel.labelAngle && layout.xLabel.labelAngle !== 0) { + figure.layout.xaxis.tickangle = Math.abs(layout.xLabel.labelAngle); + } + if (layout.xLabel.fontSize) { + figure.layout.xaxis.tickfont = { + ...(figure.layout.xaxis.tickfont || {}), + size: layout.xLabel.fontSize, + }; + } + } + + // ── Y-axis label font sizing ───────────────────────────────────────── + if (layout.yLabel?.fontSize) { + if (!figure.layout.yaxis) figure.layout.yaxis = {}; + figure.layout.yaxis.tickfont = { + ...(figure.layout.yaxis.tickfont || {}), + size: layout.yLabel.fontSize, + }; + } + + // ── Overflow truncation warnings ───────────────────────────────────── + if (layout.truncations && layout.truncations.length > 0) { + for (const trunc of layout.truncations) { + warnings.push({ + severity: 'warning', + code: 'overflow', + message: trunc.message, + channel: trunc.channel, + field: trunc.field, + }); + } + } +} + +/** + * Apply tooltips to a Plotly figure. Plotly hover is on by default; this + * pins an explicit unified hover mode so tooltips read across series. + */ +export function plApplyTooltips(figure: any): void { + if (!figure.layout) figure.layout = {}; + if (figure.layout.hovermode == null) { + figure.layout.hovermode = 'closest'; + } +} diff --git a/packages/flint-js/src/plotly/templates/area.ts b/packages/flint-js/src/plotly/templates/area.ts new file mode 100644 index 00000000..2474ad98 --- /dev/null +++ b/packages/flint-js/src/plotly/templates/area.ts @@ -0,0 +1,142 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Plotly Area Chart template (single + multi-series). + * + * Mirrors the Chart.js Area template's decisions. Plotly renders areas as + * scatter traces with `fill`; multi-series stacking uses `stackgroup` + * (the Plotly-native equivalent of Chart.js `fill: 'stack'`). + */ + +import { ChartTemplateDef, ChartPropertyDef } from '../../core/types'; +import { + extractCategories, + groupBy, + buildCategoryAlignedData, + coerceIsoDateForPlotly, + getPlotlyPalette, + getSeriesColor, +} from './utils'; + +const isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal'; + +/** Hex → rgba with alpha, for translucent area fills. */ +function fillColor(hex: string, alpha: number): string { + const m = /^#?([0-9a-f]{6})$/i.exec(hex.trim()); + if (!m) return hex; + const v = parseInt(m[1], 16); + const a = Math.max(0, Math.min(1, alpha)); + return `rgba(${(v >> 16) & 255}, ${(v >> 8) & 255}, ${v & 255}, ${a})`; +} + +export const plAreaChartDef: ChartTemplateDef = { + chart: 'Area Chart', + template: { mark: 'area', encoding: {} }, + channels: ['x', 'y', 'color', 'opacity', 'column', 'row'], + markCognitiveChannel: 'area', + declareLayoutMode: () => ({ + paramOverrides: { continuousMarkCrossSection: { x: 100, y: 20, seriesCountAxis: 'auto' }, facetAspectRatioResistance: 0.5 }, + }), + instantiate: (spec, ctx) => { + const { channelSemantics, table, chartProperties } = ctx; + const xCS = channelSemantics.x; + const yCS = channelSemantics.y; + const colorField = channelSemantics.color?.field; + + if (!xCS?.field || !yCS?.field) return; + const xField = xCS.field; + const yField = yCS.field; + + const xIsDiscrete = isDiscrete(xCS.type); + const xIsTemporal = xCS.type === 'temporal'; + const mapX = (raw: unknown) => (xIsTemporal ? coerceIsoDateForPlotly(raw) : raw); + + const categories = xIsDiscrete + ? extractCategories(table, xField, xCS.ordinalSortOrder) + : undefined; + + const opacity = Number(chartProperties?.opacity ?? 0.4); + const stackMode = chartProperties?.stackMode; + const stacked = stackMode !== 'layered'; + const smooth = chartProperties?.interpolate === 'monotone'; + + const palette = getPlotlyPalette(ctx, 'color'); + const traces: any[] = []; + const makeTrace = (name: string, rows: any[], colorIndex: number) => { + const xVals = xIsDiscrete ? categories! : rows.map(r => mapX(r[xField])); + const yVals = xIsDiscrete + ? buildCategoryAlignedData(rows, xField, yField, categories!) + : rows.map(r => (r[yField] == null ? null : r[yField])); + const color = getSeriesColor(palette, colorIndex); + const trace: any = { + type: 'scatter', + mode: 'lines', + name, + x: xVals, + y: yVals, + line: { color, shape: smooth ? 'spline' : 'linear' }, + fillcolor: fillColor(color, opacity), + }; + if (colorField && stacked) { + trace.stackgroup = 'one'; + } else { + trace.fill = 'tozeroy'; + } + return trace; + }; + + if (colorField) { + let i = 0; + for (const [name, rows] of groupBy(table, colorField)) { + traces.push(makeTrace(name, rows, i)); + i++; + } + } else { + traces.push(makeTrace(yField, table, 0)); + } + + const xAxisSpec: any = { title: { text: xField } }; + if (xIsDiscrete) { + xAxisSpec.type = 'category'; + xAxisSpec.categoryorder = 'array'; + xAxisSpec.categoryarray = categories; + } else if (xIsTemporal) { + xAxisSpec.type = 'date'; + } + + const yAxisSpec: any = { title: { text: yField } }; + if (yCS.zero) { + yAxisSpec.rangemode = yCS.zero.zero !== false ? 'tozero' : 'normal'; + } + + const figure: any = { + data: traces, + layout: { + xaxis: xAxisSpec, + yaxis: yAxisSpec, + showlegend: !!colorField, + }, + }; + + Object.assign(spec, figure); + delete spec.mark; + delete spec.encoding; + }, + properties: [ + { + key: 'interpolate', label: 'Curve', type: 'discrete', options: [ + { value: undefined, label: 'Default (linear)' }, + { value: 'linear', label: 'Linear' }, + { value: 'monotone', label: 'Monotone (smooth)' }, + ], + } as ChartPropertyDef, + { key: 'opacity', label: 'Opacity', type: 'continuous', min: 0.1, max: 1, step: 0.05, defaultValue: 0.4 } as ChartPropertyDef, + { + key: 'stackMode', label: 'Stack', type: 'discrete', options: [ + { value: undefined, label: 'Stacked (default)' }, + { value: 'layered', label: 'Layered (overlap)' }, + ], + } as ChartPropertyDef, + ], +}; diff --git a/packages/flint-js/src/plotly/templates/bar.ts b/packages/flint-js/src/plotly/templates/bar.ts new file mode 100644 index 00000000..8950c860 --- /dev/null +++ b/packages/flint-js/src/plotly/templates/bar.ts @@ -0,0 +1,81 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Plotly Bar Chart template. + * + * Mirrors the Chart.js Bar template's decisions (category detection, + * ordinal sort order, zero baseline, horizontal transposition), expressed + * as a Plotly `bar` trace: + * CJS: { type: 'bar', data: { labels, datasets[] }, options: { indexAxis } } + * PL: { data: [{ type: 'bar', x, y, orientation }], layout: { xaxis, yaxis } } + */ + +import { ChartTemplateDef, ChartPropertyDef } from '../../core/types'; +import { extractCategories, buildCategoryAlignedData, detectAxes, getPlotlyPalette, getSeriesColor } from './utils'; +import { detectBandedAxisFromSemantics } from '../../core/axis-detection'; + +export const plBarChartDef: ChartTemplateDef = { + chart: 'Bar Chart', + template: { mark: 'bar', encoding: {} }, + channels: ['x', 'y', 'color', 'opacity', 'column', 'row'], + markCognitiveChannel: 'length', + declareLayoutMode: (cs, table) => { + const result = detectBandedAxisFromSemantics(cs, table, { preferAxis: 'x' }); + return { + axisFlags: result ? { [result.axis]: { banded: true } } : { x: { banded: true } }, + resolvedTypes: result?.resolvedTypes, + }; + }, + instantiate: (spec, ctx) => { + const { channelSemantics, table } = ctx; + const { categoryAxis, valueAxis } = detectAxes(channelSemantics); + + const catField = channelSemantics[categoryAxis]?.field; + const valField = channelSemantics[valueAxis]?.field; + if (!catField || !valField) return; + + const catCS = channelSemantics[categoryAxis]; + const categories = extractCategories(table, catField, catCS?.ordinalSortOrder); + const values = buildCategoryAlignedData(table, catField, valField, categories); + + const isHorizontal = categoryAxis === 'y'; + const palette = getPlotlyPalette(ctx); + + const catAxisSpec = { + type: 'category' as const, + categoryorder: 'array' as const, + categoryarray: categories, + title: { text: catField }, + }; + const valCS = channelSemantics[valueAxis]; + // Bars encode length — include zero unless the semantic decision says otherwise. + const includeZero = valCS?.zero ? valCS.zero.zero !== false : true; + const valAxisSpec = { + title: { text: valField }, + rangemode: (includeZero ? 'tozero' : 'normal') as 'tozero' | 'normal', + }; + + const figure: any = { + data: [{ + type: 'bar', + name: valField, + ...(isHorizontal + ? { x: values, y: categories, orientation: 'h' } + : { x: categories, y: values }), + marker: { color: getSeriesColor(palette, 0) }, + }], + layout: { + ...(isHorizontal + ? { xaxis: valAxisSpec, yaxis: catAxisSpec } + : { xaxis: catAxisSpec, yaxis: valAxisSpec }), + showlegend: false, + }, + }; + + Object.assign(spec, figure); + delete spec.mark; + delete spec.encoding; + }, + properties: [] as ChartPropertyDef[], +}; diff --git a/packages/flint-js/src/plotly/templates/index.ts b/packages/flint-js/src/plotly/templates/index.ts new file mode 100644 index 00000000..af6c2e50 --- /dev/null +++ b/packages/flint-js/src/plotly/templates/index.ts @@ -0,0 +1,46 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Plotly template registry. + * + * Mirrors the structure of chartjs/templates/index.ts, echarts/templates/index.ts + * and vegalite/templates/index.ts but with Plotly template definitions. + * + * First-merge scope (see docs/adding-a-backend.md §6): the four acceptance + * templates. Further templates are follow-ups. + */ + +import { ChartTemplateDef } from '../../core/types'; +import { plBarChartDef } from './bar'; +import { plLineChartDef } from './line'; +import { plAreaChartDef } from './area'; +import { plScatterPlotDef } from './scatter'; + +/** + * Plotly chart template definitions, grouped by category. + */ +export const plTemplateDefs: { [key: string]: ChartTemplateDef[] } = { + 'Scatter & Point': [plScatterPlotDef], + 'Bar': [plBarChartDef], + 'Line & Area': [plLineChartDef, plAreaChartDef], +}; + +/** + * Flat list of all Plotly chart template definitions. + */ +export const plAllTemplateDefs: ChartTemplateDef[] = Object.values(plTemplateDefs).flat(); + +/** + * Look up a Plotly chart template definition by chart type name. + */ +export function plGetTemplateDef(chartType: string): ChartTemplateDef | undefined { + return plAllTemplateDefs.find(t => t.chart === chartType); +} + +/** + * Get the available channels for a Plotly chart type. + */ +export function plGetTemplateChannels(chartType: string): string[] { + return plGetTemplateDef(chartType)?.channels || []; +} diff --git a/packages/flint-js/src/plotly/templates/line.ts b/packages/flint-js/src/plotly/templates/line.ts new file mode 100644 index 00000000..4109a7b1 --- /dev/null +++ b/packages/flint-js/src/plotly/templates/line.ts @@ -0,0 +1,144 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Plotly Line Chart template (single + multi-series). + * + * Mirrors the Chart.js Line template's decisions. Plotly differences: + * - temporal x uses Plotly's native `date` axis (ISO strings), no tick + * callback needed — figures stay pure JSON + * - one trace per series; the legend comes from trace `name`s + */ + +import { ChartTemplateDef, ChartPropertyDef } from '../../core/types'; +import { + extractCategories, + groupBy, + buildCategoryAlignedData, + coerceIsoDateForPlotly, + getPlotlyPalette, + getSeriesColor, +} from './utils'; + +const isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal'; + +/** Map the shared `interpolate` property onto Plotly's `line.shape`. */ +function lineShape(interpolate: unknown): 'linear' | 'spline' | 'hv' | 'vh' | 'hvh' { + switch (interpolate) { + case 'monotone': + case 'basis': + case 'cardinal': + case 'catmull-rom': + return 'spline'; + case 'step': + return 'hvh'; + case 'step-before': + return 'vh'; + case 'step-after': + return 'hv'; + default: + return 'linear'; + } +} + +export const plLineChartDef: ChartTemplateDef = { + chart: 'Line Chart', + template: { mark: 'line', encoding: {} }, + channels: ['x', 'y', 'color', 'opacity', 'column', 'row'], + markCognitiveChannel: 'position', + declareLayoutMode: () => ({ + paramOverrides: { continuousMarkCrossSection: { x: 100, y: 20, seriesCountAxis: 'auto' }, facetAspectRatioResistance: 0.5 }, + }), + instantiate: (spec, ctx) => { + const { channelSemantics, table, chartProperties } = ctx; + const xCS = channelSemantics.x; + const yCS = channelSemantics.y; + const colorField = channelSemantics.color?.field; + + if (!xCS?.field || !yCS?.field) return; + const xField = xCS.field; + const yField = yCS.field; + + const xIsDiscrete = isDiscrete(xCS.type); + const xIsTemporal = xCS.type === 'temporal'; + + const mapX = (raw: unknown) => (xIsTemporal ? coerceIsoDateForPlotly(raw) : raw); + + const categories = xIsDiscrete + ? extractCategories(table, xField, xCS.ordinalSortOrder) + : undefined; + + const shape = lineShape(chartProperties?.interpolate); + const showPoints = chartProperties?.showPoints === true; + const mode = showPoints ? 'lines+markers' : 'lines'; + + const palette = getPlotlyPalette(ctx, 'color'); + const traces: any[] = []; + const makeTrace = (name: string, rows: any[], colorIndex: number) => { + const xVals = xIsDiscrete + ? categories! + : rows.map(r => mapX(r[xField])); + const yVals = xIsDiscrete + ? buildCategoryAlignedData(rows, xField, yField, categories!) + : rows.map(r => (r[yField] == null ? null : r[yField])); + return { + type: 'scatter', + mode, + name, + x: xVals, + y: yVals, + line: { color: getSeriesColor(palette, colorIndex), shape }, + }; + }; + + if (colorField) { + let i = 0; + for (const [name, rows] of groupBy(table, colorField)) { + traces.push(makeTrace(name, rows, i)); + i++; + } + } else { + traces.push(makeTrace(yField, table, 0)); + } + + const xAxisSpec: any = { title: { text: xField } }; + if (xIsDiscrete) { + xAxisSpec.type = 'category'; + xAxisSpec.categoryorder = 'array'; + xAxisSpec.categoryarray = categories; + } else if (xIsTemporal) { + xAxisSpec.type = 'date'; + } + + const yAxisSpec: any = { title: { text: yField } }; + if (yCS.zero) { + yAxisSpec.rangemode = yCS.zero.zero !== false ? 'tozero' : 'normal'; + } + + const figure: any = { + data: traces, + layout: { + xaxis: xAxisSpec, + yaxis: yAxisSpec, + showlegend: !!colorField, + }, + }; + + Object.assign(spec, figure); + delete spec.mark; + delete spec.encoding; + }, + properties: [ + { + key: 'interpolate', label: 'Curve', type: 'discrete', options: [ + { value: undefined, label: 'Default (linear)' }, + { value: 'linear', label: 'Linear' }, + { value: 'monotone', label: 'Monotone (smooth)' }, + { value: 'step', label: 'Step' }, + { value: 'step-before', label: 'Step Before' }, + { value: 'step-after', label: 'Step After' }, + ], + } as ChartPropertyDef, + { key: 'showPoints', label: 'Show points', type: 'binary', defaultValue: false } as ChartPropertyDef, + ], +}; diff --git a/packages/flint-js/src/plotly/templates/scatter.ts b/packages/flint-js/src/plotly/templates/scatter.ts new file mode 100644 index 00000000..7bf0fba2 --- /dev/null +++ b/packages/flint-js/src/plotly/templates/scatter.ts @@ -0,0 +1,100 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Plotly Scatter Plot template. + * + * Mirrors the Chart.js Scatter template's decisions (color grouping, zero + * baseline per axis, canvas-aware point radius) as Plotly `scatter` traces + * in `markers` mode. + */ + +import { ChartTemplateDef, ChartPropertyDef } from '../../core/types'; +import { groupBy, getPlotlyPalette, getSeriesColor } from './utils'; + +/** Compute a reasonable marker diameter based on canvas area and point count. */ +function computeMarkerSize(width: number, height: number, pointCount: number): number { + const canvasArea = width * height; + const areaPerPoint = canvasArea / Math.max(1, pointCount); + const idealRadius = Math.sqrt(areaPerPoint * 0.05) / 2; + const radius = Math.max(2, Math.min(6, Math.round(idealRadius))); + return radius * 2; +} + +export const plScatterPlotDef: ChartTemplateDef = { + chart: 'Scatter Plot', + template: { mark: 'circle', encoding: {} }, + channels: ['x', 'y', 'color', 'size', 'opacity', 'column', 'row'], + markCognitiveChannel: 'position', + instantiate: (spec, ctx) => { + const { channelSemantics, table, chartProperties } = ctx; + const xField = channelSemantics.x?.field; + const yField = channelSemantics.y?.field; + const colorField = channelSemantics.color?.field; + + if (!xField || !yField) return; + + const opacity = Number(chartProperties?.opacity ?? 1); + + const palette = getPlotlyPalette(ctx, 'color'); + const traces: any[] = []; + const makeTrace = (name: string | undefined, rows: any[], colorIndex: number) => ({ + type: 'scatter', + mode: 'markers', + ...(name != null ? { name } : {}), + x: rows.map(r => r[xField]), + y: rows.map(r => r[yField]), + marker: { + color: getSeriesColor(palette, colorIndex), + opacity, + line: { color: '#ffffff', width: 0.5 }, + }, + }); + + if (colorField) { + let i = 0; + for (const [name, rows] of groupBy(table, colorField)) { + traces.push(makeTrace(name, rows, i)); + i++; + } + } else { + traces.push(makeTrace(undefined, table, 0)); + } + + const xAxisSpec: any = { title: { text: xField } }; + const yAxisSpec: any = { title: { text: yField } }; + if (channelSemantics.x?.zero) { + xAxisSpec.rangemode = channelSemantics.x.zero.zero !== false ? 'tozero' : 'normal'; + } + if (channelSemantics.y?.zero) { + yAxisSpec.rangemode = channelSemantics.y.zero.zero !== false ? 'tozero' : 'normal'; + } + + const figure: any = { + data: traces, + layout: { + xaxis: xAxisSpec, + yaxis: yAxisSpec, + showlegend: !!colorField, + }, + }; + + Object.assign(spec, figure); + delete spec.mark; + delete spec.encoding; + }, + properties: [ + { key: 'opacity', label: 'Opacity', type: 'continuous', min: 0.1, max: 1, step: 0.05, defaultValue: 1 } as ChartPropertyDef, + ], + postProcess: (figure, ctx) => { + if (!Array.isArray(figure.data)) return; + const w = figure._width || ctx.canvasSize.width; + const h = figure._height || ctx.canvasSize.height; + const size = computeMarkerSize(w, h, ctx.table.length); + for (const trace of figure.data) { + if (trace?.marker && trace.marker.size == null) { + trace.marker.size = size; + } + } + }, +}; diff --git a/packages/flint-js/src/plotly/templates/utils.ts b/packages/flint-js/src/plotly/templates/utils.ts new file mode 100644 index 00000000..65bb7bae --- /dev/null +++ b/packages/flint-js/src/plotly/templates/utils.ts @@ -0,0 +1,160 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Shared helper functions for Plotly template hooks. + * Pure logic — no UI dependencies. + */ + +import type { ChannelSemantics, InstantiateContext } from '../../core/types'; +import { pickPlotlyPalette } from '../colormap'; + +const isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal'; + +/** + * Extract unique category values from data for a given field, preserving order. + * If `ordinalSortOrder` is provided, returns values sorted in that canonical order. + */ +export function extractCategories(data: any[], field: string, ordinalSortOrder?: string[]): string[] { + const seen = new Set(); + const result: string[] = []; + for (const row of data) { + const val = row[field]; + if (val != null) { + const key = String(val); + if (!seen.has(key)) { + seen.add(key); + result.push(key); + } + } + } + + if (ordinalSortOrder && ordinalSortOrder.length > 0) { + const orderMap = new Map(ordinalSortOrder.map((v, i) => [v, i])); + result.sort((a, b) => { + const ia = orderMap.get(a); + const ib = orderMap.get(b); + if (ia !== undefined && ib !== undefined) return ia - ib; + if (ia !== undefined) return -1; + if (ib !== undefined) return 1; + return 0; + }); + } + + return result; +} + +/** + * Group data by a categorical field. + * Returns a map: seriesName → rows[]. + */ +export function groupBy(data: any[], field: string): Map { + const groups = new Map(); + for (const row of data) { + const key = String(row[field] ?? ''); + if (!groups.has(key)) groups.set(key, []); + groups.get(key)!.push(row); + } + return groups; +} + +/** + * Build category-aligned value array for a subset of rows. + * Returns values indexed by category position (null for missing). + */ +export function buildCategoryAlignedData( + rows: any[], + catField: string, + valField: string, + categories: string[], +): (number | null)[] { + const map = new Map(); + for (const row of rows) { + const key = String(row[catField] ?? ''); + const val = row[valField]; + if (val != null && !isNaN(val)) { + map.set(key, (map.get(key) ?? 0) + Number(val)); + } + } + return categories.map(cat => map.get(cat) ?? null); +} + +/** + * Detect which axis is the category (banded) axis and which is the value axis. + */ +export function detectAxes( + channelSemantics: Record, +): { categoryAxis: 'x' | 'y'; valueAxis: 'x' | 'y' } { + const xCS = channelSemantics.x; + const yCS = channelSemantics.y; + + if (xCS && isDiscrete(xCS.type)) { + return { categoryAxis: 'x', valueAxis: 'y' }; + } + if (yCS && isDiscrete(yCS.type)) { + return { categoryAxis: 'y', valueAxis: 'x' }; + } + return { categoryAxis: 'x', valueAxis: 'y' }; +} + +/** + * Coerce a temporal value to an ISO-8601 string for Plotly's native `date` + * axis. Numbers below 1e12 are treated as Unix seconds; strings and Dates are + * parsed directly. Returns null when unparseable. + */ +export function coerceIsoDateForPlotly(raw: unknown): string | null { + if (raw == null) return null; + let ms: number; + if (typeof raw === 'number' && Number.isFinite(raw)) { + ms = raw < 1e12 ? Math.round(raw * 1000) : raw; + } else if (raw instanceof Date) { + ms = raw.getTime(); + } else { + ms = new Date(String(raw)).getTime(); + } + return Number.isFinite(ms) ? new Date(ms).toISOString() : null; +} + +/** + * Plotly's default qualitative palette (plotly.js `layout.colorway` defaults). + * Fallback when no color decision is available; the decision-aware path lives + * in ../colormap.ts (mirroring chartjs/colormap.ts). + */ +export const PLOTLY_COLORS = [ + '#636efa', // blue-violet + '#EF553B', // red-orange + '#00cc96', // green + '#ab63fa', // purple + '#FFA15A', // orange + '#19d3f3', // cyan + '#FF6692', // pink + '#B6E880', // light green + '#FF97FF', // magenta + '#FECB52', // yellow +]; + +/** + * 从 color-decisions 解析调色板;若没有决策则回退到 Plotly 默认 plotly10。 + * (Mirror of chartjs/templates/utils.ts getChartJsPalette.) + */ +export function getPlotlyPalette(ctx: InstantiateContext, preferred: 'color' | 'group' = 'color'): string[] { + const decisions = ctx.colorDecisions; + const decision = + preferred === 'color' + ? decisions?.color ?? decisions?.group + : decisions?.group ?? decisions?.color; + + const palette = pickPlotlyPalette(decision); + if (palette.length > 0) { + return palette; + } + return PLOTLY_COLORS; +} + +/** Series color by index from a resolved palette. */ +export function getSeriesColor(palette: string[], index: number): string { + if (!palette.length) { + return PLOTLY_COLORS[index % PLOTLY_COLORS.length]; + } + return palette[index % palette.length]; +} diff --git a/packages/flint-js/src/test-data/index.ts b/packages/flint-js/src/test-data/index.ts index c6e19771..c02d46db 100644 --- a/packages/flint-js/src/test-data/index.ts +++ b/packages/flint-js/src/test-data/index.ts @@ -39,6 +39,7 @@ export { genGasPressureTests } from './gas-pressure-tests'; export { genLineAreaStretchTests } from './line-area-stretch-tests'; export { genEChartsScatterTests, genEChartsLineTests, genEChartsBarTests, genEChartsStackedBarTests, genEChartsGroupedBarTests, genEChartsStressTests, genEChartsAreaTests, genEChartsPieTests, genEChartsHeatmapTests, genEChartsHistogramTests, genEChartsBoxplotTests, genEChartsRadarTests, genEChartsCandlestickTests, genEChartsStreamgraphTests, genEChartsFacetSmallTests, genEChartsFacetWrapTests, genEChartsFacetClipTests, genEChartsRoseTests, genEChartsGaugeTests, genEChartsFunnelTests, genEChartsTreemapTests, genEChartsSunburstTests, genEChartsSankeyTests, genEChartsUniqueStressTests, genEChartsCalendarTests, genEChartsParallelTests, genEChartsGraphTests, genEChartsTreeTests } from './echarts-tests'; export { genChartJsScatterTests, genChartJsLineTests, genChartJsBarTests, genChartJsStackedBarTests, genChartJsGroupedBarTests, genChartJsAreaTests, genChartJsPieTests, genChartJsHistogramTests, genChartJsRadarTests, genChartJsStressTests, genChartJsRoseTests, genChartJsBubbleTests, genChartJsDoughnutTests, genChartJsComboTests } from './chartjs-tests'; +export { genPlotlyCoreTests, genPlotlyFacetTests } from './plotly-tests'; export { genDiscreteAxisTests } from './discrete-axis-tests'; export { genDateTests, genDateYearTests, genDateMonthTests, genDateYearMonthTests, genDateDecadeTests, genDateDateTimeTests, genDateHoursTests } from './date-tests'; export { genSemanticContextTests, genSnapToBoundTests } from './semantic-tests'; @@ -99,7 +100,7 @@ import { genAreaTests, genStreamgraphTests } from './area-tests'; import { genRangeAreaTests, genEChartsRangeAreaTests, genChartJsRangeAreaTests } from './range-area-tests'; import { genEcdfTests, genEChartsEcdfTests, genChartJsEcdfTests } from './ecdf-tests'; import { - genHeatmapTests, genPieTests, genRangedDotPlotTests, genLollipopTests, + genHeatmapTests, genPieTests, genDonutTests, genRangedDotPlotTests, genLollipopTests, genWaterfallTests, genBarTableTests, genCandlestickTests, genRadarTests, genPyramidTests, genRoseTests, } from './specialized-tests'; @@ -112,6 +113,7 @@ import { genDateYearTests, genDateMonthTests, genDateYearMonthTests, genDateDeca import { genSemanticContextTests, genSnapToBoundTests } from './semantic-tests'; import { genEChartsScatterTests, genEChartsLineTests, genEChartsBarTests, genEChartsStackedBarTests, genEChartsGroupedBarTests, genEChartsStressTests, genEChartsAreaTests, genEChartsPieTests, genEChartsHeatmapTests, genEChartsHistogramTests, genEChartsBoxplotTests, genEChartsRadarTests, genEChartsCandlestickTests, genEChartsStreamgraphTests, genEChartsFacetSmallTests, genEChartsFacetWrapTests, genEChartsFacetClipTests, genEChartsRoseTests, genEChartsGaugeTests, genEChartsFunnelTests, genEChartsTreemapTests, genEChartsSunburstTests, genEChartsSankeyTests, genEChartsUniqueStressTests, genEChartsCalendarTests, genEChartsParallelTests, genEChartsGraphTests, genEChartsTreeTests } from './echarts-tests'; import { genChartJsScatterTests, genChartJsLineTests, genChartJsBarTests, genChartJsStackedBarTests, genChartJsGroupedBarTests, genChartJsAreaTests, genChartJsPieTests, genChartJsHistogramTests, genChartJsRadarTests, genChartJsStressTests, genChartJsRoseTests, genChartJsBubbleTests, genChartJsDoughnutTests, genChartJsComboTests } from './chartjs-tests'; +import { genPlotlyCoreTests, genPlotlyFacetTests } from './plotly-tests'; import { genGalleryRegionalSurveyScatterTests, genGalleryRegionalSurveyLineTests, @@ -156,6 +158,7 @@ export const TEST_GENERATORS: Record TestCase[]> = { 'Boxplot': genBoxplotTests, 'Violin Plot': genViolinTests, 'Pie Chart': genPieTests, + 'Donut Chart': genDonutTests, 'Ranged Dot Plot': genRangedDotPlotTests, 'Area Chart': () => [...genAreaTests(), galleryFacetAreaExample()], 'Streamgraph': genStreamgraphTests, @@ -247,6 +250,8 @@ export const TEST_GENERATORS: Record TestCase[]> = { 'Chart.js: Doughnut *': genChartJsDoughnutTests, 'Chart.js: Combo *': genChartJsComboTests, 'Chart.js: Stress Tests': genChartJsStressTests, + 'Plotly: Core Templates': genPlotlyCoreTests, + 'Plotly: Facets': genPlotlyFacetTests, 'Gallery: Scatter': genGalleryRegionalSurveyScatterTests, 'Gallery: Line': genGalleryRegionalSurveyLineTests, 'Gallery: Bar': genGalleryRegionalSurveyBarTests, diff --git a/packages/flint-js/src/test-data/plotly-tests.ts b/packages/flint-js/src/test-data/plotly-tests.ts new file mode 100644 index 00000000..c58baa06 --- /dev/null +++ b/packages/flint-js/src/test-data/plotly-tests.ts @@ -0,0 +1,244 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Plotly backend tests. + * + * Exercises the Plotly backend's first-merge surface: the four acceptance + * templates (Bar, Line, Area, Scatter) with color on/off, and the facet + * grid path (column, row, column×row) that renders as Plotly subplot pairs. + */ + +import { Type } from './df-types'; +import { TestCase, makeField, makeEncodingItem } from './types'; +import { seededRandom } from './generators'; + +// --------------------------------------------------------------------------- +// Test data generators +// --------------------------------------------------------------------------- + +function genRegionSales(seed: number) { + const rand = seededRandom(seed); + const regions = ['East', 'South', 'North', 'West', 'Central']; + return regions.map(r => ({ + Region: r, + Revenue: Math.round(100 + rand() * 900), + })); +} + +function genMonthlySeries(seed: number, series: string[]) { + const rand = seededRandom(seed); + const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug']; + const data: any[] = []; + for (const m of months) { + for (const s of series) { + data.push({ + Month: m, + Value: Math.round(200 + rand() * 800), + Series: s, + }); + } + } + return data; +} + +function genScatterGroups(n: number, seed: number) { + const rand = seededRandom(seed); + const groups = ['Alpha', 'Beta', 'Gamma']; + return Array.from({ length: n }, (_, i) => ({ + X: Math.round(rand() * 100 * 10) / 10, + Y: Math.round(rand() * 100 * 10) / 10, + Group: groups[i % groups.length], + })); +} + +function genQuarterRegion(seed: number) { + const rand = seededRandom(seed); + const quarters = ['Q1', 'Q2', 'Q3', 'Q4']; + const regions = ['North', 'South']; + const data: any[] = []; + for (const q of quarters) { + for (const r of regions) { + data.push({ + Quarter: q, + Revenue: Math.round(200 + rand() * 800), + Region: r, + }); + } + } + return data; +} + +// --------------------------------------------------------------------------- +// Test case builders +// --------------------------------------------------------------------------- + +/** The four acceptance templates, single-series and color-grouped. */ +export function genPlotlyCoreTests(): TestCase[] { + const tests: TestCase[] = []; + + { + const data = genRegionSales(42); + tests.push({ + title: 'PL: Bar — Basic N×Q', + description: 'Single bar trace; category order preserved, zero baseline.', + tags: ['plotly', 'bar'], + chartType: 'Bar Chart', + data, + fields: [makeField('Region'), makeField('Revenue')], + metadata: { + Region: { type: Type.String, semanticType: 'Region', levels: [] }, + Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] }, + }, + encodingMap: { x: makeEncodingItem('Region'), y: makeEncodingItem('Revenue') }, + }); + } + + { + const data = genRegionSales(43); + tests.push({ + title: 'PL: Bar — Horizontal', + description: 'Category on y → orientation "h" bar trace.', + tags: ['plotly', 'bar', 'horizontal'], + chartType: 'Bar Chart', + data, + fields: [makeField('Region'), makeField('Revenue')], + metadata: { + Region: { type: Type.String, semanticType: 'Region', levels: [] }, + Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] }, + }, + encodingMap: { x: makeEncodingItem('Revenue'), y: makeEncodingItem('Region') }, + }); + } + + { + const data = genMonthlySeries(77, ['ProductA', 'ProductB', 'ProductC']); + tests.push({ + title: 'PL: Line — Color Groups', + description: 'One trace per series; legend from trace names.', + tags: ['plotly', 'line', 'color', 'multi-series'], + chartType: 'Line Chart', + data, + fields: [makeField('Month'), makeField('Value'), makeField('Series')], + metadata: { + Month: { type: Type.String, semanticType: 'Month', levels: [] }, + Value: { type: Type.Number, semanticType: 'Amount', levels: [] }, + Series: { type: Type.String, semanticType: 'Category', levels: [] }, + }, + encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') }, + }); + } + + { + const data = genMonthlySeries(88, ['Web', 'Mobile']); + tests.push({ + title: 'PL: Area — Stacked', + description: 'Color groups stack via stackgroup (Plotly-native stacking).', + tags: ['plotly', 'area', 'color', 'stacked'], + chartType: 'Area Chart', + data, + fields: [makeField('Month'), makeField('Value'), makeField('Series')], + metadata: { + Month: { type: Type.String, semanticType: 'Month', levels: [] }, + Value: { type: Type.Number, semanticType: 'Amount', levels: [] }, + Series: { type: Type.String, semanticType: 'Category', levels: [] }, + }, + encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') }, + }); + } + + { + const data = genScatterGroups(90, 99); + tests.push({ + title: 'PL: Scatter — Color Groups', + description: 'Markers mode, one trace per group, qualitative palette.', + tags: ['plotly', 'scatter', 'color', 'multi-series'], + chartType: 'Scatter Plot', + data, + fields: [makeField('X'), makeField('Y'), makeField('Group')], + metadata: { + X: { type: Type.Number, semanticType: 'Quantity', levels: [] }, + Y: { type: Type.Number, semanticType: 'Quantity', levels: [] }, + Group: { type: Type.String, semanticType: 'Category', levels: ['Alpha', 'Beta', 'Gamma'] }, + }, + encodingMap: { x: makeEncodingItem('X'), y: makeEncodingItem('Y'), color: makeEncodingItem('Group') }, + }); + } + + return tests; +} + +/** Facet grid path: column, row, and column×row subplot grids. */ +export function genPlotlyFacetTests(): TestCase[] { + const tests: TestCase[] = []; + + { + const data = genQuarterRegion(11); + tests.push({ + title: 'PL: Facet — Column', + description: 'Bar per Region column; shared nice y-domain, leftmost-only y labels.', + tags: ['plotly', 'facet', 'column', 'bar'], + chartType: 'Bar Chart', + data, + fields: [makeField('Quarter'), makeField('Revenue'), makeField('Region')], + metadata: { + Quarter: { type: Type.String, semanticType: 'Quarter', levels: [] }, + Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] }, + Region: { type: Type.String, semanticType: 'Region', levels: [] }, + }, + encodingMap: { x: makeEncodingItem('Quarter'), y: makeEncodingItem('Revenue'), column: makeEncodingItem('Region') }, + }); + } + + { + const data = genQuarterRegion(22); + tests.push({ + title: 'PL: Facet — Row', + description: 'Line per Region row; rotated row headers, x title on bottom row only.', + tags: ['plotly', 'facet', 'row', 'line'], + chartType: 'Line Chart', + data, + fields: [makeField('Quarter'), makeField('Revenue'), makeField('Region')], + metadata: { + Quarter: { type: Type.String, semanticType: 'Quarter', levels: [] }, + Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] }, + Region: { type: Type.String, semanticType: 'Region', levels: [] }, + }, + encodingMap: { x: makeEncodingItem('Quarter'), y: makeEncodingItem('Revenue'), row: makeEncodingItem('Region') }, + }); + } + + { + const rand = seededRandom(33); + const data: any[] = []; + for (const a of ['A', 'B']) { + for (const b of ['X', 'Y']) { + for (let i = 0; i < 12; i++) { + data.push({ + V: Math.round(rand() * 100), + W: Math.round(rand() * 100), + Col: a, + Row: b, + }); + } + } + } + tests.push({ + title: 'PL: Facet — Column × Row Grid', + description: 'Scatter 2×2 grid; one subplot axis pair per cell.', + tags: ['plotly', 'facet', 'grid', 'scatter'], + chartType: 'Scatter Plot', + data, + fields: [makeField('V'), makeField('W'), makeField('Col'), makeField('Row')], + metadata: { + V: { type: Type.Number, semanticType: 'Quantity', levels: [] }, + W: { type: Type.Number, semanticType: 'Quantity', levels: [] }, + Col: { type: Type.String, semanticType: 'Category', levels: [] }, + Row: { type: Type.String, semanticType: 'Category', levels: [] }, + }, + encodingMap: { x: makeEncodingItem('V'), y: makeEncodingItem('W'), column: makeEncodingItem('Col'), row: makeEncodingItem('Row') }, + }); + } + + return tests; +} diff --git a/packages/flint-js/src/test-data/specialized-tests.ts b/packages/flint-js/src/test-data/specialized-tests.ts index 4398df81..3378866e 100644 --- a/packages/flint-js/src/test-data/specialized-tests.ts +++ b/packages/flint-js/src/test-data/specialized-tests.ts @@ -300,6 +300,16 @@ export function genPieTests(): TestCase[] { return tests; } +export function genDonutTests(): TestCase[] { + return genPieTests().map(test => ({ + ...test, + title: test.title.replace('Pie', 'Donut'), + description: test.description.replace('Pie', 'Donut'), + chartType: 'Donut Chart', + chartProperties: { ...test.chartProperties, innerRadius: 50 }, + })); +} + // ------ Ranged Dot Plot ------ export function genRangedDotPlotTests(): TestCase[] { const tests: TestCase[] = []; @@ -1136,7 +1146,7 @@ export function genCandlestickTests(): TestCase[] { const baseDate = new Date('2024-01-02'); for (let i = 0; i < days; i++) { const date = new Date(baseDate); - date.setDate(baseDate.getDate() + i); + date.setUTCDate(baseDate.getUTCDate() + i); const change = (rand() - 0.48) * 4; // slight upward bias const open = Math.round(price * 100) / 100; const close = Math.round((price + change) * 100) / 100; @@ -1242,7 +1252,7 @@ export function genCandlestickTests(): TestCase[] { const baseDate = new Date('2024-03-01'); for (let i = 0; i < 20; i++) { const date = new Date(baseDate); - date.setDate(baseDate.getDate() + i); + date.setUTCDate(baseDate.getUTCDate() + i); const change = (rand() - 0.48) * 4; const open = Math.round(price * 100) / 100; const close = Math.round((price + change) * 100) / 100; diff --git a/packages/flint-js/src/vegalite/templates/index.ts b/packages/flint-js/src/vegalite/templates/index.ts index 56c3c0a6..2fe6ace4 100644 --- a/packages/flint-js/src/vegalite/templates/index.ts +++ b/packages/flint-js/src/vegalite/templates/index.ts @@ -22,7 +22,7 @@ import { bumpChartDef } from './bump'; import { slopeChartDef } from './slope'; import { areaChartDef, streamgraphDef } from './area'; import { rangeAreaChartDef } from './range-area'; -import { pieChartDef } from './pie'; +import { donutChartDef, pieChartDef } from './pie'; import { lollipopChartDef } from './lollipop'; import { densityPlotDef } from './density'; import { violinPlotDef } from './violin'; @@ -250,7 +250,7 @@ export const vlTemplateDefs: { [key: string]: ChartTemplateDef[] } = Object.from "Bars": [barChartDef, groupedBarChartDef, stackedBarChartDef, lollipopChartDef, waterfallChartDef, ganttChartDef, bulletChartDef], "Distributions": [histogramDef, densityPlotDef, ecdfPlotDef, violinPlotDef, boxplotDef, pyramidChartDef, candlestickChartDef], "Lines & Areas": [lineChartDef, sparklineDef, bumpChartDef, slopeChartDef, areaChartDef, streamgraphDef, rangeAreaChartDef], - "Circular": [pieChartDef, roseChartDef, radarChartDef], + "Circular": [pieChartDef, donutChartDef, roseChartDef, radarChartDef], "Tables & Maps": [heatmapDef, barTableDef, kpiCardDef, mapDef, choroplethDef], }).map(([category, defs]) => [category, defs.map(withInjectedProperties)]), ); diff --git a/packages/flint-js/src/vegalite/templates/pie.ts b/packages/flint-js/src/vegalite/templates/pie.ts index b83a771f..d8eb4c3b 100644 --- a/packages/flint-js/src/vegalite/templates/pie.ts +++ b/packages/flint-js/src/vegalite/templates/pie.ts @@ -107,3 +107,8 @@ export const pieChartDef: ChartTemplateDef = { }, ] as ChartPropertyDef[], }; + +export const donutChartDef: ChartTemplateDef = { + ...pieChartDef, + chart: "Donut Chart", +}; diff --git a/packages/flint-js/tests/excel-codegen.test.ts b/packages/flint-js/tests/excel-codegen.test.ts new file mode 100644 index 00000000..36206977 --- /dev/null +++ b/packages/flint-js/tests/excel-codegen.test.ts @@ -0,0 +1,61 @@ +import { describe, expect, it } from 'vitest'; +import { generateOfficeJs, prepareExcelArtifact } from '../src/excel'; +import type { ExcelNativeChartSpec } from '../src/excel'; + +const funnelArtifact: ExcelNativeChartSpec = { + schema: 'flint.excel.chart/v1', + kind: 'chart', + chartType: 'Funnel', + seriesBy: 'Columns', + title: 'Amount by Stage', + data: [['Stage', 'Amount'], ['Prospects', 500], ['Qualified', 425]], + dataLabels: { + visible: true, + numberFormat: '#,##0', + fontColor: '#FFFFFF', + fontSize: 11, + }, + seriesFormats: [{ color: '#4472C4' }], + width: 480, + height: 320, +}; + +describe('Excel Office.js artifacts', () => { + it('prepares a versioned artifact without legacy coercion', () => { + expect(prepareExcelArtifact(funnelArtifact)).toMatchObject({ + chartType: 'Funnel', + rangeA1: 'A1:B3', + rows: 3, + columns: 2, + hasAxes: false, + }); + expect(() => prepareExcelArtifact({ ...funnelArtifact, chartType: 'funnel' })).toThrow( + 'Unsupported Excel chart type: funnel.', + ); + expect(() => prepareExcelArtifact({ ...funnelArtifact, schema: undefined })).toThrow( + 'Expected a flint.excel.chart/v1 chart artifact.', + ); + }); + + it('generates standalone Office.js with artifact formatting', () => { + const generated = generateOfficeJs(funnelArtifact, { scale: 2 }); + expect(generated.meta).toEqual({ + schema: 'flint.excel.chart/v1', + rangeA1: 'A1:B3', + chartType: 'Funnel', + rows: 3, + columns: 2, + }); + expect(generated.code).toContain('sheet.charts.add("Funnel", dataRange, "Columns")'); + expect(generated.code).toContain('chart.dataLabels.format.font.color = "#FFFFFF"'); + expect(generated.code).toContain('chart.series.getItemAt(index)'); + expect(generated.code).toContain('chart.getImage(1280, 853, Excel.ImageFittingMode.fit)'); + expect(() => new Function('Excel', `${generated.code}\nreturn main;`)).not.toThrow(); + }); + + it('keeps host options out of the serialized artifact', () => { + generateOfficeJs(funnelArtifact, { scale: 4, cleanWorksheet: true }); + expect(funnelArtifact).not.toHaveProperty('scale'); + expect(funnelArtifact).not.toHaveProperty('cleanWorksheet'); + }); +}); diff --git a/packages/flint-js/tests/excel-runtime.test.ts b/packages/flint-js/tests/excel-runtime.test.ts new file mode 100644 index 00000000..70b4efb4 --- /dev/null +++ b/packages/flint-js/tests/excel-runtime.test.ts @@ -0,0 +1,124 @@ +import { describe, expect, it, vi } from 'vitest'; +import { renderExcelChart, type OfficeJsExcelApi } from '../src/excel'; +import type { ExcelNativeChartSpec } from '../src/excel'; + +function createMockExcel() { + const calls = { + chartType: '', + seriesBy: '', + rangeAddress: '', + values: null as unknown, + numberFormat: null as unknown, + image: null as unknown, + labels: {} as Record, + fillColor: '', + clears: 0, + syncs: 0, + }; + const series = { + format: { + fill: { setSolidColor: (color: string) => { calls.fillColor = color; } }, + line: {}, + }, + }; + const chart = { + series: { getItemAt: () => series }, + title: {}, + legend: {}, + dataLabels: { + format: { font: {} }, + set visible(value: boolean) { calls.labels.visible = value; }, + set position(value: string) { calls.labels.position = value; }, + set numberFormat(value: string) { calls.labels.numberFormat = value; }, + }, + axes: {}, + getImage: (width: number, height: number, mode: unknown) => { + calls.image = { width, height, mode }; + return { value: 'iVBORw0KGgoMOCK' }; + }, + }; + Object.defineProperties(chart.dataLabels.format.font, { + color: { set: (value: string) => { calls.labels.fontColor = value; } }, + size: { set: (value: number) => { calls.labels.fontSize = value; } }, + }); + const range = { + set values(value: unknown) { calls.values = value; }, + set numberFormat(value: unknown) { calls.numberFormat = value; }, + }; + const sheet = { + charts: { + items: [], + load: vi.fn(), + add: (chartType: string, _range: unknown, seriesBy: string) => { + calls.chartType = chartType; + calls.seriesBy = seriesBy; + return chart; + }, + }, + getUsedRangeOrNullObject: () => ({ + isNullObject: false, + clear: () => { calls.clears += 1; }, + }), + getRange: (address: string) => { + calls.rangeAddress = address; + return range; + }, + }; + const run = vi.fn(async (callback: (context: unknown) => Promise) => callback({ + workbook: { worksheets: { getActiveWorksheet: () => sheet } }, + sync: async () => { calls.syncs += 1; }, + })); + const excel = { + run, + ImageFittingMode: { fit: 'fit' }, + } as OfficeJsExcelApi; + return { excel, calls, run }; +} + +const artifact: ExcelNativeChartSpec = { + schema: 'flint.excel.chart/v1', + kind: 'chart', + chartType: 'Funnel', + seriesBy: 'Columns', + title: 'Amount by Stage', + data: [['Stage', 'Amount'], ['Prospects', 500], ['Qualified', 425]], + dataLabels: { + visible: true, + numberFormat: '#,##0', + fontColor: '#FFFFFF', + fontSize: 11, + }, + seriesFormats: [{ color: '#4472C4' }], + width: 480, + height: 320, +}; + +describe('renderExcelChart', () => { + it('executes a Flint artifact against the Office.js object model', async () => { + const { excel, calls } = createMockExcel(); + const result = await renderExcelChart(excel, artifact, { scale: 2 }); + + expect(calls.rangeAddress).toBe('A1:B3'); + expect(calls.values).toEqual(artifact.data); + expect(calls.chartType).toBe('Funnel'); + expect(calls.seriesBy).toBe('Columns'); + expect(calls.labels).toEqual({ + visible: true, + numberFormat: '#,##0', + fontColor: '#FFFFFF', + fontSize: 11, + }); + expect(calls.fillColor).toBe('#4472C4'); + expect(calls.image).toEqual({ width: 1280, height: 853, mode: 'fit' }); + expect(calls.clears).toBe(1); + expect(result).toEqual({ pngBase64: 'iVBORw0KGgoMOCK', inspection: null }); + }); + + it('rejects invalid artifacts before entering Excel.run', async () => { + const { excel, run } = createMockExcel(); + await expect(renderExcelChart(excel, { ...artifact, chartType: 'funnel' })).rejects.toThrow( + 'Unsupported Excel chart type: funnel.', + ); + expect(run).not.toHaveBeenCalled(); + }); +}); diff --git a/packages/flint-js/tests/filter-overflow.test.ts b/packages/flint-js/tests/filter-overflow.test.ts new file mode 100644 index 00000000..4f828c61 --- /dev/null +++ b/packages/flint-js/tests/filter-overflow.test.ts @@ -0,0 +1,79 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { describe, expect, it } from 'vitest'; +import { filterOverflow } from '../src/core/filter-overflow'; +import type { ChannelSemantics, ChartEncoding } from '../src/core/types'; + +const budgets = { maxValues: { x: 3 } }; +const marks = new Set(['bar']); +const annotation = { semanticType: 'Category' }; + +function keptCategories( + data: Array<{ Category: string; Value: number }>, + categorySemantics: Omit, + categoryEncoding: ChartEncoding, +): string[] { + const result = filterOverflow( + { + x: { semanticAnnotation: annotation, ...categorySemantics }, + y: { field: 'Value', type: 'quantitative', semanticAnnotation: { semanticType: 'Quantity' } }, + }, + { axisFlags: { x: { banded: true } } }, + { + x: categoryEncoding, + y: { field: 'Value' }, + }, + data, + budgets, + marks, + ); + return result.truncations[0].keptValues as string[]; +} + +describe('overflow category selection', () => { + it('preserves encounter order when no sort is selected', () => { + const data = [ + { Category: 'Delta', Value: 100 }, + { Category: 'Alpha', Value: 1 }, + { Category: 'Charlie', Value: 80 }, + { Category: 'Bravo', Value: 50 }, + ]; + + expect(keptCategories( + data, + { field: 'Category', type: 'nominal' }, + { field: 'Category' }, + )).toEqual(['Delta', 'Alpha', 'Charlie']); + }); + + it('uses canonical semantic order when available', () => { + const data = [ + { Category: 'Mar', Value: 100 }, + { Category: 'Jan', Value: 1 }, + { Category: 'Apr', Value: 80 }, + { Category: 'Feb', Value: 50 }, + ]; + + expect(keptCategories( + data, + { field: 'Category', type: 'ordinal', ordinalSortOrder: ['Jan', 'Feb', 'Mar', 'Apr'] }, + { field: 'Category' }, + )).toEqual(['Jan', 'Feb', 'Mar']); + }); + + it('uses an explicitly selected value sort', () => { + const data = [ + { Category: 'Delta', Value: 100 }, + { Category: 'Alpha', Value: 1 }, + { Category: 'Charlie', Value: 80 }, + { Category: 'Bravo', Value: 50 }, + ]; + + expect(keptCategories( + data, + { field: 'Category', type: 'nominal' }, + { field: 'Category', sortBy: 'y', sortOrder: 'descending' }, + )).toEqual(['Delta', 'Charlie', 'Bravo']); + }); +}); diff --git a/packages/flint-js/tests/heatmap-colors.test.ts b/packages/flint-js/tests/heatmap-colors.test.ts index 497cf4d2..0c29a623 100644 --- a/packages/flint-js/tests/heatmap-colors.test.ts +++ b/packages/flint-js/tests/heatmap-colors.test.ts @@ -2,7 +2,7 @@ // Licensed under the MIT License. import { describe, expect, it } from 'vitest'; -import { assembleECharts, assembleVegaLite } from '../src'; +import { assembleECharts, assembleExcel, assembleVegaLite } from '../src'; const HEATMAP_DATA = [ { day: 'Mon', hour: '09:00', value: 1 }, @@ -50,6 +50,18 @@ function divergingHeatmapInput() { } describe('heatmap color defaults', () => { + it('rejects heatmaps because Office.js has no native heatmap chart type', () => { + expect(() => assembleExcel(heatmapInput())).toThrow( + 'Excel backend does not support chart type "Heatmap" as a native Office.js chart.', + ); + }); + + it('also rejects diverging heatmaps rather than emulating a color scale', () => { + expect(() => assembleExcel(divergingHeatmapInput())).toThrow( + 'Excel backend does not support chart type "Heatmap" as a native Office.js chart.', + ); + }); + it('uses blues for non-diverging Vega-Lite heatmaps by default', () => { const spec = assembleVegaLite(heatmapInput()) as any; diff --git a/packages/flint-js/tests/plotly-backend.test.ts b/packages/flint-js/tests/plotly-backend.test.ts new file mode 100644 index 00000000..324a51f2 --- /dev/null +++ b/packages/flint-js/tests/plotly-backend.test.ts @@ -0,0 +1,206 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { describe, it, expect } from 'vitest'; +import { assemblePlotly, plGetTemplateDef, plAllTemplateDefs } from '../src'; +import { genPlotlyCoreTests, genPlotlyFacetTests } from '../src/test-data'; + +const SALES = [ + { region: 'East', revenue: 168 }, + { region: 'South', revenue: 167 }, + { region: 'North', revenue: 145 }, +]; + +const GROUPED = [ + { region: 'East', revenue: 168, year: '2024' }, + { region: 'South', revenue: 167, year: '2024' }, + { region: 'East', revenue: 120, year: '2025' }, + { region: 'South', revenue: 131, year: '2025' }, +]; + +const CARS = [ + { weight: 1.6, mpg: 32, origin: 'JP' }, + { weight: 2.1, mpg: 27, origin: 'US' }, + { weight: 1.9, mpg: 29, origin: 'EU' }, +]; + +const MONTHLY = [ + { month: '2025-01', value: 12 }, + { month: '2025-02', value: 18 }, + { month: '2025-03', value: 15 }, +]; + +function input(chartType: string, encodings: Record, values: any[], semantic_types: Record, chartProperties?: Record) { + return { + data: { values }, + semantic_types, + chart_spec: { chartType, encodings, baseSize: { width: 400, height: 300 }, ...(chartProperties ? { chartProperties } : {}) }, + } as any; +} + +/** Recursively assert a value contains no functions (pure JSON). */ +function assertNoFunctions(node: any, path = '$'): void { + if (typeof node === 'function') { + throw new Error(`function found at ${path}`); + } + if (node && typeof node === 'object') { + for (const [k, v] of Object.entries(node)) { + assertNoFunctions(v, `${path}.${k}`); + } + } +} + +describe('Plotly backend', () => { + it('registers exactly the four acceptance templates', () => { + expect(plAllTemplateDefs.map(t => t.chart).sort()).toEqual( + ['Area Chart', 'Bar Chart', 'Line Chart', 'Scatter Plot'], + ); + expect(plGetTemplateDef('Bar Chart')).toBeDefined(); + }); + + it('throws on an unregistered chart type', () => { + expect(() => + assemblePlotly(input('Heatmap', { x: { field: 'region' }, y: { field: 'revenue' } }, SALES, { region: 'Region', revenue: 'Amount' })), + ).toThrow(/Unknown Plotly chart type/); + }); + + it('bar: builds a bar trace with category order and zero baseline', () => { + const fig = assemblePlotly(input('Bar Chart', { x: { field: 'region' }, y: { field: 'revenue' } }, SALES, { region: 'Region', revenue: 'Amount' })); + expect(fig.data).toHaveLength(1); + expect(fig.data[0].type).toBe('bar'); + expect(fig.data[0].x).toEqual(['East', 'South', 'North']); + expect(fig.data[0].y).toEqual([168, 167, 145]); + expect(fig.layout.xaxis.type).toBe('category'); + expect(fig.layout.yaxis.rangemode).toBe('tozero'); + expect(fig.layout.width).toBeGreaterThan(0); + expect(fig.layout.height).toBeGreaterThan(0); + }); + + it('bar: transposes to horizontal when the category is on y', () => { + const fig = assemblePlotly(input('Bar Chart', { x: { field: 'revenue' }, y: { field: 'region' } }, SALES, { region: 'Region', revenue: 'Amount' })); + expect(fig.data[0].orientation).toBe('h'); + expect(fig.data[0].y).toEqual(['East', 'South', 'North']); + expect(fig.layout.xaxis.rangemode).toBe('tozero'); + }); + + it('line: one trace per color group with legend on', () => { + const fig = assemblePlotly(input('Line Chart', { x: { field: 'region' }, y: { field: 'revenue' }, color: { field: 'year' } }, GROUPED, { region: 'Region', revenue: 'Amount', year: 'Year' })); + expect(fig.data).toHaveLength(2); + expect(fig.data.map((t: any) => t.name)).toEqual(['2024', '2025']); + expect(fig.data[0].mode).toBe('lines'); + expect(fig.layout.showlegend).toBe(true); + }); + + it('line: temporal x uses a native date axis with ISO values', () => { + const fig = assemblePlotly(input('Line Chart', { x: { field: 'month' }, y: { field: 'value' } }, MONTHLY, { month: 'YearMonth', value: 'Amount' })); + expect(fig.layout.xaxis.type).toBe('date'); + expect(typeof fig.data[0].x[0]).toBe('string'); + expect(fig.data[0].x[0]).toMatch(/^\d{4}-\d{2}-\d{2}T/); + }); + + it('area: stacked color groups use stackgroup; single series fills to zero', () => { + const grouped = assemblePlotly(input('Area Chart', { x: { field: 'region' }, y: { field: 'revenue' }, color: { field: 'year' } }, GROUPED, { region: 'Region', revenue: 'Amount', year: 'Year' })); + expect(grouped.data.every((t: any) => t.stackgroup === 'one')).toBe(true); + + const single = assemblePlotly(input('Area Chart', { x: { field: 'region' }, y: { field: 'revenue' } }, SALES, { region: 'Region', revenue: 'Amount' })); + expect(single.data[0].fill).toBe('tozeroy'); + }); + + it('scatter: markers mode, per-group traces, no forced zero for open measures', () => { + const fig = assemblePlotly(input('Scatter Plot', { x: { field: 'weight' }, y: { field: 'mpg' }, color: { field: 'origin' } }, CARS, { weight: 'Quantity', mpg: 'Quantity', origin: 'Country' })); + expect(fig.data).toHaveLength(3); + expect(fig.data[0].mode).toBe('markers'); + expect(fig.data[0].marker.size).toBeGreaterThan(0); + }); + + it('column facet: one axis pair per panel, shared nice y-range, headers', () => { + const fig = assemblePlotly(input('Bar Chart', { x: { field: 'region' }, y: { field: 'revenue' }, column: { field: 'year' } }, GROUPED, { region: 'Region', revenue: 'Amount', year: 'Year' })); + expect(fig._facet).toBe(true); + expect(fig._facetCols).toBe(2); + expect(fig.layout.xaxis2).toBeDefined(); + expect(fig.layout.yaxis2).toBeDefined(); + expect(fig.layout.yaxis.range).toEqual(fig.layout.yaxis2.range); + expect(fig.layout.yaxis.range[0]).toBe(0); // Amount forces zero into the shared domain + expect(fig.layout.yaxis2.showticklabels).toBe(false); // leftmost-only y labels + const headerTexts = fig.layout.annotations.map((a: any) => a.text); + expect(headerTexts).toContain('2024'); + expect(headerTexts).toContain('2025'); + expect(fig.data.every((t: any) => t.xaxis && t.yaxis)).toBe(true); + }); + + it('row facet: stacked panels with rotated row headers', () => { + const fig = assemblePlotly(input('Line Chart', { x: { field: 'region' }, y: { field: 'revenue' }, row: { field: 'year' } }, GROUPED, { region: 'Region', revenue: 'Amount', year: 'Year' })); + expect(fig._facet).toBe(true); + expect(fig._facetRows).toBe(2); + expect(fig._facetCols).toBe(1); + const rowHeaders = fig.layout.annotations.filter((a: any) => a.textangle === 90); + expect(rowHeaders.map((a: any) => a.text)).toEqual(['2024', '2025']); + // x title only on the bottom row + expect(fig.layout.xaxis.title).toBeUndefined(); + expect(fig.layout.xaxis2.title).toBeDefined(); + }); + + it('column+row facet: full grid with one axis pair per cell', () => { + const CELLS = [ + { v: 1, w: 10, a: 'A', b: 'X' }, { v: 2, w: 20, a: 'B', b: 'X' }, + { v: 3, w: 30, a: 'A', b: 'Y' }, { v: 4, w: 40, a: 'B', b: 'Y' }, + ]; + const fig = assemblePlotly(input('Scatter Plot', { x: { field: 'v' }, y: { field: 'w' }, column: { field: 'a' }, row: { field: 'b' } }, CELLS, { v: 'Quantity', w: 'Quantity', a: 'Category', b: 'Category' })); + expect(fig._facetRows).toBe(2); + expect(fig._facetCols).toBe(2); + expect(fig.layout.xaxis4).toBeDefined(); + expect(fig.layout.yaxis4).toBeDefined(); + }); + + it('facet legend is deduped across panels via legendgroup', () => { + const fig = assemblePlotly(input('Line Chart', { x: { field: 'region' }, y: { field: 'revenue' }, color: { field: 'year' }, column: { field: 'year' } }, GROUPED, { region: 'Region', revenue: 'Amount', year: 'Year' })); + const shown = fig.data.filter((t: any) => t.showlegend); + const names = new Set(fig.data.map((t: any) => t.name)); + expect(shown.length).toBe(names.size); + expect(fig.data.every((t: any) => t.legendgroup === t.name)).toBe(true); + }); + + it('diverging vs categorical semantics pick different scheme families', () => { + const TEMP = [ + { city: 'Oslo', temp: -6 }, { city: 'Rome', temp: 14 }, { city: 'Cairo', temp: 24 }, + ]; + const diverging = assemblePlotly(input('Bar Chart', { x: { field: 'city' }, y: { field: 'temp' }, color: { field: 'temp' } }, TEMP, { city: 'City', temp: 'Temperature' })); + const categorical = assemblePlotly(input('Scatter Plot', { x: { field: 'weight' }, y: { field: 'mpg' }, color: { field: 'origin' } }, CARS, { weight: 'Quantity', mpg: 'Quantity', origin: 'Country' })); + // Categorical grouping draws from the plotly10 qualitative palette… + expect(categorical.data[0].marker.color).toBe('#636efa'); + // …while a diverging measure on color routes to the RdBu ramp. + expect(diverging.data[0].marker.color).toBe('#b2182b'); + }); + + it('every dedicated generator case assembles cleanly', () => { + for (const tc of [...genPlotlyCoreTests(), ...genPlotlyFacetTests()]) { + const encodings = Object.fromEntries( + Object.entries(tc.encodingMap).map(([ch, e]: [string, any]) => [ch, { field: e.fieldID }]), + ); + const semantic_types = Object.fromEntries( + Object.entries(tc.metadata).map(([f, m]: [string, any]) => [f, m.semanticType]), + ); + const fig = assemblePlotly({ + data: { values: tc.data }, + semantic_types, + chart_spec: { chartType: tc.chartType, encodings }, + } as any); + expect(Array.isArray(fig.data), tc.title).toBe(true); + expect(fig.data.length, tc.title).toBeGreaterThan(0); + } + }); + + it('figures are pure JSON for all four templates', () => { + const figures = [ + assemblePlotly(input('Bar Chart', { x: { field: 'region' }, y: { field: 'revenue' } }, SALES, { region: 'Region', revenue: 'Amount' })), + assemblePlotly(input('Line Chart', { x: { field: 'month' }, y: { field: 'value' } }, MONTHLY, { month: 'YearMonth', value: 'Amount' })), + assemblePlotly(input('Area Chart', { x: { field: 'region' }, y: { field: 'revenue' }, color: { field: 'year' } }, GROUPED, { region: 'Region', revenue: 'Amount', year: 'Year' })), + assemblePlotly(input('Scatter Plot', { x: { field: 'weight' }, y: { field: 'mpg' } }, CARS, { weight: 'Quantity', mpg: 'Quantity' })), + assemblePlotly(input('Bar Chart', { x: { field: 'region' }, y: { field: 'revenue' }, column: { field: 'year' } }, GROUPED, { region: 'Region', revenue: 'Amount', year: 'Year' })), + ]; + for (const fig of figures) { + assertNoFunctions(fig); + expect(JSON.parse(JSON.stringify(fig))).toEqual(fig); + } + }); +}); diff --git a/packages/flint-js/tests/smoke.test.ts b/packages/flint-js/tests/smoke.test.ts index 1684754d..4e7977b8 100644 --- a/packages/flint-js/tests/smoke.test.ts +++ b/packages/flint-js/tests/smoke.test.ts @@ -6,6 +6,8 @@ import { assembleVegaLite, assembleECharts, assembleChartjs, + assemblePlotly, + assembleExcel, } from '../src'; const DATA = [ @@ -47,6 +49,865 @@ describe('public API smoke', () => { expect(config.type ?? config.data ?? config.options).toBeDefined(); }); + it('assembleExcel returns an Excel chart spec with a wide data matrix', () => { + const spec = assembleExcel(INPUT) as any; + expect(spec).toBeDefined(); + // XYScatter (both axes quantitative), wide matrix with a header row + expect(spec.chartType).toBe('XYScatter'); + expect(Array.isArray(spec.data)).toBe(true); + expect(spec.data[0]).toEqual([ + 'JP weight', 'JP mpg', + 'US weight', 'US mpg', + 'EU weight', 'EU mpg', + ]); + expect(spec.series).toEqual([ + { name: 'JP', xColumn: 0, yColumn: 1, rowCount: 1 }, + { name: 'US', xColumn: 2, yColumn: 3, rowCount: 1 }, + { name: 'EU', xColumn: 4, yColumn: 5, rowCount: 1 }, + ]); + expect(spec.seriesBy).toBe('Columns'); + }); + + it('assembleExcel preserves bar-template roles when both axes are quantitative', () => { + const spec = assembleExcel({ + data: { values: [{ X: 1, Value: 10 }, { X: 2, Value: 20 }] }, + semantic_types: { X: 'Quantity', Value: 'Quantity' }, + chart_spec: { chartType: 'Bar Chart', encodings: { x: 'X', y: 'Value' } }, + }) as any; + + expect(spec.kind).toBe('chart'); + expect(spec.chartType).toBe('ColumnClustered'); + expect(spec.data).toEqual([['X', 'Value'], ['1', 10], ['2', 20]]); + }); + + it('assembleExcel uses stacked charts for a colored Bar Chart', () => { + const spec = assembleExcel({ + data: { values: [ + { Category: 'A', Value: 3, Segment: 'US' }, + { Category: 'A', Value: 4, Segment: 'JP' }, + ] }, + semantic_types: { Category: 'Category', Value: 'Quantity', Segment: 'Category' }, + chart_spec: { chartType: 'Bar Chart', encodings: { x: 'Category', y: 'Value', color: 'Segment' } }, + }) as any; + + expect(spec.chartType).toBe('ColumnStacked'); + expect(spec.data[0]).toEqual(['Category', 'US', 'JP']); + }); + + it('assembleExcel emits native histogram data without requiring a category', () => { + const spec = assembleExcel({ + data: { values: [{ Value: 1 }, { Value: 2 }, { Value: 3 }] }, + semantic_types: { Value: 'Quantity' }, + chart_spec: { chartType: 'Histogram', encodings: { x: 'Value' } }, + }) as any; + + expect(spec.chartType).toBe('ColumnClustered'); + expect(spec.data[0]).toEqual(['Value', 'Count']); + expect(spec.data.slice(1).reduce((sum: number, row: any[]) => sum + row[1], 0)).toBe(3); + expect(spec.gapWidth).toBe(0); + }); + + it('assembleExcel emits a native delta Waterfall with connector lines', () => { + const spec = assembleExcel({ + data: { values: [ + { Department: 'Engineering', Variance: 120 }, + { Department: 'Sales', Variance: -45 }, + { Department: 'Marketing', Variance: -80 }, + ] }, + semantic_types: { Department: 'Category', Variance: 'Quantity' }, + chart_spec: { + chartType: 'Waterfall Chart', + encodings: { x: 'Department', y: 'Variance' }, + chartProperties: { totals: 'first' }, + }, + }) as any; + + expect(spec.kind).toBe('chart'); + expect(spec.chartType).toBe('Waterfall'); + expect(spec.data).toEqual([ + ['Department', 'Variance'], + ['Engineering', 120], + ['Sales', -45], + ['Marketing', -80], + ]); + expect(spec.showConnectorLines).toBe(true); + }); + + it('assembleExcel normalizes native Radar series by each metric maximum', () => { + const spec = assembleExcel({ + data: { values: [ + { Team: 'A', Metric: 'Speed', Value: 80 }, + { Team: 'B', Metric: 'Speed', Value: 100 }, + { Team: 'A', Metric: 'Cost', Value: 20 }, + { Team: 'B', Metric: 'Cost', Value: 40 }, + { Team: 'A', Metric: 'Quality', Value: 75 }, + { Team: 'B', Metric: 'Quality', Value: 50 }, + ] }, + semantic_types: { Team: 'Category', Metric: 'Category', Value: 'Quantity' }, + chart_spec: { + chartType: 'Radar Chart', + encodings: { x: 'Metric', y: 'Value', color: 'Team' }, + }, + }) as any; + + expect(spec.chartType).toBe('RadarMarkers'); + expect(spec.data).toEqual([ + ['Metric', 'A', 'B'], + ['Speed (100)', 0.8, 1], + ['Cost (50)', 0.4, 0.8], + ['Quality (100)', 0.75, 0.5], + ]); + expect(spec.valueAxis).toEqual({ minimumScale: 0, maximumScale: 1, majorUnit: 0.25 }); + expect(spec.legend).toEqual({ visible: true, position: 'Bottom' }); + expect(spec.warnings).toEqual([expect.objectContaining({ code: 'excel-radar-fill-unsupported' })]); + }); + + it('assembleExcel maps unfilled Radar to native markers and rejects facets', () => { + const input = { + data: { values: [ + { Metric: 'A', Value: 1, Region: 'North' }, + { Metric: 'B', Value: 2, Region: 'North' }, + { Metric: 'C', Value: 3, Region: 'North' }, + ] }, + semantic_types: { Metric: 'Category', Value: 'Quantity', Region: 'Category' }, + chart_spec: { + chartType: 'Radar Chart', + encodings: { x: 'Metric', y: 'Value' }, + chartProperties: { filled: false }, + }, + }; + expect((assembleExcel(input) as any).chartType).toBe('RadarMarkers'); + + expect(() => assembleExcel({ + ...input, + chart_spec: { + ...input.chart_spec, + encodings: { ...input.chart_spec.encodings, column: 'Region' }, + }, + } as any)).toThrow('does not support faceting'); + }); + + it('assembleExcel rejects generic chart facets instead of collapsing panels', () => { + expect(() => assembleExcel({ + data: { values: [ + { Region: 'North', Category: 'A', Value: 10 }, + { Region: 'South', Category: 'A', Value: 20 }, + ] }, + semantic_types: { Region: 'Category', Category: 'Category', Value: 'Quantity' }, + chart_spec: { + chartType: 'Bar Chart', + encodings: { x: 'Category', y: 'Value', column: 'Region' }, + }, + })).toThrow('does not support faceting in one native Excel chart'); + }); + + it('assembleExcel rejects Waterfalls requiring a non-initial total point', () => { + expect(() => assembleExcel({ + data: { values: [ + { Step: 'Opening', Value: 500, Type: 'start' }, + { Step: 'Sales', Value: 200, Type: 'delta' }, + { Step: 'Closing', Value: 700, Type: 'end' }, + ] }, + semantic_types: { Step: 'Category', Value: 'Quantity', Type: 'Category' }, + chart_spec: { + chartType: 'Waterfall Chart', + encodings: { x: 'Step', y: 'Value', color: 'Type' }, + }, + })).toThrow('Office.js does not expose Waterfall total-point semantics'); + }); + + it('assembleExcel preserves raw observations for native Boxplot quartiles', () => { + const spec = assembleExcel({ + data: { values: [ + { Group: 'A', Value: 1 }, + { Group: 'A', Value: 5 }, + { Group: 'B', Value: 2 }, + { Group: 'B', Value: 8 }, + ] }, + semantic_types: { Group: 'Category', Value: 'Quantity' }, + chart_spec: { chartType: 'Boxplot', encodings: { x: 'Group', y: 'Value' } }, + }) as any; + + expect(spec.chartType).toBe('BoxWhisker'); + expect(spec.data).toEqual([ + ['Group', 'Value'], + ['A', 1], + ['A', 5], + ['B', 2], + ['B', 8], + ]); + expect(spec.boxWhiskerOptions).toEqual({ + quartileCalculation: 'Inclusive', + showInnerPoints: false, + showMeanLine: false, + showMeanMarker: false, + showOutlierPoints: true, + }); + }); + + it('assembleExcel emits the native StockOHLC date-open-high-low-close range', () => { + const spec = assembleExcel({ + data: { values: [ + { Date: '2026-01-02', Open: 100, High: 108, Low: 98, Close: 105 }, + { Date: '2026-01-05', Open: 105, High: 110, Low: 101, Close: 103 }, + ] }, + semantic_types: { Date: 'Date', Open: 'Quantity', High: 'Quantity', Low: 'Quantity', Close: 'Quantity' }, + chart_spec: { + chartType: 'Candlestick Chart', + encodings: { x: 'Date', open: 'Open', high: 'High', low: 'Low', close: 'Close' }, + }, + }) as any; + + expect(spec.chartType).toBe('StockOHLC'); + expect(spec.seriesBy).toBe('Columns'); + expect(spec.data).toEqual([ + ['Date', 'Open', 'High', 'Low', 'Close'], + [46024, 100, 108, 98, 105], + [46027, 105, 110, 101, 103], + ]); + expect(spec.categoryAxis.numberFormat).toBe('yyyy-mm-dd'); + expect(spec.valueAxis).toEqual({ + title: 'Price', + numberFormat: undefined, + minimumScale: 95, + maximumScale: 115, + majorUnit: 5, + }); + expect(spec.legend).toEqual({ visible: false }); + }); + + it('assembleExcel rejects invalid native Candlestick rows and unsupported encodings', () => { + const input = { + data: { values: [ + { Date: '2026-01-02', Open: 100, High: 99, Low: 98, Close: 105, Ticker: 'A' }, + ] }, + semantic_types: { + Date: 'Date', Open: 'Quantity', High: 'Quantity', Low: 'Quantity', Close: 'Quantity', Ticker: 'Category', + }, + chart_spec: { + chartType: 'Candlestick Chart', + encodings: { x: 'Date', open: 'Open', high: 'High', low: 'Low', close: 'Close' }, + }, + }; + + expect(() => assembleExcel(input)).toThrow('requires coherent OHLC values at row 1'); + expect(() => assembleExcel({ + ...input, + data: { values: [ + { Date: '2026-01-05', Open: 100, High: 108, Low: 98, Close: 105, Ticker: 'A' }, + { Date: '2026-01-02', Open: 105, High: 110, Low: 101, Close: 103, Ticker: 'A' }, + ] }, + })).toThrow('sorted in strictly increasing chronological order'); + expect(() => assembleExcel({ + ...input, + data: { values: [{ Date: '2026-01-02', Open: 100, High: 108, Low: 98, Close: 105, Ticker: 'A' }] }, + chart_spec: { + ...input.chart_spec, + encodings: { ...input.chart_spec.encodings, color: 'Ticker' }, + }, + })).toThrow('does not support color, group, or detail encodings'); + expect(() => assembleExcel({ + ...input, + semantic_types: { ...input.semantic_types, Open: 'Category' }, + data: { values: [{ Date: '2026-01-02', Open: 'start', High: 108, Low: 98, Close: 105, Ticker: 'A' }] }, + })).toThrow('requires a quantitative open field'); + expect(() => assembleExcel({ + ...input, + data: { values: [{ Date: '2026-01-02', Open: 100, High: Number.POSITIVE_INFINITY, Low: 98, Close: 105, Ticker: 'A' }] }, + })).toThrow('requires finite open, high, low, and close values'); + }); + + it('assembleExcel accepts an explicitly ordered date-like Candlestick x field', () => { + const spec = assembleExcel({ + data: { values: [ + { Session: '2026-01-02', Open: 100, High: 108, Low: 98, Close: 105 }, + { Session: '2026-01-05', Open: 105, High: 110, Low: 101, Close: 103 }, + ] }, + semantic_types: { Session: 'Category', Open: 'Quantity', High: 'Quantity', Low: 'Quantity', Close: 'Quantity' }, + chart_spec: { + chartType: 'Candlestick Chart', + encodings: { + x: { field: 'Session', type: 'ordinal' }, + open: 'Open', high: 'High', low: 'Low', close: 'Close', + }, + }, + }) as any; + + expect(spec.chartType).toBe('StockOHLC'); + expect(spec.data.slice(1).map((row: any[]) => row[0])).toEqual([46024, 46027]); + }); + + it('assembleExcel thins dense Candlestick date labels without dropping OHLC rows', () => { + const values = Array.from({ length: 90 }, (_, index) => ({ + Date: new Date(Date.UTC(2026, 0, index + 1)).toISOString().slice(0, 10), + Open: 100 + index, + High: 103 + index, + Low: 98 + index, + Close: 101 + index, + })); + const spec = assembleExcel({ + data: { values }, + semantic_types: { Date: 'Date', Open: 'Quantity', High: 'Quantity', Low: 'Quantity', Close: 'Quantity' }, + chart_spec: { + chartType: 'Candlestick Chart', + encodings: { x: 'Date', open: 'Open', high: 'High', low: 'Low', close: 'Close' }, + baseSize: { width: 640, height: 380 }, + }, + }) as any; + + expect(spec.data).toHaveLength(91); + expect(spec.categoryAxis.tickLabelSpacing).toBe(3); + }); + + it('assembleExcel rejects color-grouped native Boxplots', () => { + expect(() => assembleExcel({ + data: { values: [{ Group: 'A', Value: 1, Segment: 'X' }] }, + semantic_types: { Group: 'Category', Value: 'Quantity', Segment: 'Category' }, + chart_spec: { chartType: 'Boxplot', encodings: { x: 'Group', y: 'Value', color: 'Segment' } }, + })).toThrow('does not yet support color-grouped'); + }); + + it('assembleExcel rejects Boxplot min-max whiskers', () => { + expect(() => assembleExcel({ + data: { values: [{ Group: 'A', Value: 1 }, { Group: 'A', Value: 2 }] }, + semantic_types: { Group: 'Category', Value: 'Quantity' }, + chart_spec: { + chartType: 'Boxplot', + encodings: { x: 'Group', y: 'Value' }, + chartProperties: { whiskerMethod: 'minmax' }, + }, + })).toThrow('does not support min-max whiskers'); + }); + + it('assembleExcel uses native numeric-x lines instead of row-index categories', () => { + const spec = assembleExcel({ + data: { values: [{ X: 0, Value: 2 }, { X: 10, Value: 5 }] }, + semantic_types: { X: 'Quantity', Value: 'Quantity' }, + chart_spec: { chartType: 'Line Chart', encodings: { x: 'X', y: 'Value' } }, + }) as any; + + expect(spec.chartType).toBe('XYScatterLines'); + expect(spec.data).toEqual([['X', 'Value'], [0, 2], [10, 5]]); + expect(spec.categoryAxis).toMatchObject({ minimumScale: 0, maximumScale: 10.5, majorUnit: 2 }); + expect(spec.valueAxis).toMatchObject({ minimumScale: 2, maximumScale: 5.3, majorUnit: 1 }); + }); + + it('assembleExcel binds grouped numeric-x lines as explicit XY series', () => { + const spec = assembleExcel({ + data: { values: [ + { X: 1, Value: 10, Series: 'A' }, + { X: 2, Value: 20, Series: 'A' }, + { X: 1, Value: 30, Series: 'B' }, + ] }, + semantic_types: { X: 'Quantity', Value: 'Quantity', Series: 'Category' }, + chart_spec: { chartType: 'Line Chart', encodings: { x: 'X', y: 'Value', color: 'Series' } }, + }) as any; + + expect(spec.chartType).toBe('XYScatterLines'); + expect(spec.series).toEqual([ + { name: 'A', xColumn: 0, yColumn: 1, rowCount: 2 }, + { name: 'B', xColumn: 2, yColumn: 3, rowCount: 1 }, + ]); + expect(spec.data[0]).toEqual(['A X', 'A Value', 'B X', 'B Value']); + }); + + it('assembleExcel thins dense temporal labels without dropping data points', () => { + const values = Array.from({ length: 60 }, (_value, index) => ({ + Date: new Date(Date.UTC(2026, 0, index + 1)).toISOString().slice(0, 10), + Value: index, + })); + const spec = assembleExcel({ + data: { values }, + semantic_types: { Date: 'Date', Value: 'Quantity' }, + chart_spec: { + chartType: 'Area Chart', + encodings: { x: 'Date', y: 'Value' }, + baseSize: { width: 550, height: 400 }, + }, + }) as any; + + expect(spec.data).toHaveLength(values.length + 1); + expect(spec.categoryAxis.tickLabelSpacing).toBe(2); + }); + + it('assembleExcel emits grouped bubble series with explicit size ranges', () => { + const spec = assembleExcel({ + data: { values: [ + { X: 1, Y: 10, Size: 5, Segment: 'A' }, + { X: 2, Y: 20, Size: 8, Segment: 'B' }, + ] }, + semantic_types: { X: 'Quantity', Y: 'Quantity', Size: 'Quantity', Segment: 'Category' }, + chart_spec: { chartType: 'Scatter Plot', encodings: { x: 'X', y: 'Y', size: 'Size', color: 'Segment' } }, + }) as any; + + expect(spec.kind).toBe('chart'); + expect(spec.chartType).toBe('Bubble'); + expect(spec.series).toEqual([ + { name: 'A', xColumn: 0, yColumn: 1, rowCount: 1, bubbleSizeColumn: 2 }, + { name: 'B', xColumn: 3, yColumn: 4, rowCount: 1, bubbleSizeColumn: 5 }, + ]); + expect(spec.data[0]).toEqual(['A X', 'A Y', 'A Size', 'B X', 'B Y', 'B Size']); + expect(spec.data[1].slice(0, 2)).toEqual([1, 10]); + expect(spec.data[1].slice(3, 5)).toEqual([2, 20]); + expect(spec.data[1][2]).toBeLessThan(spec.data[1][5]); + }); + + it('assembleExcel rejects categorical scatter positions instead of drawing worksheet shapes', () => { + expect(() => assembleExcel({ + data: { values: [ + { Category: 'A', Group: 'One', Size: 3 }, + { Category: 'B', Group: 'Two', Size: 8 }, + ] }, + semantic_types: { Category: 'Category', Group: 'Category', Size: 'Quantity' }, + chart_spec: { chartType: 'Scatter Plot', encodings: { x: 'Category', y: 'Group', size: 'Size' } }, + })).toThrow('requires quantitative x and y fields'); + }); + + it('assembleExcel rejects continuous-color scatter instead of dropping the color encoding', () => { + expect(() => assembleExcel({ + data: { values: [ + { X: 1, Y: 10, Color: 0.2 }, + { X: 2, Y: 20, Color: 0.8 }, + ] }, + semantic_types: { X: 'Quantity', Y: 'Quantity', Color: 'Quantity' }, + chart_spec: { chartType: 'Scatter Plot', encodings: { x: 'X', y: 'Y', color: 'Color' } }, + })).toThrow('does not support continuous color'); + }); + + it('assembleExcel rejects categorical-y lines instead of drawing worksheet geometry', () => { + expect(() => assembleExcel({ + data: { values: [ + { X: 0, Step: 'Stage 1' }, + { X: 50, Step: 'Stage 2' }, + { X: 100, Step: 'Stage 3' }, + ] }, + semantic_types: { X: 'Quantity', Step: 'Category' }, + chart_spec: { chartType: 'Line Chart', encodings: { x: 'X', y: 'Step' } }, + })).toThrow('requires a quantitative y field'); + }); + + it('assembleExcel rejects continuous-color lines instead of overlaying worksheet shapes', () => { + expect(() => assembleExcel({ + data: { values: [ + { Stage: 'Stage 1', Value: 10, Color: 0 }, + { Stage: 'Stage 2', Value: 20, Color: 5 }, + { Stage: 'Stage 3', Value: 15, Color: 10 }, + ] }, + semantic_types: { Stage: 'Category', Value: 'Quantity', Color: 'Quantity' }, + chart_spec: { chartType: 'Line Chart', encodings: { x: 'Stage', y: 'Value', color: 'Color' } }, + })).toThrow('does not support continuous color'); + }); + + it('assembleExcel maps ordinal bubble sizes to finite ordered areas', () => { + const spec = assembleExcel({ + data: { values: [ + { X: 1, Y: 10, Level: 'Low' }, + { X: 2, Y: 20, Level: 'Medium' }, + { X: 3, Y: 30, Level: 'High' }, + ] }, + semantic_types: { X: 'Quantity', Y: 'Quantity', Level: 'Rank' }, + chart_spec: { chartType: 'Scatter Plot', encodings: { x: 'X', y: 'Y', size: 'Level' } }, + }) as any; + + expect(spec.chartType).toBe('Bubble'); + expect(spec.series).toEqual([ + { name: 'Y', xColumn: 0, yColumn: 1, rowCount: 3, bubbleSizeColumn: 2 }, + ]); + const sizes = spec.data.slice(1).map((row: any[]) => row[2]); + expect(sizes.every(Number.isFinite)).toBe(true); + expect(sizes[0]).toBeLessThan(sizes[1]); + expect(sizes[1]).toBeLessThan(sizes[2]); + }); + + it('assembleExcel stacks multi-series areas and anchors them at zero', () => { + const spec = assembleExcel({ + data: { values: [ + { Date: '2026-01-01', Value: 2, Series: 'A' }, + { Date: '2026-01-01', Value: 3, Series: 'B' }, + ] }, + semantic_types: { Date: 'Date', Value: 'Quantity', Series: 'Category' }, + chart_spec: { chartType: 'Area Chart', encodings: { x: 'Date', y: 'Value', color: 'Series' } }, + }) as any; + + expect(spec.chartType).toBe('AreaStacked'); + expect(spec.valueAxis.minimumScale).toBe(0); + }); + + it('assembleExcel resamples quantitative-x areas onto a sparse-labeled numeric grid', () => { + const spec = assembleExcel({ + data: { values: [ + { X: 0, Value: 0 }, + { X: 1, Value: 1 }, + { X: 10, Value: 10 }, + ] }, + semantic_types: { X: 'Quantity', Value: 'Quantity' }, + chart_spec: { chartType: 'Area Chart', encodings: { x: 'X', y: 'Value' } }, + }) as any; + + expect(spec.chartType).toBe('Area'); + expect(spec.data).toHaveLength(50); + expect(spec.data[1]).toEqual(['0', 0]); + expect(spec.data[2][0]).toBe(''); + expect(spec.data[25]).toEqual(['5', 5]); + expect(spec.data[49]).toEqual(['10', 10]); + }); + + it('assembleExcel preserves semantic series and null gaps in sparse grouped bars', () => { + const spec = assembleExcel({ + data: { values: [ + { Region: 'North', Sales: 10, Channel: 'Retail' }, + { Region: 'North', Sales: 20, Channel: 'Online' }, + { Region: 'South', Sales: 30, Channel: 'Online' }, + { Region: 'South', Sales: 40, Channel: 'Direct' }, + ] }, + semantic_types: { Region: 'Category', Sales: 'Quantity', Channel: 'Category' }, + chart_spec: { chartType: 'Grouped Bar Chart', encodings: { x: 'Region', y: 'Sales', group: 'Channel' } }, + }) as any; + + expect(spec.data).toEqual([ + ['Region', 'Retail', 'Online', 'Direct'], + ['North', 10, 20, null], + ['South', null, 30, 40], + ]); + expect(spec.legend).toEqual({ visible: true, position: 'Bottom' }); + expect(spec.gapWidth).toBe(180); + expect(spec.overlap).toBe(0); + }); + + it('assembleExcel keeps horizontal grouped bars compact', () => { + const spec = assembleExcel({ + data: { values: [ + { Region: 'North', Sales: 10, Channel: 'Retail' }, + { Region: 'North', Sales: 20, Channel: 'Online' }, + { Region: 'South', Sales: 30, Channel: 'Direct' }, + ] }, + semantic_types: { Region: 'Category', Sales: 'Quantity', Channel: 'Category' }, + chart_spec: { chartType: 'Grouped Bar Chart', encodings: { x: 'Sales', y: 'Region', group: 'Channel' } }, + }) as any; + + expect(spec.chartType).toBe('BarClustered'); + expect(spec.gapWidth).toBe(120); + expect(spec.overlap).toBe(0); + }); + + it('assembleExcel emits a symmetric two-group native pyramid', () => { + const spec = assembleExcel({ + data: { values: [ + { Age: '0-17', Gender: 'Male', Population: 30 }, + { Age: '0-17', Gender: 'Female', Population: 28 }, + { Age: '18-34', Gender: 'Male', Population: 20 }, + { Age: '18-34', Gender: 'Female', Population: 22 }, + { Age: '18-34', Gender: 'Female', Population: 3 }, + { Age: '35-49', Gender: 'Female', Population: 12 }, + ] }, + semantic_types: { Age: 'Category', Gender: 'Category', Population: 'Quantity' }, + chart_spec: { chartType: 'Pyramid Chart', encodings: { y: 'Age', x: 'Population', color: 'Gender' } }, + }) as any; + + expect(spec.chartType).toBe('BarStacked'); + expect(spec.data).toEqual([ + ['Age', 'Male', 'Female'], + ['0-17', -30, 28], + ['18-34', -20, 25], + ['35-49', null, 12], + ]); + expect(spec.valueAxis).toEqual({ + title: 'Population', + numberFormat: '#,##0;#,##0;0', + minimumScale: -30, + maximumScale: 30, + majorUnit: 10, + }); + expect(spec.seriesFormats).toEqual([{ color: '#4472C4' }, { color: '#C55A5A' }]); + expect(spec.overlap).toBe(100); + }); + + it('assembleExcel rejects pyramids without exactly two groups', () => { + expect(() => assembleExcel({ + data: { values: [ + { Age: '0-17', Gender: 'Female', Population: 28 }, + { Age: '18-34', Gender: 'Female', Population: 22 }, + ] }, + semantic_types: { Age: 'Category', Gender: 'Category', Population: 'Quantity' }, + chart_spec: { chartType: 'Pyramid Chart', encodings: { y: 'Age', x: 'Population', color: 'Gender' } }, + })).toThrow('requires exactly two groups'); + }); + + it('assembleExcel emits a sorted native funnel and aggregates duplicate stages', () => { + const spec = assembleExcel({ + data: { values: [ + { Stage: 'Trial', Count: 20 }, + { Stage: 'Visit', Count: 70 }, + { Stage: 'Trial', Count: 10 }, + { Stage: 'Signup', Count: 50 }, + ] }, + semantic_types: { Stage: 'Category', Count: 'Quantity' }, + chart_spec: { chartType: 'Funnel Chart', encodings: { y: 'Stage', size: 'Count' } }, + }) as any; + + expect(spec.chartType).toBe('Funnel'); + expect(spec.data).toEqual([ + ['Stage', 'Count'], + ['Visit', 70], + ['Signup', 50], + ['Trial', 30], + ]); + expect(spec.legend).toEqual({ visible: false }); + expect(spec.dataLabels).toEqual({ + visible: true, + numberFormat: undefined, + fontColor: '#FFFFFF', + fontSize: 11, + }); + expect(spec.seriesFormats).toEqual([{ color: '#4472C4' }]); + }); + + it('assembleExcel rejects negative native funnel values', () => { + expect(() => assembleExcel({ + data: { values: [ + { Stage: 'Visit', Count: 70 }, + { Stage: 'Refund', Count: -5 }, + ] }, + semantic_types: { Stage: 'Category', Count: 'Quantity' }, + chart_spec: { chartType: 'Funnel Chart', encodings: { y: 'Stage', size: 'Count' } }, + })).toThrow('requires non-negative values'); + }); + + it('assembleExcel emits a two-level native treemap and aggregates duplicate leaves', () => { + const spec = assembleExcel({ + data: { values: [ + { Region: 'Americas', Country: 'USA', Revenue: 20 }, + { Region: 'Europe', Country: 'France', Revenue: 30 }, + { Region: 'Americas', Country: 'USA', Revenue: 10 }, + { Region: 'Americas', Country: 'Canada', Revenue: 15 }, + ] }, + semantic_types: { Region: 'Category', Country: 'Country', Revenue: 'Amount' }, + chart_spec: { chartType: 'Treemap', encodings: { color: 'Region', detail: 'Country', size: 'Revenue' } }, + }) as any; + + expect(spec.chartType).toBe('Treemap'); + expect(spec.data).toEqual([ + ['Region', 'Country', 'Revenue'], + ['Americas', 'USA', 30], + ['Europe', 'France', 30], + ['Americas', 'Canada', 15], + ]); + expect(spec.legend).toEqual({ visible: false }); + }); + + it('assembleExcel rejects negative native treemap values', () => { + expect(() => assembleExcel({ + data: { values: [{ Sector: 'Energy', Value: -10 }] }, + semantic_types: { Sector: 'Category', Value: 'Quantity' }, + chart_spec: { chartType: 'Treemap', encodings: { color: 'Sector', size: 'Value' } }, + })).toThrow('requires non-negative values'); + }); + + it('assembleExcel emits a two-level native sunburst and aggregates duplicate leaves', () => { + const spec = assembleExcel({ + data: { values: [ + { Department: 'Engineering', Team: 'Frontend', Headcount: 20 }, + { Department: 'Product', Team: 'Design', Headcount: 15 }, + { Department: 'Engineering', Team: 'Frontend', Headcount: 10 }, + { Department: 'Engineering', Team: 'Backend', Headcount: 25 }, + ] }, + semantic_types: { Department: 'Category', Team: 'Category', Headcount: 'Quantity' }, + chart_spec: { chartType: 'Sunburst Chart', encodings: { color: 'Department', group: 'Team', size: 'Headcount' } }, + }) as any; + + expect(spec.chartType).toBe('Sunburst'); + expect(spec.data).toEqual([ + ['Department', 'Team', 'Headcount'], + ['Engineering', 'Frontend', 30], + ['Product', 'Design', 15], + ['Engineering', 'Backend', 25], + ]); + expect(spec.legend).toEqual({ visible: false }); + }); + + it('assembleExcel rejects a sunburst detail field without a group level', () => { + expect(() => assembleExcel({ + data: { values: [{ Department: 'Engineering', Team: 'Frontend', Headcount: 20 }] }, + semantic_types: { Department: 'Category', Team: 'Category', Headcount: 'Quantity' }, + chart_spec: { chartType: 'Sunburst Chart', encodings: { color: 'Department', detail: 'Team', size: 'Headcount' } }, + })).toThrow('requires a group field before detail'); + }); + + it('assembleExcel emits connected scatter points in explicit path order', () => { + const spec = assembleExcel({ + data: { values: [ + { Step: 3, X: 0, Y: 1 }, + { Step: 1, X: 2, Y: 0 }, + { Step: 4, X: 1, Y: 0 }, + { Step: 2, X: 1, Y: 2 }, + ] }, + semantic_types: { Step: 'Quantity', X: 'Quantity', Y: 'Quantity' }, + chart_spec: { chartType: 'Connected Scatter Plot', encodings: { x: 'X', y: 'Y', order: 'Step' } }, + }) as any; + + expect(spec.chartType).toBe('XYScatterLines'); + expect(spec.data).toEqual([ + ['X', 'Y'], + [2, 0], + [1, 2], + [0, 1], + [1, 0], + ]); + }); + + it('assembleExcel requires connected scatter order', () => { + expect(() => assembleExcel({ + data: { values: [{ X: 1, Y: 2 }] }, + semantic_types: { X: 'Quantity', Y: 'Quantity' }, + chart_spec: { chartType: 'Connected Scatter Plot', encodings: { x: 'X', y: 'Y' } }, + })).toThrow('requires an explicit order field'); + }); + + it('assembleExcel keeps scatter axes close to the data extent', () => { + const spec = assembleExcel({ + data: { values: [ + { X: 0, Y: 0 }, + { X: 100, Y: 100 }, + ] }, + semantic_types: { X: 'Quantity', Y: 'Quantity' }, + chart_spec: { chartType: 'Scatter Plot', encodings: { x: 'X', y: 'Y' } }, + }) as any; + + expect(spec.categoryAxis).toMatchObject({ minimumScale: 0, maximumScale: 105, majorUnit: 20 }); + expect(spec.valueAxis).toMatchObject({ minimumScale: 0, maximumScale: 105, majorUnit: 20 }); + }); + + it('assembleExcel uses a sequential scale for ordered grouped-bar series', () => { + const spec = assembleExcel({ + data: { values: [ + { Category: 'A', Value: 10, Rank: 1 }, + { Category: 'A', Value: 20, Rank: 2 }, + { Category: 'B', Value: 30, Rank: 1 }, + { Category: 'B', Value: 40, Rank: 2 }, + ] }, + semantic_types: { Category: 'Category', Value: 'Quantity', Rank: 'Rank' }, + chart_spec: { chartType: 'Grouped Bar Chart', encodings: { x: 'Category', y: 'Value', group: 'Rank' } }, + }) as any; + + expect(spec.seriesFormats.map((format: any) => format.color)).toEqual(['#d9e2f3', '#2f5597']); + }); + + it('assembleExcel rejects occupancy matrices instead of drawing worksheet heatmaps', () => { + expect(() => assembleExcel({ + data: { values: [ + { Category: 'A', Group: 'North', Segment: 'Sales' }, + { Category: 'B', Group: 'South', Segment: 'Engineering' }, + ] }, + semantic_types: { Category: 'Category', Group: 'Category', Segment: 'Category' }, + chart_spec: { chartType: 'Grouped Bar Chart', encodings: { x: 'Category', y: 'Group', group: 'Segment' } }, + })).toThrow('requires one quantitative measure axis'); + }); + + it('assembleExcel caps dense categorical bars in the default display order', () => { + const values = Array.from({ length: 96 }, (_value, index) => ({ + Group: `Category ${index + 1}`, + Value: (index * 37) % 101, + })); + const input = { + data: { values }, + semantic_types: { Group: 'Category', Value: 'Quantity' }, + chart_spec: { + chartType: 'Bar Chart', + encodings: { x: 'Value', y: 'Group' }, + baseSize: { width: 560, height: 360 }, + }, + } as const; + + const excel = assembleExcel(input) as any; + const vegaLite = assembleVegaLite(input) as any; + const expectedOrder = vegaLite.encoding.y.scale.domain.filter((value: string) => + !value.includes('items omitted'), + ); + + expect(excel.data.slice(1).map((row: any[]) => row[0])).toEqual(expectedOrder); + expect(expectedOrder).toEqual(values.slice(0, expectedOrder.length).map((row) => row.Group)); + expect(excel.data.length).toBeLessThan(values.length + 1); + expect(excel.categoryAxis.labelFontSize).toBe(5); + }); + + it('assembleExcel caps dense bars using the selected value sort', () => { + const values = Array.from({ length: 96 }, (_value, index) => ({ + Group: `Category ${index + 1}`, + Value: index, + })); + const input = { + data: { values }, + semantic_types: { Group: 'Category', Value: 'Quantity' }, + chart_spec: { + chartType: 'Bar Chart', + encodings: { + x: 'Value', + y: { field: 'Group', sortBy: 'x', sortOrder: 'descending' as const }, + }, + baseSize: { width: 560, height: 360 }, + }, + }; + + const excel = assembleExcel(input as any) as any; + const kept = excel.data.slice(1).map((row: any[]) => row[0]); + + expect(kept).toEqual(values.slice(-kept.length).reverse().map((row) => row.Group)); + }); + + it('assembleExcel interpolates sparse connected series', () => { + const spec = assembleExcel({ + data: { values: [ + { Date: '2026-01-01', Value: 10, Series: 'A' }, + { Date: '2026-01-02', Value: 20, Series: 'B' }, + { Date: '2026-01-03', Value: 30, Series: 'A' }, + ] }, + semantic_types: { Date: 'Date', Value: 'Quantity', Series: 'Category' }, + chart_spec: { chartType: 'Area Chart', encodings: { x: 'Date', y: 'Value', color: 'Series' } }, + }) as any; + + expect(spec.data).toEqual([ + ['Date', 'A', 'B'], + ['2026-01-01', 10, null], + ['2026-01-02', 20, 20], + ['2026-01-03', 30, null], + ]); + }); + + it('assembleExcel rejects continuous-color lines as unsupported native charts', () => { + expect(() => assembleExcel({ + data: { values: [ + { Date: '2026-01-01', Value: 10, Color: 0.2 }, + { Date: '2026-01-02', Value: 12, Color: 0.8 }, + ] }, + semantic_types: { Date: 'Date', Value: 'Quantity', Color: 'Quantity' }, + chart_spec: { chartType: 'Line Chart', encodings: { x: 'Date', y: 'Value', color: 'Color' } }, + })).toThrow('does not support continuous color'); + }); + + it('assembleExcel preserves forecast handoffs as styled dash series', () => { + const spec = assembleExcel({ + data: { values: [ + { Date: '2026-01-01', Value: 10, Type: 'actual' }, + { Date: '2026-01-02', Value: 12, Type: 'actual' }, + { Date: '2026-01-02', Value: 12, Type: 'forecast' }, + { Date: '2026-01-03', Value: 15, Type: 'forecast' }, + ] }, + semantic_types: { Date: 'Date', Value: 'Quantity', Type: 'Category' }, + chart_spec: { chartType: 'Line Chart', encodings: { x: 'Date', y: 'Value', strokeDash: 'Type' } }, + }) as any; + + expect(spec.data).toEqual([ + ['Date', 'actual', 'forecast'], + ['2026-01-01', 10, null], + ['2026-01-02', 12, 12], + ['2026-01-03', null, 15], + ]); + expect(spec.seriesFormats).toEqual([ + { color: '#4472C4', lineStyle: 'Continuous' }, + { color: '#4472C4', lineStyle: 'Dash' }, + ]); + }); + it('line chart with quantitative color uses a line layer plus colored points', () => { const spec = assembleVegaLite({ data: { diff --git a/packages/flint-js/tsup.config.ts b/packages/flint-js/tsup.config.ts index 860a3862..519b97fa 100644 --- a/packages/flint-js/tsup.config.ts +++ b/packages/flint-js/tsup.config.ts @@ -7,6 +7,8 @@ export default defineConfig({ 'vegalite/index': 'src/vegalite/index.ts', 'echarts/index': 'src/echarts/index.ts', 'chartjs/index': 'src/chartjs/index.ts', + 'plotly/index': 'src/plotly/index.ts', + 'excel/index': 'src/excel/index.ts', 'test-data/index': 'src/test-data/index.ts', 'gallery/index': 'src/gallery/index.ts', }, @@ -17,5 +19,5 @@ export default defineConfig({ splitting: false, treeshake: true, target: 'es2020', - external: ['vega', 'vega-lite', 'echarts', 'chart.js'], + external: ['vega', 'vega-lite', 'echarts', 'chart.js', 'plotly.js'], }); diff --git a/packages/flint-py/flint/core/filter_overflow.py b/packages/flint-py/flint/core/filter_overflow.py index 142a0f4a..5cb7e3b4 100644 --- a/packages/flint-py/flint/core/filter_overflow.py +++ b/packages/flint-py/flint/core/filter_overflow.py @@ -90,13 +90,13 @@ def is_discrete_type(t: Optional[str]) -> bool: warnings.append({ "severity": "warning", "code": "overflow", - "message": f"{omitted_count} of {len(unique_values)} values in '{field_name}' were omitted (showing top {len(values_to_keep)}).", + "message": f"{omitted_count} of {len(unique_values)} values in '{field_name}' were omitted (showing first {len(values_to_keep)} in sort order).", "channel": channel, "field": field_name, }) truncations.append({ "severity": "warning", "code": "overflow", - "message": f"{omitted_count} of {len(unique_values)} values in '{field_name}' were omitted (showing top {len(values_to_keep)}).", + "message": f"{omitted_count} of {len(unique_values)} values in '{field_name}' were omitted (showing first {len(values_to_keep)} in sort order).", "channel": channel, "field": field_name, "keptValues": values_to_keep, "omittedCount": omitted_count, "placeholder": placeholder, @@ -133,15 +133,13 @@ def _default_overflow_strategy( encodings = context["encodings"] all_mark_types = context["allMarkTypes"] - has_connected_mark = ("line" in all_mark_types) or ("area" in all_mark_types) or ("trail" in all_mark_types) - encoding = encodings.get(channel) or {} sort_by = encoding.get("sortBy") sort_order = encoding.get("sortOrder") sort_field: Optional[str] = None sort_field_type: Optional[str] = None - is_descending = True + is_descending = False if sort_by: if sort_by in ("x", "y", "color"): @@ -158,40 +156,7 @@ def _default_overflow_strategy( except Exception: pass is_descending = sort_order == "descending" - else: - opposite_channel = "y" if channel == "x" else ("x" if channel == "y" else None) - color_cs = channel_semantics.get("color") - opposite_cs = channel_semantics.get(opposite_channel) if opposite_channel else None - - mark_type = "rect" if "rect" in all_mark_types else None - if mark_type != "rect" and color_cs and color_cs.get("type") == "quantitative": - sort_field = color_cs.get("field") - sort_field_type = color_cs.get("type") - elif opposite_cs and opposite_cs.get("type") == "quantitative": - sort_field = opposite_cs.get("field") - sort_field_type = opposite_cs.get("type") - else: - is_descending = False - - field_original_type = infer_vis_category([r.get(field_name) for r in data]) - if field_original_type == "quantitative" or channel == "color": - # JS sort: a - b; if values are strings of numbers, JS still treats them - # as numbers via -; preserve that - def numeric_key(v: Any) -> float: - try: - return float(v) - except (TypeError, ValueError): - return float("nan") - return sorted(unique_values, key=numeric_key)[:max_to_keep] - - if channel in ("column", "row"): - return unique_values[:max_to_keep] - - if has_connected_mark: - return unique_values[:max_to_keep] - if sort_field and sort_field_type == "quantitative": - # Bar charts: sum aggregate. Others: max. is_bar = ("bar" in all_mark_types) and ( sort_field != (channel_semantics.get("color", {}) or {}).get("field") ) @@ -203,7 +168,6 @@ def numeric_key(v: Any) -> float: initial_value = float("-inf") value_aggregates: dict[Any, float] = {} - seen_first: dict[Any, bool] = {} for row in data: field_value = row.get(field_name) sort_value = row.get(sort_field) or 0 @@ -216,7 +180,31 @@ def numeric_key(v: Any) -> float: entries.sort(key=lambda e: -e[1] if is_descending else e[1]) return [e[0] for e in entries[:max_to_keep]] + canonical_order = (channel_semantics.get(channel) or {}).get("ordinalSortOrder") + if not sort_by and not sort_order and canonical_order: + ordered = [value for value in canonical_order if value in unique_values] + ordered_set = set(ordered) + ordered.extend(value for value in unique_values if value not in ordered_set) + return ordered[:max_to_keep] + + field_original_type = infer_vis_category([r.get(field_name) for r in data]) + if field_original_type == "quantitative" or channel == "color": + # JS sort: a - b; if values are strings of numbers, JS still treats them + # as numbers via -; preserve that + def numeric_key(v: Any) -> float: + try: + return float(v) + except (TypeError, ValueError): + return float("nan") + return sorted(unique_values, key=numeric_key)[:max_to_keep] + + if channel in ("column", "row"): + return unique_values[:max_to_keep] + if sort_order == "descending": - return list(reversed(unique_values))[:max_to_keep] + return sorted(unique_values, key=_js_sort_key, reverse=True)[:max_to_keep] + + if sort_order == "ascending": + return sorted(unique_values, key=_js_sort_key)[:max_to_keep] return unique_values[:max_to_keep] diff --git a/packages/flint-py/tests/unit/test_filter_overflow.py b/packages/flint-py/tests/unit/test_filter_overflow.py new file mode 100644 index 00000000..1469d5f4 --- /dev/null +++ b/packages/flint-py/tests/unit/test_filter_overflow.py @@ -0,0 +1,74 @@ +from __future__ import annotations + +from flint.core.filter_overflow import filter_overflow + + +BUDGETS = {"maxValues": {"x": 3}} +MARKS = {"bar"} + + +def kept_categories(data, category_semantics, category_encoding): + result = filter_overflow( + { + "x": { + "field": "Category", + "semanticAnnotation": {"semanticType": "Category"}, + **category_semantics, + }, + "y": { + "field": "Value", + "type": "quantitative", + "semanticAnnotation": {"semanticType": "Quantity"}, + }, + }, + {"axisFlags": {"x": {"banded": True}}}, + { + "x": {"field": "Category", **category_encoding}, + "y": {"field": "Value"}, + }, + data, + BUDGETS, + MARKS, + ) + return result["truncations"][0]["keptValues"] + + +def test_preserves_encounter_order_when_no_sort_is_selected(): + data = [ + {"Category": "Delta", "Value": 100}, + {"Category": "Alpha", "Value": 1}, + {"Category": "Charlie", "Value": 80}, + {"Category": "Bravo", "Value": 50}, + ] + + assert kept_categories(data, {"type": "nominal"}, {}) == ["Delta", "Alpha", "Charlie"] + + +def test_uses_canonical_semantic_order_when_available(): + data = [ + {"Category": "Mar", "Value": 100}, + {"Category": "Jan", "Value": 1}, + {"Category": "Apr", "Value": 80}, + {"Category": "Feb", "Value": 50}, + ] + + assert kept_categories( + data, + {"type": "ordinal", "ordinalSortOrder": ["Jan", "Feb", "Mar", "Apr"]}, + {}, + ) == ["Jan", "Feb", "Mar"] + + +def test_uses_selected_value_sort(): + data = [ + {"Category": "Delta", "Value": 100}, + {"Category": "Alpha", "Value": 1}, + {"Category": "Charlie", "Value": 80}, + {"Category": "Bravo", "Value": 50}, + ] + + assert kept_categories( + data, + {"type": "nominal"}, + {"sortBy": "y", "sortOrder": "descending"}, + ) == ["Delta", "Charlie", "Bravo"] diff --git a/site/package.json b/site/package.json index 72d39abd..698d0229 100644 --- a/site/package.json +++ b/site/package.json @@ -16,6 +16,7 @@ "@uiw/react-codemirror": "^4.23.0", "chart.js": "^4.5.1", "echarts": "^6.0.0", + "plotly.js-dist-min": "^2.35.2", "flint-chart": "*", "i18next": "^26.3.6", "katex": "^0.17.0", diff --git a/site/src/components/DocChart.tsx b/site/src/components/DocChart.tsx index eea0ad8c..b91d7272 100644 --- a/site/src/components/DocChart.tsx +++ b/site/src/components/DocChart.tsx @@ -3,6 +3,7 @@ import { TEST_GENERATORS } from 'flint-chart/test-data'; import { VegaLiteView } from './VegaLiteView'; import { EChartsView } from './EChartsView'; import { ChartjsView } from './ChartjsView'; +import { PlotlyView } from './PlotlyView'; import { ScaleToFit } from './ScaleToFit'; import { testCaseToAssemblyInput, type CanvasSize } from '../shared/test-case-utils'; import { BACKENDS, type PreviewBackend } from '../shared/supported-backends'; @@ -147,6 +148,7 @@ export function DocChart({ source, backend = 'vegalite' }: { source: string; bac {result.kind === 'vegalite' && } {result.kind === 'echarts' && } {result.kind === 'chartjs' && } + {result.kind === 'plotly' && } ); diff --git a/site/src/components/GalleryOptionsBar.tsx b/site/src/components/GalleryOptionsBar.tsx index 5d90a356..640a55e1 100644 --- a/site/src/components/GalleryOptionsBar.tsx +++ b/site/src/components/GalleryOptionsBar.tsx @@ -132,6 +132,7 @@ function ControlRow(props: { + typeof v === 'number' && Number.isFinite(v) ? v : undefined; + +/** + * Plotly renderer. + * + * The flint Plotly assembler computes a designed figure size (`_width`/`_height`, + * also written into `layout.width`/`layout.height`). Render into a wrapper sized + * to those dimensions so the plot keeps its designed proportions, the same way + * the other backend views render at their natural designed size. + */ +export function PlotlyView({ + figure, + height = 320, + constrain = true, +}: { + figure: any; + height?: number; + /** When false, render at the designed pixel size without clamping to the + * container width (used by the photo-wall, which scales charts to fit). */ + constrain?: boolean; +}) { + const ref = useRef(null); + + const designedWidth = asFinite(figure?._width); + const designedHeight = asFinite(figure?._height); + const renderHeight = designedHeight ?? height; + + useEffect(() => { + const el = ref.current; + if (!el) return; + Plotly.newPlot(el, figure?.data ?? [], figure?.layout ?? {}, { + displayModeBar: false, + responsive: false, + }); + return () => { + Plotly.purge(el); + }; + }, [figure]); + + return ( +
+
+
+ ); +} diff --git a/site/src/components/SizingPlayground.tsx b/site/src/components/SizingPlayground.tsx index 40110ead..22b5924f 100644 --- a/site/src/components/SizingPlayground.tsx +++ b/site/src/components/SizingPlayground.tsx @@ -1,4 +1,4 @@ -import { useMemo, useState } from 'react'; +import { useMemo, useState, type CSSProperties } from 'react'; import { assembleVegaLite, assembleECharts, type ChartAssemblyInput } from 'flint-chart'; import { VegaLiteView } from './VegaLiteView'; import { EChartsView } from './EChartsView'; @@ -169,6 +169,8 @@ function Slider({ label, value, min, max, step, onChange, suffix }: { onChange: (v: number) => void; suffix?: string; }) { + const percent = max > min ? ((value - min) / (max - min)) * 100 : 0; + return ( ); diff --git a/site/src/components/TripleChart.tsx b/site/src/components/TripleChart.tsx index 582202dc..8cd17a5e 100644 --- a/site/src/components/TripleChart.tsx +++ b/site/src/components/TripleChart.tsx @@ -3,6 +3,7 @@ import type { TestCase } from 'flint-chart/test-data'; import { VegaLiteView } from './VegaLiteView'; import { EChartsView } from './EChartsView'; import { ChartjsView } from './ChartjsView'; +import { PlotlyView } from './PlotlyView'; import { testCaseToAssemblyInput } from '../shared/test-case-utils'; import { BACKENDS, @@ -130,6 +131,7 @@ export function TripleChart({ {backend === 'vegalite' && } {backend === 'echarts' && } {backend === 'chartjs' && } + {backend === 'plotly' && } ) : (
diff --git a/site/src/components/WallChart.tsx b/site/src/components/WallChart.tsx
index 66fd0368..178f6d55 100644
--- a/site/src/components/WallChart.tsx
+++ b/site/src/components/WallChart.tsx
@@ -3,6 +3,7 @@ import type { TestCase } from 'flint-chart/test-data';
 import { VegaLiteView } from './VegaLiteView';
 import { EChartsView } from './EChartsView';
 import { ChartjsView } from './ChartjsView';
+import { PlotlyView } from './PlotlyView';
 import { testCaseToAssemblyInput, thumbnailCanvasSize, type CanvasSize } from '../shared/test-case-utils';
 import { BACKENDS, type PreviewBackend } from '../shared/supported-backends';
 import { siteTheme } from '../shared/theme';
@@ -68,5 +69,6 @@ export function WallChart({
 
   if (backend === 'vegalite') return ;
   if (backend === 'echarts') return ;
+  if (backend === 'plotly') return ;
   return ;
 }
diff --git a/site/src/components/gallery-options-bar.css b/site/src/components/gallery-options-bar.css
index ae8a7d7b..3844f8ad 100644
--- a/site/src/components/gallery-options-bar.css
+++ b/site/src/components/gallery-options-bar.css
@@ -161,56 +161,8 @@
   white-space: nowrap;
 }
 
-.gopt-bar input[type='range'] {
-  -webkit-appearance: none;
-  appearance: none;
+.gopt-bar .site-range {
   width: 60px;
-  min-width: 0;
-  height: 12px;
-  margin: 0;
-  background: transparent;
-  cursor: pointer;
-}
-
-.gopt-bar input[type='range']::-webkit-slider-runnable-track {
-  height: 3px;
-  border-radius: 999px;
-  background: linear-gradient(
-    to right,
-    #0078d4 0 var(--pct, 50%),
-    rgba(0, 0, 0, 0.16) var(--pct, 50%) 100%
-  );
-}
-
-.gopt-bar input[type='range']::-webkit-slider-thumb {
-  -webkit-appearance: none;
-  appearance: none;
-  width: 10px;
-  height: 10px;
-  margin-top: -3.5px;
-  border: none;
-  border-radius: 50%;
-  background: #0078d4;
-}
-
-.gopt-bar input[type='range']::-moz-range-track {
-  height: 3px;
-  border-radius: 999px;
-  background: rgba(0, 0, 0, 0.16);
-}
-
-.gopt-bar input[type='range']::-moz-range-progress {
-  height: 3px;
-  border-radius: 999px;
-  background: #0078d4;
-}
-
-.gopt-bar input[type='range']::-moz-range-thumb {
-  width: 10px;
-  height: 10px;
-  border: none;
-  border-radius: 50%;
-  background: #0078d4;
 }
 
 /* Discrete property dropdown, matching the chart-type selector menu. */
diff --git a/site/src/global.css b/site/src/global.css
index 304128af..c2bec6c0 100644
--- a/site/src/global.css
+++ b/site/src/global.css
@@ -22,6 +22,76 @@
   text-decoration-color: currentColor !important;
 }
 
+/* Shared site slider. The explicit class prevents embedded MCP App styles from
+   changing site controls when documentation examples load their stylesheet. */
+input[type='range'].site-range {
+  -webkit-appearance: none;
+  appearance: none;
+  width: 100%;
+  min-width: 0;
+  height: 12px;
+  margin: 0;
+  background: transparent;
+  cursor: pointer;
+}
+
+input[type='range'].site-range::-webkit-slider-runnable-track {
+  height: 3px;
+  border-radius: 999px;
+  background: linear-gradient(
+    to right,
+    #0078d4 0 var(--pct, 50%),
+    rgba(0, 0, 0, 0.16) var(--pct, 50%) 100%
+  );
+}
+
+input[type='range'].site-range::-webkit-slider-thumb {
+  -webkit-appearance: none;
+  appearance: none;
+  width: 10px;
+  height: 10px;
+  margin-top: -3.5px;
+  border: 0;
+  border-radius: 50%;
+  background: #0078d4;
+}
+
+input[type='range'].site-range::-moz-range-track {
+  height: 3px;
+  border-radius: 999px;
+  background: rgba(0, 0, 0, 0.16);
+}
+
+input[type='range'].site-range::-moz-range-progress {
+  height: 3px;
+  border-radius: 999px;
+  background: #0078d4;
+}
+
+input[type='range'].site-range::-moz-range-thumb {
+  width: 10px;
+  height: 10px;
+  border: 0;
+  border-radius: 50%;
+  background: #0078d4;
+}
+
+input[type='range'].site-range:focus-visible {
+  outline: 2px solid #0078d4;
+  outline-offset: 3px;
+}
+
+@media (forced-colors: active) {
+  input[type='range'].site-range::-webkit-slider-runnable-track {
+    background: CanvasText;
+  }
+
+  input[type='range'].site-range::-webkit-slider-thumb,
+  input[type='range'].site-range::-moz-range-thumb {
+    background: Highlight;
+  }
+}
+
 @media (max-width: 640px) {
   .site-nav-bar {
     gap: 14px !important;
diff --git a/site/src/routes/ChartWall.tsx b/site/src/routes/ChartWall.tsx
index 1b9aae3e..2454f32e 100644
--- a/site/src/routes/ChartWall.tsx
+++ b/site/src/routes/ChartWall.tsx
@@ -561,6 +561,7 @@ function BackendIntro({
     vegalite: 'spec',
     echarts: 'option',
     chartjs: 'config',
+    plotly: 'figure',
   };
   const snippet = `import { ${category.fn} } from 'flint-chart';
 
diff --git a/site/src/routes/Editor.tsx b/site/src/routes/Editor.tsx
index a3317a92..f9306a22 100644
--- a/site/src/routes/Editor.tsx
+++ b/site/src/routes/Editor.tsx
@@ -318,6 +318,7 @@ const OUTPUT_LANG: Record = {
   vegalite: 'Vega-Lite JSON',
   echarts: 'ECharts option',
   chartjs: 'Chart.js config',
+  plotly: 'Plotly figure',
 };
 
 /**
diff --git a/site/src/shared/supported-backends.ts b/site/src/shared/supported-backends.ts
index f4c4ea1f..961e220f 100644
--- a/site/src/shared/supported-backends.ts
+++ b/site/src/shared/supported-backends.ts
@@ -2,13 +2,15 @@ import {
   assembleVegaLite,
   assembleECharts,
   assembleChartjs,
+  assemblePlotly,
   cjsGetTemplateDef,
   ecGetTemplateDef,
   vlGetTemplateDef,
+  plGetTemplateDef,
   type ChartAssemblyInput,
 } from 'flint-chart';
 
-export type PreviewBackend = 'vegalite' | 'echarts' | 'chartjs';
+export type PreviewBackend = 'vegalite' | 'echarts' | 'chartjs' | 'plotly';
 
 /** A backend's template def (or `undefined` when it has no template for a type). */
 type TemplateDef = ReturnType;
@@ -51,6 +53,12 @@ export const BACKENDS: Record = {
     assemble: assembleChartjs,
     getTemplateDef: cjsGetTemplateDef,
   },
+  plotly: {
+    id: 'plotly',
+    label: 'Plotly',
+    assemble: assemblePlotly,
+    getTemplateDef: plGetTemplateDef,
+  },
 };
 
 export const ALL_BACKENDS = Object.keys(BACKENDS) as PreviewBackend[];
diff --git a/site/src/types/plotly.d.ts b/site/src/types/plotly.d.ts
new file mode 100644
index 00000000..5116476f
--- /dev/null
+++ b/site/src/types/plotly.d.ts
@@ -0,0 +1,7 @@
+declare module 'plotly.js-dist-min' {
+  const Plotly: {
+    newPlot: (el: HTMLElement, data: unknown[], layout?: unknown, config?: unknown) => Promise;
+    purge: (el: HTMLElement) => void;
+  };
+  export default Plotly;
+}
diff --git a/test-harness/excel/.gitignore b/test-harness/excel/.gitignore
new file mode 100644
index 00000000..94ab8fe2
--- /dev/null
+++ b/test-harness/excel/.gitignore
@@ -0,0 +1,6 @@
+evaluations/out/
+node_modules/
+*.log
+
+# Excel lock/temp files
+~$*
diff --git a/test-harness/excel/README.md b/test-harness/excel/README.md
new file mode 100644
index 00000000..f1f026e5
--- /dev/null
+++ b/test-harness/excel/README.md
@@ -0,0 +1,99 @@
+# Flint Excel test harness
+
+This test harness provides an Office.js transport plugin for rendering and evaluating artifacts from the Excel backend in `packages/flint-js/src/excel`. It does not interpret chart artifacts.
+
+The ownership boundary is:
+
+- `flint-chart/excel`: compiles semantic Flint input, validates the versioned Excel artifact, executes it through Office.js, and generates standalone Office.js source.
+- `office-runner/`: builds and serves the backend bundle, transports jobs, and hosts the Office add-in worker.
+- `evaluations/`: generates semantic inputs, renders comparisons, and records visual evaluation results.
+
+```text
+test-harness/excel/
+├── office-runner/       HTTPS queue server and Office add-in
+├── evaluations/         evaluation scripts, inputs, ledger, and ignored output
+├── package.json         harness commands
+└── README.md
+```
+
+## Artifact flow
+
+```js
+import {
+  assembleExcel,
+  renderExcelChart,
+} from 'flint-chart/excel';
+
+const artifact = assembleExcel(input);
+const result = await renderExcelChart(Excel, artifact, { scale: 3 });
+```
+
+Serialized artifacts have `schema: "flint.excel.chart/v1"`, `kind: "chart"`, a native Office.js chart type, a matrix data range, and declarative formatting. Image scale, worksheet cleanup, and native inspection are host options and are not artifact fields. Legacy neutral aliases such as `"column"` and unversioned hand-authored specs are rejected.
+
+## Start the worker
+
+One-time setup:
+
+```bash
+npx office-addin-dev-certs install
+cp office-runner/officejs/manifest.xml ~/Library/Containers/com.microsoft.Excel/Data/Documents/wef/
+```
+
+Start the HTTPS transport from this directory:
+
+```bash
+npm run server
+```
+
+The server builds `packages/flint-js`, serves its Excel backend to the taskpane, and listens at `https://localhost:3000`. In Excel, open Home > Add-ins > My Add-ins > Flint Render once.
+
+Active evaluations compile semantic Flint inputs with `assembleExcel` and submit this envelope:
+
+```json
+{
+  "artifact": {
+    "schema": "flint.excel.chart/v1",
+    "kind": "chart",
+    "chartType": "ColumnClustered",
+    "seriesBy": "Columns",
+    "data": [["Quarter", "Sales"], ["Q1", 120], ["Q2", 205]]
+  },
+  "renderOptions": {
+    "scale": 3,
+    "cleanWorksheet": true,
+    "inspectNativeChart": false
+  }
+}
+```
+
+Run backend-owned headless validation with:
+
+```bash
+npm run test:mock
+```
+
+Generate or run visual evaluations with:
+
+```bash
+npm run evaluate:inputs
+npm run evaluate:gallery -- all
+npm run evaluate:sheets
+npm run evaluate:candlestick
+npm run evaluate:layout
+```
+
+Generated images and summaries are written under `evaluations/out/` and are ignored by Git.
+
+## Native Excel examples
+
+The [curated example gallery](evaluations/examples/README.md) contains tracked snapshots of native Excel charts captured from the real Office.js worker. Bulk evaluation output stays ignored; after reviewing regenerated output, refresh the selected snapshots with:
+
+```bash
+npm run evaluate:examples
+```
+
+## Worker safety
+
+Run only one worker server on port 3000. Render clients cancel abandoned jobs, the server expires queued jobs after two minutes, and the taskpane renders at most one job per polling interval.
+
+Native `Pareto` remains quarantined. Excel for Mac exits while creating it before Office.js can return a catchable error. The server, artifact validator, and taskpane guard reject Pareto before `Excel.run`.
diff --git a/test-harness/excel/evaluations/candlestick-audit.mjs b/test-harness/excel/evaluations/candlestick-audit.mjs
new file mode 100644
index 00000000..54e39684
--- /dev/null
+++ b/test-harness/excel/evaluations/candlestick-audit.mjs
@@ -0,0 +1,139 @@
+#!/usr/bin/env node
+// @ts-nocheck
+
+import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
+import { dirname, join } from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { createCanvas, loadImage } from '@napi-rs/canvas';
+import { renderChart } from 'flint-chart-mcp/render';
+import { assembleExcel } from 'flint-chart/excel';
+import { TEST_GENERATORS } from 'flint-chart/test-data';
+import { renderExcelArtifact } from './render-client.mjs';
+
+const here = dirname(fileURLToPath(import.meta.url));
+const root = join(here, '..', '..', '..');
+const outDir = join(here, 'out', 'candlestick-audit');
+const cases = [0, 1];
+
+function loadEnvFile() {
+  const envPath = join(root, '.env');
+  if (!existsSync(envPath)) return false;
+  for (const line of readFileSync(envPath, 'utf8').split(/\r?\n/)) {
+    const match = line.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)\s*$/);
+    if (!match || process.env[match[1]] !== undefined) continue;
+    process.env[match[1]] = match[2].replace(/^(['"])(.*)\1$/, '$2');
+  }
+  return true;
+}
+
+function toAssemblyInput(test) {
+  const idToName = new Map(test.fields.map((field) => [field.id, field.name]));
+  const encodings = {};
+  for (const [channel, encoding] of Object.entries(test.encodingMap || {})) {
+    if (encoding?.fieldID) encodings[channel] = idToName.get(encoding.fieldID) ?? encoding.fieldID;
+  }
+  return {
+    data: { values: test.data },
+    semantic_types: Object.fromEntries(Object.entries(test.metadata).map(([field, metadata]) => [field, metadata.semanticType])),
+    chart_spec: {
+      chartType: test.chartType,
+      encodings,
+      baseSize: { width: 640, height: 380 },
+    },
+  };
+}
+
+async function sideBySide(referenceBuffer, excelBuffer, outputPath) {
+  const [reference, excel] = await Promise.all([loadImage(referenceBuffer), loadImage(excelBuffer)]);
+  const labelHeight = 42;
+  const gap = 20;
+  const canvas = createCanvas(reference.width + excel.width + gap, Math.max(reference.height, excel.height) + labelHeight);
+  const context = canvas.getContext('2d');
+  context.fillStyle = '#ffffff';
+  context.fillRect(0, 0, canvas.width, canvas.height);
+  context.fillStyle = '#222222';
+  context.font = 'bold 20px sans-serif';
+  context.fillText('Canonical Vega-Lite', 12, 28);
+  context.fillText('Native Excel StockOHLC', reference.width + gap + 12, 28);
+  context.drawImage(reference, 0, labelHeight);
+  context.drawImage(excel, reference.width + gap, labelHeight);
+  writeFileSync(outputPath, canvas.toBuffer('image/png'));
+}
+
+async function reviewWithVlm(imagePaths) {
+  const envLoaded = loadEnvFile();
+  const azureEndpoint = process.env.AZURE_OPENAI_ENDPOINT;
+  const deployment = process.env.AZURE_OPENAI_DEPLOYMENT;
+  const apiKey = process.env.AZURE_OPENAI_API_KEY;
+  const directEndpoint = process.env.VLM_ENDPOINT;
+  const model = process.env.VLM_MODEL;
+  const directKey = process.env.VLM_API_KEY;
+  if (!envLoaded || (!directEndpoint && !(azureEndpoint && deployment)) || (!apiKey && !directKey)) {
+    return { status: 'SKIP', reason: 'No configured VLM endpoint and credential were found in workspace .env.' };
+  }
+
+  const endpoint = directEndpoint ?? `${azureEndpoint.replace(/\/$/, '')}/openai/deployments/${deployment}/chat/completions?api-version=${process.env.AZURE_OPENAI_API_VERSION ?? '2024-10-21'}`;
+  const content = [{
+    type: 'text',
+    text: 'Review these side-by-side candlestick charts. Check for blank or clipped marks, incorrect OHLC encoding, broken date or price axes, unreadable labels, misleading geometry, overlap, and whether native Excel preserves the canonical financial reading. Return concise JSON with status PASS or FAIL, findings, and per-image notes.',
+  }];
+  for (const imagePath of imagePaths) {
+    content.push({ type: 'image_url', image_url: { url: `data:image/png;base64,${readFileSync(imagePath).toString('base64')}` } });
+  }
+  const response = await fetch(endpoint, {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+      ...(apiKey ? { 'api-key': apiKey } : { Authorization: `Bearer ${directKey}` }),
+    },
+    body: JSON.stringify({ model, messages: [{ role: 'user', content }], max_tokens: 1200 }),
+  });
+  if (!response.ok) return { status: 'FAIL', reason: `VLM request failed with HTTP ${response.status}.` };
+  const payload = await response.json();
+  return { status: 'COMPLETE', review: payload.choices?.[0]?.message?.content ?? '' };
+}
+
+mkdirSync(outDir, { recursive: true });
+const fixtures = TEST_GENERATORS['Candlestick Chart']();
+const results = [];
+const comparisons = [];
+
+for (const fixtureIndex of cases) {
+  const fixture = fixtures[fixtureIndex];
+  const name = fixtureIndex === 0 ? 'basic-30-day' : 'advanced-90-day-dense';
+  const referencePath = join(outDir, `${name}.vl.png`);
+  const excelPath = join(outDir, `${name}.excel.png`);
+  const comparisonPath = join(outDir, `${name}.comparison.png`);
+  const result = { name, title: fixture.title, status: 'FAIL' };
+  try {
+    const input = toAssemblyInput(fixture);
+    const reference = await renderChart(input, 'vegalite', { format: 'png', scale: 3 });
+    writeFileSync(referencePath, reference.buffer);
+    const spec = assembleExcel(input);
+    spec.width = Math.max(640, Math.min(1600, Math.round(reference.width || 640)));
+    spec.height = Math.max(380, Math.min(900, Math.round(reference.height || 380)));
+    const excel = await renderExcelArtifact(spec);
+    writeFileSync(excelPath, excel);
+    await sideBySide(reference.buffer, excel, comparisonPath);
+    Object.assign(result, {
+      status: 'RENDERED',
+      chartType: spec.chartType,
+      range: `A1:E${spec.data.length}`,
+      reference: referencePath,
+      excel: excelPath,
+      comparison: comparisonPath,
+    });
+    comparisons.push(comparisonPath);
+  } catch (error) {
+    result.error = String(error.message || error);
+  }
+  results.push(result);
+}
+
+const vlm = comparisons.length === cases.length
+  ? await reviewWithVlm(comparisons)
+  : { status: 'SKIP', reason: 'VLM review skipped because not all real-Excel cases rendered.' };
+const summary = { generatedAt: new Date().toISOString(), cases: results, vlm };
+writeFileSync(join(outDir, 'summary.json'), `${JSON.stringify(summary, null, 2)}\n`);
+console.log(JSON.stringify(summary, null, 2));
+process.exit(results.some((result) => result.status === 'FAIL') || vlm.status === 'FAIL' ? 1 : 0);
\ No newline at end of file
diff --git a/test-harness/excel/evaluations/examples/README.md b/test-harness/excel/evaluations/examples/README.md
new file mode 100644
index 00000000..e053b908
--- /dev/null
+++ b/test-harness/excel/evaluations/examples/README.md
@@ -0,0 +1,69 @@
+
+# Native Excel chart examples
+
+Flint generates native Excel charts from semantic chart specs. These examples were rendered in Excel for Mac through Office.js and remain editable in Excel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Grouped bar

Native Excel grouped column chart generated by Flint
Multi-series line

Native Excel multi-series line chart generated by Flint
Stacked area

Native Excel stacked area chart generated by Flint
Treemap

Native Excel treemap generated by Flint
Sunburst

Native Excel sunburst chart generated by Flint
Waterfall

Native Excel waterfall chart generated by Flint
Population pyramid

Native Excel population pyramid generated by Flint
Radar

Native Excel radar chart generated by Flint
Candlestick

Native Excel candlestick chart generated by Flint
+ +## About these charts + +- Each chart is a native Excel chart object, not a canvas overlay or pasted image. +- Data, formatting, titles, axes, and series can be edited in Excel. +- Flint compiles each semantic input into a versioned artifact for Office.js rendering or code generation. + +
+How these examples were produced + +These images are unedited captures from the real Excel for Mac Office.js worker using `Chart.getImage()`. Each chart was assembled from a Flint semantic input into a versioned `flint.excel.chart/v1` artifact, then rendered as a native Excel chart. + +| Example | Native Excel chart | Flint input | +| --- | --- | --- | +| Stacked area | `AreaStacked` | [View input](../inputs/area-chart/01-card24.flint.json) | +| Grouped bar | `ColumnClustered` | [View input](../inputs/grouped-bar-chart/00-card4.flint.json) | +| Multi-series line | `XYScatterLines` | [View input](../inputs/line-chart/14-card50.flint.json) | +| Treemap | `Treemap` | [View input](../inputs/treemap/01-card0.flint.json) | +| Sunburst | `Sunburst` | [View input](../inputs/sunburst-chart/02-card0.flint.json) | +| Waterfall | `Waterfall` | [View input](../inputs/waterfall-chart/02-card7.flint.json) | +| Population pyramid | `BarStacked` | [View input](../inputs/pyramid-chart/00-card18.flint.json) | +| Radar | `RadarMarkers` | [View input](../inputs/radar-chart/05-card8.flint.json) | +| Candlestick | `StockOHLC` | [View input](../inputs/candlestick-chart/01-card90.flint.json) | + +
+ +
+Refresh the snapshots + +With the Office runner and Excel task pane open, regenerate the selected cases: + +```bash +npm run evaluate:gallery -- waterfall-chart 3 +npm run evaluate:gallery -- pyramid-chart 1 +npm run evaluate:gallery -- grouped-bar-chart 1 +npm run evaluate:gallery -- line-chart 15 +npm run evaluate:gallery -- area-chart 2 +npm run evaluate:gallery -- radar-chart 6 +npm run evaluate:gallery -- treemap 2 +npm run evaluate:gallery -- sunburst-chart 3 +npm run evaluate:candlestick +npm run evaluate:examples +``` + +Review the images before committing refreshed snapshots. Native Excel rendering can vary slightly across Excel versions and platforms. + +
diff --git a/test-harness/excel/evaluations/examples/candlestick.png b/test-harness/excel/evaluations/examples/candlestick.png new file mode 100644 index 00000000..f6122948 Binary files /dev/null and b/test-harness/excel/evaluations/examples/candlestick.png differ diff --git a/test-harness/excel/evaluations/examples/grouped-bar.png b/test-harness/excel/evaluations/examples/grouped-bar.png new file mode 100644 index 00000000..3f0be9e2 Binary files /dev/null and b/test-harness/excel/evaluations/examples/grouped-bar.png differ diff --git a/test-harness/excel/evaluations/examples/multi-series-line.png b/test-harness/excel/evaluations/examples/multi-series-line.png new file mode 100644 index 00000000..a615c45d Binary files /dev/null and b/test-harness/excel/evaluations/examples/multi-series-line.png differ diff --git a/test-harness/excel/evaluations/examples/pyramid.png b/test-harness/excel/evaluations/examples/pyramid.png new file mode 100644 index 00000000..65094aa5 Binary files /dev/null and b/test-harness/excel/evaluations/examples/pyramid.png differ diff --git a/test-harness/excel/evaluations/examples/radar.png b/test-harness/excel/evaluations/examples/radar.png new file mode 100644 index 00000000..6d848425 Binary files /dev/null and b/test-harness/excel/evaluations/examples/radar.png differ diff --git a/test-harness/excel/evaluations/examples/stacked-area.png b/test-harness/excel/evaluations/examples/stacked-area.png new file mode 100644 index 00000000..4e713b46 Binary files /dev/null and b/test-harness/excel/evaluations/examples/stacked-area.png differ diff --git a/test-harness/excel/evaluations/examples/sunburst.png b/test-harness/excel/evaluations/examples/sunburst.png new file mode 100644 index 00000000..ca3511f9 Binary files /dev/null and b/test-harness/excel/evaluations/examples/sunburst.png differ diff --git a/test-harness/excel/evaluations/examples/treemap.png b/test-harness/excel/evaluations/examples/treemap.png new file mode 100644 index 00000000..99f4de7d Binary files /dev/null and b/test-harness/excel/evaluations/examples/treemap.png differ diff --git a/test-harness/excel/evaluations/examples/waterfall.png b/test-harness/excel/evaluations/examples/waterfall.png new file mode 100644 index 00000000..84deec80 Binary files /dev/null and b/test-harness/excel/evaluations/examples/waterfall.png differ diff --git a/test-harness/excel/evaluations/gallery-run.mjs b/test-harness/excel/evaluations/gallery-run.mjs new file mode 100644 index 00000000..3e12a855 --- /dev/null +++ b/test-harness/excel/evaluations/gallery-run.mjs @@ -0,0 +1,112 @@ +#!/usr/bin/env node +// @ts-nocheck +/** + * gallery-run.mjs — render each gallery Flint input as BOTH: + * • the Vega-Lite reference PNG — via Flint's own `renderChart(input, + * 'vegalite', …)`, and + * • the Excel PNG — via the LIBRARY backend `assembleExcel(input)` rendered + * through the Office.js worker. + * + * Flint's VL renderer also returns the layout width/height, which we use to + * size the Excel chart — so high-cardinality charts get the same + * cardinality-driven room Flint's layout computed. + * + * Requires the render server + Excel task pane running (`npm run server`). + * + * Usage: + * node gallery-run.mjs bar-chart # one type + * node gallery-run.mjs all # every type + * node gallery-run.mjs bar-chart 4 # first 4 cases + */ + +import { existsSync, readdirSync, readFileSync, writeFileSync, mkdirSync, rmSync } from 'node:fs'; +import { join, dirname, basename } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { renderChart } from 'flint-chart-mcp/render'; +import { assembleExcel } from 'flint-chart/excel'; +import { renderExcelArtifact } from './render-client.mjs'; + +const here = dirname(fileURLToPath(import.meta.url)); +const GALLERY = join(here, 'inputs'); +const OUT = join(here, 'out', 'gallery'); +const SCALE = 3; +const clamp = (v, lo, hi) => Math.max(lo, Math.min(hi, Math.round(v))); +const referenceBackendFor = (typeSlug) => ['funnel-chart', 'treemap', 'sunburst-chart'].includes(typeSlug) ? 'echarts' : 'vegalite'; + +async function runType(typeSlug, limit) { + const dir = join(GALLERY, typeSlug); + let files; + try { files = readdirSync(dir).filter((f) => f.endsWith('.flint.json')).sort(); } + catch { console.error(`no such gallery type: ${typeSlug}`); return []; } + if (limit) files = files.slice(0, limit); + const outDir = join(OUT, typeSlug); + mkdirSync(outDir, { recursive: true }); + + const results = []; + for (const file of files) { + const name = basename(file).replace(/\.flint\.json$/, ''); + const vlPath = join(outDir, `${name}.vl.png`); + const excelPath = join(outDir, `${name}.excel.png`); + rmSync(vlPath, { force: true }); + rmSync(excelPath, { force: true }); + const input = JSON.parse(readFileSync(join(dir, file), 'utf8')); + const rec = { type: typeSlug, name, ok: false, skipped: false }; + try { + // Flint reference rendering also provides the layout size used by Excel. + const referenceBackend = referenceBackendFor(typeSlug); + const vl = await renderChart(input, referenceBackend, { format: 'png', scale: SCALE }); + writeFileSync(vlPath, vl.buffer); + rec.vlSize = `${vl.width}x${vl.height}`; + rec.referenceBackend = referenceBackend; + + // Excel-equivalent via the LIBRARY backend, sized from Flint's layout + let spec; + try { + spec = assembleExcel(input); + } catch (error) { + const message = String(error.message || error); + if (!message.startsWith('Excel backend ')) throw error; + rec.skipped = true; + rec.skipReason = message; + console.log(` - ${typeSlug}/${name}: SKIP ${message}`); + results.push(rec); + continue; + } + if (vl.width) spec.width = clamp(vl.width, 320, 1600); + if (vl.height) spec.height = clamp(vl.height, 220, 900); + rec.excelType = spec.chartType; + + const excelPng = await renderExcelArtifact(spec, { scale: SCALE }); + writeFileSync(excelPath, excelPng); + rec.ok = true; + console.log(` ✓ ${typeSlug}/${name} (${rec.excelType}, VL ${rec.vlSize})`); + } catch (e) { + rec.error = String(e.message || e); + console.error(` ✗ ${typeSlug}/${name}: ${rec.error}`); + } + results.push(rec); + } + return results; +} + +const arg = process.argv[2] || 'all'; +const limit = process.argv[3] ? Number(process.argv[3]) : undefined; +const types = arg === 'all' + ? readdirSync(GALLERY).filter((d) => { try { return readdirSync(join(GALLERY, d)).length; } catch { return false; } }) + : [arg]; + +const all = []; +for (const t of types) all.push(...(await runType(t, limit))); +mkdirSync(OUT, { recursive: true }); +const summaryPath = join(OUT, 'summary.json'); +let summary = all; +if (arg !== 'all' && existsSync(summaryPath)) { + const previous = JSON.parse(readFileSync(summaryPath, 'utf8')); + const replacedCases = new Set(all.map((entry) => `${entry.type}/${entry.name}`)); + summary = [...previous.filter((entry) => !replacedCases.has(`${entry.type}/${entry.name}`)), ...all] + .sort((a, b) => a.type.localeCompare(b.type) || a.name.localeCompare(b.name)); +} +writeFileSync(summaryPath, JSON.stringify(summary, null, 2) + '\n'); +const rendered = all.filter((r) => r.ok).length; +const skipped = all.filter((r) => r.skipped).length; +console.log(`\n${rendered}/${all.length} pairs rendered, ${skipped} skipped → out/gallery/ (summary: ${summary.length} cases)`); diff --git a/test-harness/excel/evaluations/gen-gallery-inputs.mjs b/test-harness/excel/evaluations/gen-gallery-inputs.mjs new file mode 100644 index 00000000..6a5497d2 --- /dev/null +++ b/test-harness/excel/evaluations/gen-gallery-inputs.mjs @@ -0,0 +1,96 @@ +#!/usr/bin/env node +// @ts-nocheck (consumes loosely-typed gallery TestCase objects) +/** + * gen-gallery-inputs.mjs — export real Flint gallery examples as Flint inputs. + * + * Pulls curated TestCases from `flint-chart/test-data` (the fixtures the website + * gallery renders) and converts each to a flat ChartAssemblyInput, grouped into + * per-chart-type subfolders under inputs/. Primary-axis cardinality is + * encoded in the filename so we can target low/high cardinality. + * + * Usage: + * node gen-gallery-inputs.mjs + * node gen-gallery-inputs.mjs radar-chart + */ + +import { writeFileSync, mkdirSync, rmSync } from 'node:fs'; +import { join, dirname } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { TEST_GENERATORS } from 'flint-chart/test-data'; + +const here = dirname(fileURLToPath(import.meta.url)); +const OUT = join(here, 'inputs'); + +const MAJOR_TYPES = [ + 'Bar Chart', 'Grouped Bar Chart', 'Stacked Bar Chart', 'Line Chart', + 'Pyramid Chart', 'Area Chart', 'Scatter Plot', 'Pie Chart', 'Donut Chart', 'Histogram', 'Heatmap', + 'Boxplot', 'Radar Chart', 'Waterfall Chart', 'Funnel Chart', 'Treemap', 'Sunburst Chart', + 'Connected Scatter Plot', 'Candlestick Chart', +]; + +const GENERATOR_KEYS = { + 'Funnel Chart': 'ECharts: Funnel', + 'Treemap': 'ECharts: Treemap', + 'Sunburst Chart': 'ECharts: Sunburst', +}; + +const DEFAULT_CANVAS = { width: 560, height: 360 }; +const OVERRIDE_KEYS = ['type', 'aggregate', 'sortOrder', 'sortBy', 'scheme']; +const collapse = (e) => (e.field == null ? e : OVERRIDE_KEYS.some((k) => e[k] != null && e[k] !== '') ? e : e.field); + +function toAssemblyInput(t, canvas = DEFAULT_CANVAS) { + const idToName = new Map(t.fields.map((f) => [f.id, f.name])); + const encodings = {}; + for (const [channel, e] of Object.entries(t.encodingMap || {})) { + if (!e?.fieldID) continue; + const field = idToName.get(e.fieldID) ?? e.fieldID; + encodings[channel] = collapse({ + field, type: e.dtype, aggregate: e.aggregate, sortOrder: e.sortOrder, sortBy: e.sortBy, scheme: e.scheme, + }); + } + const semantic_types = {}; + for (const [k, m] of Object.entries(t.metadata || {})) semantic_types[k] = m.semanticType; + return { + semantic_types, + chart_spec: { chartType: t.chartType, encodings, baseSize: canvas, ...(t.chartProperties ? { chartProperties: t.chartProperties } : {}) }, + ...(t.assembleOptions ? { options: t.assembleOptions } : {}), + ...(t.semanticAnnotations ? { semantic_annotations: t.semanticAnnotations } : {}), + data: { values: t.data }, + }; +} + +const slug = (s) => s.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); +function primaryCardinality(t) { + const enc = t.encodingMap?.x ?? t.encodingMap?.y; + const f = enc?.fieldID ? t.fields.find((x) => x.id === enc.fieldID) : null; + if (!f) return 0; + const seen = new Set(); + for (const row of t.data || []) seen.add(row[f.name]); + return seen.size; +} + +const familyFilter = process.argv[2]; +const selectedTypes = familyFilter + ? MAJOR_TYPES.filter((type) => slug(type) === familyFilter) + : MAJOR_TYPES; +if (familyFilter && selectedTypes.length === 0) { + throw new Error(`Unknown gallery family "${familyFilter}".`); +} +if (familyFilter) rmSync(join(OUT, familyFilter), { recursive: true, force: true }); +else rmSync(OUT, { recursive: true, force: true }); +let total = 0; +for (const type of selectedTypes) { + const gen = TEST_GENERATORS[GENERATOR_KEYS[type] ?? type]; + if (!gen) { console.warn(`(no generator for ${type})`); continue; } + const dir = join(OUT, slug(type)); + mkdirSync(dir, { recursive: true }); + let n = 0; + gen().forEach((t, i) => { + if (t.encodingMap?.column?.fieldID || t.encodingMap?.row?.fieldID) return; // skip facets + const card = primaryCardinality(t); + writeFileSync(join(dir, `${String(i).padStart(2, '0')}-card${card}.flint.json`), JSON.stringify(toAssemblyInput(t), null, 2) + '\n'); + total += 1; n += 1; + }); + console.log(`${type}: ${n} inputs`); +} +console.log(`\nwrote ${total} gallery inputs under evaluations/inputs/`); diff --git a/test-harness/excel/evaluations/inputs/area-chart/00-card30.flint.json b/test-harness/excel/evaluations/inputs/area-chart/00-card30.flint.json new file mode 100644 index 00000000..3826ed0b --- /dev/null +++ b/test-harness/excel/evaluations/inputs/area-chart/00-card30.flint.json @@ -0,0 +1,141 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Area Chart", + "encodings": { + "x": "Date", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 51 + }, + { + "Date": "2020-02-06", + "Value": 51 + }, + { + "Date": "2020-03-14", + "Value": 63 + }, + { + "Date": "2020-04-19", + "Value": 67 + }, + { + "Date": "2020-05-26", + "Value": 81 + }, + { + "Date": "2020-07-01", + "Value": 100 + }, + { + "Date": "2020-08-07", + "Value": 105 + }, + { + "Date": "2020-09-12", + "Value": 113 + }, + { + "Date": "2020-10-19", + "Value": 135 + }, + { + "Date": "2020-11-24", + "Value": 156 + }, + { + "Date": "2020-12-31", + "Value": 163 + }, + { + "Date": "2021-02-05", + "Value": 169 + }, + { + "Date": "2021-03-14", + "Value": 180 + }, + { + "Date": "2021-04-19", + "Value": 177 + }, + { + "Date": "2021-05-26", + "Value": 185 + }, + { + "Date": "2021-07-01", + "Value": 179 + }, + { + "Date": "2021-08-07", + "Value": 190 + }, + { + "Date": "2021-09-12", + "Value": 209 + }, + { + "Date": "2021-10-19", + "Value": 235 + }, + { + "Date": "2021-11-24", + "Value": 267 + }, + { + "Date": "2021-12-31", + "Value": 303 + }, + { + "Date": "2022-02-05", + "Value": 333 + }, + { + "Date": "2022-03-14", + "Value": 341 + }, + { + "Date": "2022-04-19", + "Value": 349 + }, + { + "Date": "2022-05-26", + "Value": 362 + }, + { + "Date": "2022-07-01", + "Value": 361 + }, + { + "Date": "2022-08-07", + "Value": 365 + }, + { + "Date": "2022-09-12", + "Value": 359 + }, + { + "Date": "2022-10-19", + "Value": 356 + }, + { + "Date": "2022-11-24", + "Value": 360 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/area-chart/01-card24.flint.json b/test-harness/excel/evaluations/inputs/area-chart/01-card24.flint.json new file mode 100644 index 00000000..59ac6678 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/area-chart/01-card24.flint.json @@ -0,0 +1,503 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity", + "Series": "Category" + }, + "chart_spec": { + "chartType": "Area Chart", + "encodings": { + "x": "Date", + "y": "Value", + "color": "Series" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 216, + "Series": "Electronics" + }, + { + "Date": "2020-02-15", + "Value": 225, + "Series": "Electronics" + }, + { + "Date": "2020-04-01", + "Value": 240, + "Series": "Electronics" + }, + { + "Date": "2020-05-16", + "Value": 246, + "Series": "Electronics" + }, + { + "Date": "2020-07-01", + "Value": 264, + "Series": "Electronics" + }, + { + "Date": "2020-08-16", + "Value": 276, + "Series": "Electronics" + }, + { + "Date": "2020-09-30", + "Value": 297, + "Series": "Electronics" + }, + { + "Date": "2020-11-15", + "Value": 299, + "Series": "Electronics" + }, + { + "Date": "2020-12-31", + "Value": 307, + "Series": "Electronics" + }, + { + "Date": "2021-02-14", + "Value": 316, + "Series": "Electronics" + }, + { + "Date": "2021-04-01", + "Value": 338, + "Series": "Electronics" + }, + { + "Date": "2021-05-16", + "Value": 341, + "Series": "Electronics" + }, + { + "Date": "2021-07-01", + "Value": 356, + "Series": "Electronics" + }, + { + "Date": "2021-08-16", + "Value": 353, + "Series": "Electronics" + }, + { + "Date": "2021-09-30", + "Value": 342, + "Series": "Electronics" + }, + { + "Date": "2021-11-15", + "Value": 325, + "Series": "Electronics" + }, + { + "Date": "2021-12-31", + "Value": 318, + "Series": "Electronics" + }, + { + "Date": "2022-02-14", + "Value": 325, + "Series": "Electronics" + }, + { + "Date": "2022-04-01", + "Value": 327, + "Series": "Electronics" + }, + { + "Date": "2022-05-16", + "Value": 319, + "Series": "Electronics" + }, + { + "Date": "2022-07-01", + "Value": 332, + "Series": "Electronics" + }, + { + "Date": "2022-08-16", + "Value": 343, + "Series": "Electronics" + }, + { + "Date": "2022-09-30", + "Value": 360, + "Series": "Electronics" + }, + { + "Date": "2022-11-15", + "Value": 386, + "Series": "Electronics" + }, + { + "Date": "2020-01-01", + "Value": 126, + "Series": "Clothing" + }, + { + "Date": "2020-02-15", + "Value": 121, + "Series": "Clothing" + }, + { + "Date": "2020-04-01", + "Value": 125, + "Series": "Clothing" + }, + { + "Date": "2020-05-16", + "Value": 126, + "Series": "Clothing" + }, + { + "Date": "2020-07-01", + "Value": 134, + "Series": "Clothing" + }, + { + "Date": "2020-08-16", + "Value": 141, + "Series": "Clothing" + }, + { + "Date": "2020-09-30", + "Value": 141, + "Series": "Clothing" + }, + { + "Date": "2020-11-15", + "Value": 144, + "Series": "Clothing" + }, + { + "Date": "2020-12-31", + "Value": 147, + "Series": "Clothing" + }, + { + "Date": "2021-02-14", + "Value": 144, + "Series": "Clothing" + }, + { + "Date": "2021-04-01", + "Value": 146, + "Series": "Clothing" + }, + { + "Date": "2021-05-16", + "Value": 150, + "Series": "Clothing" + }, + { + "Date": "2021-07-01", + "Value": 148, + "Series": "Clothing" + }, + { + "Date": "2021-08-16", + "Value": 150, + "Series": "Clothing" + }, + { + "Date": "2021-09-30", + "Value": 145, + "Series": "Clothing" + }, + { + "Date": "2021-11-15", + "Value": 146, + "Series": "Clothing" + }, + { + "Date": "2021-12-31", + "Value": 145, + "Series": "Clothing" + }, + { + "Date": "2022-02-14", + "Value": 147, + "Series": "Clothing" + }, + { + "Date": "2022-04-01", + "Value": 158, + "Series": "Clothing" + }, + { + "Date": "2022-05-16", + "Value": 173, + "Series": "Clothing" + }, + { + "Date": "2022-07-01", + "Value": 180, + "Series": "Clothing" + }, + { + "Date": "2022-08-16", + "Value": 179, + "Series": "Clothing" + }, + { + "Date": "2022-09-30", + "Value": 179, + "Series": "Clothing" + }, + { + "Date": "2022-11-15", + "Value": 180, + "Series": "Clothing" + }, + { + "Date": "2020-01-01", + "Value": 71, + "Series": "Food" + }, + { + "Date": "2020-02-15", + "Value": 61, + "Series": "Food" + }, + { + "Date": "2020-04-01", + "Value": 59, + "Series": "Food" + }, + { + "Date": "2020-05-16", + "Value": 66, + "Series": "Food" + }, + { + "Date": "2020-07-01", + "Value": 63, + "Series": "Food" + }, + { + "Date": "2020-08-16", + "Value": 75, + "Series": "Food" + }, + { + "Date": "2020-09-30", + "Value": 84, + "Series": "Food" + }, + { + "Date": "2020-11-15", + "Value": 77, + "Series": "Food" + }, + { + "Date": "2020-12-31", + "Value": 93, + "Series": "Food" + }, + { + "Date": "2021-02-14", + "Value": 120, + "Series": "Food" + }, + { + "Date": "2021-04-01", + "Value": 160, + "Series": "Food" + }, + { + "Date": "2021-05-16", + "Value": 199, + "Series": "Food" + }, + { + "Date": "2021-07-01", + "Value": 210, + "Series": "Food" + }, + { + "Date": "2021-08-16", + "Value": 202, + "Series": "Food" + }, + { + "Date": "2021-09-30", + "Value": 219, + "Series": "Food" + }, + { + "Date": "2021-11-15", + "Value": 245, + "Series": "Food" + }, + { + "Date": "2021-12-31", + "Value": 260, + "Series": "Food" + }, + { + "Date": "2022-02-14", + "Value": 264, + "Series": "Food" + }, + { + "Date": "2022-04-01", + "Value": 286, + "Series": "Food" + }, + { + "Date": "2022-05-16", + "Value": 292, + "Series": "Food" + }, + { + "Date": "2022-07-01", + "Value": 288, + "Series": "Food" + }, + { + "Date": "2022-08-16", + "Value": 273, + "Series": "Food" + }, + { + "Date": "2022-09-30", + "Value": 262, + "Series": "Food" + }, + { + "Date": "2022-11-15", + "Value": 264, + "Series": "Food" + }, + { + "Date": "2020-01-01", + "Value": 126, + "Series": "Books" + }, + { + "Date": "2020-02-15", + "Value": 132, + "Series": "Books" + }, + { + "Date": "2020-04-01", + "Value": 143, + "Series": "Books" + }, + { + "Date": "2020-05-16", + "Value": 146, + "Series": "Books" + }, + { + "Date": "2020-07-01", + "Value": 148, + "Series": "Books" + }, + { + "Date": "2020-08-16", + "Value": 156, + "Series": "Books" + }, + { + "Date": "2020-09-30", + "Value": 162, + "Series": "Books" + }, + { + "Date": "2020-11-15", + "Value": 175, + "Series": "Books" + }, + { + "Date": "2020-12-31", + "Value": 196, + "Series": "Books" + }, + { + "Date": "2021-02-14", + "Value": 224, + "Series": "Books" + }, + { + "Date": "2021-04-01", + "Value": 251, + "Series": "Books" + }, + { + "Date": "2021-05-16", + "Value": 256, + "Series": "Books" + }, + { + "Date": "2021-07-01", + "Value": 262, + "Series": "Books" + }, + { + "Date": "2021-08-16", + "Value": 283, + "Series": "Books" + }, + { + "Date": "2021-09-30", + "Value": 299, + "Series": "Books" + }, + { + "Date": "2021-11-15", + "Value": 307, + "Series": "Books" + }, + { + "Date": "2021-12-31", + "Value": 319, + "Series": "Books" + }, + { + "Date": "2022-02-14", + "Value": 344, + "Series": "Books" + }, + { + "Date": "2022-04-01", + "Value": 353, + "Series": "Books" + }, + { + "Date": "2022-05-16", + "Value": 358, + "Series": "Books" + }, + { + "Date": "2022-07-01", + "Value": 374, + "Series": "Books" + }, + { + "Date": "2022-08-16", + "Value": 373, + "Series": "Books" + }, + { + "Date": "2022-09-30", + "Value": 364, + "Series": "Books" + }, + { + "Date": "2022-11-15", + "Value": 373, + "Series": "Books" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/area-chart/02-card60.flint.json b/test-harness/excel/evaluations/inputs/area-chart/02-card60.flint.json new file mode 100644 index 00000000..368a2f35 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/area-chart/02-card60.flint.json @@ -0,0 +1,2423 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity", + "Series": "Category" + }, + "chart_spec": { + "chartType": "Area Chart", + "encodings": { + "x": "Date", + "y": "Value", + "color": "Series" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 203, + "Series": "Electronics" + }, + { + "Date": "2020-01-19", + "Value": 204, + "Series": "Electronics" + }, + { + "Date": "2020-02-06", + "Value": 217, + "Series": "Electronics" + }, + { + "Date": "2020-02-24", + "Value": 225, + "Series": "Electronics" + }, + { + "Date": "2020-03-14", + "Value": 224, + "Series": "Electronics" + }, + { + "Date": "2020-04-01", + "Value": 232, + "Series": "Electronics" + }, + { + "Date": "2020-04-19", + "Value": 245, + "Series": "Electronics" + }, + { + "Date": "2020-05-07", + "Value": 264, + "Series": "Electronics" + }, + { + "Date": "2020-05-26", + "Value": 269, + "Series": "Electronics" + }, + { + "Date": "2020-06-13", + "Value": 265, + "Series": "Electronics" + }, + { + "Date": "2020-07-01", + "Value": 263, + "Series": "Electronics" + }, + { + "Date": "2020-07-19", + "Value": 265, + "Series": "Electronics" + }, + { + "Date": "2020-08-07", + "Value": 263, + "Series": "Electronics" + }, + { + "Date": "2020-08-25", + "Value": 266, + "Series": "Electronics" + }, + { + "Date": "2020-09-12", + "Value": 274, + "Series": "Electronics" + }, + { + "Date": "2020-09-30", + "Value": 286, + "Series": "Electronics" + }, + { + "Date": "2020-10-19", + "Value": 296, + "Series": "Electronics" + }, + { + "Date": "2020-11-06", + "Value": 307, + "Series": "Electronics" + }, + { + "Date": "2020-11-24", + "Value": 311, + "Series": "Electronics" + }, + { + "Date": "2020-12-12", + "Value": 319, + "Series": "Electronics" + }, + { + "Date": "2020-12-31", + "Value": 329, + "Series": "Electronics" + }, + { + "Date": "2021-01-18", + "Value": 343, + "Series": "Electronics" + }, + { + "Date": "2021-02-05", + "Value": 354, + "Series": "Electronics" + }, + { + "Date": "2021-02-23", + "Value": 364, + "Series": "Electronics" + }, + { + "Date": "2021-03-14", + "Value": 367, + "Series": "Electronics" + }, + { + "Date": "2021-04-01", + "Value": 380, + "Series": "Electronics" + }, + { + "Date": "2021-04-19", + "Value": 396, + "Series": "Electronics" + }, + { + "Date": "2021-05-07", + "Value": 408, + "Series": "Electronics" + }, + { + "Date": "2021-05-26", + "Value": 410, + "Series": "Electronics" + }, + { + "Date": "2021-06-13", + "Value": 408, + "Series": "Electronics" + }, + { + "Date": "2021-07-01", + "Value": 403, + "Series": "Electronics" + }, + { + "Date": "2021-07-19", + "Value": 400, + "Series": "Electronics" + }, + { + "Date": "2021-08-07", + "Value": 398, + "Series": "Electronics" + }, + { + "Date": "2021-08-25", + "Value": 407, + "Series": "Electronics" + }, + { + "Date": "2021-09-12", + "Value": 422, + "Series": "Electronics" + }, + { + "Date": "2021-09-30", + "Value": 435, + "Series": "Electronics" + }, + { + "Date": "2021-10-19", + "Value": 448, + "Series": "Electronics" + }, + { + "Date": "2021-11-06", + "Value": 457, + "Series": "Electronics" + }, + { + "Date": "2021-11-24", + "Value": 460, + "Series": "Electronics" + }, + { + "Date": "2021-12-12", + "Value": 473, + "Series": "Electronics" + }, + { + "Date": "2021-12-31", + "Value": 486, + "Series": "Electronics" + }, + { + "Date": "2022-01-18", + "Value": 493, + "Series": "Electronics" + }, + { + "Date": "2022-02-05", + "Value": 490, + "Series": "Electronics" + }, + { + "Date": "2022-02-23", + "Value": 492, + "Series": "Electronics" + }, + { + "Date": "2022-03-14", + "Value": 488, + "Series": "Electronics" + }, + { + "Date": "2022-04-01", + "Value": 494, + "Series": "Electronics" + }, + { + "Date": "2022-04-19", + "Value": 510, + "Series": "Electronics" + }, + { + "Date": "2022-05-07", + "Value": 529, + "Series": "Electronics" + }, + { + "Date": "2022-05-26", + "Value": 541, + "Series": "Electronics" + }, + { + "Date": "2022-06-13", + "Value": 543, + "Series": "Electronics" + }, + { + "Date": "2022-07-01", + "Value": 548, + "Series": "Electronics" + }, + { + "Date": "2022-07-19", + "Value": 551, + "Series": "Electronics" + }, + { + "Date": "2022-08-07", + "Value": 562, + "Series": "Electronics" + }, + { + "Date": "2022-08-25", + "Value": 569, + "Series": "Electronics" + }, + { + "Date": "2022-09-12", + "Value": 572, + "Series": "Electronics" + }, + { + "Date": "2022-09-30", + "Value": 586, + "Series": "Electronics" + }, + { + "Date": "2022-10-19", + "Value": 603, + "Series": "Electronics" + }, + { + "Date": "2022-11-06", + "Value": 618, + "Series": "Electronics" + }, + { + "Date": "2022-11-24", + "Value": 634, + "Series": "Electronics" + }, + { + "Date": "2022-12-12", + "Value": 651, + "Series": "Electronics" + }, + { + "Date": "2020-01-01", + "Value": 208, + "Series": "Clothing" + }, + { + "Date": "2020-01-19", + "Value": 192, + "Series": "Clothing" + }, + { + "Date": "2020-02-06", + "Value": 178, + "Series": "Clothing" + }, + { + "Date": "2020-02-24", + "Value": 174, + "Series": "Clothing" + }, + { + "Date": "2020-03-14", + "Value": 181, + "Series": "Clothing" + }, + { + "Date": "2020-04-01", + "Value": 180, + "Series": "Clothing" + }, + { + "Date": "2020-04-19", + "Value": 165, + "Series": "Clothing" + }, + { + "Date": "2020-05-07", + "Value": 145, + "Series": "Clothing" + }, + { + "Date": "2020-05-26", + "Value": 122, + "Series": "Clothing" + }, + { + "Date": "2020-06-13", + "Value": 122, + "Series": "Clothing" + }, + { + "Date": "2020-07-01", + "Value": 138, + "Series": "Clothing" + }, + { + "Date": "2020-07-19", + "Value": 158, + "Series": "Clothing" + }, + { + "Date": "2020-08-07", + "Value": 171, + "Series": "Clothing" + }, + { + "Date": "2020-08-25", + "Value": 165, + "Series": "Clothing" + }, + { + "Date": "2020-09-12", + "Value": 146, + "Series": "Clothing" + }, + { + "Date": "2020-09-30", + "Value": 128, + "Series": "Clothing" + }, + { + "Date": "2020-10-19", + "Value": 127, + "Series": "Clothing" + }, + { + "Date": "2020-11-06", + "Value": 147, + "Series": "Clothing" + }, + { + "Date": "2020-11-24", + "Value": 181, + "Series": "Clothing" + }, + { + "Date": "2020-12-12", + "Value": 200, + "Series": "Clothing" + }, + { + "Date": "2020-12-31", + "Value": 206, + "Series": "Clothing" + }, + { + "Date": "2021-01-18", + "Value": 223, + "Series": "Clothing" + }, + { + "Date": "2021-02-05", + "Value": 241, + "Series": "Clothing" + }, + { + "Date": "2021-02-23", + "Value": 249, + "Series": "Clothing" + }, + { + "Date": "2021-03-14", + "Value": 246, + "Series": "Clothing" + }, + { + "Date": "2021-04-01", + "Value": 265, + "Series": "Clothing" + }, + { + "Date": "2021-04-19", + "Value": 283, + "Series": "Clothing" + }, + { + "Date": "2021-05-07", + "Value": 304, + "Series": "Clothing" + }, + { + "Date": "2021-05-26", + "Value": 324, + "Series": "Clothing" + }, + { + "Date": "2021-06-13", + "Value": 325, + "Series": "Clothing" + }, + { + "Date": "2021-07-01", + "Value": 347, + "Series": "Clothing" + }, + { + "Date": "2021-07-19", + "Value": 380, + "Series": "Clothing" + }, + { + "Date": "2021-08-07", + "Value": 422, + "Series": "Clothing" + }, + { + "Date": "2021-08-25", + "Value": 457, + "Series": "Clothing" + }, + { + "Date": "2021-09-12", + "Value": 494, + "Series": "Clothing" + }, + { + "Date": "2021-09-30", + "Value": 513, + "Series": "Clothing" + }, + { + "Date": "2021-10-19", + "Value": 513, + "Series": "Clothing" + }, + { + "Date": "2021-11-06", + "Value": 531, + "Series": "Clothing" + }, + { + "Date": "2021-11-24", + "Value": 538, + "Series": "Clothing" + }, + { + "Date": "2021-12-12", + "Value": 540, + "Series": "Clothing" + }, + { + "Date": "2021-12-31", + "Value": 531, + "Series": "Clothing" + }, + { + "Date": "2022-01-18", + "Value": 516, + "Series": "Clothing" + }, + { + "Date": "2022-02-05", + "Value": 508, + "Series": "Clothing" + }, + { + "Date": "2022-02-23", + "Value": 489, + "Series": "Clothing" + }, + { + "Date": "2022-03-14", + "Value": 473, + "Series": "Clothing" + }, + { + "Date": "2022-04-01", + "Value": 466, + "Series": "Clothing" + }, + { + "Date": "2022-04-19", + "Value": 453, + "Series": "Clothing" + }, + { + "Date": "2022-05-07", + "Value": 460, + "Series": "Clothing" + }, + { + "Date": "2022-05-26", + "Value": 477, + "Series": "Clothing" + }, + { + "Date": "2022-06-13", + "Value": 505, + "Series": "Clothing" + }, + { + "Date": "2022-07-01", + "Value": 527, + "Series": "Clothing" + }, + { + "Date": "2022-07-19", + "Value": 555, + "Series": "Clothing" + }, + { + "Date": "2022-08-07", + "Value": 585, + "Series": "Clothing" + }, + { + "Date": "2022-08-25", + "Value": 621, + "Series": "Clothing" + }, + { + "Date": "2022-09-12", + "Value": 644, + "Series": "Clothing" + }, + { + "Date": "2022-09-30", + "Value": 647, + "Series": "Clothing" + }, + { + "Date": "2022-10-19", + "Value": 635, + "Series": "Clothing" + }, + { + "Date": "2022-11-06", + "Value": 624, + "Series": "Clothing" + }, + { + "Date": "2022-11-24", + "Value": 632, + "Series": "Clothing" + }, + { + "Date": "2022-12-12", + "Value": 626, + "Series": "Clothing" + }, + { + "Date": "2020-01-01", + "Value": 74, + "Series": "Food" + }, + { + "Date": "2020-01-19", + "Value": 74, + "Series": "Food" + }, + { + "Date": "2020-02-06", + "Value": 72, + "Series": "Food" + }, + { + "Date": "2020-02-24", + "Value": 77, + "Series": "Food" + }, + { + "Date": "2020-03-14", + "Value": 82, + "Series": "Food" + }, + { + "Date": "2020-04-01", + "Value": 85, + "Series": "Food" + }, + { + "Date": "2020-04-19", + "Value": 91, + "Series": "Food" + }, + { + "Date": "2020-05-07", + "Value": 100, + "Series": "Food" + }, + { + "Date": "2020-05-26", + "Value": 106, + "Series": "Food" + }, + { + "Date": "2020-06-13", + "Value": 108, + "Series": "Food" + }, + { + "Date": "2020-07-01", + "Value": 114, + "Series": "Food" + }, + { + "Date": "2020-07-19", + "Value": 124, + "Series": "Food" + }, + { + "Date": "2020-08-07", + "Value": 136, + "Series": "Food" + }, + { + "Date": "2020-08-25", + "Value": 144, + "Series": "Food" + }, + { + "Date": "2020-09-12", + "Value": 155, + "Series": "Food" + }, + { + "Date": "2020-09-30", + "Value": 161, + "Series": "Food" + }, + { + "Date": "2020-10-19", + "Value": 165, + "Series": "Food" + }, + { + "Date": "2020-11-06", + "Value": 172, + "Series": "Food" + }, + { + "Date": "2020-11-24", + "Value": 177, + "Series": "Food" + }, + { + "Date": "2020-12-12", + "Value": 179, + "Series": "Food" + }, + { + "Date": "2020-12-31", + "Value": 182, + "Series": "Food" + }, + { + "Date": "2021-01-18", + "Value": 188, + "Series": "Food" + }, + { + "Date": "2021-02-05", + "Value": 188, + "Series": "Food" + }, + { + "Date": "2021-02-23", + "Value": 195, + "Series": "Food" + }, + { + "Date": "2021-03-14", + "Value": 197, + "Series": "Food" + }, + { + "Date": "2021-04-01", + "Value": 197, + "Series": "Food" + }, + { + "Date": "2021-04-19", + "Value": 203, + "Series": "Food" + }, + { + "Date": "2021-05-07", + "Value": 213, + "Series": "Food" + }, + { + "Date": "2021-05-26", + "Value": 224, + "Series": "Food" + }, + { + "Date": "2021-06-13", + "Value": 232, + "Series": "Food" + }, + { + "Date": "2021-07-01", + "Value": 233, + "Series": "Food" + }, + { + "Date": "2021-07-19", + "Value": 229, + "Series": "Food" + }, + { + "Date": "2021-08-07", + "Value": 229, + "Series": "Food" + }, + { + "Date": "2021-08-25", + "Value": 230, + "Series": "Food" + }, + { + "Date": "2021-09-12", + "Value": 234, + "Series": "Food" + }, + { + "Date": "2021-09-30", + "Value": 239, + "Series": "Food" + }, + { + "Date": "2021-10-19", + "Value": 242, + "Series": "Food" + }, + { + "Date": "2021-11-06", + "Value": 242, + "Series": "Food" + }, + { + "Date": "2021-11-24", + "Value": 244, + "Series": "Food" + }, + { + "Date": "2021-12-12", + "Value": 243, + "Series": "Food" + }, + { + "Date": "2021-12-31", + "Value": 241, + "Series": "Food" + }, + { + "Date": "2022-01-18", + "Value": 240, + "Series": "Food" + }, + { + "Date": "2022-02-05", + "Value": 239, + "Series": "Food" + }, + { + "Date": "2022-02-23", + "Value": 239, + "Series": "Food" + }, + { + "Date": "2022-03-14", + "Value": 241, + "Series": "Food" + }, + { + "Date": "2022-04-01", + "Value": 239, + "Series": "Food" + }, + { + "Date": "2022-04-19", + "Value": 243, + "Series": "Food" + }, + { + "Date": "2022-05-07", + "Value": 251, + "Series": "Food" + }, + { + "Date": "2022-05-26", + "Value": 262, + "Series": "Food" + }, + { + "Date": "2022-06-13", + "Value": 273, + "Series": "Food" + }, + { + "Date": "2022-07-01", + "Value": 276, + "Series": "Food" + }, + { + "Date": "2022-07-19", + "Value": 274, + "Series": "Food" + }, + { + "Date": "2022-08-07", + "Value": 280, + "Series": "Food" + }, + { + "Date": "2022-08-25", + "Value": 287, + "Series": "Food" + }, + { + "Date": "2022-09-12", + "Value": 289, + "Series": "Food" + }, + { + "Date": "2022-09-30", + "Value": 287, + "Series": "Food" + }, + { + "Date": "2022-10-19", + "Value": 289, + "Series": "Food" + }, + { + "Date": "2022-11-06", + "Value": 295, + "Series": "Food" + }, + { + "Date": "2022-11-24", + "Value": 295, + "Series": "Food" + }, + { + "Date": "2022-12-12", + "Value": 299, + "Series": "Food" + }, + { + "Date": "2020-01-01", + "Value": 147, + "Series": "Books" + }, + { + "Date": "2020-01-19", + "Value": 156, + "Series": "Books" + }, + { + "Date": "2020-02-06", + "Value": 168, + "Series": "Books" + }, + { + "Date": "2020-02-24", + "Value": 173, + "Series": "Books" + }, + { + "Date": "2020-03-14", + "Value": 178, + "Series": "Books" + }, + { + "Date": "2020-04-01", + "Value": 177, + "Series": "Books" + }, + { + "Date": "2020-04-19", + "Value": 179, + "Series": "Books" + }, + { + "Date": "2020-05-07", + "Value": 189, + "Series": "Books" + }, + { + "Date": "2020-05-26", + "Value": 199, + "Series": "Books" + }, + { + "Date": "2020-06-13", + "Value": 210, + "Series": "Books" + }, + { + "Date": "2020-07-01", + "Value": 212, + "Series": "Books" + }, + { + "Date": "2020-07-19", + "Value": 222, + "Series": "Books" + }, + { + "Date": "2020-08-07", + "Value": 225, + "Series": "Books" + }, + { + "Date": "2020-08-25", + "Value": 225, + "Series": "Books" + }, + { + "Date": "2020-09-12", + "Value": 227, + "Series": "Books" + }, + { + "Date": "2020-09-30", + "Value": 224, + "Series": "Books" + }, + { + "Date": "2020-10-19", + "Value": 222, + "Series": "Books" + }, + { + "Date": "2020-11-06", + "Value": 221, + "Series": "Books" + }, + { + "Date": "2020-11-24", + "Value": 226, + "Series": "Books" + }, + { + "Date": "2020-12-12", + "Value": 224, + "Series": "Books" + }, + { + "Date": "2020-12-31", + "Value": 231, + "Series": "Books" + }, + { + "Date": "2021-01-18", + "Value": 241, + "Series": "Books" + }, + { + "Date": "2021-02-05", + "Value": 245, + "Series": "Books" + }, + { + "Date": "2021-02-23", + "Value": 251, + "Series": "Books" + }, + { + "Date": "2021-03-14", + "Value": 259, + "Series": "Books" + }, + { + "Date": "2021-04-01", + "Value": 273, + "Series": "Books" + }, + { + "Date": "2021-04-19", + "Value": 285, + "Series": "Books" + }, + { + "Date": "2021-05-07", + "Value": 300, + "Series": "Books" + }, + { + "Date": "2021-05-26", + "Value": 314, + "Series": "Books" + }, + { + "Date": "2021-06-13", + "Value": 319, + "Series": "Books" + }, + { + "Date": "2021-07-01", + "Value": 328, + "Series": "Books" + }, + { + "Date": "2021-07-19", + "Value": 341, + "Series": "Books" + }, + { + "Date": "2021-08-07", + "Value": 355, + "Series": "Books" + }, + { + "Date": "2021-08-25", + "Value": 371, + "Series": "Books" + }, + { + "Date": "2021-09-12", + "Value": 390, + "Series": "Books" + }, + { + "Date": "2021-09-30", + "Value": 407, + "Series": "Books" + }, + { + "Date": "2021-10-19", + "Value": 421, + "Series": "Books" + }, + { + "Date": "2021-11-06", + "Value": 433, + "Series": "Books" + }, + { + "Date": "2021-11-24", + "Value": 443, + "Series": "Books" + }, + { + "Date": "2021-12-12", + "Value": 446, + "Series": "Books" + }, + { + "Date": "2021-12-31", + "Value": 457, + "Series": "Books" + }, + { + "Date": "2022-01-18", + "Value": 462, + "Series": "Books" + }, + { + "Date": "2022-02-05", + "Value": 469, + "Series": "Books" + }, + { + "Date": "2022-02-23", + "Value": 480, + "Series": "Books" + }, + { + "Date": "2022-03-14", + "Value": 489, + "Series": "Books" + }, + { + "Date": "2022-04-01", + "Value": 490, + "Series": "Books" + }, + { + "Date": "2022-04-19", + "Value": 494, + "Series": "Books" + }, + { + "Date": "2022-05-07", + "Value": 502, + "Series": "Books" + }, + { + "Date": "2022-05-26", + "Value": 510, + "Series": "Books" + }, + { + "Date": "2022-06-13", + "Value": 511, + "Series": "Books" + }, + { + "Date": "2022-07-01", + "Value": 511, + "Series": "Books" + }, + { + "Date": "2022-07-19", + "Value": 511, + "Series": "Books" + }, + { + "Date": "2022-08-07", + "Value": 508, + "Series": "Books" + }, + { + "Date": "2022-08-25", + "Value": 506, + "Series": "Books" + }, + { + "Date": "2022-09-12", + "Value": 500, + "Series": "Books" + }, + { + "Date": "2022-09-30", + "Value": 492, + "Series": "Books" + }, + { + "Date": "2022-10-19", + "Value": 487, + "Series": "Books" + }, + { + "Date": "2022-11-06", + "Value": 480, + "Series": "Books" + }, + { + "Date": "2022-11-24", + "Value": 476, + "Series": "Books" + }, + { + "Date": "2022-12-12", + "Value": 469, + "Series": "Books" + }, + { + "Date": "2020-01-01", + "Value": 205, + "Series": "Sports" + }, + { + "Date": "2020-01-19", + "Value": 211, + "Series": "Sports" + }, + { + "Date": "2020-02-06", + "Value": 216, + "Series": "Sports" + }, + { + "Date": "2020-02-24", + "Value": 216, + "Series": "Sports" + }, + { + "Date": "2020-03-14", + "Value": 219, + "Series": "Sports" + }, + { + "Date": "2020-04-01", + "Value": 223, + "Series": "Sports" + }, + { + "Date": "2020-04-19", + "Value": 224, + "Series": "Sports" + }, + { + "Date": "2020-05-07", + "Value": 231, + "Series": "Sports" + }, + { + "Date": "2020-05-26", + "Value": 234, + "Series": "Sports" + }, + { + "Date": "2020-06-13", + "Value": 242, + "Series": "Sports" + }, + { + "Date": "2020-07-01", + "Value": 254, + "Series": "Sports" + }, + { + "Date": "2020-07-19", + "Value": 259, + "Series": "Sports" + }, + { + "Date": "2020-08-07", + "Value": 267, + "Series": "Sports" + }, + { + "Date": "2020-08-25", + "Value": 273, + "Series": "Sports" + }, + { + "Date": "2020-09-12", + "Value": 274, + "Series": "Sports" + }, + { + "Date": "2020-09-30", + "Value": 277, + "Series": "Sports" + }, + { + "Date": "2020-10-19", + "Value": 284, + "Series": "Sports" + }, + { + "Date": "2020-11-06", + "Value": 291, + "Series": "Sports" + }, + { + "Date": "2020-11-24", + "Value": 294, + "Series": "Sports" + }, + { + "Date": "2020-12-12", + "Value": 293, + "Series": "Sports" + }, + { + "Date": "2020-12-31", + "Value": 295, + "Series": "Sports" + }, + { + "Date": "2021-01-18", + "Value": 299, + "Series": "Sports" + }, + { + "Date": "2021-02-05", + "Value": 302, + "Series": "Sports" + }, + { + "Date": "2021-02-23", + "Value": 304, + "Series": "Sports" + }, + { + "Date": "2021-03-14", + "Value": 308, + "Series": "Sports" + }, + { + "Date": "2021-04-01", + "Value": 313, + "Series": "Sports" + }, + { + "Date": "2021-04-19", + "Value": 313, + "Series": "Sports" + }, + { + "Date": "2021-05-07", + "Value": 311, + "Series": "Sports" + }, + { + "Date": "2021-05-26", + "Value": 316, + "Series": "Sports" + }, + { + "Date": "2021-06-13", + "Value": 320, + "Series": "Sports" + }, + { + "Date": "2021-07-01", + "Value": 322, + "Series": "Sports" + }, + { + "Date": "2021-07-19", + "Value": 331, + "Series": "Sports" + }, + { + "Date": "2021-08-07", + "Value": 341, + "Series": "Sports" + }, + { + "Date": "2021-08-25", + "Value": 347, + "Series": "Sports" + }, + { + "Date": "2021-09-12", + "Value": 348, + "Series": "Sports" + }, + { + "Date": "2021-09-30", + "Value": 355, + "Series": "Sports" + }, + { + "Date": "2021-10-19", + "Value": 356, + "Series": "Sports" + }, + { + "Date": "2021-11-06", + "Value": 356, + "Series": "Sports" + }, + { + "Date": "2021-11-24", + "Value": 356, + "Series": "Sports" + }, + { + "Date": "2021-12-12", + "Value": 363, + "Series": "Sports" + }, + { + "Date": "2021-12-31", + "Value": 366, + "Series": "Sports" + }, + { + "Date": "2022-01-18", + "Value": 373, + "Series": "Sports" + }, + { + "Date": "2022-02-05", + "Value": 374, + "Series": "Sports" + }, + { + "Date": "2022-02-23", + "Value": 381, + "Series": "Sports" + }, + { + "Date": "2022-03-14", + "Value": 392, + "Series": "Sports" + }, + { + "Date": "2022-04-01", + "Value": 400, + "Series": "Sports" + }, + { + "Date": "2022-04-19", + "Value": 405, + "Series": "Sports" + }, + { + "Date": "2022-05-07", + "Value": 406, + "Series": "Sports" + }, + { + "Date": "2022-05-26", + "Value": 410, + "Series": "Sports" + }, + { + "Date": "2022-06-13", + "Value": 415, + "Series": "Sports" + }, + { + "Date": "2022-07-01", + "Value": 417, + "Series": "Sports" + }, + { + "Date": "2022-07-19", + "Value": 423, + "Series": "Sports" + }, + { + "Date": "2022-08-07", + "Value": 431, + "Series": "Sports" + }, + { + "Date": "2022-08-25", + "Value": 439, + "Series": "Sports" + }, + { + "Date": "2022-09-12", + "Value": 445, + "Series": "Sports" + }, + { + "Date": "2022-09-30", + "Value": 451, + "Series": "Sports" + }, + { + "Date": "2022-10-19", + "Value": 453, + "Series": "Sports" + }, + { + "Date": "2022-11-06", + "Value": 451, + "Series": "Sports" + }, + { + "Date": "2022-11-24", + "Value": 451, + "Series": "Sports" + }, + { + "Date": "2022-12-12", + "Value": 454, + "Series": "Sports" + }, + { + "Date": "2020-01-01", + "Value": 201, + "Series": "Home" + }, + { + "Date": "2020-01-19", + "Value": 215, + "Series": "Home" + }, + { + "Date": "2020-02-06", + "Value": 239, + "Series": "Home" + }, + { + "Date": "2020-02-24", + "Value": 259, + "Series": "Home" + }, + { + "Date": "2020-03-14", + "Value": 262, + "Series": "Home" + }, + { + "Date": "2020-04-01", + "Value": 256, + "Series": "Home" + }, + { + "Date": "2020-04-19", + "Value": 264, + "Series": "Home" + }, + { + "Date": "2020-05-07", + "Value": 277, + "Series": "Home" + }, + { + "Date": "2020-05-26", + "Value": 290, + "Series": "Home" + }, + { + "Date": "2020-06-13", + "Value": 307, + "Series": "Home" + }, + { + "Date": "2020-07-01", + "Value": 332, + "Series": "Home" + }, + { + "Date": "2020-07-19", + "Value": 339, + "Series": "Home" + }, + { + "Date": "2020-08-07", + "Value": 357, + "Series": "Home" + }, + { + "Date": "2020-08-25", + "Value": 358, + "Series": "Home" + }, + { + "Date": "2020-09-12", + "Value": 364, + "Series": "Home" + }, + { + "Date": "2020-09-30", + "Value": 360, + "Series": "Home" + }, + { + "Date": "2020-10-19", + "Value": 355, + "Series": "Home" + }, + { + "Date": "2020-11-06", + "Value": 345, + "Series": "Home" + }, + { + "Date": "2020-11-24", + "Value": 354, + "Series": "Home" + }, + { + "Date": "2020-12-12", + "Value": 365, + "Series": "Home" + }, + { + "Date": "2020-12-31", + "Value": 361, + "Series": "Home" + }, + { + "Date": "2021-01-18", + "Value": 368, + "Series": "Home" + }, + { + "Date": "2021-02-05", + "Value": 373, + "Series": "Home" + }, + { + "Date": "2021-02-23", + "Value": 386, + "Series": "Home" + }, + { + "Date": "2021-03-14", + "Value": 398, + "Series": "Home" + }, + { + "Date": "2021-04-01", + "Value": 397, + "Series": "Home" + }, + { + "Date": "2021-04-19", + "Value": 396, + "Series": "Home" + }, + { + "Date": "2021-05-07", + "Value": 384, + "Series": "Home" + }, + { + "Date": "2021-05-26", + "Value": 366, + "Series": "Home" + }, + { + "Date": "2021-06-13", + "Value": 360, + "Series": "Home" + }, + { + "Date": "2021-07-01", + "Value": 360, + "Series": "Home" + }, + { + "Date": "2021-07-19", + "Value": 377, + "Series": "Home" + }, + { + "Date": "2021-08-07", + "Value": 390, + "Series": "Home" + }, + { + "Date": "2021-08-25", + "Value": 408, + "Series": "Home" + }, + { + "Date": "2021-09-12", + "Value": 436, + "Series": "Home" + }, + { + "Date": "2021-09-30", + "Value": 444, + "Series": "Home" + }, + { + "Date": "2021-10-19", + "Value": 460, + "Series": "Home" + }, + { + "Date": "2021-11-06", + "Value": 462, + "Series": "Home" + }, + { + "Date": "2021-11-24", + "Value": 481, + "Series": "Home" + }, + { + "Date": "2021-12-12", + "Value": 499, + "Series": "Home" + }, + { + "Date": "2021-12-31", + "Value": 506, + "Series": "Home" + }, + { + "Date": "2022-01-18", + "Value": 525, + "Series": "Home" + }, + { + "Date": "2022-02-05", + "Value": 553, + "Series": "Home" + }, + { + "Date": "2022-02-23", + "Value": 583, + "Series": "Home" + }, + { + "Date": "2022-03-14", + "Value": 601, + "Series": "Home" + }, + { + "Date": "2022-04-01", + "Value": 609, + "Series": "Home" + }, + { + "Date": "2022-04-19", + "Value": 622, + "Series": "Home" + }, + { + "Date": "2022-05-07", + "Value": 620, + "Series": "Home" + }, + { + "Date": "2022-05-26", + "Value": 631, + "Series": "Home" + }, + { + "Date": "2022-06-13", + "Value": 647, + "Series": "Home" + }, + { + "Date": "2022-07-01", + "Value": 674, + "Series": "Home" + }, + { + "Date": "2022-07-19", + "Value": 705, + "Series": "Home" + }, + { + "Date": "2022-08-07", + "Value": 714, + "Series": "Home" + }, + { + "Date": "2022-08-25", + "Value": 708, + "Series": "Home" + }, + { + "Date": "2022-09-12", + "Value": 709, + "Series": "Home" + }, + { + "Date": "2022-09-30", + "Value": 717, + "Series": "Home" + }, + { + "Date": "2022-10-19", + "Value": 717, + "Series": "Home" + }, + { + "Date": "2022-11-06", + "Value": 735, + "Series": "Home" + }, + { + "Date": "2022-11-24", + "Value": 737, + "Series": "Home" + }, + { + "Date": "2022-12-12", + "Value": 737, + "Series": "Home" + }, + { + "Date": "2020-01-01", + "Value": 120, + "Series": "Garden" + }, + { + "Date": "2020-01-19", + "Value": 130, + "Series": "Garden" + }, + { + "Date": "2020-02-06", + "Value": 142, + "Series": "Garden" + }, + { + "Date": "2020-02-24", + "Value": 141, + "Series": "Garden" + }, + { + "Date": "2020-03-14", + "Value": 152, + "Series": "Garden" + }, + { + "Date": "2020-04-01", + "Value": 156, + "Series": "Garden" + }, + { + "Date": "2020-04-19", + "Value": 150, + "Series": "Garden" + }, + { + "Date": "2020-05-07", + "Value": 162, + "Series": "Garden" + }, + { + "Date": "2020-05-26", + "Value": 184, + "Series": "Garden" + }, + { + "Date": "2020-06-13", + "Value": 211, + "Series": "Garden" + }, + { + "Date": "2020-07-01", + "Value": 242, + "Series": "Garden" + }, + { + "Date": "2020-07-19", + "Value": 262, + "Series": "Garden" + }, + { + "Date": "2020-08-07", + "Value": 276, + "Series": "Garden" + }, + { + "Date": "2020-08-25", + "Value": 286, + "Series": "Garden" + }, + { + "Date": "2020-09-12", + "Value": 309, + "Series": "Garden" + }, + { + "Date": "2020-09-30", + "Value": 317, + "Series": "Garden" + }, + { + "Date": "2020-10-19", + "Value": 329, + "Series": "Garden" + }, + { + "Date": "2020-11-06", + "Value": 337, + "Series": "Garden" + }, + { + "Date": "2020-11-24", + "Value": 354, + "Series": "Garden" + }, + { + "Date": "2020-12-12", + "Value": 363, + "Series": "Garden" + }, + { + "Date": "2020-12-31", + "Value": 383, + "Series": "Garden" + }, + { + "Date": "2021-01-18", + "Value": 412, + "Series": "Garden" + }, + { + "Date": "2021-02-05", + "Value": 447, + "Series": "Garden" + }, + { + "Date": "2021-02-23", + "Value": 460, + "Series": "Garden" + }, + { + "Date": "2021-03-14", + "Value": 456, + "Series": "Garden" + }, + { + "Date": "2021-04-01", + "Value": 441, + "Series": "Garden" + }, + { + "Date": "2021-04-19", + "Value": 420, + "Series": "Garden" + }, + { + "Date": "2021-05-07", + "Value": 416, + "Series": "Garden" + }, + { + "Date": "2021-05-26", + "Value": 431, + "Series": "Garden" + }, + { + "Date": "2021-06-13", + "Value": 448, + "Series": "Garden" + }, + { + "Date": "2021-07-01", + "Value": 449, + "Series": "Garden" + }, + { + "Date": "2021-07-19", + "Value": 459, + "Series": "Garden" + }, + { + "Date": "2021-08-07", + "Value": 479, + "Series": "Garden" + }, + { + "Date": "2021-08-25", + "Value": 490, + "Series": "Garden" + }, + { + "Date": "2021-09-12", + "Value": 507, + "Series": "Garden" + }, + { + "Date": "2021-09-30", + "Value": 529, + "Series": "Garden" + }, + { + "Date": "2021-10-19", + "Value": 540, + "Series": "Garden" + }, + { + "Date": "2021-11-06", + "Value": 561, + "Series": "Garden" + }, + { + "Date": "2021-11-24", + "Value": 574, + "Series": "Garden" + }, + { + "Date": "2021-12-12", + "Value": 569, + "Series": "Garden" + }, + { + "Date": "2021-12-31", + "Value": 563, + "Series": "Garden" + }, + { + "Date": "2022-01-18", + "Value": 572, + "Series": "Garden" + }, + { + "Date": "2022-02-05", + "Value": 566, + "Series": "Garden" + }, + { + "Date": "2022-02-23", + "Value": 552, + "Series": "Garden" + }, + { + "Date": "2022-03-14", + "Value": 534, + "Series": "Garden" + }, + { + "Date": "2022-04-01", + "Value": 526, + "Series": "Garden" + }, + { + "Date": "2022-04-19", + "Value": 538, + "Series": "Garden" + }, + { + "Date": "2022-05-07", + "Value": 536, + "Series": "Garden" + }, + { + "Date": "2022-05-26", + "Value": 539, + "Series": "Garden" + }, + { + "Date": "2022-06-13", + "Value": 553, + "Series": "Garden" + }, + { + "Date": "2022-07-01", + "Value": 568, + "Series": "Garden" + }, + { + "Date": "2022-07-19", + "Value": 584, + "Series": "Garden" + }, + { + "Date": "2022-08-07", + "Value": 608, + "Series": "Garden" + }, + { + "Date": "2022-08-25", + "Value": 631, + "Series": "Garden" + }, + { + "Date": "2022-09-12", + "Value": 648, + "Series": "Garden" + }, + { + "Date": "2022-09-30", + "Value": 674, + "Series": "Garden" + }, + { + "Date": "2022-10-19", + "Value": 703, + "Series": "Garden" + }, + { + "Date": "2022-11-06", + "Value": 738, + "Series": "Garden" + }, + { + "Date": "2022-11-24", + "Value": 766, + "Series": "Garden" + }, + { + "Date": "2022-12-12", + "Value": 798, + "Series": "Garden" + }, + { + "Date": "2020-01-01", + "Value": 213, + "Series": "Auto" + }, + { + "Date": "2020-01-19", + "Value": 211, + "Series": "Auto" + }, + { + "Date": "2020-02-06", + "Value": 222, + "Series": "Auto" + }, + { + "Date": "2020-02-24", + "Value": 227, + "Series": "Auto" + }, + { + "Date": "2020-03-14", + "Value": 249, + "Series": "Auto" + }, + { + "Date": "2020-04-01", + "Value": 276, + "Series": "Auto" + }, + { + "Date": "2020-04-19", + "Value": 281, + "Series": "Auto" + }, + { + "Date": "2020-05-07", + "Value": 304, + "Series": "Auto" + }, + { + "Date": "2020-05-26", + "Value": 309, + "Series": "Auto" + }, + { + "Date": "2020-06-13", + "Value": 329, + "Series": "Auto" + }, + { + "Date": "2020-07-01", + "Value": 361, + "Series": "Auto" + }, + { + "Date": "2020-07-19", + "Value": 365, + "Series": "Auto" + }, + { + "Date": "2020-08-07", + "Value": 381, + "Series": "Auto" + }, + { + "Date": "2020-08-25", + "Value": 412, + "Series": "Auto" + }, + { + "Date": "2020-09-12", + "Value": 424, + "Series": "Auto" + }, + { + "Date": "2020-09-30", + "Value": 450, + "Series": "Auto" + }, + { + "Date": "2020-10-19", + "Value": 478, + "Series": "Auto" + }, + { + "Date": "2020-11-06", + "Value": 497, + "Series": "Auto" + }, + { + "Date": "2020-11-24", + "Value": 495, + "Series": "Auto" + }, + { + "Date": "2020-12-12", + "Value": 487, + "Series": "Auto" + }, + { + "Date": "2020-12-31", + "Value": 472, + "Series": "Auto" + }, + { + "Date": "2021-01-18", + "Value": 477, + "Series": "Auto" + }, + { + "Date": "2021-02-05", + "Value": 484, + "Series": "Auto" + }, + { + "Date": "2021-02-23", + "Value": 482, + "Series": "Auto" + }, + { + "Date": "2021-03-14", + "Value": 468, + "Series": "Auto" + }, + { + "Date": "2021-04-01", + "Value": 474, + "Series": "Auto" + }, + { + "Date": "2021-04-19", + "Value": 496, + "Series": "Auto" + }, + { + "Date": "2021-05-07", + "Value": 528, + "Series": "Auto" + }, + { + "Date": "2021-05-26", + "Value": 542, + "Series": "Auto" + }, + { + "Date": "2021-06-13", + "Value": 561, + "Series": "Auto" + }, + { + "Date": "2021-07-01", + "Value": 576, + "Series": "Auto" + }, + { + "Date": "2021-07-19", + "Value": 571, + "Series": "Auto" + }, + { + "Date": "2021-08-07", + "Value": 559, + "Series": "Auto" + }, + { + "Date": "2021-08-25", + "Value": 558, + "Series": "Auto" + }, + { + "Date": "2021-09-12", + "Value": 562, + "Series": "Auto" + }, + { + "Date": "2021-09-30", + "Value": 574, + "Series": "Auto" + }, + { + "Date": "2021-10-19", + "Value": 571, + "Series": "Auto" + }, + { + "Date": "2021-11-06", + "Value": 591, + "Series": "Auto" + }, + { + "Date": "2021-11-24", + "Value": 615, + "Series": "Auto" + }, + { + "Date": "2021-12-12", + "Value": 647, + "Series": "Auto" + }, + { + "Date": "2021-12-31", + "Value": 655, + "Series": "Auto" + }, + { + "Date": "2022-01-18", + "Value": 653, + "Series": "Auto" + }, + { + "Date": "2022-02-05", + "Value": 656, + "Series": "Auto" + }, + { + "Date": "2022-02-23", + "Value": 654, + "Series": "Auto" + }, + { + "Date": "2022-03-14", + "Value": 660, + "Series": "Auto" + }, + { + "Date": "2022-04-01", + "Value": 673, + "Series": "Auto" + }, + { + "Date": "2022-04-19", + "Value": 698, + "Series": "Auto" + }, + { + "Date": "2022-05-07", + "Value": 707, + "Series": "Auto" + }, + { + "Date": "2022-05-26", + "Value": 722, + "Series": "Auto" + }, + { + "Date": "2022-06-13", + "Value": 727, + "Series": "Auto" + }, + { + "Date": "2022-07-01", + "Value": 734, + "Series": "Auto" + }, + { + "Date": "2022-07-19", + "Value": 729, + "Series": "Auto" + }, + { + "Date": "2022-08-07", + "Value": 734, + "Series": "Auto" + }, + { + "Date": "2022-08-25", + "Value": 752, + "Series": "Auto" + }, + { + "Date": "2022-09-12", + "Value": 762, + "Series": "Auto" + }, + { + "Date": "2022-09-30", + "Value": 765, + "Series": "Auto" + }, + { + "Date": "2022-10-19", + "Value": 783, + "Series": "Auto" + }, + { + "Date": "2022-11-06", + "Value": 813, + "Series": "Auto" + }, + { + "Date": "2022-11-24", + "Value": 823, + "Series": "Auto" + }, + { + "Date": "2022-12-12", + "Value": 822, + "Series": "Auto" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/area-chart/03-card120.flint.json b/test-harness/excel/evaluations/inputs/area-chart/03-card120.flint.json new file mode 100644 index 00000000..e2dd4d45 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/area-chart/03-card120.flint.json @@ -0,0 +1,9023 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity", + "Series": "Category" + }, + "chart_spec": { + "chartType": "Area Chart", + "encodings": { + "x": "Date", + "y": "Value", + "color": "Series" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 223, + "Series": "Electronics" + }, + { + "Date": "2020-01-10", + "Value": 235, + "Series": "Electronics" + }, + { + "Date": "2020-01-19", + "Value": 256, + "Series": "Electronics" + }, + { + "Date": "2020-01-28", + "Value": 269, + "Series": "Electronics" + }, + { + "Date": "2020-02-06", + "Value": 281, + "Series": "Electronics" + }, + { + "Date": "2020-02-15", + "Value": 279, + "Series": "Electronics" + }, + { + "Date": "2020-02-24", + "Value": 288, + "Series": "Electronics" + }, + { + "Date": "2020-03-04", + "Value": 307, + "Series": "Electronics" + }, + { + "Date": "2020-03-14", + "Value": 331, + "Series": "Electronics" + }, + { + "Date": "2020-03-23", + "Value": 337, + "Series": "Electronics" + }, + { + "Date": "2020-04-01", + "Value": 345, + "Series": "Electronics" + }, + { + "Date": "2020-04-10", + "Value": 341, + "Series": "Electronics" + }, + { + "Date": "2020-04-19", + "Value": 348, + "Series": "Electronics" + }, + { + "Date": "2020-04-28", + "Value": 348, + "Series": "Electronics" + }, + { + "Date": "2020-05-07", + "Value": 360, + "Series": "Electronics" + }, + { + "Date": "2020-05-16", + "Value": 361, + "Series": "Electronics" + }, + { + "Date": "2020-05-26", + "Value": 362, + "Series": "Electronics" + }, + { + "Date": "2020-06-04", + "Value": 363, + "Series": "Electronics" + }, + { + "Date": "2020-06-13", + "Value": 363, + "Series": "Electronics" + }, + { + "Date": "2020-06-22", + "Value": 370, + "Series": "Electronics" + }, + { + "Date": "2020-07-01", + "Value": 367, + "Series": "Electronics" + }, + { + "Date": "2020-07-10", + "Value": 376, + "Series": "Electronics" + }, + { + "Date": "2020-07-19", + "Value": 374, + "Series": "Electronics" + }, + { + "Date": "2020-07-28", + "Value": 372, + "Series": "Electronics" + }, + { + "Date": "2020-08-07", + "Value": 384, + "Series": "Electronics" + }, + { + "Date": "2020-08-16", + "Value": 399, + "Series": "Electronics" + }, + { + "Date": "2020-08-25", + "Value": 408, + "Series": "Electronics" + }, + { + "Date": "2020-09-03", + "Value": 423, + "Series": "Electronics" + }, + { + "Date": "2020-09-12", + "Value": 442, + "Series": "Electronics" + }, + { + "Date": "2020-09-21", + "Value": 458, + "Series": "Electronics" + }, + { + "Date": "2020-09-30", + "Value": 476, + "Series": "Electronics" + }, + { + "Date": "2020-10-09", + "Value": 494, + "Series": "Electronics" + }, + { + "Date": "2020-10-19", + "Value": 509, + "Series": "Electronics" + }, + { + "Date": "2020-10-28", + "Value": 526, + "Series": "Electronics" + }, + { + "Date": "2020-11-06", + "Value": 534, + "Series": "Electronics" + }, + { + "Date": "2020-11-15", + "Value": 530, + "Series": "Electronics" + }, + { + "Date": "2020-11-24", + "Value": 523, + "Series": "Electronics" + }, + { + "Date": "2020-12-03", + "Value": 526, + "Series": "Electronics" + }, + { + "Date": "2020-12-12", + "Value": 540, + "Series": "Electronics" + }, + { + "Date": "2020-12-21", + "Value": 545, + "Series": "Electronics" + }, + { + "Date": "2020-12-31", + "Value": 544, + "Series": "Electronics" + }, + { + "Date": "2021-01-09", + "Value": 557, + "Series": "Electronics" + }, + { + "Date": "2021-01-18", + "Value": 577, + "Series": "Electronics" + }, + { + "Date": "2021-01-27", + "Value": 597, + "Series": "Electronics" + }, + { + "Date": "2021-02-05", + "Value": 610, + "Series": "Electronics" + }, + { + "Date": "2021-02-14", + "Value": 617, + "Series": "Electronics" + }, + { + "Date": "2021-02-23", + "Value": 629, + "Series": "Electronics" + }, + { + "Date": "2021-03-04", + "Value": 631, + "Series": "Electronics" + }, + { + "Date": "2021-03-14", + "Value": 623, + "Series": "Electronics" + }, + { + "Date": "2021-03-23", + "Value": 625, + "Series": "Electronics" + }, + { + "Date": "2021-04-01", + "Value": 627, + "Series": "Electronics" + }, + { + "Date": "2021-04-10", + "Value": 629, + "Series": "Electronics" + }, + { + "Date": "2021-04-19", + "Value": 633, + "Series": "Electronics" + }, + { + "Date": "2021-04-28", + "Value": 637, + "Series": "Electronics" + }, + { + "Date": "2021-05-07", + "Value": 646, + "Series": "Electronics" + }, + { + "Date": "2021-05-16", + "Value": 656, + "Series": "Electronics" + }, + { + "Date": "2021-05-26", + "Value": 668, + "Series": "Electronics" + }, + { + "Date": "2021-06-04", + "Value": 687, + "Series": "Electronics" + }, + { + "Date": "2021-06-13", + "Value": 695, + "Series": "Electronics" + }, + { + "Date": "2021-06-22", + "Value": 706, + "Series": "Electronics" + }, + { + "Date": "2021-07-01", + "Value": 719, + "Series": "Electronics" + }, + { + "Date": "2021-07-10", + "Value": 731, + "Series": "Electronics" + }, + { + "Date": "2021-07-19", + "Value": 745, + "Series": "Electronics" + }, + { + "Date": "2021-07-28", + "Value": 744, + "Series": "Electronics" + }, + { + "Date": "2021-08-07", + "Value": 750, + "Series": "Electronics" + }, + { + "Date": "2021-08-16", + "Value": 752, + "Series": "Electronics" + }, + { + "Date": "2021-08-25", + "Value": 762, + "Series": "Electronics" + }, + { + "Date": "2021-09-03", + "Value": 778, + "Series": "Electronics" + }, + { + "Date": "2021-09-12", + "Value": 792, + "Series": "Electronics" + }, + { + "Date": "2021-09-21", + "Value": 794, + "Series": "Electronics" + }, + { + "Date": "2021-09-30", + "Value": 807, + "Series": "Electronics" + }, + { + "Date": "2021-10-09", + "Value": 819, + "Series": "Electronics" + }, + { + "Date": "2021-10-19", + "Value": 831, + "Series": "Electronics" + }, + { + "Date": "2021-10-28", + "Value": 830, + "Series": "Electronics" + }, + { + "Date": "2021-11-06", + "Value": 833, + "Series": "Electronics" + }, + { + "Date": "2021-11-15", + "Value": 844, + "Series": "Electronics" + }, + { + "Date": "2021-11-24", + "Value": 864, + "Series": "Electronics" + }, + { + "Date": "2021-12-03", + "Value": 868, + "Series": "Electronics" + }, + { + "Date": "2021-12-12", + "Value": 880, + "Series": "Electronics" + }, + { + "Date": "2021-12-21", + "Value": 899, + "Series": "Electronics" + }, + { + "Date": "2021-12-31", + "Value": 902, + "Series": "Electronics" + }, + { + "Date": "2022-01-09", + "Value": 907, + "Series": "Electronics" + }, + { + "Date": "2022-01-18", + "Value": 912, + "Series": "Electronics" + }, + { + "Date": "2022-01-27", + "Value": 909, + "Series": "Electronics" + }, + { + "Date": "2022-02-05", + "Value": 908, + "Series": "Electronics" + }, + { + "Date": "2022-02-14", + "Value": 900, + "Series": "Electronics" + }, + { + "Date": "2022-02-23", + "Value": 887, + "Series": "Electronics" + }, + { + "Date": "2022-03-04", + "Value": 883, + "Series": "Electronics" + }, + { + "Date": "2022-03-14", + "Value": 894, + "Series": "Electronics" + }, + { + "Date": "2022-03-23", + "Value": 912, + "Series": "Electronics" + }, + { + "Date": "2022-04-01", + "Value": 928, + "Series": "Electronics" + }, + { + "Date": "2022-04-10", + "Value": 934, + "Series": "Electronics" + }, + { + "Date": "2022-04-19", + "Value": 948, + "Series": "Electronics" + }, + { + "Date": "2022-04-28", + "Value": 948, + "Series": "Electronics" + }, + { + "Date": "2022-05-07", + "Value": 952, + "Series": "Electronics" + }, + { + "Date": "2022-05-16", + "Value": 957, + "Series": "Electronics" + }, + { + "Date": "2022-05-26", + "Value": 953, + "Series": "Electronics" + }, + { + "Date": "2022-06-04", + "Value": 959, + "Series": "Electronics" + }, + { + "Date": "2022-06-13", + "Value": 954, + "Series": "Electronics" + }, + { + "Date": "2022-06-22", + "Value": 963, + "Series": "Electronics" + }, + { + "Date": "2022-07-01", + "Value": 960, + "Series": "Electronics" + }, + { + "Date": "2022-07-10", + "Value": 966, + "Series": "Electronics" + }, + { + "Date": "2022-07-19", + "Value": 979, + "Series": "Electronics" + }, + { + "Date": "2022-07-28", + "Value": 982, + "Series": "Electronics" + }, + { + "Date": "2022-08-07", + "Value": 981, + "Series": "Electronics" + }, + { + "Date": "2022-08-16", + "Value": 988, + "Series": "Electronics" + }, + { + "Date": "2022-08-25", + "Value": 995, + "Series": "Electronics" + }, + { + "Date": "2022-09-03", + "Value": 1000, + "Series": "Electronics" + }, + { + "Date": "2022-09-12", + "Value": 997, + "Series": "Electronics" + }, + { + "Date": "2022-09-21", + "Value": 992, + "Series": "Electronics" + }, + { + "Date": "2022-09-30", + "Value": 1002, + "Series": "Electronics" + }, + { + "Date": "2022-10-09", + "Value": 1011, + "Series": "Electronics" + }, + { + "Date": "2022-10-19", + "Value": 1025, + "Series": "Electronics" + }, + { + "Date": "2022-10-28", + "Value": 1037, + "Series": "Electronics" + }, + { + "Date": "2022-11-06", + "Value": 1053, + "Series": "Electronics" + }, + { + "Date": "2022-11-15", + "Value": 1074, + "Series": "Electronics" + }, + { + "Date": "2022-11-24", + "Value": 1086, + "Series": "Electronics" + }, + { + "Date": "2022-12-03", + "Value": 1100, + "Series": "Electronics" + }, + { + "Date": "2022-12-12", + "Value": 1113, + "Series": "Electronics" + }, + { + "Date": "2022-12-21", + "Value": 1122, + "Series": "Electronics" + }, + { + "Date": "2020-01-01", + "Value": 215, + "Series": "Clothing" + }, + { + "Date": "2020-01-10", + "Value": 224, + "Series": "Clothing" + }, + { + "Date": "2020-01-19", + "Value": 240, + "Series": "Clothing" + }, + { + "Date": "2020-01-28", + "Value": 248, + "Series": "Clothing" + }, + { + "Date": "2020-02-06", + "Value": 251, + "Series": "Clothing" + }, + { + "Date": "2020-02-15", + "Value": 248, + "Series": "Clothing" + }, + { + "Date": "2020-02-24", + "Value": 244, + "Series": "Clothing" + }, + { + "Date": "2020-03-04", + "Value": 251, + "Series": "Clothing" + }, + { + "Date": "2020-03-14", + "Value": 259, + "Series": "Clothing" + }, + { + "Date": "2020-03-23", + "Value": 267, + "Series": "Clothing" + }, + { + "Date": "2020-04-01", + "Value": 272, + "Series": "Clothing" + }, + { + "Date": "2020-04-10", + "Value": 277, + "Series": "Clothing" + }, + { + "Date": "2020-04-19", + "Value": 275, + "Series": "Clothing" + }, + { + "Date": "2020-04-28", + "Value": 285, + "Series": "Clothing" + }, + { + "Date": "2020-05-07", + "Value": 295, + "Series": "Clothing" + }, + { + "Date": "2020-05-16", + "Value": 305, + "Series": "Clothing" + }, + { + "Date": "2020-05-26", + "Value": 316, + "Series": "Clothing" + }, + { + "Date": "2020-06-04", + "Value": 321, + "Series": "Clothing" + }, + { + "Date": "2020-06-13", + "Value": 322, + "Series": "Clothing" + }, + { + "Date": "2020-06-22", + "Value": 328, + "Series": "Clothing" + }, + { + "Date": "2020-07-01", + "Value": 339, + "Series": "Clothing" + }, + { + "Date": "2020-07-10", + "Value": 349, + "Series": "Clothing" + }, + { + "Date": "2020-07-19", + "Value": 355, + "Series": "Clothing" + }, + { + "Date": "2020-07-28", + "Value": 361, + "Series": "Clothing" + }, + { + "Date": "2020-08-07", + "Value": 369, + "Series": "Clothing" + }, + { + "Date": "2020-08-16", + "Value": 372, + "Series": "Clothing" + }, + { + "Date": "2020-08-25", + "Value": 377, + "Series": "Clothing" + }, + { + "Date": "2020-09-03", + "Value": 388, + "Series": "Clothing" + }, + { + "Date": "2020-09-12", + "Value": 405, + "Series": "Clothing" + }, + { + "Date": "2020-09-21", + "Value": 416, + "Series": "Clothing" + }, + { + "Date": "2020-09-30", + "Value": 420, + "Series": "Clothing" + }, + { + "Date": "2020-10-09", + "Value": 432, + "Series": "Clothing" + }, + { + "Date": "2020-10-19", + "Value": 436, + "Series": "Clothing" + }, + { + "Date": "2020-10-28", + "Value": 444, + "Series": "Clothing" + }, + { + "Date": "2020-11-06", + "Value": 453, + "Series": "Clothing" + }, + { + "Date": "2020-11-15", + "Value": 465, + "Series": "Clothing" + }, + { + "Date": "2020-11-24", + "Value": 469, + "Series": "Clothing" + }, + { + "Date": "2020-12-03", + "Value": 480, + "Series": "Clothing" + }, + { + "Date": "2020-12-12", + "Value": 493, + "Series": "Clothing" + }, + { + "Date": "2020-12-21", + "Value": 497, + "Series": "Clothing" + }, + { + "Date": "2020-12-31", + "Value": 506, + "Series": "Clothing" + }, + { + "Date": "2021-01-09", + "Value": 513, + "Series": "Clothing" + }, + { + "Date": "2021-01-18", + "Value": 527, + "Series": "Clothing" + }, + { + "Date": "2021-01-27", + "Value": 539, + "Series": "Clothing" + }, + { + "Date": "2021-02-05", + "Value": 557, + "Series": "Clothing" + }, + { + "Date": "2021-02-14", + "Value": 566, + "Series": "Clothing" + }, + { + "Date": "2021-02-23", + "Value": 567, + "Series": "Clothing" + }, + { + "Date": "2021-03-04", + "Value": 566, + "Series": "Clothing" + }, + { + "Date": "2021-03-14", + "Value": 564, + "Series": "Clothing" + }, + { + "Date": "2021-03-23", + "Value": 558, + "Series": "Clothing" + }, + { + "Date": "2021-04-01", + "Value": 552, + "Series": "Clothing" + }, + { + "Date": "2021-04-10", + "Value": 556, + "Series": "Clothing" + }, + { + "Date": "2021-04-19", + "Value": 559, + "Series": "Clothing" + }, + { + "Date": "2021-04-28", + "Value": 560, + "Series": "Clothing" + }, + { + "Date": "2021-05-07", + "Value": 559, + "Series": "Clothing" + }, + { + "Date": "2021-05-16", + "Value": 564, + "Series": "Clothing" + }, + { + "Date": "2021-05-26", + "Value": 573, + "Series": "Clothing" + }, + { + "Date": "2021-06-04", + "Value": 582, + "Series": "Clothing" + }, + { + "Date": "2021-06-13", + "Value": 592, + "Series": "Clothing" + }, + { + "Date": "2021-06-22", + "Value": 601, + "Series": "Clothing" + }, + { + "Date": "2021-07-01", + "Value": 605, + "Series": "Clothing" + }, + { + "Date": "2021-07-10", + "Value": 605, + "Series": "Clothing" + }, + { + "Date": "2021-07-19", + "Value": 601, + "Series": "Clothing" + }, + { + "Date": "2021-07-28", + "Value": 598, + "Series": "Clothing" + }, + { + "Date": "2021-08-07", + "Value": 594, + "Series": "Clothing" + }, + { + "Date": "2021-08-16", + "Value": 602, + "Series": "Clothing" + }, + { + "Date": "2021-08-25", + "Value": 602, + "Series": "Clothing" + }, + { + "Date": "2021-09-03", + "Value": 609, + "Series": "Clothing" + }, + { + "Date": "2021-09-12", + "Value": 616, + "Series": "Clothing" + }, + { + "Date": "2021-09-21", + "Value": 620, + "Series": "Clothing" + }, + { + "Date": "2021-09-30", + "Value": 629, + "Series": "Clothing" + }, + { + "Date": "2021-10-09", + "Value": 645, + "Series": "Clothing" + }, + { + "Date": "2021-10-19", + "Value": 665, + "Series": "Clothing" + }, + { + "Date": "2021-10-28", + "Value": 686, + "Series": "Clothing" + }, + { + "Date": "2021-11-06", + "Value": 696, + "Series": "Clothing" + }, + { + "Date": "2021-11-15", + "Value": 698, + "Series": "Clothing" + }, + { + "Date": "2021-11-24", + "Value": 695, + "Series": "Clothing" + }, + { + "Date": "2021-12-03", + "Value": 701, + "Series": "Clothing" + }, + { + "Date": "2021-12-12", + "Value": 705, + "Series": "Clothing" + }, + { + "Date": "2021-12-21", + "Value": 713, + "Series": "Clothing" + }, + { + "Date": "2021-12-31", + "Value": 727, + "Series": "Clothing" + }, + { + "Date": "2022-01-09", + "Value": 738, + "Series": "Clothing" + }, + { + "Date": "2022-01-18", + "Value": 742, + "Series": "Clothing" + }, + { + "Date": "2022-01-27", + "Value": 751, + "Series": "Clothing" + }, + { + "Date": "2022-02-05", + "Value": 763, + "Series": "Clothing" + }, + { + "Date": "2022-02-14", + "Value": 780, + "Series": "Clothing" + }, + { + "Date": "2022-02-23", + "Value": 791, + "Series": "Clothing" + }, + { + "Date": "2022-03-04", + "Value": 803, + "Series": "Clothing" + }, + { + "Date": "2022-03-14", + "Value": 818, + "Series": "Clothing" + }, + { + "Date": "2022-03-23", + "Value": 831, + "Series": "Clothing" + }, + { + "Date": "2022-04-01", + "Value": 846, + "Series": "Clothing" + }, + { + "Date": "2022-04-10", + "Value": 851, + "Series": "Clothing" + }, + { + "Date": "2022-04-19", + "Value": 851, + "Series": "Clothing" + }, + { + "Date": "2022-04-28", + "Value": 860, + "Series": "Clothing" + }, + { + "Date": "2022-05-07", + "Value": 875, + "Series": "Clothing" + }, + { + "Date": "2022-05-16", + "Value": 891, + "Series": "Clothing" + }, + { + "Date": "2022-05-26", + "Value": 910, + "Series": "Clothing" + }, + { + "Date": "2022-06-04", + "Value": 929, + "Series": "Clothing" + }, + { + "Date": "2022-06-13", + "Value": 939, + "Series": "Clothing" + }, + { + "Date": "2022-06-22", + "Value": 954, + "Series": "Clothing" + }, + { + "Date": "2022-07-01", + "Value": 970, + "Series": "Clothing" + }, + { + "Date": "2022-07-10", + "Value": 980, + "Series": "Clothing" + }, + { + "Date": "2022-07-19", + "Value": 983, + "Series": "Clothing" + }, + { + "Date": "2022-07-28", + "Value": 991, + "Series": "Clothing" + }, + { + "Date": "2022-08-07", + "Value": 992, + "Series": "Clothing" + }, + { + "Date": "2022-08-16", + "Value": 1001, + "Series": "Clothing" + }, + { + "Date": "2022-08-25", + "Value": 1003, + "Series": "Clothing" + }, + { + "Date": "2022-09-03", + "Value": 1000, + "Series": "Clothing" + }, + { + "Date": "2022-09-12", + "Value": 994, + "Series": "Clothing" + }, + { + "Date": "2022-09-21", + "Value": 987, + "Series": "Clothing" + }, + { + "Date": "2022-09-30", + "Value": 993, + "Series": "Clothing" + }, + { + "Date": "2022-10-09", + "Value": 998, + "Series": "Clothing" + }, + { + "Date": "2022-10-19", + "Value": 1011, + "Series": "Clothing" + }, + { + "Date": "2022-10-28", + "Value": 1021, + "Series": "Clothing" + }, + { + "Date": "2022-11-06", + "Value": 1029, + "Series": "Clothing" + }, + { + "Date": "2022-11-15", + "Value": 1033, + "Series": "Clothing" + }, + { + "Date": "2022-11-24", + "Value": 1043, + "Series": "Clothing" + }, + { + "Date": "2022-12-03", + "Value": 1054, + "Series": "Clothing" + }, + { + "Date": "2022-12-12", + "Value": 1065, + "Series": "Clothing" + }, + { + "Date": "2022-12-21", + "Value": 1080, + "Series": "Clothing" + }, + { + "Date": "2020-01-01", + "Value": 179, + "Series": "Food" + }, + { + "Date": "2020-01-10", + "Value": 167, + "Series": "Food" + }, + { + "Date": "2020-01-19", + "Value": 179, + "Series": "Food" + }, + { + "Date": "2020-01-28", + "Value": 177, + "Series": "Food" + }, + { + "Date": "2020-02-06", + "Value": 192, + "Series": "Food" + }, + { + "Date": "2020-02-15", + "Value": 201, + "Series": "Food" + }, + { + "Date": "2020-02-24", + "Value": 225, + "Series": "Food" + }, + { + "Date": "2020-03-04", + "Value": 256, + "Series": "Food" + }, + { + "Date": "2020-03-14", + "Value": 269, + "Series": "Food" + }, + { + "Date": "2020-03-23", + "Value": 281, + "Series": "Food" + }, + { + "Date": "2020-04-01", + "Value": 305, + "Series": "Food" + }, + { + "Date": "2020-04-10", + "Value": 334, + "Series": "Food" + }, + { + "Date": "2020-04-19", + "Value": 374, + "Series": "Food" + }, + { + "Date": "2020-04-28", + "Value": 405, + "Series": "Food" + }, + { + "Date": "2020-05-07", + "Value": 437, + "Series": "Food" + }, + { + "Date": "2020-05-16", + "Value": 464, + "Series": "Food" + }, + { + "Date": "2020-05-26", + "Value": 486, + "Series": "Food" + }, + { + "Date": "2020-06-04", + "Value": 496, + "Series": "Food" + }, + { + "Date": "2020-06-13", + "Value": 520, + "Series": "Food" + }, + { + "Date": "2020-06-22", + "Value": 525, + "Series": "Food" + }, + { + "Date": "2020-07-01", + "Value": 528, + "Series": "Food" + }, + { + "Date": "2020-07-10", + "Value": 534, + "Series": "Food" + }, + { + "Date": "2020-07-19", + "Value": 540, + "Series": "Food" + }, + { + "Date": "2020-07-28", + "Value": 537, + "Series": "Food" + }, + { + "Date": "2020-08-07", + "Value": 527, + "Series": "Food" + }, + { + "Date": "2020-08-16", + "Value": 539, + "Series": "Food" + }, + { + "Date": "2020-08-25", + "Value": 542, + "Series": "Food" + }, + { + "Date": "2020-09-03", + "Value": 561, + "Series": "Food" + }, + { + "Date": "2020-09-12", + "Value": 576, + "Series": "Food" + }, + { + "Date": "2020-09-21", + "Value": 584, + "Series": "Food" + }, + { + "Date": "2020-09-30", + "Value": 581, + "Series": "Food" + }, + { + "Date": "2020-10-09", + "Value": 566, + "Series": "Food" + }, + { + "Date": "2020-10-19", + "Value": 546, + "Series": "Food" + }, + { + "Date": "2020-10-28", + "Value": 555, + "Series": "Food" + }, + { + "Date": "2020-11-06", + "Value": 568, + "Series": "Food" + }, + { + "Date": "2020-11-15", + "Value": 563, + "Series": "Food" + }, + { + "Date": "2020-11-24", + "Value": 563, + "Series": "Food" + }, + { + "Date": "2020-12-03", + "Value": 562, + "Series": "Food" + }, + { + "Date": "2020-12-12", + "Value": 577, + "Series": "Food" + }, + { + "Date": "2020-12-21", + "Value": 595, + "Series": "Food" + }, + { + "Date": "2020-12-31", + "Value": 599, + "Series": "Food" + }, + { + "Date": "2021-01-09", + "Value": 606, + "Series": "Food" + }, + { + "Date": "2021-01-18", + "Value": 607, + "Series": "Food" + }, + { + "Date": "2021-01-27", + "Value": 624, + "Series": "Food" + }, + { + "Date": "2021-02-05", + "Value": 654, + "Series": "Food" + }, + { + "Date": "2021-02-14", + "Value": 689, + "Series": "Food" + }, + { + "Date": "2021-02-23", + "Value": 727, + "Series": "Food" + }, + { + "Date": "2021-03-04", + "Value": 736, + "Series": "Food" + }, + { + "Date": "2021-03-14", + "Value": 746, + "Series": "Food" + }, + { + "Date": "2021-03-23", + "Value": 750, + "Series": "Food" + }, + { + "Date": "2021-04-01", + "Value": 754, + "Series": "Food" + }, + { + "Date": "2021-04-10", + "Value": 767, + "Series": "Food" + }, + { + "Date": "2021-04-19", + "Value": 767, + "Series": "Food" + }, + { + "Date": "2021-04-28", + "Value": 781, + "Series": "Food" + }, + { + "Date": "2021-05-07", + "Value": 785, + "Series": "Food" + }, + { + "Date": "2021-05-16", + "Value": 789, + "Series": "Food" + }, + { + "Date": "2021-05-26", + "Value": 787, + "Series": "Food" + }, + { + "Date": "2021-06-04", + "Value": 772, + "Series": "Food" + }, + { + "Date": "2021-06-13", + "Value": 754, + "Series": "Food" + }, + { + "Date": "2021-06-22", + "Value": 757, + "Series": "Food" + }, + { + "Date": "2021-07-01", + "Value": 765, + "Series": "Food" + }, + { + "Date": "2021-07-10", + "Value": 763, + "Series": "Food" + }, + { + "Date": "2021-07-19", + "Value": 756, + "Series": "Food" + }, + { + "Date": "2021-07-28", + "Value": 746, + "Series": "Food" + }, + { + "Date": "2021-08-07", + "Value": 751, + "Series": "Food" + }, + { + "Date": "2021-08-16", + "Value": 759, + "Series": "Food" + }, + { + "Date": "2021-08-25", + "Value": 787, + "Series": "Food" + }, + { + "Date": "2021-09-03", + "Value": 814, + "Series": "Food" + }, + { + "Date": "2021-09-12", + "Value": 849, + "Series": "Food" + }, + { + "Date": "2021-09-21", + "Value": 869, + "Series": "Food" + }, + { + "Date": "2021-09-30", + "Value": 868, + "Series": "Food" + }, + { + "Date": "2021-10-09", + "Value": 867, + "Series": "Food" + }, + { + "Date": "2021-10-19", + "Value": 883, + "Series": "Food" + }, + { + "Date": "2021-10-28", + "Value": 892, + "Series": "Food" + }, + { + "Date": "2021-11-06", + "Value": 895, + "Series": "Food" + }, + { + "Date": "2021-11-15", + "Value": 900, + "Series": "Food" + }, + { + "Date": "2021-11-24", + "Value": 898, + "Series": "Food" + }, + { + "Date": "2021-12-03", + "Value": 918, + "Series": "Food" + }, + { + "Date": "2021-12-12", + "Value": 946, + "Series": "Food" + }, + { + "Date": "2021-12-21", + "Value": 959, + "Series": "Food" + }, + { + "Date": "2021-12-31", + "Value": 989, + "Series": "Food" + }, + { + "Date": "2022-01-09", + "Value": 1007, + "Series": "Food" + }, + { + "Date": "2022-01-18", + "Value": 1012, + "Series": "Food" + }, + { + "Date": "2022-01-27", + "Value": 1007, + "Series": "Food" + }, + { + "Date": "2022-02-05", + "Value": 1006, + "Series": "Food" + }, + { + "Date": "2022-02-14", + "Value": 1005, + "Series": "Food" + }, + { + "Date": "2022-02-23", + "Value": 1026, + "Series": "Food" + }, + { + "Date": "2022-03-04", + "Value": 1036, + "Series": "Food" + }, + { + "Date": "2022-03-14", + "Value": 1052, + "Series": "Food" + }, + { + "Date": "2022-03-23", + "Value": 1055, + "Series": "Food" + }, + { + "Date": "2022-04-01", + "Value": 1063, + "Series": "Food" + }, + { + "Date": "2022-04-10", + "Value": 1059, + "Series": "Food" + }, + { + "Date": "2022-04-19", + "Value": 1066, + "Series": "Food" + }, + { + "Date": "2022-04-28", + "Value": 1093, + "Series": "Food" + }, + { + "Date": "2022-05-07", + "Value": 1121, + "Series": "Food" + }, + { + "Date": "2022-05-16", + "Value": 1124, + "Series": "Food" + }, + { + "Date": "2022-05-26", + "Value": 1123, + "Series": "Food" + }, + { + "Date": "2022-06-04", + "Value": 1136, + "Series": "Food" + }, + { + "Date": "2022-06-13", + "Value": 1151, + "Series": "Food" + }, + { + "Date": "2022-06-22", + "Value": 1164, + "Series": "Food" + }, + { + "Date": "2022-07-01", + "Value": 1184, + "Series": "Food" + }, + { + "Date": "2022-07-10", + "Value": 1187, + "Series": "Food" + }, + { + "Date": "2022-07-19", + "Value": 1177, + "Series": "Food" + }, + { + "Date": "2022-07-28", + "Value": 1184, + "Series": "Food" + }, + { + "Date": "2022-08-07", + "Value": 1188, + "Series": "Food" + }, + { + "Date": "2022-08-16", + "Value": 1188, + "Series": "Food" + }, + { + "Date": "2022-08-25", + "Value": 1210, + "Series": "Food" + }, + { + "Date": "2022-09-03", + "Value": 1229, + "Series": "Food" + }, + { + "Date": "2022-09-12", + "Value": 1239, + "Series": "Food" + }, + { + "Date": "2022-09-21", + "Value": 1260, + "Series": "Food" + }, + { + "Date": "2022-09-30", + "Value": 1261, + "Series": "Food" + }, + { + "Date": "2022-10-09", + "Value": 1273, + "Series": "Food" + }, + { + "Date": "2022-10-19", + "Value": 1287, + "Series": "Food" + }, + { + "Date": "2022-10-28", + "Value": 1285, + "Series": "Food" + }, + { + "Date": "2022-11-06", + "Value": 1303, + "Series": "Food" + }, + { + "Date": "2022-11-15", + "Value": 1336, + "Series": "Food" + }, + { + "Date": "2022-11-24", + "Value": 1372, + "Series": "Food" + }, + { + "Date": "2022-12-03", + "Value": 1406, + "Series": "Food" + }, + { + "Date": "2022-12-12", + "Value": 1430, + "Series": "Food" + }, + { + "Date": "2022-12-21", + "Value": 1437, + "Series": "Food" + }, + { + "Date": "2020-01-01", + "Value": 97, + "Series": "Books" + }, + { + "Date": "2020-01-10", + "Value": 85, + "Series": "Books" + }, + { + "Date": "2020-01-19", + "Value": 86, + "Series": "Books" + }, + { + "Date": "2020-01-28", + "Value": 97, + "Series": "Books" + }, + { + "Date": "2020-02-06", + "Value": 119, + "Series": "Books" + }, + { + "Date": "2020-02-15", + "Value": 136, + "Series": "Books" + }, + { + "Date": "2020-02-24", + "Value": 142, + "Series": "Books" + }, + { + "Date": "2020-03-04", + "Value": 157, + "Series": "Books" + }, + { + "Date": "2020-03-14", + "Value": 159, + "Series": "Books" + }, + { + "Date": "2020-03-23", + "Value": 152, + "Series": "Books" + }, + { + "Date": "2020-04-01", + "Value": 141, + "Series": "Books" + }, + { + "Date": "2020-04-10", + "Value": 128, + "Series": "Books" + }, + { + "Date": "2020-04-19", + "Value": 117, + "Series": "Books" + }, + { + "Date": "2020-04-28", + "Value": 125, + "Series": "Books" + }, + { + "Date": "2020-05-07", + "Value": 126, + "Series": "Books" + }, + { + "Date": "2020-05-16", + "Value": 120, + "Series": "Books" + }, + { + "Date": "2020-05-26", + "Value": 105, + "Series": "Books" + }, + { + "Date": "2020-06-04", + "Value": 90, + "Series": "Books" + }, + { + "Date": "2020-06-13", + "Value": 73, + "Series": "Books" + }, + { + "Date": "2020-06-22", + "Value": 70, + "Series": "Books" + }, + { + "Date": "2020-07-01", + "Value": 76, + "Series": "Books" + }, + { + "Date": "2020-07-10", + "Value": 78, + "Series": "Books" + }, + { + "Date": "2020-07-19", + "Value": 90, + "Series": "Books" + }, + { + "Date": "2020-07-28", + "Value": 88, + "Series": "Books" + }, + { + "Date": "2020-08-07", + "Value": 89, + "Series": "Books" + }, + { + "Date": "2020-08-16", + "Value": 104, + "Series": "Books" + }, + { + "Date": "2020-08-25", + "Value": 118, + "Series": "Books" + }, + { + "Date": "2020-09-03", + "Value": 131, + "Series": "Books" + }, + { + "Date": "2020-09-12", + "Value": 140, + "Series": "Books" + }, + { + "Date": "2020-09-21", + "Value": 143, + "Series": "Books" + }, + { + "Date": "2020-09-30", + "Value": 157, + "Series": "Books" + }, + { + "Date": "2020-10-09", + "Value": 169, + "Series": "Books" + }, + { + "Date": "2020-10-19", + "Value": 180, + "Series": "Books" + }, + { + "Date": "2020-10-28", + "Value": 189, + "Series": "Books" + }, + { + "Date": "2020-11-06", + "Value": 185, + "Series": "Books" + }, + { + "Date": "2020-11-15", + "Value": 191, + "Series": "Books" + }, + { + "Date": "2020-11-24", + "Value": 183, + "Series": "Books" + }, + { + "Date": "2020-12-03", + "Value": 189, + "Series": "Books" + }, + { + "Date": "2020-12-12", + "Value": 191, + "Series": "Books" + }, + { + "Date": "2020-12-21", + "Value": 182, + "Series": "Books" + }, + { + "Date": "2020-12-31", + "Value": 167, + "Series": "Books" + }, + { + "Date": "2021-01-09", + "Value": 158, + "Series": "Books" + }, + { + "Date": "2021-01-18", + "Value": 159, + "Series": "Books" + }, + { + "Date": "2021-01-27", + "Value": 174, + "Series": "Books" + }, + { + "Date": "2021-02-05", + "Value": 181, + "Series": "Books" + }, + { + "Date": "2021-02-14", + "Value": 201, + "Series": "Books" + }, + { + "Date": "2021-02-23", + "Value": 228, + "Series": "Books" + }, + { + "Date": "2021-03-04", + "Value": 241, + "Series": "Books" + }, + { + "Date": "2021-03-14", + "Value": 251, + "Series": "Books" + }, + { + "Date": "2021-03-23", + "Value": 245, + "Series": "Books" + }, + { + "Date": "2021-04-01", + "Value": 249, + "Series": "Books" + }, + { + "Date": "2021-04-10", + "Value": 267, + "Series": "Books" + }, + { + "Date": "2021-04-19", + "Value": 265, + "Series": "Books" + }, + { + "Date": "2021-04-28", + "Value": 277, + "Series": "Books" + }, + { + "Date": "2021-05-07", + "Value": 283, + "Series": "Books" + }, + { + "Date": "2021-05-16", + "Value": 276, + "Series": "Books" + }, + { + "Date": "2021-05-26", + "Value": 285, + "Series": "Books" + }, + { + "Date": "2021-06-04", + "Value": 298, + "Series": "Books" + }, + { + "Date": "2021-06-13", + "Value": 313, + "Series": "Books" + }, + { + "Date": "2021-06-22", + "Value": 334, + "Series": "Books" + }, + { + "Date": "2021-07-01", + "Value": 357, + "Series": "Books" + }, + { + "Date": "2021-07-10", + "Value": 371, + "Series": "Books" + }, + { + "Date": "2021-07-19", + "Value": 380, + "Series": "Books" + }, + { + "Date": "2021-07-28", + "Value": 394, + "Series": "Books" + }, + { + "Date": "2021-08-07", + "Value": 416, + "Series": "Books" + }, + { + "Date": "2021-08-16", + "Value": 435, + "Series": "Books" + }, + { + "Date": "2021-08-25", + "Value": 436, + "Series": "Books" + }, + { + "Date": "2021-09-03", + "Value": 447, + "Series": "Books" + }, + { + "Date": "2021-09-12", + "Value": 465, + "Series": "Books" + }, + { + "Date": "2021-09-21", + "Value": 485, + "Series": "Books" + }, + { + "Date": "2021-09-30", + "Value": 503, + "Series": "Books" + }, + { + "Date": "2021-10-09", + "Value": 529, + "Series": "Books" + }, + { + "Date": "2021-10-19", + "Value": 540, + "Series": "Books" + }, + { + "Date": "2021-10-28", + "Value": 543, + "Series": "Books" + }, + { + "Date": "2021-11-06", + "Value": 536, + "Series": "Books" + }, + { + "Date": "2021-11-15", + "Value": 529, + "Series": "Books" + }, + { + "Date": "2021-11-24", + "Value": 536, + "Series": "Books" + }, + { + "Date": "2021-12-03", + "Value": 551, + "Series": "Books" + }, + { + "Date": "2021-12-12", + "Value": 550, + "Series": "Books" + }, + { + "Date": "2021-12-21", + "Value": 546, + "Series": "Books" + }, + { + "Date": "2021-12-31", + "Value": 547, + "Series": "Books" + }, + { + "Date": "2022-01-09", + "Value": 537, + "Series": "Books" + }, + { + "Date": "2022-01-18", + "Value": 520, + "Series": "Books" + }, + { + "Date": "2022-01-27", + "Value": 512, + "Series": "Books" + }, + { + "Date": "2022-02-05", + "Value": 510, + "Series": "Books" + }, + { + "Date": "2022-02-14", + "Value": 511, + "Series": "Books" + }, + { + "Date": "2022-02-23", + "Value": 511, + "Series": "Books" + }, + { + "Date": "2022-03-04", + "Value": 519, + "Series": "Books" + }, + { + "Date": "2022-03-14", + "Value": 529, + "Series": "Books" + }, + { + "Date": "2022-03-23", + "Value": 522, + "Series": "Books" + }, + { + "Date": "2022-04-01", + "Value": 530, + "Series": "Books" + }, + { + "Date": "2022-04-10", + "Value": 550, + "Series": "Books" + }, + { + "Date": "2022-04-19", + "Value": 567, + "Series": "Books" + }, + { + "Date": "2022-04-28", + "Value": 593, + "Series": "Books" + }, + { + "Date": "2022-05-07", + "Value": 606, + "Series": "Books" + }, + { + "Date": "2022-05-16", + "Value": 624, + "Series": "Books" + }, + { + "Date": "2022-05-26", + "Value": 629, + "Series": "Books" + }, + { + "Date": "2022-06-04", + "Value": 622, + "Series": "Books" + }, + { + "Date": "2022-06-13", + "Value": 632, + "Series": "Books" + }, + { + "Date": "2022-06-22", + "Value": 646, + "Series": "Books" + }, + { + "Date": "2022-07-01", + "Value": 648, + "Series": "Books" + }, + { + "Date": "2022-07-10", + "Value": 658, + "Series": "Books" + }, + { + "Date": "2022-07-19", + "Value": 672, + "Series": "Books" + }, + { + "Date": "2022-07-28", + "Value": 693, + "Series": "Books" + }, + { + "Date": "2022-08-07", + "Value": 719, + "Series": "Books" + }, + { + "Date": "2022-08-16", + "Value": 742, + "Series": "Books" + }, + { + "Date": "2022-08-25", + "Value": 759, + "Series": "Books" + }, + { + "Date": "2022-09-03", + "Value": 775, + "Series": "Books" + }, + { + "Date": "2022-09-12", + "Value": 798, + "Series": "Books" + }, + { + "Date": "2022-09-21", + "Value": 819, + "Series": "Books" + }, + { + "Date": "2022-09-30", + "Value": 826, + "Series": "Books" + }, + { + "Date": "2022-10-09", + "Value": 842, + "Series": "Books" + }, + { + "Date": "2022-10-19", + "Value": 865, + "Series": "Books" + }, + { + "Date": "2022-10-28", + "Value": 885, + "Series": "Books" + }, + { + "Date": "2022-11-06", + "Value": 895, + "Series": "Books" + }, + { + "Date": "2022-11-15", + "Value": 915, + "Series": "Books" + }, + { + "Date": "2022-11-24", + "Value": 918, + "Series": "Books" + }, + { + "Date": "2022-12-03", + "Value": 928, + "Series": "Books" + }, + { + "Date": "2022-12-12", + "Value": 937, + "Series": "Books" + }, + { + "Date": "2022-12-21", + "Value": 939, + "Series": "Books" + }, + { + "Date": "2020-01-01", + "Value": 183, + "Series": "Sports" + }, + { + "Date": "2020-01-10", + "Value": 189, + "Series": "Sports" + }, + { + "Date": "2020-01-19", + "Value": 185, + "Series": "Sports" + }, + { + "Date": "2020-01-28", + "Value": 183, + "Series": "Sports" + }, + { + "Date": "2020-02-06", + "Value": 182, + "Series": "Sports" + }, + { + "Date": "2020-02-15", + "Value": 193, + "Series": "Sports" + }, + { + "Date": "2020-02-24", + "Value": 198, + "Series": "Sports" + }, + { + "Date": "2020-03-04", + "Value": 195, + "Series": "Sports" + }, + { + "Date": "2020-03-14", + "Value": 186, + "Series": "Sports" + }, + { + "Date": "2020-03-23", + "Value": 178, + "Series": "Sports" + }, + { + "Date": "2020-04-01", + "Value": 168, + "Series": "Sports" + }, + { + "Date": "2020-04-10", + "Value": 156, + "Series": "Sports" + }, + { + "Date": "2020-04-19", + "Value": 158, + "Series": "Sports" + }, + { + "Date": "2020-04-28", + "Value": 171, + "Series": "Sports" + }, + { + "Date": "2020-05-07", + "Value": 177, + "Series": "Sports" + }, + { + "Date": "2020-05-16", + "Value": 185, + "Series": "Sports" + }, + { + "Date": "2020-05-26", + "Value": 196, + "Series": "Sports" + }, + { + "Date": "2020-06-04", + "Value": 199, + "Series": "Sports" + }, + { + "Date": "2020-06-13", + "Value": 202, + "Series": "Sports" + }, + { + "Date": "2020-06-22", + "Value": 210, + "Series": "Sports" + }, + { + "Date": "2020-07-01", + "Value": 223, + "Series": "Sports" + }, + { + "Date": "2020-07-10", + "Value": 243, + "Series": "Sports" + }, + { + "Date": "2020-07-19", + "Value": 261, + "Series": "Sports" + }, + { + "Date": "2020-07-28", + "Value": 274, + "Series": "Sports" + }, + { + "Date": "2020-08-07", + "Value": 278, + "Series": "Sports" + }, + { + "Date": "2020-08-16", + "Value": 274, + "Series": "Sports" + }, + { + "Date": "2020-08-25", + "Value": 280, + "Series": "Sports" + }, + { + "Date": "2020-09-03", + "Value": 276, + "Series": "Sports" + }, + { + "Date": "2020-09-12", + "Value": 272, + "Series": "Sports" + }, + { + "Date": "2020-09-21", + "Value": 276, + "Series": "Sports" + }, + { + "Date": "2020-09-30", + "Value": 287, + "Series": "Sports" + }, + { + "Date": "2020-10-09", + "Value": 305, + "Series": "Sports" + }, + { + "Date": "2020-10-19", + "Value": 319, + "Series": "Sports" + }, + { + "Date": "2020-10-28", + "Value": 325, + "Series": "Sports" + }, + { + "Date": "2020-11-06", + "Value": 333, + "Series": "Sports" + }, + { + "Date": "2020-11-15", + "Value": 338, + "Series": "Sports" + }, + { + "Date": "2020-11-24", + "Value": 341, + "Series": "Sports" + }, + { + "Date": "2020-12-03", + "Value": 344, + "Series": "Sports" + }, + { + "Date": "2020-12-12", + "Value": 348, + "Series": "Sports" + }, + { + "Date": "2020-12-21", + "Value": 347, + "Series": "Sports" + }, + { + "Date": "2020-12-31", + "Value": 357, + "Series": "Sports" + }, + { + "Date": "2021-01-09", + "Value": 371, + "Series": "Sports" + }, + { + "Date": "2021-01-18", + "Value": 390, + "Series": "Sports" + }, + { + "Date": "2021-01-27", + "Value": 397, + "Series": "Sports" + }, + { + "Date": "2021-02-05", + "Value": 406, + "Series": "Sports" + }, + { + "Date": "2021-02-14", + "Value": 418, + "Series": "Sports" + }, + { + "Date": "2021-02-23", + "Value": 422, + "Series": "Sports" + }, + { + "Date": "2021-03-04", + "Value": 425, + "Series": "Sports" + }, + { + "Date": "2021-03-14", + "Value": 435, + "Series": "Sports" + }, + { + "Date": "2021-03-23", + "Value": 445, + "Series": "Sports" + }, + { + "Date": "2021-04-01", + "Value": 450, + "Series": "Sports" + }, + { + "Date": "2021-04-10", + "Value": 456, + "Series": "Sports" + }, + { + "Date": "2021-04-19", + "Value": 458, + "Series": "Sports" + }, + { + "Date": "2021-04-28", + "Value": 471, + "Series": "Sports" + }, + { + "Date": "2021-05-07", + "Value": 485, + "Series": "Sports" + }, + { + "Date": "2021-05-16", + "Value": 492, + "Series": "Sports" + }, + { + "Date": "2021-05-26", + "Value": 502, + "Series": "Sports" + }, + { + "Date": "2021-06-04", + "Value": 512, + "Series": "Sports" + }, + { + "Date": "2021-06-13", + "Value": 511, + "Series": "Sports" + }, + { + "Date": "2021-06-22", + "Value": 509, + "Series": "Sports" + }, + { + "Date": "2021-07-01", + "Value": 506, + "Series": "Sports" + }, + { + "Date": "2021-07-10", + "Value": 510, + "Series": "Sports" + }, + { + "Date": "2021-07-19", + "Value": 516, + "Series": "Sports" + }, + { + "Date": "2021-07-28", + "Value": 532, + "Series": "Sports" + }, + { + "Date": "2021-08-07", + "Value": 545, + "Series": "Sports" + }, + { + "Date": "2021-08-16", + "Value": 558, + "Series": "Sports" + }, + { + "Date": "2021-08-25", + "Value": 569, + "Series": "Sports" + }, + { + "Date": "2021-09-03", + "Value": 579, + "Series": "Sports" + }, + { + "Date": "2021-09-12", + "Value": 592, + "Series": "Sports" + }, + { + "Date": "2021-09-21", + "Value": 600, + "Series": "Sports" + }, + { + "Date": "2021-09-30", + "Value": 597, + "Series": "Sports" + }, + { + "Date": "2021-10-09", + "Value": 595, + "Series": "Sports" + }, + { + "Date": "2021-10-19", + "Value": 603, + "Series": "Sports" + }, + { + "Date": "2021-10-28", + "Value": 607, + "Series": "Sports" + }, + { + "Date": "2021-11-06", + "Value": 608, + "Series": "Sports" + }, + { + "Date": "2021-11-15", + "Value": 605, + "Series": "Sports" + }, + { + "Date": "2021-11-24", + "Value": 604, + "Series": "Sports" + }, + { + "Date": "2021-12-03", + "Value": 613, + "Series": "Sports" + }, + { + "Date": "2021-12-12", + "Value": 611, + "Series": "Sports" + }, + { + "Date": "2021-12-21", + "Value": 612, + "Series": "Sports" + }, + { + "Date": "2021-12-31", + "Value": 606, + "Series": "Sports" + }, + { + "Date": "2022-01-09", + "Value": 595, + "Series": "Sports" + }, + { + "Date": "2022-01-18", + "Value": 586, + "Series": "Sports" + }, + { + "Date": "2022-01-27", + "Value": 578, + "Series": "Sports" + }, + { + "Date": "2022-02-05", + "Value": 570, + "Series": "Sports" + }, + { + "Date": "2022-02-14", + "Value": 576, + "Series": "Sports" + }, + { + "Date": "2022-02-23", + "Value": 584, + "Series": "Sports" + }, + { + "Date": "2022-03-04", + "Value": 585, + "Series": "Sports" + }, + { + "Date": "2022-03-14", + "Value": 585, + "Series": "Sports" + }, + { + "Date": "2022-03-23", + "Value": 597, + "Series": "Sports" + }, + { + "Date": "2022-04-01", + "Value": 603, + "Series": "Sports" + }, + { + "Date": "2022-04-10", + "Value": 614, + "Series": "Sports" + }, + { + "Date": "2022-04-19", + "Value": 615, + "Series": "Sports" + }, + { + "Date": "2022-04-28", + "Value": 621, + "Series": "Sports" + }, + { + "Date": "2022-05-07", + "Value": 623, + "Series": "Sports" + }, + { + "Date": "2022-05-16", + "Value": 632, + "Series": "Sports" + }, + { + "Date": "2022-05-26", + "Value": 638, + "Series": "Sports" + }, + { + "Date": "2022-06-04", + "Value": 647, + "Series": "Sports" + }, + { + "Date": "2022-06-13", + "Value": 655, + "Series": "Sports" + }, + { + "Date": "2022-06-22", + "Value": 657, + "Series": "Sports" + }, + { + "Date": "2022-07-01", + "Value": 659, + "Series": "Sports" + }, + { + "Date": "2022-07-10", + "Value": 663, + "Series": "Sports" + }, + { + "Date": "2022-07-19", + "Value": 676, + "Series": "Sports" + }, + { + "Date": "2022-07-28", + "Value": 676, + "Series": "Sports" + }, + { + "Date": "2022-08-07", + "Value": 677, + "Series": "Sports" + }, + { + "Date": "2022-08-16", + "Value": 676, + "Series": "Sports" + }, + { + "Date": "2022-08-25", + "Value": 680, + "Series": "Sports" + }, + { + "Date": "2022-09-03", + "Value": 678, + "Series": "Sports" + }, + { + "Date": "2022-09-12", + "Value": 677, + "Series": "Sports" + }, + { + "Date": "2022-09-21", + "Value": 681, + "Series": "Sports" + }, + { + "Date": "2022-09-30", + "Value": 695, + "Series": "Sports" + }, + { + "Date": "2022-10-09", + "Value": 713, + "Series": "Sports" + }, + { + "Date": "2022-10-19", + "Value": 716, + "Series": "Sports" + }, + { + "Date": "2022-10-28", + "Value": 718, + "Series": "Sports" + }, + { + "Date": "2022-11-06", + "Value": 728, + "Series": "Sports" + }, + { + "Date": "2022-11-15", + "Value": 740, + "Series": "Sports" + }, + { + "Date": "2022-11-24", + "Value": 743, + "Series": "Sports" + }, + { + "Date": "2022-12-03", + "Value": 738, + "Series": "Sports" + }, + { + "Date": "2022-12-12", + "Value": 738, + "Series": "Sports" + }, + { + "Date": "2022-12-21", + "Value": 748, + "Series": "Sports" + }, + { + "Date": "2020-01-01", + "Value": 52, + "Series": "Home" + }, + { + "Date": "2020-01-10", + "Value": 50, + "Series": "Home" + }, + { + "Date": "2020-01-19", + "Value": 40, + "Series": "Home" + }, + { + "Date": "2020-01-28", + "Value": 46, + "Series": "Home" + }, + { + "Date": "2020-02-06", + "Value": 40, + "Series": "Home" + }, + { + "Date": "2020-02-15", + "Value": 50, + "Series": "Home" + }, + { + "Date": "2020-02-24", + "Value": 52, + "Series": "Home" + }, + { + "Date": "2020-03-04", + "Value": 71, + "Series": "Home" + }, + { + "Date": "2020-03-14", + "Value": 93, + "Series": "Home" + }, + { + "Date": "2020-03-23", + "Value": 103, + "Series": "Home" + }, + { + "Date": "2020-04-01", + "Value": 126, + "Series": "Home" + }, + { + "Date": "2020-04-10", + "Value": 153, + "Series": "Home" + }, + { + "Date": "2020-04-19", + "Value": 171, + "Series": "Home" + }, + { + "Date": "2020-04-28", + "Value": 200, + "Series": "Home" + }, + { + "Date": "2020-05-07", + "Value": 208, + "Series": "Home" + }, + { + "Date": "2020-05-16", + "Value": 203, + "Series": "Home" + }, + { + "Date": "2020-05-26", + "Value": 195, + "Series": "Home" + }, + { + "Date": "2020-06-04", + "Value": 189, + "Series": "Home" + }, + { + "Date": "2020-06-13", + "Value": 183, + "Series": "Home" + }, + { + "Date": "2020-06-22", + "Value": 182, + "Series": "Home" + }, + { + "Date": "2020-07-01", + "Value": 180, + "Series": "Home" + }, + { + "Date": "2020-07-10", + "Value": 170, + "Series": "Home" + }, + { + "Date": "2020-07-19", + "Value": 158, + "Series": "Home" + }, + { + "Date": "2020-07-28", + "Value": 152, + "Series": "Home" + }, + { + "Date": "2020-08-07", + "Value": 164, + "Series": "Home" + }, + { + "Date": "2020-08-16", + "Value": 165, + "Series": "Home" + }, + { + "Date": "2020-08-25", + "Value": 166, + "Series": "Home" + }, + { + "Date": "2020-09-03", + "Value": 155, + "Series": "Home" + }, + { + "Date": "2020-09-12", + "Value": 145, + "Series": "Home" + }, + { + "Date": "2020-09-21", + "Value": 137, + "Series": "Home" + }, + { + "Date": "2020-09-30", + "Value": 125, + "Series": "Home" + }, + { + "Date": "2020-10-09", + "Value": 126, + "Series": "Home" + }, + { + "Date": "2020-10-19", + "Value": 122, + "Series": "Home" + }, + { + "Date": "2020-10-28", + "Value": 111, + "Series": "Home" + }, + { + "Date": "2020-11-06", + "Value": 121, + "Series": "Home" + }, + { + "Date": "2020-11-15", + "Value": 129, + "Series": "Home" + }, + { + "Date": "2020-11-24", + "Value": 132, + "Series": "Home" + }, + { + "Date": "2020-12-03", + "Value": 136, + "Series": "Home" + }, + { + "Date": "2020-12-12", + "Value": 144, + "Series": "Home" + }, + { + "Date": "2020-12-21", + "Value": 147, + "Series": "Home" + }, + { + "Date": "2020-12-31", + "Value": 137, + "Series": "Home" + }, + { + "Date": "2021-01-09", + "Value": 123, + "Series": "Home" + }, + { + "Date": "2021-01-18", + "Value": 108, + "Series": "Home" + }, + { + "Date": "2021-01-27", + "Value": 114, + "Series": "Home" + }, + { + "Date": "2021-02-05", + "Value": 118, + "Series": "Home" + }, + { + "Date": "2021-02-14", + "Value": 118, + "Series": "Home" + }, + { + "Date": "2021-02-23", + "Value": 110, + "Series": "Home" + }, + { + "Date": "2021-03-04", + "Value": 123, + "Series": "Home" + }, + { + "Date": "2021-03-14", + "Value": 142, + "Series": "Home" + }, + { + "Date": "2021-03-23", + "Value": 149, + "Series": "Home" + }, + { + "Date": "2021-04-01", + "Value": 151, + "Series": "Home" + }, + { + "Date": "2021-04-10", + "Value": 148, + "Series": "Home" + }, + { + "Date": "2021-04-19", + "Value": 147, + "Series": "Home" + }, + { + "Date": "2021-04-28", + "Value": 162, + "Series": "Home" + }, + { + "Date": "2021-05-07", + "Value": 189, + "Series": "Home" + }, + { + "Date": "2021-05-16", + "Value": 220, + "Series": "Home" + }, + { + "Date": "2021-05-26", + "Value": 249, + "Series": "Home" + }, + { + "Date": "2021-06-04", + "Value": 273, + "Series": "Home" + }, + { + "Date": "2021-06-13", + "Value": 282, + "Series": "Home" + }, + { + "Date": "2021-06-22", + "Value": 279, + "Series": "Home" + }, + { + "Date": "2021-07-01", + "Value": 273, + "Series": "Home" + }, + { + "Date": "2021-07-10", + "Value": 260, + "Series": "Home" + }, + { + "Date": "2021-07-19", + "Value": 264, + "Series": "Home" + }, + { + "Date": "2021-07-28", + "Value": 274, + "Series": "Home" + }, + { + "Date": "2021-08-07", + "Value": 274, + "Series": "Home" + }, + { + "Date": "2021-08-16", + "Value": 273, + "Series": "Home" + }, + { + "Date": "2021-08-25", + "Value": 291, + "Series": "Home" + }, + { + "Date": "2021-09-03", + "Value": 296, + "Series": "Home" + }, + { + "Date": "2021-09-12", + "Value": 314, + "Series": "Home" + }, + { + "Date": "2021-09-21", + "Value": 322, + "Series": "Home" + }, + { + "Date": "2021-09-30", + "Value": 343, + "Series": "Home" + }, + { + "Date": "2021-10-09", + "Value": 347, + "Series": "Home" + }, + { + "Date": "2021-10-19", + "Value": 358, + "Series": "Home" + }, + { + "Date": "2021-10-28", + "Value": 383, + "Series": "Home" + }, + { + "Date": "2021-11-06", + "Value": 387, + "Series": "Home" + }, + { + "Date": "2021-11-15", + "Value": 392, + "Series": "Home" + }, + { + "Date": "2021-11-24", + "Value": 409, + "Series": "Home" + }, + { + "Date": "2021-12-03", + "Value": 423, + "Series": "Home" + }, + { + "Date": "2021-12-12", + "Value": 432, + "Series": "Home" + }, + { + "Date": "2021-12-21", + "Value": 435, + "Series": "Home" + }, + { + "Date": "2021-12-31", + "Value": 443, + "Series": "Home" + }, + { + "Date": "2022-01-09", + "Value": 454, + "Series": "Home" + }, + { + "Date": "2022-01-18", + "Value": 475, + "Series": "Home" + }, + { + "Date": "2022-01-27", + "Value": 490, + "Series": "Home" + }, + { + "Date": "2022-02-05", + "Value": 499, + "Series": "Home" + }, + { + "Date": "2022-02-14", + "Value": 513, + "Series": "Home" + }, + { + "Date": "2022-02-23", + "Value": 514, + "Series": "Home" + }, + { + "Date": "2022-03-04", + "Value": 508, + "Series": "Home" + }, + { + "Date": "2022-03-14", + "Value": 501, + "Series": "Home" + }, + { + "Date": "2022-03-23", + "Value": 505, + "Series": "Home" + }, + { + "Date": "2022-04-01", + "Value": 499, + "Series": "Home" + }, + { + "Date": "2022-04-10", + "Value": 503, + "Series": "Home" + }, + { + "Date": "2022-04-19", + "Value": 506, + "Series": "Home" + }, + { + "Date": "2022-04-28", + "Value": 502, + "Series": "Home" + }, + { + "Date": "2022-05-07", + "Value": 498, + "Series": "Home" + }, + { + "Date": "2022-05-16", + "Value": 487, + "Series": "Home" + }, + { + "Date": "2022-05-26", + "Value": 479, + "Series": "Home" + }, + { + "Date": "2022-06-04", + "Value": 479, + "Series": "Home" + }, + { + "Date": "2022-06-13", + "Value": 479, + "Series": "Home" + }, + { + "Date": "2022-06-22", + "Value": 481, + "Series": "Home" + }, + { + "Date": "2022-07-01", + "Value": 491, + "Series": "Home" + }, + { + "Date": "2022-07-10", + "Value": 491, + "Series": "Home" + }, + { + "Date": "2022-07-19", + "Value": 498, + "Series": "Home" + }, + { + "Date": "2022-07-28", + "Value": 511, + "Series": "Home" + }, + { + "Date": "2022-08-07", + "Value": 517, + "Series": "Home" + }, + { + "Date": "2022-08-16", + "Value": 512, + "Series": "Home" + }, + { + "Date": "2022-08-25", + "Value": 523, + "Series": "Home" + }, + { + "Date": "2022-09-03", + "Value": 536, + "Series": "Home" + }, + { + "Date": "2022-09-12", + "Value": 562, + "Series": "Home" + }, + { + "Date": "2022-09-21", + "Value": 596, + "Series": "Home" + }, + { + "Date": "2022-09-30", + "Value": 628, + "Series": "Home" + }, + { + "Date": "2022-10-09", + "Value": 657, + "Series": "Home" + }, + { + "Date": "2022-10-19", + "Value": 671, + "Series": "Home" + }, + { + "Date": "2022-10-28", + "Value": 687, + "Series": "Home" + }, + { + "Date": "2022-11-06", + "Value": 695, + "Series": "Home" + }, + { + "Date": "2022-11-15", + "Value": 711, + "Series": "Home" + }, + { + "Date": "2022-11-24", + "Value": 721, + "Series": "Home" + }, + { + "Date": "2022-12-03", + "Value": 740, + "Series": "Home" + }, + { + "Date": "2022-12-12", + "Value": 759, + "Series": "Home" + }, + { + "Date": "2022-12-21", + "Value": 775, + "Series": "Home" + }, + { + "Date": "2020-01-01", + "Value": 217, + "Series": "Garden" + }, + { + "Date": "2020-01-10", + "Value": 214, + "Series": "Garden" + }, + { + "Date": "2020-01-19", + "Value": 213, + "Series": "Garden" + }, + { + "Date": "2020-01-28", + "Value": 229, + "Series": "Garden" + }, + { + "Date": "2020-02-06", + "Value": 250, + "Series": "Garden" + }, + { + "Date": "2020-02-15", + "Value": 275, + "Series": "Garden" + }, + { + "Date": "2020-02-24", + "Value": 295, + "Series": "Garden" + }, + { + "Date": "2020-03-04", + "Value": 304, + "Series": "Garden" + }, + { + "Date": "2020-03-14", + "Value": 323, + "Series": "Garden" + }, + { + "Date": "2020-03-23", + "Value": 327, + "Series": "Garden" + }, + { + "Date": "2020-04-01", + "Value": 341, + "Series": "Garden" + }, + { + "Date": "2020-04-10", + "Value": 360, + "Series": "Garden" + }, + { + "Date": "2020-04-19", + "Value": 369, + "Series": "Garden" + }, + { + "Date": "2020-04-28", + "Value": 366, + "Series": "Garden" + }, + { + "Date": "2020-05-07", + "Value": 356, + "Series": "Garden" + }, + { + "Date": "2020-05-16", + "Value": 350, + "Series": "Garden" + }, + { + "Date": "2020-05-26", + "Value": 362, + "Series": "Garden" + }, + { + "Date": "2020-06-04", + "Value": 366, + "Series": "Garden" + }, + { + "Date": "2020-06-13", + "Value": 371, + "Series": "Garden" + }, + { + "Date": "2020-06-22", + "Value": 387, + "Series": "Garden" + }, + { + "Date": "2020-07-01", + "Value": 390, + "Series": "Garden" + }, + { + "Date": "2020-07-10", + "Value": 387, + "Series": "Garden" + }, + { + "Date": "2020-07-19", + "Value": 380, + "Series": "Garden" + }, + { + "Date": "2020-07-28", + "Value": 381, + "Series": "Garden" + }, + { + "Date": "2020-08-07", + "Value": 378, + "Series": "Garden" + }, + { + "Date": "2020-08-16", + "Value": 383, + "Series": "Garden" + }, + { + "Date": "2020-08-25", + "Value": 388, + "Series": "Garden" + }, + { + "Date": "2020-09-03", + "Value": 382, + "Series": "Garden" + }, + { + "Date": "2020-09-12", + "Value": 386, + "Series": "Garden" + }, + { + "Date": "2020-09-21", + "Value": 401, + "Series": "Garden" + }, + { + "Date": "2020-09-30", + "Value": 411, + "Series": "Garden" + }, + { + "Date": "2020-10-09", + "Value": 412, + "Series": "Garden" + }, + { + "Date": "2020-10-19", + "Value": 416, + "Series": "Garden" + }, + { + "Date": "2020-10-28", + "Value": 416, + "Series": "Garden" + }, + { + "Date": "2020-11-06", + "Value": 415, + "Series": "Garden" + }, + { + "Date": "2020-11-15", + "Value": 429, + "Series": "Garden" + }, + { + "Date": "2020-11-24", + "Value": 445, + "Series": "Garden" + }, + { + "Date": "2020-12-03", + "Value": 467, + "Series": "Garden" + }, + { + "Date": "2020-12-12", + "Value": 492, + "Series": "Garden" + }, + { + "Date": "2020-12-21", + "Value": 500, + "Series": "Garden" + }, + { + "Date": "2020-12-31", + "Value": 500, + "Series": "Garden" + }, + { + "Date": "2021-01-09", + "Value": 510, + "Series": "Garden" + }, + { + "Date": "2021-01-18", + "Value": 511, + "Series": "Garden" + }, + { + "Date": "2021-01-27", + "Value": 524, + "Series": "Garden" + }, + { + "Date": "2021-02-05", + "Value": 547, + "Series": "Garden" + }, + { + "Date": "2021-02-14", + "Value": 557, + "Series": "Garden" + }, + { + "Date": "2021-02-23", + "Value": 570, + "Series": "Garden" + }, + { + "Date": "2021-03-04", + "Value": 591, + "Series": "Garden" + }, + { + "Date": "2021-03-14", + "Value": 613, + "Series": "Garden" + }, + { + "Date": "2021-03-23", + "Value": 625, + "Series": "Garden" + }, + { + "Date": "2021-04-01", + "Value": 627, + "Series": "Garden" + }, + { + "Date": "2021-04-10", + "Value": 620, + "Series": "Garden" + }, + { + "Date": "2021-04-19", + "Value": 628, + "Series": "Garden" + }, + { + "Date": "2021-04-28", + "Value": 636, + "Series": "Garden" + }, + { + "Date": "2021-05-07", + "Value": 643, + "Series": "Garden" + }, + { + "Date": "2021-05-16", + "Value": 641, + "Series": "Garden" + }, + { + "Date": "2021-05-26", + "Value": 637, + "Series": "Garden" + }, + { + "Date": "2021-06-04", + "Value": 629, + "Series": "Garden" + }, + { + "Date": "2021-06-13", + "Value": 634, + "Series": "Garden" + }, + { + "Date": "2021-06-22", + "Value": 651, + "Series": "Garden" + }, + { + "Date": "2021-07-01", + "Value": 660, + "Series": "Garden" + }, + { + "Date": "2021-07-10", + "Value": 680, + "Series": "Garden" + }, + { + "Date": "2021-07-19", + "Value": 707, + "Series": "Garden" + }, + { + "Date": "2021-07-28", + "Value": 720, + "Series": "Garden" + }, + { + "Date": "2021-08-07", + "Value": 721, + "Series": "Garden" + }, + { + "Date": "2021-08-16", + "Value": 715, + "Series": "Garden" + }, + { + "Date": "2021-08-25", + "Value": 714, + "Series": "Garden" + }, + { + "Date": "2021-09-03", + "Value": 714, + "Series": "Garden" + }, + { + "Date": "2021-09-12", + "Value": 710, + "Series": "Garden" + }, + { + "Date": "2021-09-21", + "Value": 722, + "Series": "Garden" + }, + { + "Date": "2021-09-30", + "Value": 732, + "Series": "Garden" + }, + { + "Date": "2021-10-09", + "Value": 743, + "Series": "Garden" + }, + { + "Date": "2021-10-19", + "Value": 741, + "Series": "Garden" + }, + { + "Date": "2021-10-28", + "Value": 747, + "Series": "Garden" + }, + { + "Date": "2021-11-06", + "Value": 755, + "Series": "Garden" + }, + { + "Date": "2021-11-15", + "Value": 758, + "Series": "Garden" + }, + { + "Date": "2021-11-24", + "Value": 768, + "Series": "Garden" + }, + { + "Date": "2021-12-03", + "Value": 781, + "Series": "Garden" + }, + { + "Date": "2021-12-12", + "Value": 782, + "Series": "Garden" + }, + { + "Date": "2021-12-21", + "Value": 784, + "Series": "Garden" + }, + { + "Date": "2021-12-31", + "Value": 794, + "Series": "Garden" + }, + { + "Date": "2022-01-09", + "Value": 800, + "Series": "Garden" + }, + { + "Date": "2022-01-18", + "Value": 805, + "Series": "Garden" + }, + { + "Date": "2022-01-27", + "Value": 814, + "Series": "Garden" + }, + { + "Date": "2022-02-05", + "Value": 811, + "Series": "Garden" + }, + { + "Date": "2022-02-14", + "Value": 804, + "Series": "Garden" + }, + { + "Date": "2022-02-23", + "Value": 792, + "Series": "Garden" + }, + { + "Date": "2022-03-04", + "Value": 781, + "Series": "Garden" + }, + { + "Date": "2022-03-14", + "Value": 769, + "Series": "Garden" + }, + { + "Date": "2022-03-23", + "Value": 761, + "Series": "Garden" + }, + { + "Date": "2022-04-01", + "Value": 762, + "Series": "Garden" + }, + { + "Date": "2022-04-10", + "Value": 766, + "Series": "Garden" + }, + { + "Date": "2022-04-19", + "Value": 767, + "Series": "Garden" + }, + { + "Date": "2022-04-28", + "Value": 772, + "Series": "Garden" + }, + { + "Date": "2022-05-07", + "Value": 777, + "Series": "Garden" + }, + { + "Date": "2022-05-16", + "Value": 794, + "Series": "Garden" + }, + { + "Date": "2022-05-26", + "Value": 816, + "Series": "Garden" + }, + { + "Date": "2022-06-04", + "Value": 825, + "Series": "Garden" + }, + { + "Date": "2022-06-13", + "Value": 837, + "Series": "Garden" + }, + { + "Date": "2022-06-22", + "Value": 836, + "Series": "Garden" + }, + { + "Date": "2022-07-01", + "Value": 835, + "Series": "Garden" + }, + { + "Date": "2022-07-10", + "Value": 832, + "Series": "Garden" + }, + { + "Date": "2022-07-19", + "Value": 838, + "Series": "Garden" + }, + { + "Date": "2022-07-28", + "Value": 841, + "Series": "Garden" + }, + { + "Date": "2022-08-07", + "Value": 849, + "Series": "Garden" + }, + { + "Date": "2022-08-16", + "Value": 866, + "Series": "Garden" + }, + { + "Date": "2022-08-25", + "Value": 889, + "Series": "Garden" + }, + { + "Date": "2022-09-03", + "Value": 919, + "Series": "Garden" + }, + { + "Date": "2022-09-12", + "Value": 950, + "Series": "Garden" + }, + { + "Date": "2022-09-21", + "Value": 978, + "Series": "Garden" + }, + { + "Date": "2022-09-30", + "Value": 995, + "Series": "Garden" + }, + { + "Date": "2022-10-09", + "Value": 1020, + "Series": "Garden" + }, + { + "Date": "2022-10-19", + "Value": 1032, + "Series": "Garden" + }, + { + "Date": "2022-10-28", + "Value": 1038, + "Series": "Garden" + }, + { + "Date": "2022-11-06", + "Value": 1042, + "Series": "Garden" + }, + { + "Date": "2022-11-15", + "Value": 1054, + "Series": "Garden" + }, + { + "Date": "2022-11-24", + "Value": 1076, + "Series": "Garden" + }, + { + "Date": "2022-12-03", + "Value": 1084, + "Series": "Garden" + }, + { + "Date": "2022-12-12", + "Value": 1088, + "Series": "Garden" + }, + { + "Date": "2022-12-21", + "Value": 1095, + "Series": "Garden" + }, + { + "Date": "2020-01-01", + "Value": 212, + "Series": "Auto" + }, + { + "Date": "2020-01-10", + "Value": 210, + "Series": "Auto" + }, + { + "Date": "2020-01-19", + "Value": 221, + "Series": "Auto" + }, + { + "Date": "2020-01-28", + "Value": 221, + "Series": "Auto" + }, + { + "Date": "2020-02-06", + "Value": 213, + "Series": "Auto" + }, + { + "Date": "2020-02-15", + "Value": 222, + "Series": "Auto" + }, + { + "Date": "2020-02-24", + "Value": 228, + "Series": "Auto" + }, + { + "Date": "2020-03-04", + "Value": 225, + "Series": "Auto" + }, + { + "Date": "2020-03-14", + "Value": 222, + "Series": "Auto" + }, + { + "Date": "2020-03-23", + "Value": 213, + "Series": "Auto" + }, + { + "Date": "2020-04-01", + "Value": 200, + "Series": "Auto" + }, + { + "Date": "2020-04-10", + "Value": 204, + "Series": "Auto" + }, + { + "Date": "2020-04-19", + "Value": 214, + "Series": "Auto" + }, + { + "Date": "2020-04-28", + "Value": 224, + "Series": "Auto" + }, + { + "Date": "2020-05-07", + "Value": 226, + "Series": "Auto" + }, + { + "Date": "2020-05-16", + "Value": 228, + "Series": "Auto" + }, + { + "Date": "2020-05-26", + "Value": 221, + "Series": "Auto" + }, + { + "Date": "2020-06-04", + "Value": 208, + "Series": "Auto" + }, + { + "Date": "2020-06-13", + "Value": 200, + "Series": "Auto" + }, + { + "Date": "2020-06-22", + "Value": 203, + "Series": "Auto" + }, + { + "Date": "2020-07-01", + "Value": 194, + "Series": "Auto" + }, + { + "Date": "2020-07-10", + "Value": 184, + "Series": "Auto" + }, + { + "Date": "2020-07-19", + "Value": 197, + "Series": "Auto" + }, + { + "Date": "2020-07-28", + "Value": 196, + "Series": "Auto" + }, + { + "Date": "2020-08-07", + "Value": 183, + "Series": "Auto" + }, + { + "Date": "2020-08-16", + "Value": 193, + "Series": "Auto" + }, + { + "Date": "2020-08-25", + "Value": 218, + "Series": "Auto" + }, + { + "Date": "2020-09-03", + "Value": 253, + "Series": "Auto" + }, + { + "Date": "2020-09-12", + "Value": 287, + "Series": "Auto" + }, + { + "Date": "2020-09-21", + "Value": 304, + "Series": "Auto" + }, + { + "Date": "2020-09-30", + "Value": 309, + "Series": "Auto" + }, + { + "Date": "2020-10-09", + "Value": 315, + "Series": "Auto" + }, + { + "Date": "2020-10-19", + "Value": 309, + "Series": "Auto" + }, + { + "Date": "2020-10-28", + "Value": 319, + "Series": "Auto" + }, + { + "Date": "2020-11-06", + "Value": 336, + "Series": "Auto" + }, + { + "Date": "2020-11-15", + "Value": 349, + "Series": "Auto" + }, + { + "Date": "2020-11-24", + "Value": 372, + "Series": "Auto" + }, + { + "Date": "2020-12-03", + "Value": 389, + "Series": "Auto" + }, + { + "Date": "2020-12-12", + "Value": 413, + "Series": "Auto" + }, + { + "Date": "2020-12-21", + "Value": 446, + "Series": "Auto" + }, + { + "Date": "2020-12-31", + "Value": 455, + "Series": "Auto" + }, + { + "Date": "2021-01-09", + "Value": 462, + "Series": "Auto" + }, + { + "Date": "2021-01-18", + "Value": 473, + "Series": "Auto" + }, + { + "Date": "2021-01-27", + "Value": 484, + "Series": "Auto" + }, + { + "Date": "2021-02-05", + "Value": 488, + "Series": "Auto" + }, + { + "Date": "2021-02-14", + "Value": 498, + "Series": "Auto" + }, + { + "Date": "2021-02-23", + "Value": 494, + "Series": "Auto" + }, + { + "Date": "2021-03-04", + "Value": 482, + "Series": "Auto" + }, + { + "Date": "2021-03-14", + "Value": 465, + "Series": "Auto" + }, + { + "Date": "2021-03-23", + "Value": 468, + "Series": "Auto" + }, + { + "Date": "2021-04-01", + "Value": 487, + "Series": "Auto" + }, + { + "Date": "2021-04-10", + "Value": 483, + "Series": "Auto" + }, + { + "Date": "2021-04-19", + "Value": 470, + "Series": "Auto" + }, + { + "Date": "2021-04-28", + "Value": 463, + "Series": "Auto" + }, + { + "Date": "2021-05-07", + "Value": 466, + "Series": "Auto" + }, + { + "Date": "2021-05-16", + "Value": 482, + "Series": "Auto" + }, + { + "Date": "2021-05-26", + "Value": 497, + "Series": "Auto" + }, + { + "Date": "2021-06-04", + "Value": 503, + "Series": "Auto" + }, + { + "Date": "2021-06-13", + "Value": 523, + "Series": "Auto" + }, + { + "Date": "2021-06-22", + "Value": 536, + "Series": "Auto" + }, + { + "Date": "2021-07-01", + "Value": 556, + "Series": "Auto" + }, + { + "Date": "2021-07-10", + "Value": 563, + "Series": "Auto" + }, + { + "Date": "2021-07-19", + "Value": 572, + "Series": "Auto" + }, + { + "Date": "2021-07-28", + "Value": 577, + "Series": "Auto" + }, + { + "Date": "2021-08-07", + "Value": 586, + "Series": "Auto" + }, + { + "Date": "2021-08-16", + "Value": 588, + "Series": "Auto" + }, + { + "Date": "2021-08-25", + "Value": 576, + "Series": "Auto" + }, + { + "Date": "2021-09-03", + "Value": 586, + "Series": "Auto" + }, + { + "Date": "2021-09-12", + "Value": 579, + "Series": "Auto" + }, + { + "Date": "2021-09-21", + "Value": 569, + "Series": "Auto" + }, + { + "Date": "2021-09-30", + "Value": 566, + "Series": "Auto" + }, + { + "Date": "2021-10-09", + "Value": 573, + "Series": "Auto" + }, + { + "Date": "2021-10-19", + "Value": 564, + "Series": "Auto" + }, + { + "Date": "2021-10-28", + "Value": 550, + "Series": "Auto" + }, + { + "Date": "2021-11-06", + "Value": 534, + "Series": "Auto" + }, + { + "Date": "2021-11-15", + "Value": 544, + "Series": "Auto" + }, + { + "Date": "2021-11-24", + "Value": 553, + "Series": "Auto" + }, + { + "Date": "2021-12-03", + "Value": 565, + "Series": "Auto" + }, + { + "Date": "2021-12-12", + "Value": 560, + "Series": "Auto" + }, + { + "Date": "2021-12-21", + "Value": 575, + "Series": "Auto" + }, + { + "Date": "2021-12-31", + "Value": 600, + "Series": "Auto" + }, + { + "Date": "2022-01-09", + "Value": 620, + "Series": "Auto" + }, + { + "Date": "2022-01-18", + "Value": 635, + "Series": "Auto" + }, + { + "Date": "2022-01-27", + "Value": 641, + "Series": "Auto" + }, + { + "Date": "2022-02-05", + "Value": 651, + "Series": "Auto" + }, + { + "Date": "2022-02-14", + "Value": 657, + "Series": "Auto" + }, + { + "Date": "2022-02-23", + "Value": 673, + "Series": "Auto" + }, + { + "Date": "2022-03-04", + "Value": 691, + "Series": "Auto" + }, + { + "Date": "2022-03-14", + "Value": 701, + "Series": "Auto" + }, + { + "Date": "2022-03-23", + "Value": 719, + "Series": "Auto" + }, + { + "Date": "2022-04-01", + "Value": 751, + "Series": "Auto" + }, + { + "Date": "2022-04-10", + "Value": 763, + "Series": "Auto" + }, + { + "Date": "2022-04-19", + "Value": 784, + "Series": "Auto" + }, + { + "Date": "2022-04-28", + "Value": 783, + "Series": "Auto" + }, + { + "Date": "2022-05-07", + "Value": 772, + "Series": "Auto" + }, + { + "Date": "2022-05-16", + "Value": 753, + "Series": "Auto" + }, + { + "Date": "2022-05-26", + "Value": 751, + "Series": "Auto" + }, + { + "Date": "2022-06-04", + "Value": 758, + "Series": "Auto" + }, + { + "Date": "2022-06-13", + "Value": 756, + "Series": "Auto" + }, + { + "Date": "2022-06-22", + "Value": 742, + "Series": "Auto" + }, + { + "Date": "2022-07-01", + "Value": 725, + "Series": "Auto" + }, + { + "Date": "2022-07-10", + "Value": 705, + "Series": "Auto" + }, + { + "Date": "2022-07-19", + "Value": 700, + "Series": "Auto" + }, + { + "Date": "2022-07-28", + "Value": 710, + "Series": "Auto" + }, + { + "Date": "2022-08-07", + "Value": 718, + "Series": "Auto" + }, + { + "Date": "2022-08-16", + "Value": 710, + "Series": "Auto" + }, + { + "Date": "2022-08-25", + "Value": 713, + "Series": "Auto" + }, + { + "Date": "2022-09-03", + "Value": 722, + "Series": "Auto" + }, + { + "Date": "2022-09-12", + "Value": 738, + "Series": "Auto" + }, + { + "Date": "2022-09-21", + "Value": 762, + "Series": "Auto" + }, + { + "Date": "2022-09-30", + "Value": 795, + "Series": "Auto" + }, + { + "Date": "2022-10-09", + "Value": 813, + "Series": "Auto" + }, + { + "Date": "2022-10-19", + "Value": 827, + "Series": "Auto" + }, + { + "Date": "2022-10-28", + "Value": 852, + "Series": "Auto" + }, + { + "Date": "2022-11-06", + "Value": 884, + "Series": "Auto" + }, + { + "Date": "2022-11-15", + "Value": 901, + "Series": "Auto" + }, + { + "Date": "2022-11-24", + "Value": 906, + "Series": "Auto" + }, + { + "Date": "2022-12-03", + "Value": 904, + "Series": "Auto" + }, + { + "Date": "2022-12-12", + "Value": 893, + "Series": "Auto" + }, + { + "Date": "2022-12-21", + "Value": 872, + "Series": "Auto" + }, + { + "Date": "2020-01-01", + "Value": 95, + "Series": "Health" + }, + { + "Date": "2020-01-10", + "Value": 98, + "Series": "Health" + }, + { + "Date": "2020-01-19", + "Value": 104, + "Series": "Health" + }, + { + "Date": "2020-01-28", + "Value": 108, + "Series": "Health" + }, + { + "Date": "2020-02-06", + "Value": 108, + "Series": "Health" + }, + { + "Date": "2020-02-15", + "Value": 105, + "Series": "Health" + }, + { + "Date": "2020-02-24", + "Value": 102, + "Series": "Health" + }, + { + "Date": "2020-03-04", + "Value": 97, + "Series": "Health" + }, + { + "Date": "2020-03-14", + "Value": 100, + "Series": "Health" + }, + { + "Date": "2020-03-23", + "Value": 104, + "Series": "Health" + }, + { + "Date": "2020-04-01", + "Value": 106, + "Series": "Health" + }, + { + "Date": "2020-04-10", + "Value": 103, + "Series": "Health" + }, + { + "Date": "2020-04-19", + "Value": 103, + "Series": "Health" + }, + { + "Date": "2020-04-28", + "Value": 100, + "Series": "Health" + }, + { + "Date": "2020-05-07", + "Value": 105, + "Series": "Health" + }, + { + "Date": "2020-05-16", + "Value": 109, + "Series": "Health" + }, + { + "Date": "2020-05-26", + "Value": 113, + "Series": "Health" + }, + { + "Date": "2020-06-04", + "Value": 113, + "Series": "Health" + }, + { + "Date": "2020-06-13", + "Value": 112, + "Series": "Health" + }, + { + "Date": "2020-06-22", + "Value": 108, + "Series": "Health" + }, + { + "Date": "2020-07-01", + "Value": 109, + "Series": "Health" + }, + { + "Date": "2020-07-10", + "Value": 114, + "Series": "Health" + }, + { + "Date": "2020-07-19", + "Value": 118, + "Series": "Health" + }, + { + "Date": "2020-07-28", + "Value": 123, + "Series": "Health" + }, + { + "Date": "2020-08-07", + "Value": 125, + "Series": "Health" + }, + { + "Date": "2020-08-16", + "Value": 126, + "Series": "Health" + }, + { + "Date": "2020-08-25", + "Value": 128, + "Series": "Health" + }, + { + "Date": "2020-09-03", + "Value": 130, + "Series": "Health" + }, + { + "Date": "2020-09-12", + "Value": 129, + "Series": "Health" + }, + { + "Date": "2020-09-21", + "Value": 125, + "Series": "Health" + }, + { + "Date": "2020-09-30", + "Value": 127, + "Series": "Health" + }, + { + "Date": "2020-10-09", + "Value": 131, + "Series": "Health" + }, + { + "Date": "2020-10-19", + "Value": 141, + "Series": "Health" + }, + { + "Date": "2020-10-28", + "Value": 143, + "Series": "Health" + }, + { + "Date": "2020-11-06", + "Value": 151, + "Series": "Health" + }, + { + "Date": "2020-11-15", + "Value": 156, + "Series": "Health" + }, + { + "Date": "2020-11-24", + "Value": 162, + "Series": "Health" + }, + { + "Date": "2020-12-03", + "Value": 172, + "Series": "Health" + }, + { + "Date": "2020-12-12", + "Value": 180, + "Series": "Health" + }, + { + "Date": "2020-12-21", + "Value": 181, + "Series": "Health" + }, + { + "Date": "2020-12-31", + "Value": 190, + "Series": "Health" + }, + { + "Date": "2021-01-09", + "Value": 197, + "Series": "Health" + }, + { + "Date": "2021-01-18", + "Value": 202, + "Series": "Health" + }, + { + "Date": "2021-01-27", + "Value": 212, + "Series": "Health" + }, + { + "Date": "2021-02-05", + "Value": 215, + "Series": "Health" + }, + { + "Date": "2021-02-14", + "Value": 222, + "Series": "Health" + }, + { + "Date": "2021-02-23", + "Value": 233, + "Series": "Health" + }, + { + "Date": "2021-03-04", + "Value": 246, + "Series": "Health" + }, + { + "Date": "2021-03-14", + "Value": 254, + "Series": "Health" + }, + { + "Date": "2021-03-23", + "Value": 256, + "Series": "Health" + }, + { + "Date": "2021-04-01", + "Value": 260, + "Series": "Health" + }, + { + "Date": "2021-04-10", + "Value": 260, + "Series": "Health" + }, + { + "Date": "2021-04-19", + "Value": 260, + "Series": "Health" + }, + { + "Date": "2021-04-28", + "Value": 262, + "Series": "Health" + }, + { + "Date": "2021-05-07", + "Value": 268, + "Series": "Health" + }, + { + "Date": "2021-05-16", + "Value": 277, + "Series": "Health" + }, + { + "Date": "2021-05-26", + "Value": 283, + "Series": "Health" + }, + { + "Date": "2021-06-04", + "Value": 288, + "Series": "Health" + }, + { + "Date": "2021-06-13", + "Value": 295, + "Series": "Health" + }, + { + "Date": "2021-06-22", + "Value": 295, + "Series": "Health" + }, + { + "Date": "2021-07-01", + "Value": 296, + "Series": "Health" + }, + { + "Date": "2021-07-10", + "Value": 300, + "Series": "Health" + }, + { + "Date": "2021-07-19", + "Value": 308, + "Series": "Health" + }, + { + "Date": "2021-07-28", + "Value": 314, + "Series": "Health" + }, + { + "Date": "2021-08-07", + "Value": 315, + "Series": "Health" + }, + { + "Date": "2021-08-16", + "Value": 322, + "Series": "Health" + }, + { + "Date": "2021-08-25", + "Value": 335, + "Series": "Health" + }, + { + "Date": "2021-09-03", + "Value": 342, + "Series": "Health" + }, + { + "Date": "2021-09-12", + "Value": 350, + "Series": "Health" + }, + { + "Date": "2021-09-21", + "Value": 362, + "Series": "Health" + }, + { + "Date": "2021-09-30", + "Value": 377, + "Series": "Health" + }, + { + "Date": "2021-10-09", + "Value": 393, + "Series": "Health" + }, + { + "Date": "2021-10-19", + "Value": 409, + "Series": "Health" + }, + { + "Date": "2021-10-28", + "Value": 424, + "Series": "Health" + }, + { + "Date": "2021-11-06", + "Value": 440, + "Series": "Health" + }, + { + "Date": "2021-11-15", + "Value": 450, + "Series": "Health" + }, + { + "Date": "2021-11-24", + "Value": 456, + "Series": "Health" + }, + { + "Date": "2021-12-03", + "Value": 466, + "Series": "Health" + }, + { + "Date": "2021-12-12", + "Value": 474, + "Series": "Health" + }, + { + "Date": "2021-12-21", + "Value": 482, + "Series": "Health" + }, + { + "Date": "2021-12-31", + "Value": 489, + "Series": "Health" + }, + { + "Date": "2022-01-09", + "Value": 499, + "Series": "Health" + }, + { + "Date": "2022-01-18", + "Value": 502, + "Series": "Health" + }, + { + "Date": "2022-01-27", + "Value": 509, + "Series": "Health" + }, + { + "Date": "2022-02-05", + "Value": 512, + "Series": "Health" + }, + { + "Date": "2022-02-14", + "Value": 514, + "Series": "Health" + }, + { + "Date": "2022-02-23", + "Value": 523, + "Series": "Health" + }, + { + "Date": "2022-03-04", + "Value": 535, + "Series": "Health" + }, + { + "Date": "2022-03-14", + "Value": 550, + "Series": "Health" + }, + { + "Date": "2022-03-23", + "Value": 557, + "Series": "Health" + }, + { + "Date": "2022-04-01", + "Value": 564, + "Series": "Health" + }, + { + "Date": "2022-04-10", + "Value": 568, + "Series": "Health" + }, + { + "Date": "2022-04-19", + "Value": 573, + "Series": "Health" + }, + { + "Date": "2022-04-28", + "Value": 584, + "Series": "Health" + }, + { + "Date": "2022-05-07", + "Value": 593, + "Series": "Health" + }, + { + "Date": "2022-05-16", + "Value": 605, + "Series": "Health" + }, + { + "Date": "2022-05-26", + "Value": 613, + "Series": "Health" + }, + { + "Date": "2022-06-04", + "Value": 618, + "Series": "Health" + }, + { + "Date": "2022-06-13", + "Value": 629, + "Series": "Health" + }, + { + "Date": "2022-06-22", + "Value": 644, + "Series": "Health" + }, + { + "Date": "2022-07-01", + "Value": 654, + "Series": "Health" + }, + { + "Date": "2022-07-10", + "Value": 658, + "Series": "Health" + }, + { + "Date": "2022-07-19", + "Value": 663, + "Series": "Health" + }, + { + "Date": "2022-07-28", + "Value": 666, + "Series": "Health" + }, + { + "Date": "2022-08-07", + "Value": 666, + "Series": "Health" + }, + { + "Date": "2022-08-16", + "Value": 673, + "Series": "Health" + }, + { + "Date": "2022-08-25", + "Value": 682, + "Series": "Health" + }, + { + "Date": "2022-09-03", + "Value": 686, + "Series": "Health" + }, + { + "Date": "2022-09-12", + "Value": 687, + "Series": "Health" + }, + { + "Date": "2022-09-21", + "Value": 684, + "Series": "Health" + }, + { + "Date": "2022-09-30", + "Value": 685, + "Series": "Health" + }, + { + "Date": "2022-10-09", + "Value": 685, + "Series": "Health" + }, + { + "Date": "2022-10-19", + "Value": 683, + "Series": "Health" + }, + { + "Date": "2022-10-28", + "Value": 683, + "Series": "Health" + }, + { + "Date": "2022-11-06", + "Value": 680, + "Series": "Health" + }, + { + "Date": "2022-11-15", + "Value": 680, + "Series": "Health" + }, + { + "Date": "2022-11-24", + "Value": 685, + "Series": "Health" + }, + { + "Date": "2022-12-03", + "Value": 694, + "Series": "Health" + }, + { + "Date": "2022-12-12", + "Value": 701, + "Series": "Health" + }, + { + "Date": "2022-12-21", + "Value": 707, + "Series": "Health" + }, + { + "Date": "2020-01-01", + "Value": 119, + "Series": "Beauty" + }, + { + "Date": "2020-01-10", + "Value": 142, + "Series": "Beauty" + }, + { + "Date": "2020-01-19", + "Value": 140, + "Series": "Beauty" + }, + { + "Date": "2020-01-28", + "Value": 144, + "Series": "Beauty" + }, + { + "Date": "2020-02-06", + "Value": 135, + "Series": "Beauty" + }, + { + "Date": "2020-02-15", + "Value": 149, + "Series": "Beauty" + }, + { + "Date": "2020-02-24", + "Value": 161, + "Series": "Beauty" + }, + { + "Date": "2020-03-04", + "Value": 172, + "Series": "Beauty" + }, + { + "Date": "2020-03-14", + "Value": 200, + "Series": "Beauty" + }, + { + "Date": "2020-03-23", + "Value": 212, + "Series": "Beauty" + }, + { + "Date": "2020-04-01", + "Value": 209, + "Series": "Beauty" + }, + { + "Date": "2020-04-10", + "Value": 227, + "Series": "Beauty" + }, + { + "Date": "2020-04-19", + "Value": 246, + "Series": "Beauty" + }, + { + "Date": "2020-04-28", + "Value": 280, + "Series": "Beauty" + }, + { + "Date": "2020-05-07", + "Value": 285, + "Series": "Beauty" + }, + { + "Date": "2020-05-16", + "Value": 284, + "Series": "Beauty" + }, + { + "Date": "2020-05-26", + "Value": 276, + "Series": "Beauty" + }, + { + "Date": "2020-06-04", + "Value": 286, + "Series": "Beauty" + }, + { + "Date": "2020-06-13", + "Value": 290, + "Series": "Beauty" + }, + { + "Date": "2020-06-22", + "Value": 283, + "Series": "Beauty" + }, + { + "Date": "2020-07-01", + "Value": 283, + "Series": "Beauty" + }, + { + "Date": "2020-07-10", + "Value": 294, + "Series": "Beauty" + }, + { + "Date": "2020-07-19", + "Value": 311, + "Series": "Beauty" + }, + { + "Date": "2020-07-28", + "Value": 319, + "Series": "Beauty" + }, + { + "Date": "2020-08-07", + "Value": 314, + "Series": "Beauty" + }, + { + "Date": "2020-08-16", + "Value": 317, + "Series": "Beauty" + }, + { + "Date": "2020-08-25", + "Value": 326, + "Series": "Beauty" + }, + { + "Date": "2020-09-03", + "Value": 346, + "Series": "Beauty" + }, + { + "Date": "2020-09-12", + "Value": 378, + "Series": "Beauty" + }, + { + "Date": "2020-09-21", + "Value": 402, + "Series": "Beauty" + }, + { + "Date": "2020-09-30", + "Value": 421, + "Series": "Beauty" + }, + { + "Date": "2020-10-09", + "Value": 450, + "Series": "Beauty" + }, + { + "Date": "2020-10-19", + "Value": 481, + "Series": "Beauty" + }, + { + "Date": "2020-10-28", + "Value": 522, + "Series": "Beauty" + }, + { + "Date": "2020-11-06", + "Value": 569, + "Series": "Beauty" + }, + { + "Date": "2020-11-15", + "Value": 617, + "Series": "Beauty" + }, + { + "Date": "2020-11-24", + "Value": 648, + "Series": "Beauty" + }, + { + "Date": "2020-12-03", + "Value": 679, + "Series": "Beauty" + }, + { + "Date": "2020-12-12", + "Value": 686, + "Series": "Beauty" + }, + { + "Date": "2020-12-21", + "Value": 699, + "Series": "Beauty" + }, + { + "Date": "2020-12-31", + "Value": 697, + "Series": "Beauty" + }, + { + "Date": "2021-01-09", + "Value": 698, + "Series": "Beauty" + }, + { + "Date": "2021-01-18", + "Value": 692, + "Series": "Beauty" + }, + { + "Date": "2021-01-27", + "Value": 709, + "Series": "Beauty" + }, + { + "Date": "2021-02-05", + "Value": 726, + "Series": "Beauty" + }, + { + "Date": "2021-02-14", + "Value": 730, + "Series": "Beauty" + }, + { + "Date": "2021-02-23", + "Value": 734, + "Series": "Beauty" + }, + { + "Date": "2021-03-04", + "Value": 750, + "Series": "Beauty" + }, + { + "Date": "2021-03-14", + "Value": 767, + "Series": "Beauty" + }, + { + "Date": "2021-03-23", + "Value": 776, + "Series": "Beauty" + }, + { + "Date": "2021-04-01", + "Value": 778, + "Series": "Beauty" + }, + { + "Date": "2021-04-10", + "Value": 773, + "Series": "Beauty" + }, + { + "Date": "2021-04-19", + "Value": 760, + "Series": "Beauty" + }, + { + "Date": "2021-04-28", + "Value": 761, + "Series": "Beauty" + }, + { + "Date": "2021-05-07", + "Value": 775, + "Series": "Beauty" + }, + { + "Date": "2021-05-16", + "Value": 791, + "Series": "Beauty" + }, + { + "Date": "2021-05-26", + "Value": 805, + "Series": "Beauty" + }, + { + "Date": "2021-06-04", + "Value": 807, + "Series": "Beauty" + }, + { + "Date": "2021-06-13", + "Value": 793, + "Series": "Beauty" + }, + { + "Date": "2021-06-22", + "Value": 801, + "Series": "Beauty" + }, + { + "Date": "2021-07-01", + "Value": 812, + "Series": "Beauty" + }, + { + "Date": "2021-07-10", + "Value": 830, + "Series": "Beauty" + }, + { + "Date": "2021-07-19", + "Value": 861, + "Series": "Beauty" + }, + { + "Date": "2021-07-28", + "Value": 884, + "Series": "Beauty" + }, + { + "Date": "2021-08-07", + "Value": 889, + "Series": "Beauty" + }, + { + "Date": "2021-08-16", + "Value": 905, + "Series": "Beauty" + }, + { + "Date": "2021-08-25", + "Value": 922, + "Series": "Beauty" + }, + { + "Date": "2021-09-03", + "Value": 936, + "Series": "Beauty" + }, + { + "Date": "2021-09-12", + "Value": 941, + "Series": "Beauty" + }, + { + "Date": "2021-09-21", + "Value": 956, + "Series": "Beauty" + }, + { + "Date": "2021-09-30", + "Value": 988, + "Series": "Beauty" + }, + { + "Date": "2021-10-09", + "Value": 1025, + "Series": "Beauty" + }, + { + "Date": "2021-10-19", + "Value": 1045, + "Series": "Beauty" + }, + { + "Date": "2021-10-28", + "Value": 1054, + "Series": "Beauty" + }, + { + "Date": "2021-11-06", + "Value": 1044, + "Series": "Beauty" + }, + { + "Date": "2021-11-15", + "Value": 1054, + "Series": "Beauty" + }, + { + "Date": "2021-11-24", + "Value": 1075, + "Series": "Beauty" + }, + { + "Date": "2021-12-03", + "Value": 1100, + "Series": "Beauty" + }, + { + "Date": "2021-12-12", + "Value": 1108, + "Series": "Beauty" + }, + { + "Date": "2021-12-21", + "Value": 1120, + "Series": "Beauty" + }, + { + "Date": "2021-12-31", + "Value": 1114, + "Series": "Beauty" + }, + { + "Date": "2022-01-09", + "Value": 1133, + "Series": "Beauty" + }, + { + "Date": "2022-01-18", + "Value": 1148, + "Series": "Beauty" + }, + { + "Date": "2022-01-27", + "Value": 1145, + "Series": "Beauty" + }, + { + "Date": "2022-02-05", + "Value": 1154, + "Series": "Beauty" + }, + { + "Date": "2022-02-14", + "Value": 1157, + "Series": "Beauty" + }, + { + "Date": "2022-02-23", + "Value": 1181, + "Series": "Beauty" + }, + { + "Date": "2022-03-04", + "Value": 1189, + "Series": "Beauty" + }, + { + "Date": "2022-03-14", + "Value": 1216, + "Series": "Beauty" + }, + { + "Date": "2022-03-23", + "Value": 1248, + "Series": "Beauty" + }, + { + "Date": "2022-04-01", + "Value": 1289, + "Series": "Beauty" + }, + { + "Date": "2022-04-10", + "Value": 1333, + "Series": "Beauty" + }, + { + "Date": "2022-04-19", + "Value": 1359, + "Series": "Beauty" + }, + { + "Date": "2022-04-28", + "Value": 1379, + "Series": "Beauty" + }, + { + "Date": "2022-05-07", + "Value": 1405, + "Series": "Beauty" + }, + { + "Date": "2022-05-16", + "Value": 1417, + "Series": "Beauty" + }, + { + "Date": "2022-05-26", + "Value": 1417, + "Series": "Beauty" + }, + { + "Date": "2022-06-04", + "Value": 1432, + "Series": "Beauty" + }, + { + "Date": "2022-06-13", + "Value": 1425, + "Series": "Beauty" + }, + { + "Date": "2022-06-22", + "Value": 1415, + "Series": "Beauty" + }, + { + "Date": "2022-07-01", + "Value": 1428, + "Series": "Beauty" + }, + { + "Date": "2022-07-10", + "Value": 1442, + "Series": "Beauty" + }, + { + "Date": "2022-07-19", + "Value": 1473, + "Series": "Beauty" + }, + { + "Date": "2022-07-28", + "Value": 1477, + "Series": "Beauty" + }, + { + "Date": "2022-08-07", + "Value": 1497, + "Series": "Beauty" + }, + { + "Date": "2022-08-16", + "Value": 1501, + "Series": "Beauty" + }, + { + "Date": "2022-08-25", + "Value": 1520, + "Series": "Beauty" + }, + { + "Date": "2022-09-03", + "Value": 1540, + "Series": "Beauty" + }, + { + "Date": "2022-09-12", + "Value": 1536, + "Series": "Beauty" + }, + { + "Date": "2022-09-21", + "Value": 1524, + "Series": "Beauty" + }, + { + "Date": "2022-09-30", + "Value": 1508, + "Series": "Beauty" + }, + { + "Date": "2022-10-09", + "Value": 1514, + "Series": "Beauty" + }, + { + "Date": "2022-10-19", + "Value": 1524, + "Series": "Beauty" + }, + { + "Date": "2022-10-28", + "Value": 1526, + "Series": "Beauty" + }, + { + "Date": "2022-11-06", + "Value": 1538, + "Series": "Beauty" + }, + { + "Date": "2022-11-15", + "Value": 1545, + "Series": "Beauty" + }, + { + "Date": "2022-11-24", + "Value": 1553, + "Series": "Beauty" + }, + { + "Date": "2022-12-03", + "Value": 1572, + "Series": "Beauty" + }, + { + "Date": "2022-12-12", + "Value": 1591, + "Series": "Beauty" + }, + { + "Date": "2022-12-21", + "Value": 1619, + "Series": "Beauty" + }, + { + "Date": "2020-01-01", + "Value": 188, + "Series": "Toys" + }, + { + "Date": "2020-01-10", + "Value": 180, + "Series": "Toys" + }, + { + "Date": "2020-01-19", + "Value": 187, + "Series": "Toys" + }, + { + "Date": "2020-01-28", + "Value": 181, + "Series": "Toys" + }, + { + "Date": "2020-02-06", + "Value": 181, + "Series": "Toys" + }, + { + "Date": "2020-02-15", + "Value": 194, + "Series": "Toys" + }, + { + "Date": "2020-02-24", + "Value": 206, + "Series": "Toys" + }, + { + "Date": "2020-03-04", + "Value": 222, + "Series": "Toys" + }, + { + "Date": "2020-03-14", + "Value": 222, + "Series": "Toys" + }, + { + "Date": "2020-03-23", + "Value": 232, + "Series": "Toys" + }, + { + "Date": "2020-04-01", + "Value": 251, + "Series": "Toys" + }, + { + "Date": "2020-04-10", + "Value": 268, + "Series": "Toys" + }, + { + "Date": "2020-04-19", + "Value": 279, + "Series": "Toys" + }, + { + "Date": "2020-04-28", + "Value": 299, + "Series": "Toys" + }, + { + "Date": "2020-05-07", + "Value": 315, + "Series": "Toys" + }, + { + "Date": "2020-05-16", + "Value": 323, + "Series": "Toys" + }, + { + "Date": "2020-05-26", + "Value": 319, + "Series": "Toys" + }, + { + "Date": "2020-06-04", + "Value": 318, + "Series": "Toys" + }, + { + "Date": "2020-06-13", + "Value": 311, + "Series": "Toys" + }, + { + "Date": "2020-06-22", + "Value": 311, + "Series": "Toys" + }, + { + "Date": "2020-07-01", + "Value": 306, + "Series": "Toys" + }, + { + "Date": "2020-07-10", + "Value": 304, + "Series": "Toys" + }, + { + "Date": "2020-07-19", + "Value": 299, + "Series": "Toys" + }, + { + "Date": "2020-07-28", + "Value": 310, + "Series": "Toys" + }, + { + "Date": "2020-08-07", + "Value": 320, + "Series": "Toys" + }, + { + "Date": "2020-08-16", + "Value": 323, + "Series": "Toys" + }, + { + "Date": "2020-08-25", + "Value": 337, + "Series": "Toys" + }, + { + "Date": "2020-09-03", + "Value": 354, + "Series": "Toys" + }, + { + "Date": "2020-09-12", + "Value": 360, + "Series": "Toys" + }, + { + "Date": "2020-09-21", + "Value": 372, + "Series": "Toys" + }, + { + "Date": "2020-09-30", + "Value": 378, + "Series": "Toys" + }, + { + "Date": "2020-10-09", + "Value": 372, + "Series": "Toys" + }, + { + "Date": "2020-10-19", + "Value": 369, + "Series": "Toys" + }, + { + "Date": "2020-10-28", + "Value": 371, + "Series": "Toys" + }, + { + "Date": "2020-11-06", + "Value": 377, + "Series": "Toys" + }, + { + "Date": "2020-11-15", + "Value": 392, + "Series": "Toys" + }, + { + "Date": "2020-11-24", + "Value": 394, + "Series": "Toys" + }, + { + "Date": "2020-12-03", + "Value": 397, + "Series": "Toys" + }, + { + "Date": "2020-12-12", + "Value": 399, + "Series": "Toys" + }, + { + "Date": "2020-12-21", + "Value": 412, + "Series": "Toys" + }, + { + "Date": "2020-12-31", + "Value": 430, + "Series": "Toys" + }, + { + "Date": "2021-01-09", + "Value": 443, + "Series": "Toys" + }, + { + "Date": "2021-01-18", + "Value": 462, + "Series": "Toys" + }, + { + "Date": "2021-01-27", + "Value": 475, + "Series": "Toys" + }, + { + "Date": "2021-02-05", + "Value": 486, + "Series": "Toys" + }, + { + "Date": "2021-02-14", + "Value": 505, + "Series": "Toys" + }, + { + "Date": "2021-02-23", + "Value": 519, + "Series": "Toys" + }, + { + "Date": "2021-03-04", + "Value": 540, + "Series": "Toys" + }, + { + "Date": "2021-03-14", + "Value": 563, + "Series": "Toys" + }, + { + "Date": "2021-03-23", + "Value": 567, + "Series": "Toys" + }, + { + "Date": "2021-04-01", + "Value": 571, + "Series": "Toys" + }, + { + "Date": "2021-04-10", + "Value": 581, + "Series": "Toys" + }, + { + "Date": "2021-04-19", + "Value": 582, + "Series": "Toys" + }, + { + "Date": "2021-04-28", + "Value": 590, + "Series": "Toys" + }, + { + "Date": "2021-05-07", + "Value": 608, + "Series": "Toys" + }, + { + "Date": "2021-05-16", + "Value": 634, + "Series": "Toys" + }, + { + "Date": "2021-05-26", + "Value": 640, + "Series": "Toys" + }, + { + "Date": "2021-06-04", + "Value": 655, + "Series": "Toys" + }, + { + "Date": "2021-06-13", + "Value": 671, + "Series": "Toys" + }, + { + "Date": "2021-06-22", + "Value": 671, + "Series": "Toys" + }, + { + "Date": "2021-07-01", + "Value": 676, + "Series": "Toys" + }, + { + "Date": "2021-07-10", + "Value": 685, + "Series": "Toys" + }, + { + "Date": "2021-07-19", + "Value": 689, + "Series": "Toys" + }, + { + "Date": "2021-07-28", + "Value": 706, + "Series": "Toys" + }, + { + "Date": "2021-08-07", + "Value": 715, + "Series": "Toys" + }, + { + "Date": "2021-08-16", + "Value": 718, + "Series": "Toys" + }, + { + "Date": "2021-08-25", + "Value": 734, + "Series": "Toys" + }, + { + "Date": "2021-09-03", + "Value": 749, + "Series": "Toys" + }, + { + "Date": "2021-09-12", + "Value": 773, + "Series": "Toys" + }, + { + "Date": "2021-09-21", + "Value": 797, + "Series": "Toys" + }, + { + "Date": "2021-09-30", + "Value": 818, + "Series": "Toys" + }, + { + "Date": "2021-10-09", + "Value": 834, + "Series": "Toys" + }, + { + "Date": "2021-10-19", + "Value": 850, + "Series": "Toys" + }, + { + "Date": "2021-10-28", + "Value": 875, + "Series": "Toys" + }, + { + "Date": "2021-11-06", + "Value": 904, + "Series": "Toys" + }, + { + "Date": "2021-11-15", + "Value": 929, + "Series": "Toys" + }, + { + "Date": "2021-11-24", + "Value": 953, + "Series": "Toys" + }, + { + "Date": "2021-12-03", + "Value": 957, + "Series": "Toys" + }, + { + "Date": "2021-12-12", + "Value": 968, + "Series": "Toys" + }, + { + "Date": "2021-12-21", + "Value": 978, + "Series": "Toys" + }, + { + "Date": "2021-12-31", + "Value": 981, + "Series": "Toys" + }, + { + "Date": "2022-01-09", + "Value": 989, + "Series": "Toys" + }, + { + "Date": "2022-01-18", + "Value": 988, + "Series": "Toys" + }, + { + "Date": "2022-01-27", + "Value": 1003, + "Series": "Toys" + }, + { + "Date": "2022-02-05", + "Value": 1027, + "Series": "Toys" + }, + { + "Date": "2022-02-14", + "Value": 1047, + "Series": "Toys" + }, + { + "Date": "2022-02-23", + "Value": 1066, + "Series": "Toys" + }, + { + "Date": "2022-03-04", + "Value": 1089, + "Series": "Toys" + }, + { + "Date": "2022-03-14", + "Value": 1093, + "Series": "Toys" + }, + { + "Date": "2022-03-23", + "Value": 1109, + "Series": "Toys" + }, + { + "Date": "2022-04-01", + "Value": 1134, + "Series": "Toys" + }, + { + "Date": "2022-04-10", + "Value": 1138, + "Series": "Toys" + }, + { + "Date": "2022-04-19", + "Value": 1129, + "Series": "Toys" + }, + { + "Date": "2022-04-28", + "Value": 1140, + "Series": "Toys" + }, + { + "Date": "2022-05-07", + "Value": 1140, + "Series": "Toys" + }, + { + "Date": "2022-05-16", + "Value": 1155, + "Series": "Toys" + }, + { + "Date": "2022-05-26", + "Value": 1178, + "Series": "Toys" + }, + { + "Date": "2022-06-04", + "Value": 1194, + "Series": "Toys" + }, + { + "Date": "2022-06-13", + "Value": 1217, + "Series": "Toys" + }, + { + "Date": "2022-06-22", + "Value": 1220, + "Series": "Toys" + }, + { + "Date": "2022-07-01", + "Value": 1213, + "Series": "Toys" + }, + { + "Date": "2022-07-10", + "Value": 1199, + "Series": "Toys" + }, + { + "Date": "2022-07-19", + "Value": 1197, + "Series": "Toys" + }, + { + "Date": "2022-07-28", + "Value": 1201, + "Series": "Toys" + }, + { + "Date": "2022-08-07", + "Value": 1207, + "Series": "Toys" + }, + { + "Date": "2022-08-16", + "Value": 1203, + "Series": "Toys" + }, + { + "Date": "2022-08-25", + "Value": 1200, + "Series": "Toys" + }, + { + "Date": "2022-09-03", + "Value": 1187, + "Series": "Toys" + }, + { + "Date": "2022-09-12", + "Value": 1182, + "Series": "Toys" + }, + { + "Date": "2022-09-21", + "Value": 1172, + "Series": "Toys" + }, + { + "Date": "2022-09-30", + "Value": 1159, + "Series": "Toys" + }, + { + "Date": "2022-10-09", + "Value": 1149, + "Series": "Toys" + }, + { + "Date": "2022-10-19", + "Value": 1143, + "Series": "Toys" + }, + { + "Date": "2022-10-28", + "Value": 1136, + "Series": "Toys" + }, + { + "Date": "2022-11-06", + "Value": 1146, + "Series": "Toys" + }, + { + "Date": "2022-11-15", + "Value": 1162, + "Series": "Toys" + }, + { + "Date": "2022-11-24", + "Value": 1165, + "Series": "Toys" + }, + { + "Date": "2022-12-03", + "Value": 1160, + "Series": "Toys" + }, + { + "Date": "2022-12-12", + "Value": 1150, + "Series": "Toys" + }, + { + "Date": "2022-12-21", + "Value": 1155, + "Series": "Toys" + }, + { + "Date": "2020-01-01", + "Value": 155, + "Series": "Music" + }, + { + "Date": "2020-01-10", + "Value": 152, + "Series": "Music" + }, + { + "Date": "2020-01-19", + "Value": 156, + "Series": "Music" + }, + { + "Date": "2020-01-28", + "Value": 159, + "Series": "Music" + }, + { + "Date": "2020-02-06", + "Value": 164, + "Series": "Music" + }, + { + "Date": "2020-02-15", + "Value": 174, + "Series": "Music" + }, + { + "Date": "2020-02-24", + "Value": 189, + "Series": "Music" + }, + { + "Date": "2020-03-04", + "Value": 194, + "Series": "Music" + }, + { + "Date": "2020-03-14", + "Value": 193, + "Series": "Music" + }, + { + "Date": "2020-03-23", + "Value": 194, + "Series": "Music" + }, + { + "Date": "2020-04-01", + "Value": 198, + "Series": "Music" + }, + { + "Date": "2020-04-10", + "Value": 205, + "Series": "Music" + }, + { + "Date": "2020-04-19", + "Value": 219, + "Series": "Music" + }, + { + "Date": "2020-04-28", + "Value": 226, + "Series": "Music" + }, + { + "Date": "2020-05-07", + "Value": 234, + "Series": "Music" + }, + { + "Date": "2020-05-16", + "Value": 245, + "Series": "Music" + }, + { + "Date": "2020-05-26", + "Value": 259, + "Series": "Music" + }, + { + "Date": "2020-06-04", + "Value": 263, + "Series": "Music" + }, + { + "Date": "2020-06-13", + "Value": 261, + "Series": "Music" + }, + { + "Date": "2020-06-22", + "Value": 267, + "Series": "Music" + }, + { + "Date": "2020-07-01", + "Value": 275, + "Series": "Music" + }, + { + "Date": "2020-07-10", + "Value": 280, + "Series": "Music" + }, + { + "Date": "2020-07-19", + "Value": 279, + "Series": "Music" + }, + { + "Date": "2020-07-28", + "Value": 286, + "Series": "Music" + }, + { + "Date": "2020-08-07", + "Value": 297, + "Series": "Music" + }, + { + "Date": "2020-08-16", + "Value": 303, + "Series": "Music" + }, + { + "Date": "2020-08-25", + "Value": 310, + "Series": "Music" + }, + { + "Date": "2020-09-03", + "Value": 312, + "Series": "Music" + }, + { + "Date": "2020-09-12", + "Value": 315, + "Series": "Music" + }, + { + "Date": "2020-09-21", + "Value": 321, + "Series": "Music" + }, + { + "Date": "2020-09-30", + "Value": 327, + "Series": "Music" + }, + { + "Date": "2020-10-09", + "Value": 328, + "Series": "Music" + }, + { + "Date": "2020-10-19", + "Value": 327, + "Series": "Music" + }, + { + "Date": "2020-10-28", + "Value": 320, + "Series": "Music" + }, + { + "Date": "2020-11-06", + "Value": 316, + "Series": "Music" + }, + { + "Date": "2020-11-15", + "Value": 316, + "Series": "Music" + }, + { + "Date": "2020-11-24", + "Value": 319, + "Series": "Music" + }, + { + "Date": "2020-12-03", + "Value": 324, + "Series": "Music" + }, + { + "Date": "2020-12-12", + "Value": 333, + "Series": "Music" + }, + { + "Date": "2020-12-21", + "Value": 348, + "Series": "Music" + }, + { + "Date": "2020-12-31", + "Value": 366, + "Series": "Music" + }, + { + "Date": "2021-01-09", + "Value": 379, + "Series": "Music" + }, + { + "Date": "2021-01-18", + "Value": 395, + "Series": "Music" + }, + { + "Date": "2021-01-27", + "Value": 402, + "Series": "Music" + }, + { + "Date": "2021-02-05", + "Value": 406, + "Series": "Music" + }, + { + "Date": "2021-02-14", + "Value": 407, + "Series": "Music" + }, + { + "Date": "2021-02-23", + "Value": 417, + "Series": "Music" + }, + { + "Date": "2021-03-04", + "Value": 433, + "Series": "Music" + }, + { + "Date": "2021-03-14", + "Value": 438, + "Series": "Music" + }, + { + "Date": "2021-03-23", + "Value": 447, + "Series": "Music" + }, + { + "Date": "2021-04-01", + "Value": 447, + "Series": "Music" + }, + { + "Date": "2021-04-10", + "Value": 454, + "Series": "Music" + }, + { + "Date": "2021-04-19", + "Value": 466, + "Series": "Music" + }, + { + "Date": "2021-04-28", + "Value": 481, + "Series": "Music" + }, + { + "Date": "2021-05-07", + "Value": 487, + "Series": "Music" + }, + { + "Date": "2021-05-16", + "Value": 498, + "Series": "Music" + }, + { + "Date": "2021-05-26", + "Value": 506, + "Series": "Music" + }, + { + "Date": "2021-06-04", + "Value": 506, + "Series": "Music" + }, + { + "Date": "2021-06-13", + "Value": 515, + "Series": "Music" + }, + { + "Date": "2021-06-22", + "Value": 522, + "Series": "Music" + }, + { + "Date": "2021-07-01", + "Value": 522, + "Series": "Music" + }, + { + "Date": "2021-07-10", + "Value": 521, + "Series": "Music" + }, + { + "Date": "2021-07-19", + "Value": 517, + "Series": "Music" + }, + { + "Date": "2021-07-28", + "Value": 510, + "Series": "Music" + }, + { + "Date": "2021-08-07", + "Value": 514, + "Series": "Music" + }, + { + "Date": "2021-08-16", + "Value": 526, + "Series": "Music" + }, + { + "Date": "2021-08-25", + "Value": 530, + "Series": "Music" + }, + { + "Date": "2021-09-03", + "Value": 532, + "Series": "Music" + }, + { + "Date": "2021-09-12", + "Value": 531, + "Series": "Music" + }, + { + "Date": "2021-09-21", + "Value": 530, + "Series": "Music" + }, + { + "Date": "2021-09-30", + "Value": 531, + "Series": "Music" + }, + { + "Date": "2021-10-09", + "Value": 540, + "Series": "Music" + }, + { + "Date": "2021-10-19", + "Value": 553, + "Series": "Music" + }, + { + "Date": "2021-10-28", + "Value": 564, + "Series": "Music" + }, + { + "Date": "2021-11-06", + "Value": 571, + "Series": "Music" + }, + { + "Date": "2021-11-15", + "Value": 573, + "Series": "Music" + }, + { + "Date": "2021-11-24", + "Value": 571, + "Series": "Music" + }, + { + "Date": "2021-12-03", + "Value": 576, + "Series": "Music" + }, + { + "Date": "2021-12-12", + "Value": 581, + "Series": "Music" + }, + { + "Date": "2021-12-21", + "Value": 583, + "Series": "Music" + }, + { + "Date": "2021-12-31", + "Value": 589, + "Series": "Music" + }, + { + "Date": "2022-01-09", + "Value": 598, + "Series": "Music" + }, + { + "Date": "2022-01-18", + "Value": 606, + "Series": "Music" + }, + { + "Date": "2022-01-27", + "Value": 619, + "Series": "Music" + }, + { + "Date": "2022-02-05", + "Value": 623, + "Series": "Music" + }, + { + "Date": "2022-02-14", + "Value": 630, + "Series": "Music" + }, + { + "Date": "2022-02-23", + "Value": 637, + "Series": "Music" + }, + { + "Date": "2022-03-04", + "Value": 647, + "Series": "Music" + }, + { + "Date": "2022-03-14", + "Value": 658, + "Series": "Music" + }, + { + "Date": "2022-03-23", + "Value": 663, + "Series": "Music" + }, + { + "Date": "2022-04-01", + "Value": 666, + "Series": "Music" + }, + { + "Date": "2022-04-10", + "Value": 663, + "Series": "Music" + }, + { + "Date": "2022-04-19", + "Value": 662, + "Series": "Music" + }, + { + "Date": "2022-04-28", + "Value": 669, + "Series": "Music" + }, + { + "Date": "2022-05-07", + "Value": 669, + "Series": "Music" + }, + { + "Date": "2022-05-16", + "Value": 679, + "Series": "Music" + }, + { + "Date": "2022-05-26", + "Value": 680, + "Series": "Music" + }, + { + "Date": "2022-06-04", + "Value": 684, + "Series": "Music" + }, + { + "Date": "2022-06-13", + "Value": 683, + "Series": "Music" + }, + { + "Date": "2022-06-22", + "Value": 677, + "Series": "Music" + }, + { + "Date": "2022-07-01", + "Value": 675, + "Series": "Music" + }, + { + "Date": "2022-07-10", + "Value": 682, + "Series": "Music" + }, + { + "Date": "2022-07-19", + "Value": 688, + "Series": "Music" + }, + { + "Date": "2022-07-28", + "Value": 700, + "Series": "Music" + }, + { + "Date": "2022-08-07", + "Value": 704, + "Series": "Music" + }, + { + "Date": "2022-08-16", + "Value": 704, + "Series": "Music" + }, + { + "Date": "2022-08-25", + "Value": 711, + "Series": "Music" + }, + { + "Date": "2022-09-03", + "Value": 712, + "Series": "Music" + }, + { + "Date": "2022-09-12", + "Value": 707, + "Series": "Music" + }, + { + "Date": "2022-09-21", + "Value": 699, + "Series": "Music" + }, + { + "Date": "2022-09-30", + "Value": 701, + "Series": "Music" + }, + { + "Date": "2022-10-09", + "Value": 709, + "Series": "Music" + }, + { + "Date": "2022-10-19", + "Value": 713, + "Series": "Music" + }, + { + "Date": "2022-10-28", + "Value": 722, + "Series": "Music" + }, + { + "Date": "2022-11-06", + "Value": 728, + "Series": "Music" + }, + { + "Date": "2022-11-15", + "Value": 738, + "Series": "Music" + }, + { + "Date": "2022-11-24", + "Value": 750, + "Series": "Music" + }, + { + "Date": "2022-12-03", + "Value": 763, + "Series": "Music" + }, + { + "Date": "2022-12-12", + "Value": 765, + "Series": "Music" + }, + { + "Date": "2022-12-21", + "Value": 764, + "Series": "Music" + }, + { + "Date": "2020-01-01", + "Value": 248, + "Series": "Movies" + }, + { + "Date": "2020-01-10", + "Value": 241, + "Series": "Movies" + }, + { + "Date": "2020-01-19", + "Value": 235, + "Series": "Movies" + }, + { + "Date": "2020-01-28", + "Value": 244, + "Series": "Movies" + }, + { + "Date": "2020-02-06", + "Value": 248, + "Series": "Movies" + }, + { + "Date": "2020-02-15", + "Value": 245, + "Series": "Movies" + }, + { + "Date": "2020-02-24", + "Value": 241, + "Series": "Movies" + }, + { + "Date": "2020-03-04", + "Value": 239, + "Series": "Movies" + }, + { + "Date": "2020-03-14", + "Value": 238, + "Series": "Movies" + }, + { + "Date": "2020-03-23", + "Value": 249, + "Series": "Movies" + }, + { + "Date": "2020-04-01", + "Value": 264, + "Series": "Movies" + }, + { + "Date": "2020-04-10", + "Value": 263, + "Series": "Movies" + }, + { + "Date": "2020-04-19", + "Value": 253, + "Series": "Movies" + }, + { + "Date": "2020-04-28", + "Value": 238, + "Series": "Movies" + }, + { + "Date": "2020-05-07", + "Value": 220, + "Series": "Movies" + }, + { + "Date": "2020-05-16", + "Value": 204, + "Series": "Movies" + }, + { + "Date": "2020-05-26", + "Value": 207, + "Series": "Movies" + }, + { + "Date": "2020-06-04", + "Value": 204, + "Series": "Movies" + }, + { + "Date": "2020-06-13", + "Value": 213, + "Series": "Movies" + }, + { + "Date": "2020-06-22", + "Value": 208, + "Series": "Movies" + }, + { + "Date": "2020-07-01", + "Value": 203, + "Series": "Movies" + }, + { + "Date": "2020-07-10", + "Value": 196, + "Series": "Movies" + }, + { + "Date": "2020-07-19", + "Value": 186, + "Series": "Movies" + }, + { + "Date": "2020-07-28", + "Value": 189, + "Series": "Movies" + }, + { + "Date": "2020-08-07", + "Value": 198, + "Series": "Movies" + }, + { + "Date": "2020-08-16", + "Value": 199, + "Series": "Movies" + }, + { + "Date": "2020-08-25", + "Value": 200, + "Series": "Movies" + }, + { + "Date": "2020-09-03", + "Value": 209, + "Series": "Movies" + }, + { + "Date": "2020-09-12", + "Value": 211, + "Series": "Movies" + }, + { + "Date": "2020-09-21", + "Value": 217, + "Series": "Movies" + }, + { + "Date": "2020-09-30", + "Value": 231, + "Series": "Movies" + }, + { + "Date": "2020-10-09", + "Value": 246, + "Series": "Movies" + }, + { + "Date": "2020-10-19", + "Value": 267, + "Series": "Movies" + }, + { + "Date": "2020-10-28", + "Value": 280, + "Series": "Movies" + }, + { + "Date": "2020-11-06", + "Value": 288, + "Series": "Movies" + }, + { + "Date": "2020-11-15", + "Value": 305, + "Series": "Movies" + }, + { + "Date": "2020-11-24", + "Value": 308, + "Series": "Movies" + }, + { + "Date": "2020-12-03", + "Value": 318, + "Series": "Movies" + }, + { + "Date": "2020-12-12", + "Value": 337, + "Series": "Movies" + }, + { + "Date": "2020-12-21", + "Value": 339, + "Series": "Movies" + }, + { + "Date": "2020-12-31", + "Value": 340, + "Series": "Movies" + }, + { + "Date": "2021-01-09", + "Value": 348, + "Series": "Movies" + }, + { + "Date": "2021-01-18", + "Value": 361, + "Series": "Movies" + }, + { + "Date": "2021-01-27", + "Value": 361, + "Series": "Movies" + }, + { + "Date": "2021-02-05", + "Value": 359, + "Series": "Movies" + }, + { + "Date": "2021-02-14", + "Value": 365, + "Series": "Movies" + }, + { + "Date": "2021-02-23", + "Value": 381, + "Series": "Movies" + }, + { + "Date": "2021-03-04", + "Value": 398, + "Series": "Movies" + }, + { + "Date": "2021-03-14", + "Value": 402, + "Series": "Movies" + }, + { + "Date": "2021-03-23", + "Value": 401, + "Series": "Movies" + }, + { + "Date": "2021-04-01", + "Value": 408, + "Series": "Movies" + }, + { + "Date": "2021-04-10", + "Value": 418, + "Series": "Movies" + }, + { + "Date": "2021-04-19", + "Value": 421, + "Series": "Movies" + }, + { + "Date": "2021-04-28", + "Value": 417, + "Series": "Movies" + }, + { + "Date": "2021-05-07", + "Value": 421, + "Series": "Movies" + }, + { + "Date": "2021-05-16", + "Value": 414, + "Series": "Movies" + }, + { + "Date": "2021-05-26", + "Value": 406, + "Series": "Movies" + }, + { + "Date": "2021-06-04", + "Value": 402, + "Series": "Movies" + }, + { + "Date": "2021-06-13", + "Value": 406, + "Series": "Movies" + }, + { + "Date": "2021-06-22", + "Value": 412, + "Series": "Movies" + }, + { + "Date": "2021-07-01", + "Value": 406, + "Series": "Movies" + }, + { + "Date": "2021-07-10", + "Value": 402, + "Series": "Movies" + }, + { + "Date": "2021-07-19", + "Value": 405, + "Series": "Movies" + }, + { + "Date": "2021-07-28", + "Value": 412, + "Series": "Movies" + }, + { + "Date": "2021-08-07", + "Value": 407, + "Series": "Movies" + }, + { + "Date": "2021-08-16", + "Value": 405, + "Series": "Movies" + }, + { + "Date": "2021-08-25", + "Value": 394, + "Series": "Movies" + }, + { + "Date": "2021-09-03", + "Value": 381, + "Series": "Movies" + }, + { + "Date": "2021-09-12", + "Value": 368, + "Series": "Movies" + }, + { + "Date": "2021-09-21", + "Value": 363, + "Series": "Movies" + }, + { + "Date": "2021-09-30", + "Value": 359, + "Series": "Movies" + }, + { + "Date": "2021-10-09", + "Value": 357, + "Series": "Movies" + }, + { + "Date": "2021-10-19", + "Value": 350, + "Series": "Movies" + }, + { + "Date": "2021-10-28", + "Value": 348, + "Series": "Movies" + }, + { + "Date": "2021-11-06", + "Value": 338, + "Series": "Movies" + }, + { + "Date": "2021-11-15", + "Value": 325, + "Series": "Movies" + }, + { + "Date": "2021-11-24", + "Value": 322, + "Series": "Movies" + }, + { + "Date": "2021-12-03", + "Value": 321, + "Series": "Movies" + }, + { + "Date": "2021-12-12", + "Value": 315, + "Series": "Movies" + }, + { + "Date": "2021-12-21", + "Value": 311, + "Series": "Movies" + }, + { + "Date": "2021-12-31", + "Value": 318, + "Series": "Movies" + }, + { + "Date": "2022-01-09", + "Value": 322, + "Series": "Movies" + }, + { + "Date": "2022-01-18", + "Value": 334, + "Series": "Movies" + }, + { + "Date": "2022-01-27", + "Value": 342, + "Series": "Movies" + }, + { + "Date": "2022-02-05", + "Value": 353, + "Series": "Movies" + }, + { + "Date": "2022-02-14", + "Value": 372, + "Series": "Movies" + }, + { + "Date": "2022-02-23", + "Value": 392, + "Series": "Movies" + }, + { + "Date": "2022-03-04", + "Value": 408, + "Series": "Movies" + }, + { + "Date": "2022-03-14", + "Value": 415, + "Series": "Movies" + }, + { + "Date": "2022-03-23", + "Value": 416, + "Series": "Movies" + }, + { + "Date": "2022-04-01", + "Value": 411, + "Series": "Movies" + }, + { + "Date": "2022-04-10", + "Value": 410, + "Series": "Movies" + }, + { + "Date": "2022-04-19", + "Value": 412, + "Series": "Movies" + }, + { + "Date": "2022-04-28", + "Value": 418, + "Series": "Movies" + }, + { + "Date": "2022-05-07", + "Value": 436, + "Series": "Movies" + }, + { + "Date": "2022-05-16", + "Value": 457, + "Series": "Movies" + }, + { + "Date": "2022-05-26", + "Value": 484, + "Series": "Movies" + }, + { + "Date": "2022-06-04", + "Value": 491, + "Series": "Movies" + }, + { + "Date": "2022-06-13", + "Value": 497, + "Series": "Movies" + }, + { + "Date": "2022-06-22", + "Value": 493, + "Series": "Movies" + }, + { + "Date": "2022-07-01", + "Value": 499, + "Series": "Movies" + }, + { + "Date": "2022-07-10", + "Value": 497, + "Series": "Movies" + }, + { + "Date": "2022-07-19", + "Value": 503, + "Series": "Movies" + }, + { + "Date": "2022-07-28", + "Value": 510, + "Series": "Movies" + }, + { + "Date": "2022-08-07", + "Value": 510, + "Series": "Movies" + }, + { + "Date": "2022-08-16", + "Value": 519, + "Series": "Movies" + }, + { + "Date": "2022-08-25", + "Value": 528, + "Series": "Movies" + }, + { + "Date": "2022-09-03", + "Value": 525, + "Series": "Movies" + }, + { + "Date": "2022-09-12", + "Value": 536, + "Series": "Movies" + }, + { + "Date": "2022-09-21", + "Value": 546, + "Series": "Movies" + }, + { + "Date": "2022-09-30", + "Value": 564, + "Series": "Movies" + }, + { + "Date": "2022-10-09", + "Value": 575, + "Series": "Movies" + }, + { + "Date": "2022-10-19", + "Value": 576, + "Series": "Movies" + }, + { + "Date": "2022-10-28", + "Value": 574, + "Series": "Movies" + }, + { + "Date": "2022-11-06", + "Value": 577, + "Series": "Movies" + }, + { + "Date": "2022-11-15", + "Value": 587, + "Series": "Movies" + }, + { + "Date": "2022-11-24", + "Value": 598, + "Series": "Movies" + }, + { + "Date": "2022-12-03", + "Value": 609, + "Series": "Movies" + }, + { + "Date": "2022-12-12", + "Value": 621, + "Series": "Movies" + }, + { + "Date": "2022-12-21", + "Value": 623, + "Series": "Movies" + }, + { + "Date": "2020-01-01", + "Value": 127, + "Series": "Software" + }, + { + "Date": "2020-01-10", + "Value": 119, + "Series": "Software" + }, + { + "Date": "2020-01-19", + "Value": 110, + "Series": "Software" + }, + { + "Date": "2020-01-28", + "Value": 116, + "Series": "Software" + }, + { + "Date": "2020-02-06", + "Value": 134, + "Series": "Software" + }, + { + "Date": "2020-02-15", + "Value": 141, + "Series": "Software" + }, + { + "Date": "2020-02-24", + "Value": 136, + "Series": "Software" + }, + { + "Date": "2020-03-04", + "Value": 124, + "Series": "Software" + }, + { + "Date": "2020-03-14", + "Value": 109, + "Series": "Software" + }, + { + "Date": "2020-03-23", + "Value": 97, + "Series": "Software" + }, + { + "Date": "2020-04-01", + "Value": 94, + "Series": "Software" + }, + { + "Date": "2020-04-10", + "Value": 95, + "Series": "Software" + }, + { + "Date": "2020-04-19", + "Value": 103, + "Series": "Software" + }, + { + "Date": "2020-04-28", + "Value": 103, + "Series": "Software" + }, + { + "Date": "2020-05-07", + "Value": 94, + "Series": "Software" + }, + { + "Date": "2020-05-16", + "Value": 101, + "Series": "Software" + }, + { + "Date": "2020-05-26", + "Value": 118, + "Series": "Software" + }, + { + "Date": "2020-06-04", + "Value": 139, + "Series": "Software" + }, + { + "Date": "2020-06-13", + "Value": 151, + "Series": "Software" + }, + { + "Date": "2020-06-22", + "Value": 171, + "Series": "Software" + }, + { + "Date": "2020-07-01", + "Value": 189, + "Series": "Software" + }, + { + "Date": "2020-07-10", + "Value": 201, + "Series": "Software" + }, + { + "Date": "2020-07-19", + "Value": 205, + "Series": "Software" + }, + { + "Date": "2020-07-28", + "Value": 219, + "Series": "Software" + }, + { + "Date": "2020-08-07", + "Value": 242, + "Series": "Software" + }, + { + "Date": "2020-08-16", + "Value": 268, + "Series": "Software" + }, + { + "Date": "2020-08-25", + "Value": 276, + "Series": "Software" + }, + { + "Date": "2020-09-03", + "Value": 293, + "Series": "Software" + }, + { + "Date": "2020-09-12", + "Value": 297, + "Series": "Software" + }, + { + "Date": "2020-09-21", + "Value": 301, + "Series": "Software" + }, + { + "Date": "2020-09-30", + "Value": 302, + "Series": "Software" + }, + { + "Date": "2020-10-09", + "Value": 304, + "Series": "Software" + }, + { + "Date": "2020-10-19", + "Value": 314, + "Series": "Software" + }, + { + "Date": "2020-10-28", + "Value": 318, + "Series": "Software" + }, + { + "Date": "2020-11-06", + "Value": 319, + "Series": "Software" + }, + { + "Date": "2020-11-15", + "Value": 316, + "Series": "Software" + }, + { + "Date": "2020-11-24", + "Value": 312, + "Series": "Software" + }, + { + "Date": "2020-12-03", + "Value": 325, + "Series": "Software" + }, + { + "Date": "2020-12-12", + "Value": 337, + "Series": "Software" + }, + { + "Date": "2020-12-21", + "Value": 342, + "Series": "Software" + }, + { + "Date": "2020-12-31", + "Value": 359, + "Series": "Software" + }, + { + "Date": "2021-01-09", + "Value": 360, + "Series": "Software" + }, + { + "Date": "2021-01-18", + "Value": 364, + "Series": "Software" + }, + { + "Date": "2021-01-27", + "Value": 362, + "Series": "Software" + }, + { + "Date": "2021-02-05", + "Value": 367, + "Series": "Software" + }, + { + "Date": "2021-02-14", + "Value": 364, + "Series": "Software" + }, + { + "Date": "2021-02-23", + "Value": 356, + "Series": "Software" + }, + { + "Date": "2021-03-04", + "Value": 357, + "Series": "Software" + }, + { + "Date": "2021-03-14", + "Value": 371, + "Series": "Software" + }, + { + "Date": "2021-03-23", + "Value": 376, + "Series": "Software" + }, + { + "Date": "2021-04-01", + "Value": 370, + "Series": "Software" + }, + { + "Date": "2021-04-10", + "Value": 361, + "Series": "Software" + }, + { + "Date": "2021-04-19", + "Value": 361, + "Series": "Software" + }, + { + "Date": "2021-04-28", + "Value": 352, + "Series": "Software" + }, + { + "Date": "2021-05-07", + "Value": 353, + "Series": "Software" + }, + { + "Date": "2021-05-16", + "Value": 357, + "Series": "Software" + }, + { + "Date": "2021-05-26", + "Value": 372, + "Series": "Software" + }, + { + "Date": "2021-06-04", + "Value": 387, + "Series": "Software" + }, + { + "Date": "2021-06-13", + "Value": 391, + "Series": "Software" + }, + { + "Date": "2021-06-22", + "Value": 391, + "Series": "Software" + }, + { + "Date": "2021-07-01", + "Value": 399, + "Series": "Software" + }, + { + "Date": "2021-07-10", + "Value": 397, + "Series": "Software" + }, + { + "Date": "2021-07-19", + "Value": 397, + "Series": "Software" + }, + { + "Date": "2021-07-28", + "Value": 395, + "Series": "Software" + }, + { + "Date": "2021-08-07", + "Value": 395, + "Series": "Software" + }, + { + "Date": "2021-08-16", + "Value": 390, + "Series": "Software" + }, + { + "Date": "2021-08-25", + "Value": 393, + "Series": "Software" + }, + { + "Date": "2021-09-03", + "Value": 410, + "Series": "Software" + }, + { + "Date": "2021-09-12", + "Value": 416, + "Series": "Software" + }, + { + "Date": "2021-09-21", + "Value": 433, + "Series": "Software" + }, + { + "Date": "2021-09-30", + "Value": 435, + "Series": "Software" + }, + { + "Date": "2021-10-09", + "Value": 444, + "Series": "Software" + }, + { + "Date": "2021-10-19", + "Value": 451, + "Series": "Software" + }, + { + "Date": "2021-10-28", + "Value": 461, + "Series": "Software" + }, + { + "Date": "2021-11-06", + "Value": 479, + "Series": "Software" + }, + { + "Date": "2021-11-15", + "Value": 492, + "Series": "Software" + }, + { + "Date": "2021-11-24", + "Value": 500, + "Series": "Software" + }, + { + "Date": "2021-12-03", + "Value": 504, + "Series": "Software" + }, + { + "Date": "2021-12-12", + "Value": 521, + "Series": "Software" + }, + { + "Date": "2021-12-21", + "Value": 545, + "Series": "Software" + }, + { + "Date": "2021-12-31", + "Value": 559, + "Series": "Software" + }, + { + "Date": "2022-01-09", + "Value": 563, + "Series": "Software" + }, + { + "Date": "2022-01-18", + "Value": 560, + "Series": "Software" + }, + { + "Date": "2022-01-27", + "Value": 568, + "Series": "Software" + }, + { + "Date": "2022-02-05", + "Value": 564, + "Series": "Software" + }, + { + "Date": "2022-02-14", + "Value": 558, + "Series": "Software" + }, + { + "Date": "2022-02-23", + "Value": 555, + "Series": "Software" + }, + { + "Date": "2022-03-04", + "Value": 558, + "Series": "Software" + }, + { + "Date": "2022-03-14", + "Value": 570, + "Series": "Software" + }, + { + "Date": "2022-03-23", + "Value": 567, + "Series": "Software" + }, + { + "Date": "2022-04-01", + "Value": 576, + "Series": "Software" + }, + { + "Date": "2022-04-10", + "Value": 591, + "Series": "Software" + }, + { + "Date": "2022-04-19", + "Value": 613, + "Series": "Software" + }, + { + "Date": "2022-04-28", + "Value": 639, + "Series": "Software" + }, + { + "Date": "2022-05-07", + "Value": 656, + "Series": "Software" + }, + { + "Date": "2022-05-16", + "Value": 662, + "Series": "Software" + }, + { + "Date": "2022-05-26", + "Value": 667, + "Series": "Software" + }, + { + "Date": "2022-06-04", + "Value": 663, + "Series": "Software" + }, + { + "Date": "2022-06-13", + "Value": 654, + "Series": "Software" + }, + { + "Date": "2022-06-22", + "Value": 641, + "Series": "Software" + }, + { + "Date": "2022-07-01", + "Value": 636, + "Series": "Software" + }, + { + "Date": "2022-07-10", + "Value": 624, + "Series": "Software" + }, + { + "Date": "2022-07-19", + "Value": 628, + "Series": "Software" + }, + { + "Date": "2022-07-28", + "Value": 630, + "Series": "Software" + }, + { + "Date": "2022-08-07", + "Value": 628, + "Series": "Software" + }, + { + "Date": "2022-08-16", + "Value": 636, + "Series": "Software" + }, + { + "Date": "2022-08-25", + "Value": 645, + "Series": "Software" + }, + { + "Date": "2022-09-03", + "Value": 660, + "Series": "Software" + }, + { + "Date": "2022-09-12", + "Value": 673, + "Series": "Software" + }, + { + "Date": "2022-09-21", + "Value": 691, + "Series": "Software" + }, + { + "Date": "2022-09-30", + "Value": 691, + "Series": "Software" + }, + { + "Date": "2022-10-09", + "Value": 681, + "Series": "Software" + }, + { + "Date": "2022-10-19", + "Value": 682, + "Series": "Software" + }, + { + "Date": "2022-10-28", + "Value": 698, + "Series": "Software" + }, + { + "Date": "2022-11-06", + "Value": 710, + "Series": "Software" + }, + { + "Date": "2022-11-15", + "Value": 718, + "Series": "Software" + }, + { + "Date": "2022-11-24", + "Value": 737, + "Series": "Software" + }, + { + "Date": "2022-12-03", + "Value": 739, + "Series": "Software" + }, + { + "Date": "2022-12-12", + "Value": 746, + "Series": "Software" + }, + { + "Date": "2022-12-21", + "Value": 764, + "Series": "Software" + }, + { + "Date": "2020-01-01", + "Value": 189, + "Series": "Games" + }, + { + "Date": "2020-01-10", + "Value": 191, + "Series": "Games" + }, + { + "Date": "2020-01-19", + "Value": 199, + "Series": "Games" + }, + { + "Date": "2020-01-28", + "Value": 203, + "Series": "Games" + }, + { + "Date": "2020-02-06", + "Value": 208, + "Series": "Games" + }, + { + "Date": "2020-02-15", + "Value": 209, + "Series": "Games" + }, + { + "Date": "2020-02-24", + "Value": 209, + "Series": "Games" + }, + { + "Date": "2020-03-04", + "Value": 217, + "Series": "Games" + }, + { + "Date": "2020-03-14", + "Value": 224, + "Series": "Games" + }, + { + "Date": "2020-03-23", + "Value": 229, + "Series": "Games" + }, + { + "Date": "2020-04-01", + "Value": 239, + "Series": "Games" + }, + { + "Date": "2020-04-10", + "Value": 254, + "Series": "Games" + }, + { + "Date": "2020-04-19", + "Value": 267, + "Series": "Games" + }, + { + "Date": "2020-04-28", + "Value": 279, + "Series": "Games" + }, + { + "Date": "2020-05-07", + "Value": 294, + "Series": "Games" + }, + { + "Date": "2020-05-16", + "Value": 299, + "Series": "Games" + }, + { + "Date": "2020-05-26", + "Value": 307, + "Series": "Games" + }, + { + "Date": "2020-06-04", + "Value": 316, + "Series": "Games" + }, + { + "Date": "2020-06-13", + "Value": 330, + "Series": "Games" + }, + { + "Date": "2020-06-22", + "Value": 343, + "Series": "Games" + }, + { + "Date": "2020-07-01", + "Value": 357, + "Series": "Games" + }, + { + "Date": "2020-07-10", + "Value": 370, + "Series": "Games" + }, + { + "Date": "2020-07-19", + "Value": 376, + "Series": "Games" + }, + { + "Date": "2020-07-28", + "Value": 379, + "Series": "Games" + }, + { + "Date": "2020-08-07", + "Value": 389, + "Series": "Games" + }, + { + "Date": "2020-08-16", + "Value": 397, + "Series": "Games" + }, + { + "Date": "2020-08-25", + "Value": 406, + "Series": "Games" + }, + { + "Date": "2020-09-03", + "Value": 415, + "Series": "Games" + }, + { + "Date": "2020-09-12", + "Value": 427, + "Series": "Games" + }, + { + "Date": "2020-09-21", + "Value": 436, + "Series": "Games" + }, + { + "Date": "2020-09-30", + "Value": 440, + "Series": "Games" + }, + { + "Date": "2020-10-09", + "Value": 444, + "Series": "Games" + }, + { + "Date": "2020-10-19", + "Value": 446, + "Series": "Games" + }, + { + "Date": "2020-10-28", + "Value": 450, + "Series": "Games" + }, + { + "Date": "2020-11-06", + "Value": 461, + "Series": "Games" + }, + { + "Date": "2020-11-15", + "Value": 470, + "Series": "Games" + }, + { + "Date": "2020-11-24", + "Value": 484, + "Series": "Games" + }, + { + "Date": "2020-12-03", + "Value": 493, + "Series": "Games" + }, + { + "Date": "2020-12-12", + "Value": 500, + "Series": "Games" + }, + { + "Date": "2020-12-21", + "Value": 501, + "Series": "Games" + }, + { + "Date": "2020-12-31", + "Value": 499, + "Series": "Games" + }, + { + "Date": "2021-01-09", + "Value": 506, + "Series": "Games" + }, + { + "Date": "2021-01-18", + "Value": 512, + "Series": "Games" + }, + { + "Date": "2021-01-27", + "Value": 522, + "Series": "Games" + }, + { + "Date": "2021-02-05", + "Value": 527, + "Series": "Games" + }, + { + "Date": "2021-02-14", + "Value": 538, + "Series": "Games" + }, + { + "Date": "2021-02-23", + "Value": 543, + "Series": "Games" + }, + { + "Date": "2021-03-04", + "Value": 549, + "Series": "Games" + }, + { + "Date": "2021-03-14", + "Value": 558, + "Series": "Games" + }, + { + "Date": "2021-03-23", + "Value": 572, + "Series": "Games" + }, + { + "Date": "2021-04-01", + "Value": 587, + "Series": "Games" + }, + { + "Date": "2021-04-10", + "Value": 604, + "Series": "Games" + }, + { + "Date": "2021-04-19", + "Value": 614, + "Series": "Games" + }, + { + "Date": "2021-04-28", + "Value": 619, + "Series": "Games" + }, + { + "Date": "2021-05-07", + "Value": 628, + "Series": "Games" + }, + { + "Date": "2021-05-16", + "Value": 637, + "Series": "Games" + }, + { + "Date": "2021-05-26", + "Value": 650, + "Series": "Games" + }, + { + "Date": "2021-06-04", + "Value": 657, + "Series": "Games" + }, + { + "Date": "2021-06-13", + "Value": 667, + "Series": "Games" + }, + { + "Date": "2021-06-22", + "Value": 681, + "Series": "Games" + }, + { + "Date": "2021-07-01", + "Value": 696, + "Series": "Games" + }, + { + "Date": "2021-07-10", + "Value": 708, + "Series": "Games" + }, + { + "Date": "2021-07-19", + "Value": 713, + "Series": "Games" + }, + { + "Date": "2021-07-28", + "Value": 725, + "Series": "Games" + }, + { + "Date": "2021-08-07", + "Value": 741, + "Series": "Games" + }, + { + "Date": "2021-08-16", + "Value": 753, + "Series": "Games" + }, + { + "Date": "2021-08-25", + "Value": 763, + "Series": "Games" + }, + { + "Date": "2021-09-03", + "Value": 777, + "Series": "Games" + }, + { + "Date": "2021-09-12", + "Value": 782, + "Series": "Games" + }, + { + "Date": "2021-09-21", + "Value": 783, + "Series": "Games" + }, + { + "Date": "2021-09-30", + "Value": 784, + "Series": "Games" + }, + { + "Date": "2021-10-09", + "Value": 786, + "Series": "Games" + }, + { + "Date": "2021-10-19", + "Value": 795, + "Series": "Games" + }, + { + "Date": "2021-10-28", + "Value": 800, + "Series": "Games" + }, + { + "Date": "2021-11-06", + "Value": 811, + "Series": "Games" + }, + { + "Date": "2021-11-15", + "Value": 818, + "Series": "Games" + }, + { + "Date": "2021-11-24", + "Value": 828, + "Series": "Games" + }, + { + "Date": "2021-12-03", + "Value": 836, + "Series": "Games" + }, + { + "Date": "2021-12-12", + "Value": 849, + "Series": "Games" + }, + { + "Date": "2021-12-21", + "Value": 858, + "Series": "Games" + }, + { + "Date": "2021-12-31", + "Value": 870, + "Series": "Games" + }, + { + "Date": "2022-01-09", + "Value": 883, + "Series": "Games" + }, + { + "Date": "2022-01-18", + "Value": 896, + "Series": "Games" + }, + { + "Date": "2022-01-27", + "Value": 910, + "Series": "Games" + }, + { + "Date": "2022-02-05", + "Value": 921, + "Series": "Games" + }, + { + "Date": "2022-02-14", + "Value": 928, + "Series": "Games" + }, + { + "Date": "2022-02-23", + "Value": 939, + "Series": "Games" + }, + { + "Date": "2022-03-04", + "Value": 943, + "Series": "Games" + }, + { + "Date": "2022-03-14", + "Value": 951, + "Series": "Games" + }, + { + "Date": "2022-03-23", + "Value": 964, + "Series": "Games" + }, + { + "Date": "2022-04-01", + "Value": 969, + "Series": "Games" + }, + { + "Date": "2022-04-10", + "Value": 977, + "Series": "Games" + }, + { + "Date": "2022-04-19", + "Value": 979, + "Series": "Games" + }, + { + "Date": "2022-04-28", + "Value": 977, + "Series": "Games" + }, + { + "Date": "2022-05-07", + "Value": 984, + "Series": "Games" + }, + { + "Date": "2022-05-16", + "Value": 991, + "Series": "Games" + }, + { + "Date": "2022-05-26", + "Value": 999, + "Series": "Games" + }, + { + "Date": "2022-06-04", + "Value": 1006, + "Series": "Games" + }, + { + "Date": "2022-06-13", + "Value": 1014, + "Series": "Games" + }, + { + "Date": "2022-06-22", + "Value": 1027, + "Series": "Games" + }, + { + "Date": "2022-07-01", + "Value": 1036, + "Series": "Games" + }, + { + "Date": "2022-07-10", + "Value": 1045, + "Series": "Games" + }, + { + "Date": "2022-07-19", + "Value": 1054, + "Series": "Games" + }, + { + "Date": "2022-07-28", + "Value": 1067, + "Series": "Games" + }, + { + "Date": "2022-08-07", + "Value": 1074, + "Series": "Games" + }, + { + "Date": "2022-08-16", + "Value": 1086, + "Series": "Games" + }, + { + "Date": "2022-08-25", + "Value": 1095, + "Series": "Games" + }, + { + "Date": "2022-09-03", + "Value": 1101, + "Series": "Games" + }, + { + "Date": "2022-09-12", + "Value": 1104, + "Series": "Games" + }, + { + "Date": "2022-09-21", + "Value": 1110, + "Series": "Games" + }, + { + "Date": "2022-09-30", + "Value": 1115, + "Series": "Games" + }, + { + "Date": "2022-10-09", + "Value": 1124, + "Series": "Games" + }, + { + "Date": "2022-10-19", + "Value": 1132, + "Series": "Games" + }, + { + "Date": "2022-10-28", + "Value": 1138, + "Series": "Games" + }, + { + "Date": "2022-11-06", + "Value": 1149, + "Series": "Games" + }, + { + "Date": "2022-11-15", + "Value": 1159, + "Series": "Games" + }, + { + "Date": "2022-11-24", + "Value": 1165, + "Series": "Games" + }, + { + "Date": "2022-12-03", + "Value": 1175, + "Series": "Games" + }, + { + "Date": "2022-12-12", + "Value": 1181, + "Series": "Games" + }, + { + "Date": "2022-12-21", + "Value": 1193, + "Series": "Games" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/area-chart/04-card40.flint.json b/test-harness/excel/evaluations/inputs/area-chart/04-card40.flint.json new file mode 100644 index 00000000..7ccea711 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/area-chart/04-card40.flint.json @@ -0,0 +1,623 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity", + "Series": "Category" + }, + "chart_spec": { + "chartType": "Area Chart", + "encodings": { + "x": "Date", + "y": "Value", + "color": "Series" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 145, + "Series": "Electronics" + }, + { + "Date": "2020-01-28", + "Value": 138, + "Series": "Electronics" + }, + { + "Date": "2020-02-24", + "Value": 129, + "Series": "Electronics" + }, + { + "Date": "2020-03-23", + "Value": 117, + "Series": "Electronics" + }, + { + "Date": "2020-04-19", + "Value": 113, + "Series": "Electronics" + }, + { + "Date": "2020-05-16", + "Value": 103, + "Series": "Electronics" + }, + { + "Date": "2020-06-13", + "Value": 92, + "Series": "Electronics" + }, + { + "Date": "2020-07-10", + "Value": 98, + "Series": "Electronics" + }, + { + "Date": "2020-08-07", + "Value": 96, + "Series": "Electronics" + }, + { + "Date": "2020-09-03", + "Value": 103, + "Series": "Electronics" + }, + { + "Date": "2020-09-30", + "Value": 100, + "Series": "Electronics" + }, + { + "Date": "2020-10-28", + "Value": 112, + "Series": "Electronics" + }, + { + "Date": "2020-11-24", + "Value": 129, + "Series": "Electronics" + }, + { + "Date": "2020-12-21", + "Value": 147, + "Series": "Electronics" + }, + { + "Date": "2021-01-18", + "Value": 172, + "Series": "Electronics" + }, + { + "Date": "2021-02-14", + "Value": 182, + "Series": "Electronics" + }, + { + "Date": "2021-03-14", + "Value": 199, + "Series": "Electronics" + }, + { + "Date": "2021-04-10", + "Value": 209, + "Series": "Electronics" + }, + { + "Date": "2021-05-07", + "Value": 210, + "Series": "Electronics" + }, + { + "Date": "2021-06-04", + "Value": 203, + "Series": "Electronics" + }, + { + "Date": "2021-07-01", + "Value": 199, + "Series": "Electronics" + }, + { + "Date": "2021-07-28", + "Value": 202, + "Series": "Electronics" + }, + { + "Date": "2021-08-25", + "Value": 200, + "Series": "Electronics" + }, + { + "Date": "2021-09-21", + "Value": 192, + "Series": "Electronics" + }, + { + "Date": "2021-10-19", + "Value": 180, + "Series": "Electronics" + }, + { + "Date": "2021-11-15", + "Value": 178, + "Series": "Electronics" + }, + { + "Date": "2021-12-12", + "Value": 184, + "Series": "Electronics" + }, + { + "Date": "2022-01-09", + "Value": 185, + "Series": "Electronics" + }, + { + "Date": "2022-02-05", + "Value": 190, + "Series": "Electronics" + }, + { + "Date": "2022-03-04", + "Value": 203, + "Series": "Electronics" + }, + { + "Date": "2022-04-01", + "Value": 206, + "Series": "Electronics" + }, + { + "Date": "2022-04-28", + "Value": 214, + "Series": "Electronics" + }, + { + "Date": "2022-05-26", + "Value": 224, + "Series": "Electronics" + }, + { + "Date": "2022-06-22", + "Value": 233, + "Series": "Electronics" + }, + { + "Date": "2022-07-19", + "Value": 232, + "Series": "Electronics" + }, + { + "Date": "2022-08-16", + "Value": 223, + "Series": "Electronics" + }, + { + "Date": "2022-09-12", + "Value": 223, + "Series": "Electronics" + }, + { + "Date": "2022-10-09", + "Value": 215, + "Series": "Electronics" + }, + { + "Date": "2022-11-06", + "Value": 217, + "Series": "Electronics" + }, + { + "Date": "2022-12-03", + "Value": 214, + "Series": "Electronics" + }, + { + "Date": "2020-01-01", + "Value": 209, + "Series": "Clothing" + }, + { + "Date": "2020-01-28", + "Value": 217, + "Series": "Clothing" + }, + { + "Date": "2020-02-24", + "Value": 217, + "Series": "Clothing" + }, + { + "Date": "2020-03-23", + "Value": 225, + "Series": "Clothing" + }, + { + "Date": "2020-04-19", + "Value": 235, + "Series": "Clothing" + }, + { + "Date": "2020-05-16", + "Value": 243, + "Series": "Clothing" + }, + { + "Date": "2020-06-13", + "Value": 245, + "Series": "Clothing" + }, + { + "Date": "2020-07-10", + "Value": 251, + "Series": "Clothing" + }, + { + "Date": "2020-08-07", + "Value": 254, + "Series": "Clothing" + }, + { + "Date": "2020-09-03", + "Value": 264, + "Series": "Clothing" + }, + { + "Date": "2020-09-30", + "Value": 266, + "Series": "Clothing" + }, + { + "Date": "2020-10-28", + "Value": 268, + "Series": "Clothing" + }, + { + "Date": "2020-11-24", + "Value": 273, + "Series": "Clothing" + }, + { + "Date": "2020-12-21", + "Value": 278, + "Series": "Clothing" + }, + { + "Date": "2021-01-18", + "Value": 277, + "Series": "Clothing" + }, + { + "Date": "2021-02-14", + "Value": 279, + "Series": "Clothing" + }, + { + "Date": "2021-03-14", + "Value": 277, + "Series": "Clothing" + }, + { + "Date": "2021-04-10", + "Value": 276, + "Series": "Clothing" + }, + { + "Date": "2021-05-07", + "Value": 274, + "Series": "Clothing" + }, + { + "Date": "2021-06-04", + "Value": 281, + "Series": "Clothing" + }, + { + "Date": "2021-07-01", + "Value": 292, + "Series": "Clothing" + }, + { + "Date": "2021-07-28", + "Value": 294, + "Series": "Clothing" + }, + { + "Date": "2021-08-25", + "Value": 302, + "Series": "Clothing" + }, + { + "Date": "2021-09-21", + "Value": 315, + "Series": "Clothing" + }, + { + "Date": "2021-10-19", + "Value": 324, + "Series": "Clothing" + }, + { + "Date": "2021-11-15", + "Value": 334, + "Series": "Clothing" + }, + { + "Date": "2021-12-12", + "Value": 341, + "Series": "Clothing" + }, + { + "Date": "2022-01-09", + "Value": 353, + "Series": "Clothing" + }, + { + "Date": "2022-02-05", + "Value": 366, + "Series": "Clothing" + }, + { + "Date": "2022-03-04", + "Value": 371, + "Series": "Clothing" + }, + { + "Date": "2022-04-01", + "Value": 383, + "Series": "Clothing" + }, + { + "Date": "2022-04-28", + "Value": 399, + "Series": "Clothing" + }, + { + "Date": "2022-05-26", + "Value": 404, + "Series": "Clothing" + }, + { + "Date": "2022-06-22", + "Value": 409, + "Series": "Clothing" + }, + { + "Date": "2022-07-19", + "Value": 408, + "Series": "Clothing" + }, + { + "Date": "2022-08-16", + "Value": 415, + "Series": "Clothing" + }, + { + "Date": "2022-09-12", + "Value": 422, + "Series": "Clothing" + }, + { + "Date": "2022-10-09", + "Value": 433, + "Series": "Clothing" + }, + { + "Date": "2022-11-06", + "Value": 435, + "Series": "Clothing" + }, + { + "Date": "2022-12-03", + "Value": 433, + "Series": "Clothing" + }, + { + "Date": "2020-01-01", + "Value": 93, + "Series": "Food" + }, + { + "Date": "2020-01-28", + "Value": 104, + "Series": "Food" + }, + { + "Date": "2020-02-24", + "Value": 124, + "Series": "Food" + }, + { + "Date": "2020-03-23", + "Value": 130, + "Series": "Food" + }, + { + "Date": "2020-04-19", + "Value": 128, + "Series": "Food" + }, + { + "Date": "2020-05-16", + "Value": 138, + "Series": "Food" + }, + { + "Date": "2020-06-13", + "Value": 155, + "Series": "Food" + }, + { + "Date": "2020-07-10", + "Value": 163, + "Series": "Food" + }, + { + "Date": "2020-08-07", + "Value": 175, + "Series": "Food" + }, + { + "Date": "2020-09-03", + "Value": 194, + "Series": "Food" + }, + { + "Date": "2020-09-30", + "Value": 199, + "Series": "Food" + }, + { + "Date": "2020-10-28", + "Value": 194, + "Series": "Food" + }, + { + "Date": "2020-11-24", + "Value": 194, + "Series": "Food" + }, + { + "Date": "2020-12-21", + "Value": 204, + "Series": "Food" + }, + { + "Date": "2021-01-18", + "Value": 217, + "Series": "Food" + }, + { + "Date": "2021-02-14", + "Value": 229, + "Series": "Food" + }, + { + "Date": "2021-03-14", + "Value": 233, + "Series": "Food" + }, + { + "Date": "2021-04-10", + "Value": 238, + "Series": "Food" + }, + { + "Date": "2021-05-07", + "Value": 243, + "Series": "Food" + }, + { + "Date": "2021-06-04", + "Value": 238, + "Series": "Food" + }, + { + "Date": "2021-07-01", + "Value": 232, + "Series": "Food" + }, + { + "Date": "2021-07-28", + "Value": 223, + "Series": "Food" + }, + { + "Date": "2021-08-25", + "Value": 222, + "Series": "Food" + }, + { + "Date": "2021-09-21", + "Value": 216, + "Series": "Food" + }, + { + "Date": "2021-10-19", + "Value": 205, + "Series": "Food" + }, + { + "Date": "2021-11-15", + "Value": 199, + "Series": "Food" + }, + { + "Date": "2021-12-12", + "Value": 190, + "Series": "Food" + }, + { + "Date": "2022-01-09", + "Value": 186, + "Series": "Food" + }, + { + "Date": "2022-02-05", + "Value": 193, + "Series": "Food" + }, + { + "Date": "2022-03-04", + "Value": 189, + "Series": "Food" + }, + { + "Date": "2022-04-01", + "Value": 197, + "Series": "Food" + }, + { + "Date": "2022-04-28", + "Value": 202, + "Series": "Food" + }, + { + "Date": "2022-05-26", + "Value": 206, + "Series": "Food" + }, + { + "Date": "2022-06-22", + "Value": 208, + "Series": "Food" + }, + { + "Date": "2022-07-19", + "Value": 214, + "Series": "Food" + }, + { + "Date": "2022-08-16", + "Value": 210, + "Series": "Food" + }, + { + "Date": "2022-09-12", + "Value": 206, + "Series": "Food" + }, + { + "Date": "2022-10-09", + "Value": 216, + "Series": "Food" + }, + { + "Date": "2022-11-06", + "Value": 233, + "Series": "Food" + }, + { + "Date": "2022-12-03", + "Value": 251, + "Series": "Food" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/area-chart/05-card60.flint.json b/test-harness/excel/evaluations/inputs/area-chart/05-card60.flint.json new file mode 100644 index 00000000..7c38068f --- /dev/null +++ b/test-harness/excel/evaluations/inputs/area-chart/05-card60.flint.json @@ -0,0 +1,808 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity", + "Series": "Category" + }, + "chart_spec": { + "chartType": "Area Chart", + "encodings": { + "x": "Date", + "y": "Value", + "color": "Series" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 248, + "Series": "Electronics" + }, + { + "Date": "2020-01-19", + "Value": 259, + "Series": "Electronics" + }, + { + "Date": "2020-02-24", + "Value": 296, + "Series": "Electronics" + }, + { + "Date": "2020-03-14", + "Value": 303, + "Series": "Electronics" + }, + { + "Date": "2020-04-19", + "Value": 336, + "Series": "Electronics" + }, + { + "Date": "2020-05-07", + "Value": 340, + "Series": "Electronics" + }, + { + "Date": "2020-05-26", + "Value": 342, + "Series": "Electronics" + }, + { + "Date": "2020-07-19", + "Value": 380, + "Series": "Electronics" + }, + { + "Date": "2020-08-07", + "Value": 377, + "Series": "Electronics" + }, + { + "Date": "2020-08-25", + "Value": 370, + "Series": "Electronics" + }, + { + "Date": "2020-09-12", + "Value": 380, + "Series": "Electronics" + }, + { + "Date": "2020-10-19", + "Value": 423, + "Series": "Electronics" + }, + { + "Date": "2020-11-06", + "Value": 447, + "Series": "Electronics" + }, + { + "Date": "2020-11-24", + "Value": 466, + "Series": "Electronics" + }, + { + "Date": "2020-12-12", + "Value": 475, + "Series": "Electronics" + }, + { + "Date": "2020-12-31", + "Value": 495, + "Series": "Electronics" + }, + { + "Date": "2021-01-18", + "Value": 509, + "Series": "Electronics" + }, + { + "Date": "2021-02-05", + "Value": 520, + "Series": "Electronics" + }, + { + "Date": "2021-02-23", + "Value": 529, + "Series": "Electronics" + }, + { + "Date": "2021-03-14", + "Value": 536, + "Series": "Electronics" + }, + { + "Date": "2021-04-01", + "Value": 533, + "Series": "Electronics" + }, + { + "Date": "2021-04-19", + "Value": 531, + "Series": "Electronics" + }, + { + "Date": "2021-05-26", + "Value": 550, + "Series": "Electronics" + }, + { + "Date": "2021-06-13", + "Value": 550, + "Series": "Electronics" + }, + { + "Date": "2021-07-01", + "Value": 556, + "Series": "Electronics" + }, + { + "Date": "2021-07-19", + "Value": 548, + "Series": "Electronics" + }, + { + "Date": "2021-08-07", + "Value": 555, + "Series": "Electronics" + }, + { + "Date": "2021-08-25", + "Value": 574, + "Series": "Electronics" + }, + { + "Date": "2021-09-12", + "Value": 600, + "Series": "Electronics" + }, + { + "Date": "2021-09-30", + "Value": 618, + "Series": "Electronics" + }, + { + "Date": "2021-11-06", + "Value": 641, + "Series": "Electronics" + }, + { + "Date": "2021-11-24", + "Value": 647, + "Series": "Electronics" + }, + { + "Date": "2021-12-12", + "Value": 648, + "Series": "Electronics" + }, + { + "Date": "2021-12-31", + "Value": 646, + "Series": "Electronics" + }, + { + "Date": "2022-01-18", + "Value": 636, + "Series": "Electronics" + }, + { + "Date": "2022-02-05", + "Value": 635, + "Series": "Electronics" + }, + { + "Date": "2022-02-23", + "Value": 642, + "Series": "Electronics" + }, + { + "Date": "2022-03-14", + "Value": 646, + "Series": "Electronics" + }, + { + "Date": "2022-04-19", + "Value": 641, + "Series": "Electronics" + }, + { + "Date": "2022-05-07", + "Value": 649, + "Series": "Electronics" + }, + { + "Date": "2022-05-26", + "Value": 652, + "Series": "Electronics" + }, + { + "Date": "2022-06-13", + "Value": 669, + "Series": "Electronics" + }, + { + "Date": "2022-07-01", + "Value": 676, + "Series": "Electronics" + }, + { + "Date": "2022-07-19", + "Value": 683, + "Series": "Electronics" + }, + { + "Date": "2022-08-07", + "Value": 677, + "Series": "Electronics" + }, + { + "Date": "2022-09-12", + "Value": 671, + "Series": "Electronics" + }, + { + "Date": "2022-09-30", + "Value": 676, + "Series": "Electronics" + }, + { + "Date": "2022-10-19", + "Value": 688, + "Series": "Electronics" + }, + { + "Date": "2022-11-06", + "Value": 706, + "Series": "Electronics" + }, + { + "Date": "2022-11-24", + "Value": 716, + "Series": "Electronics" + }, + { + "Date": "2022-12-12", + "Value": 725, + "Series": "Electronics" + }, + { + "Date": "2020-01-01", + "Value": 200, + "Series": "Clothing" + }, + { + "Date": "2020-01-19", + "Value": 206, + "Series": "Clothing" + }, + { + "Date": "2020-02-24", + "Value": 247, + "Series": "Clothing" + }, + { + "Date": "2020-03-14", + "Value": 254, + "Series": "Clothing" + }, + { + "Date": "2020-04-01", + "Value": 256, + "Series": "Clothing" + }, + { + "Date": "2020-04-19", + "Value": 262, + "Series": "Clothing" + }, + { + "Date": "2020-05-26", + "Value": 241, + "Series": "Clothing" + }, + { + "Date": "2020-06-13", + "Value": 234, + "Series": "Clothing" + }, + { + "Date": "2020-07-01", + "Value": 240, + "Series": "Clothing" + }, + { + "Date": "2020-07-19", + "Value": 245, + "Series": "Clothing" + }, + { + "Date": "2020-08-07", + "Value": 232, + "Series": "Clothing" + }, + { + "Date": "2020-08-25", + "Value": 231, + "Series": "Clothing" + }, + { + "Date": "2020-09-12", + "Value": 251, + "Series": "Clothing" + }, + { + "Date": "2020-09-30", + "Value": 258, + "Series": "Clothing" + }, + { + "Date": "2020-10-19", + "Value": 247, + "Series": "Clothing" + }, + { + "Date": "2020-11-06", + "Value": 259, + "Series": "Clothing" + }, + { + "Date": "2020-11-24", + "Value": 285, + "Series": "Clothing" + }, + { + "Date": "2020-12-12", + "Value": 289, + "Series": "Clothing" + }, + { + "Date": "2020-12-31", + "Value": 286, + "Series": "Clothing" + }, + { + "Date": "2021-01-18", + "Value": 290, + "Series": "Clothing" + }, + { + "Date": "2021-02-05", + "Value": 277, + "Series": "Clothing" + }, + { + "Date": "2021-02-23", + "Value": 285, + "Series": "Clothing" + }, + { + "Date": "2021-03-14", + "Value": 296, + "Series": "Clothing" + }, + { + "Date": "2021-04-01", + "Value": 300, + "Series": "Clothing" + }, + { + "Date": "2021-04-19", + "Value": 322, + "Series": "Clothing" + }, + { + "Date": "2021-05-07", + "Value": 349, + "Series": "Clothing" + }, + { + "Date": "2021-05-26", + "Value": 386, + "Series": "Clothing" + }, + { + "Date": "2021-06-13", + "Value": 415, + "Series": "Clothing" + }, + { + "Date": "2021-07-19", + "Value": 436, + "Series": "Clothing" + }, + { + "Date": "2021-08-25", + "Value": 491, + "Series": "Clothing" + }, + { + "Date": "2021-09-12", + "Value": 491, + "Series": "Clothing" + }, + { + "Date": "2021-09-30", + "Value": 495, + "Series": "Clothing" + }, + { + "Date": "2021-10-19", + "Value": 516, + "Series": "Clothing" + }, + { + "Date": "2021-11-24", + "Value": 513, + "Series": "Clothing" + }, + { + "Date": "2021-12-12", + "Value": 528, + "Series": "Clothing" + }, + { + "Date": "2021-12-31", + "Value": 527, + "Series": "Clothing" + }, + { + "Date": "2022-01-18", + "Value": 530, + "Series": "Clothing" + }, + { + "Date": "2022-02-05", + "Value": 546, + "Series": "Clothing" + }, + { + "Date": "2022-02-23", + "Value": 544, + "Series": "Clothing" + }, + { + "Date": "2022-03-14", + "Value": 550, + "Series": "Clothing" + }, + { + "Date": "2022-04-01", + "Value": 547, + "Series": "Clothing" + }, + { + "Date": "2022-04-19", + "Value": 565, + "Series": "Clothing" + }, + { + "Date": "2022-05-26", + "Value": 613, + "Series": "Clothing" + }, + { + "Date": "2022-06-13", + "Value": 616, + "Series": "Clothing" + }, + { + "Date": "2022-07-01", + "Value": 614, + "Series": "Clothing" + }, + { + "Date": "2022-07-19", + "Value": 630, + "Series": "Clothing" + }, + { + "Date": "2022-08-25", + "Value": 653, + "Series": "Clothing" + }, + { + "Date": "2022-09-30", + "Value": 698, + "Series": "Clothing" + }, + { + "Date": "2022-10-19", + "Value": 714, + "Series": "Clothing" + }, + { + "Date": "2022-11-06", + "Value": 736, + "Series": "Clothing" + }, + { + "Date": "2022-11-24", + "Value": 762, + "Series": "Clothing" + }, + { + "Date": "2022-12-12", + "Value": 766, + "Series": "Clothing" + }, + { + "Date": "2020-01-01", + "Value": 87, + "Series": "Food" + }, + { + "Date": "2020-01-19", + "Value": 78, + "Series": "Food" + }, + { + "Date": "2020-02-06", + "Value": 82, + "Series": "Food" + }, + { + "Date": "2020-02-24", + "Value": 96, + "Series": "Food" + }, + { + "Date": "2020-03-14", + "Value": 102, + "Series": "Food" + }, + { + "Date": "2020-04-19", + "Value": 121, + "Series": "Food" + }, + { + "Date": "2020-05-07", + "Value": 136, + "Series": "Food" + }, + { + "Date": "2020-05-26", + "Value": 151, + "Series": "Food" + }, + { + "Date": "2020-06-13", + "Value": 172, + "Series": "Food" + }, + { + "Date": "2020-07-01", + "Value": 182, + "Series": "Food" + }, + { + "Date": "2020-08-07", + "Value": 200, + "Series": "Food" + }, + { + "Date": "2020-08-25", + "Value": 209, + "Series": "Food" + }, + { + "Date": "2020-09-12", + "Value": 215, + "Series": "Food" + }, + { + "Date": "2020-09-30", + "Value": 211, + "Series": "Food" + }, + { + "Date": "2020-10-19", + "Value": 224, + "Series": "Food" + }, + { + "Date": "2020-11-24", + "Value": 242, + "Series": "Food" + }, + { + "Date": "2020-12-12", + "Value": 239, + "Series": "Food" + }, + { + "Date": "2021-01-18", + "Value": 220, + "Series": "Food" + }, + { + "Date": "2021-02-05", + "Value": 210, + "Series": "Food" + }, + { + "Date": "2021-02-23", + "Value": 198, + "Series": "Food" + }, + { + "Date": "2021-03-14", + "Value": 193, + "Series": "Food" + }, + { + "Date": "2021-04-01", + "Value": 176, + "Series": "Food" + }, + { + "Date": "2021-04-19", + "Value": 177, + "Series": "Food" + }, + { + "Date": "2021-05-07", + "Value": 179, + "Series": "Food" + }, + { + "Date": "2021-05-26", + "Value": 189, + "Series": "Food" + }, + { + "Date": "2021-06-13", + "Value": 212, + "Series": "Food" + }, + { + "Date": "2021-07-01", + "Value": 244, + "Series": "Food" + }, + { + "Date": "2021-07-19", + "Value": 281, + "Series": "Food" + }, + { + "Date": "2021-08-07", + "Value": 317, + "Series": "Food" + }, + { + "Date": "2021-08-25", + "Value": 330, + "Series": "Food" + }, + { + "Date": "2021-09-12", + "Value": 339, + "Series": "Food" + }, + { + "Date": "2021-09-30", + "Value": 354, + "Series": "Food" + }, + { + "Date": "2021-10-19", + "Value": 370, + "Series": "Food" + }, + { + "Date": "2021-11-06", + "Value": 385, + "Series": "Food" + }, + { + "Date": "2021-11-24", + "Value": 389, + "Series": "Food" + }, + { + "Date": "2021-12-12", + "Value": 388, + "Series": "Food" + }, + { + "Date": "2021-12-31", + "Value": 390, + "Series": "Food" + }, + { + "Date": "2022-01-18", + "Value": 406, + "Series": "Food" + }, + { + "Date": "2022-02-05", + "Value": 428, + "Series": "Food" + }, + { + "Date": "2022-02-23", + "Value": 433, + "Series": "Food" + }, + { + "Date": "2022-03-14", + "Value": 441, + "Series": "Food" + }, + { + "Date": "2022-04-01", + "Value": 441, + "Series": "Food" + }, + { + "Date": "2022-04-19", + "Value": 444, + "Series": "Food" + }, + { + "Date": "2022-05-07", + "Value": 464, + "Series": "Food" + }, + { + "Date": "2022-06-13", + "Value": 498, + "Series": "Food" + }, + { + "Date": "2022-07-01", + "Value": 506, + "Series": "Food" + }, + { + "Date": "2022-07-19", + "Value": 522, + "Series": "Food" + }, + { + "Date": "2022-08-07", + "Value": 546, + "Series": "Food" + }, + { + "Date": "2022-08-25", + "Value": 578, + "Series": "Food" + }, + { + "Date": "2022-09-12", + "Value": 595, + "Series": "Food" + }, + { + "Date": "2022-10-19", + "Value": 583, + "Series": "Food" + }, + { + "Date": "2022-11-06", + "Value": 597, + "Series": "Food" + }, + { + "Date": "2022-11-24", + "Value": 593, + "Series": "Food" + }, + { + "Date": "2022-12-12", + "Value": 589, + "Series": "Food" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/area-chart/06-card5.flint.json b/test-harness/excel/evaluations/inputs/area-chart/06-card5.flint.json new file mode 100644 index 00000000..723bd777 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/area-chart/06-card5.flint.json @@ -0,0 +1,41 @@ +{ + "semantic_types": { + "Stage": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Area Chart", + "encodings": { + "x": "Stage", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Stage": "Stage 1", + "Value": 217 + }, + { + "Stage": "Stage 2", + "Value": 224 + }, + { + "Stage": "Stage 3", + "Value": 226 + }, + { + "Stage": "Stage 4", + "Value": 235 + }, + { + "Stage": "Stage 5", + "Value": 236 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/area-chart/07-card12.flint.json b/test-harness/excel/evaluations/inputs/area-chart/07-card12.flint.json new file mode 100644 index 00000000..abf3a2cf --- /dev/null +++ b/test-harness/excel/evaluations/inputs/area-chart/07-card12.flint.json @@ -0,0 +1,263 @@ +{ + "semantic_types": { + "Stage": "Category", + "Value": "Quantity", + "Series": "Category" + }, + "chart_spec": { + "chartType": "Area Chart", + "encodings": { + "x": "Stage", + "y": "Value", + "color": "Series" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Stage": "Stage 1", + "Value": 86, + "Series": "Electronics" + }, + { + "Stage": "Stage 2", + "Value": 85, + "Series": "Electronics" + }, + { + "Stage": "Stage 3", + "Value": 83, + "Series": "Electronics" + }, + { + "Stage": "Stage 4", + "Value": 79, + "Series": "Electronics" + }, + { + "Stage": "Stage 5", + "Value": 78, + "Series": "Electronics" + }, + { + "Stage": "Stage 6", + "Value": 78, + "Series": "Electronics" + }, + { + "Stage": "Stage 7", + "Value": 83, + "Series": "Electronics" + }, + { + "Stage": "Stage 8", + "Value": 86, + "Series": "Electronics" + }, + { + "Stage": "Stage 9", + "Value": 84, + "Series": "Electronics" + }, + { + "Stage": "Stage 10", + "Value": 87, + "Series": "Electronics" + }, + { + "Stage": "Stage 11", + "Value": 91, + "Series": "Electronics" + }, + { + "Stage": "Stage 12", + "Value": 99, + "Series": "Electronics" + }, + { + "Stage": "Stage 1", + "Value": 240, + "Series": "Clothing" + }, + { + "Stage": "Stage 2", + "Value": 237, + "Series": "Clothing" + }, + { + "Stage": "Stage 3", + "Value": 234, + "Series": "Clothing" + }, + { + "Stage": "Stage 4", + "Value": 233, + "Series": "Clothing" + }, + { + "Stage": "Stage 5", + "Value": 236, + "Series": "Clothing" + }, + { + "Stage": "Stage 6", + "Value": 245, + "Series": "Clothing" + }, + { + "Stage": "Stage 7", + "Value": 247, + "Series": "Clothing" + }, + { + "Stage": "Stage 8", + "Value": 247, + "Series": "Clothing" + }, + { + "Stage": "Stage 9", + "Value": 253, + "Series": "Clothing" + }, + { + "Stage": "Stage 10", + "Value": 264, + "Series": "Clothing" + }, + { + "Stage": "Stage 11", + "Value": 275, + "Series": "Clothing" + }, + { + "Stage": "Stage 12", + "Value": 284, + "Series": "Clothing" + }, + { + "Stage": "Stage 1", + "Value": 154, + "Series": "Food" + }, + { + "Stage": "Stage 2", + "Value": 143, + "Series": "Food" + }, + { + "Stage": "Stage 3", + "Value": 127, + "Series": "Food" + }, + { + "Stage": "Stage 4", + "Value": 110, + "Series": "Food" + }, + { + "Stage": "Stage 5", + "Value": 89, + "Series": "Food" + }, + { + "Stage": "Stage 6", + "Value": 93, + "Series": "Food" + }, + { + "Stage": "Stage 7", + "Value": 109, + "Series": "Food" + }, + { + "Stage": "Stage 8", + "Value": 129, + "Series": "Food" + }, + { + "Stage": "Stage 9", + "Value": 139, + "Series": "Food" + }, + { + "Stage": "Stage 10", + "Value": 142, + "Series": "Food" + }, + { + "Stage": "Stage 11", + "Value": 133, + "Series": "Food" + }, + { + "Stage": "Stage 12", + "Value": 125, + "Series": "Food" + }, + { + "Stage": "Stage 1", + "Value": 128, + "Series": "Books" + }, + { + "Stage": "Stage 2", + "Value": 124, + "Series": "Books" + }, + { + "Stage": "Stage 3", + "Value": 117, + "Series": "Books" + }, + { + "Stage": "Stage 4", + "Value": 113, + "Series": "Books" + }, + { + "Stage": "Stage 5", + "Value": 105, + "Series": "Books" + }, + { + "Stage": "Stage 6", + "Value": 94, + "Series": "Books" + }, + { + "Stage": "Stage 7", + "Value": 95, + "Series": "Books" + }, + { + "Stage": "Stage 8", + "Value": 102, + "Series": "Books" + }, + { + "Stage": "Stage 9", + "Value": 104, + "Series": "Books" + }, + { + "Stage": "Stage 10", + "Value": 114, + "Series": "Books" + }, + { + "Stage": "Stage 11", + "Value": 125, + "Series": "Books" + }, + { + "Stage": "Stage 12", + "Value": 139, + "Series": "Books" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/area-chart/08-card30.flint.json b/test-harness/excel/evaluations/inputs/area-chart/08-card30.flint.json new file mode 100644 index 00000000..75f09982 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/area-chart/08-card30.flint.json @@ -0,0 +1,141 @@ +{ + "semantic_types": { + "Stage": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Area Chart", + "encodings": { + "x": "Stage", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Stage": "Stage 1", + "Value": 159 + }, + { + "Stage": "Stage 2", + "Value": 163 + }, + { + "Stage": "Stage 3", + "Value": 167 + }, + { + "Stage": "Stage 4", + "Value": 167 + }, + { + "Stage": "Stage 5", + "Value": 168 + }, + { + "Stage": "Stage 6", + "Value": 175 + }, + { + "Stage": "Stage 7", + "Value": 175 + }, + { + "Stage": "Stage 8", + "Value": 187 + }, + { + "Stage": "Stage 9", + "Value": 200 + }, + { + "Stage": "Stage 10", + "Value": 216 + }, + { + "Stage": "Stage 11", + "Value": 223 + }, + { + "Stage": "Stage 12", + "Value": 221 + }, + { + "Stage": "Stage 13", + "Value": 218 + }, + { + "Stage": "Stage 14", + "Value": 209 + }, + { + "Stage": "Stage 15", + "Value": 209 + }, + { + "Stage": "Stage 16", + "Value": 206 + }, + { + "Stage": "Stage 17", + "Value": 209 + }, + { + "Stage": "Stage 18", + "Value": 220 + }, + { + "Stage": "Stage 19", + "Value": 231 + }, + { + "Stage": "Stage 20", + "Value": 234 + }, + { + "Stage": "Stage 21", + "Value": 243 + }, + { + "Stage": "Stage 22", + "Value": 261 + }, + { + "Stage": "Stage 23", + "Value": 282 + }, + { + "Stage": "Stage 24", + "Value": 303 + }, + { + "Stage": "Stage 25", + "Value": 324 + }, + { + "Stage": "Stage 26", + "Value": 332 + }, + { + "Stage": "Stage 27", + "Value": 334 + }, + { + "Stage": "Stage 28", + "Value": 328 + }, + { + "Stage": "Stage 29", + "Value": 332 + }, + { + "Stage": "Stage 30", + "Value": 328 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/area-chart/09-card30.flint.json b/test-harness/excel/evaluations/inputs/area-chart/09-card30.flint.json new file mode 100644 index 00000000..ebbbd6c9 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/area-chart/09-card30.flint.json @@ -0,0 +1,141 @@ +{ + "semantic_types": { + "X": "Quantity", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Area Chart", + "encodings": { + "x": "X", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 0, + "Value": 128 + }, + { + "X": 3.4, + "Value": 136 + }, + { + "X": 6.9, + "Value": 127 + }, + { + "X": 10.3, + "Value": 120 + }, + { + "X": 13.8, + "Value": 127 + }, + { + "X": 17.2, + "Value": 131 + }, + { + "X": 20.7, + "Value": 155 + }, + { + "X": 24.1, + "Value": 167 + }, + { + "X": 27.6, + "Value": 184 + }, + { + "X": 31, + "Value": 201 + }, + { + "X": 34.5, + "Value": 215 + }, + { + "X": 37.9, + "Value": 240 + }, + { + "X": 41.4, + "Value": 241 + }, + { + "X": 44.8, + "Value": 248 + }, + { + "X": 48.3, + "Value": 241 + }, + { + "X": 51.7, + "Value": 258 + }, + { + "X": 55.2, + "Value": 252 + }, + { + "X": 58.6, + "Value": 267 + }, + { + "X": 62.1, + "Value": 283 + }, + { + "X": 65.5, + "Value": 313 + }, + { + "X": 69, + "Value": 331 + }, + { + "X": 72.4, + "Value": 329 + }, + { + "X": 75.9, + "Value": 323 + }, + { + "X": 79.3, + "Value": 335 + }, + { + "X": 82.8, + "Value": 355 + }, + { + "X": 86.2, + "Value": 353 + }, + { + "X": 89.7, + "Value": 337 + }, + { + "X": 93.1, + "Value": 345 + }, + { + "X": 96.6, + "Value": 350 + }, + { + "X": 100, + "Value": 351 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/area-chart/10-card50.flint.json b/test-harness/excel/evaluations/inputs/area-chart/10-card50.flint.json new file mode 100644 index 00000000..15b70510 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/area-chart/10-card50.flint.json @@ -0,0 +1,773 @@ +{ + "semantic_types": { + "X": "Quantity", + "Value": "Quantity", + "Series": "Category" + }, + "chart_spec": { + "chartType": "Area Chart", + "encodings": { + "x": "X", + "y": "Value", + "color": "Series" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 0, + "Value": 213, + "Series": "Electronics" + }, + { + "X": 2, + "Value": 216, + "Series": "Electronics" + }, + { + "X": 4.1, + "Value": 215, + "Series": "Electronics" + }, + { + "X": 6.1, + "Value": 201, + "Series": "Electronics" + }, + { + "X": 8.2, + "Value": 186, + "Series": "Electronics" + }, + { + "X": 10.2, + "Value": 176, + "Series": "Electronics" + }, + { + "X": 12.2, + "Value": 161, + "Series": "Electronics" + }, + { + "X": 14.3, + "Value": 166, + "Series": "Electronics" + }, + { + "X": 16.3, + "Value": 155, + "Series": "Electronics" + }, + { + "X": 18.4, + "Value": 134, + "Series": "Electronics" + }, + { + "X": 20.4, + "Value": 143, + "Series": "Electronics" + }, + { + "X": 22.4, + "Value": 157, + "Series": "Electronics" + }, + { + "X": 24.5, + "Value": 178, + "Series": "Electronics" + }, + { + "X": 26.5, + "Value": 204, + "Series": "Electronics" + }, + { + "X": 28.6, + "Value": 228, + "Series": "Electronics" + }, + { + "X": 30.6, + "Value": 237, + "Series": "Electronics" + }, + { + "X": 32.7, + "Value": 261, + "Series": "Electronics" + }, + { + "X": 34.7, + "Value": 286, + "Series": "Electronics" + }, + { + "X": 36.7, + "Value": 318, + "Series": "Electronics" + }, + { + "X": 38.8, + "Value": 348, + "Series": "Electronics" + }, + { + "X": 40.8, + "Value": 362, + "Series": "Electronics" + }, + { + "X": 42.9, + "Value": 391, + "Series": "Electronics" + }, + { + "X": 44.9, + "Value": 403, + "Series": "Electronics" + }, + { + "X": 46.9, + "Value": 420, + "Series": "Electronics" + }, + { + "X": 49, + "Value": 450, + "Series": "Electronics" + }, + { + "X": 51, + "Value": 481, + "Series": "Electronics" + }, + { + "X": 53.1, + "Value": 495, + "Series": "Electronics" + }, + { + "X": 55.1, + "Value": 515, + "Series": "Electronics" + }, + { + "X": 57.1, + "Value": 544, + "Series": "Electronics" + }, + { + "X": 59.2, + "Value": 547, + "Series": "Electronics" + }, + { + "X": 61.2, + "Value": 535, + "Series": "Electronics" + }, + { + "X": 63.3, + "Value": 518, + "Series": "Electronics" + }, + { + "X": 65.3, + "Value": 500, + "Series": "Electronics" + }, + { + "X": 67.3, + "Value": 494, + "Series": "Electronics" + }, + { + "X": 69.4, + "Value": 476, + "Series": "Electronics" + }, + { + "X": 71.4, + "Value": 469, + "Series": "Electronics" + }, + { + "X": 73.5, + "Value": 465, + "Series": "Electronics" + }, + { + "X": 75.5, + "Value": 469, + "Series": "Electronics" + }, + { + "X": 77.6, + "Value": 467, + "Series": "Electronics" + }, + { + "X": 79.6, + "Value": 451, + "Series": "Electronics" + }, + { + "X": 81.6, + "Value": 434, + "Series": "Electronics" + }, + { + "X": 83.7, + "Value": 432, + "Series": "Electronics" + }, + { + "X": 85.7, + "Value": 417, + "Series": "Electronics" + }, + { + "X": 87.8, + "Value": 426, + "Series": "Electronics" + }, + { + "X": 89.8, + "Value": 418, + "Series": "Electronics" + }, + { + "X": 91.8, + "Value": 416, + "Series": "Electronics" + }, + { + "X": 93.9, + "Value": 423, + "Series": "Electronics" + }, + { + "X": 95.9, + "Value": 441, + "Series": "Electronics" + }, + { + "X": 98, + "Value": 439, + "Series": "Electronics" + }, + { + "X": 100, + "Value": 439, + "Series": "Electronics" + }, + { + "X": 0, + "Value": 111, + "Series": "Clothing" + }, + { + "X": 2, + "Value": 110, + "Series": "Clothing" + }, + { + "X": 4.1, + "Value": 130, + "Series": "Clothing" + }, + { + "X": 6.1, + "Value": 159, + "Series": "Clothing" + }, + { + "X": 8.2, + "Value": 172, + "Series": "Clothing" + }, + { + "X": 10.2, + "Value": 192, + "Series": "Clothing" + }, + { + "X": 12.2, + "Value": 214, + "Series": "Clothing" + }, + { + "X": 14.3, + "Value": 234, + "Series": "Clothing" + }, + { + "X": 16.3, + "Value": 247, + "Series": "Clothing" + }, + { + "X": 18.4, + "Value": 248, + "Series": "Clothing" + }, + { + "X": 20.4, + "Value": 267, + "Series": "Clothing" + }, + { + "X": 22.4, + "Value": 300, + "Series": "Clothing" + }, + { + "X": 24.5, + "Value": 325, + "Series": "Clothing" + }, + { + "X": 26.5, + "Value": 334, + "Series": "Clothing" + }, + { + "X": 28.6, + "Value": 355, + "Series": "Clothing" + }, + { + "X": 30.6, + "Value": 366, + "Series": "Clothing" + }, + { + "X": 32.7, + "Value": 389, + "Series": "Clothing" + }, + { + "X": 34.7, + "Value": 391, + "Series": "Clothing" + }, + { + "X": 36.7, + "Value": 381, + "Series": "Clothing" + }, + { + "X": 38.8, + "Value": 384, + "Series": "Clothing" + }, + { + "X": 40.8, + "Value": 408, + "Series": "Clothing" + }, + { + "X": 42.9, + "Value": 444, + "Series": "Clothing" + }, + { + "X": 44.9, + "Value": 454, + "Series": "Clothing" + }, + { + "X": 46.9, + "Value": 476, + "Series": "Clothing" + }, + { + "X": 49, + "Value": 484, + "Series": "Clothing" + }, + { + "X": 51, + "Value": 504, + "Series": "Clothing" + }, + { + "X": 53.1, + "Value": 536, + "Series": "Clothing" + }, + { + "X": 55.1, + "Value": 545, + "Series": "Clothing" + }, + { + "X": 57.1, + "Value": 539, + "Series": "Clothing" + }, + { + "X": 59.2, + "Value": 558, + "Series": "Clothing" + }, + { + "X": 61.2, + "Value": 579, + "Series": "Clothing" + }, + { + "X": 63.3, + "Value": 612, + "Series": "Clothing" + }, + { + "X": 65.3, + "Value": 629, + "Series": "Clothing" + }, + { + "X": 67.3, + "Value": 658, + "Series": "Clothing" + }, + { + "X": 69.4, + "Value": 672, + "Series": "Clothing" + }, + { + "X": 71.4, + "Value": 684, + "Series": "Clothing" + }, + { + "X": 73.5, + "Value": 678, + "Series": "Clothing" + }, + { + "X": 75.5, + "Value": 658, + "Series": "Clothing" + }, + { + "X": 77.6, + "Value": 632, + "Series": "Clothing" + }, + { + "X": 79.6, + "Value": 636, + "Series": "Clothing" + }, + { + "X": 81.6, + "Value": 622, + "Series": "Clothing" + }, + { + "X": 83.7, + "Value": 598, + "Series": "Clothing" + }, + { + "X": 85.7, + "Value": 588, + "Series": "Clothing" + }, + { + "X": 87.8, + "Value": 572, + "Series": "Clothing" + }, + { + "X": 89.8, + "Value": 555, + "Series": "Clothing" + }, + { + "X": 91.8, + "Value": 554, + "Series": "Clothing" + }, + { + "X": 93.9, + "Value": 538, + "Series": "Clothing" + }, + { + "X": 95.9, + "Value": 521, + "Series": "Clothing" + }, + { + "X": 98, + "Value": 522, + "Series": "Clothing" + }, + { + "X": 100, + "Value": 528, + "Series": "Clothing" + }, + { + "X": 0, + "Value": 203, + "Series": "Food" + }, + { + "X": 2, + "Value": 200, + "Series": "Food" + }, + { + "X": 4.1, + "Value": 205, + "Series": "Food" + }, + { + "X": 6.1, + "Value": 210, + "Series": "Food" + }, + { + "X": 8.2, + "Value": 232, + "Series": "Food" + }, + { + "X": 10.2, + "Value": 261, + "Series": "Food" + }, + { + "X": 12.2, + "Value": 273, + "Series": "Food" + }, + { + "X": 14.3, + "Value": 300, + "Series": "Food" + }, + { + "X": 16.3, + "Value": 336, + "Series": "Food" + }, + { + "X": 18.4, + "Value": 357, + "Series": "Food" + }, + { + "X": 20.4, + "Value": 381, + "Series": "Food" + }, + { + "X": 22.4, + "Value": 411, + "Series": "Food" + }, + { + "X": 24.5, + "Value": 447, + "Series": "Food" + }, + { + "X": 26.5, + "Value": 470, + "Series": "Food" + }, + { + "X": 28.6, + "Value": 481, + "Series": "Food" + }, + { + "X": 30.6, + "Value": 490, + "Series": "Food" + }, + { + "X": 32.7, + "Value": 488, + "Series": "Food" + }, + { + "X": 34.7, + "Value": 475, + "Series": "Food" + }, + { + "X": 36.7, + "Value": 472, + "Series": "Food" + }, + { + "X": 38.8, + "Value": 488, + "Series": "Food" + }, + { + "X": 40.8, + "Value": 515, + "Series": "Food" + }, + { + "X": 42.9, + "Value": 542, + "Series": "Food" + }, + { + "X": 44.9, + "Value": 577, + "Series": "Food" + }, + { + "X": 46.9, + "Value": 618, + "Series": "Food" + }, + { + "X": 49, + "Value": 651, + "Series": "Food" + }, + { + "X": 51, + "Value": 685, + "Series": "Food" + }, + { + "X": 53.1, + "Value": 712, + "Series": "Food" + }, + { + "X": 55.1, + "Value": 747, + "Series": "Food" + }, + { + "X": 57.1, + "Value": 776, + "Series": "Food" + }, + { + "X": 59.2, + "Value": 785, + "Series": "Food" + }, + { + "X": 61.2, + "Value": 779, + "Series": "Food" + }, + { + "X": 63.3, + "Value": 792, + "Series": "Food" + }, + { + "X": 65.3, + "Value": 810, + "Series": "Food" + }, + { + "X": 67.3, + "Value": 836, + "Series": "Food" + }, + { + "X": 69.4, + "Value": 840, + "Series": "Food" + }, + { + "X": 71.4, + "Value": 839, + "Series": "Food" + }, + { + "X": 73.5, + "Value": 846, + "Series": "Food" + }, + { + "X": 75.5, + "Value": 851, + "Series": "Food" + }, + { + "X": 77.6, + "Value": 856, + "Series": "Food" + }, + { + "X": 79.6, + "Value": 856, + "Series": "Food" + }, + { + "X": 81.6, + "Value": 847, + "Series": "Food" + }, + { + "X": 83.7, + "Value": 830, + "Series": "Food" + }, + { + "X": 85.7, + "Value": 836, + "Series": "Food" + }, + { + "X": 87.8, + "Value": 852, + "Series": "Food" + }, + { + "X": 89.8, + "Value": 869, + "Series": "Food" + }, + { + "X": 91.8, + "Value": 873, + "Series": "Food" + }, + { + "X": 93.9, + "Value": 865, + "Series": "Food" + }, + { + "X": 95.9, + "Value": 872, + "Series": "Food" + }, + { + "X": 98, + "Value": 880, + "Series": "Food" + }, + { + "X": 100, + "Value": 898, + "Series": "Food" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/area-chart/11-card200.flint.json b/test-harness/excel/evaluations/inputs/area-chart/11-card200.flint.json new file mode 100644 index 00000000..53d408fc --- /dev/null +++ b/test-harness/excel/evaluations/inputs/area-chart/11-card200.flint.json @@ -0,0 +1,821 @@ +{ + "semantic_types": { + "X": "Quantity", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Area Chart", + "encodings": { + "x": "X", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 0, + "Value": 235 + }, + { + "X": 0.5, + "Value": 220 + }, + { + "X": 1, + "Value": 206 + }, + { + "X": 1.5, + "Value": 208 + }, + { + "X": 2, + "Value": 201 + }, + { + "X": 2.5, + "Value": 212 + }, + { + "X": 3, + "Value": 217 + }, + { + "X": 3.5, + "Value": 205 + }, + { + "X": 4, + "Value": 209 + }, + { + "X": 4.5, + "Value": 222 + }, + { + "X": 5, + "Value": 246 + }, + { + "X": 5.5, + "Value": 273 + }, + { + "X": 6, + "Value": 277 + }, + { + "X": 6.5, + "Value": 300 + }, + { + "X": 7, + "Value": 305 + }, + { + "X": 7.5, + "Value": 299 + }, + { + "X": 8, + "Value": 290 + }, + { + "X": 8.5, + "Value": 304 + }, + { + "X": 9, + "Value": 298 + }, + { + "X": 9.5, + "Value": 314 + }, + { + "X": 10.1, + "Value": 308 + }, + { + "X": 10.6, + "Value": 291 + }, + { + "X": 11.1, + "Value": 288 + }, + { + "X": 11.6, + "Value": 302 + }, + { + "X": 12.1, + "Value": 302 + }, + { + "X": 12.6, + "Value": 297 + }, + { + "X": 13.1, + "Value": 298 + }, + { + "X": 13.6, + "Value": 286 + }, + { + "X": 14.1, + "Value": 273 + }, + { + "X": 14.6, + "Value": 253 + }, + { + "X": 15.1, + "Value": 260 + }, + { + "X": 15.6, + "Value": 284 + }, + { + "X": 16.1, + "Value": 311 + }, + { + "X": 16.6, + "Value": 321 + }, + { + "X": 17.1, + "Value": 338 + }, + { + "X": 17.6, + "Value": 365 + }, + { + "X": 18.1, + "Value": 368 + }, + { + "X": 18.6, + "Value": 373 + }, + { + "X": 19.1, + "Value": 371 + }, + { + "X": 19.6, + "Value": 390 + }, + { + "X": 20.1, + "Value": 415 + }, + { + "X": 20.6, + "Value": 440 + }, + { + "X": 21.1, + "Value": 468 + }, + { + "X": 21.6, + "Value": 472 + }, + { + "X": 22.1, + "Value": 472 + }, + { + "X": 22.6, + "Value": 461 + }, + { + "X": 23.1, + "Value": 469 + }, + { + "X": 23.6, + "Value": 478 + }, + { + "X": 24.1, + "Value": 483 + }, + { + "X": 24.6, + "Value": 473 + }, + { + "X": 25.1, + "Value": 473 + }, + { + "X": 25.6, + "Value": 487 + }, + { + "X": 26.1, + "Value": 489 + }, + { + "X": 26.6, + "Value": 505 + }, + { + "X": 27.1, + "Value": 517 + }, + { + "X": 27.6, + "Value": 509 + }, + { + "X": 28.1, + "Value": 520 + }, + { + "X": 28.6, + "Value": 534 + }, + { + "X": 29.1, + "Value": 542 + }, + { + "X": 29.6, + "Value": 561 + }, + { + "X": 30.2, + "Value": 571 + }, + { + "X": 30.7, + "Value": 587 + }, + { + "X": 31.2, + "Value": 588 + }, + { + "X": 31.7, + "Value": 599 + }, + { + "X": 32.2, + "Value": 619 + }, + { + "X": 32.7, + "Value": 616 + }, + { + "X": 33.2, + "Value": 602 + }, + { + "X": 33.7, + "Value": 602 + }, + { + "X": 34.2, + "Value": 594 + }, + { + "X": 34.7, + "Value": 597 + }, + { + "X": 35.2, + "Value": 615 + }, + { + "X": 35.7, + "Value": 627 + }, + { + "X": 36.2, + "Value": 630 + }, + { + "X": 36.7, + "Value": 639 + }, + { + "X": 37.2, + "Value": 639 + }, + { + "X": 37.7, + "Value": 627 + }, + { + "X": 38.2, + "Value": 629 + }, + { + "X": 38.7, + "Value": 648 + }, + { + "X": 39.2, + "Value": 680 + }, + { + "X": 39.7, + "Value": 712 + }, + { + "X": 40.2, + "Value": 748 + }, + { + "X": 40.7, + "Value": 775 + }, + { + "X": 41.2, + "Value": 807 + }, + { + "X": 41.7, + "Value": 822 + }, + { + "X": 42.2, + "Value": 818 + }, + { + "X": 42.7, + "Value": 836 + }, + { + "X": 43.2, + "Value": 838 + }, + { + "X": 43.7, + "Value": 842 + }, + { + "X": 44.2, + "Value": 854 + }, + { + "X": 44.7, + "Value": 874 + }, + { + "X": 45.2, + "Value": 905 + }, + { + "X": 45.7, + "Value": 933 + }, + { + "X": 46.2, + "Value": 941 + }, + { + "X": 46.7, + "Value": 951 + }, + { + "X": 47.2, + "Value": 950 + }, + { + "X": 47.7, + "Value": 937 + }, + { + "X": 48.2, + "Value": 924 + }, + { + "X": 48.7, + "Value": 903 + }, + { + "X": 49.2, + "Value": 880 + }, + { + "X": 49.7, + "Value": 856 + }, + { + "X": 50.3, + "Value": 836 + }, + { + "X": 50.8, + "Value": 826 + }, + { + "X": 51.3, + "Value": 820 + }, + { + "X": 51.8, + "Value": 810 + }, + { + "X": 52.3, + "Value": 791 + }, + { + "X": 52.8, + "Value": 791 + }, + { + "X": 53.3, + "Value": 785 + }, + { + "X": 53.8, + "Value": 774 + }, + { + "X": 54.3, + "Value": 754 + }, + { + "X": 54.8, + "Value": 740 + }, + { + "X": 55.3, + "Value": 746 + }, + { + "X": 55.8, + "Value": 766 + }, + { + "X": 56.3, + "Value": 784 + }, + { + "X": 56.8, + "Value": 782 + }, + { + "X": 57.3, + "Value": 766 + }, + { + "X": 57.8, + "Value": 767 + }, + { + "X": 58.3, + "Value": 787 + }, + { + "X": 58.8, + "Value": 816 + }, + { + "X": 59.3, + "Value": 840 + }, + { + "X": 59.8, + "Value": 839 + }, + { + "X": 60.3, + "Value": 855 + }, + { + "X": 60.8, + "Value": 859 + }, + { + "X": 61.3, + "Value": 866 + }, + { + "X": 61.8, + "Value": 865 + }, + { + "X": 62.3, + "Value": 863 + }, + { + "X": 62.8, + "Value": 863 + }, + { + "X": 63.3, + "Value": 869 + }, + { + "X": 63.8, + "Value": 860 + }, + { + "X": 64.3, + "Value": 871 + }, + { + "X": 64.8, + "Value": 887 + }, + { + "X": 65.3, + "Value": 885 + }, + { + "X": 65.8, + "Value": 896 + }, + { + "X": 66.3, + "Value": 903 + }, + { + "X": 66.8, + "Value": 926 + }, + { + "X": 67.3, + "Value": 930 + }, + { + "X": 67.8, + "Value": 922 + }, + { + "X": 68.3, + "Value": 917 + }, + { + "X": 68.8, + "Value": 904 + }, + { + "X": 69.3, + "Value": 909 + }, + { + "X": 69.8, + "Value": 898 + }, + { + "X": 70.4, + "Value": 905 + }, + { + "X": 70.9, + "Value": 927 + }, + { + "X": 71.4, + "Value": 960 + }, + { + "X": 71.9, + "Value": 978 + }, + { + "X": 72.4, + "Value": 989 + }, + { + "X": 72.9, + "Value": 1008 + }, + { + "X": 73.4, + "Value": 1018 + }, + { + "X": 73.9, + "Value": 1044 + }, + { + "X": 74.4, + "Value": 1057 + }, + { + "X": 74.9, + "Value": 1084 + }, + { + "X": 75.4, + "Value": 1105 + }, + { + "X": 75.9, + "Value": 1119 + }, + { + "X": 76.4, + "Value": 1140 + }, + { + "X": 76.9, + "Value": 1157 + }, + { + "X": 77.4, + "Value": 1184 + }, + { + "X": 77.9, + "Value": 1190 + }, + { + "X": 78.4, + "Value": 1201 + }, + { + "X": 78.9, + "Value": 1218 + }, + { + "X": 79.4, + "Value": 1237 + }, + { + "X": 79.9, + "Value": 1259 + }, + { + "X": 80.4, + "Value": 1266 + }, + { + "X": 80.9, + "Value": 1255 + }, + { + "X": 81.4, + "Value": 1261 + }, + { + "X": 81.9, + "Value": 1259 + }, + { + "X": 82.4, + "Value": 1253 + }, + { + "X": 82.9, + "Value": 1268 + }, + { + "X": 83.4, + "Value": 1272 + }, + { + "X": 83.9, + "Value": 1266 + }, + { + "X": 84.4, + "Value": 1262 + }, + { + "X": 84.9, + "Value": 1250 + }, + { + "X": 85.4, + "Value": 1232 + }, + { + "X": 85.9, + "Value": 1229 + }, + { + "X": 86.4, + "Value": 1224 + }, + { + "X": 86.9, + "Value": 1234 + }, + { + "X": 87.4, + "Value": 1228 + }, + { + "X": 87.9, + "Value": 1214 + }, + { + "X": 88.4, + "Value": 1220 + }, + { + "X": 88.9, + "Value": 1214 + }, + { + "X": 89.4, + "Value": 1221 + }, + { + "X": 89.9, + "Value": 1212 + }, + { + "X": 90.5, + "Value": 1197 + }, + { + "X": 91, + "Value": 1189 + }, + { + "X": 91.5, + "Value": 1205 + }, + { + "X": 92, + "Value": 1210 + }, + { + "X": 92.5, + "Value": 1216 + }, + { + "X": 93, + "Value": 1211 + }, + { + "X": 93.5, + "Value": 1207 + }, + { + "X": 94, + "Value": 1194 + }, + { + "X": 94.5, + "Value": 1184 + }, + { + "X": 95, + "Value": 1170 + }, + { + "X": 95.5, + "Value": 1163 + }, + { + "X": 96, + "Value": 1150 + }, + { + "X": 96.5, + "Value": 1153 + }, + { + "X": 97, + "Value": 1153 + }, + { + "X": 97.5, + "Value": 1145 + }, + { + "X": 98, + "Value": 1129 + }, + { + "X": 98.5, + "Value": 1136 + }, + { + "X": 99, + "Value": 1147 + }, + { + "X": 99.5, + "Value": 1170 + }, + { + "X": 100, + "Value": 1180 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/00-card5.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/00-card5.flint.json new file mode 100644 index 00000000..425701d8 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/00-card5.flint.json @@ -0,0 +1,41 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "Category", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Value": 11 + }, + { + "Category": "Phone", + "Value": 162 + }, + { + "Category": "Tablet", + "Value": 565 + }, + { + "Category": "Desktop", + "Value": 866 + }, + { + "Category": "Monitor", + "Value": 284 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/01-card20.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/01-card20.flint.json new file mode 100644 index 00000000..ed57611f --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/01-card20.flint.json @@ -0,0 +1,101 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "Category", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Value": 897 + }, + { + "Category": "Phone", + "Value": 707 + }, + { + "Category": "Tablet", + "Value": 888 + }, + { + "Category": "Desktop", + "Value": 930 + }, + { + "Category": "Monitor", + "Value": 475 + }, + { + "Category": "Keyboard", + "Value": 357 + }, + { + "Category": "Mouse", + "Value": 942 + }, + { + "Category": "Headphones", + "Value": 106 + }, + { + "Category": "Speaker", + "Value": 463 + }, + { + "Category": "Camera", + "Value": 353 + }, + { + "Category": "TV", + "Value": 970 + }, + { + "Category": "Router", + "Value": 124 + }, + { + "Category": "Printer", + "Value": 772 + }, + { + "Category": "Scanner", + "Value": 348 + }, + { + "Category": "SSD", + "Value": 687 + }, + { + "Category": "HDD", + "Value": 751 + }, + { + "Category": "RAM", + "Value": 680 + }, + { + "Category": "GPU", + "Value": 899 + }, + { + "Category": "CPU", + "Value": 53 + }, + { + "Category": "Motherboard", + "Value": 621 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/02-card20.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/02-card20.flint.json new file mode 100644 index 00000000..ee5c4716 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/02-card20.flint.json @@ -0,0 +1,101 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "Category", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Value": 696 + }, + { + "Category": "Phone", + "Value": 205 + }, + { + "Category": "Tablet", + "Value": 398 + }, + { + "Category": "Desktop", + "Value": 604 + }, + { + "Category": "Monitor", + "Value": 128 + }, + { + "Category": "Keyboard", + "Value": 42 + }, + { + "Category": "Mouse", + "Value": 228 + }, + { + "Category": "Headphones", + "Value": 253 + }, + { + "Category": "Speaker", + "Value": 749 + }, + { + "Category": "Camera", + "Value": 612 + }, + { + "Category": "TV", + "Value": 825 + }, + { + "Category": "Router", + "Value": 271 + }, + { + "Category": "Printer", + "Value": 645 + }, + { + "Category": "Scanner", + "Value": 113 + }, + { + "Category": "SSD", + "Value": 539 + }, + { + "Category": "HDD", + "Value": 707 + }, + { + "Category": "RAM", + "Value": 262 + }, + { + "Category": "GPU", + "Value": 273 + }, + { + "Category": "CPU", + "Value": 342 + }, + { + "Category": "Motherboard", + "Value": 160 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/03-card100.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/03-card100.flint.json new file mode 100644 index 00000000..eb40f30e --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/03-card100.flint.json @@ -0,0 +1,421 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "Category", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "James Walker", + "Value": 276 + }, + { + "Category": "Paul Wilson", + "Value": 172 + }, + { + "Category": "Jessica Martin", + "Value": 476 + }, + { + "Category": "Christopher Moore", + "Value": 278 + }, + { + "Category": "Betty Wilson", + "Value": 645 + }, + { + "Category": "Steven Lewis", + "Value": 653 + }, + { + "Category": "Karen Lopez", + "Value": 775 + }, + { + "Category": "Sandra Wright", + "Value": 780 + }, + { + "Category": "Daniel King", + "Value": 496 + }, + { + "Category": "Mark Taylor", + "Value": 927 + }, + { + "Category": "Sandra Thomas", + "Value": 654 + }, + { + "Category": "Karen Rodriguez", + "Value": 655 + }, + { + "Category": "Patricia Jackson", + "Value": 768 + }, + { + "Category": "Donna Hill", + "Value": 922 + }, + { + "Category": "Donna White", + "Value": 66 + }, + { + "Category": "Michael Brown", + "Value": 471 + }, + { + "Category": "Elizabeth Robinson", + "Value": 458 + }, + { + "Category": "Mary Jones", + "Value": 633 + }, + { + "Category": "Richard Rodriguez", + "Value": 904 + }, + { + "Category": "Christopher Clark", + "Value": 668 + }, + { + "Category": "Christopher Lopez", + "Value": 404 + }, + { + "Category": "Susan Ramirez", + "Value": 618 + }, + { + "Category": "Steven Wilson", + "Value": 83 + }, + { + "Category": "Paul Anderson", + "Value": 779 + }, + { + "Category": "Joseph Rodriguez", + "Value": 381 + }, + { + "Category": "Elizabeth Wright", + "Value": 80 + }, + { + "Category": "Kimberly Jackson", + "Value": 420 + }, + { + "Category": "Betty Hernandez", + "Value": 711 + }, + { + "Category": "David King", + "Value": 388 + }, + { + "Category": "Matthew Lopez", + "Value": 975 + }, + { + "Category": "Susan Hernandez", + "Value": 450 + }, + { + "Category": "Jennifer Lee", + "Value": 107 + }, + { + "Category": "Richard Flores", + "Value": 18 + }, + { + "Category": "John Anderson", + "Value": 160 + }, + { + "Category": "Kimberly Wright", + "Value": 30 + }, + { + "Category": "Joseph Williams", + "Value": 784 + }, + { + "Category": "Lisa Torres", + "Value": 541 + }, + { + "Category": "Andrew Rodriguez", + "Value": 591 + }, + { + "Category": "Karen Johnson", + "Value": 847 + }, + { + "Category": "Steven Jones", + "Value": 826 + }, + { + "Category": "Joshua Ramirez", + "Value": 955 + }, + { + "Category": "Emily Martinez", + "Value": 626 + }, + { + "Category": "Robert Walker", + "Value": 546 + }, + { + "Category": "Robert Lewis", + "Value": 946 + }, + { + "Category": "Sandra Lopez", + "Value": 859 + }, + { + "Category": "Nancy Miller", + "Value": 326 + }, + { + "Category": "Christopher Sanchez", + "Value": 636 + }, + { + "Category": "Daniel Flores", + "Value": 111 + }, + { + "Category": "Mary Walker", + "Value": 334 + }, + { + "Category": "Anthony Ramirez", + "Value": 120 + }, + { + "Category": "Anthony Hill", + "Value": 602 + }, + { + "Category": "Matthew Miller", + "Value": 216 + }, + { + "Category": "Andrew King", + "Value": 160 + }, + { + "Category": "William Perez", + "Value": 932 + }, + { + "Category": "William Martinez", + "Value": 544 + }, + { + "Category": "Margaret Garcia", + "Value": 733 + }, + { + "Category": "Barbara Anderson", + "Value": 794 + }, + { + "Category": "Thomas Smith", + "Value": 724 + }, + { + "Category": "Kimberly Thomas", + "Value": 834 + }, + { + "Category": "Karen Garcia", + "Value": 378 + }, + { + "Category": "Sarah Torres", + "Value": 174 + }, + { + "Category": "Emily Hill", + "Value": 248 + }, + { + "Category": "Sarah Walker", + "Value": 312 + }, + { + "Category": "Michael Clark", + "Value": 451 + }, + { + "Category": "Joshua Wright", + "Value": 850 + }, + { + "Category": "Andrew Walker", + "Value": 541 + }, + { + "Category": "Nancy Young", + "Value": 831 + }, + { + "Category": "John Lewis", + "Value": 464 + }, + { + "Category": "John Brown", + "Value": 83 + }, + { + "Category": "Anthony Thomas", + "Value": 490 + }, + { + "Category": "Joshua Moore", + "Value": 212 + }, + { + "Category": "John Hernandez", + "Value": 977 + }, + { + "Category": "James Perez", + "Value": 282 + }, + { + "Category": "James Scott", + "Value": 476 + }, + { + "Category": "Matthew Sanchez", + "Value": 52 + }, + { + "Category": "Joseph Sanchez", + "Value": 108 + }, + { + "Category": "Paul Perez", + "Value": 464 + }, + { + "Category": "Joshua Rodriguez", + "Value": 307 + }, + { + "Category": "Anthony Sanchez", + "Value": 435 + }, + { + "Category": "Linda King", + "Value": 691 + }, + { + "Category": "Elizabeth Smith", + "Value": 982 + }, + { + "Category": "Sandra Miller", + "Value": 792 + }, + { + "Category": "Nancy Allen", + "Value": 991 + }, + { + "Category": "Patricia Brown", + "Value": 99 + }, + { + "Category": "Lisa Clark", + "Value": 756 + }, + { + "Category": "Lisa Thompson", + "Value": 702 + }, + { + "Category": "Nancy Clark", + "Value": 214 + }, + { + "Category": "Steven Miller", + "Value": 43 + }, + { + "Category": "Charles King", + "Value": 143 + }, + { + "Category": "Paul Harris", + "Value": 586 + }, + { + "Category": "Ashley Jackson", + "Value": 775 + }, + { + "Category": "John Moore", + "Value": 974 + }, + { + "Category": "Betty Flores", + "Value": 756 + }, + { + "Category": "Linda Young", + "Value": 721 + }, + { + "Category": "Joshua Jones", + "Value": 562 + }, + { + "Category": "Margaret Anderson", + "Value": 21 + }, + { + "Category": "Anthony Wilson", + "Value": 545 + }, + { + "Category": "Karen Jones", + "Value": 618 + }, + { + "Category": "Daniel Rodriguez", + "Value": 817 + }, + { + "Category": "Betty Clark", + "Value": 337 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/04-card5.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/04-card5.flint.json new file mode 100644 index 00000000..100b7d51 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/04-card5.flint.json @@ -0,0 +1,98 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "Category", + "y": "Value", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Value": 878, + "Segment": "USA" + }, + { + "Category": "Laptop", + "Value": 190, + "Segment": "China" + }, + { + "Category": "Laptop", + "Value": 495, + "Segment": "Japan" + }, + { + "Category": "Phone", + "Value": 221, + "Segment": "USA" + }, + { + "Category": "Phone", + "Value": 853, + "Segment": "China" + }, + { + "Category": "Phone", + "Value": 409, + "Segment": "Japan" + }, + { + "Category": "Tablet", + "Value": 118, + "Segment": "USA" + }, + { + "Category": "Tablet", + "Value": 607, + "Segment": "China" + }, + { + "Category": "Tablet", + "Value": 976, + "Segment": "Japan" + }, + { + "Category": "Desktop", + "Value": 926, + "Segment": "USA" + }, + { + "Category": "Desktop", + "Value": 928, + "Segment": "China" + }, + { + "Category": "Desktop", + "Value": 675, + "Segment": "Japan" + }, + { + "Category": "Monitor", + "Value": 134, + "Segment": "USA" + }, + { + "Category": "Monitor", + "Value": 172, + "Segment": "China" + }, + { + "Category": "Monitor", + "Value": 314, + "Segment": "Japan" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/05-card5.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/05-card5.flint.json new file mode 100644 index 00000000..ec70014f --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/05-card5.flint.json @@ -0,0 +1,523 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "Category", + "y": "Value", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Value": 786, + "Segment": "USA" + }, + { + "Category": "Laptop", + "Value": 647, + "Segment": "China" + }, + { + "Category": "Laptop", + "Value": 932, + "Segment": "Japan" + }, + { + "Category": "Laptop", + "Value": 332, + "Segment": "Germany" + }, + { + "Category": "Laptop", + "Value": 839, + "Segment": "UK" + }, + { + "Category": "Laptop", + "Value": 176, + "Segment": "France" + }, + { + "Category": "Laptop", + "Value": 653, + "Segment": "India" + }, + { + "Category": "Laptop", + "Value": 210, + "Segment": "Brazil" + }, + { + "Category": "Laptop", + "Value": 751, + "Segment": "Canada" + }, + { + "Category": "Laptop", + "Value": 41, + "Segment": "Australia" + }, + { + "Category": "Laptop", + "Value": 128, + "Segment": "South Korea" + }, + { + "Category": "Laptop", + "Value": 569, + "Segment": "Mexico" + }, + { + "Category": "Laptop", + "Value": 225, + "Segment": "Italy" + }, + { + "Category": "Laptop", + "Value": 228, + "Segment": "Spain" + }, + { + "Category": "Laptop", + "Value": 115, + "Segment": "Russia" + }, + { + "Category": "Laptop", + "Value": 539, + "Segment": "Netherlands" + }, + { + "Category": "Laptop", + "Value": 313, + "Segment": "Sweden" + }, + { + "Category": "Laptop", + "Value": 516, + "Segment": "Norway" + }, + { + "Category": "Laptop", + "Value": 322, + "Segment": "Denmark" + }, + { + "Category": "Laptop", + "Value": 535, + "Segment": "Finland" + }, + { + "Category": "Phone", + "Value": 953, + "Segment": "USA" + }, + { + "Category": "Phone", + "Value": 238, + "Segment": "China" + }, + { + "Category": "Phone", + "Value": 896, + "Segment": "Japan" + }, + { + "Category": "Phone", + "Value": 176, + "Segment": "Germany" + }, + { + "Category": "Phone", + "Value": 173, + "Segment": "UK" + }, + { + "Category": "Phone", + "Value": 530, + "Segment": "France" + }, + { + "Category": "Phone", + "Value": 960, + "Segment": "India" + }, + { + "Category": "Phone", + "Value": 893, + "Segment": "Brazil" + }, + { + "Category": "Phone", + "Value": 22, + "Segment": "Canada" + }, + { + "Category": "Phone", + "Value": 95, + "Segment": "Australia" + }, + { + "Category": "Phone", + "Value": 135, + "Segment": "South Korea" + }, + { + "Category": "Phone", + "Value": 600, + "Segment": "Mexico" + }, + { + "Category": "Phone", + "Value": 49, + "Segment": "Italy" + }, + { + "Category": "Phone", + "Value": 759, + "Segment": "Spain" + }, + { + "Category": "Phone", + "Value": 589, + "Segment": "Russia" + }, + { + "Category": "Phone", + "Value": 232, + "Segment": "Netherlands" + }, + { + "Category": "Phone", + "Value": 145, + "Segment": "Sweden" + }, + { + "Category": "Phone", + "Value": 281, + "Segment": "Norway" + }, + { + "Category": "Phone", + "Value": 934, + "Segment": "Denmark" + }, + { + "Category": "Phone", + "Value": 475, + "Segment": "Finland" + }, + { + "Category": "Tablet", + "Value": 899, + "Segment": "USA" + }, + { + "Category": "Tablet", + "Value": 228, + "Segment": "China" + }, + { + "Category": "Tablet", + "Value": 717, + "Segment": "Japan" + }, + { + "Category": "Tablet", + "Value": 447, + "Segment": "Germany" + }, + { + "Category": "Tablet", + "Value": 136, + "Segment": "UK" + }, + { + "Category": "Tablet", + "Value": 932, + "Segment": "France" + }, + { + "Category": "Tablet", + "Value": 745, + "Segment": "India" + }, + { + "Category": "Tablet", + "Value": 449, + "Segment": "Brazil" + }, + { + "Category": "Tablet", + "Value": 350, + "Segment": "Canada" + }, + { + "Category": "Tablet", + "Value": 409, + "Segment": "Australia" + }, + { + "Category": "Tablet", + "Value": 675, + "Segment": "South Korea" + }, + { + "Category": "Tablet", + "Value": 660, + "Segment": "Mexico" + }, + { + "Category": "Tablet", + "Value": 14, + "Segment": "Italy" + }, + { + "Category": "Tablet", + "Value": 975, + "Segment": "Spain" + }, + { + "Category": "Tablet", + "Value": 927, + "Segment": "Russia" + }, + { + "Category": "Tablet", + "Value": 569, + "Segment": "Netherlands" + }, + { + "Category": "Tablet", + "Value": 81, + "Segment": "Sweden" + }, + { + "Category": "Tablet", + "Value": 657, + "Segment": "Norway" + }, + { + "Category": "Tablet", + "Value": 180, + "Segment": "Denmark" + }, + { + "Category": "Tablet", + "Value": 910, + "Segment": "Finland" + }, + { + "Category": "Desktop", + "Value": 607, + "Segment": "USA" + }, + { + "Category": "Desktop", + "Value": 504, + "Segment": "China" + }, + { + "Category": "Desktop", + "Value": 339, + "Segment": "Japan" + }, + { + "Category": "Desktop", + "Value": 524, + "Segment": "Germany" + }, + { + "Category": "Desktop", + "Value": 349, + "Segment": "UK" + }, + { + "Category": "Desktop", + "Value": 895, + "Segment": "France" + }, + { + "Category": "Desktop", + "Value": 770, + "Segment": "India" + }, + { + "Category": "Desktop", + "Value": 213, + "Segment": "Brazil" + }, + { + "Category": "Desktop", + "Value": 956, + "Segment": "Canada" + }, + { + "Category": "Desktop", + "Value": 667, + "Segment": "Australia" + }, + { + "Category": "Desktop", + "Value": 592, + "Segment": "South Korea" + }, + { + "Category": "Desktop", + "Value": 12, + "Segment": "Mexico" + }, + { + "Category": "Desktop", + "Value": 401, + "Segment": "Italy" + }, + { + "Category": "Desktop", + "Value": 920, + "Segment": "Spain" + }, + { + "Category": "Desktop", + "Value": 44, + "Segment": "Russia" + }, + { + "Category": "Desktop", + "Value": 937, + "Segment": "Netherlands" + }, + { + "Category": "Desktop", + "Value": 558, + "Segment": "Sweden" + }, + { + "Category": "Desktop", + "Value": 606, + "Segment": "Norway" + }, + { + "Category": "Desktop", + "Value": 578, + "Segment": "Denmark" + }, + { + "Category": "Desktop", + "Value": 471, + "Segment": "Finland" + }, + { + "Category": "Monitor", + "Value": 159, + "Segment": "USA" + }, + { + "Category": "Monitor", + "Value": 973, + "Segment": "China" + }, + { + "Category": "Monitor", + "Value": 756, + "Segment": "Japan" + }, + { + "Category": "Monitor", + "Value": 668, + "Segment": "Germany" + }, + { + "Category": "Monitor", + "Value": 521, + "Segment": "UK" + }, + { + "Category": "Monitor", + "Value": 160, + "Segment": "France" + }, + { + "Category": "Monitor", + "Value": 913, + "Segment": "India" + }, + { + "Category": "Monitor", + "Value": 367, + "Segment": "Brazil" + }, + { + "Category": "Monitor", + "Value": 58, + "Segment": "Canada" + }, + { + "Category": "Monitor", + "Value": 639, + "Segment": "Australia" + }, + { + "Category": "Monitor", + "Value": 69, + "Segment": "South Korea" + }, + { + "Category": "Monitor", + "Value": 97, + "Segment": "Mexico" + }, + { + "Category": "Monitor", + "Value": 342, + "Segment": "Italy" + }, + { + "Category": "Monitor", + "Value": 736, + "Segment": "Spain" + }, + { + "Category": "Monitor", + "Value": 919, + "Segment": "Russia" + }, + { + "Category": "Monitor", + "Value": 775, + "Segment": "Netherlands" + }, + { + "Category": "Monitor", + "Value": 257, + "Segment": "Sweden" + }, + { + "Category": "Monitor", + "Value": 66, + "Segment": "Norway" + }, + { + "Category": "Monitor", + "Value": 531, + "Segment": "Denmark" + }, + { + "Category": "Monitor", + "Value": 646, + "Segment": "Finland" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/06-card10.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/06-card10.flint.json new file mode 100644 index 00000000..6af11afa --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/06-card10.flint.json @@ -0,0 +1,61 @@ +{ + "semantic_types": { + "X": "Quantity", + "Group": "Category" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "X", + "y": "Group" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Group": "Laptop", + "X": 893 + }, + { + "Group": "Phone", + "X": 872 + }, + { + "Group": "Tablet", + "X": 460 + }, + { + "Group": "Desktop", + "X": 182 + }, + { + "Group": "Monitor", + "X": 406 + }, + { + "Group": "Keyboard", + "X": 958 + }, + { + "Group": "Mouse", + "X": 391 + }, + { + "Group": "Headphones", + "X": 361 + }, + { + "Group": "Speaker", + "X": 115 + }, + { + "Group": "Camera", + "X": 884 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/07-card96.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/07-card96.flint.json new file mode 100644 index 00000000..000f554f --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/07-card96.flint.json @@ -0,0 +1,421 @@ +{ + "semantic_types": { + "X": "Quantity", + "Group": "Category" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "X", + "y": "Group" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Group": "James Walker", + "X": 224 + }, + { + "Group": "Paul Wilson", + "X": 757 + }, + { + "Group": "Jessica Martin", + "X": 986 + }, + { + "Group": "Christopher Moore", + "X": 922 + }, + { + "Group": "Betty Wilson", + "X": 225 + }, + { + "Group": "Steven Lewis", + "X": 409 + }, + { + "Group": "Karen Lopez", + "X": 690 + }, + { + "Group": "Sandra Wright", + "X": 393 + }, + { + "Group": "Daniel King", + "X": 254 + }, + { + "Group": "Mark Taylor", + "X": 223 + }, + { + "Group": "Sandra Thomas", + "X": 403 + }, + { + "Group": "Karen Rodriguez", + "X": 140 + }, + { + "Group": "Patricia Jackson", + "X": 191 + }, + { + "Group": "Donna Hill", + "X": 330 + }, + { + "Group": "Donna White", + "X": 411 + }, + { + "Group": "Michael Brown", + "X": 973 + }, + { + "Group": "Elizabeth Robinson", + "X": 649 + }, + { + "Group": "Mary Jones", + "X": 816 + }, + { + "Group": "Richard Rodriguez", + "X": 110 + }, + { + "Group": "Christopher Clark", + "X": 691 + }, + { + "Group": "Christopher Lopez", + "X": 837 + }, + { + "Group": "Susan Ramirez", + "X": 775 + }, + { + "Group": "Steven Wilson", + "X": 796 + }, + { + "Group": "Paul Anderson", + "X": 720 + }, + { + "Group": "Joseph Rodriguez", + "X": 366 + }, + { + "Group": "Elizabeth Wright", + "X": 172 + }, + { + "Group": "Kimberly Jackson", + "X": 942 + }, + { + "Group": "Betty Hernandez", + "X": 477 + }, + { + "Group": "David King", + "X": 605 + }, + { + "Group": "Matthew Lopez", + "X": 482 + }, + { + "Group": "Susan Hernandez", + "X": 628 + }, + { + "Group": "Jennifer Lee", + "X": 301 + }, + { + "Group": "Richard Flores", + "X": 953 + }, + { + "Group": "John Anderson", + "X": 350 + }, + { + "Group": "Kimberly Wright", + "X": 648 + }, + { + "Group": "Joseph Williams", + "X": 823 + }, + { + "Group": "Lisa Torres", + "X": 704 + }, + { + "Group": "Andrew Rodriguez", + "X": 879 + }, + { + "Group": "Karen Johnson", + "X": 984 + }, + { + "Group": "Steven Jones", + "X": 746 + }, + { + "Group": "Joshua Ramirez", + "X": 265 + }, + { + "Group": "Emily Martinez", + "X": 616 + }, + { + "Group": "Robert Walker", + "X": 397 + }, + { + "Group": "Robert Lewis", + "X": 801 + }, + { + "Group": "Sandra Lopez", + "X": 967 + }, + { + "Group": "Nancy Miller", + "X": 306 + }, + { + "Group": "Christopher Sanchez", + "X": 311 + }, + { + "Group": "Daniel Flores", + "X": 177 + }, + { + "Group": "Mary Walker", + "X": 537 + }, + { + "Group": "Anthony Ramirez", + "X": 32 + }, + { + "Group": "Anthony Hill", + "X": 333 + }, + { + "Group": "Matthew Miller", + "X": 687 + }, + { + "Group": "Andrew King", + "X": 901 + }, + { + "Group": "William Perez", + "X": 605 + }, + { + "Group": "William Martinez", + "X": 538 + }, + { + "Group": "Margaret Garcia", + "X": 856 + }, + { + "Group": "Barbara Anderson", + "X": 83 + }, + { + "Group": "Thomas Smith", + "X": 814 + }, + { + "Group": "Kimberly Thomas", + "X": 810 + }, + { + "Group": "Karen Garcia", + "X": 94 + }, + { + "Group": "Sarah Torres", + "X": 885 + }, + { + "Group": "Emily Hill", + "X": 32 + }, + { + "Group": "Sarah Walker", + "X": 309 + }, + { + "Group": "Michael Clark", + "X": 690 + }, + { + "Group": "Joshua Wright", + "X": 594 + }, + { + "Group": "Andrew Walker", + "X": 785 + }, + { + "Group": "Nancy Young", + "X": 930 + }, + { + "Group": "John Lewis", + "X": 828 + }, + { + "Group": "John Brown", + "X": 974 + }, + { + "Group": "Anthony Thomas", + "X": 398 + }, + { + "Group": "Joshua Moore", + "X": 187 + }, + { + "Group": "John Hernandez", + "X": 627 + }, + { + "Group": "James Perez", + "X": 400 + }, + { + "Group": "James Scott", + "X": 862 + }, + { + "Group": "Matthew Sanchez", + "X": 86 + }, + { + "Group": "Joseph Sanchez", + "X": 481 + }, + { + "Group": "Paul Perez", + "X": 79 + }, + { + "Group": "Joshua Rodriguez", + "X": 26 + }, + { + "Group": "Anthony Sanchez", + "X": 164 + }, + { + "Group": "Linda King", + "X": 53 + }, + { + "Group": "Elizabeth Smith", + "X": 717 + }, + { + "Group": "Sandra Miller", + "X": 144 + }, + { + "Group": "Nancy Allen", + "X": 191 + }, + { + "Group": "Patricia Brown", + "X": 568 + }, + { + "Group": "Lisa Clark", + "X": 654 + }, + { + "Group": "Lisa Thompson", + "X": 49 + }, + { + "Group": "Nancy Clark", + "X": 20 + }, + { + "Group": "Steven Miller", + "X": 388 + }, + { + "Group": "Charles King", + "X": 179 + }, + { + "Group": "Paul Harris", + "X": 288 + }, + { + "Group": "Ashley Jackson", + "X": 925 + }, + { + "Group": "John Moore", + "X": 500 + }, + { + "Group": "Betty Flores", + "X": 427 + }, + { + "Group": "Linda Young", + "X": 305 + }, + { + "Group": "Joshua Jones", + "X": 618 + }, + { + "Group": "Margaret Anderson", + "X": 787 + }, + { + "Group": "Anthony Wilson", + "X": 665 + }, + { + "Group": "Karen Jones", + "X": 19 + }, + { + "Group": "Daniel Rodriguez", + "X": 677 + }, + { + "Group": "Betty Clark", + "X": 404 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/08-card29.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/08-card29.flint.json new file mode 100644 index 00000000..f3b5b906 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/08-card29.flint.json @@ -0,0 +1,173 @@ +{ + "semantic_types": { + "X": "Quantity", + "Group": "Category", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "X", + "y": "Group", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Group": "Laptop", + "X": 408, + "Segment": "USA" + }, + { + "Group": "Laptop", + "X": 579, + "Segment": "China" + }, + { + "Group": "Laptop", + "X": 713, + "Segment": "Japan" + }, + { + "Group": "Phone", + "X": 216, + "Segment": "USA" + }, + { + "Group": "Phone", + "X": 84, + "Segment": "China" + }, + { + "Group": "Phone", + "X": 698, + "Segment": "Japan" + }, + { + "Group": "Tablet", + "X": 785, + "Segment": "USA" + }, + { + "Group": "Tablet", + "X": 667, + "Segment": "China" + }, + { + "Group": "Tablet", + "X": 250, + "Segment": "Japan" + }, + { + "Group": "Desktop", + "X": 179, + "Segment": "USA" + }, + { + "Group": "Desktop", + "X": 162, + "Segment": "China" + }, + { + "Group": "Desktop", + "X": 572, + "Segment": "Japan" + }, + { + "Group": "Monitor", + "X": 952, + "Segment": "USA" + }, + { + "Group": "Monitor", + "X": 392, + "Segment": "China" + }, + { + "Group": "Monitor", + "X": 127, + "Segment": "Japan" + }, + { + "Group": "Keyboard", + "X": 431, + "Segment": "USA" + }, + { + "Group": "Keyboard", + "X": 573, + "Segment": "China" + }, + { + "Group": "Keyboard", + "X": 992, + "Segment": "Japan" + }, + { + "Group": "Mouse", + "X": 315, + "Segment": "USA" + }, + { + "Group": "Mouse", + "X": 337, + "Segment": "China" + }, + { + "Group": "Mouse", + "X": 306, + "Segment": "Japan" + }, + { + "Group": "Headphones", + "X": 671, + "Segment": "USA" + }, + { + "Group": "Headphones", + "X": 646, + "Segment": "China" + }, + { + "Group": "Headphones", + "X": 638, + "Segment": "Japan" + }, + { + "Group": "Speaker", + "X": 484, + "Segment": "USA" + }, + { + "Group": "Speaker", + "X": 849, + "Segment": "China" + }, + { + "Group": "Speaker", + "X": 688, + "Segment": "Japan" + }, + { + "Group": "Camera", + "X": 408, + "Segment": "USA" + }, + { + "Group": "Camera", + "X": 973, + "Segment": "China" + }, + { + "Group": "Camera", + "X": 587, + "Segment": "Japan" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/09-card24.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/09-card24.flint.json new file mode 100644 index 00000000..f684d3ed --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/09-card24.flint.json @@ -0,0 +1,117 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "Date", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 581 + }, + { + "Date": "2020-02-15", + "Value": 689 + }, + { + "Date": "2020-04-01", + "Value": 906 + }, + { + "Date": "2020-05-16", + "Value": 933 + }, + { + "Date": "2020-07-01", + "Value": 867 + }, + { + "Date": "2020-08-16", + "Value": 39 + }, + { + "Date": "2020-09-30", + "Value": 597 + }, + { + "Date": "2020-11-15", + "Value": 199 + }, + { + "Date": "2020-12-31", + "Value": 614 + }, + { + "Date": "2021-02-14", + "Value": 27 + }, + { + "Date": "2021-04-01", + "Value": 935 + }, + { + "Date": "2021-05-16", + "Value": 386 + }, + { + "Date": "2021-07-01", + "Value": 105 + }, + { + "Date": "2021-08-16", + "Value": 592 + }, + { + "Date": "2021-09-30", + "Value": 78 + }, + { + "Date": "2021-11-15", + "Value": 533 + }, + { + "Date": "2021-12-31", + "Value": 73 + }, + { + "Date": "2022-02-14", + "Value": 37 + }, + { + "Date": "2022-04-01", + "Value": 383 + }, + { + "Date": "2022-05-16", + "Value": 705 + }, + { + "Date": "2022-07-01", + "Value": 70 + }, + { + "Date": "2022-08-16", + "Value": 783 + }, + { + "Date": "2022-09-30", + "Value": 719 + }, + { + "Date": "2022-11-15", + "Value": 999 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/10-card100.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/10-card100.flint.json new file mode 100644 index 00000000..cd8430bf --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/10-card100.flint.json @@ -0,0 +1,421 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "Date", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 652 + }, + { + "Date": "2020-01-11", + "Value": 41 + }, + { + "Date": "2020-01-22", + "Value": 598 + }, + { + "Date": "2020-02-02", + "Value": 375 + }, + { + "Date": "2020-02-13", + "Value": 568 + }, + { + "Date": "2020-02-24", + "Value": 780 + }, + { + "Date": "2020-03-06", + "Value": 125 + }, + { + "Date": "2020-03-17", + "Value": 126 + }, + { + "Date": "2020-03-28", + "Value": 750 + }, + { + "Date": "2020-04-08", + "Value": 691 + }, + { + "Date": "2020-04-19", + "Value": 247 + }, + { + "Date": "2020-04-30", + "Value": 174 + }, + { + "Date": "2020-05-11", + "Value": 623 + }, + { + "Date": "2020-05-22", + "Value": 936 + }, + { + "Date": "2020-06-02", + "Value": 757 + }, + { + "Date": "2020-06-13", + "Value": 966 + }, + { + "Date": "2020-06-24", + "Value": 621 + }, + { + "Date": "2020-07-05", + "Value": 897 + }, + { + "Date": "2020-07-16", + "Value": 934 + }, + { + "Date": "2020-07-27", + "Value": 630 + }, + { + "Date": "2020-08-07", + "Value": 563 + }, + { + "Date": "2020-08-17", + "Value": 258 + }, + { + "Date": "2020-08-28", + "Value": 342 + }, + { + "Date": "2020-09-08", + "Value": 829 + }, + { + "Date": "2020-09-19", + "Value": 141 + }, + { + "Date": "2020-09-30", + "Value": 418 + }, + { + "Date": "2020-10-11", + "Value": 764 + }, + { + "Date": "2020-10-22", + "Value": 597 + }, + { + "Date": "2020-11-02", + "Value": 293 + }, + { + "Date": "2020-11-13", + "Value": 409 + }, + { + "Date": "2020-11-24", + "Value": 696 + }, + { + "Date": "2020-12-05", + "Value": 812 + }, + { + "Date": "2020-12-16", + "Value": 431 + }, + { + "Date": "2020-12-27", + "Value": 902 + }, + { + "Date": "2021-01-07", + "Value": 161 + }, + { + "Date": "2021-01-18", + "Value": 439 + }, + { + "Date": "2021-01-29", + "Value": 312 + }, + { + "Date": "2021-02-09", + "Value": 794 + }, + { + "Date": "2021-02-20", + "Value": 464 + }, + { + "Date": "2021-03-03", + "Value": 71 + }, + { + "Date": "2021-03-14", + "Value": 491 + }, + { + "Date": "2021-03-24", + "Value": 193 + }, + { + "Date": "2021-04-04", + "Value": 368 + }, + { + "Date": "2021-04-15", + "Value": 555 + }, + { + "Date": "2021-04-26", + "Value": 661 + }, + { + "Date": "2021-05-07", + "Value": 957 + }, + { + "Date": "2021-05-18", + "Value": 374 + }, + { + "Date": "2021-05-29", + "Value": 701 + }, + { + "Date": "2021-06-09", + "Value": 612 + }, + { + "Date": "2021-06-20", + "Value": 601 + }, + { + "Date": "2021-07-01", + "Value": 937 + }, + { + "Date": "2021-07-12", + "Value": 199 + }, + { + "Date": "2021-07-23", + "Value": 258 + }, + { + "Date": "2021-08-03", + "Value": 744 + }, + { + "Date": "2021-08-14", + "Value": 536 + }, + { + "Date": "2021-08-25", + "Value": 624 + }, + { + "Date": "2021-09-05", + "Value": 370 + }, + { + "Date": "2021-09-16", + "Value": 341 + }, + { + "Date": "2021-09-27", + "Value": 964 + }, + { + "Date": "2021-10-08", + "Value": 45 + }, + { + "Date": "2021-10-19", + "Value": 430 + }, + { + "Date": "2021-10-29", + "Value": 944 + }, + { + "Date": "2021-11-09", + "Value": 409 + }, + { + "Date": "2021-11-20", + "Value": 25 + }, + { + "Date": "2021-12-01", + "Value": 966 + }, + { + "Date": "2021-12-12", + "Value": 912 + }, + { + "Date": "2021-12-23", + "Value": 996 + }, + { + "Date": "2022-01-03", + "Value": 926 + }, + { + "Date": "2022-01-14", + "Value": 198 + }, + { + "Date": "2022-01-25", + "Value": 175 + }, + { + "Date": "2022-02-05", + "Value": 680 + }, + { + "Date": "2022-02-16", + "Value": 640 + }, + { + "Date": "2022-02-27", + "Value": 67 + }, + { + "Date": "2022-03-10", + "Value": 175 + }, + { + "Date": "2022-03-21", + "Value": 268 + }, + { + "Date": "2022-04-01", + "Value": 270 + }, + { + "Date": "2022-04-12", + "Value": 664 + }, + { + "Date": "2022-04-23", + "Value": 155 + }, + { + "Date": "2022-05-04", + "Value": 485 + }, + { + "Date": "2022-05-15", + "Value": 375 + }, + { + "Date": "2022-05-26", + "Value": 308 + }, + { + "Date": "2022-06-05", + "Value": 597 + }, + { + "Date": "2022-06-16", + "Value": 416 + }, + { + "Date": "2022-06-27", + "Value": 976 + }, + { + "Date": "2022-07-08", + "Value": 766 + }, + { + "Date": "2022-07-19", + "Value": 207 + }, + { + "Date": "2022-07-30", + "Value": 500 + }, + { + "Date": "2022-08-10", + "Value": 917 + }, + { + "Date": "2022-08-21", + "Value": 424 + }, + { + "Date": "2022-09-01", + "Value": 114 + }, + { + "Date": "2022-09-12", + "Value": 408 + }, + { + "Date": "2022-09-23", + "Value": 797 + }, + { + "Date": "2022-10-04", + "Value": 361 + }, + { + "Date": "2022-10-15", + "Value": 195 + }, + { + "Date": "2022-10-26", + "Value": 662 + }, + { + "Date": "2022-11-06", + "Value": 376 + }, + { + "Date": "2022-11-17", + "Value": 172 + }, + { + "Date": "2022-11-28", + "Value": 918 + }, + { + "Date": "2022-12-09", + "Value": 202 + }, + { + "Date": "2022-12-20", + "Value": 540 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/11-card24.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/11-card24.flint.json new file mode 100644 index 00000000..8176107f --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/11-card24.flint.json @@ -0,0 +1,383 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "Date", + "y": "Value", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 286, + "Segment": "Laptop" + }, + { + "Date": "2020-01-01", + "Value": 721, + "Segment": "Phone" + }, + { + "Date": "2020-01-01", + "Value": 776, + "Segment": "Tablet" + }, + { + "Date": "2020-02-15", + "Value": 907, + "Segment": "Laptop" + }, + { + "Date": "2020-02-15", + "Value": 597, + "Segment": "Phone" + }, + { + "Date": "2020-02-15", + "Value": 334, + "Segment": "Tablet" + }, + { + "Date": "2020-04-01", + "Value": 539, + "Segment": "Laptop" + }, + { + "Date": "2020-04-01", + "Value": 147, + "Segment": "Phone" + }, + { + "Date": "2020-04-01", + "Value": 259, + "Segment": "Tablet" + }, + { + "Date": "2020-05-16", + "Value": 973, + "Segment": "Laptop" + }, + { + "Date": "2020-05-16", + "Value": 490, + "Segment": "Phone" + }, + { + "Date": "2020-05-16", + "Value": 501, + "Segment": "Tablet" + }, + { + "Date": "2020-07-01", + "Value": 43, + "Segment": "Laptop" + }, + { + "Date": "2020-07-01", + "Value": 391, + "Segment": "Phone" + }, + { + "Date": "2020-07-01", + "Value": 637, + "Segment": "Tablet" + }, + { + "Date": "2020-08-16", + "Value": 18, + "Segment": "Laptop" + }, + { + "Date": "2020-08-16", + "Value": 773, + "Segment": "Phone" + }, + { + "Date": "2020-08-16", + "Value": 523, + "Segment": "Tablet" + }, + { + "Date": "2020-09-30", + "Value": 166, + "Segment": "Laptop" + }, + { + "Date": "2020-09-30", + "Value": 858, + "Segment": "Phone" + }, + { + "Date": "2020-09-30", + "Value": 395, + "Segment": "Tablet" + }, + { + "Date": "2020-11-15", + "Value": 726, + "Segment": "Laptop" + }, + { + "Date": "2020-11-15", + "Value": 361, + "Segment": "Phone" + }, + { + "Date": "2020-11-15", + "Value": 681, + "Segment": "Tablet" + }, + { + "Date": "2020-12-31", + "Value": 197, + "Segment": "Laptop" + }, + { + "Date": "2020-12-31", + "Value": 826, + "Segment": "Phone" + }, + { + "Date": "2020-12-31", + "Value": 663, + "Segment": "Tablet" + }, + { + "Date": "2021-02-14", + "Value": 979, + "Segment": "Laptop" + }, + { + "Date": "2021-02-14", + "Value": 907, + "Segment": "Phone" + }, + { + "Date": "2021-02-14", + "Value": 529, + "Segment": "Tablet" + }, + { + "Date": "2021-04-01", + "Value": 565, + "Segment": "Laptop" + }, + { + "Date": "2021-04-01", + "Value": 216, + "Segment": "Phone" + }, + { + "Date": "2021-04-01", + "Value": 951, + "Segment": "Tablet" + }, + { + "Date": "2021-05-16", + "Value": 512, + "Segment": "Laptop" + }, + { + "Date": "2021-05-16", + "Value": 178, + "Segment": "Phone" + }, + { + "Date": "2021-05-16", + "Value": 54, + "Segment": "Tablet" + }, + { + "Date": "2021-07-01", + "Value": 315, + "Segment": "Laptop" + }, + { + "Date": "2021-07-01", + "Value": 166, + "Segment": "Phone" + }, + { + "Date": "2021-07-01", + "Value": 246, + "Segment": "Tablet" + }, + { + "Date": "2021-08-16", + "Value": 977, + "Segment": "Laptop" + }, + { + "Date": "2021-08-16", + "Value": 502, + "Segment": "Phone" + }, + { + "Date": "2021-08-16", + "Value": 642, + "Segment": "Tablet" + }, + { + "Date": "2021-09-30", + "Value": 210, + "Segment": "Laptop" + }, + { + "Date": "2021-09-30", + "Value": 746, + "Segment": "Phone" + }, + { + "Date": "2021-09-30", + "Value": 883, + "Segment": "Tablet" + }, + { + "Date": "2021-11-15", + "Value": 371, + "Segment": "Laptop" + }, + { + "Date": "2021-11-15", + "Value": 381, + "Segment": "Phone" + }, + { + "Date": "2021-11-15", + "Value": 165, + "Segment": "Tablet" + }, + { + "Date": "2021-12-31", + "Value": 373, + "Segment": "Laptop" + }, + { + "Date": "2021-12-31", + "Value": 289, + "Segment": "Phone" + }, + { + "Date": "2021-12-31", + "Value": 110, + "Segment": "Tablet" + }, + { + "Date": "2022-02-14", + "Value": 977, + "Segment": "Laptop" + }, + { + "Date": "2022-02-14", + "Value": 294, + "Segment": "Phone" + }, + { + "Date": "2022-02-14", + "Value": 540, + "Segment": "Tablet" + }, + { + "Date": "2022-04-01", + "Value": 143, + "Segment": "Laptop" + }, + { + "Date": "2022-04-01", + "Value": 330, + "Segment": "Phone" + }, + { + "Date": "2022-04-01", + "Value": 616, + "Segment": "Tablet" + }, + { + "Date": "2022-05-16", + "Value": 474, + "Segment": "Laptop" + }, + { + "Date": "2022-05-16", + "Value": 524, + "Segment": "Phone" + }, + { + "Date": "2022-05-16", + "Value": 686, + "Segment": "Tablet" + }, + { + "Date": "2022-07-01", + "Value": 354, + "Segment": "Laptop" + }, + { + "Date": "2022-07-01", + "Value": 410, + "Segment": "Phone" + }, + { + "Date": "2022-07-01", + "Value": 590, + "Segment": "Tablet" + }, + { + "Date": "2022-08-16", + "Value": 608, + "Segment": "Laptop" + }, + { + "Date": "2022-08-16", + "Value": 124, + "Segment": "Phone" + }, + { + "Date": "2022-08-16", + "Value": 604, + "Segment": "Tablet" + }, + { + "Date": "2022-09-30", + "Value": 387, + "Segment": "Laptop" + }, + { + "Date": "2022-09-30", + "Value": 752, + "Segment": "Phone" + }, + { + "Date": "2022-09-30", + "Value": 254, + "Segment": "Tablet" + }, + { + "Date": "2022-11-15", + "Value": 966, + "Segment": "Laptop" + }, + { + "Date": "2022-11-15", + "Value": 588, + "Segment": "Phone" + }, + { + "Date": "2022-11-15", + "Value": 440, + "Segment": "Tablet" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/12-card18.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/12-card18.flint.json new file mode 100644 index 00000000..89fa95ea --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/12-card18.flint.json @@ -0,0 +1,93 @@ +{ + "semantic_types": { + "X": "Quantity", + "EndDate": "Date" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "X", + "y": "EndDate" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "EndDate": "2020-01-01", + "X": 648 + }, + { + "EndDate": "2020-03-01", + "X": 944 + }, + { + "EndDate": "2020-05-01", + "X": 216 + }, + { + "EndDate": "2020-07-01", + "X": 185 + }, + { + "EndDate": "2020-08-31", + "X": 539 + }, + { + "EndDate": "2020-10-31", + "X": 151 + }, + { + "EndDate": "2020-12-31", + "X": 338 + }, + { + "EndDate": "2021-03-01", + "X": 709 + }, + { + "EndDate": "2021-05-01", + "X": 181 + }, + { + "EndDate": "2021-07-01", + "X": 931 + }, + { + "EndDate": "2021-08-31", + "X": 916 + }, + { + "EndDate": "2021-10-31", + "X": 61 + }, + { + "EndDate": "2021-12-31", + "X": 462 + }, + { + "EndDate": "2022-03-01", + "X": 900 + }, + { + "EndDate": "2022-05-01", + "X": 969 + }, + { + "EndDate": "2022-07-01", + "X": 650 + }, + { + "EndDate": "2022-08-31", + "X": 468 + }, + { + "EndDate": "2022-10-31", + "X": 186 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/13-card53.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/13-card53.flint.json new file mode 100644 index 00000000..4d230211 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/13-card53.flint.json @@ -0,0 +1,293 @@ +{ + "semantic_types": { + "X": "Quantity", + "EndDate": "Date", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "X", + "y": "EndDate", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "EndDate": "2020-01-01", + "X": 166, + "Segment": "Laptop" + }, + { + "EndDate": "2020-01-01", + "X": 838, + "Segment": "Phone" + }, + { + "EndDate": "2020-01-01", + "X": 74, + "Segment": "Tablet" + }, + { + "EndDate": "2020-03-01", + "X": 268, + "Segment": "Laptop" + }, + { + "EndDate": "2020-03-01", + "X": 614, + "Segment": "Phone" + }, + { + "EndDate": "2020-03-01", + "X": 950, + "Segment": "Tablet" + }, + { + "EndDate": "2020-05-01", + "X": 128, + "Segment": "Laptop" + }, + { + "EndDate": "2020-05-01", + "X": 727, + "Segment": "Phone" + }, + { + "EndDate": "2020-05-01", + "X": 457, + "Segment": "Tablet" + }, + { + "EndDate": "2020-07-01", + "X": 430, + "Segment": "Laptop" + }, + { + "EndDate": "2020-07-01", + "X": 383, + "Segment": "Phone" + }, + { + "EndDate": "2020-07-01", + "X": 172, + "Segment": "Tablet" + }, + { + "EndDate": "2020-08-31", + "X": 324, + "Segment": "Laptop" + }, + { + "EndDate": "2020-08-31", + "X": 167, + "Segment": "Phone" + }, + { + "EndDate": "2020-08-31", + "X": 296, + "Segment": "Tablet" + }, + { + "EndDate": "2020-10-31", + "X": 958, + "Segment": "Laptop" + }, + { + "EndDate": "2020-10-31", + "X": 216, + "Segment": "Phone" + }, + { + "EndDate": "2020-10-31", + "X": 656, + "Segment": "Tablet" + }, + { + "EndDate": "2020-12-31", + "X": 71, + "Segment": "Laptop" + }, + { + "EndDate": "2020-12-31", + "X": 365, + "Segment": "Phone" + }, + { + "EndDate": "2020-12-31", + "X": 735, + "Segment": "Tablet" + }, + { + "EndDate": "2021-03-01", + "X": 694, + "Segment": "Laptop" + }, + { + "EndDate": "2021-03-01", + "X": 63, + "Segment": "Phone" + }, + { + "EndDate": "2021-03-01", + "X": 754, + "Segment": "Tablet" + }, + { + "EndDate": "2021-05-01", + "X": 169, + "Segment": "Laptop" + }, + { + "EndDate": "2021-05-01", + "X": 841, + "Segment": "Phone" + }, + { + "EndDate": "2021-05-01", + "X": 762, + "Segment": "Tablet" + }, + { + "EndDate": "2021-07-01", + "X": 953, + "Segment": "Laptop" + }, + { + "EndDate": "2021-07-01", + "X": 809, + "Segment": "Phone" + }, + { + "EndDate": "2021-07-01", + "X": 200, + "Segment": "Tablet" + }, + { + "EndDate": "2021-08-31", + "X": 86, + "Segment": "Laptop" + }, + { + "EndDate": "2021-08-31", + "X": 545, + "Segment": "Phone" + }, + { + "EndDate": "2021-08-31", + "X": 162, + "Segment": "Tablet" + }, + { + "EndDate": "2021-10-31", + "X": 288, + "Segment": "Laptop" + }, + { + "EndDate": "2021-10-31", + "X": 922, + "Segment": "Phone" + }, + { + "EndDate": "2021-10-31", + "X": 530, + "Segment": "Tablet" + }, + { + "EndDate": "2021-12-31", + "X": 142, + "Segment": "Laptop" + }, + { + "EndDate": "2021-12-31", + "X": 546, + "Segment": "Phone" + }, + { + "EndDate": "2021-12-31", + "X": 116, + "Segment": "Tablet" + }, + { + "EndDate": "2022-03-01", + "X": 368, + "Segment": "Laptop" + }, + { + "EndDate": "2022-03-01", + "X": 12, + "Segment": "Phone" + }, + { + "EndDate": "2022-03-01", + "X": 657, + "Segment": "Tablet" + }, + { + "EndDate": "2022-05-01", + "X": 879, + "Segment": "Laptop" + }, + { + "EndDate": "2022-05-01", + "X": 248, + "Segment": "Phone" + }, + { + "EndDate": "2022-05-01", + "X": 157, + "Segment": "Tablet" + }, + { + "EndDate": "2022-07-01", + "X": 691, + "Segment": "Laptop" + }, + { + "EndDate": "2022-07-01", + "X": 694, + "Segment": "Phone" + }, + { + "EndDate": "2022-07-01", + "X": 458, + "Segment": "Tablet" + }, + { + "EndDate": "2022-08-31", + "X": 720, + "Segment": "Laptop" + }, + { + "EndDate": "2022-08-31", + "X": 848, + "Segment": "Phone" + }, + { + "EndDate": "2022-08-31", + "X": 287, + "Segment": "Tablet" + }, + { + "EndDate": "2022-10-31", + "X": 206, + "Segment": "Laptop" + }, + { + "EndDate": "2022-10-31", + "X": 108, + "Segment": "Phone" + }, + { + "EndDate": "2022-10-31", + "X": 591, + "Segment": "Tablet" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/14-card20.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/14-card20.flint.json new file mode 100644 index 00000000..88a2e82e --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/14-card20.flint.json @@ -0,0 +1,101 @@ +{ + "semantic_types": { + "X": "Quantity", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "X", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 1, + "Value": 633 + }, + { + "X": 2, + "Value": 80 + }, + { + "X": 3, + "Value": 121 + }, + { + "X": 4, + "Value": 174 + }, + { + "X": 5, + "Value": 21 + }, + { + "X": 6, + "Value": 606 + }, + { + "X": 7, + "Value": 734 + }, + { + "X": 8, + "Value": 638 + }, + { + "X": 9, + "Value": 122 + }, + { + "X": 10, + "Value": 242 + }, + { + "X": 11, + "Value": 376 + }, + { + "X": 12, + "Value": 735 + }, + { + "X": 13, + "Value": 981 + }, + { + "X": 14, + "Value": 555 + }, + { + "X": 15, + "Value": 970 + }, + { + "X": 16, + "Value": 54 + }, + { + "X": 17, + "Value": 601 + }, + { + "X": 18, + "Value": 134 + }, + { + "X": 19, + "Value": 924 + }, + { + "X": 20, + "Value": 172 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/15-card30.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/15-card30.flint.json new file mode 100644 index 00000000..5541613c --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/15-card30.flint.json @@ -0,0 +1,141 @@ +{ + "semantic_types": { + "X": "Quantity", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "X", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 1, + "Value": 390 + }, + { + "X": 2, + "Value": 934 + }, + { + "X": 3, + "Value": 91 + }, + { + "X": 4, + "Value": 151 + }, + { + "X": 5, + "Value": 615 + }, + { + "X": 6, + "Value": 442 + }, + { + "X": 7, + "Value": 332 + }, + { + "X": 8, + "Value": 151 + }, + { + "X": 9, + "Value": 857 + }, + { + "X": 10, + "Value": 708 + }, + { + "X": 11, + "Value": 746 + }, + { + "X": 12, + "Value": 875 + }, + { + "X": 13, + "Value": 83 + }, + { + "X": 14, + "Value": 799 + }, + { + "X": 15, + "Value": 517 + }, + { + "X": 16, + "Value": 167 + }, + { + "X": 17, + "Value": 890 + }, + { + "X": 18, + "Value": 140 + }, + { + "X": 19, + "Value": 130 + }, + { + "X": 20, + "Value": 235 + }, + { + "X": 21, + "Value": 145 + }, + { + "X": 22, + "Value": 174 + }, + { + "X": 23, + "Value": 170 + }, + { + "X": 24, + "Value": 214 + }, + { + "X": 25, + "Value": 74 + }, + { + "X": 26, + "Value": 511 + }, + { + "X": 27, + "Value": 519 + }, + { + "X": 28, + "Value": 721 + }, + { + "X": 29, + "Value": 304 + }, + { + "X": 30, + "Value": 191 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/16-card5.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/16-card5.flint.json new file mode 100644 index 00000000..82dd90cd --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/16-card5.flint.json @@ -0,0 +1,89 @@ +{ + "semantic_types": { + "Category": "Category", + "Group": "Category" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "Category", + "y": "Group" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Group": "USA" + }, + { + "Category": "Laptop", + "Group": "Japan" + }, + { + "Category": "Laptop", + "Group": "UK" + }, + { + "Category": "Phone", + "Group": "USA" + }, + { + "Category": "Phone", + "Group": "Japan" + }, + { + "Category": "Phone", + "Group": "Germany" + }, + { + "Category": "Phone", + "Group": "UK" + }, + { + "Category": "Tablet", + "Group": "USA" + }, + { + "Category": "Tablet", + "Group": "Japan" + }, + { + "Category": "Tablet", + "Group": "Germany" + }, + { + "Category": "Tablet", + "Group": "UK" + }, + { + "Category": "Desktop", + "Group": "China" + }, + { + "Category": "Desktop", + "Group": "Germany" + }, + { + "Category": "Desktop", + "Group": "UK" + }, + { + "Category": "Monitor", + "Group": "USA" + }, + { + "Category": "Monitor", + "Group": "China" + }, + { + "Category": "Monitor", + "Group": "Japan" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/17-card25.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/17-card25.flint.json new file mode 100644 index 00000000..a934f537 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/17-card25.flint.json @@ -0,0 +1,121 @@ +{ + "semantic_types": { + "Date": "Date", + "Group": "Category" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "Date", + "y": "Group" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Group": "Laptop" + }, + { + "Date": "2020-02-13", + "Group": "Desktop" + }, + { + "Date": "2020-03-28", + "Group": "Laptop" + }, + { + "Date": "2020-05-11", + "Group": "Phone" + }, + { + "Date": "2020-06-24", + "Group": "Monitor" + }, + { + "Date": "2020-08-07", + "Group": "Laptop" + }, + { + "Date": "2020-09-19", + "Group": "Laptop" + }, + { + "Date": "2020-11-02", + "Group": "Tablet" + }, + { + "Date": "2020-12-16", + "Group": "Tablet" + }, + { + "Date": "2021-01-29", + "Group": "Tablet" + }, + { + "Date": "2021-03-14", + "Group": "Monitor" + }, + { + "Date": "2021-04-26", + "Group": "Monitor" + }, + { + "Date": "2021-06-09", + "Group": "Phone" + }, + { + "Date": "2021-07-23", + "Group": "Desktop" + }, + { + "Date": "2021-09-05", + "Group": "Phone" + }, + { + "Date": "2021-10-19", + "Group": "Desktop" + }, + { + "Date": "2021-12-01", + "Group": "Phone" + }, + { + "Date": "2022-01-14", + "Group": "Desktop" + }, + { + "Date": "2022-02-27", + "Group": "Desktop" + }, + { + "Date": "2022-04-12", + "Group": "Desktop" + }, + { + "Date": "2022-05-26", + "Group": "Monitor" + }, + { + "Date": "2022-07-08", + "Group": "Laptop" + }, + { + "Date": "2022-08-21", + "Group": "Tablet" + }, + { + "Date": "2022-10-04", + "Group": "Desktop" + }, + { + "Date": "2022-11-17", + "Group": "Desktop" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/bar-chart/18-card5.flint.json b/test-harness/excel/evaluations/inputs/bar-chart/18-card5.flint.json new file mode 100644 index 00000000..29779751 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/bar-chart/18-card5.flint.json @@ -0,0 +1,41 @@ +{ + "semantic_types": { + "Category": "Category", + "EndDate": "Date" + }, + "chart_spec": { + "chartType": "Bar Chart", + "encodings": { + "x": "Category", + "y": "EndDate" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "EndDate": "2023-11-07" + }, + { + "Category": "Phone", + "EndDate": "2023-01-28" + }, + { + "Category": "Tablet", + "EndDate": "2023-07-24" + }, + { + "Category": "Desktop", + "EndDate": "2023-04-27" + }, + { + "Category": "Monitor", + "EndDate": "2023-07-12" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/boxplot/00-card5.flint.json b/test-harness/excel/evaluations/inputs/boxplot/00-card5.flint.json new file mode 100644 index 00000000..ca0d1961 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/boxplot/00-card5.flint.json @@ -0,0 +1,621 @@ +{ + "semantic_types": { + "Group": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Boxplot", + "encodings": { + "x": "Group", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Group": "Electronics", + "Value": 1 + }, + { + "Group": "Electronics", + "Value": 8 + }, + { + "Group": "Electronics", + "Value": 92 + }, + { + "Group": "Electronics", + "Value": 6 + }, + { + "Group": "Electronics", + "Value": 94 + }, + { + "Group": "Electronics", + "Value": 27 + }, + { + "Group": "Electronics", + "Value": 93 + }, + { + "Group": "Electronics", + "Value": 21 + }, + { + "Group": "Electronics", + "Value": 51 + }, + { + "Group": "Electronics", + "Value": 29 + }, + { + "Group": "Electronics", + "Value": 45 + }, + { + "Group": "Electronics", + "Value": 59 + }, + { + "Group": "Electronics", + "Value": 68 + }, + { + "Group": "Electronics", + "Value": 20 + }, + { + "Group": "Electronics", + "Value": 42 + }, + { + "Group": "Electronics", + "Value": 79 + }, + { + "Group": "Electronics", + "Value": 80 + }, + { + "Group": "Electronics", + "Value": 39 + }, + { + "Group": "Electronics", + "Value": 39 + }, + { + "Group": "Electronics", + "Value": 79 + }, + { + "Group": "Electronics", + "Value": 24 + }, + { + "Group": "Electronics", + "Value": 74 + }, + { + "Group": "Electronics", + "Value": 28 + }, + { + "Group": "Electronics", + "Value": 31 + }, + { + "Group": "Electronics", + "Value": 32 + }, + { + "Group": "Electronics", + "Value": 85 + }, + { + "Group": "Electronics", + "Value": 38 + }, + { + "Group": "Electronics", + "Value": 74 + }, + { + "Group": "Electronics", + "Value": 20 + }, + { + "Group": "Electronics", + "Value": 83 + }, + { + "Group": "Clothing", + "Value": 22 + }, + { + "Group": "Clothing", + "Value": 54 + }, + { + "Group": "Clothing", + "Value": 72 + }, + { + "Group": "Clothing", + "Value": 23 + }, + { + "Group": "Clothing", + "Value": 26 + }, + { + "Group": "Clothing", + "Value": 76 + }, + { + "Group": "Clothing", + "Value": 85 + }, + { + "Group": "Clothing", + "Value": 49 + }, + { + "Group": "Clothing", + "Value": 73 + }, + { + "Group": "Clothing", + "Value": 74 + }, + { + "Group": "Clothing", + "Value": 93 + }, + { + "Group": "Clothing", + "Value": 79 + }, + { + "Group": "Clothing", + "Value": 86 + }, + { + "Group": "Clothing", + "Value": 35 + }, + { + "Group": "Clothing", + "Value": 6 + }, + { + "Group": "Clothing", + "Value": 88 + }, + { + "Group": "Clothing", + "Value": 14 + }, + { + "Group": "Clothing", + "Value": 29 + }, + { + "Group": "Clothing", + "Value": 90 + }, + { + "Group": "Clothing", + "Value": 49 + }, + { + "Group": "Clothing", + "Value": 55 + }, + { + "Group": "Clothing", + "Value": 41 + }, + { + "Group": "Clothing", + "Value": 44 + }, + { + "Group": "Clothing", + "Value": 43 + }, + { + "Group": "Clothing", + "Value": 49 + }, + { + "Group": "Clothing", + "Value": 56 + }, + { + "Group": "Clothing", + "Value": 56 + }, + { + "Group": "Clothing", + "Value": 36 + }, + { + "Group": "Clothing", + "Value": 45 + }, + { + "Group": "Clothing", + "Value": 40 + }, + { + "Group": "Food", + "Value": 26 + }, + { + "Group": "Food", + "Value": 17 + }, + { + "Group": "Food", + "Value": 40 + }, + { + "Group": "Food", + "Value": 32 + }, + { + "Group": "Food", + "Value": 65 + }, + { + "Group": "Food", + "Value": 78 + }, + { + "Group": "Food", + "Value": 30 + }, + { + "Group": "Food", + "Value": 51 + }, + { + "Group": "Food", + "Value": 43 + }, + { + "Group": "Food", + "Value": 62 + }, + { + "Group": "Food", + "Value": 49 + }, + { + "Group": "Food", + "Value": 90 + }, + { + "Group": "Food", + "Value": 96 + }, + { + "Group": "Food", + "Value": 67 + }, + { + "Group": "Food", + "Value": 82 + }, + { + "Group": "Food", + "Value": 11 + }, + { + "Group": "Food", + "Value": 69 + }, + { + "Group": "Food", + "Value": 6 + }, + { + "Group": "Food", + "Value": 6 + }, + { + "Group": "Food", + "Value": 14 + }, + { + "Group": "Food", + "Value": 47 + }, + { + "Group": "Food", + "Value": 76 + }, + { + "Group": "Food", + "Value": 11 + }, + { + "Group": "Food", + "Value": 92 + }, + { + "Group": "Food", + "Value": 77 + }, + { + "Group": "Food", + "Value": 68 + }, + { + "Group": "Food", + "Value": 36 + }, + { + "Group": "Food", + "Value": 79 + }, + { + "Group": "Food", + "Value": 62 + }, + { + "Group": "Food", + "Value": 0 + }, + { + "Group": "Books", + "Value": 24 + }, + { + "Group": "Books", + "Value": 43 + }, + { + "Group": "Books", + "Value": 71 + }, + { + "Group": "Books", + "Value": 29 + }, + { + "Group": "Books", + "Value": 78 + }, + { + "Group": "Books", + "Value": 19 + }, + { + "Group": "Books", + "Value": 46 + }, + { + "Group": "Books", + "Value": 6 + }, + { + "Group": "Books", + "Value": 52 + }, + { + "Group": "Books", + "Value": 78 + }, + { + "Group": "Books", + "Value": 11 + }, + { + "Group": "Books", + "Value": 54 + }, + { + "Group": "Books", + "Value": 5 + }, + { + "Group": "Books", + "Value": 83 + }, + { + "Group": "Books", + "Value": 60 + }, + { + "Group": "Books", + "Value": 16 + }, + { + "Group": "Books", + "Value": 68 + }, + { + "Group": "Books", + "Value": 14 + }, + { + "Group": "Books", + "Value": 11 + }, + { + "Group": "Books", + "Value": 94 + }, + { + "Group": "Books", + "Value": 75 + }, + { + "Group": "Books", + "Value": 80 + }, + { + "Group": "Books", + "Value": 21 + }, + { + "Group": "Books", + "Value": 52 + }, + { + "Group": "Books", + "Value": 39 + }, + { + "Group": "Books", + "Value": 43 + }, + { + "Group": "Books", + "Value": 84 + }, + { + "Group": "Books", + "Value": 93 + }, + { + "Group": "Books", + "Value": 30 + }, + { + "Group": "Books", + "Value": 30 + }, + { + "Group": "Sports", + "Value": 69 + }, + { + "Group": "Sports", + "Value": 21 + }, + { + "Group": "Sports", + "Value": 10 + }, + { + "Group": "Sports", + "Value": 1 + }, + { + "Group": "Sports", + "Value": 81 + }, + { + "Group": "Sports", + "Value": 87 + }, + { + "Group": "Sports", + "Value": 53 + }, + { + "Group": "Sports", + "Value": 94 + }, + { + "Group": "Sports", + "Value": 63 + }, + { + "Group": "Sports", + "Value": 28 + }, + { + "Group": "Sports", + "Value": 89 + }, + { + "Group": "Sports", + "Value": 44 + }, + { + "Group": "Sports", + "Value": 23 + }, + { + "Group": "Sports", + "Value": 94 + }, + { + "Group": "Sports", + "Value": 7 + }, + { + "Group": "Sports", + "Value": 41 + }, + { + "Group": "Sports", + "Value": 82 + }, + { + "Group": "Sports", + "Value": 27 + }, + { + "Group": "Sports", + "Value": 3 + }, + { + "Group": "Sports", + "Value": 90 + }, + { + "Group": "Sports", + "Value": 8 + }, + { + "Group": "Sports", + "Value": 79 + }, + { + "Group": "Sports", + "Value": 30 + }, + { + "Group": "Sports", + "Value": 71 + }, + { + "Group": "Sports", + "Value": 31 + }, + { + "Group": "Sports", + "Value": 14 + }, + { + "Group": "Sports", + "Value": 27 + }, + { + "Group": "Sports", + "Value": 43 + }, + { + "Group": "Sports", + "Value": 49 + }, + { + "Group": "Sports", + "Value": 96 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/boxplot/01-card5.flint.json b/test-harness/excel/evaluations/inputs/boxplot/01-card5.flint.json new file mode 100644 index 00000000..4c37a009 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/boxplot/01-card5.flint.json @@ -0,0 +1,421 @@ +{ + "semantic_types": { + "Level": "Rank", + "Score": "Score" + }, + "chart_spec": { + "chartType": "Boxplot", + "encodings": { + "x": "Level", + "y": "Score" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Level": 1, + "Score": 43 + }, + { + "Level": 1, + "Score": 41 + }, + { + "Level": 1, + "Score": 19 + }, + { + "Level": 1, + "Score": 43 + }, + { + "Level": 1, + "Score": 29 + }, + { + "Level": 1, + "Score": 30 + }, + { + "Level": 1, + "Score": 38 + }, + { + "Level": 1, + "Score": 45 + }, + { + "Level": 1, + "Score": 16 + }, + { + "Level": 1, + "Score": 16 + }, + { + "Level": 1, + "Score": 30 + }, + { + "Level": 1, + "Score": 30 + }, + { + "Level": 1, + "Score": 31 + }, + { + "Level": 1, + "Score": 21 + }, + { + "Level": 1, + "Score": 45 + }, + { + "Level": 1, + "Score": 17 + }, + { + "Level": 1, + "Score": 32 + }, + { + "Level": 1, + "Score": 27 + }, + { + "Level": 1, + "Score": 20 + }, + { + "Level": 1, + "Score": 19 + }, + { + "Level": 2, + "Score": 53 + }, + { + "Level": 2, + "Score": 58 + }, + { + "Level": 2, + "Score": 41 + }, + { + "Level": 2, + "Score": 42 + }, + { + "Level": 2, + "Score": 50 + }, + { + "Level": 2, + "Score": 49 + }, + { + "Level": 2, + "Score": 26 + }, + { + "Level": 2, + "Score": 43 + }, + { + "Level": 2, + "Score": 28 + }, + { + "Level": 2, + "Score": 49 + }, + { + "Level": 2, + "Score": 47 + }, + { + "Level": 2, + "Score": 44 + }, + { + "Level": 2, + "Score": 30 + }, + { + "Level": 2, + "Score": 27 + }, + { + "Level": 2, + "Score": 26 + }, + { + "Level": 2, + "Score": 47 + }, + { + "Level": 2, + "Score": 49 + }, + { + "Level": 2, + "Score": 30 + }, + { + "Level": 2, + "Score": 24 + }, + { + "Level": 2, + "Score": 44 + }, + { + "Level": 3, + "Score": 65 + }, + { + "Level": 3, + "Score": 37 + }, + { + "Level": 3, + "Score": 41 + }, + { + "Level": 3, + "Score": 42 + }, + { + "Level": 3, + "Score": 34 + }, + { + "Level": 3, + "Score": 53 + }, + { + "Level": 3, + "Score": 68 + }, + { + "Level": 3, + "Score": 67 + }, + { + "Level": 3, + "Score": 51 + }, + { + "Level": 3, + "Score": 42 + }, + { + "Level": 3, + "Score": 41 + }, + { + "Level": 3, + "Score": 52 + }, + { + "Level": 3, + "Score": 30 + }, + { + "Level": 3, + "Score": 34 + }, + { + "Level": 3, + "Score": 66 + }, + { + "Level": 3, + "Score": 51 + }, + { + "Level": 3, + "Score": 38 + }, + { + "Level": 3, + "Score": 34 + }, + { + "Level": 3, + "Score": 46 + }, + { + "Level": 3, + "Score": 63 + }, + { + "Level": 4, + "Score": 68 + }, + { + "Level": 4, + "Score": 64 + }, + { + "Level": 4, + "Score": 41 + }, + { + "Level": 4, + "Score": 73 + }, + { + "Level": 4, + "Score": 59 + }, + { + "Level": 4, + "Score": 78 + }, + { + "Level": 4, + "Score": 60 + }, + { + "Level": 4, + "Score": 63 + }, + { + "Level": 4, + "Score": 48 + }, + { + "Level": 4, + "Score": 55 + }, + { + "Level": 4, + "Score": 49 + }, + { + "Level": 4, + "Score": 60 + }, + { + "Level": 4, + "Score": 53 + }, + { + "Level": 4, + "Score": 65 + }, + { + "Level": 4, + "Score": 56 + }, + { + "Level": 4, + "Score": 50 + }, + { + "Level": 4, + "Score": 55 + }, + { + "Level": 4, + "Score": 57 + }, + { + "Level": 4, + "Score": 68 + }, + { + "Level": 4, + "Score": 66 + }, + { + "Level": 5, + "Score": 55 + }, + { + "Level": 5, + "Score": 51 + }, + { + "Level": 5, + "Score": 81 + }, + { + "Level": 5, + "Score": 67 + }, + { + "Level": 5, + "Score": 60 + }, + { + "Level": 5, + "Score": 72 + }, + { + "Level": 5, + "Score": 85 + }, + { + "Level": 5, + "Score": 59 + }, + { + "Level": 5, + "Score": 51 + }, + { + "Level": 5, + "Score": 60 + }, + { + "Level": 5, + "Score": 52 + }, + { + "Level": 5, + "Score": 82 + }, + { + "Level": 5, + "Score": 61 + }, + { + "Level": 5, + "Score": 76 + }, + { + "Level": 5, + "Score": 74 + }, + { + "Level": 5, + "Score": 53 + }, + { + "Level": 5, + "Score": 65 + }, + { + "Level": 5, + "Score": 71 + }, + { + "Level": 5, + "Score": 64 + }, + { + "Level": 5, + "Score": 68 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/boxplot/02-card12.flint.json b/test-harness/excel/evaluations/inputs/boxplot/02-card12.flint.json new file mode 100644 index 00000000..e99b2960 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/boxplot/02-card12.flint.json @@ -0,0 +1,2421 @@ +{ + "semantic_types": { + "Department": "Department", + "Salary": "Amount" + }, + "chart_spec": { + "chartType": "Boxplot", + "encodings": { + "x": "Department", + "y": "Salary" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Department": "Engineering", + "Salary": 79984 + }, + { + "Department": "Engineering", + "Salary": 103836 + }, + { + "Department": "Engineering", + "Salary": 71569 + }, + { + "Department": "Engineering", + "Salary": 46139 + }, + { + "Department": "Engineering", + "Salary": 80917 + }, + { + "Department": "Engineering", + "Salary": 78792 + }, + { + "Department": "Engineering", + "Salary": 119516 + }, + { + "Department": "Engineering", + "Salary": 77207 + }, + { + "Department": "Engineering", + "Salary": 111998 + }, + { + "Department": "Engineering", + "Salary": 89270 + }, + { + "Department": "Engineering", + "Salary": 59331 + }, + { + "Department": "Engineering", + "Salary": 41468 + }, + { + "Department": "Engineering", + "Salary": 52099 + }, + { + "Department": "Engineering", + "Salary": 55959 + }, + { + "Department": "Engineering", + "Salary": 126408 + }, + { + "Department": "Engineering", + "Salary": 114034 + }, + { + "Department": "Engineering", + "Salary": 113583 + }, + { + "Department": "Engineering", + "Salary": 87931 + }, + { + "Department": "Engineering", + "Salary": 119107 + }, + { + "Department": "Engineering", + "Salary": 51152 + }, + { + "Department": "Engineering", + "Salary": 91412 + }, + { + "Department": "Engineering", + "Salary": 63785 + }, + { + "Department": "Engineering", + "Salary": 137701 + }, + { + "Department": "Engineering", + "Salary": 84038 + }, + { + "Department": "Engineering", + "Salary": 92194 + }, + { + "Department": "Engineering", + "Salary": 128943 + }, + { + "Department": "Engineering", + "Salary": 126729 + }, + { + "Department": "Engineering", + "Salary": 114677 + }, + { + "Department": "Engineering", + "Salary": 116625 + }, + { + "Department": "Engineering", + "Salary": 91094 + }, + { + "Department": "Engineering", + "Salary": 123268 + }, + { + "Department": "Engineering", + "Salary": 140563 + }, + { + "Department": "Engineering", + "Salary": 63202 + }, + { + "Department": "Engineering", + "Salary": 61807 + }, + { + "Department": "Engineering", + "Salary": 130557 + }, + { + "Department": "Engineering", + "Salary": 126992 + }, + { + "Department": "Engineering", + "Salary": 92215 + }, + { + "Department": "Engineering", + "Salary": 114070 + }, + { + "Department": "Engineering", + "Salary": 114849 + }, + { + "Department": "Engineering", + "Salary": 127951 + }, + { + "Department": "Engineering", + "Salary": 131796 + }, + { + "Department": "Engineering", + "Salary": 79419 + }, + { + "Department": "Engineering", + "Salary": 96708 + }, + { + "Department": "Engineering", + "Salary": 32167 + }, + { + "Department": "Engineering", + "Salary": 92332 + }, + { + "Department": "Engineering", + "Salary": 47540 + }, + { + "Department": "Engineering", + "Salary": 100494 + }, + { + "Department": "Engineering", + "Salary": 66265 + }, + { + "Department": "Engineering", + "Salary": 54614 + }, + { + "Department": "Engineering", + "Salary": 70664 + }, + { + "Department": "Sales", + "Salary": 74396 + }, + { + "Department": "Sales", + "Salary": 36995 + }, + { + "Department": "Sales", + "Salary": 109734 + }, + { + "Department": "Sales", + "Salary": 78112 + }, + { + "Department": "Sales", + "Salary": 91016 + }, + { + "Department": "Sales", + "Salary": 120197 + }, + { + "Department": "Sales", + "Salary": 138649 + }, + { + "Department": "Sales", + "Salary": 47342 + }, + { + "Department": "Sales", + "Salary": 136093 + }, + { + "Department": "Sales", + "Salary": 54703 + }, + { + "Department": "Sales", + "Salary": 125941 + }, + { + "Department": "Sales", + "Salary": 64355 + }, + { + "Department": "Sales", + "Salary": 118553 + }, + { + "Department": "Sales", + "Salary": 101069 + }, + { + "Department": "Sales", + "Salary": 121977 + }, + { + "Department": "Sales", + "Salary": 41111 + }, + { + "Department": "Sales", + "Salary": 45802 + }, + { + "Department": "Sales", + "Salary": 51768 + }, + { + "Department": "Sales", + "Salary": 117315 + }, + { + "Department": "Sales", + "Salary": 48958 + }, + { + "Department": "Sales", + "Salary": 64320 + }, + { + "Department": "Sales", + "Salary": 124206 + }, + { + "Department": "Sales", + "Salary": 65715 + }, + { + "Department": "Sales", + "Salary": 54616 + }, + { + "Department": "Sales", + "Salary": 117906 + }, + { + "Department": "Sales", + "Salary": 148055 + }, + { + "Department": "Sales", + "Salary": 92065 + }, + { + "Department": "Sales", + "Salary": 112006 + }, + { + "Department": "Sales", + "Salary": 109021 + }, + { + "Department": "Sales", + "Salary": 101215 + }, + { + "Department": "Sales", + "Salary": 52792 + }, + { + "Department": "Sales", + "Salary": 49007 + }, + { + "Department": "Sales", + "Salary": 43479 + }, + { + "Department": "Sales", + "Salary": 126739 + }, + { + "Department": "Sales", + "Salary": 45283 + }, + { + "Department": "Sales", + "Salary": 87822 + }, + { + "Department": "Sales", + "Salary": 90616 + }, + { + "Department": "Sales", + "Salary": 124109 + }, + { + "Department": "Sales", + "Salary": 128329 + }, + { + "Department": "Sales", + "Salary": 119472 + }, + { + "Department": "Sales", + "Salary": 59869 + }, + { + "Department": "Sales", + "Salary": 73901 + }, + { + "Department": "Sales", + "Salary": 120655 + }, + { + "Department": "Sales", + "Salary": 33103 + }, + { + "Department": "Sales", + "Salary": 94497 + }, + { + "Department": "Sales", + "Salary": 69237 + }, + { + "Department": "Sales", + "Salary": 88576 + }, + { + "Department": "Sales", + "Salary": 43702 + }, + { + "Department": "Sales", + "Salary": 41048 + }, + { + "Department": "Sales", + "Salary": 66471 + }, + { + "Department": "Marketing", + "Salary": 30207 + }, + { + "Department": "Marketing", + "Salary": 143862 + }, + { + "Department": "Marketing", + "Salary": 63964 + }, + { + "Department": "Marketing", + "Salary": 143735 + }, + { + "Department": "Marketing", + "Salary": 96224 + }, + { + "Department": "Marketing", + "Salary": 63087 + }, + { + "Department": "Marketing", + "Salary": 38266 + }, + { + "Department": "Marketing", + "Salary": 110675 + }, + { + "Department": "Marketing", + "Salary": 53654 + }, + { + "Department": "Marketing", + "Salary": 145848 + }, + { + "Department": "Marketing", + "Salary": 86051 + }, + { + "Department": "Marketing", + "Salary": 85848 + }, + { + "Department": "Marketing", + "Salary": 143618 + }, + { + "Department": "Marketing", + "Salary": 40226 + }, + { + "Department": "Marketing", + "Salary": 65474 + }, + { + "Department": "Marketing", + "Salary": 89208 + }, + { + "Department": "Marketing", + "Salary": 105519 + }, + { + "Department": "Marketing", + "Salary": 37281 + }, + { + "Department": "Marketing", + "Salary": 115584 + }, + { + "Department": "Marketing", + "Salary": 123931 + }, + { + "Department": "Marketing", + "Salary": 127988 + }, + { + "Department": "Marketing", + "Salary": 33134 + }, + { + "Department": "Marketing", + "Salary": 146512 + }, + { + "Department": "Marketing", + "Salary": 85031 + }, + { + "Department": "Marketing", + "Salary": 92909 + }, + { + "Department": "Marketing", + "Salary": 133796 + }, + { + "Department": "Marketing", + "Salary": 87409 + }, + { + "Department": "Marketing", + "Salary": 107630 + }, + { + "Department": "Marketing", + "Salary": 113374 + }, + { + "Department": "Marketing", + "Salary": 53648 + }, + { + "Department": "Marketing", + "Salary": 38775 + }, + { + "Department": "Marketing", + "Salary": 147049 + }, + { + "Department": "Marketing", + "Salary": 108986 + }, + { + "Department": "Marketing", + "Salary": 114471 + }, + { + "Department": "Marketing", + "Salary": 129030 + }, + { + "Department": "Marketing", + "Salary": 147330 + }, + { + "Department": "Marketing", + "Salary": 148050 + }, + { + "Department": "Marketing", + "Salary": 143018 + }, + { + "Department": "Marketing", + "Salary": 48809 + }, + { + "Department": "Marketing", + "Salary": 67299 + }, + { + "Department": "Marketing", + "Salary": 41329 + }, + { + "Department": "Marketing", + "Salary": 111048 + }, + { + "Department": "Marketing", + "Salary": 89757 + }, + { + "Department": "Marketing", + "Salary": 82702 + }, + { + "Department": "Marketing", + "Salary": 72125 + }, + { + "Department": "Marketing", + "Salary": 142188 + }, + { + "Department": "Marketing", + "Salary": 125380 + }, + { + "Department": "Marketing", + "Salary": 127908 + }, + { + "Department": "Marketing", + "Salary": 127439 + }, + { + "Department": "Marketing", + "Salary": 39375 + }, + { + "Department": "HR", + "Salary": 34632 + }, + { + "Department": "HR", + "Salary": 126355 + }, + { + "Department": "HR", + "Salary": 70480 + }, + { + "Department": "HR", + "Salary": 92867 + }, + { + "Department": "HR", + "Salary": 37548 + }, + { + "Department": "HR", + "Salary": 54270 + }, + { + "Department": "HR", + "Salary": 48302 + }, + { + "Department": "HR", + "Salary": 70414 + }, + { + "Department": "HR", + "Salary": 62537 + }, + { + "Department": "HR", + "Salary": 44191 + }, + { + "Department": "HR", + "Salary": 95192 + }, + { + "Department": "HR", + "Salary": 108972 + }, + { + "Department": "HR", + "Salary": 110646 + }, + { + "Department": "HR", + "Salary": 43948 + }, + { + "Department": "HR", + "Salary": 87552 + }, + { + "Department": "HR", + "Salary": 113418 + }, + { + "Department": "HR", + "Salary": 83329 + }, + { + "Department": "HR", + "Salary": 53009 + }, + { + "Department": "HR", + "Salary": 106153 + }, + { + "Department": "HR", + "Salary": 139857 + }, + { + "Department": "HR", + "Salary": 80618 + }, + { + "Department": "HR", + "Salary": 85563 + }, + { + "Department": "HR", + "Salary": 31599 + }, + { + "Department": "HR", + "Salary": 149033 + }, + { + "Department": "HR", + "Salary": 95124 + }, + { + "Department": "HR", + "Salary": 56169 + }, + { + "Department": "HR", + "Salary": 49160 + }, + { + "Department": "HR", + "Salary": 99299 + }, + { + "Department": "HR", + "Salary": 143542 + }, + { + "Department": "HR", + "Salary": 83184 + }, + { + "Department": "HR", + "Salary": 127815 + }, + { + "Department": "HR", + "Salary": 128696 + }, + { + "Department": "HR", + "Salary": 57923 + }, + { + "Department": "HR", + "Salary": 128171 + }, + { + "Department": "HR", + "Salary": 111025 + }, + { + "Department": "HR", + "Salary": 49223 + }, + { + "Department": "HR", + "Salary": 70180 + }, + { + "Department": "HR", + "Salary": 95860 + }, + { + "Department": "HR", + "Salary": 64234 + }, + { + "Department": "HR", + "Salary": 120743 + }, + { + "Department": "HR", + "Salary": 68529 + }, + { + "Department": "HR", + "Salary": 62533 + }, + { + "Department": "HR", + "Salary": 93905 + }, + { + "Department": "HR", + "Salary": 76409 + }, + { + "Department": "HR", + "Salary": 139367 + }, + { + "Department": "HR", + "Salary": 120579 + }, + { + "Department": "HR", + "Salary": 71874 + }, + { + "Department": "HR", + "Salary": 125167 + }, + { + "Department": "HR", + "Salary": 140774 + }, + { + "Department": "HR", + "Salary": 136544 + }, + { + "Department": "Finance", + "Salary": 69363 + }, + { + "Department": "Finance", + "Salary": 48357 + }, + { + "Department": "Finance", + "Salary": 30420 + }, + { + "Department": "Finance", + "Salary": 128394 + }, + { + "Department": "Finance", + "Salary": 131698 + }, + { + "Department": "Finance", + "Salary": 110538 + }, + { + "Department": "Finance", + "Salary": 147196 + }, + { + "Department": "Finance", + "Salary": 67192 + }, + { + "Department": "Finance", + "Salary": 38318 + }, + { + "Department": "Finance", + "Salary": 34213 + }, + { + "Department": "Finance", + "Salary": 46033 + }, + { + "Department": "Finance", + "Salary": 94796 + }, + { + "Department": "Finance", + "Salary": 55243 + }, + { + "Department": "Finance", + "Salary": 81853 + }, + { + "Department": "Finance", + "Salary": 77939 + }, + { + "Department": "Finance", + "Salary": 65503 + }, + { + "Department": "Finance", + "Salary": 94101 + }, + { + "Department": "Finance", + "Salary": 132290 + }, + { + "Department": "Finance", + "Salary": 101968 + }, + { + "Department": "Finance", + "Salary": 113234 + }, + { + "Department": "Finance", + "Salary": 98756 + }, + { + "Department": "Finance", + "Salary": 135886 + }, + { + "Department": "Finance", + "Salary": 60667 + }, + { + "Department": "Finance", + "Salary": 51838 + }, + { + "Department": "Finance", + "Salary": 96182 + }, + { + "Department": "Finance", + "Salary": 70296 + }, + { + "Department": "Finance", + "Salary": 120549 + }, + { + "Department": "Finance", + "Salary": 52817 + }, + { + "Department": "Finance", + "Salary": 116045 + }, + { + "Department": "Finance", + "Salary": 71351 + }, + { + "Department": "Finance", + "Salary": 95539 + }, + { + "Department": "Finance", + "Salary": 71081 + }, + { + "Department": "Finance", + "Salary": 119365 + }, + { + "Department": "Finance", + "Salary": 59659 + }, + { + "Department": "Finance", + "Salary": 146549 + }, + { + "Department": "Finance", + "Salary": 102740 + }, + { + "Department": "Finance", + "Salary": 128560 + }, + { + "Department": "Finance", + "Salary": 43043 + }, + { + "Department": "Finance", + "Salary": 121258 + }, + { + "Department": "Finance", + "Salary": 75581 + }, + { + "Department": "Finance", + "Salary": 146248 + }, + { + "Department": "Finance", + "Salary": 87136 + }, + { + "Department": "Finance", + "Salary": 69892 + }, + { + "Department": "Finance", + "Salary": 49926 + }, + { + "Department": "Finance", + "Salary": 118695 + }, + { + "Department": "Finance", + "Salary": 84880 + }, + { + "Department": "Finance", + "Salary": 78038 + }, + { + "Department": "Finance", + "Salary": 50055 + }, + { + "Department": "Finance", + "Salary": 128572 + }, + { + "Department": "Finance", + "Salary": 130241 + }, + { + "Department": "Legal", + "Salary": 105276 + }, + { + "Department": "Legal", + "Salary": 33123 + }, + { + "Department": "Legal", + "Salary": 73300 + }, + { + "Department": "Legal", + "Salary": 100086 + }, + { + "Department": "Legal", + "Salary": 42974 + }, + { + "Department": "Legal", + "Salary": 47913 + }, + { + "Department": "Legal", + "Salary": 134755 + }, + { + "Department": "Legal", + "Salary": 129647 + }, + { + "Department": "Legal", + "Salary": 71643 + }, + { + "Department": "Legal", + "Salary": 77455 + }, + { + "Department": "Legal", + "Salary": 85373 + }, + { + "Department": "Legal", + "Salary": 79200 + }, + { + "Department": "Legal", + "Salary": 141159 + }, + { + "Department": "Legal", + "Salary": 117834 + }, + { + "Department": "Legal", + "Salary": 128099 + }, + { + "Department": "Legal", + "Salary": 97340 + }, + { + "Department": "Legal", + "Salary": 87835 + }, + { + "Department": "Legal", + "Salary": 67217 + }, + { + "Department": "Legal", + "Salary": 102888 + }, + { + "Department": "Legal", + "Salary": 100329 + }, + { + "Department": "Legal", + "Salary": 47139 + }, + { + "Department": "Legal", + "Salary": 80689 + }, + { + "Department": "Legal", + "Salary": 73309 + }, + { + "Department": "Legal", + "Salary": 119926 + }, + { + "Department": "Legal", + "Salary": 144388 + }, + { + "Department": "Legal", + "Salary": 33137 + }, + { + "Department": "Legal", + "Salary": 80274 + }, + { + "Department": "Legal", + "Salary": 70713 + }, + { + "Department": "Legal", + "Salary": 48109 + }, + { + "Department": "Legal", + "Salary": 65012 + }, + { + "Department": "Legal", + "Salary": 118670 + }, + { + "Department": "Legal", + "Salary": 145864 + }, + { + "Department": "Legal", + "Salary": 121660 + }, + { + "Department": "Legal", + "Salary": 126934 + }, + { + "Department": "Legal", + "Salary": 77505 + }, + { + "Department": "Legal", + "Salary": 86428 + }, + { + "Department": "Legal", + "Salary": 58158 + }, + { + "Department": "Legal", + "Salary": 113297 + }, + { + "Department": "Legal", + "Salary": 82379 + }, + { + "Department": "Legal", + "Salary": 36986 + }, + { + "Department": "Legal", + "Salary": 77406 + }, + { + "Department": "Legal", + "Salary": 105526 + }, + { + "Department": "Legal", + "Salary": 42388 + }, + { + "Department": "Legal", + "Salary": 149220 + }, + { + "Department": "Legal", + "Salary": 116800 + }, + { + "Department": "Legal", + "Salary": 37115 + }, + { + "Department": "Legal", + "Salary": 87910 + }, + { + "Department": "Legal", + "Salary": 119172 + }, + { + "Department": "Legal", + "Salary": 68275 + }, + { + "Department": "Legal", + "Salary": 122644 + }, + { + "Department": "Operations", + "Salary": 104218 + }, + { + "Department": "Operations", + "Salary": 132453 + }, + { + "Department": "Operations", + "Salary": 71059 + }, + { + "Department": "Operations", + "Salary": 110295 + }, + { + "Department": "Operations", + "Salary": 140614 + }, + { + "Department": "Operations", + "Salary": 85025 + }, + { + "Department": "Operations", + "Salary": 108393 + }, + { + "Department": "Operations", + "Salary": 96081 + }, + { + "Department": "Operations", + "Salary": 52143 + }, + { + "Department": "Operations", + "Salary": 67000 + }, + { + "Department": "Operations", + "Salary": 49200 + }, + { + "Department": "Operations", + "Salary": 42607 + }, + { + "Department": "Operations", + "Salary": 109916 + }, + { + "Department": "Operations", + "Salary": 130383 + }, + { + "Department": "Operations", + "Salary": 87408 + }, + { + "Department": "Operations", + "Salary": 86437 + }, + { + "Department": "Operations", + "Salary": 79567 + }, + { + "Department": "Operations", + "Salary": 54884 + }, + { + "Department": "Operations", + "Salary": 50910 + }, + { + "Department": "Operations", + "Salary": 95991 + }, + { + "Department": "Operations", + "Salary": 105027 + }, + { + "Department": "Operations", + "Salary": 41414 + }, + { + "Department": "Operations", + "Salary": 97686 + }, + { + "Department": "Operations", + "Salary": 147006 + }, + { + "Department": "Operations", + "Salary": 114464 + }, + { + "Department": "Operations", + "Salary": 130073 + }, + { + "Department": "Operations", + "Salary": 30826 + }, + { + "Department": "Operations", + "Salary": 119619 + }, + { + "Department": "Operations", + "Salary": 142819 + }, + { + "Department": "Operations", + "Salary": 61218 + }, + { + "Department": "Operations", + "Salary": 64009 + }, + { + "Department": "Operations", + "Salary": 63862 + }, + { + "Department": "Operations", + "Salary": 106052 + }, + { + "Department": "Operations", + "Salary": 123279 + }, + { + "Department": "Operations", + "Salary": 81949 + }, + { + "Department": "Operations", + "Salary": 129288 + }, + { + "Department": "Operations", + "Salary": 41875 + }, + { + "Department": "Operations", + "Salary": 57744 + }, + { + "Department": "Operations", + "Salary": 127040 + }, + { + "Department": "Operations", + "Salary": 54109 + }, + { + "Department": "Operations", + "Salary": 109504 + }, + { + "Department": "Operations", + "Salary": 59300 + }, + { + "Department": "Operations", + "Salary": 117312 + }, + { + "Department": "Operations", + "Salary": 121291 + }, + { + "Department": "Operations", + "Salary": 40267 + }, + { + "Department": "Operations", + "Salary": 34430 + }, + { + "Department": "Operations", + "Salary": 91222 + }, + { + "Department": "Operations", + "Salary": 102480 + }, + { + "Department": "Operations", + "Salary": 85086 + }, + { + "Department": "Operations", + "Salary": 58115 + }, + { + "Department": "Support", + "Salary": 118620 + }, + { + "Department": "Support", + "Salary": 149317 + }, + { + "Department": "Support", + "Salary": 68469 + }, + { + "Department": "Support", + "Salary": 143461 + }, + { + "Department": "Support", + "Salary": 55436 + }, + { + "Department": "Support", + "Salary": 91470 + }, + { + "Department": "Support", + "Salary": 78582 + }, + { + "Department": "Support", + "Salary": 73305 + }, + { + "Department": "Support", + "Salary": 53285 + }, + { + "Department": "Support", + "Salary": 65384 + }, + { + "Department": "Support", + "Salary": 124043 + }, + { + "Department": "Support", + "Salary": 92747 + }, + { + "Department": "Support", + "Salary": 58997 + }, + { + "Department": "Support", + "Salary": 59396 + }, + { + "Department": "Support", + "Salary": 41987 + }, + { + "Department": "Support", + "Salary": 132760 + }, + { + "Department": "Support", + "Salary": 84140 + }, + { + "Department": "Support", + "Salary": 129039 + }, + { + "Department": "Support", + "Salary": 62084 + }, + { + "Department": "Support", + "Salary": 107873 + }, + { + "Department": "Support", + "Salary": 129745 + }, + { + "Department": "Support", + "Salary": 38019 + }, + { + "Department": "Support", + "Salary": 49613 + }, + { + "Department": "Support", + "Salary": 146420 + }, + { + "Department": "Support", + "Salary": 106826 + }, + { + "Department": "Support", + "Salary": 47659 + }, + { + "Department": "Support", + "Salary": 56597 + }, + { + "Department": "Support", + "Salary": 43409 + }, + { + "Department": "Support", + "Salary": 32847 + }, + { + "Department": "Support", + "Salary": 114625 + }, + { + "Department": "Support", + "Salary": 84560 + }, + { + "Department": "Support", + "Salary": 98375 + }, + { + "Department": "Support", + "Salary": 81946 + }, + { + "Department": "Support", + "Salary": 90811 + }, + { + "Department": "Support", + "Salary": 45278 + }, + { + "Department": "Support", + "Salary": 130411 + }, + { + "Department": "Support", + "Salary": 74569 + }, + { + "Department": "Support", + "Salary": 61195 + }, + { + "Department": "Support", + "Salary": 44836 + }, + { + "Department": "Support", + "Salary": 134794 + }, + { + "Department": "Support", + "Salary": 68282 + }, + { + "Department": "Support", + "Salary": 109957 + }, + { + "Department": "Support", + "Salary": 108277 + }, + { + "Department": "Support", + "Salary": 70837 + }, + { + "Department": "Support", + "Salary": 94900 + }, + { + "Department": "Support", + "Salary": 124168 + }, + { + "Department": "Support", + "Salary": 38910 + }, + { + "Department": "Support", + "Salary": 145748 + }, + { + "Department": "Support", + "Salary": 84154 + }, + { + "Department": "Support", + "Salary": 111023 + }, + { + "Department": "Design", + "Salary": 142030 + }, + { + "Department": "Design", + "Salary": 124766 + }, + { + "Department": "Design", + "Salary": 120280 + }, + { + "Department": "Design", + "Salary": 93524 + }, + { + "Department": "Design", + "Salary": 31632 + }, + { + "Department": "Design", + "Salary": 99215 + }, + { + "Department": "Design", + "Salary": 46955 + }, + { + "Department": "Design", + "Salary": 112023 + }, + { + "Department": "Design", + "Salary": 34632 + }, + { + "Department": "Design", + "Salary": 127594 + }, + { + "Department": "Design", + "Salary": 130281 + }, + { + "Department": "Design", + "Salary": 50078 + }, + { + "Department": "Design", + "Salary": 32691 + }, + { + "Department": "Design", + "Salary": 140668 + }, + { + "Department": "Design", + "Salary": 145162 + }, + { + "Department": "Design", + "Salary": 76636 + }, + { + "Department": "Design", + "Salary": 113245 + }, + { + "Department": "Design", + "Salary": 43226 + }, + { + "Department": "Design", + "Salary": 78383 + }, + { + "Department": "Design", + "Salary": 89681 + }, + { + "Department": "Design", + "Salary": 123869 + }, + { + "Department": "Design", + "Salary": 49143 + }, + { + "Department": "Design", + "Salary": 39626 + }, + { + "Department": "Design", + "Salary": 55326 + }, + { + "Department": "Design", + "Salary": 44276 + }, + { + "Department": "Design", + "Salary": 82534 + }, + { + "Department": "Design", + "Salary": 124622 + }, + { + "Department": "Design", + "Salary": 106886 + }, + { + "Department": "Design", + "Salary": 100407 + }, + { + "Department": "Design", + "Salary": 45243 + }, + { + "Department": "Design", + "Salary": 133984 + }, + { + "Department": "Design", + "Salary": 132256 + }, + { + "Department": "Design", + "Salary": 124613 + }, + { + "Department": "Design", + "Salary": 67464 + }, + { + "Department": "Design", + "Salary": 51447 + }, + { + "Department": "Design", + "Salary": 135502 + }, + { + "Department": "Design", + "Salary": 85835 + }, + { + "Department": "Design", + "Salary": 47562 + }, + { + "Department": "Design", + "Salary": 112262 + }, + { + "Department": "Design", + "Salary": 94277 + }, + { + "Department": "Design", + "Salary": 98629 + }, + { + "Department": "Design", + "Salary": 149231 + }, + { + "Department": "Design", + "Salary": 63708 + }, + { + "Department": "Design", + "Salary": 36264 + }, + { + "Department": "Design", + "Salary": 63093 + }, + { + "Department": "Design", + "Salary": 149893 + }, + { + "Department": "Design", + "Salary": 148886 + }, + { + "Department": "Design", + "Salary": 142140 + }, + { + "Department": "Design", + "Salary": 54334 + }, + { + "Department": "Design", + "Salary": 43848 + }, + { + "Department": "Research", + "Salary": 91964 + }, + { + "Department": "Research", + "Salary": 99097 + }, + { + "Department": "Research", + "Salary": 100529 + }, + { + "Department": "Research", + "Salary": 42939 + }, + { + "Department": "Research", + "Salary": 56595 + }, + { + "Department": "Research", + "Salary": 140310 + }, + { + "Department": "Research", + "Salary": 132219 + }, + { + "Department": "Research", + "Salary": 101077 + }, + { + "Department": "Research", + "Salary": 144561 + }, + { + "Department": "Research", + "Salary": 49150 + }, + { + "Department": "Research", + "Salary": 45804 + }, + { + "Department": "Research", + "Salary": 83331 + }, + { + "Department": "Research", + "Salary": 83953 + }, + { + "Department": "Research", + "Salary": 94999 + }, + { + "Department": "Research", + "Salary": 101956 + }, + { + "Department": "Research", + "Salary": 33164 + }, + { + "Department": "Research", + "Salary": 39355 + }, + { + "Department": "Research", + "Salary": 63672 + }, + { + "Department": "Research", + "Salary": 32155 + }, + { + "Department": "Research", + "Salary": 123287 + }, + { + "Department": "Research", + "Salary": 111126 + }, + { + "Department": "Research", + "Salary": 80545 + }, + { + "Department": "Research", + "Salary": 54473 + }, + { + "Department": "Research", + "Salary": 111217 + }, + { + "Department": "Research", + "Salary": 40731 + }, + { + "Department": "Research", + "Salary": 137643 + }, + { + "Department": "Research", + "Salary": 63170 + }, + { + "Department": "Research", + "Salary": 125359 + }, + { + "Department": "Research", + "Salary": 131760 + }, + { + "Department": "Research", + "Salary": 67805 + }, + { + "Department": "Research", + "Salary": 142686 + }, + { + "Department": "Research", + "Salary": 108345 + }, + { + "Department": "Research", + "Salary": 135207 + }, + { + "Department": "Research", + "Salary": 38713 + }, + { + "Department": "Research", + "Salary": 73035 + }, + { + "Department": "Research", + "Salary": 71124 + }, + { + "Department": "Research", + "Salary": 123338 + }, + { + "Department": "Research", + "Salary": 123828 + }, + { + "Department": "Research", + "Salary": 83515 + }, + { + "Department": "Research", + "Salary": 58003 + }, + { + "Department": "Research", + "Salary": 42196 + }, + { + "Department": "Research", + "Salary": 51199 + }, + { + "Department": "Research", + "Salary": 35254 + }, + { + "Department": "Research", + "Salary": 128896 + }, + { + "Department": "Research", + "Salary": 52692 + }, + { + "Department": "Research", + "Salary": 52659 + }, + { + "Department": "Research", + "Salary": 99469 + }, + { + "Department": "Research", + "Salary": 109774 + }, + { + "Department": "Research", + "Salary": 149458 + }, + { + "Department": "Research", + "Salary": 37221 + }, + { + "Department": "QA", + "Salary": 74511 + }, + { + "Department": "QA", + "Salary": 48619 + }, + { + "Department": "QA", + "Salary": 119656 + }, + { + "Department": "QA", + "Salary": 46338 + }, + { + "Department": "QA", + "Salary": 60000 + }, + { + "Department": "QA", + "Salary": 114199 + }, + { + "Department": "QA", + "Salary": 122876 + }, + { + "Department": "QA", + "Salary": 37779 + }, + { + "Department": "QA", + "Salary": 93936 + }, + { + "Department": "QA", + "Salary": 117596 + }, + { + "Department": "QA", + "Salary": 95262 + }, + { + "Department": "QA", + "Salary": 80060 + }, + { + "Department": "QA", + "Salary": 68683 + }, + { + "Department": "QA", + "Salary": 138711 + }, + { + "Department": "QA", + "Salary": 136279 + }, + { + "Department": "QA", + "Salary": 54425 + }, + { + "Department": "QA", + "Salary": 143391 + }, + { + "Department": "QA", + "Salary": 70176 + }, + { + "Department": "QA", + "Salary": 144806 + }, + { + "Department": "QA", + "Salary": 93701 + }, + { + "Department": "QA", + "Salary": 140920 + }, + { + "Department": "QA", + "Salary": 57365 + }, + { + "Department": "QA", + "Salary": 114027 + }, + { + "Department": "QA", + "Salary": 118486 + }, + { + "Department": "QA", + "Salary": 45865 + }, + { + "Department": "QA", + "Salary": 35221 + }, + { + "Department": "QA", + "Salary": 57198 + }, + { + "Department": "QA", + "Salary": 64623 + }, + { + "Department": "QA", + "Salary": 51166 + }, + { + "Department": "QA", + "Salary": 82639 + }, + { + "Department": "QA", + "Salary": 95121 + }, + { + "Department": "QA", + "Salary": 114703 + }, + { + "Department": "QA", + "Salary": 78726 + }, + { + "Department": "QA", + "Salary": 87117 + }, + { + "Department": "QA", + "Salary": 110519 + }, + { + "Department": "QA", + "Salary": 81097 + }, + { + "Department": "QA", + "Salary": 101191 + }, + { + "Department": "QA", + "Salary": 137217 + }, + { + "Department": "QA", + "Salary": 98828 + }, + { + "Department": "QA", + "Salary": 138746 + }, + { + "Department": "QA", + "Salary": 129509 + }, + { + "Department": "QA", + "Salary": 41967 + }, + { + "Department": "QA", + "Salary": 40984 + }, + { + "Department": "QA", + "Salary": 73179 + }, + { + "Department": "QA", + "Salary": 107324 + }, + { + "Department": "QA", + "Salary": 132308 + }, + { + "Department": "QA", + "Salary": 33902 + }, + { + "Department": "QA", + "Salary": 96884 + }, + { + "Department": "QA", + "Salary": 115122 + }, + { + "Department": "QA", + "Salary": 147917 + }, + { + "Department": "DevOps", + "Salary": 64497 + }, + { + "Department": "DevOps", + "Salary": 96031 + }, + { + "Department": "DevOps", + "Salary": 46229 + }, + { + "Department": "DevOps", + "Salary": 34646 + }, + { + "Department": "DevOps", + "Salary": 107502 + }, + { + "Department": "DevOps", + "Salary": 126406 + }, + { + "Department": "DevOps", + "Salary": 80438 + }, + { + "Department": "DevOps", + "Salary": 69212 + }, + { + "Department": "DevOps", + "Salary": 146301 + }, + { + "Department": "DevOps", + "Salary": 139205 + }, + { + "Department": "DevOps", + "Salary": 33198 + }, + { + "Department": "DevOps", + "Salary": 138451 + }, + { + "Department": "DevOps", + "Salary": 78184 + }, + { + "Department": "DevOps", + "Salary": 95863 + }, + { + "Department": "DevOps", + "Salary": 109115 + }, + { + "Department": "DevOps", + "Salary": 112081 + }, + { + "Department": "DevOps", + "Salary": 52585 + }, + { + "Department": "DevOps", + "Salary": 59234 + }, + { + "Department": "DevOps", + "Salary": 79594 + }, + { + "Department": "DevOps", + "Salary": 31000 + }, + { + "Department": "DevOps", + "Salary": 39541 + }, + { + "Department": "DevOps", + "Salary": 71030 + }, + { + "Department": "DevOps", + "Salary": 97871 + }, + { + "Department": "DevOps", + "Salary": 137660 + }, + { + "Department": "DevOps", + "Salary": 116448 + }, + { + "Department": "DevOps", + "Salary": 120894 + }, + { + "Department": "DevOps", + "Salary": 89998 + }, + { + "Department": "DevOps", + "Salary": 64199 + }, + { + "Department": "DevOps", + "Salary": 129374 + }, + { + "Department": "DevOps", + "Salary": 45934 + }, + { + "Department": "DevOps", + "Salary": 118110 + }, + { + "Department": "DevOps", + "Salary": 96248 + }, + { + "Department": "DevOps", + "Salary": 107250 + }, + { + "Department": "DevOps", + "Salary": 98014 + }, + { + "Department": "DevOps", + "Salary": 136688 + }, + { + "Department": "DevOps", + "Salary": 93539 + }, + { + "Department": "DevOps", + "Salary": 47930 + }, + { + "Department": "DevOps", + "Salary": 58701 + }, + { + "Department": "DevOps", + "Salary": 130046 + }, + { + "Department": "DevOps", + "Salary": 66543 + }, + { + "Department": "DevOps", + "Salary": 56123 + }, + { + "Department": "DevOps", + "Salary": 123028 + }, + { + "Department": "DevOps", + "Salary": 67373 + }, + { + "Department": "DevOps", + "Salary": 71826 + }, + { + "Department": "DevOps", + "Salary": 31390 + }, + { + "Department": "DevOps", + "Salary": 103624 + }, + { + "Department": "DevOps", + "Salary": 111196 + }, + { + "Department": "DevOps", + "Salary": 43988 + }, + { + "Department": "DevOps", + "Salary": 46399 + }, + { + "Department": "DevOps", + "Salary": 130701 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/boxplot/03-card4.flint.json b/test-harness/excel/evaluations/inputs/boxplot/03-card4.flint.json new file mode 100644 index 00000000..d96ac0f8 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/boxplot/03-card4.flint.json @@ -0,0 +1,1023 @@ +{ + "semantic_types": { + "Group": "Category", + "Score": "Score", + "Gender": "Category" + }, + "chart_spec": { + "chartType": "Boxplot", + "encodings": { + "x": "Group", + "y": "Score", + "color": "Gender" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Group": "Electronics", + "Gender": "Male", + "Score": 27 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 74 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 56 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 100 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 37 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 57 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 23 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 77 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 61 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 81 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 62 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 99 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 27 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 47 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 21 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 38 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 79 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 78 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 91 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 37 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 55 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 72 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 71 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 53 + }, + { + "Group": "Electronics", + "Gender": "Male", + "Score": 51 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 98 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 35 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 98 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 21 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 79 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 70 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 27 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 70 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 32 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 31 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 82 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 72 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 93 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 60 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 74 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 49 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 98 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 78 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 88 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 47 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 64 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 54 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 46 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 32 + }, + { + "Group": "Electronics", + "Gender": "Female", + "Score": 50 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 72 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 21 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 61 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 54 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 25 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 84 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 24 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 43 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 92 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 66 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 93 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 66 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 49 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 66 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 30 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 91 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 76 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 64 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 26 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 39 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 27 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 71 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 82 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 29 + }, + { + "Group": "Clothing", + "Gender": "Male", + "Score": 28 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 34 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 26 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 53 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 71 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 25 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 91 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 54 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 37 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 53 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 54 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 46 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 60 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 48 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 22 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 76 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 77 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 46 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 25 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 83 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 75 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 30 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 87 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 41 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 90 + }, + { + "Group": "Clothing", + "Gender": "Female", + "Score": 67 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 46 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 31 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 58 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 29 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 24 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 47 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 52 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 32 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 85 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 94 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 77 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 36 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 77 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 49 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 92 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 21 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 54 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 39 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 22 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 42 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 52 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 32 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 33 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 89 + }, + { + "Group": "Food", + "Gender": "Male", + "Score": 46 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 97 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 43 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 94 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 45 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 29 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 74 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 53 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 92 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 52 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 55 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 73 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 66 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 73 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 38 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 25 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 36 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 57 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 82 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 24 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 46 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 34 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 74 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 94 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 22 + }, + { + "Group": "Food", + "Gender": "Female", + "Score": 41 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 20 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 76 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 38 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 91 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 77 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 46 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 26 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 36 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 75 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 42 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 26 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 32 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 27 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 92 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 31 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 94 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 22 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 40 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 30 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 35 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 23 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 67 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 98 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 65 + }, + { + "Group": "Books", + "Gender": "Male", + "Score": 67 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 100 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 60 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 98 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 30 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 72 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 87 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 60 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 41 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 26 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 75 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 93 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 28 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 72 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 24 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 63 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 21 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 32 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 21 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 37 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 36 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 77 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 99 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 21 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 43 + }, + { + "Group": "Books", + "Gender": "Female", + "Score": 89 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/boxplot/04-card6.flint.json b/test-harness/excel/evaluations/inputs/boxplot/04-card6.flint.json new file mode 100644 index 00000000..974c1fcb --- /dev/null +++ b/test-harness/excel/evaluations/inputs/boxplot/04-card6.flint.json @@ -0,0 +1,2423 @@ +{ + "semantic_types": { + "Country": "Country", + "Revenue": "Amount", + "Quarter": "Category" + }, + "chart_spec": { + "chartType": "Boxplot", + "encodings": { + "x": "Country", + "y": "Revenue", + "color": "Quarter" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 5307 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 526 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 545 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 1434 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 5028 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 4161 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 1877 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 692 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 5309 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 2401 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 5327 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 2150 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 1694 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 1988 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 1107 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 3206 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 3090 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 4890 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 1197 + }, + { + "Country": "USA", + "Quarter": "Q1", + "Revenue": 1666 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 2051 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 3976 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 727 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 4339 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 1005 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 2555 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 4573 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 3763 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 4758 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 934 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 4447 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 4969 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 3426 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 3886 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 4304 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 2715 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 2774 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 3893 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 4604 + }, + { + "Country": "USA", + "Quarter": "Q2", + "Revenue": 540 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 2818 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 2383 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 3439 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 5230 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 2178 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 3286 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 3268 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 1968 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 841 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 4237 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 5490 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 2439 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 2237 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 3269 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 1816 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 5363 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 2862 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 1643 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 1075 + }, + { + "Country": "USA", + "Quarter": "Q3", + "Revenue": 1098 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 3273 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 1599 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 3374 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 1709 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 2987 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 4249 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 1270 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 3125 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 1651 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 2504 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 2671 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 5231 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 1836 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 4205 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 4126 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 2697 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 3932 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 5347 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 4723 + }, + { + "Country": "USA", + "Quarter": "Q4", + "Revenue": 3471 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 984 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 2669 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 2967 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 3152 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 4873 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 4492 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 4069 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 4379 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 3391 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 1353 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 2873 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 1701 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 1117 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 3945 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 3172 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 5021 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 2748 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 789 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 4645 + }, + { + "Country": "China", + "Quarter": "Q1", + "Revenue": 2578 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 5442 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 929 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 2789 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 4133 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 2487 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 2743 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 3170 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 2712 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 2793 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 2119 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 2877 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 5205 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 2034 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 1109 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 5070 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 4313 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 3601 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 2549 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 906 + }, + { + "Country": "China", + "Quarter": "Q2", + "Revenue": 2415 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 2034 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 1530 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 1890 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 2962 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 2343 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 2702 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 1611 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 1626 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 5056 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 1228 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 3316 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 2027 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 2019 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 1608 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 5361 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 2337 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 3825 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 1698 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 1852 + }, + { + "Country": "China", + "Quarter": "Q3", + "Revenue": 1866 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 1813 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 4311 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 5143 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 5328 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 4469 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 1118 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 2433 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 5174 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 4821 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 1418 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 4528 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 4628 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 4587 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 1710 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 2751 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 2679 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 3722 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 3544 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 2772 + }, + { + "Country": "China", + "Quarter": "Q4", + "Revenue": 3568 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 3028 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 1934 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 3670 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 1135 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 5417 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 4279 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 791 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 4260 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 4786 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 4478 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 4390 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 2668 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 1008 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 2849 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 4680 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 1019 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 4116 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 2746 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 3255 + }, + { + "Country": "Japan", + "Quarter": "Q1", + "Revenue": 3787 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 4053 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 3639 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 1813 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 4518 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 4056 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 864 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 2419 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 1501 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 5146 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 2623 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 3638 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 1636 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 4767 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 2918 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 2374 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 2505 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 800 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 4601 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 3104 + }, + { + "Country": "Japan", + "Quarter": "Q2", + "Revenue": 3599 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 1082 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 4576 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 3332 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 2739 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 1338 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 1008 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 3245 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 1546 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 1980 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 3053 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 4785 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 1021 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 2833 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 4241 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 658 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 4233 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 3218 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 942 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 2782 + }, + { + "Country": "Japan", + "Quarter": "Q3", + "Revenue": 731 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 5056 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 2084 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 2647 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 2936 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 966 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 4979 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 5183 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 2470 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 2053 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 2974 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 5261 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 4893 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 4264 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 4763 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 1663 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 2540 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 2663 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 693 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 3256 + }, + { + "Country": "Japan", + "Quarter": "Q4", + "Revenue": 3525 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 5207 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 785 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 585 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 1464 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 2782 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 3010 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 1998 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 3226 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 4169 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 5423 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 3236 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 3507 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 2499 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 4695 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 3027 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 1972 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 4577 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 4861 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 4232 + }, + { + "Country": "Germany", + "Quarter": "Q1", + "Revenue": 2222 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 5500 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 2322 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 1158 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 4739 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 3546 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 2002 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 3070 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 5386 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 1425 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 1159 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 5184 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 3657 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 2453 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 3569 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 4223 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 5076 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 2222 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 3850 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 5036 + }, + { + "Country": "Germany", + "Quarter": "Q2", + "Revenue": 3746 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 2552 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 1194 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 779 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 983 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 3283 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 1742 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 2416 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 2754 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 4401 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 4761 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 2119 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 5243 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 3096 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 4585 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 4907 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 1255 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 2404 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 4241 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 2843 + }, + { + "Country": "Germany", + "Quarter": "Q3", + "Revenue": 4321 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 3000 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 2712 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 5084 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 5377 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 3031 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 3959 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 5032 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 1804 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 4406 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 5253 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 2469 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 3620 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 1403 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 4080 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 3323 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 3918 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 3577 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 4442 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 2048 + }, + { + "Country": "Germany", + "Quarter": "Q4", + "Revenue": 2011 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 1383 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 1345 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 4205 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 963 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 3126 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 3803 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 966 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 830 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 2945 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 3215 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 3375 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 3420 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 3788 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 5289 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 619 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 3058 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 5495 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 2639 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 1403 + }, + { + "Country": "UK", + "Quarter": "Q1", + "Revenue": 710 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 2454 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 1676 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 2158 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 3213 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 2648 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 2165 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 872 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 3347 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 3229 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 601 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 5181 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 3379 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 3837 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 3309 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 1377 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 3385 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 1987 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 707 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 2180 + }, + { + "Country": "UK", + "Quarter": "Q2", + "Revenue": 2687 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 5286 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 5086 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 1048 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 2277 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 4452 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 5189 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 3647 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 3775 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 676 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 3864 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 2572 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 4031 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 3684 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 4458 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 1083 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 1688 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 2417 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 4886 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 3385 + }, + { + "Country": "UK", + "Quarter": "Q3", + "Revenue": 3253 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 2032 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 3423 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 2712 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 2662 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 2435 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 3726 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 3745 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 4196 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 1713 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 1761 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 4448 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 2291 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 4673 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 4466 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 3937 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 4730 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 4013 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 641 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 2101 + }, + { + "Country": "UK", + "Quarter": "Q4", + "Revenue": 2731 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 1782 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 1404 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 4516 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 5168 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 966 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 3631 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 1222 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 1673 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 1636 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 2179 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 3593 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 4105 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 873 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 1993 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 4077 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 5132 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 2222 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 5364 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 1481 + }, + { + "Country": "France", + "Quarter": "Q1", + "Revenue": 2085 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 2864 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 1746 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 4188 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 3947 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 864 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 5176 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 1059 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 2550 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 4961 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 867 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 3408 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 2956 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 2261 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 3006 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 2888 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 3693 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 2854 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 4210 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 1096 + }, + { + "Country": "France", + "Quarter": "Q2", + "Revenue": 5313 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 743 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 3697 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 1631 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 3998 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 693 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 2202 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 4656 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 999 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 3215 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 4509 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 1407 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 2995 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 2415 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 642 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 538 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 3026 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 4038 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 5315 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 3588 + }, + { + "Country": "France", + "Quarter": "Q3", + "Revenue": 2390 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 3361 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 4249 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 4601 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 4427 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 3050 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 5015 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 3122 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 649 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 5026 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 1325 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 4936 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 3544 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 4818 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 4804 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 2942 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 4422 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 4712 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 3047 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 2097 + }, + { + "Country": "France", + "Quarter": "Q4", + "Revenue": 3846 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/boxplot/05-card8.flint.json b/test-harness/excel/evaluations/inputs/boxplot/05-card8.flint.json new file mode 100644 index 00000000..351401a9 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/boxplot/05-card8.flint.json @@ -0,0 +1,3023 @@ +{ + "semantic_types": { + "Department": "Department", + "Compensation": "Amount", + "Level": "Category" + }, + "chart_spec": { + "chartType": "Boxplot", + "encodings": { + "x": "Department", + "y": "Compensation", + "color": "Level" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Department": "Engineering", + "Level": "Intern", + "Compensation": 146942 + }, + { + "Department": "Engineering", + "Level": "Intern", + "Compensation": 72824 + }, + { + "Department": "Engineering", + "Level": "Intern", + "Compensation": 28969 + }, + { + "Department": "Engineering", + "Level": "Intern", + "Compensation": 58947 + }, + { + "Department": "Engineering", + "Level": "Intern", + "Compensation": 70066 + }, + { + "Department": "Engineering", + "Level": "Intern", + "Compensation": 43824 + }, + { + "Department": "Engineering", + "Level": "Intern", + "Compensation": 167706 + }, + { + "Department": "Engineering", + "Level": "Intern", + "Compensation": 105483 + }, + { + "Department": "Engineering", + "Level": "Intern", + "Compensation": 132009 + }, + { + "Department": "Engineering", + "Level": "Intern", + "Compensation": 52044 + }, + { + "Department": "Engineering", + "Level": "Intern", + "Compensation": 82344 + }, + { + "Department": "Engineering", + "Level": "Intern", + "Compensation": 82273 + }, + { + "Department": "Engineering", + "Level": "Intern", + "Compensation": 109563 + }, + { + "Department": "Engineering", + "Level": "Intern", + "Compensation": 94558 + }, + { + "Department": "Engineering", + "Level": "Intern", + "Compensation": 89065 + }, + { + "Department": "Engineering", + "Level": "Junior", + "Compensation": 162930 + }, + { + "Department": "Engineering", + "Level": "Junior", + "Compensation": 158880 + }, + { + "Department": "Engineering", + "Level": "Junior", + "Compensation": 165534 + }, + { + "Department": "Engineering", + "Level": "Junior", + "Compensation": 182107 + }, + { + "Department": "Engineering", + "Level": "Junior", + "Compensation": 117416 + }, + { + "Department": "Engineering", + "Level": "Junior", + "Compensation": 139107 + }, + { + "Department": "Engineering", + "Level": "Junior", + "Compensation": 176471 + }, + { + "Department": "Engineering", + "Level": "Junior", + "Compensation": 74754 + }, + { + "Department": "Engineering", + "Level": "Junior", + "Compensation": 98386 + }, + { + "Department": "Engineering", + "Level": "Junior", + "Compensation": 29677 + }, + { + "Department": "Engineering", + "Level": "Junior", + "Compensation": 53964 + }, + { + "Department": "Engineering", + "Level": "Junior", + "Compensation": 140616 + }, + { + "Department": "Engineering", + "Level": "Junior", + "Compensation": 152346 + }, + { + "Department": "Engineering", + "Level": "Junior", + "Compensation": 80345 + }, + { + "Department": "Engineering", + "Level": "Junior", + "Compensation": 86686 + }, + { + "Department": "Engineering", + "Level": "Mid", + "Compensation": 86304 + }, + { + "Department": "Engineering", + "Level": "Mid", + "Compensation": 144446 + }, + { + "Department": "Engineering", + "Level": "Mid", + "Compensation": 134411 + }, + { + "Department": "Engineering", + "Level": "Mid", + "Compensation": 167851 + }, + { + "Department": "Engineering", + "Level": "Mid", + "Compensation": 94792 + }, + { + "Department": "Engineering", + "Level": "Mid", + "Compensation": 161473 + }, + { + "Department": "Engineering", + "Level": "Mid", + "Compensation": 170996 + }, + { + "Department": "Engineering", + "Level": "Mid", + "Compensation": 106959 + }, + { + "Department": "Engineering", + "Level": "Mid", + "Compensation": 89210 + }, + { + "Department": "Engineering", + "Level": "Mid", + "Compensation": 153683 + }, + { + "Department": "Engineering", + "Level": "Mid", + "Compensation": 148507 + }, + { + "Department": "Engineering", + "Level": "Mid", + "Compensation": 138119 + }, + { + "Department": "Engineering", + "Level": "Mid", + "Compensation": 185002 + }, + { + "Department": "Engineering", + "Level": "Mid", + "Compensation": 136505 + }, + { + "Department": "Engineering", + "Level": "Mid", + "Compensation": 183567 + }, + { + "Department": "Engineering", + "Level": "Senior", + "Compensation": 166033 + }, + { + "Department": "Engineering", + "Level": "Senior", + "Compensation": 159207 + }, + { + "Department": "Engineering", + "Level": "Senior", + "Compensation": 60558 + }, + { + "Department": "Engineering", + "Level": "Senior", + "Compensation": 199978 + }, + { + "Department": "Engineering", + "Level": "Senior", + "Compensation": 176068 + }, + { + "Department": "Engineering", + "Level": "Senior", + "Compensation": 121789 + }, + { + "Department": "Engineering", + "Level": "Senior", + "Compensation": 136114 + }, + { + "Department": "Engineering", + "Level": "Senior", + "Compensation": 84672 + }, + { + "Department": "Engineering", + "Level": "Senior", + "Compensation": 180547 + }, + { + "Department": "Engineering", + "Level": "Senior", + "Compensation": 158516 + }, + { + "Department": "Engineering", + "Level": "Senior", + "Compensation": 178804 + }, + { + "Department": "Engineering", + "Level": "Senior", + "Compensation": 87125 + }, + { + "Department": "Engineering", + "Level": "Senior", + "Compensation": 111674 + }, + { + "Department": "Engineering", + "Level": "Senior", + "Compensation": 50471 + }, + { + "Department": "Engineering", + "Level": "Senior", + "Compensation": 70991 + }, + { + "Department": "Engineering", + "Level": "Lead", + "Compensation": 189867 + }, + { + "Department": "Engineering", + "Level": "Lead", + "Compensation": 172211 + }, + { + "Department": "Engineering", + "Level": "Lead", + "Compensation": 46417 + }, + { + "Department": "Engineering", + "Level": "Lead", + "Compensation": 183270 + }, + { + "Department": "Engineering", + "Level": "Lead", + "Compensation": 69313 + }, + { + "Department": "Engineering", + "Level": "Lead", + "Compensation": 164153 + }, + { + "Department": "Engineering", + "Level": "Lead", + "Compensation": 67210 + }, + { + "Department": "Engineering", + "Level": "Lead", + "Compensation": 175330 + }, + { + "Department": "Engineering", + "Level": "Lead", + "Compensation": 153155 + }, + { + "Department": "Engineering", + "Level": "Lead", + "Compensation": 196369 + }, + { + "Department": "Engineering", + "Level": "Lead", + "Compensation": 79962 + }, + { + "Department": "Engineering", + "Level": "Lead", + "Compensation": 129469 + }, + { + "Department": "Engineering", + "Level": "Lead", + "Compensation": 64937 + }, + { + "Department": "Engineering", + "Level": "Lead", + "Compensation": 115222 + }, + { + "Department": "Engineering", + "Level": "Lead", + "Compensation": 183400 + }, + { + "Department": "Sales", + "Level": "Intern", + "Compensation": 155467 + }, + { + "Department": "Sales", + "Level": "Intern", + "Compensation": 32860 + }, + { + "Department": "Sales", + "Level": "Intern", + "Compensation": 174729 + }, + { + "Department": "Sales", + "Level": "Intern", + "Compensation": 190183 + }, + { + "Department": "Sales", + "Level": "Intern", + "Compensation": 61200 + }, + { + "Department": "Sales", + "Level": "Intern", + "Compensation": 145961 + }, + { + "Department": "Sales", + "Level": "Intern", + "Compensation": 39642 + }, + { + "Department": "Sales", + "Level": "Intern", + "Compensation": 66732 + }, + { + "Department": "Sales", + "Level": "Intern", + "Compensation": 186677 + }, + { + "Department": "Sales", + "Level": "Intern", + "Compensation": 111027 + }, + { + "Department": "Sales", + "Level": "Intern", + "Compensation": 28184 + }, + { + "Department": "Sales", + "Level": "Intern", + "Compensation": 166597 + }, + { + "Department": "Sales", + "Level": "Intern", + "Compensation": 195275 + }, + { + "Department": "Sales", + "Level": "Intern", + "Compensation": 66321 + }, + { + "Department": "Sales", + "Level": "Intern", + "Compensation": 102604 + }, + { + "Department": "Sales", + "Level": "Junior", + "Compensation": 46150 + }, + { + "Department": "Sales", + "Level": "Junior", + "Compensation": 70042 + }, + { + "Department": "Sales", + "Level": "Junior", + "Compensation": 163238 + }, + { + "Department": "Sales", + "Level": "Junior", + "Compensation": 94776 + }, + { + "Department": "Sales", + "Level": "Junior", + "Compensation": 77542 + }, + { + "Department": "Sales", + "Level": "Junior", + "Compensation": 40621 + }, + { + "Department": "Sales", + "Level": "Junior", + "Compensation": 70457 + }, + { + "Department": "Sales", + "Level": "Junior", + "Compensation": 151853 + }, + { + "Department": "Sales", + "Level": "Junior", + "Compensation": 192655 + }, + { + "Department": "Sales", + "Level": "Junior", + "Compensation": 129255 + }, + { + "Department": "Sales", + "Level": "Junior", + "Compensation": 142866 + }, + { + "Department": "Sales", + "Level": "Junior", + "Compensation": 169220 + }, + { + "Department": "Sales", + "Level": "Junior", + "Compensation": 188531 + }, + { + "Department": "Sales", + "Level": "Junior", + "Compensation": 108186 + }, + { + "Department": "Sales", + "Level": "Junior", + "Compensation": 60725 + }, + { + "Department": "Sales", + "Level": "Mid", + "Compensation": 29216 + }, + { + "Department": "Sales", + "Level": "Mid", + "Compensation": 179113 + }, + { + "Department": "Sales", + "Level": "Mid", + "Compensation": 25716 + }, + { + "Department": "Sales", + "Level": "Mid", + "Compensation": 152276 + }, + { + "Department": "Sales", + "Level": "Mid", + "Compensation": 132228 + }, + { + "Department": "Sales", + "Level": "Mid", + "Compensation": 52873 + }, + { + "Department": "Sales", + "Level": "Mid", + "Compensation": 194415 + }, + { + "Department": "Sales", + "Level": "Mid", + "Compensation": 134621 + }, + { + "Department": "Sales", + "Level": "Mid", + "Compensation": 194851 + }, + { + "Department": "Sales", + "Level": "Mid", + "Compensation": 109957 + }, + { + "Department": "Sales", + "Level": "Mid", + "Compensation": 64662 + }, + { + "Department": "Sales", + "Level": "Mid", + "Compensation": 43382 + }, + { + "Department": "Sales", + "Level": "Mid", + "Compensation": 95783 + }, + { + "Department": "Sales", + "Level": "Mid", + "Compensation": 29810 + }, + { + "Department": "Sales", + "Level": "Mid", + "Compensation": 191072 + }, + { + "Department": "Sales", + "Level": "Senior", + "Compensation": 114381 + }, + { + "Department": "Sales", + "Level": "Senior", + "Compensation": 47205 + }, + { + "Department": "Sales", + "Level": "Senior", + "Compensation": 123348 + }, + { + "Department": "Sales", + "Level": "Senior", + "Compensation": 89150 + }, + { + "Department": "Sales", + "Level": "Senior", + "Compensation": 25153 + }, + { + "Department": "Sales", + "Level": "Senior", + "Compensation": 139276 + }, + { + "Department": "Sales", + "Level": "Senior", + "Compensation": 37384 + }, + { + "Department": "Sales", + "Level": "Senior", + "Compensation": 90824 + }, + { + "Department": "Sales", + "Level": "Senior", + "Compensation": 157063 + }, + { + "Department": "Sales", + "Level": "Senior", + "Compensation": 81120 + }, + { + "Department": "Sales", + "Level": "Senior", + "Compensation": 155402 + }, + { + "Department": "Sales", + "Level": "Senior", + "Compensation": 165035 + }, + { + "Department": "Sales", + "Level": "Senior", + "Compensation": 188392 + }, + { + "Department": "Sales", + "Level": "Senior", + "Compensation": 54415 + }, + { + "Department": "Sales", + "Level": "Senior", + "Compensation": 34808 + }, + { + "Department": "Sales", + "Level": "Lead", + "Compensation": 197043 + }, + { + "Department": "Sales", + "Level": "Lead", + "Compensation": 27832 + }, + { + "Department": "Sales", + "Level": "Lead", + "Compensation": 26729 + }, + { + "Department": "Sales", + "Level": "Lead", + "Compensation": 27490 + }, + { + "Department": "Sales", + "Level": "Lead", + "Compensation": 48501 + }, + { + "Department": "Sales", + "Level": "Lead", + "Compensation": 27393 + }, + { + "Department": "Sales", + "Level": "Lead", + "Compensation": 167972 + }, + { + "Department": "Sales", + "Level": "Lead", + "Compensation": 27417 + }, + { + "Department": "Sales", + "Level": "Lead", + "Compensation": 54697 + }, + { + "Department": "Sales", + "Level": "Lead", + "Compensation": 45030 + }, + { + "Department": "Sales", + "Level": "Lead", + "Compensation": 148904 + }, + { + "Department": "Sales", + "Level": "Lead", + "Compensation": 158913 + }, + { + "Department": "Sales", + "Level": "Lead", + "Compensation": 199708 + }, + { + "Department": "Sales", + "Level": "Lead", + "Compensation": 193360 + }, + { + "Department": "Sales", + "Level": "Lead", + "Compensation": 72003 + }, + { + "Department": "Marketing", + "Level": "Intern", + "Compensation": 60009 + }, + { + "Department": "Marketing", + "Level": "Intern", + "Compensation": 73709 + }, + { + "Department": "Marketing", + "Level": "Intern", + "Compensation": 194798 + }, + { + "Department": "Marketing", + "Level": "Intern", + "Compensation": 90075 + }, + { + "Department": "Marketing", + "Level": "Intern", + "Compensation": 165620 + }, + { + "Department": "Marketing", + "Level": "Intern", + "Compensation": 57972 + }, + { + "Department": "Marketing", + "Level": "Intern", + "Compensation": 141196 + }, + { + "Department": "Marketing", + "Level": "Intern", + "Compensation": 113265 + }, + { + "Department": "Marketing", + "Level": "Intern", + "Compensation": 192632 + }, + { + "Department": "Marketing", + "Level": "Intern", + "Compensation": 95930 + }, + { + "Department": "Marketing", + "Level": "Intern", + "Compensation": 49578 + }, + { + "Department": "Marketing", + "Level": "Intern", + "Compensation": 115607 + }, + { + "Department": "Marketing", + "Level": "Intern", + "Compensation": 174247 + }, + { + "Department": "Marketing", + "Level": "Intern", + "Compensation": 138134 + }, + { + "Department": "Marketing", + "Level": "Intern", + "Compensation": 85374 + }, + { + "Department": "Marketing", + "Level": "Junior", + "Compensation": 72424 + }, + { + "Department": "Marketing", + "Level": "Junior", + "Compensation": 126748 + }, + { + "Department": "Marketing", + "Level": "Junior", + "Compensation": 179808 + }, + { + "Department": "Marketing", + "Level": "Junior", + "Compensation": 156068 + }, + { + "Department": "Marketing", + "Level": "Junior", + "Compensation": 168200 + }, + { + "Department": "Marketing", + "Level": "Junior", + "Compensation": 190182 + }, + { + "Department": "Marketing", + "Level": "Junior", + "Compensation": 33566 + }, + { + "Department": "Marketing", + "Level": "Junior", + "Compensation": 139319 + }, + { + "Department": "Marketing", + "Level": "Junior", + "Compensation": 66140 + }, + { + "Department": "Marketing", + "Level": "Junior", + "Compensation": 34582 + }, + { + "Department": "Marketing", + "Level": "Junior", + "Compensation": 73881 + }, + { + "Department": "Marketing", + "Level": "Junior", + "Compensation": 121614 + }, + { + "Department": "Marketing", + "Level": "Junior", + "Compensation": 164820 + }, + { + "Department": "Marketing", + "Level": "Junior", + "Compensation": 87253 + }, + { + "Department": "Marketing", + "Level": "Junior", + "Compensation": 166649 + }, + { + "Department": "Marketing", + "Level": "Mid", + "Compensation": 189072 + }, + { + "Department": "Marketing", + "Level": "Mid", + "Compensation": 116356 + }, + { + "Department": "Marketing", + "Level": "Mid", + "Compensation": 174926 + }, + { + "Department": "Marketing", + "Level": "Mid", + "Compensation": 177179 + }, + { + "Department": "Marketing", + "Level": "Mid", + "Compensation": 64980 + }, + { + "Department": "Marketing", + "Level": "Mid", + "Compensation": 148079 + }, + { + "Department": "Marketing", + "Level": "Mid", + "Compensation": 119401 + }, + { + "Department": "Marketing", + "Level": "Mid", + "Compensation": 78925 + }, + { + "Department": "Marketing", + "Level": "Mid", + "Compensation": 188354 + }, + { + "Department": "Marketing", + "Level": "Mid", + "Compensation": 120776 + }, + { + "Department": "Marketing", + "Level": "Mid", + "Compensation": 74385 + }, + { + "Department": "Marketing", + "Level": "Mid", + "Compensation": 196717 + }, + { + "Department": "Marketing", + "Level": "Mid", + "Compensation": 140588 + }, + { + "Department": "Marketing", + "Level": "Mid", + "Compensation": 32419 + }, + { + "Department": "Marketing", + "Level": "Mid", + "Compensation": 115529 + }, + { + "Department": "Marketing", + "Level": "Senior", + "Compensation": 89050 + }, + { + "Department": "Marketing", + "Level": "Senior", + "Compensation": 88385 + }, + { + "Department": "Marketing", + "Level": "Senior", + "Compensation": 103486 + }, + { + "Department": "Marketing", + "Level": "Senior", + "Compensation": 157605 + }, + { + "Department": "Marketing", + "Level": "Senior", + "Compensation": 92387 + }, + { + "Department": "Marketing", + "Level": "Senior", + "Compensation": 165817 + }, + { + "Department": "Marketing", + "Level": "Senior", + "Compensation": 37133 + }, + { + "Department": "Marketing", + "Level": "Senior", + "Compensation": 75650 + }, + { + "Department": "Marketing", + "Level": "Senior", + "Compensation": 104456 + }, + { + "Department": "Marketing", + "Level": "Senior", + "Compensation": 188609 + }, + { + "Department": "Marketing", + "Level": "Senior", + "Compensation": 33119 + }, + { + "Department": "Marketing", + "Level": "Senior", + "Compensation": 148110 + }, + { + "Department": "Marketing", + "Level": "Senior", + "Compensation": 108694 + }, + { + "Department": "Marketing", + "Level": "Senior", + "Compensation": 26866 + }, + { + "Department": "Marketing", + "Level": "Senior", + "Compensation": 67551 + }, + { + "Department": "Marketing", + "Level": "Lead", + "Compensation": 128097 + }, + { + "Department": "Marketing", + "Level": "Lead", + "Compensation": 102942 + }, + { + "Department": "Marketing", + "Level": "Lead", + "Compensation": 128884 + }, + { + "Department": "Marketing", + "Level": "Lead", + "Compensation": 26396 + }, + { + "Department": "Marketing", + "Level": "Lead", + "Compensation": 42729 + }, + { + "Department": "Marketing", + "Level": "Lead", + "Compensation": 143351 + }, + { + "Department": "Marketing", + "Level": "Lead", + "Compensation": 98117 + }, + { + "Department": "Marketing", + "Level": "Lead", + "Compensation": 52877 + }, + { + "Department": "Marketing", + "Level": "Lead", + "Compensation": 83631 + }, + { + "Department": "Marketing", + "Level": "Lead", + "Compensation": 183749 + }, + { + "Department": "Marketing", + "Level": "Lead", + "Compensation": 74300 + }, + { + "Department": "Marketing", + "Level": "Lead", + "Compensation": 157221 + }, + { + "Department": "Marketing", + "Level": "Lead", + "Compensation": 121483 + }, + { + "Department": "Marketing", + "Level": "Lead", + "Compensation": 64454 + }, + { + "Department": "Marketing", + "Level": "Lead", + "Compensation": 49212 + }, + { + "Department": "HR", + "Level": "Intern", + "Compensation": 73755 + }, + { + "Department": "HR", + "Level": "Intern", + "Compensation": 102046 + }, + { + "Department": "HR", + "Level": "Intern", + "Compensation": 116327 + }, + { + "Department": "HR", + "Level": "Intern", + "Compensation": 25926 + }, + { + "Department": "HR", + "Level": "Intern", + "Compensation": 185652 + }, + { + "Department": "HR", + "Level": "Intern", + "Compensation": 26363 + }, + { + "Department": "HR", + "Level": "Intern", + "Compensation": 191048 + }, + { + "Department": "HR", + "Level": "Intern", + "Compensation": 69665 + }, + { + "Department": "HR", + "Level": "Intern", + "Compensation": 128955 + }, + { + "Department": "HR", + "Level": "Intern", + "Compensation": 180078 + }, + { + "Department": "HR", + "Level": "Intern", + "Compensation": 146066 + }, + { + "Department": "HR", + "Level": "Intern", + "Compensation": 50705 + }, + { + "Department": "HR", + "Level": "Intern", + "Compensation": 149303 + }, + { + "Department": "HR", + "Level": "Intern", + "Compensation": 33329 + }, + { + "Department": "HR", + "Level": "Intern", + "Compensation": 192836 + }, + { + "Department": "HR", + "Level": "Junior", + "Compensation": 187219 + }, + { + "Department": "HR", + "Level": "Junior", + "Compensation": 112769 + }, + { + "Department": "HR", + "Level": "Junior", + "Compensation": 88688 + }, + { + "Department": "HR", + "Level": "Junior", + "Compensation": 129799 + }, + { + "Department": "HR", + "Level": "Junior", + "Compensation": 178256 + }, + { + "Department": "HR", + "Level": "Junior", + "Compensation": 140272 + }, + { + "Department": "HR", + "Level": "Junior", + "Compensation": 144024 + }, + { + "Department": "HR", + "Level": "Junior", + "Compensation": 31280 + }, + { + "Department": "HR", + "Level": "Junior", + "Compensation": 45902 + }, + { + "Department": "HR", + "Level": "Junior", + "Compensation": 100443 + }, + { + "Department": "HR", + "Level": "Junior", + "Compensation": 119633 + }, + { + "Department": "HR", + "Level": "Junior", + "Compensation": 118738 + }, + { + "Department": "HR", + "Level": "Junior", + "Compensation": 137571 + }, + { + "Department": "HR", + "Level": "Junior", + "Compensation": 87150 + }, + { + "Department": "HR", + "Level": "Junior", + "Compensation": 180790 + }, + { + "Department": "HR", + "Level": "Mid", + "Compensation": 29217 + }, + { + "Department": "HR", + "Level": "Mid", + "Compensation": 33304 + }, + { + "Department": "HR", + "Level": "Mid", + "Compensation": 107069 + }, + { + "Department": "HR", + "Level": "Mid", + "Compensation": 190117 + }, + { + "Department": "HR", + "Level": "Mid", + "Compensation": 169024 + }, + { + "Department": "HR", + "Level": "Mid", + "Compensation": 29796 + }, + { + "Department": "HR", + "Level": "Mid", + "Compensation": 137914 + }, + { + "Department": "HR", + "Level": "Mid", + "Compensation": 75454 + }, + { + "Department": "HR", + "Level": "Mid", + "Compensation": 132500 + }, + { + "Department": "HR", + "Level": "Mid", + "Compensation": 82709 + }, + { + "Department": "HR", + "Level": "Mid", + "Compensation": 83858 + }, + { + "Department": "HR", + "Level": "Mid", + "Compensation": 144843 + }, + { + "Department": "HR", + "Level": "Mid", + "Compensation": 151982 + }, + { + "Department": "HR", + "Level": "Mid", + "Compensation": 93584 + }, + { + "Department": "HR", + "Level": "Mid", + "Compensation": 162265 + }, + { + "Department": "HR", + "Level": "Senior", + "Compensation": 189251 + }, + { + "Department": "HR", + "Level": "Senior", + "Compensation": 134744 + }, + { + "Department": "HR", + "Level": "Senior", + "Compensation": 159542 + }, + { + "Department": "HR", + "Level": "Senior", + "Compensation": 101653 + }, + { + "Department": "HR", + "Level": "Senior", + "Compensation": 154261 + }, + { + "Department": "HR", + "Level": "Senior", + "Compensation": 70782 + }, + { + "Department": "HR", + "Level": "Senior", + "Compensation": 191135 + }, + { + "Department": "HR", + "Level": "Senior", + "Compensation": 123517 + }, + { + "Department": "HR", + "Level": "Senior", + "Compensation": 132421 + }, + { + "Department": "HR", + "Level": "Senior", + "Compensation": 149897 + }, + { + "Department": "HR", + "Level": "Senior", + "Compensation": 42516 + }, + { + "Department": "HR", + "Level": "Senior", + "Compensation": 65816 + }, + { + "Department": "HR", + "Level": "Senior", + "Compensation": 196742 + }, + { + "Department": "HR", + "Level": "Senior", + "Compensation": 50013 + }, + { + "Department": "HR", + "Level": "Senior", + "Compensation": 68809 + }, + { + "Department": "HR", + "Level": "Lead", + "Compensation": 105192 + }, + { + "Department": "HR", + "Level": "Lead", + "Compensation": 144708 + }, + { + "Department": "HR", + "Level": "Lead", + "Compensation": 153922 + }, + { + "Department": "HR", + "Level": "Lead", + "Compensation": 143104 + }, + { + "Department": "HR", + "Level": "Lead", + "Compensation": 155457 + }, + { + "Department": "HR", + "Level": "Lead", + "Compensation": 47204 + }, + { + "Department": "HR", + "Level": "Lead", + "Compensation": 107783 + }, + { + "Department": "HR", + "Level": "Lead", + "Compensation": 101932 + }, + { + "Department": "HR", + "Level": "Lead", + "Compensation": 120617 + }, + { + "Department": "HR", + "Level": "Lead", + "Compensation": 41495 + }, + { + "Department": "HR", + "Level": "Lead", + "Compensation": 54945 + }, + { + "Department": "HR", + "Level": "Lead", + "Compensation": 183372 + }, + { + "Department": "HR", + "Level": "Lead", + "Compensation": 41202 + }, + { + "Department": "HR", + "Level": "Lead", + "Compensation": 29056 + }, + { + "Department": "HR", + "Level": "Lead", + "Compensation": 119763 + }, + { + "Department": "Finance", + "Level": "Intern", + "Compensation": 27701 + }, + { + "Department": "Finance", + "Level": "Intern", + "Compensation": 100698 + }, + { + "Department": "Finance", + "Level": "Intern", + "Compensation": 25178 + }, + { + "Department": "Finance", + "Level": "Intern", + "Compensation": 48605 + }, + { + "Department": "Finance", + "Level": "Intern", + "Compensation": 37437 + }, + { + "Department": "Finance", + "Level": "Intern", + "Compensation": 99323 + }, + { + "Department": "Finance", + "Level": "Intern", + "Compensation": 194257 + }, + { + "Department": "Finance", + "Level": "Intern", + "Compensation": 95259 + }, + { + "Department": "Finance", + "Level": "Intern", + "Compensation": 137771 + }, + { + "Department": "Finance", + "Level": "Intern", + "Compensation": 111591 + }, + { + "Department": "Finance", + "Level": "Intern", + "Compensation": 52117 + }, + { + "Department": "Finance", + "Level": "Intern", + "Compensation": 75000 + }, + { + "Department": "Finance", + "Level": "Intern", + "Compensation": 199619 + }, + { + "Department": "Finance", + "Level": "Intern", + "Compensation": 94110 + }, + { + "Department": "Finance", + "Level": "Intern", + "Compensation": 77021 + }, + { + "Department": "Finance", + "Level": "Junior", + "Compensation": 38739 + }, + { + "Department": "Finance", + "Level": "Junior", + "Compensation": 104236 + }, + { + "Department": "Finance", + "Level": "Junior", + "Compensation": 161688 + }, + { + "Department": "Finance", + "Level": "Junior", + "Compensation": 108927 + }, + { + "Department": "Finance", + "Level": "Junior", + "Compensation": 89288 + }, + { + "Department": "Finance", + "Level": "Junior", + "Compensation": 68265 + }, + { + "Department": "Finance", + "Level": "Junior", + "Compensation": 55456 + }, + { + "Department": "Finance", + "Level": "Junior", + "Compensation": 198449 + }, + { + "Department": "Finance", + "Level": "Junior", + "Compensation": 29423 + }, + { + "Department": "Finance", + "Level": "Junior", + "Compensation": 156988 + }, + { + "Department": "Finance", + "Level": "Junior", + "Compensation": 41338 + }, + { + "Department": "Finance", + "Level": "Junior", + "Compensation": 46418 + }, + { + "Department": "Finance", + "Level": "Junior", + "Compensation": 28601 + }, + { + "Department": "Finance", + "Level": "Junior", + "Compensation": 165025 + }, + { + "Department": "Finance", + "Level": "Junior", + "Compensation": 25098 + }, + { + "Department": "Finance", + "Level": "Mid", + "Compensation": 102658 + }, + { + "Department": "Finance", + "Level": "Mid", + "Compensation": 69783 + }, + { + "Department": "Finance", + "Level": "Mid", + "Compensation": 193433 + }, + { + "Department": "Finance", + "Level": "Mid", + "Compensation": 79169 + }, + { + "Department": "Finance", + "Level": "Mid", + "Compensation": 91837 + }, + { + "Department": "Finance", + "Level": "Mid", + "Compensation": 37743 + }, + { + "Department": "Finance", + "Level": "Mid", + "Compensation": 166672 + }, + { + "Department": "Finance", + "Level": "Mid", + "Compensation": 63569 + }, + { + "Department": "Finance", + "Level": "Mid", + "Compensation": 46310 + }, + { + "Department": "Finance", + "Level": "Mid", + "Compensation": 129147 + }, + { + "Department": "Finance", + "Level": "Mid", + "Compensation": 65831 + }, + { + "Department": "Finance", + "Level": "Mid", + "Compensation": 102018 + }, + { + "Department": "Finance", + "Level": "Mid", + "Compensation": 167376 + }, + { + "Department": "Finance", + "Level": "Mid", + "Compensation": 155955 + }, + { + "Department": "Finance", + "Level": "Mid", + "Compensation": 193539 + }, + { + "Department": "Finance", + "Level": "Senior", + "Compensation": 113478 + }, + { + "Department": "Finance", + "Level": "Senior", + "Compensation": 102812 + }, + { + "Department": "Finance", + "Level": "Senior", + "Compensation": 39993 + }, + { + "Department": "Finance", + "Level": "Senior", + "Compensation": 190502 + }, + { + "Department": "Finance", + "Level": "Senior", + "Compensation": 162809 + }, + { + "Department": "Finance", + "Level": "Senior", + "Compensation": 61479 + }, + { + "Department": "Finance", + "Level": "Senior", + "Compensation": 108007 + }, + { + "Department": "Finance", + "Level": "Senior", + "Compensation": 194206 + }, + { + "Department": "Finance", + "Level": "Senior", + "Compensation": 124801 + }, + { + "Department": "Finance", + "Level": "Senior", + "Compensation": 181438 + }, + { + "Department": "Finance", + "Level": "Senior", + "Compensation": 86571 + }, + { + "Department": "Finance", + "Level": "Senior", + "Compensation": 71045 + }, + { + "Department": "Finance", + "Level": "Senior", + "Compensation": 60198 + }, + { + "Department": "Finance", + "Level": "Senior", + "Compensation": 89389 + }, + { + "Department": "Finance", + "Level": "Senior", + "Compensation": 189763 + }, + { + "Department": "Finance", + "Level": "Lead", + "Compensation": 169025 + }, + { + "Department": "Finance", + "Level": "Lead", + "Compensation": 46765 + }, + { + "Department": "Finance", + "Level": "Lead", + "Compensation": 71704 + }, + { + "Department": "Finance", + "Level": "Lead", + "Compensation": 109463 + }, + { + "Department": "Finance", + "Level": "Lead", + "Compensation": 170385 + }, + { + "Department": "Finance", + "Level": "Lead", + "Compensation": 162037 + }, + { + "Department": "Finance", + "Level": "Lead", + "Compensation": 28796 + }, + { + "Department": "Finance", + "Level": "Lead", + "Compensation": 116099 + }, + { + "Department": "Finance", + "Level": "Lead", + "Compensation": 56603 + }, + { + "Department": "Finance", + "Level": "Lead", + "Compensation": 59139 + }, + { + "Department": "Finance", + "Level": "Lead", + "Compensation": 146565 + }, + { + "Department": "Finance", + "Level": "Lead", + "Compensation": 50517 + }, + { + "Department": "Finance", + "Level": "Lead", + "Compensation": 143394 + }, + { + "Department": "Finance", + "Level": "Lead", + "Compensation": 129735 + }, + { + "Department": "Finance", + "Level": "Lead", + "Compensation": 156581 + }, + { + "Department": "Legal", + "Level": "Intern", + "Compensation": 38096 + }, + { + "Department": "Legal", + "Level": "Intern", + "Compensation": 150529 + }, + { + "Department": "Legal", + "Level": "Intern", + "Compensation": 168335 + }, + { + "Department": "Legal", + "Level": "Intern", + "Compensation": 188762 + }, + { + "Department": "Legal", + "Level": "Intern", + "Compensation": 156308 + }, + { + "Department": "Legal", + "Level": "Intern", + "Compensation": 168881 + }, + { + "Department": "Legal", + "Level": "Intern", + "Compensation": 83420 + }, + { + "Department": "Legal", + "Level": "Intern", + "Compensation": 140564 + }, + { + "Department": "Legal", + "Level": "Intern", + "Compensation": 167277 + }, + { + "Department": "Legal", + "Level": "Intern", + "Compensation": 81116 + }, + { + "Department": "Legal", + "Level": "Intern", + "Compensation": 97091 + }, + { + "Department": "Legal", + "Level": "Intern", + "Compensation": 126302 + }, + { + "Department": "Legal", + "Level": "Intern", + "Compensation": 31488 + }, + { + "Department": "Legal", + "Level": "Intern", + "Compensation": 49276 + }, + { + "Department": "Legal", + "Level": "Intern", + "Compensation": 110910 + }, + { + "Department": "Legal", + "Level": "Junior", + "Compensation": 164255 + }, + { + "Department": "Legal", + "Level": "Junior", + "Compensation": 41039 + }, + { + "Department": "Legal", + "Level": "Junior", + "Compensation": 85297 + }, + { + "Department": "Legal", + "Level": "Junior", + "Compensation": 194706 + }, + { + "Department": "Legal", + "Level": "Junior", + "Compensation": 127243 + }, + { + "Department": "Legal", + "Level": "Junior", + "Compensation": 97227 + }, + { + "Department": "Legal", + "Level": "Junior", + "Compensation": 141365 + }, + { + "Department": "Legal", + "Level": "Junior", + "Compensation": 141236 + }, + { + "Department": "Legal", + "Level": "Junior", + "Compensation": 70866 + }, + { + "Department": "Legal", + "Level": "Junior", + "Compensation": 197436 + }, + { + "Department": "Legal", + "Level": "Junior", + "Compensation": 151401 + }, + { + "Department": "Legal", + "Level": "Junior", + "Compensation": 126533 + }, + { + "Department": "Legal", + "Level": "Junior", + "Compensation": 68409 + }, + { + "Department": "Legal", + "Level": "Junior", + "Compensation": 32127 + }, + { + "Department": "Legal", + "Level": "Junior", + "Compensation": 105557 + }, + { + "Department": "Legal", + "Level": "Mid", + "Compensation": 153571 + }, + { + "Department": "Legal", + "Level": "Mid", + "Compensation": 187769 + }, + { + "Department": "Legal", + "Level": "Mid", + "Compensation": 75698 + }, + { + "Department": "Legal", + "Level": "Mid", + "Compensation": 31666 + }, + { + "Department": "Legal", + "Level": "Mid", + "Compensation": 68432 + }, + { + "Department": "Legal", + "Level": "Mid", + "Compensation": 59249 + }, + { + "Department": "Legal", + "Level": "Mid", + "Compensation": 70282 + }, + { + "Department": "Legal", + "Level": "Mid", + "Compensation": 183296 + }, + { + "Department": "Legal", + "Level": "Mid", + "Compensation": 162424 + }, + { + "Department": "Legal", + "Level": "Mid", + "Compensation": 62758 + }, + { + "Department": "Legal", + "Level": "Mid", + "Compensation": 65441 + }, + { + "Department": "Legal", + "Level": "Mid", + "Compensation": 188837 + }, + { + "Department": "Legal", + "Level": "Mid", + "Compensation": 185411 + }, + { + "Department": "Legal", + "Level": "Mid", + "Compensation": 172841 + }, + { + "Department": "Legal", + "Level": "Mid", + "Compensation": 140282 + }, + { + "Department": "Legal", + "Level": "Senior", + "Compensation": 147293 + }, + { + "Department": "Legal", + "Level": "Senior", + "Compensation": 199018 + }, + { + "Department": "Legal", + "Level": "Senior", + "Compensation": 148931 + }, + { + "Department": "Legal", + "Level": "Senior", + "Compensation": 83148 + }, + { + "Department": "Legal", + "Level": "Senior", + "Compensation": 116767 + }, + { + "Department": "Legal", + "Level": "Senior", + "Compensation": 71085 + }, + { + "Department": "Legal", + "Level": "Senior", + "Compensation": 194840 + }, + { + "Department": "Legal", + "Level": "Senior", + "Compensation": 92671 + }, + { + "Department": "Legal", + "Level": "Senior", + "Compensation": 44322 + }, + { + "Department": "Legal", + "Level": "Senior", + "Compensation": 139001 + }, + { + "Department": "Legal", + "Level": "Senior", + "Compensation": 143625 + }, + { + "Department": "Legal", + "Level": "Senior", + "Compensation": 148192 + }, + { + "Department": "Legal", + "Level": "Senior", + "Compensation": 93771 + }, + { + "Department": "Legal", + "Level": "Senior", + "Compensation": 152557 + }, + { + "Department": "Legal", + "Level": "Senior", + "Compensation": 128919 + }, + { + "Department": "Legal", + "Level": "Lead", + "Compensation": 98918 + }, + { + "Department": "Legal", + "Level": "Lead", + "Compensation": 41125 + }, + { + "Department": "Legal", + "Level": "Lead", + "Compensation": 131786 + }, + { + "Department": "Legal", + "Level": "Lead", + "Compensation": 149402 + }, + { + "Department": "Legal", + "Level": "Lead", + "Compensation": 116344 + }, + { + "Department": "Legal", + "Level": "Lead", + "Compensation": 140369 + }, + { + "Department": "Legal", + "Level": "Lead", + "Compensation": 35825 + }, + { + "Department": "Legal", + "Level": "Lead", + "Compensation": 128555 + }, + { + "Department": "Legal", + "Level": "Lead", + "Compensation": 94742 + }, + { + "Department": "Legal", + "Level": "Lead", + "Compensation": 28683 + }, + { + "Department": "Legal", + "Level": "Lead", + "Compensation": 143439 + }, + { + "Department": "Legal", + "Level": "Lead", + "Compensation": 185824 + }, + { + "Department": "Legal", + "Level": "Lead", + "Compensation": 117776 + }, + { + "Department": "Legal", + "Level": "Lead", + "Compensation": 62612 + }, + { + "Department": "Legal", + "Level": "Lead", + "Compensation": 65143 + }, + { + "Department": "Operations", + "Level": "Intern", + "Compensation": 79011 + }, + { + "Department": "Operations", + "Level": "Intern", + "Compensation": 70465 + }, + { + "Department": "Operations", + "Level": "Intern", + "Compensation": 111711 + }, + { + "Department": "Operations", + "Level": "Intern", + "Compensation": 146590 + }, + { + "Department": "Operations", + "Level": "Intern", + "Compensation": 115683 + }, + { + "Department": "Operations", + "Level": "Intern", + "Compensation": 60019 + }, + { + "Department": "Operations", + "Level": "Intern", + "Compensation": 63042 + }, + { + "Department": "Operations", + "Level": "Intern", + "Compensation": 118062 + }, + { + "Department": "Operations", + "Level": "Intern", + "Compensation": 143377 + }, + { + "Department": "Operations", + "Level": "Intern", + "Compensation": 189434 + }, + { + "Department": "Operations", + "Level": "Intern", + "Compensation": 71444 + }, + { + "Department": "Operations", + "Level": "Intern", + "Compensation": 109341 + }, + { + "Department": "Operations", + "Level": "Intern", + "Compensation": 51713 + }, + { + "Department": "Operations", + "Level": "Intern", + "Compensation": 119667 + }, + { + "Department": "Operations", + "Level": "Intern", + "Compensation": 162300 + }, + { + "Department": "Operations", + "Level": "Junior", + "Compensation": 71824 + }, + { + "Department": "Operations", + "Level": "Junior", + "Compensation": 27541 + }, + { + "Department": "Operations", + "Level": "Junior", + "Compensation": 29592 + }, + { + "Department": "Operations", + "Level": "Junior", + "Compensation": 29118 + }, + { + "Department": "Operations", + "Level": "Junior", + "Compensation": 108943 + }, + { + "Department": "Operations", + "Level": "Junior", + "Compensation": 176423 + }, + { + "Department": "Operations", + "Level": "Junior", + "Compensation": 140345 + }, + { + "Department": "Operations", + "Level": "Junior", + "Compensation": 155106 + }, + { + "Department": "Operations", + "Level": "Junior", + "Compensation": 97771 + }, + { + "Department": "Operations", + "Level": "Junior", + "Compensation": 190400 + }, + { + "Department": "Operations", + "Level": "Junior", + "Compensation": 26709 + }, + { + "Department": "Operations", + "Level": "Junior", + "Compensation": 43129 + }, + { + "Department": "Operations", + "Level": "Junior", + "Compensation": 38501 + }, + { + "Department": "Operations", + "Level": "Junior", + "Compensation": 129576 + }, + { + "Department": "Operations", + "Level": "Junior", + "Compensation": 108576 + }, + { + "Department": "Operations", + "Level": "Mid", + "Compensation": 132394 + }, + { + "Department": "Operations", + "Level": "Mid", + "Compensation": 42755 + }, + { + "Department": "Operations", + "Level": "Mid", + "Compensation": 61119 + }, + { + "Department": "Operations", + "Level": "Mid", + "Compensation": 168924 + }, + { + "Department": "Operations", + "Level": "Mid", + "Compensation": 111144 + }, + { + "Department": "Operations", + "Level": "Mid", + "Compensation": 75931 + }, + { + "Department": "Operations", + "Level": "Mid", + "Compensation": 89204 + }, + { + "Department": "Operations", + "Level": "Mid", + "Compensation": 57989 + }, + { + "Department": "Operations", + "Level": "Mid", + "Compensation": 76106 + }, + { + "Department": "Operations", + "Level": "Mid", + "Compensation": 70174 + }, + { + "Department": "Operations", + "Level": "Mid", + "Compensation": 110441 + }, + { + "Department": "Operations", + "Level": "Mid", + "Compensation": 151535 + }, + { + "Department": "Operations", + "Level": "Mid", + "Compensation": 103174 + }, + { + "Department": "Operations", + "Level": "Mid", + "Compensation": 172982 + }, + { + "Department": "Operations", + "Level": "Mid", + "Compensation": 54399 + }, + { + "Department": "Operations", + "Level": "Senior", + "Compensation": 102457 + }, + { + "Department": "Operations", + "Level": "Senior", + "Compensation": 189837 + }, + { + "Department": "Operations", + "Level": "Senior", + "Compensation": 192404 + }, + { + "Department": "Operations", + "Level": "Senior", + "Compensation": 103852 + }, + { + "Department": "Operations", + "Level": "Senior", + "Compensation": 185504 + }, + { + "Department": "Operations", + "Level": "Senior", + "Compensation": 168884 + }, + { + "Department": "Operations", + "Level": "Senior", + "Compensation": 126126 + }, + { + "Department": "Operations", + "Level": "Senior", + "Compensation": 49525 + }, + { + "Department": "Operations", + "Level": "Senior", + "Compensation": 84949 + }, + { + "Department": "Operations", + "Level": "Senior", + "Compensation": 110825 + }, + { + "Department": "Operations", + "Level": "Senior", + "Compensation": 134756 + }, + { + "Department": "Operations", + "Level": "Senior", + "Compensation": 190420 + }, + { + "Department": "Operations", + "Level": "Senior", + "Compensation": 188670 + }, + { + "Department": "Operations", + "Level": "Senior", + "Compensation": 168405 + }, + { + "Department": "Operations", + "Level": "Senior", + "Compensation": 135625 + }, + { + "Department": "Operations", + "Level": "Lead", + "Compensation": 104613 + }, + { + "Department": "Operations", + "Level": "Lead", + "Compensation": 37237 + }, + { + "Department": "Operations", + "Level": "Lead", + "Compensation": 71630 + }, + { + "Department": "Operations", + "Level": "Lead", + "Compensation": 77536 + }, + { + "Department": "Operations", + "Level": "Lead", + "Compensation": 126014 + }, + { + "Department": "Operations", + "Level": "Lead", + "Compensation": 94994 + }, + { + "Department": "Operations", + "Level": "Lead", + "Compensation": 68167 + }, + { + "Department": "Operations", + "Level": "Lead", + "Compensation": 160301 + }, + { + "Department": "Operations", + "Level": "Lead", + "Compensation": 77366 + }, + { + "Department": "Operations", + "Level": "Lead", + "Compensation": 72032 + }, + { + "Department": "Operations", + "Level": "Lead", + "Compensation": 187768 + }, + { + "Department": "Operations", + "Level": "Lead", + "Compensation": 61813 + }, + { + "Department": "Operations", + "Level": "Lead", + "Compensation": 113900 + }, + { + "Department": "Operations", + "Level": "Lead", + "Compensation": 186249 + }, + { + "Department": "Operations", + "Level": "Lead", + "Compensation": 95117 + }, + { + "Department": "Support", + "Level": "Intern", + "Compensation": 36288 + }, + { + "Department": "Support", + "Level": "Intern", + "Compensation": 41856 + }, + { + "Department": "Support", + "Level": "Intern", + "Compensation": 173218 + }, + { + "Department": "Support", + "Level": "Intern", + "Compensation": 179920 + }, + { + "Department": "Support", + "Level": "Intern", + "Compensation": 116722 + }, + { + "Department": "Support", + "Level": "Intern", + "Compensation": 28436 + }, + { + "Department": "Support", + "Level": "Intern", + "Compensation": 195200 + }, + { + "Department": "Support", + "Level": "Intern", + "Compensation": 25285 + }, + { + "Department": "Support", + "Level": "Intern", + "Compensation": 83113 + }, + { + "Department": "Support", + "Level": "Intern", + "Compensation": 61183 + }, + { + "Department": "Support", + "Level": "Intern", + "Compensation": 25058 + }, + { + "Department": "Support", + "Level": "Intern", + "Compensation": 131333 + }, + { + "Department": "Support", + "Level": "Intern", + "Compensation": 63468 + }, + { + "Department": "Support", + "Level": "Intern", + "Compensation": 109030 + }, + { + "Department": "Support", + "Level": "Intern", + "Compensation": 59208 + }, + { + "Department": "Support", + "Level": "Junior", + "Compensation": 81684 + }, + { + "Department": "Support", + "Level": "Junior", + "Compensation": 184929 + }, + { + "Department": "Support", + "Level": "Junior", + "Compensation": 131514 + }, + { + "Department": "Support", + "Level": "Junior", + "Compensation": 131090 + }, + { + "Department": "Support", + "Level": "Junior", + "Compensation": 184717 + }, + { + "Department": "Support", + "Level": "Junior", + "Compensation": 71204 + }, + { + "Department": "Support", + "Level": "Junior", + "Compensation": 93080 + }, + { + "Department": "Support", + "Level": "Junior", + "Compensation": 93046 + }, + { + "Department": "Support", + "Level": "Junior", + "Compensation": 53592 + }, + { + "Department": "Support", + "Level": "Junior", + "Compensation": 28659 + }, + { + "Department": "Support", + "Level": "Junior", + "Compensation": 98832 + }, + { + "Department": "Support", + "Level": "Junior", + "Compensation": 161084 + }, + { + "Department": "Support", + "Level": "Junior", + "Compensation": 120749 + }, + { + "Department": "Support", + "Level": "Junior", + "Compensation": 160365 + }, + { + "Department": "Support", + "Level": "Junior", + "Compensation": 106202 + }, + { + "Department": "Support", + "Level": "Mid", + "Compensation": 141149 + }, + { + "Department": "Support", + "Level": "Mid", + "Compensation": 191802 + }, + { + "Department": "Support", + "Level": "Mid", + "Compensation": 149027 + }, + { + "Department": "Support", + "Level": "Mid", + "Compensation": 118019 + }, + { + "Department": "Support", + "Level": "Mid", + "Compensation": 119462 + }, + { + "Department": "Support", + "Level": "Mid", + "Compensation": 45221 + }, + { + "Department": "Support", + "Level": "Mid", + "Compensation": 33737 + }, + { + "Department": "Support", + "Level": "Mid", + "Compensation": 46021 + }, + { + "Department": "Support", + "Level": "Mid", + "Compensation": 182193 + }, + { + "Department": "Support", + "Level": "Mid", + "Compensation": 162757 + }, + { + "Department": "Support", + "Level": "Mid", + "Compensation": 53786 + }, + { + "Department": "Support", + "Level": "Mid", + "Compensation": 131051 + }, + { + "Department": "Support", + "Level": "Mid", + "Compensation": 56855 + }, + { + "Department": "Support", + "Level": "Mid", + "Compensation": 87531 + }, + { + "Department": "Support", + "Level": "Mid", + "Compensation": 106631 + }, + { + "Department": "Support", + "Level": "Senior", + "Compensation": 178746 + }, + { + "Department": "Support", + "Level": "Senior", + "Compensation": 166352 + }, + { + "Department": "Support", + "Level": "Senior", + "Compensation": 100566 + }, + { + "Department": "Support", + "Level": "Senior", + "Compensation": 91923 + }, + { + "Department": "Support", + "Level": "Senior", + "Compensation": 70473 + }, + { + "Department": "Support", + "Level": "Senior", + "Compensation": 69378 + }, + { + "Department": "Support", + "Level": "Senior", + "Compensation": 42964 + }, + { + "Department": "Support", + "Level": "Senior", + "Compensation": 64852 + }, + { + "Department": "Support", + "Level": "Senior", + "Compensation": 85399 + }, + { + "Department": "Support", + "Level": "Senior", + "Compensation": 150271 + }, + { + "Department": "Support", + "Level": "Senior", + "Compensation": 27339 + }, + { + "Department": "Support", + "Level": "Senior", + "Compensation": 139308 + }, + { + "Department": "Support", + "Level": "Senior", + "Compensation": 54824 + }, + { + "Department": "Support", + "Level": "Senior", + "Compensation": 79555 + }, + { + "Department": "Support", + "Level": "Senior", + "Compensation": 114130 + }, + { + "Department": "Support", + "Level": "Lead", + "Compensation": 39242 + }, + { + "Department": "Support", + "Level": "Lead", + "Compensation": 166371 + }, + { + "Department": "Support", + "Level": "Lead", + "Compensation": 67494 + }, + { + "Department": "Support", + "Level": "Lead", + "Compensation": 41634 + }, + { + "Department": "Support", + "Level": "Lead", + "Compensation": 125765 + }, + { + "Department": "Support", + "Level": "Lead", + "Compensation": 101207 + }, + { + "Department": "Support", + "Level": "Lead", + "Compensation": 184008 + }, + { + "Department": "Support", + "Level": "Lead", + "Compensation": 53784 + }, + { + "Department": "Support", + "Level": "Lead", + "Compensation": 98900 + }, + { + "Department": "Support", + "Level": "Lead", + "Compensation": 83179 + }, + { + "Department": "Support", + "Level": "Lead", + "Compensation": 116417 + }, + { + "Department": "Support", + "Level": "Lead", + "Compensation": 139558 + }, + { + "Department": "Support", + "Level": "Lead", + "Compensation": 54339 + }, + { + "Department": "Support", + "Level": "Lead", + "Compensation": 154645 + }, + { + "Department": "Support", + "Level": "Lead", + "Compensation": 35402 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/boxplot/06-card6.flint.json b/test-harness/excel/evaluations/inputs/boxplot/06-card6.flint.json new file mode 100644 index 00000000..45bfc67d --- /dev/null +++ b/test-harness/excel/evaluations/inputs/boxplot/06-card6.flint.json @@ -0,0 +1,742 @@ +{ + "semantic_types": { + "Rating": "Category", + "ROI": "Quantity" + }, + "chart_spec": { + "chartType": "Boxplot", + "encodings": { + "x": "Rating", + "y": "ROI", + "color": "Rating" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Rating": "G", + "ROI": 10 + }, + { + "Rating": "G", + "ROI": 233 + }, + { + "Rating": "G", + "ROI": 101 + }, + { + "Rating": "G", + "ROI": 117 + }, + { + "Rating": "G", + "ROI": 279 + }, + { + "Rating": "G", + "ROI": 130 + }, + { + "Rating": "G", + "ROI": 41 + }, + { + "Rating": "G", + "ROI": 0 + }, + { + "Rating": "G", + "ROI": 282 + }, + { + "Rating": "G", + "ROI": 282 + }, + { + "Rating": "G", + "ROI": 179 + }, + { + "Rating": "G", + "ROI": 248 + }, + { + "Rating": "G", + "ROI": 288 + }, + { + "Rating": "G", + "ROI": 97 + }, + { + "Rating": "G", + "ROI": 76 + }, + { + "Rating": "G", + "ROI": 261 + }, + { + "Rating": "G", + "ROI": 174 + }, + { + "Rating": "G", + "ROI": 200 + }, + { + "Rating": "G", + "ROI": 77 + }, + { + "Rating": "G", + "ROI": 87 + }, + { + "Rating": "G", + "ROI": 202 + }, + { + "Rating": "G", + "ROI": 224 + }, + { + "Rating": "G", + "ROI": 22 + }, + { + "Rating": "G", + "ROI": 262 + }, + { + "Rating": "G", + "ROI": 171 + }, + { + "Rating": "G", + "ROI": 197 + }, + { + "Rating": "G", + "ROI": 249 + }, + { + "Rating": "G", + "ROI": 153 + }, + { + "Rating": "G", + "ROI": 143 + }, + { + "Rating": "G", + "ROI": 44 + }, + { + "Rating": "PG", + "ROI": 197 + }, + { + "Rating": "PG", + "ROI": 98 + }, + { + "Rating": "PG", + "ROI": 33 + }, + { + "Rating": "PG", + "ROI": 269 + }, + { + "Rating": "PG", + "ROI": 190 + }, + { + "Rating": "PG", + "ROI": 146 + }, + { + "Rating": "PG", + "ROI": 273 + }, + { + "Rating": "PG", + "ROI": 59 + }, + { + "Rating": "PG", + "ROI": 158 + }, + { + "Rating": "PG", + "ROI": 100 + }, + { + "Rating": "PG", + "ROI": 247 + }, + { + "Rating": "PG", + "ROI": 116 + }, + { + "Rating": "PG", + "ROI": 33 + }, + { + "Rating": "PG", + "ROI": 34 + }, + { + "Rating": "PG", + "ROI": 274 + }, + { + "Rating": "PG", + "ROI": 150 + }, + { + "Rating": "PG", + "ROI": 255 + }, + { + "Rating": "PG", + "ROI": 279 + }, + { + "Rating": "PG", + "ROI": 297 + }, + { + "Rating": "PG", + "ROI": 23 + }, + { + "Rating": "PG", + "ROI": 118 + }, + { + "Rating": "PG", + "ROI": 273 + }, + { + "Rating": "PG", + "ROI": 273 + }, + { + "Rating": "PG", + "ROI": 30 + }, + { + "Rating": "PG", + "ROI": 251 + }, + { + "Rating": "PG", + "ROI": 157 + }, + { + "Rating": "PG", + "ROI": 255 + }, + { + "Rating": "PG", + "ROI": 69 + }, + { + "Rating": "PG", + "ROI": 67 + }, + { + "Rating": "PG", + "ROI": 110 + }, + { + "Rating": "PG-13", + "ROI": 283 + }, + { + "Rating": "PG-13", + "ROI": 260 + }, + { + "Rating": "PG-13", + "ROI": 69 + }, + { + "Rating": "PG-13", + "ROI": 243 + }, + { + "Rating": "PG-13", + "ROI": 138 + }, + { + "Rating": "PG-13", + "ROI": 9 + }, + { + "Rating": "PG-13", + "ROI": 141 + }, + { + "Rating": "PG-13", + "ROI": 1 + }, + { + "Rating": "PG-13", + "ROI": 156 + }, + { + "Rating": "PG-13", + "ROI": 182 + }, + { + "Rating": "PG-13", + "ROI": 118 + }, + { + "Rating": "PG-13", + "ROI": 110 + }, + { + "Rating": "PG-13", + "ROI": 285 + }, + { + "Rating": "PG-13", + "ROI": 252 + }, + { + "Rating": "PG-13", + "ROI": 293 + }, + { + "Rating": "PG-13", + "ROI": 149 + }, + { + "Rating": "PG-13", + "ROI": 177 + }, + { + "Rating": "PG-13", + "ROI": 87 + }, + { + "Rating": "PG-13", + "ROI": 113 + }, + { + "Rating": "PG-13", + "ROI": 12 + }, + { + "Rating": "PG-13", + "ROI": 16 + }, + { + "Rating": "PG-13", + "ROI": 169 + }, + { + "Rating": "PG-13", + "ROI": 88 + }, + { + "Rating": "PG-13", + "ROI": 180 + }, + { + "Rating": "PG-13", + "ROI": 98 + }, + { + "Rating": "PG-13", + "ROI": 42 + }, + { + "Rating": "PG-13", + "ROI": 80 + }, + { + "Rating": "PG-13", + "ROI": 165 + }, + { + "Rating": "PG-13", + "ROI": 135 + }, + { + "Rating": "PG-13", + "ROI": 190 + }, + { + "Rating": "R", + "ROI": 105 + }, + { + "Rating": "R", + "ROI": 72 + }, + { + "Rating": "R", + "ROI": 193 + }, + { + "Rating": "R", + "ROI": 78 + }, + { + "Rating": "R", + "ROI": 193 + }, + { + "Rating": "R", + "ROI": 63 + }, + { + "Rating": "R", + "ROI": 109 + }, + { + "Rating": "R", + "ROI": 245 + }, + { + "Rating": "R", + "ROI": 231 + }, + { + "Rating": "R", + "ROI": 142 + }, + { + "Rating": "R", + "ROI": 271 + }, + { + "Rating": "R", + "ROI": 230 + }, + { + "Rating": "R", + "ROI": 203 + }, + { + "Rating": "R", + "ROI": 149 + }, + { + "Rating": "R", + "ROI": 36 + }, + { + "Rating": "R", + "ROI": 156 + }, + { + "Rating": "R", + "ROI": 293 + }, + { + "Rating": "R", + "ROI": 214 + }, + { + "Rating": "R", + "ROI": 205 + }, + { + "Rating": "R", + "ROI": 225 + }, + { + "Rating": "R", + "ROI": 77 + }, + { + "Rating": "R", + "ROI": 153 + }, + { + "Rating": "R", + "ROI": 108 + }, + { + "Rating": "R", + "ROI": 80 + }, + { + "Rating": "R", + "ROI": 178 + }, + { + "Rating": "R", + "ROI": 10 + }, + { + "Rating": "R", + "ROI": 29 + }, + { + "Rating": "R", + "ROI": 128 + }, + { + "Rating": "R", + "ROI": 67 + }, + { + "Rating": "R", + "ROI": 151 + }, + { + "Rating": "NC-17", + "ROI": 106 + }, + { + "Rating": "NC-17", + "ROI": 34 + }, + { + "Rating": "NC-17", + "ROI": 291 + }, + { + "Rating": "NC-17", + "ROI": 77 + }, + { + "Rating": "NC-17", + "ROI": 222 + }, + { + "Rating": "NC-17", + "ROI": 197 + }, + { + "Rating": "NC-17", + "ROI": 262 + }, + { + "Rating": "NC-17", + "ROI": 271 + }, + { + "Rating": "NC-17", + "ROI": 274 + }, + { + "Rating": "NC-17", + "ROI": 77 + }, + { + "Rating": "NC-17", + "ROI": 47 + }, + { + "Rating": "NC-17", + "ROI": 274 + }, + { + "Rating": "NC-17", + "ROI": 190 + }, + { + "Rating": "NC-17", + "ROI": 53 + }, + { + "Rating": "NC-17", + "ROI": 148 + }, + { + "Rating": "NC-17", + "ROI": 46 + }, + { + "Rating": "NC-17", + "ROI": 267 + }, + { + "Rating": "NC-17", + "ROI": 51 + }, + { + "Rating": "NC-17", + "ROI": 214 + }, + { + "Rating": "NC-17", + "ROI": 42 + }, + { + "Rating": "NC-17", + "ROI": 81 + }, + { + "Rating": "NC-17", + "ROI": 278 + }, + { + "Rating": "NC-17", + "ROI": 47 + }, + { + "Rating": "NC-17", + "ROI": 294 + }, + { + "Rating": "NC-17", + "ROI": 216 + }, + { + "Rating": "NC-17", + "ROI": 195 + }, + { + "Rating": "NC-17", + "ROI": 61 + }, + { + "Rating": "NC-17", + "ROI": 290 + }, + { + "Rating": "NC-17", + "ROI": 6 + }, + { + "Rating": "NC-17", + "ROI": 121 + }, + { + "Rating": "Unrated", + "ROI": 23 + }, + { + "Rating": "Unrated", + "ROI": 264 + }, + { + "Rating": "Unrated", + "ROI": 155 + }, + { + "Rating": "Unrated", + "ROI": 236 + }, + { + "Rating": "Unrated", + "ROI": 200 + }, + { + "Rating": "Unrated", + "ROI": 229 + }, + { + "Rating": "Unrated", + "ROI": 286 + }, + { + "Rating": "Unrated", + "ROI": 15 + }, + { + "Rating": "Unrated", + "ROI": 39 + }, + { + "Rating": "Unrated", + "ROI": 182 + }, + { + "Rating": "Unrated", + "ROI": 70 + }, + { + "Rating": "Unrated", + "ROI": 72 + }, + { + "Rating": "Unrated", + "ROI": 16 + }, + { + "Rating": "Unrated", + "ROI": 72 + }, + { + "Rating": "Unrated", + "ROI": 172 + }, + { + "Rating": "Unrated", + "ROI": 281 + }, + { + "Rating": "Unrated", + "ROI": 159 + }, + { + "Rating": "Unrated", + "ROI": 16 + }, + { + "Rating": "Unrated", + "ROI": 178 + }, + { + "Rating": "Unrated", + "ROI": 190 + }, + { + "Rating": "Unrated", + "ROI": 87 + }, + { + "Rating": "Unrated", + "ROI": 60 + }, + { + "Rating": "Unrated", + "ROI": 94 + }, + { + "Rating": "Unrated", + "ROI": 37 + }, + { + "Rating": "Unrated", + "ROI": 66 + }, + { + "Rating": "Unrated", + "ROI": 14 + }, + { + "Rating": "Unrated", + "ROI": 104 + }, + { + "Rating": "Unrated", + "ROI": 205 + }, + { + "Rating": "Unrated", + "ROI": 277 + }, + { + "Rating": "Unrated", + "ROI": 26 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/boxplot/07-card6.flint.json b/test-harness/excel/evaluations/inputs/boxplot/07-card6.flint.json new file mode 100644 index 00000000..cc7a72cd --- /dev/null +++ b/test-harness/excel/evaluations/inputs/boxplot/07-card6.flint.json @@ -0,0 +1,1103 @@ +{ + "semantic_types": { + "Department": "Department", + "Comp": "Amount", + "Level": "Category" + }, + "chart_spec": { + "chartType": "Boxplot", + "encodings": { + "x": "Department", + "y": "Comp", + "color": "Level" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Department": "Eng", + "Level": "L1", + "Comp": 131479 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 146102 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 39597 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 38452 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 118412 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 136322 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 71967 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 126731 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 34753 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 114284 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 113931 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 65479 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 49790 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 114370 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 120351 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 72381 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 119339 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 118045 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 90148 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 59101 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 122341 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 43128 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 117206 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 140706 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 66549 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 31972 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 61058 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 135529 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 61645 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 50435 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 48021 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 144729 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 113021 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 122310 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 117210 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 94611 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 63144 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 43254 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 72599 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 77863 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 102000 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 54628 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 74697 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 47861 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 95425 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 67767 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 106788 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 133613 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 128967 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 43612 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 92713 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 88343 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 76280 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 143955 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 68619 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 144617 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 37619 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 37765 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 95826 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 81406 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 138491 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 31754 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 115631 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 66909 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 87111 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 139970 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 55196 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 138734 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 46920 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 128444 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 144752 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 32709 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 72966 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 117427 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 143312 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 64988 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 68766 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 91041 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 64480 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 54696 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 142620 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 80353 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 69556 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 43833 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 83326 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 118275 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 103478 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 58476 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 65055 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 124611 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 38634 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 57805 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 66841 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 128825 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 60923 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 39170 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 73202 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 123939 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 144303 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 39405 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 66651 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 57839 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 32989 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 113528 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 122308 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 85949 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 50593 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 53694 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 87859 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 109768 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 44806 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 110749 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 91712 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 67477 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 145333 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 65407 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 32564 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 45287 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 41540 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 66089 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 91536 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 107305 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 59324 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 31478 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 34669 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 136042 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 34637 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 76435 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 96665 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 34492 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 39252 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 121288 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 110165 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 121080 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 87294 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 94412 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 77096 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 53954 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 30278 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 140327 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 55910 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 143868 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 47176 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 112516 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 37868 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 30950 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 44728 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 131874 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 66762 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 130806 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 124020 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 71433 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 36975 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 138681 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 117027 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 137905 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 144731 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 36302 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 112586 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 125763 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 81570 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 132520 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 131346 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 78736 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 135520 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 146984 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 93281 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 37886 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 84282 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 99982 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 98453 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 80323 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 41622 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 119291 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 136122 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 57945 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 139285 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 57216 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 134409 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 67250 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 44520 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 109757 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 99291 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 120065 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 64052 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 58134 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 75980 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 131888 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 54509 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 104657 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 68224 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 95234 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 99652 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 64728 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 149714 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 139702 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 108625 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 47411 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 97020 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 119860 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 113426 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 96788 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 58511 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 50798 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 142059 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 123279 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 82708 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 58976 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 76040 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 63499 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 128083 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 70667 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 116596 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 83487 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 63407 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 141277 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/boxplot/08-card6.flint.json b/test-harness/excel/evaluations/inputs/boxplot/08-card6.flint.json new file mode 100644 index 00000000..b75d2cdd --- /dev/null +++ b/test-harness/excel/evaluations/inputs/boxplot/08-card6.flint.json @@ -0,0 +1,1106 @@ +{ + "semantic_types": { + "Department": "Department", + "Comp": "Amount", + "Level": "Category" + }, + "chart_spec": { + "chartType": "Boxplot", + "encodings": { + "x": "Department", + "y": "Comp", + "color": "Level" + }, + "baseSize": { + "width": 560, + "height": 360 + }, + "chartProperties": { + "dodge": "global" + } + }, + "data": { + "values": [ + { + "Department": "Eng", + "Level": "L1", + "Comp": 120487 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 112029 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 158503 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 141556 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 153856 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 158557 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 152852 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 109993 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 135346 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 91879 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 176231 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 100024 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 169826 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 97560 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 156875 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 142222 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 106496 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 138900 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 100661 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 75734 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 79450 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 72710 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 99808 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 50171 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 98185 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 47139 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 87223 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 30262 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 112142 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 77624 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 74521 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 32730 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 106851 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 81895 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 39202 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 75728 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 70244 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 56807 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 34972 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 80723 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 49943 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 58958 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 95783 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 89363 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 99210 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 81985 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 112042 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 108322 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 48150 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 60316 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 66467 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 114938 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 97901 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 35599 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 103027 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 72210 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 67004 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 62336 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 89425 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 62313 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 52708 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 76301 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 72042 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 131565 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 99382 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 94496 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 52961 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 106673 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 52872 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 46594 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 104749 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 117830 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 92761 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 51350 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 118361 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 116817 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 79909 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 46605 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 102748 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 50937 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 114626 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 67693 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 113387 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 124123 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 116785 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 92349 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 66589 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 102082 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 104950 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 77980 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 137188 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 98190 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 133809 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 97212 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 64048 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 60395 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 124632 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 126067 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 118574 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 89035 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 74637 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 93108 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 118414 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 108701 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 123527 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 89290 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 129146 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 122260 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 130929 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 116113 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 134953 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 65496 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 85065 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 128000 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 122783 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 96327 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 140155 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 107904 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 131496 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 98803 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 75757 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 108766 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 122912 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 104072 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 72785 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 100247 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 161989 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 144786 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 96413 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 142276 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 118856 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 149049 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 92878 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 133435 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 105764 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 75657 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 135412 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 134032 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 151229 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 100279 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 143339 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 153180 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 141307 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 109693 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 139705 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 103090 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 130059 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 78684 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 160114 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 120917 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 137377 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 130994 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 123066 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 83487 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 160590 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 121263 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 111660 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 79516 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 98755 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 82145 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 109337 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 92207 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 120819 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 115511 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 92090 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 116032 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 114053 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 154858 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 170395 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 112457 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 148562 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 100294 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 124299 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 95345 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 102454 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 150011 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 154310 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 139126 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 94665 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 105569 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 124509 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 122563 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 175066 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 152618 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 148842 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 125536 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 107905 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 143232 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 164185 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 149054 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 95090 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 135989 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 107457 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 91361 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 112565 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 176672 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 144600 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 114963 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 114262 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 72798 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 63731 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 134481 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 47142 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 128092 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 129934 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 129356 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 51320 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 57371 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 61506 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 88602 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 85052 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 91637 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 67357 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 51175 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 56505 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 86855 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/boxplot/09-card6.flint.json b/test-harness/excel/evaluations/inputs/boxplot/09-card6.flint.json new file mode 100644 index 00000000..29b4d9a9 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/boxplot/09-card6.flint.json @@ -0,0 +1,1106 @@ +{ + "semantic_types": { + "Department": "Department", + "Comp": "Amount", + "Level": "Category" + }, + "chart_spec": { + "chartType": "Boxplot", + "encodings": { + "x": "Department", + "y": "Comp", + "color": "Level" + }, + "baseSize": { + "width": 560, + "height": 360 + }, + "chartProperties": { + "dodge": "local" + } + }, + "data": { + "values": [ + { + "Department": "Eng", + "Level": "L1", + "Comp": 106111 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 151334 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 165719 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 99511 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 104253 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 153821 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 111815 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 166713 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 156992 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 126234 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 130040 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 105738 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 179380 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 113100 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 167151 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 134589 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 155988 + }, + { + "Department": "Eng", + "Level": "L1", + "Comp": 167830 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 51689 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 52646 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 31766 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 103628 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 93789 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 47480 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 63341 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 51654 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 101208 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 88786 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 34355 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 51871 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 61997 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 61489 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 63147 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 31101 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 77552 + }, + { + "Department": "Eng", + "Level": "L2", + "Comp": 33444 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 44995 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 51806 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 49493 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 44652 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 38083 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 69552 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 32461 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 79728 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 75763 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 31946 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 68965 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 75514 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 73115 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 79003 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 31404 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 42364 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 106969 + }, + { + "Department": "Sales", + "Level": "L2", + "Comp": 84095 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 128935 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 79223 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 127697 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 59578 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 74443 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 78349 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 119148 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 112878 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 121883 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 91028 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 92014 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 97197 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 83582 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 46949 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 134625 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 131986 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 56254 + }, + { + "Department": "Sales", + "Level": "L3", + "Comp": 97134 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 108076 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 55798 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 80829 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 126830 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 70984 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 77644 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 58974 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 101366 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 46509 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 122929 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 125243 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 121636 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 68423 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 61234 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 93853 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 45663 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 121945 + }, + { + "Department": "HR", + "Level": "L3", + "Comp": 52981 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 93655 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 133807 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 72613 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 91573 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 149975 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 85162 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 141346 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 144524 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 94513 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 75311 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 86953 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 93214 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 104827 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 71511 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 107040 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 96583 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 118599 + }, + { + "Department": "HR", + "Level": "L4", + "Comp": 66142 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 66619 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 149015 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 63266 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 145234 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 140359 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 108074 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 111510 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 83122 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 136135 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 137463 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 126713 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 92684 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 113667 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 61790 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 91979 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 140992 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 132117 + }, + { + "Department": "Ops", + "Level": "L4", + "Comp": 92700 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 127897 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 103264 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 84973 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 107750 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 149173 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 117862 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 102924 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 141436 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 123431 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 95288 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 135545 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 114411 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 138146 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 86904 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 76665 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 159710 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 82951 + }, + { + "Department": "Ops", + "Level": "L5", + "Comp": 155326 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 121401 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 78617 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 113705 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 76327 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 152726 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 150833 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 106286 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 115145 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 155492 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 119816 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 79481 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 148794 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 124293 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 85456 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 121329 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 139497 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 112826 + }, + { + "Department": "Legal", + "Level": "L5", + "Comp": 147313 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 98062 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 146429 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 158538 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 91865 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 121717 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 94656 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 126593 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 141095 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 157662 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 137494 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 107623 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 90303 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 136715 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 161107 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 157614 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 135635 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 90385 + }, + { + "Department": "Legal", + "Level": "L1", + "Comp": 163819 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 116487 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 120399 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 164792 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 177884 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 170041 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 102729 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 101864 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 144923 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 140347 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 178244 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 102950 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 123103 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 157355 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 105522 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 148084 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 168144 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 172315 + }, + { + "Department": "Finance", + "Level": "L1", + "Comp": 168176 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 125430 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 123468 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 81218 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 99234 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 122348 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 73752 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 63500 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 121064 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 92309 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 102062 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 128095 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 92148 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 108179 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 75343 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 82177 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 106735 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 108899 + }, + { + "Department": "Finance", + "Level": "L3", + "Comp": 118384 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/candlestick-chart/00-card30.flint.json b/test-harness/excel/evaluations/inputs/candlestick-chart/00-card30.flint.json new file mode 100644 index 00000000..ee1590f0 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/candlestick-chart/00-card30.flint.json @@ -0,0 +1,237 @@ +{ + "semantic_types": { + "Date": "Date", + "Open": "Quantity", + "High": "Quantity", + "Low": "Quantity", + "Close": "Quantity" + }, + "chart_spec": { + "chartType": "Candlestick Chart", + "encodings": { + "x": "Date", + "open": "Open", + "high": "High", + "low": "Low", + "close": "Close" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2024-01-02", + "Open": 150, + "High": 151.92, + "Low": 146.46, + "Close": 148.11 + }, + { + "Date": "2024-01-03", + "Open": 148.11, + "High": 149.32, + "Low": 148.09, + "Close": 149.06 + }, + { + "Date": "2024-01-04", + "Open": 149.06, + "High": 151.75, + "Low": 148.4, + "Close": 149.91 + }, + { + "Date": "2024-01-05", + "Open": 149.91, + "High": 152.47, + "Low": 149.02, + "Close": 151.82 + }, + { + "Date": "2024-01-06", + "Open": 151.82, + "High": 153.51, + "Low": 149.99, + "Close": 151.57 + }, + { + "Date": "2024-01-07", + "Open": 151.57, + "High": 152.75, + "Low": 149.88, + "Close": 150.51 + }, + { + "Date": "2024-01-08", + "Open": 150.51, + "High": 151.51, + "Low": 148.35, + "Close": 149.57 + }, + { + "Date": "2024-01-09", + "Open": 149.57, + "High": 150.63, + "Low": 147.56, + "Close": 149.39 + }, + { + "Date": "2024-01-10", + "Open": 149.39, + "High": 152.06, + "Low": 148.66, + "Close": 150.9 + }, + { + "Date": "2024-01-11", + "Open": 150.9, + "High": 151.3, + "Low": 149.61, + "Close": 149.87 + }, + { + "Date": "2024-01-12", + "Open": 149.87, + "High": 151.35, + "Low": 149.21, + "Close": 151.17 + }, + { + "Date": "2024-01-13", + "Open": 151.17, + "High": 151.73, + "Low": 147.97, + "Close": 149.62 + }, + { + "Date": "2024-01-14", + "Open": 149.62, + "High": 150.8, + "Low": 146.76, + "Close": 147.73 + }, + { + "Date": "2024-01-15", + "Open": 147.73, + "High": 149.1, + "Low": 145.25, + "Close": 146.1 + }, + { + "Date": "2024-01-16", + "Open": 146.1, + "High": 147.67, + "Low": 144.21, + "Close": 146.29 + }, + { + "Date": "2024-01-17", + "Open": 146.29, + "High": 146.4, + "Low": 143.64, + "Close": 144.58 + }, + { + "Date": "2024-01-18", + "Open": 144.58, + "High": 145.76, + "Low": 142.62, + "Close": 142.96 + }, + { + "Date": "2024-01-19", + "Open": 142.96, + "High": 146.19, + "Low": 142.64, + "Close": 144.42 + }, + { + "Date": "2024-01-20", + "Open": 144.42, + "High": 144.78, + "Low": 143.33, + "Close": 143.71 + }, + { + "Date": "2024-01-21", + "Open": 143.71, + "High": 146.38, + "Low": 142.64, + "Close": 144.88 + }, + { + "Date": "2024-01-22", + "Open": 144.88, + "High": 145.47, + "Low": 143.69, + "Close": 144.64 + }, + { + "Date": "2024-01-23", + "Open": 144.64, + "High": 145.26, + "Low": 142.49, + "Close": 143.05 + }, + { + "Date": "2024-01-24", + "Open": 143.05, + "High": 144.87, + "Low": 142.3, + "Close": 144.48 + }, + { + "Date": "2024-01-25", + "Open": 144.48, + "High": 145.82, + "Low": 140.94, + "Close": 142.81 + }, + { + "Date": "2024-01-26", + "Open": 142.81, + "High": 143.06, + "Low": 141.28, + "Close": 141.8 + }, + { + "Date": "2024-01-27", + "Open": 141.8, + "High": 143.66, + "Low": 139.61, + "Close": 140.77 + }, + { + "Date": "2024-01-28", + "Open": 140.77, + "High": 142.16, + "Low": 139.75, + "Close": 140.6 + }, + { + "Date": "2024-01-29", + "Open": 140.6, + "High": 140.75, + "Low": 139, + "Close": 139.07 + }, + { + "Date": "2024-01-30", + "Open": 139.07, + "High": 140.62, + "Low": 138.24, + "Close": 140.49 + }, + { + "Date": "2024-01-31", + "Open": 140.49, + "High": 141.46, + "Low": 138.85, + "Close": 139.14 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/candlestick-chart/01-card90.flint.json b/test-harness/excel/evaluations/inputs/candlestick-chart/01-card90.flint.json new file mode 100644 index 00000000..1a5daf6a --- /dev/null +++ b/test-harness/excel/evaluations/inputs/candlestick-chart/01-card90.flint.json @@ -0,0 +1,657 @@ +{ + "semantic_types": { + "Date": "Date", + "Open": "Quantity", + "High": "Quantity", + "Low": "Quantity", + "Close": "Quantity" + }, + "chart_spec": { + "chartType": "Candlestick Chart", + "encodings": { + "x": "Date", + "open": "Open", + "high": "High", + "low": "Low", + "close": "Close" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2024-01-02", + "Open": 50, + "High": 50.23, + "Low": 49.07, + "Close": 50.22 + }, + { + "Date": "2024-01-03", + "Open": 50.22, + "High": 51.86, + "Low": 48.86, + "Close": 50.74 + }, + { + "Date": "2024-01-04", + "Open": 50.74, + "High": 51.61, + "Low": 49.03, + "Close": 50.73 + }, + { + "Date": "2024-01-05", + "Open": 50.73, + "High": 52.19, + "Low": 49.69, + "Close": 51.31 + }, + { + "Date": "2024-01-06", + "Open": 51.31, + "High": 53.62, + "Low": 51.24, + "Close": 52.8 + }, + { + "Date": "2024-01-07", + "Open": 52.8, + "High": 53.37, + "Low": 50.37, + "Close": 51.17 + }, + { + "Date": "2024-01-08", + "Open": 51.17, + "High": 53.27, + "Low": 49.98, + "Close": 52.16 + }, + { + "Date": "2024-01-09", + "Open": 52.16, + "High": 55.46, + "Low": 51.76, + "Close": 53.75 + }, + { + "Date": "2024-01-10", + "Open": 53.75, + "High": 56.14, + "Low": 52.19, + "Close": 54.26 + }, + { + "Date": "2024-01-11", + "Open": 54.26, + "High": 56.21, + "Low": 50.99, + "Close": 52.8 + }, + { + "Date": "2024-01-12", + "Open": 52.8, + "High": 54.52, + "Low": 50.94, + "Close": 52.64 + }, + { + "Date": "2024-01-13", + "Open": 52.64, + "High": 54.09, + "Low": 51.98, + "Close": 53.03 + }, + { + "Date": "2024-01-14", + "Open": 53.03, + "High": 54.86, + "Low": 49.42, + "Close": 51.12 + }, + { + "Date": "2024-01-15", + "Open": 51.12, + "High": 53.13, + "Low": 50.21, + "Close": 51.85 + }, + { + "Date": "2024-01-16", + "Open": 51.85, + "High": 53.76, + "Low": 50.8, + "Close": 53.2 + }, + { + "Date": "2024-01-17", + "Open": 53.2, + "High": 54.71, + "Low": 52.33, + "Close": 52.64 + }, + { + "Date": "2024-01-18", + "Open": 52.64, + "High": 54.62, + "Low": 51.43, + "Close": 54.03 + }, + { + "Date": "2024-01-19", + "Open": 54.03, + "High": 55.34, + "Low": 52.54, + "Close": 54.66 + }, + { + "Date": "2024-01-20", + "Open": 54.66, + "High": 55.32, + "Low": 51.84, + "Close": 53.3 + }, + { + "Date": "2024-01-21", + "Open": 53.3, + "High": 55.03, + "Low": 53.12, + "Close": 53.99 + }, + { + "Date": "2024-01-22", + "Open": 53.99, + "High": 55.47, + "Low": 52.53, + "Close": 55.39 + }, + { + "Date": "2024-01-23", + "Open": 55.39, + "High": 57.12, + "Low": 53.78, + "Close": 56.55 + }, + { + "Date": "2024-01-24", + "Open": 56.55, + "High": 57.93, + "Low": 55.04, + "Close": 56.14 + }, + { + "Date": "2024-01-25", + "Open": 56.14, + "High": 58.8, + "Low": 54.92, + "Close": 57.9 + }, + { + "Date": "2024-01-26", + "Open": 57.9, + "High": 59.55, + "Low": 55.99, + "Close": 59.37 + }, + { + "Date": "2024-01-27", + "Open": 59.37, + "High": 60.16, + "Low": 57.53, + "Close": 59.81 + }, + { + "Date": "2024-01-28", + "Open": 59.81, + "High": 61.4, + "Low": 57.08, + "Close": 58.34 + }, + { + "Date": "2024-01-29", + "Open": 58.34, + "High": 59.47, + "Low": 57.7, + "Close": 57.88 + }, + { + "Date": "2024-01-30", + "Open": 57.88, + "High": 58.14, + "Low": 57.07, + "Close": 58 + }, + { + "Date": "2024-01-31", + "Open": 58, + "High": 59.99, + "Low": 56.42, + "Close": 57.5 + }, + { + "Date": "2024-02-01", + "Open": 57.5, + "High": 58.87, + "Low": 54.78, + "Close": 55.77 + }, + { + "Date": "2024-02-02", + "Open": 55.77, + "High": 55.9, + "Low": 53.24, + "Close": 54.21 + }, + { + "Date": "2024-02-03", + "Open": 54.21, + "High": 55.69, + "Low": 52.97, + "Close": 54.74 + }, + { + "Date": "2024-02-04", + "Open": 54.74, + "High": 57.49, + "Low": 53.42, + "Close": 56.09 + }, + { + "Date": "2024-02-05", + "Open": 56.09, + "High": 57.46, + "Low": 55.57, + "Close": 55.67 + }, + { + "Date": "2024-02-06", + "Open": 55.67, + "High": 57.27, + "Low": 54.08, + "Close": 54.28 + }, + { + "Date": "2024-02-07", + "Open": 54.28, + "High": 55.21, + "Low": 52.76, + "Close": 53.82 + }, + { + "Date": "2024-02-08", + "Open": 53.82, + "High": 55.4, + "Low": 50.9, + "Close": 52.29 + }, + { + "Date": "2024-02-09", + "Open": 52.29, + "High": 54.89, + "Low": 51.18, + "Close": 53.19 + }, + { + "Date": "2024-02-10", + "Open": 53.19, + "High": 54.64, + "Low": 52.54, + "Close": 54.12 + }, + { + "Date": "2024-02-11", + "Open": 54.12, + "High": 57.19, + "Low": 54.05, + "Close": 55.72 + }, + { + "Date": "2024-02-12", + "Open": 55.72, + "High": 57.32, + "Low": 53.12, + "Close": 54.84 + }, + { + "Date": "2024-02-13", + "Open": 54.84, + "High": 56.08, + "Low": 53.58, + "Close": 55.66 + }, + { + "Date": "2024-02-14", + "Open": 55.66, + "High": 57.12, + "Low": 52.81, + "Close": 54.29 + }, + { + "Date": "2024-02-15", + "Open": 54.29, + "High": 56.16, + "Low": 51.5, + "Close": 53 + }, + { + "Date": "2024-02-16", + "Open": 53, + "High": 53.65, + "Low": 51.11, + "Close": 53.06 + }, + { + "Date": "2024-02-17", + "Open": 53.06, + "High": 55.05, + "Low": 51.88, + "Close": 53.45 + }, + { + "Date": "2024-02-18", + "Open": 53.45, + "High": 55.1, + "Low": 52.98, + "Close": 53.6 + }, + { + "Date": "2024-02-19", + "Open": 53.6, + "High": 56.79, + "Low": 52.09, + "Close": 55 + }, + { + "Date": "2024-02-20", + "Open": 55, + "High": 57.86, + "Low": 53.15, + "Close": 55.97 + }, + { + "Date": "2024-02-21", + "Open": 55.97, + "High": 57.45, + "Low": 55.46, + "Close": 55.77 + }, + { + "Date": "2024-02-22", + "Open": 55.77, + "High": 57.57, + "Low": 53.23, + "Close": 55.12 + }, + { + "Date": "2024-02-23", + "Open": 55.12, + "High": 56.97, + "Low": 51.91, + "Close": 53.84 + }, + { + "Date": "2024-02-24", + "Open": 53.84, + "High": 55.18, + "Low": 52.17, + "Close": 54.05 + }, + { + "Date": "2024-02-25", + "Open": 54.05, + "High": 56.81, + "Low": 53.61, + "Close": 54.87 + }, + { + "Date": "2024-02-26", + "Open": 54.87, + "High": 57.04, + "Low": 53.8, + "Close": 56.3 + }, + { + "Date": "2024-02-27", + "Open": 56.3, + "High": 59.58, + "Low": 55.35, + "Close": 58.38 + }, + { + "Date": "2024-02-28", + "Open": 58.38, + "High": 60.02, + "Low": 56.25, + "Close": 57.55 + }, + { + "Date": "2024-02-29", + "Open": 57.55, + "High": 59.04, + "Low": 57.23, + "Close": 58.85 + }, + { + "Date": "2024-03-01", + "Open": 58.85, + "High": 60.43, + "Low": 58.09, + "Close": 60.41 + }, + { + "Date": "2024-03-02", + "Open": 60.41, + "High": 61.04, + "Low": 59.69, + "Close": 60.7 + }, + { + "Date": "2024-03-03", + "Open": 60.7, + "High": 62.92, + "Low": 59.03, + "Close": 61.8 + }, + { + "Date": "2024-03-04", + "Open": 61.8, + "High": 63.14, + "Low": 59.3, + "Close": 59.97 + }, + { + "Date": "2024-03-05", + "Open": 59.97, + "High": 60.51, + "Low": 56.74, + "Close": 58.24 + }, + { + "Date": "2024-03-06", + "Open": 58.24, + "High": 58.39, + "Low": 55.55, + "Close": 57.25 + }, + { + "Date": "2024-03-07", + "Open": 57.25, + "High": 59.55, + "Low": 56.78, + "Close": 58.29 + }, + { + "Date": "2024-03-08", + "Open": 58.29, + "High": 60.28, + "Low": 56.42, + "Close": 60.21 + }, + { + "Date": "2024-03-09", + "Open": 60.21, + "High": 62.75, + "Low": 59.59, + "Close": 61.67 + }, + { + "Date": "2024-03-10", + "Open": 61.67, + "High": 64.54, + "Low": 60.79, + "Close": 63.43 + }, + { + "Date": "2024-03-11", + "Open": 63.43, + "High": 65.85, + "Low": 63.37, + "Close": 65.44 + }, + { + "Date": "2024-03-12", + "Open": 65.44, + "High": 66.03, + "Low": 65.15, + "Close": 65.24 + }, + { + "Date": "2024-03-13", + "Open": 65.24, + "High": 67.59, + "Low": 64.63, + "Close": 66.35 + }, + { + "Date": "2024-03-14", + "Open": 66.35, + "High": 68.74, + "Low": 64.66, + "Close": 67.06 + }, + { + "Date": "2024-03-15", + "Open": 67.06, + "High": 68.28, + "Low": 65.43, + "Close": 67.4 + }, + { + "Date": "2024-03-16", + "Open": 67.4, + "High": 68.58, + "Low": 65.97, + "Close": 66.34 + }, + { + "Date": "2024-03-17", + "Open": 66.34, + "High": 69.57, + "Low": 65.13, + "Close": 67.78 + }, + { + "Date": "2024-03-18", + "Open": 67.78, + "High": 68.21, + "Low": 64.9, + "Close": 66.1 + }, + { + "Date": "2024-03-19", + "Open": 66.1, + "High": 68.25, + "Low": 65.69, + "Close": 68.16 + }, + { + "Date": "2024-03-20", + "Open": 68.16, + "High": 68.74, + "Low": 67.76, + "Close": 68.5 + }, + { + "Date": "2024-03-21", + "Open": 68.5, + "High": 69.79, + "Low": 67.89, + "Close": 69.43 + }, + { + "Date": "2024-03-22", + "Open": 69.43, + "High": 72.54, + "Low": 68.7, + "Close": 71.11 + }, + { + "Date": "2024-03-23", + "Open": 71.11, + "High": 71.48, + "Low": 70.23, + "Close": 71.28 + }, + { + "Date": "2024-03-24", + "Open": 71.28, + "High": 71.98, + "Low": 70.16, + "Close": 70.67 + }, + { + "Date": "2024-03-25", + "Open": 70.67, + "High": 71.06, + "Low": 68.8, + "Close": 69.65 + }, + { + "Date": "2024-03-26", + "Open": 69.65, + "High": 70.01, + "Low": 67.23, + "Close": 68.69 + }, + { + "Date": "2024-03-27", + "Open": 68.69, + "High": 70.15, + "Low": 68.38, + "Close": 68.83 + }, + { + "Date": "2024-03-28", + "Open": 68.83, + "High": 69.66, + "Low": 68.25, + "Close": 68.84 + }, + { + "Date": "2024-03-29", + "Open": 68.84, + "High": 70.32, + "Low": 67.35, + "Close": 68.07 + }, + { + "Date": "2024-03-30", + "Open": 68.07, + "High": 69.82, + "Low": 65.67, + "Close": 66.86 + }, + { + "Date": "2024-03-31", + "Open": 66.86, + "High": 68.7, + "Low": 65.53, + "Close": 67.45 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/candlestick-chart/02-card20.flint.json b/test-harness/excel/evaluations/inputs/candlestick-chart/02-card20.flint.json new file mode 100644 index 00000000..35e392a0 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/candlestick-chart/02-card20.flint.json @@ -0,0 +1,167 @@ +{ + "semantic_types": { + "Date": "Date", + "Open": "Quantity", + "High": "Quantity", + "Low": "Quantity", + "Close": "Quantity" + }, + "chart_spec": { + "chartType": "Candlestick Chart", + "encodings": { + "x": "Date", + "open": "Open", + "high": "High", + "low": "Low", + "close": "Close" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2024-01-02", + "Open": 3, + "High": 4.6, + "Low": 2, + "Close": 4.19 + }, + { + "Date": "2024-01-03", + "Open": 4.19, + "High": 7.25, + "Low": 2.28, + "Close": 5.59 + }, + { + "Date": "2024-01-04", + "Open": 5.59, + "High": 6.75, + "Low": 4.01, + "Close": 4.8 + }, + { + "Date": "2024-01-05", + "Open": 4.8, + "High": 6.63, + "Low": 2.87, + "Close": 5.99 + }, + { + "Date": "2024-01-06", + "Open": 5.99, + "High": 7.95, + "Low": 3.64, + "Close": 5.06 + }, + { + "Date": "2024-01-07", + "Open": 5.06, + "High": 6.42, + "Low": 3.45, + "Close": 5.55 + }, + { + "Date": "2024-01-08", + "Open": 5.55, + "High": 5.8, + "Low": 2.92, + "Close": 4.83 + }, + { + "Date": "2024-01-09", + "Open": 4.83, + "High": 7.56, + "Low": 4.49, + "Close": 6.49 + }, + { + "Date": "2024-01-10", + "Open": 6.49, + "High": 7.13, + "Low": 4.68, + "Close": 7.05 + }, + { + "Date": "2024-01-11", + "Open": 7.05, + "High": 10.66, + "Low": 6.78, + "Close": 8.81 + }, + { + "Date": "2024-01-12", + "Open": 8.81, + "High": 10.95, + "Low": 7.6, + "Close": 10.26 + }, + { + "Date": "2024-01-13", + "Open": 10.26, + "High": 11.36, + "Low": 7.33, + "Close": 8.44 + }, + { + "Date": "2024-01-14", + "Open": 8.44, + "High": 10.19, + "Low": 7.95, + "Close": 8.55 + }, + { + "Date": "2024-01-15", + "Open": 8.55, + "High": 9.51, + "Low": 5.73, + "Close": 6.77 + }, + { + "Date": "2024-01-16", + "Open": 6.77, + "High": 8.48, + "Low": 3.79, + "Close": 5.25 + }, + { + "Date": "2024-01-17", + "Open": 5.25, + "High": 5.52, + "Low": 3.8, + "Close": 4.43 + }, + { + "Date": "2024-01-18", + "Open": 4.43, + "High": 7.02, + "Low": 2.67, + "Close": 5.7 + }, + { + "Date": "2024-01-19", + "Open": 5.7, + "High": 8.03, + "Low": 5.53, + "Close": 6.21 + }, + { + "Date": "2024-01-20", + "Open": 6.21, + "High": 7.92, + "Low": 6, + "Close": 6.89 + }, + { + "Date": "2024-01-21", + "Open": 6.89, + "High": 8.04, + "Low": 5.67, + "Close": 6.01 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/connected-scatter-plot/00-card9.flint.json b/test-harness/excel/evaluations/inputs/connected-scatter-plot/00-card9.flint.json new file mode 100644 index 00000000..357f80b9 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/connected-scatter-plot/00-card9.flint.json @@ -0,0 +1,73 @@ +{ + "semantic_types": { + "Unemployment Rate": "Quantity", + "Inflation Rate": "Quantity", + "Year": "Year" + }, + "chart_spec": { + "chartType": "Connected Scatter Plot", + "encodings": { + "x": "Unemployment Rate", + "y": "Inflation Rate", + "order": "Year" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Year": 2014, + "Unemployment Rate": 6.2, + "Inflation Rate": 1.6 + }, + { + "Year": 2015, + "Unemployment Rate": 5.3, + "Inflation Rate": 0.1 + }, + { + "Year": 2016, + "Unemployment Rate": 4.9, + "Inflation Rate": 1.3 + }, + { + "Year": 2017, + "Unemployment Rate": 4.4, + "Inflation Rate": 2.1 + }, + { + "Year": 2018, + "Unemployment Rate": 3.9, + "Inflation Rate": 2.4 + }, + { + "Year": 2019, + "Unemployment Rate": 3.7, + "Inflation Rate": 1.8 + }, + { + "Year": 2020, + "Unemployment Rate": 8.1, + "Inflation Rate": 1.2 + }, + { + "Year": 2021, + "Unemployment Rate": 5.4, + "Inflation Rate": 4.7 + }, + { + "Year": 2022, + "Unemployment Rate": 3.6, + "Inflation Rate": 8 + }, + { + "Year": 2023, + "Unemployment Rate": 3.7, + "Inflation Rate": 4.1 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/connected-scatter-plot/01-card21.flint.json b/test-harness/excel/evaluations/inputs/connected-scatter-plot/01-card21.flint.json new file mode 100644 index 00000000..6843ada9 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/connected-scatter-plot/01-card21.flint.json @@ -0,0 +1,169 @@ +{ + "semantic_types": { + "GDP Growth": "Quantity", + "Inflation": "Quantity", + "Year": "Year", + "Country": "Country" + }, + "chart_spec": { + "chartType": "Connected Scatter Plot", + "encodings": { + "x": "GDP Growth", + "y": "Inflation", + "order": "Year", + "color": "Country" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Country": "USA", + "Year": 2016, + "GDP Growth": 1.7, + "Inflation": 1.3 + }, + { + "Country": "USA", + "Year": 2017, + "GDP Growth": 2.3, + "Inflation": 2.1 + }, + { + "Country": "USA", + "Year": 2018, + "GDP Growth": 2.9, + "Inflation": 2.4 + }, + { + "Country": "USA", + "Year": 2019, + "GDP Growth": 2.3, + "Inflation": 1.8 + }, + { + "Country": "USA", + "Year": 2020, + "GDP Growth": -3.4, + "Inflation": 1.2 + }, + { + "Country": "USA", + "Year": 2021, + "GDP Growth": 5.9, + "Inflation": 4.7 + }, + { + "Country": "USA", + "Year": 2022, + "GDP Growth": 2.1, + "Inflation": 8 + }, + { + "Country": "USA", + "Year": 2023, + "GDP Growth": 2.5, + "Inflation": 4.1 + }, + { + "Country": "China", + "Year": 2016, + "GDP Growth": 6.8, + "Inflation": 2 + }, + { + "Country": "China", + "Year": 2017, + "GDP Growth": 6.9, + "Inflation": 1.6 + }, + { + "Country": "China", + "Year": 2018, + "GDP Growth": 6.7, + "Inflation": 2.1 + }, + { + "Country": "China", + "Year": 2019, + "GDP Growth": 6, + "Inflation": 2.9 + }, + { + "Country": "China", + "Year": 2020, + "GDP Growth": 2.2, + "Inflation": 2.4 + }, + { + "Country": "China", + "Year": 2021, + "GDP Growth": 8.4, + "Inflation": 0.9 + }, + { + "Country": "China", + "Year": 2022, + "GDP Growth": 3, + "Inflation": 2 + }, + { + "Country": "China", + "Year": 2023, + "GDP Growth": 5.2, + "Inflation": 0.2 + }, + { + "Country": "Japan", + "Year": 2016, + "GDP Growth": 0.8, + "Inflation": -0.1 + }, + { + "Country": "Japan", + "Year": 2017, + "GDP Growth": 1.7, + "Inflation": 0.5 + }, + { + "Country": "Japan", + "Year": 2018, + "GDP Growth": 0.6, + "Inflation": 1 + }, + { + "Country": "Japan", + "Year": 2019, + "GDP Growth": -0.4, + "Inflation": 0.5 + }, + { + "Country": "Japan", + "Year": 2020, + "GDP Growth": -4.3, + "Inflation": 0 + }, + { + "Country": "Japan", + "Year": 2021, + "GDP Growth": 2.1, + "Inflation": -0.2 + }, + { + "Country": "Japan", + "Year": 2022, + "GDP Growth": 1, + "Inflation": 2.5 + }, + { + "Country": "Japan", + "Year": 2023, + "GDP Growth": 1.9, + "Inflation": 3.3 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/connected-scatter-plot/02-card12.flint.json b/test-harness/excel/evaluations/inputs/connected-scatter-plot/02-card12.flint.json new file mode 100644 index 00000000..7166f1d1 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/connected-scatter-plot/02-card12.flint.json @@ -0,0 +1,83 @@ +{ + "semantic_types": { + "Trade Volume": "Quantity", + "Share Price": "Quantity", + "Date": "Date" + }, + "chart_spec": { + "chartType": "Connected Scatter Plot", + "encodings": { + "x": "Trade Volume", + "y": "Share Price", + "order": "Date" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2023-01-03", + "Trade Volume": 58, + "Share Price": 142 + }, + { + "Date": "2023-02-01", + "Trade Volume": 47, + "Share Price": 151 + }, + { + "Date": "2023-03-01", + "Trade Volume": 63, + "Share Price": 148 + }, + { + "Date": "2023-04-03", + "Trade Volume": 41, + "Share Price": 165 + }, + { + "Date": "2023-05-01", + "Trade Volume": 38, + "Share Price": 172 + }, + { + "Date": "2023-06-01", + "Trade Volume": 52, + "Share Price": 180 + }, + { + "Date": "2023-07-03", + "Trade Volume": 35, + "Share Price": 193 + }, + { + "Date": "2023-08-01", + "Trade Volume": 44, + "Share Price": 188 + }, + { + "Date": "2023-09-01", + "Trade Volume": 71, + "Share Price": 171 + }, + { + "Date": "2023-10-02", + "Trade Volume": 66, + "Share Price": 170 + }, + { + "Date": "2023-11-01", + "Trade Volume": 49, + "Share Price": 189 + }, + { + "Date": "2023-12-01", + "Trade Volume": 40, + "Share Price": 192 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/connected-scatter-plot/03-card12.flint.json b/test-harness/excel/evaluations/inputs/connected-scatter-plot/03-card12.flint.json new file mode 100644 index 00000000..f9b5db86 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/connected-scatter-plot/03-card12.flint.json @@ -0,0 +1,143 @@ +{ + "semantic_types": { + "Signal A": "Quantity", + "Signal B": "Quantity", + "Step": "Quantity" + }, + "chart_spec": { + "chartType": "Connected Scatter Plot", + "encodings": { + "x": "Signal A", + "y": "Signal B", + "order": "Step" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Step": 0, + "Signal A": 90, + "Signal B": 50 + }, + { + "Step": 1, + "Signal A": 88.5, + "Signal B": 60.4 + }, + { + "Step": 2, + "Signal A": 84.2, + "Signal B": 67.8 + }, + { + "Step": 3, + "Signal A": 77.3, + "Signal B": 70 + }, + { + "Step": 4, + "Signal A": 68.4, + "Signal B": 66.3 + }, + { + "Step": 5, + "Signal A": 58.1, + "Signal B": 58 + }, + { + "Step": 6, + "Signal A": 47.3, + "Signal B": 47.3 + }, + { + "Step": 7, + "Signal A": 36.6, + "Signal B": 37.4 + }, + { + "Step": 8, + "Signal A": 26.9, + "Signal B": 31.2 + }, + { + "Step": 9, + "Signal A": 19, + "Signal B": 30.4 + }, + { + "Step": 10, + "Signal A": 13.3, + "Signal B": 35.4 + }, + { + "Step": 11, + "Signal A": 10.4, + "Signal B": 44.6 + }, + { + "Step": 12, + "Signal A": 10.4, + "Signal B": 55.4 + }, + { + "Step": 13, + "Signal A": 13.3, + "Signal B": 64.6 + }, + { + "Step": 14, + "Signal A": 19, + "Signal B": 69.6 + }, + { + "Step": 15, + "Signal A": 26.9, + "Signal B": 68.8 + }, + { + "Step": 16, + "Signal A": 36.6, + "Signal B": 62.6 + }, + { + "Step": 17, + "Signal A": 47.3, + "Signal B": 52.7 + }, + { + "Step": 18, + "Signal A": 58.1, + "Signal B": 42 + }, + { + "Step": 19, + "Signal A": 68.4, + "Signal B": 33.7 + }, + { + "Step": 20, + "Signal A": 77.3, + "Signal B": 30 + }, + { + "Step": 21, + "Signal A": 84.2, + "Signal B": 32.2 + }, + { + "Step": 22, + "Signal A": 88.5, + "Signal B": 39.6 + }, + { + "Step": 23, + "Signal A": 90, + "Signal B": 50 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/connected-scatter-plot/04-card15.flint.json b/test-harness/excel/evaluations/inputs/connected-scatter-plot/04-card15.flint.json new file mode 100644 index 00000000..b585a0b1 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/connected-scatter-plot/04-card15.flint.json @@ -0,0 +1,121 @@ +{ + "semantic_types": { + "Temperature": "Quantity", + "Pressure": "Quantity", + "Step": "Quantity", + "Experiment": "Category" + }, + "chart_spec": { + "chartType": "Connected Scatter Plot", + "encodings": { + "x": "Temperature", + "y": "Pressure", + "order": "Step", + "color": "Experiment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Experiment": "Trial A", + "Step": 1, + "Temperature": 20, + "Pressure": 1 + }, + { + "Experiment": "Trial A", + "Step": 2, + "Temperature": 35, + "Pressure": 1.4 + }, + { + "Experiment": "Trial A", + "Step": 3, + "Temperature": 55, + "Pressure": 2.1 + }, + { + "Experiment": "Trial A", + "Step": 4, + "Temperature": 70, + "Pressure": 3 + }, + { + "Experiment": "Trial A", + "Step": 5, + "Temperature": 60, + "Pressure": 2.6 + }, + { + "Experiment": "Trial A", + "Step": 6, + "Temperature": 45, + "Pressure": 1.9 + }, + { + "Experiment": "Trial A", + "Step": 7, + "Temperature": 30, + "Pressure": 1.3 + }, + { + "Experiment": "Trial A", + "Step": 8, + "Temperature": 22, + "Pressure": 1.05 + }, + { + "Experiment": "Trial B", + "Step": 1, + "Temperature": 25, + "Pressure": 1.1 + }, + { + "Experiment": "Trial B", + "Step": 2, + "Temperature": 30, + "Pressure": 1.2 + }, + { + "Experiment": "Trial B", + "Step": 3, + "Temperature": 48, + "Pressure": 1.8 + }, + { + "Experiment": "Trial B", + "Step": 4, + "Temperature": 68, + "Pressure": 2.7 + }, + { + "Experiment": "Trial B", + "Step": 5, + "Temperature": 80, + "Pressure": 3.4 + }, + { + "Experiment": "Trial B", + "Step": 6, + "Temperature": 62, + "Pressure": 2.4 + }, + { + "Experiment": "Trial B", + "Step": 7, + "Temperature": 40, + "Pressure": 1.5 + }, + { + "Experiment": "Trial B", + "Step": 8, + "Temperature": 28, + "Pressure": 1.15 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/connected-scatter-plot/05-card4.flint.json b/test-harness/excel/evaluations/inputs/connected-scatter-plot/05-card4.flint.json new file mode 100644 index 00000000..7f187ede --- /dev/null +++ b/test-harness/excel/evaluations/inputs/connected-scatter-plot/05-card4.flint.json @@ -0,0 +1,43 @@ +{ + "semantic_types": { + "Cost": "Quantity", + "Revenue": "Quantity", + "Quarter": "Quantity" + }, + "chart_spec": { + "chartType": "Connected Scatter Plot", + "encodings": { + "x": "Cost", + "y": "Revenue", + "order": "Quarter" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Quarter": 1, + "Cost": 12, + "Revenue": 18 + }, + { + "Quarter": 2, + "Cost": 20, + "Revenue": 26 + }, + { + "Quarter": 3, + "Cost": 17, + "Revenue": 35 + }, + { + "Quarter": 4, + "Cost": 24, + "Revenue": 30 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/connected-scatter-plot/06-card35.flint.json b/test-harness/excel/evaluations/inputs/connected-scatter-plot/06-card35.flint.json new file mode 100644 index 00000000..ea2d93c4 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/connected-scatter-plot/06-card35.flint.json @@ -0,0 +1,203 @@ +{ + "semantic_types": { + "X Position": "Quantity", + "Y Position": "Quantity", + "Step": "Quantity" + }, + "chart_spec": { + "chartType": "Connected Scatter Plot", + "encodings": { + "x": "X Position", + "y": "Y Position", + "order": "Step" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Step": 0, + "X Position": 68.1, + "Y Position": 60 + }, + { + "Step": 1, + "X Position": 72.6, + "Y Position": 62 + }, + { + "Step": 2, + "X Position": 70.9, + "Y Position": 67.2 + }, + { + "Step": 3, + "X Position": 69.5, + "Y Position": 70.2 + }, + { + "Step": 4, + "X Position": 66.8, + "Y Position": 75.2 + }, + { + "Step": 5, + "X Position": 65.9, + "Y Position": 76.9 + }, + { + "Step": 6, + "X Position": 59.3, + "Y Position": 77.8 + }, + { + "Step": 7, + "X Position": 52.7, + "Y Position": 78.9 + }, + { + "Step": 8, + "X Position": 48.4, + "Y Position": 79.4 + }, + { + "Step": 9, + "X Position": 42.8, + "Y Position": 75.7 + }, + { + "Step": 10, + "X Position": 37.9, + "Y Position": 70.9 + }, + { + "Step": 11, + "X Position": 31.9, + "Y Position": 63.2 + }, + { + "Step": 12, + "X Position": 30.3, + "Y Position": 57.6 + }, + { + "Step": 13, + "X Position": 30.4, + "Y Position": 50.5 + }, + { + "Step": 14, + "X Position": 35, + "Y Position": 41.4 + }, + { + "Step": 15, + "X Position": 38, + "Y Position": 32.3 + }, + { + "Step": 16, + "X Position": 46.9, + "Y Position": 25.9 + }, + { + "Step": 17, + "X Position": 54.2, + "Y Position": 21.1 + }, + { + "Step": 18, + "X Position": 66.1, + "Y Position": 21.5 + }, + { + "Step": 19, + "X Position": 77.2, + "Y Position": 21.6 + }, + { + "Step": 20, + "X Position": 86.2, + "Y Position": 27.8 + }, + { + "Step": 21, + "X Position": 93.7, + "Y Position": 33.6 + }, + { + "Step": 22, + "X Position": 104.2, + "Y Position": 43.2 + }, + { + "Step": 23, + "X Position": 107.4, + "Y Position": 55.5 + }, + { + "Step": 24, + "X Position": 107.7, + "Y Position": 67.3 + }, + { + "Step": 25, + "X Position": 106.7, + "Y Position": 83.2 + }, + { + "Step": 26, + "X Position": 99.8, + "Y Position": 95.8 + }, + { + "Step": 27, + "X Position": 90.8, + "Y Position": 103.8 + }, + { + "Step": 28, + "X Position": 77.7, + "Y Position": 112.7 + }, + { + "Step": 29, + "X Position": 60.8, + "Y Position": 117.2 + }, + { + "Step": 30, + "X Position": 48.4, + "Y Position": 115.2 + }, + { + "Step": 31, + "X Position": 29.8, + "Y Position": 111.9 + }, + { + "Step": 32, + "X Position": 19.5, + "Y Position": 105.4 + }, + { + "Step": 33, + "X Position": 4.9, + "Y Position": 93.5 + }, + { + "Step": 34, + "X Position": -3.4, + "Y Position": 76.8 + }, + { + "Step": 35, + "X Position": -6.3, + "Y Position": 59.1 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/connected-scatter-plot/07-card24.flint.json b/test-harness/excel/evaluations/inputs/connected-scatter-plot/07-card24.flint.json new file mode 100644 index 00000000..1976fe43 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/connected-scatter-plot/07-card24.flint.json @@ -0,0 +1,169 @@ +{ + "semantic_types": { + "Drift": "Quantity", + "Noise": "Quantity", + "Step": "Quantity", + "Sensor": "Category" + }, + "chart_spec": { + "chartType": "Connected Scatter Plot", + "encodings": { + "x": "Drift", + "y": "Noise", + "order": "Step", + "detail": "Sensor" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Sensor": "Laptop", + "Step": 1, + "Drift": 19.5, + "Noise": 37.6 + }, + { + "Sensor": "Laptop", + "Step": 2, + "Drift": 29.7, + "Noise": 36.4 + }, + { + "Sensor": "Laptop", + "Step": 3, + "Drift": 36.8, + "Noise": 25.4 + }, + { + "Sensor": "Laptop", + "Step": 4, + "Drift": 38.4, + "Noise": 14.2 + }, + { + "Sensor": "Laptop", + "Step": 5, + "Drift": 29.2, + "Noise": 7.4 + }, + { + "Sensor": "Laptop", + "Step": 6, + "Drift": 18.6, + "Noise": 3.2 + }, + { + "Sensor": "Phone", + "Step": 1, + "Drift": 30.3, + "Noise": 49.8 + }, + { + "Sensor": "Phone", + "Step": 2, + "Drift": 42.9, + "Noise": 47.3 + }, + { + "Sensor": "Phone", + "Step": 3, + "Drift": 50.7, + "Noise": 36.6 + }, + { + "Sensor": "Phone", + "Step": 4, + "Drift": 48.9, + "Noise": 26.9 + }, + { + "Sensor": "Phone", + "Step": 5, + "Drift": 41.2, + "Noise": 19 + }, + { + "Sensor": "Phone", + "Step": 6, + "Drift": 32.4, + "Noise": 15.8 + }, + { + "Sensor": "Tablet", + "Step": 1, + "Drift": 45.5, + "Noise": 63.6 + }, + { + "Sensor": "Tablet", + "Step": 2, + "Drift": 55.1, + "Noise": 58.9 + }, + { + "Sensor": "Tablet", + "Step": 3, + "Drift": 61.4, + "Noise": 47.6 + }, + { + "Sensor": "Tablet", + "Step": 4, + "Drift": 62.7, + "Noise": 37.6 + }, + { + "Sensor": "Tablet", + "Step": 5, + "Drift": 54.3, + "Noise": 28.1 + }, + { + "Sensor": "Tablet", + "Step": 6, + "Drift": 44.7, + "Noise": 27.9 + }, + { + "Sensor": "Desktop", + "Step": 1, + "Drift": 57.2, + "Noise": 75.7 + }, + { + "Sensor": "Desktop", + "Step": 2, + "Drift": 66.8, + "Noise": 68.7 + }, + { + "Sensor": "Desktop", + "Step": 3, + "Drift": 73.5, + "Noise": 62.1 + }, + { + "Sensor": "Desktop", + "Step": 4, + "Drift": 74.9, + "Noise": 52.3 + }, + { + "Sensor": "Desktop", + "Step": 5, + "Drift": 67.3, + "Noise": 39.6 + }, + { + "Sensor": "Desktop", + "Step": 6, + "Drift": 54, + "Noise": 37 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/donut-chart/00-card0.flint.json b/test-harness/excel/evaluations/inputs/donut-chart/00-card0.flint.json new file mode 100644 index 00000000..2f318305 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/donut-chart/00-card0.flint.json @@ -0,0 +1,40 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Donut Chart", + "encodings": { + "size": "Value", + "color": "Category" + }, + "baseSize": { + "width": 560, + "height": 360 + }, + "chartProperties": { + "innerRadius": 50 + } + }, + "data": { + "values": [ + { + "Category": "Electronics", + "Value": 103 + }, + { + "Category": "Clothing", + "Value": 215 + }, + { + "Category": "Food", + "Value": 342 + }, + { + "Category": "Books", + "Value": 560 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/donut-chart/01-card0.flint.json b/test-harness/excel/evaluations/inputs/donut-chart/01-card0.flint.json new file mode 100644 index 00000000..d6ded0b8 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/donut-chart/01-card0.flint.json @@ -0,0 +1,64 @@ +{ + "semantic_types": { + "Product": "Product", + "Revenue": "Amount" + }, + "chart_spec": { + "chartType": "Donut Chart", + "encodings": { + "size": "Revenue", + "color": "Product" + }, + "baseSize": { + "width": 560, + "height": 360 + }, + "chartProperties": { + "innerRadius": 50 + } + }, + "data": { + "values": [ + { + "Product": "Laptop", + "Revenue": 2924 + }, + { + "Product": "Phone", + "Revenue": 2506 + }, + { + "Product": "Tablet", + "Revenue": 6721 + }, + { + "Product": "Desktop", + "Revenue": 1826 + }, + { + "Product": "Monitor", + "Revenue": 4934 + }, + { + "Product": "Keyboard", + "Revenue": 7789 + }, + { + "Product": "Mouse", + "Revenue": 8215 + }, + { + "Product": "Headphones", + "Revenue": 5798 + }, + { + "Product": "Speaker", + "Revenue": 7950 + }, + { + "Product": "Camera", + "Revenue": 6919 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/donut-chart/02-card0.flint.json b/test-harness/excel/evaluations/inputs/donut-chart/02-card0.flint.json new file mode 100644 index 00000000..7abc3480 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/donut-chart/02-card0.flint.json @@ -0,0 +1,104 @@ +{ + "semantic_types": { + "Region": "Category", + "Sales": "Quantity" + }, + "chart_spec": { + "chartType": "Donut Chart", + "encodings": { + "size": "Sales", + "color": "Region" + }, + "baseSize": { + "width": 560, + "height": 360 + }, + "chartProperties": { + "innerRadius": 50 + } + }, + "data": { + "values": [ + { + "Region": "Electronics", + "Sales": 4347 + }, + { + "Region": "Clothing", + "Sales": 4301 + }, + { + "Region": "Food", + "Sales": 5098 + }, + { + "Region": "Books", + "Sales": 1293 + }, + { + "Region": "Sports", + "Sales": 4163 + }, + { + "Region": "Home", + "Sales": 2869 + }, + { + "Region": "Garden", + "Sales": 5444 + }, + { + "Region": "Auto", + "Sales": 2591 + }, + { + "Region": "Health", + "Sales": 1407 + }, + { + "Region": "Beauty", + "Sales": 2246 + }, + { + "Region": "Toys", + "Sales": 5168 + }, + { + "Region": "Music", + "Sales": 3215 + }, + { + "Region": "Movies", + "Sales": 3360 + }, + { + "Region": "Software", + "Sales": 1176 + }, + { + "Region": "Games", + "Sales": 4497 + }, + { + "Region": "Office", + "Sales": 5262 + }, + { + "Region": "Pet", + "Sales": 1783 + }, + { + "Region": "Baby", + "Sales": 4292 + }, + { + "Region": "Tools", + "Sales": 5312 + }, + { + "Region": "Crafts", + "Sales": 5358 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/donut-chart/03-card0.flint.json b/test-harness/excel/evaluations/inputs/donut-chart/03-card0.flint.json new file mode 100644 index 00000000..b79a0a86 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/donut-chart/03-card0.flint.json @@ -0,0 +1,48 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Donut Chart", + "encodings": { + "size": "Value", + "color": "Category" + }, + "baseSize": { + "width": 560, + "height": 360 + }, + "chartProperties": { + "innerRadius": 50 + } + }, + "data": { + "values": [ + { + "Category": "Dominant", + "Value": 5000 + }, + { + "Category": "Small-A", + "Value": 200 + }, + { + "Category": "Small-B", + "Value": 180 + }, + { + "Category": "Small-C", + "Value": 150 + }, + { + "Category": "Tiny-1", + "Value": 30 + }, + { + "Category": "Tiny-2", + "Value": 20 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/funnel-chart/00-card5.flint.json b/test-harness/excel/evaluations/inputs/funnel-chart/00-card5.flint.json new file mode 100644 index 00000000..a560df96 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/funnel-chart/00-card5.flint.json @@ -0,0 +1,41 @@ +{ + "semantic_types": { + "Stage": "Category", + "Count": "Quantity" + }, + "chart_spec": { + "chartType": "Funnel Chart", + "encodings": { + "y": "Stage", + "size": "Count" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Stage": "Visits", + "Count": 10006 + }, + { + "Stage": "Signups", + "Count": 5230 + }, + { + "Stage": "Trials", + "Count": 2984 + }, + { + "Stage": "Purchases", + "Count": 1670 + }, + { + "Stage": "Renewals", + "Count": 839 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/funnel-chart/01-card5.flint.json b/test-harness/excel/evaluations/inputs/funnel-chart/01-card5.flint.json new file mode 100644 index 00000000..23a12323 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/funnel-chart/01-card5.flint.json @@ -0,0 +1,44 @@ +{ + "semantic_types": { + "Step": "Category", + "Candidates": "Quantity" + }, + "chart_spec": { + "chartType": "Funnel Chart", + "encodings": { + "y": "Step", + "size": "Candidates" + }, + "baseSize": { + "width": 560, + "height": 360 + }, + "chartProperties": { + "sort": "ascending" + } + }, + "data": { + "values": [ + { + "Step": "Applied", + "Candidates": 510 + }, + { + "Step": "Screened", + "Candidates": 286 + }, + { + "Step": "Interviewed", + "Candidates": 160 + }, + { + "Step": "Offered", + "Candidates": 112 + }, + { + "Step": "Hired", + "Candidates": 63 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/funnel-chart/02-card8.flint.json b/test-harness/excel/evaluations/inputs/funnel-chart/02-card8.flint.json new file mode 100644 index 00000000..7538c61d --- /dev/null +++ b/test-harness/excel/evaluations/inputs/funnel-chart/02-card8.flint.json @@ -0,0 +1,53 @@ +{ + "semantic_types": { + "Phase": "Category", + "Users": "Quantity" + }, + "chart_spec": { + "chartType": "Funnel Chart", + "encodings": { + "y": "Phase", + "size": "Users" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Phase": "Awareness", + "Users": 50603 + }, + { + "Phase": "Interest", + "Users": 33400 + }, + { + "Phase": "Consideration", + "Users": 22767 + }, + { + "Phase": "Intent", + "Users": 15130 + }, + { + "Phase": "Evaluation", + "Users": 10415 + }, + { + "Phase": "Trial", + "Users": 7105 + }, + { + "Phase": "Purchase", + "Users": 5229 + }, + { + "Phase": "Loyalty", + "Users": 3243 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/grouped-bar-chart/00-card4.flint.json b/test-harness/excel/evaluations/inputs/grouped-bar-chart/00-card4.flint.json new file mode 100644 index 00000000..6553c049 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/grouped-bar-chart/00-card4.flint.json @@ -0,0 +1,83 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Grouped Bar Chart", + "encodings": { + "x": "Category", + "y": "Value", + "group": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Value": 12, + "Segment": "USA" + }, + { + "Category": "Laptop", + "Value": 467, + "Segment": "China" + }, + { + "Category": "Laptop", + "Value": 685, + "Segment": "Japan" + }, + { + "Category": "Phone", + "Value": 599, + "Segment": "USA" + }, + { + "Category": "Phone", + "Value": 832, + "Segment": "China" + }, + { + "Category": "Phone", + "Value": 691, + "Segment": "Japan" + }, + { + "Category": "Tablet", + "Value": 122, + "Segment": "USA" + }, + { + "Category": "Tablet", + "Value": 663, + "Segment": "China" + }, + { + "Category": "Tablet", + "Value": 791, + "Segment": "Japan" + }, + { + "Category": "Desktop", + "Value": 414, + "Segment": "USA" + }, + { + "Category": "Desktop", + "Value": 60, + "Segment": "China" + }, + { + "Category": "Desktop", + "Value": 827, + "Segment": "Japan" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/grouped-bar-chart/01-card8.flint.json b/test-harness/excel/evaluations/inputs/grouped-bar-chart/01-card8.flint.json new file mode 100644 index 00000000..eae3bab3 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/grouped-bar-chart/01-card8.flint.json @@ -0,0 +1,53 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Grouped Bar Chart", + "encodings": { + "x": "Category", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Value": 297 + }, + { + "Category": "Phone", + "Value": 378 + }, + { + "Category": "Tablet", + "Value": 48 + }, + { + "Category": "Desktop", + "Value": 911 + }, + { + "Category": "Monitor", + "Value": 351 + }, + { + "Category": "Keyboard", + "Value": 316 + }, + { + "Category": "Mouse", + "Value": 34 + }, + { + "Category": "Headphones", + "Value": 62 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/grouped-bar-chart/02-card90.flint.json b/test-harness/excel/evaluations/inputs/grouped-bar-chart/02-card90.flint.json new file mode 100644 index 00000000..3fefd6c5 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/grouped-bar-chart/02-card90.flint.json @@ -0,0 +1,1373 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Grouped Bar Chart", + "encodings": { + "x": "Category", + "y": "Value", + "group": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "James Walker", + "Value": 253, + "Segment": "USA" + }, + { + "Category": "James Walker", + "Value": 41, + "Segment": "China" + }, + { + "Category": "James Walker", + "Value": 696, + "Segment": "Japan" + }, + { + "Category": "Paul Wilson", + "Value": 140, + "Segment": "USA" + }, + { + "Category": "Paul Wilson", + "Value": 852, + "Segment": "China" + }, + { + "Category": "Paul Wilson", + "Value": 88, + "Segment": "Japan" + }, + { + "Category": "Jessica Martin", + "Value": 594, + "Segment": "USA" + }, + { + "Category": "Jessica Martin", + "Value": 184, + "Segment": "China" + }, + { + "Category": "Jessica Martin", + "Value": 802, + "Segment": "Japan" + }, + { + "Category": "Christopher Moore", + "Value": 364, + "Segment": "USA" + }, + { + "Category": "Christopher Moore", + "Value": 105, + "Segment": "China" + }, + { + "Category": "Christopher Moore", + "Value": 663, + "Segment": "Japan" + }, + { + "Category": "Betty Wilson", + "Value": 739, + "Segment": "USA" + }, + { + "Category": "Betty Wilson", + "Value": 247, + "Segment": "China" + }, + { + "Category": "Betty Wilson", + "Value": 826, + "Segment": "Japan" + }, + { + "Category": "Steven Lewis", + "Value": 476, + "Segment": "USA" + }, + { + "Category": "Steven Lewis", + "Value": 794, + "Segment": "China" + }, + { + "Category": "Steven Lewis", + "Value": 924, + "Segment": "Japan" + }, + { + "Category": "Karen Lopez", + "Value": 318, + "Segment": "USA" + }, + { + "Category": "Karen Lopez", + "Value": 606, + "Segment": "China" + }, + { + "Category": "Karen Lopez", + "Value": 121, + "Segment": "Japan" + }, + { + "Category": "Sandra Wright", + "Value": 767, + "Segment": "USA" + }, + { + "Category": "Sandra Wright", + "Value": 800, + "Segment": "China" + }, + { + "Category": "Sandra Wright", + "Value": 17, + "Segment": "Japan" + }, + { + "Category": "Daniel King", + "Value": 461, + "Segment": "USA" + }, + { + "Category": "Daniel King", + "Value": 808, + "Segment": "China" + }, + { + "Category": "Daniel King", + "Value": 496, + "Segment": "Japan" + }, + { + "Category": "Mark Taylor", + "Value": 418, + "Segment": "USA" + }, + { + "Category": "Mark Taylor", + "Value": 815, + "Segment": "China" + }, + { + "Category": "Mark Taylor", + "Value": 924, + "Segment": "Japan" + }, + { + "Category": "Sandra Thomas", + "Value": 949, + "Segment": "USA" + }, + { + "Category": "Sandra Thomas", + "Value": 326, + "Segment": "China" + }, + { + "Category": "Sandra Thomas", + "Value": 339, + "Segment": "Japan" + }, + { + "Category": "Karen Rodriguez", + "Value": 477, + "Segment": "USA" + }, + { + "Category": "Karen Rodriguez", + "Value": 782, + "Segment": "China" + }, + { + "Category": "Karen Rodriguez", + "Value": 953, + "Segment": "Japan" + }, + { + "Category": "Patricia Jackson", + "Value": 956, + "Segment": "USA" + }, + { + "Category": "Patricia Jackson", + "Value": 304, + "Segment": "China" + }, + { + "Category": "Patricia Jackson", + "Value": 765, + "Segment": "Japan" + }, + { + "Category": "Donna Hill", + "Value": 178, + "Segment": "USA" + }, + { + "Category": "Donna Hill", + "Value": 402, + "Segment": "China" + }, + { + "Category": "Donna Hill", + "Value": 363, + "Segment": "Japan" + }, + { + "Category": "Donna White", + "Value": 889, + "Segment": "USA" + }, + { + "Category": "Donna White", + "Value": 713, + "Segment": "China" + }, + { + "Category": "Donna White", + "Value": 993, + "Segment": "Japan" + }, + { + "Category": "Michael Brown", + "Value": 201, + "Segment": "USA" + }, + { + "Category": "Michael Brown", + "Value": 845, + "Segment": "China" + }, + { + "Category": "Michael Brown", + "Value": 228, + "Segment": "Japan" + }, + { + "Category": "Elizabeth Robinson", + "Value": 336, + "Segment": "USA" + }, + { + "Category": "Elizabeth Robinson", + "Value": 133, + "Segment": "China" + }, + { + "Category": "Elizabeth Robinson", + "Value": 220, + "Segment": "Japan" + }, + { + "Category": "Mary Jones", + "Value": 250, + "Segment": "USA" + }, + { + "Category": "Mary Jones", + "Value": 133, + "Segment": "China" + }, + { + "Category": "Mary Jones", + "Value": 154, + "Segment": "Japan" + }, + { + "Category": "Richard Rodriguez", + "Value": 925, + "Segment": "USA" + }, + { + "Category": "Richard Rodriguez", + "Value": 340, + "Segment": "China" + }, + { + "Category": "Richard Rodriguez", + "Value": 301, + "Segment": "Japan" + }, + { + "Category": "Christopher Clark", + "Value": 35, + "Segment": "USA" + }, + { + "Category": "Christopher Clark", + "Value": 460, + "Segment": "China" + }, + { + "Category": "Christopher Clark", + "Value": 71, + "Segment": "Japan" + }, + { + "Category": "Christopher Lopez", + "Value": 352, + "Segment": "USA" + }, + { + "Category": "Christopher Lopez", + "Value": 614, + "Segment": "China" + }, + { + "Category": "Christopher Lopez", + "Value": 763, + "Segment": "Japan" + }, + { + "Category": "Susan Ramirez", + "Value": 541, + "Segment": "USA" + }, + { + "Category": "Susan Ramirez", + "Value": 479, + "Segment": "China" + }, + { + "Category": "Susan Ramirez", + "Value": 864, + "Segment": "Japan" + }, + { + "Category": "Steven Wilson", + "Value": 869, + "Segment": "USA" + }, + { + "Category": "Steven Wilson", + "Value": 627, + "Segment": "China" + }, + { + "Category": "Steven Wilson", + "Value": 839, + "Segment": "Japan" + }, + { + "Category": "Paul Anderson", + "Value": 576, + "Segment": "USA" + }, + { + "Category": "Paul Anderson", + "Value": 959, + "Segment": "China" + }, + { + "Category": "Paul Anderson", + "Value": 898, + "Segment": "Japan" + }, + { + "Category": "Joseph Rodriguez", + "Value": 312, + "Segment": "USA" + }, + { + "Category": "Joseph Rodriguez", + "Value": 982, + "Segment": "China" + }, + { + "Category": "Joseph Rodriguez", + "Value": 341, + "Segment": "Japan" + }, + { + "Category": "Elizabeth Wright", + "Value": 797, + "Segment": "USA" + }, + { + "Category": "Elizabeth Wright", + "Value": 628, + "Segment": "China" + }, + { + "Category": "Elizabeth Wright", + "Value": 459, + "Segment": "Japan" + }, + { + "Category": "Kimberly Jackson", + "Value": 797, + "Segment": "USA" + }, + { + "Category": "Kimberly Jackson", + "Value": 622, + "Segment": "China" + }, + { + "Category": "Kimberly Jackson", + "Value": 199, + "Segment": "Japan" + }, + { + "Category": "Betty Hernandez", + "Value": 381, + "Segment": "USA" + }, + { + "Category": "Betty Hernandez", + "Value": 172, + "Segment": "China" + }, + { + "Category": "Betty Hernandez", + "Value": 503, + "Segment": "Japan" + }, + { + "Category": "David King", + "Value": 125, + "Segment": "USA" + }, + { + "Category": "David King", + "Value": 501, + "Segment": "China" + }, + { + "Category": "David King", + "Value": 725, + "Segment": "Japan" + }, + { + "Category": "Matthew Lopez", + "Value": 917, + "Segment": "USA" + }, + { + "Category": "Matthew Lopez", + "Value": 342, + "Segment": "China" + }, + { + "Category": "Matthew Lopez", + "Value": 549, + "Segment": "Japan" + }, + { + "Category": "Susan Hernandez", + "Value": 612, + "Segment": "USA" + }, + { + "Category": "Susan Hernandez", + "Value": 493, + "Segment": "China" + }, + { + "Category": "Susan Hernandez", + "Value": 381, + "Segment": "Japan" + }, + { + "Category": "Jennifer Lee", + "Value": 229, + "Segment": "USA" + }, + { + "Category": "Jennifer Lee", + "Value": 460, + "Segment": "China" + }, + { + "Category": "Jennifer Lee", + "Value": 616, + "Segment": "Japan" + }, + { + "Category": "Richard Flores", + "Value": 931, + "Segment": "USA" + }, + { + "Category": "Richard Flores", + "Value": 827, + "Segment": "China" + }, + { + "Category": "Richard Flores", + "Value": 419, + "Segment": "Japan" + }, + { + "Category": "John Anderson", + "Value": 137, + "Segment": "USA" + }, + { + "Category": "John Anderson", + "Value": 304, + "Segment": "China" + }, + { + "Category": "John Anderson", + "Value": 383, + "Segment": "Japan" + }, + { + "Category": "Kimberly Wright", + "Value": 901, + "Segment": "USA" + }, + { + "Category": "Kimberly Wright", + "Value": 295, + "Segment": "China" + }, + { + "Category": "Kimberly Wright", + "Value": 72, + "Segment": "Japan" + }, + { + "Category": "Joseph Williams", + "Value": 946, + "Segment": "USA" + }, + { + "Category": "Joseph Williams", + "Value": 375, + "Segment": "China" + }, + { + "Category": "Joseph Williams", + "Value": 974, + "Segment": "Japan" + }, + { + "Category": "Lisa Torres", + "Value": 276, + "Segment": "USA" + }, + { + "Category": "Lisa Torres", + "Value": 269, + "Segment": "China" + }, + { + "Category": "Lisa Torres", + "Value": 106, + "Segment": "Japan" + }, + { + "Category": "Andrew Rodriguez", + "Value": 621, + "Segment": "USA" + }, + { + "Category": "Andrew Rodriguez", + "Value": 110, + "Segment": "China" + }, + { + "Category": "Andrew Rodriguez", + "Value": 410, + "Segment": "Japan" + }, + { + "Category": "Karen Johnson", + "Value": 747, + "Segment": "USA" + }, + { + "Category": "Karen Johnson", + "Value": 324, + "Segment": "China" + }, + { + "Category": "Karen Johnson", + "Value": 923, + "Segment": "Japan" + }, + { + "Category": "Steven Jones", + "Value": 267, + "Segment": "USA" + }, + { + "Category": "Steven Jones", + "Value": 164, + "Segment": "China" + }, + { + "Category": "Steven Jones", + "Value": 676, + "Segment": "Japan" + }, + { + "Category": "Joshua Ramirez", + "Value": 42, + "Segment": "USA" + }, + { + "Category": "Joshua Ramirez", + "Value": 626, + "Segment": "China" + }, + { + "Category": "Joshua Ramirez", + "Value": 845, + "Segment": "Japan" + }, + { + "Category": "Emily Martinez", + "Value": 451, + "Segment": "USA" + }, + { + "Category": "Emily Martinez", + "Value": 992, + "Segment": "China" + }, + { + "Category": "Emily Martinez", + "Value": 634, + "Segment": "Japan" + }, + { + "Category": "Robert Walker", + "Value": 550, + "Segment": "USA" + }, + { + "Category": "Robert Walker", + "Value": 475, + "Segment": "China" + }, + { + "Category": "Robert Walker", + "Value": 642, + "Segment": "Japan" + }, + { + "Category": "Robert Lewis", + "Value": 559, + "Segment": "USA" + }, + { + "Category": "Robert Lewis", + "Value": 217, + "Segment": "China" + }, + { + "Category": "Robert Lewis", + "Value": 335, + "Segment": "Japan" + }, + { + "Category": "Sandra Lopez", + "Value": 811, + "Segment": "USA" + }, + { + "Category": "Sandra Lopez", + "Value": 928, + "Segment": "China" + }, + { + "Category": "Sandra Lopez", + "Value": 777, + "Segment": "Japan" + }, + { + "Category": "Nancy Miller", + "Value": 783, + "Segment": "USA" + }, + { + "Category": "Nancy Miller", + "Value": 24, + "Segment": "China" + }, + { + "Category": "Nancy Miller", + "Value": 382, + "Segment": "Japan" + }, + { + "Category": "Christopher Sanchez", + "Value": 495, + "Segment": "USA" + }, + { + "Category": "Christopher Sanchez", + "Value": 923, + "Segment": "China" + }, + { + "Category": "Christopher Sanchez", + "Value": 359, + "Segment": "Japan" + }, + { + "Category": "Daniel Flores", + "Value": 930, + "Segment": "USA" + }, + { + "Category": "Daniel Flores", + "Value": 796, + "Segment": "China" + }, + { + "Category": "Daniel Flores", + "Value": 975, + "Segment": "Japan" + }, + { + "Category": "Mary Walker", + "Value": 517, + "Segment": "USA" + }, + { + "Category": "Mary Walker", + "Value": 507, + "Segment": "China" + }, + { + "Category": "Mary Walker", + "Value": 950, + "Segment": "Japan" + }, + { + "Category": "Anthony Ramirez", + "Value": 610, + "Segment": "USA" + }, + { + "Category": "Anthony Ramirez", + "Value": 254, + "Segment": "China" + }, + { + "Category": "Anthony Ramirez", + "Value": 103, + "Segment": "Japan" + }, + { + "Category": "Anthony Hill", + "Value": 363, + "Segment": "USA" + }, + { + "Category": "Anthony Hill", + "Value": 698, + "Segment": "China" + }, + { + "Category": "Anthony Hill", + "Value": 656, + "Segment": "Japan" + }, + { + "Category": "Matthew Miller", + "Value": 663, + "Segment": "USA" + }, + { + "Category": "Matthew Miller", + "Value": 326, + "Segment": "China" + }, + { + "Category": "Matthew Miller", + "Value": 606, + "Segment": "Japan" + }, + { + "Category": "Andrew King", + "Value": 918, + "Segment": "USA" + }, + { + "Category": "Andrew King", + "Value": 537, + "Segment": "China" + }, + { + "Category": "Andrew King", + "Value": 946, + "Segment": "Japan" + }, + { + "Category": "William Perez", + "Value": 596, + "Segment": "USA" + }, + { + "Category": "William Perez", + "Value": 859, + "Segment": "China" + }, + { + "Category": "William Perez", + "Value": 693, + "Segment": "Japan" + }, + { + "Category": "William Martinez", + "Value": 687, + "Segment": "USA" + }, + { + "Category": "William Martinez", + "Value": 507, + "Segment": "China" + }, + { + "Category": "William Martinez", + "Value": 499, + "Segment": "Japan" + }, + { + "Category": "Margaret Garcia", + "Value": 579, + "Segment": "USA" + }, + { + "Category": "Margaret Garcia", + "Value": 879, + "Segment": "China" + }, + { + "Category": "Margaret Garcia", + "Value": 680, + "Segment": "Japan" + }, + { + "Category": "Barbara Anderson", + "Value": 47, + "Segment": "USA" + }, + { + "Category": "Barbara Anderson", + "Value": 265, + "Segment": "China" + }, + { + "Category": "Barbara Anderson", + "Value": 385, + "Segment": "Japan" + }, + { + "Category": "Thomas Smith", + "Value": 789, + "Segment": "USA" + }, + { + "Category": "Thomas Smith", + "Value": 127, + "Segment": "China" + }, + { + "Category": "Thomas Smith", + "Value": 276, + "Segment": "Japan" + }, + { + "Category": "Kimberly Thomas", + "Value": 756, + "Segment": "USA" + }, + { + "Category": "Kimberly Thomas", + "Value": 677, + "Segment": "China" + }, + { + "Category": "Kimberly Thomas", + "Value": 416, + "Segment": "Japan" + }, + { + "Category": "Karen Garcia", + "Value": 823, + "Segment": "USA" + }, + { + "Category": "Karen Garcia", + "Value": 801, + "Segment": "China" + }, + { + "Category": "Karen Garcia", + "Value": 415, + "Segment": "Japan" + }, + { + "Category": "Sarah Torres", + "Value": 697, + "Segment": "USA" + }, + { + "Category": "Sarah Torres", + "Value": 665, + "Segment": "China" + }, + { + "Category": "Sarah Torres", + "Value": 152, + "Segment": "Japan" + }, + { + "Category": "Emily Hill", + "Value": 331, + "Segment": "USA" + }, + { + "Category": "Emily Hill", + "Value": 387, + "Segment": "China" + }, + { + "Category": "Emily Hill", + "Value": 797, + "Segment": "Japan" + }, + { + "Category": "Sarah Walker", + "Value": 235, + "Segment": "USA" + }, + { + "Category": "Sarah Walker", + "Value": 337, + "Segment": "China" + }, + { + "Category": "Sarah Walker", + "Value": 40, + "Segment": "Japan" + }, + { + "Category": "Michael Clark", + "Value": 216, + "Segment": "USA" + }, + { + "Category": "Michael Clark", + "Value": 25, + "Segment": "China" + }, + { + "Category": "Michael Clark", + "Value": 970, + "Segment": "Japan" + }, + { + "Category": "Joshua Wright", + "Value": 21, + "Segment": "USA" + }, + { + "Category": "Joshua Wright", + "Value": 925, + "Segment": "China" + }, + { + "Category": "Joshua Wright", + "Value": 781, + "Segment": "Japan" + }, + { + "Category": "Andrew Walker", + "Value": 696, + "Segment": "USA" + }, + { + "Category": "Andrew Walker", + "Value": 224, + "Segment": "China" + }, + { + "Category": "Andrew Walker", + "Value": 961, + "Segment": "Japan" + }, + { + "Category": "Nancy Young", + "Value": 520, + "Segment": "USA" + }, + { + "Category": "Nancy Young", + "Value": 730, + "Segment": "China" + }, + { + "Category": "Nancy Young", + "Value": 811, + "Segment": "Japan" + }, + { + "Category": "John Lewis", + "Value": 501, + "Segment": "USA" + }, + { + "Category": "John Lewis", + "Value": 997, + "Segment": "China" + }, + { + "Category": "John Lewis", + "Value": 563, + "Segment": "Japan" + }, + { + "Category": "John Brown", + "Value": 36, + "Segment": "USA" + }, + { + "Category": "John Brown", + "Value": 686, + "Segment": "China" + }, + { + "Category": "John Brown", + "Value": 311, + "Segment": "Japan" + }, + { + "Category": "Anthony Thomas", + "Value": 619, + "Segment": "USA" + }, + { + "Category": "Anthony Thomas", + "Value": 868, + "Segment": "China" + }, + { + "Category": "Anthony Thomas", + "Value": 990, + "Segment": "Japan" + }, + { + "Category": "Joshua Moore", + "Value": 767, + "Segment": "USA" + }, + { + "Category": "Joshua Moore", + "Value": 16, + "Segment": "China" + }, + { + "Category": "Joshua Moore", + "Value": 193, + "Segment": "Japan" + }, + { + "Category": "John Hernandez", + "Value": 761, + "Segment": "USA" + }, + { + "Category": "John Hernandez", + "Value": 113, + "Segment": "China" + }, + { + "Category": "John Hernandez", + "Value": 811, + "Segment": "Japan" + }, + { + "Category": "James Perez", + "Value": 663, + "Segment": "USA" + }, + { + "Category": "James Perez", + "Value": 809, + "Segment": "China" + }, + { + "Category": "James Perez", + "Value": 723, + "Segment": "Japan" + }, + { + "Category": "James Scott", + "Value": 404, + "Segment": "USA" + }, + { + "Category": "James Scott", + "Value": 457, + "Segment": "China" + }, + { + "Category": "James Scott", + "Value": 918, + "Segment": "Japan" + }, + { + "Category": "Matthew Sanchez", + "Value": 267, + "Segment": "USA" + }, + { + "Category": "Matthew Sanchez", + "Value": 995, + "Segment": "China" + }, + { + "Category": "Matthew Sanchez", + "Value": 552, + "Segment": "Japan" + }, + { + "Category": "Joseph Sanchez", + "Value": 461, + "Segment": "USA" + }, + { + "Category": "Joseph Sanchez", + "Value": 738, + "Segment": "China" + }, + { + "Category": "Joseph Sanchez", + "Value": 91, + "Segment": "Japan" + }, + { + "Category": "Paul Perez", + "Value": 155, + "Segment": "USA" + }, + { + "Category": "Paul Perez", + "Value": 906, + "Segment": "China" + }, + { + "Category": "Paul Perez", + "Value": 187, + "Segment": "Japan" + }, + { + "Category": "Joshua Rodriguez", + "Value": 271, + "Segment": "USA" + }, + { + "Category": "Joshua Rodriguez", + "Value": 16, + "Segment": "China" + }, + { + "Category": "Joshua Rodriguez", + "Value": 208, + "Segment": "Japan" + }, + { + "Category": "Anthony Sanchez", + "Value": 756, + "Segment": "USA" + }, + { + "Category": "Anthony Sanchez", + "Value": 324, + "Segment": "China" + }, + { + "Category": "Anthony Sanchez", + "Value": 751, + "Segment": "Japan" + }, + { + "Category": "Linda King", + "Value": 177, + "Segment": "USA" + }, + { + "Category": "Linda King", + "Value": 583, + "Segment": "China" + }, + { + "Category": "Linda King", + "Value": 927, + "Segment": "Japan" + }, + { + "Category": "Elizabeth Smith", + "Value": 679, + "Segment": "USA" + }, + { + "Category": "Elizabeth Smith", + "Value": 616, + "Segment": "China" + }, + { + "Category": "Elizabeth Smith", + "Value": 371, + "Segment": "Japan" + }, + { + "Category": "Sandra Miller", + "Value": 526, + "Segment": "USA" + }, + { + "Category": "Sandra Miller", + "Value": 209, + "Segment": "China" + }, + { + "Category": "Sandra Miller", + "Value": 873, + "Segment": "Japan" + }, + { + "Category": "Nancy Allen", + "Value": 164, + "Segment": "USA" + }, + { + "Category": "Nancy Allen", + "Value": 73, + "Segment": "China" + }, + { + "Category": "Nancy Allen", + "Value": 325, + "Segment": "Japan" + }, + { + "Category": "Patricia Brown", + "Value": 651, + "Segment": "USA" + }, + { + "Category": "Patricia Brown", + "Value": 651, + "Segment": "China" + }, + { + "Category": "Patricia Brown", + "Value": 271, + "Segment": "Japan" + }, + { + "Category": "Lisa Clark", + "Value": 957, + "Segment": "USA" + }, + { + "Category": "Lisa Clark", + "Value": 767, + "Segment": "China" + }, + { + "Category": "Lisa Clark", + "Value": 654, + "Segment": "Japan" + }, + { + "Category": "Lisa Thompson", + "Value": 218, + "Segment": "USA" + }, + { + "Category": "Lisa Thompson", + "Value": 69, + "Segment": "China" + }, + { + "Category": "Lisa Thompson", + "Value": 168, + "Segment": "Japan" + }, + { + "Category": "Nancy Clark", + "Value": 741, + "Segment": "USA" + }, + { + "Category": "Nancy Clark", + "Value": 650, + "Segment": "China" + }, + { + "Category": "Nancy Clark", + "Value": 198, + "Segment": "Japan" + }, + { + "Category": "Steven Miller", + "Value": 401, + "Segment": "USA" + }, + { + "Category": "Steven Miller", + "Value": 552, + "Segment": "China" + }, + { + "Category": "Steven Miller", + "Value": 971, + "Segment": "Japan" + }, + { + "Category": "Charles King", + "Value": 224, + "Segment": "USA" + }, + { + "Category": "Charles King", + "Value": 919, + "Segment": "China" + }, + { + "Category": "Charles King", + "Value": 937, + "Segment": "Japan" + }, + { + "Category": "Paul Harris", + "Value": 449, + "Segment": "USA" + }, + { + "Category": "Paul Harris", + "Value": 310, + "Segment": "China" + }, + { + "Category": "Paul Harris", + "Value": 73, + "Segment": "Japan" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/grouped-bar-chart/03-card6.flint.json b/test-harness/excel/evaluations/inputs/grouped-bar-chart/03-card6.flint.json new file mode 100644 index 00000000..09dd72a9 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/grouped-bar-chart/03-card6.flint.json @@ -0,0 +1,173 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity", + "ColorVal": "Rank" + }, + "chart_spec": { + "chartType": "Grouped Bar Chart", + "encodings": { + "x": "Category", + "y": "Value", + "group": "ColorVal" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Value": 511, + "ColorVal": 1 + }, + { + "Category": "Laptop", + "Value": 326, + "ColorVal": 2 + }, + { + "Category": "Laptop", + "Value": 387, + "ColorVal": 3 + }, + { + "Category": "Laptop", + "Value": 159, + "ColorVal": 4 + }, + { + "Category": "Laptop", + "Value": 89, + "ColorVal": 5 + }, + { + "Category": "Phone", + "Value": 496, + "ColorVal": 1 + }, + { + "Category": "Phone", + "Value": 825, + "ColorVal": 2 + }, + { + "Category": "Phone", + "Value": 421, + "ColorVal": 3 + }, + { + "Category": "Phone", + "Value": 804, + "ColorVal": 4 + }, + { + "Category": "Phone", + "Value": 437, + "ColorVal": 5 + }, + { + "Category": "Tablet", + "Value": 874, + "ColorVal": 1 + }, + { + "Category": "Tablet", + "Value": 883, + "ColorVal": 2 + }, + { + "Category": "Tablet", + "Value": 858, + "ColorVal": 3 + }, + { + "Category": "Tablet", + "Value": 39, + "ColorVal": 4 + }, + { + "Category": "Tablet", + "Value": 933, + "ColorVal": 5 + }, + { + "Category": "Desktop", + "Value": 470, + "ColorVal": 1 + }, + { + "Category": "Desktop", + "Value": 111, + "ColorVal": 2 + }, + { + "Category": "Desktop", + "Value": 637, + "ColorVal": 3 + }, + { + "Category": "Desktop", + "Value": 951, + "ColorVal": 4 + }, + { + "Category": "Desktop", + "Value": 239, + "ColorVal": 5 + }, + { + "Category": "Monitor", + "Value": 774, + "ColorVal": 1 + }, + { + "Category": "Monitor", + "Value": 839, + "ColorVal": 2 + }, + { + "Category": "Monitor", + "Value": 182, + "ColorVal": 3 + }, + { + "Category": "Monitor", + "Value": 403, + "ColorVal": 4 + }, + { + "Category": "Monitor", + "Value": 901, + "ColorVal": 5 + }, + { + "Category": "Keyboard", + "Value": 898, + "ColorVal": 1 + }, + { + "Category": "Keyboard", + "Value": 914, + "ColorVal": 2 + }, + { + "Category": "Keyboard", + "Value": 511, + "ColorVal": 3 + }, + { + "Category": "Keyboard", + "Value": 602, + "ColorVal": 4 + }, + { + "Category": "Keyboard", + "Value": 77, + "ColorVal": 5 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/grouped-bar-chart/04-card12.flint.json b/test-harness/excel/evaluations/inputs/grouped-bar-chart/04-card12.flint.json new file mode 100644 index 00000000..12ff785c --- /dev/null +++ b/test-harness/excel/evaluations/inputs/grouped-bar-chart/04-card12.flint.json @@ -0,0 +1,203 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Grouped Bar Chart", + "encodings": { + "x": "Date", + "y": "Value", + "group": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 980, + "Segment": "Laptop" + }, + { + "Date": "2020-01-01", + "Value": 60, + "Segment": "Phone" + }, + { + "Date": "2020-01-01", + "Value": 702, + "Segment": "Tablet" + }, + { + "Date": "2020-04-01", + "Value": 804, + "Segment": "Laptop" + }, + { + "Date": "2020-04-01", + "Value": 604, + "Segment": "Phone" + }, + { + "Date": "2020-04-01", + "Value": 569, + "Segment": "Tablet" + }, + { + "Date": "2020-07-01", + "Value": 229, + "Segment": "Laptop" + }, + { + "Date": "2020-07-01", + "Value": 441, + "Segment": "Phone" + }, + { + "Date": "2020-07-01", + "Value": 431, + "Segment": "Tablet" + }, + { + "Date": "2020-09-30", + "Value": 262, + "Segment": "Laptop" + }, + { + "Date": "2020-09-30", + "Value": 656, + "Segment": "Phone" + }, + { + "Date": "2020-09-30", + "Value": 77, + "Segment": "Tablet" + }, + { + "Date": "2020-12-31", + "Value": 906, + "Segment": "Laptop" + }, + { + "Date": "2020-12-31", + "Value": 69, + "Segment": "Phone" + }, + { + "Date": "2020-12-31", + "Value": 771, + "Segment": "Tablet" + }, + { + "Date": "2021-04-01", + "Value": 356, + "Segment": "Laptop" + }, + { + "Date": "2021-04-01", + "Value": 790, + "Segment": "Phone" + }, + { + "Date": "2021-04-01", + "Value": 484, + "Segment": "Tablet" + }, + { + "Date": "2021-07-01", + "Value": 923, + "Segment": "Laptop" + }, + { + "Date": "2021-07-01", + "Value": 185, + "Segment": "Phone" + }, + { + "Date": "2021-07-01", + "Value": 540, + "Segment": "Tablet" + }, + { + "Date": "2021-09-30", + "Value": 872, + "Segment": "Laptop" + }, + { + "Date": "2021-09-30", + "Value": 189, + "Segment": "Phone" + }, + { + "Date": "2021-09-30", + "Value": 587, + "Segment": "Tablet" + }, + { + "Date": "2021-12-31", + "Value": 238, + "Segment": "Laptop" + }, + { + "Date": "2021-12-31", + "Value": 432, + "Segment": "Phone" + }, + { + "Date": "2021-12-31", + "Value": 217, + "Segment": "Tablet" + }, + { + "Date": "2022-04-01", + "Value": 58, + "Segment": "Laptop" + }, + { + "Date": "2022-04-01", + "Value": 473, + "Segment": "Phone" + }, + { + "Date": "2022-04-01", + "Value": 139, + "Segment": "Tablet" + }, + { + "Date": "2022-07-01", + "Value": 152, + "Segment": "Laptop" + }, + { + "Date": "2022-07-01", + "Value": 413, + "Segment": "Phone" + }, + { + "Date": "2022-07-01", + "Value": 554, + "Segment": "Tablet" + }, + { + "Date": "2022-09-30", + "Value": 695, + "Segment": "Laptop" + }, + { + "Date": "2022-09-30", + "Value": 951, + "Segment": "Phone" + }, + { + "Date": "2022-09-30", + "Value": 127, + "Segment": "Tablet" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/grouped-bar-chart/05-card5.flint.json b/test-harness/excel/evaluations/inputs/grouped-bar-chart/05-card5.flint.json new file mode 100644 index 00000000..e3b3dd52 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/grouped-bar-chart/05-card5.flint.json @@ -0,0 +1,123 @@ +{ + "semantic_types": { + "X": "Quantity", + "Value": "Quantity", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Grouped Bar Chart", + "encodings": { + "x": "X", + "y": "Value", + "group": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 1, + "Value": 39, + "Segment": "Laptop" + }, + { + "X": 1, + "Value": 154, + "Segment": "Phone" + }, + { + "X": 1, + "Value": 518, + "Segment": "Tablet" + }, + { + "X": 1, + "Value": 844, + "Segment": "Desktop" + }, + { + "X": 2, + "Value": 774, + "Segment": "Laptop" + }, + { + "X": 2, + "Value": 490, + "Segment": "Phone" + }, + { + "X": 2, + "Value": 270, + "Segment": "Tablet" + }, + { + "X": 2, + "Value": 895, + "Segment": "Desktop" + }, + { + "X": 3, + "Value": 843, + "Segment": "Laptop" + }, + { + "X": 3, + "Value": 361, + "Segment": "Phone" + }, + { + "X": 3, + "Value": 984, + "Segment": "Tablet" + }, + { + "X": 3, + "Value": 36, + "Segment": "Desktop" + }, + { + "X": 4, + "Value": 30, + "Segment": "Laptop" + }, + { + "X": 4, + "Value": 201, + "Segment": "Phone" + }, + { + "X": 4, + "Value": 215, + "Segment": "Tablet" + }, + { + "X": 4, + "Value": 728, + "Segment": "Desktop" + }, + { + "X": 5, + "Value": 139, + "Segment": "Laptop" + }, + { + "X": 5, + "Value": 629, + "Segment": "Phone" + }, + { + "X": 5, + "Value": 232, + "Segment": "Tablet" + }, + { + "X": 5, + "Value": 94, + "Segment": "Desktop" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/grouped-bar-chart/06-card24.flint.json b/test-harness/excel/evaluations/inputs/grouped-bar-chart/06-card24.flint.json new file mode 100644 index 00000000..2031d434 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/grouped-bar-chart/06-card24.flint.json @@ -0,0 +1,143 @@ +{ + "semantic_types": { + "X": "Quantity", + "Group": "Category", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Grouped Bar Chart", + "encodings": { + "x": "X", + "y": "Group", + "group": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Group": "Laptop", + "X": 354, + "Segment": "USA" + }, + { + "Group": "Laptop", + "X": 992, + "Segment": "China" + }, + { + "Group": "Laptop", + "X": 729, + "Segment": "Japan" + }, + { + "Group": "Laptop", + "X": 518, + "Segment": "Germany" + }, + { + "Group": "Phone", + "X": 465, + "Segment": "USA" + }, + { + "Group": "Phone", + "X": 707, + "Segment": "China" + }, + { + "Group": "Phone", + "X": 855, + "Segment": "Japan" + }, + { + "Group": "Phone", + "X": 167, + "Segment": "Germany" + }, + { + "Group": "Tablet", + "X": 360, + "Segment": "USA" + }, + { + "Group": "Tablet", + "X": 283, + "Segment": "China" + }, + { + "Group": "Tablet", + "X": 710, + "Segment": "Japan" + }, + { + "Group": "Tablet", + "X": 975, + "Segment": "Germany" + }, + { + "Group": "Desktop", + "X": 925, + "Segment": "USA" + }, + { + "Group": "Desktop", + "X": 990, + "Segment": "China" + }, + { + "Group": "Desktop", + "X": 899, + "Segment": "Japan" + }, + { + "Group": "Desktop", + "X": 14, + "Segment": "Germany" + }, + { + "Group": "Monitor", + "X": 928, + "Segment": "USA" + }, + { + "Group": "Monitor", + "X": 903, + "Segment": "China" + }, + { + "Group": "Monitor", + "X": 442, + "Segment": "Japan" + }, + { + "Group": "Monitor", + "X": 548, + "Segment": "Germany" + }, + { + "Group": "Keyboard", + "X": 64, + "Segment": "USA" + }, + { + "Group": "Keyboard", + "X": 215, + "Segment": "China" + }, + { + "Group": "Keyboard", + "X": 920, + "Segment": "Japan" + }, + { + "Group": "Keyboard", + "X": 750, + "Segment": "Germany" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/grouped-bar-chart/07-card30.flint.json b/test-harness/excel/evaluations/inputs/grouped-bar-chart/07-card30.flint.json new file mode 100644 index 00000000..937a2c2e --- /dev/null +++ b/test-harness/excel/evaluations/inputs/grouped-bar-chart/07-card30.flint.json @@ -0,0 +1,173 @@ +{ + "semantic_types": { + "X": "Quantity", + "EndDate": "Date", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Grouped Bar Chart", + "encodings": { + "x": "X", + "y": "EndDate", + "group": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "EndDate": "2020-01-01", + "X": 734, + "Segment": "Laptop" + }, + { + "EndDate": "2020-01-01", + "X": 68, + "Segment": "Phone" + }, + { + "EndDate": "2020-01-01", + "X": 719, + "Segment": "Tablet" + }, + { + "EndDate": "2020-04-19", + "X": 798, + "Segment": "Laptop" + }, + { + "EndDate": "2020-04-19", + "X": 602, + "Segment": "Phone" + }, + { + "EndDate": "2020-04-19", + "X": 96, + "Segment": "Tablet" + }, + { + "EndDate": "2020-08-07", + "X": 782, + "Segment": "Laptop" + }, + { + "EndDate": "2020-08-07", + "X": 577, + "Segment": "Phone" + }, + { + "EndDate": "2020-08-07", + "X": 832, + "Segment": "Tablet" + }, + { + "EndDate": "2020-11-24", + "X": 60, + "Segment": "Laptop" + }, + { + "EndDate": "2020-11-24", + "X": 806, + "Segment": "Phone" + }, + { + "EndDate": "2020-11-24", + "X": 148, + "Segment": "Tablet" + }, + { + "EndDate": "2021-03-14", + "X": 295, + "Segment": "Laptop" + }, + { + "EndDate": "2021-03-14", + "X": 766, + "Segment": "Phone" + }, + { + "EndDate": "2021-03-14", + "X": 213, + "Segment": "Tablet" + }, + { + "EndDate": "2021-07-01", + "X": 588, + "Segment": "Laptop" + }, + { + "EndDate": "2021-07-01", + "X": 199, + "Segment": "Phone" + }, + { + "EndDate": "2021-07-01", + "X": 91, + "Segment": "Tablet" + }, + { + "EndDate": "2021-10-19", + "X": 138, + "Segment": "Laptop" + }, + { + "EndDate": "2021-10-19", + "X": 116, + "Segment": "Phone" + }, + { + "EndDate": "2021-10-19", + "X": 189, + "Segment": "Tablet" + }, + { + "EndDate": "2022-02-05", + "X": 348, + "Segment": "Laptop" + }, + { + "EndDate": "2022-02-05", + "X": 157, + "Segment": "Phone" + }, + { + "EndDate": "2022-02-05", + "X": 997, + "Segment": "Tablet" + }, + { + "EndDate": "2022-05-26", + "X": 947, + "Segment": "Laptop" + }, + { + "EndDate": "2022-05-26", + "X": 103, + "Segment": "Phone" + }, + { + "EndDate": "2022-05-26", + "X": 785, + "Segment": "Tablet" + }, + { + "EndDate": "2022-09-12", + "X": 114, + "Segment": "Laptop" + }, + { + "EndDate": "2022-09-12", + "X": 694, + "Segment": "Phone" + }, + { + "EndDate": "2022-09-12", + "X": 339, + "Segment": "Tablet" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/grouped-bar-chart/08-card8.flint.json b/test-harness/excel/evaluations/inputs/grouped-bar-chart/08-card8.flint.json new file mode 100644 index 00000000..d871d376 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/grouped-bar-chart/08-card8.flint.json @@ -0,0 +1,2023 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity", + "ColorVal": "Rank" + }, + "chart_spec": { + "chartType": "Grouped Bar Chart", + "encodings": { + "x": "Category", + "y": "Value", + "group": "ColorVal" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Value": 356, + "ColorVal": 1 + }, + { + "Category": "Laptop", + "Value": 359, + "ColorVal": 2 + }, + { + "Category": "Laptop", + "Value": 250, + "ColorVal": 3 + }, + { + "Category": "Laptop", + "Value": 74, + "ColorVal": 4 + }, + { + "Category": "Laptop", + "Value": 721, + "ColorVal": 5 + }, + { + "Category": "Laptop", + "Value": 502, + "ColorVal": 6 + }, + { + "Category": "Laptop", + "Value": 859, + "ColorVal": 7 + }, + { + "Category": "Laptop", + "Value": 809, + "ColorVal": 8 + }, + { + "Category": "Laptop", + "Value": 272, + "ColorVal": 9 + }, + { + "Category": "Laptop", + "Value": 897, + "ColorVal": 10 + }, + { + "Category": "Laptop", + "Value": 853, + "ColorVal": 11 + }, + { + "Category": "Laptop", + "Value": 691, + "ColorVal": 12 + }, + { + "Category": "Laptop", + "Value": 802, + "ColorVal": 13 + }, + { + "Category": "Laptop", + "Value": 881, + "ColorVal": 14 + }, + { + "Category": "Laptop", + "Value": 680, + "ColorVal": 15 + }, + { + "Category": "Laptop", + "Value": 755, + "ColorVal": 16 + }, + { + "Category": "Laptop", + "Value": 17, + "ColorVal": 17 + }, + { + "Category": "Laptop", + "Value": 488, + "ColorVal": 18 + }, + { + "Category": "Laptop", + "Value": 402, + "ColorVal": 19 + }, + { + "Category": "Laptop", + "Value": 245, + "ColorVal": 20 + }, + { + "Category": "Laptop", + "Value": 291, + "ColorVal": 21 + }, + { + "Category": "Laptop", + "Value": 782, + "ColorVal": 22 + }, + { + "Category": "Laptop", + "Value": 860, + "ColorVal": 23 + }, + { + "Category": "Laptop", + "Value": 216, + "ColorVal": 24 + }, + { + "Category": "Laptop", + "Value": 87, + "ColorVal": 25 + }, + { + "Category": "Laptop", + "Value": 436, + "ColorVal": 26 + }, + { + "Category": "Laptop", + "Value": 283, + "ColorVal": 27 + }, + { + "Category": "Laptop", + "Value": 707, + "ColorVal": 28 + }, + { + "Category": "Laptop", + "Value": 464, + "ColorVal": 29 + }, + { + "Category": "Laptop", + "Value": 308, + "ColorVal": 30 + }, + { + "Category": "Laptop", + "Value": 915, + "ColorVal": 31 + }, + { + "Category": "Laptop", + "Value": 381, + "ColorVal": 32 + }, + { + "Category": "Laptop", + "Value": 382, + "ColorVal": 33 + }, + { + "Category": "Laptop", + "Value": 193, + "ColorVal": 34 + }, + { + "Category": "Laptop", + "Value": 462, + "ColorVal": 35 + }, + { + "Category": "Laptop", + "Value": 560, + "ColorVal": 36 + }, + { + "Category": "Laptop", + "Value": 95, + "ColorVal": 37 + }, + { + "Category": "Laptop", + "Value": 655, + "ColorVal": 38 + }, + { + "Category": "Laptop", + "Value": 972, + "ColorVal": 39 + }, + { + "Category": "Laptop", + "Value": 870, + "ColorVal": 40 + }, + { + "Category": "Laptop", + "Value": 112, + "ColorVal": 41 + }, + { + "Category": "Laptop", + "Value": 102, + "ColorVal": 42 + }, + { + "Category": "Laptop", + "Value": 826, + "ColorVal": 43 + }, + { + "Category": "Laptop", + "Value": 794, + "ColorVal": 44 + }, + { + "Category": "Laptop", + "Value": 810, + "ColorVal": 45 + }, + { + "Category": "Laptop", + "Value": 577, + "ColorVal": 46 + }, + { + "Category": "Laptop", + "Value": 754, + "ColorVal": 47 + }, + { + "Category": "Laptop", + "Value": 232, + "ColorVal": 48 + }, + { + "Category": "Laptop", + "Value": 597, + "ColorVal": 49 + }, + { + "Category": "Laptop", + "Value": 863, + "ColorVal": 50 + }, + { + "Category": "Phone", + "Value": 100, + "ColorVal": 1 + }, + { + "Category": "Phone", + "Value": 14, + "ColorVal": 2 + }, + { + "Category": "Phone", + "Value": 892, + "ColorVal": 3 + }, + { + "Category": "Phone", + "Value": 115, + "ColorVal": 4 + }, + { + "Category": "Phone", + "Value": 281, + "ColorVal": 5 + }, + { + "Category": "Phone", + "Value": 833, + "ColorVal": 6 + }, + { + "Category": "Phone", + "Value": 217, + "ColorVal": 7 + }, + { + "Category": "Phone", + "Value": 56, + "ColorVal": 8 + }, + { + "Category": "Phone", + "Value": 898, + "ColorVal": 9 + }, + { + "Category": "Phone", + "Value": 737, + "ColorVal": 10 + }, + { + "Category": "Phone", + "Value": 987, + "ColorVal": 11 + }, + { + "Category": "Phone", + "Value": 778, + "ColorVal": 12 + }, + { + "Category": "Phone", + "Value": 575, + "ColorVal": 13 + }, + { + "Category": "Phone", + "Value": 505, + "ColorVal": 14 + }, + { + "Category": "Phone", + "Value": 41, + "ColorVal": 15 + }, + { + "Category": "Phone", + "Value": 911, + "ColorVal": 16 + }, + { + "Category": "Phone", + "Value": 180, + "ColorVal": 17 + }, + { + "Category": "Phone", + "Value": 505, + "ColorVal": 18 + }, + { + "Category": "Phone", + "Value": 783, + "ColorVal": 19 + }, + { + "Category": "Phone", + "Value": 789, + "ColorVal": 20 + }, + { + "Category": "Phone", + "Value": 983, + "ColorVal": 21 + }, + { + "Category": "Phone", + "Value": 445, + "ColorVal": 22 + }, + { + "Category": "Phone", + "Value": 446, + "ColorVal": 23 + }, + { + "Category": "Phone", + "Value": 116, + "ColorVal": 24 + }, + { + "Category": "Phone", + "Value": 904, + "ColorVal": 25 + }, + { + "Category": "Phone", + "Value": 780, + "ColorVal": 26 + }, + { + "Category": "Phone", + "Value": 239, + "ColorVal": 27 + }, + { + "Category": "Phone", + "Value": 928, + "ColorVal": 28 + }, + { + "Category": "Phone", + "Value": 299, + "ColorVal": 29 + }, + { + "Category": "Phone", + "Value": 602, + "ColorVal": 30 + }, + { + "Category": "Phone", + "Value": 489, + "ColorVal": 31 + }, + { + "Category": "Phone", + "Value": 750, + "ColorVal": 32 + }, + { + "Category": "Phone", + "Value": 262, + "ColorVal": 33 + }, + { + "Category": "Phone", + "Value": 321, + "ColorVal": 34 + }, + { + "Category": "Phone", + "Value": 215, + "ColorVal": 35 + }, + { + "Category": "Phone", + "Value": 390, + "ColorVal": 36 + }, + { + "Category": "Phone", + "Value": 73, + "ColorVal": 37 + }, + { + "Category": "Phone", + "Value": 566, + "ColorVal": 38 + }, + { + "Category": "Phone", + "Value": 975, + "ColorVal": 39 + }, + { + "Category": "Phone", + "Value": 117, + "ColorVal": 40 + }, + { + "Category": "Phone", + "Value": 495, + "ColorVal": 41 + }, + { + "Category": "Phone", + "Value": 755, + "ColorVal": 42 + }, + { + "Category": "Phone", + "Value": 587, + "ColorVal": 43 + }, + { + "Category": "Phone", + "Value": 611, + "ColorVal": 44 + }, + { + "Category": "Phone", + "Value": 839, + "ColorVal": 45 + }, + { + "Category": "Phone", + "Value": 163, + "ColorVal": 46 + }, + { + "Category": "Phone", + "Value": 329, + "ColorVal": 47 + }, + { + "Category": "Phone", + "Value": 720, + "ColorVal": 48 + }, + { + "Category": "Phone", + "Value": 781, + "ColorVal": 49 + }, + { + "Category": "Phone", + "Value": 982, + "ColorVal": 50 + }, + { + "Category": "Tablet", + "Value": 606, + "ColorVal": 1 + }, + { + "Category": "Tablet", + "Value": 420, + "ColorVal": 2 + }, + { + "Category": "Tablet", + "Value": 758, + "ColorVal": 3 + }, + { + "Category": "Tablet", + "Value": 918, + "ColorVal": 4 + }, + { + "Category": "Tablet", + "Value": 461, + "ColorVal": 5 + }, + { + "Category": "Tablet", + "Value": 492, + "ColorVal": 6 + }, + { + "Category": "Tablet", + "Value": 110, + "ColorVal": 7 + }, + { + "Category": "Tablet", + "Value": 163, + "ColorVal": 8 + }, + { + "Category": "Tablet", + "Value": 902, + "ColorVal": 9 + }, + { + "Category": "Tablet", + "Value": 35, + "ColorVal": 10 + }, + { + "Category": "Tablet", + "Value": 319, + "ColorVal": 11 + }, + { + "Category": "Tablet", + "Value": 560, + "ColorVal": 12 + }, + { + "Category": "Tablet", + "Value": 478, + "ColorVal": 13 + }, + { + "Category": "Tablet", + "Value": 573, + "ColorVal": 14 + }, + { + "Category": "Tablet", + "Value": 175, + "ColorVal": 15 + }, + { + "Category": "Tablet", + "Value": 177, + "ColorVal": 16 + }, + { + "Category": "Tablet", + "Value": 73, + "ColorVal": 17 + }, + { + "Category": "Tablet", + "Value": 42, + "ColorVal": 18 + }, + { + "Category": "Tablet", + "Value": 570, + "ColorVal": 19 + }, + { + "Category": "Tablet", + "Value": 479, + "ColorVal": 20 + }, + { + "Category": "Tablet", + "Value": 980, + "ColorVal": 21 + }, + { + "Category": "Tablet", + "Value": 938, + "ColorVal": 22 + }, + { + "Category": "Tablet", + "Value": 721, + "ColorVal": 23 + }, + { + "Category": "Tablet", + "Value": 577, + "ColorVal": 24 + }, + { + "Category": "Tablet", + "Value": 684, + "ColorVal": 25 + }, + { + "Category": "Tablet", + "Value": 629, + "ColorVal": 26 + }, + { + "Category": "Tablet", + "Value": 853, + "ColorVal": 27 + }, + { + "Category": "Tablet", + "Value": 527, + "ColorVal": 28 + }, + { + "Category": "Tablet", + "Value": 513, + "ColorVal": 29 + }, + { + "Category": "Tablet", + "Value": 141, + "ColorVal": 30 + }, + { + "Category": "Tablet", + "Value": 926, + "ColorVal": 31 + }, + { + "Category": "Tablet", + "Value": 479, + "ColorVal": 32 + }, + { + "Category": "Tablet", + "Value": 717, + "ColorVal": 33 + }, + { + "Category": "Tablet", + "Value": 931, + "ColorVal": 34 + }, + { + "Category": "Tablet", + "Value": 496, + "ColorVal": 35 + }, + { + "Category": "Tablet", + "Value": 917, + "ColorVal": 36 + }, + { + "Category": "Tablet", + "Value": 610, + "ColorVal": 37 + }, + { + "Category": "Tablet", + "Value": 239, + "ColorVal": 38 + }, + { + "Category": "Tablet", + "Value": 650, + "ColorVal": 39 + }, + { + "Category": "Tablet", + "Value": 102, + "ColorVal": 40 + }, + { + "Category": "Tablet", + "Value": 134, + "ColorVal": 41 + }, + { + "Category": "Tablet", + "Value": 475, + "ColorVal": 42 + }, + { + "Category": "Tablet", + "Value": 108, + "ColorVal": 43 + }, + { + "Category": "Tablet", + "Value": 848, + "ColorVal": 44 + }, + { + "Category": "Tablet", + "Value": 309, + "ColorVal": 45 + }, + { + "Category": "Tablet", + "Value": 930, + "ColorVal": 46 + }, + { + "Category": "Tablet", + "Value": 861, + "ColorVal": 47 + }, + { + "Category": "Tablet", + "Value": 610, + "ColorVal": 48 + }, + { + "Category": "Tablet", + "Value": 409, + "ColorVal": 49 + }, + { + "Category": "Tablet", + "Value": 969, + "ColorVal": 50 + }, + { + "Category": "Desktop", + "Value": 837, + "ColorVal": 1 + }, + { + "Category": "Desktop", + "Value": 413, + "ColorVal": 2 + }, + { + "Category": "Desktop", + "Value": 562, + "ColorVal": 3 + }, + { + "Category": "Desktop", + "Value": 57, + "ColorVal": 4 + }, + { + "Category": "Desktop", + "Value": 52, + "ColorVal": 5 + }, + { + "Category": "Desktop", + "Value": 220, + "ColorVal": 6 + }, + { + "Category": "Desktop", + "Value": 759, + "ColorVal": 7 + }, + { + "Category": "Desktop", + "Value": 815, + "ColorVal": 8 + }, + { + "Category": "Desktop", + "Value": 353, + "ColorVal": 9 + }, + { + "Category": "Desktop", + "Value": 802, + "ColorVal": 10 + }, + { + "Category": "Desktop", + "Value": 150, + "ColorVal": 11 + }, + { + "Category": "Desktop", + "Value": 255, + "ColorVal": 12 + }, + { + "Category": "Desktop", + "Value": 743, + "ColorVal": 13 + }, + { + "Category": "Desktop", + "Value": 898, + "ColorVal": 14 + }, + { + "Category": "Desktop", + "Value": 753, + "ColorVal": 15 + }, + { + "Category": "Desktop", + "Value": 309, + "ColorVal": 16 + }, + { + "Category": "Desktop", + "Value": 934, + "ColorVal": 17 + }, + { + "Category": "Desktop", + "Value": 832, + "ColorVal": 18 + }, + { + "Category": "Desktop", + "Value": 629, + "ColorVal": 19 + }, + { + "Category": "Desktop", + "Value": 534, + "ColorVal": 20 + }, + { + "Category": "Desktop", + "Value": 606, + "ColorVal": 21 + }, + { + "Category": "Desktop", + "Value": 432, + "ColorVal": 22 + }, + { + "Category": "Desktop", + "Value": 995, + "ColorVal": 23 + }, + { + "Category": "Desktop", + "Value": 128, + "ColorVal": 24 + }, + { + "Category": "Desktop", + "Value": 524, + "ColorVal": 25 + }, + { + "Category": "Desktop", + "Value": 793, + "ColorVal": 26 + }, + { + "Category": "Desktop", + "Value": 747, + "ColorVal": 27 + }, + { + "Category": "Desktop", + "Value": 163, + "ColorVal": 28 + }, + { + "Category": "Desktop", + "Value": 375, + "ColorVal": 29 + }, + { + "Category": "Desktop", + "Value": 701, + "ColorVal": 30 + }, + { + "Category": "Desktop", + "Value": 908, + "ColorVal": 31 + }, + { + "Category": "Desktop", + "Value": 939, + "ColorVal": 32 + }, + { + "Category": "Desktop", + "Value": 395, + "ColorVal": 33 + }, + { + "Category": "Desktop", + "Value": 538, + "ColorVal": 34 + }, + { + "Category": "Desktop", + "Value": 477, + "ColorVal": 35 + }, + { + "Category": "Desktop", + "Value": 515, + "ColorVal": 36 + }, + { + "Category": "Desktop", + "Value": 201, + "ColorVal": 37 + }, + { + "Category": "Desktop", + "Value": 784, + "ColorVal": 38 + }, + { + "Category": "Desktop", + "Value": 831, + "ColorVal": 39 + }, + { + "Category": "Desktop", + "Value": 851, + "ColorVal": 40 + }, + { + "Category": "Desktop", + "Value": 363, + "ColorVal": 41 + }, + { + "Category": "Desktop", + "Value": 180, + "ColorVal": 42 + }, + { + "Category": "Desktop", + "Value": 362, + "ColorVal": 43 + }, + { + "Category": "Desktop", + "Value": 280, + "ColorVal": 44 + }, + { + "Category": "Desktop", + "Value": 140, + "ColorVal": 45 + }, + { + "Category": "Desktop", + "Value": 497, + "ColorVal": 46 + }, + { + "Category": "Desktop", + "Value": 953, + "ColorVal": 47 + }, + { + "Category": "Desktop", + "Value": 482, + "ColorVal": 48 + }, + { + "Category": "Desktop", + "Value": 869, + "ColorVal": 49 + }, + { + "Category": "Desktop", + "Value": 875, + "ColorVal": 50 + }, + { + "Category": "Monitor", + "Value": 627, + "ColorVal": 1 + }, + { + "Category": "Monitor", + "Value": 959, + "ColorVal": 2 + }, + { + "Category": "Monitor", + "Value": 194, + "ColorVal": 3 + }, + { + "Category": "Monitor", + "Value": 84, + "ColorVal": 4 + }, + { + "Category": "Monitor", + "Value": 205, + "ColorVal": 5 + }, + { + "Category": "Monitor", + "Value": 82, + "ColorVal": 6 + }, + { + "Category": "Monitor", + "Value": 168, + "ColorVal": 7 + }, + { + "Category": "Monitor", + "Value": 262, + "ColorVal": 8 + }, + { + "Category": "Monitor", + "Value": 487, + "ColorVal": 9 + }, + { + "Category": "Monitor", + "Value": 522, + "ColorVal": 10 + }, + { + "Category": "Monitor", + "Value": 287, + "ColorVal": 11 + }, + { + "Category": "Monitor", + "Value": 858, + "ColorVal": 12 + }, + { + "Category": "Monitor", + "Value": 428, + "ColorVal": 13 + }, + { + "Category": "Monitor", + "Value": 579, + "ColorVal": 14 + }, + { + "Category": "Monitor", + "Value": 239, + "ColorVal": 15 + }, + { + "Category": "Monitor", + "Value": 626, + "ColorVal": 16 + }, + { + "Category": "Monitor", + "Value": 466, + "ColorVal": 17 + }, + { + "Category": "Monitor", + "Value": 844, + "ColorVal": 18 + }, + { + "Category": "Monitor", + "Value": 767, + "ColorVal": 19 + }, + { + "Category": "Monitor", + "Value": 579, + "ColorVal": 20 + }, + { + "Category": "Monitor", + "Value": 406, + "ColorVal": 21 + }, + { + "Category": "Monitor", + "Value": 628, + "ColorVal": 22 + }, + { + "Category": "Monitor", + "Value": 329, + "ColorVal": 23 + }, + { + "Category": "Monitor", + "Value": 93, + "ColorVal": 24 + }, + { + "Category": "Monitor", + "Value": 16, + "ColorVal": 25 + }, + { + "Category": "Monitor", + "Value": 962, + "ColorVal": 26 + }, + { + "Category": "Monitor", + "Value": 636, + "ColorVal": 27 + }, + { + "Category": "Monitor", + "Value": 724, + "ColorVal": 28 + }, + { + "Category": "Monitor", + "Value": 451, + "ColorVal": 29 + }, + { + "Category": "Monitor", + "Value": 72, + "ColorVal": 30 + }, + { + "Category": "Monitor", + "Value": 82, + "ColorVal": 31 + }, + { + "Category": "Monitor", + "Value": 364, + "ColorVal": 32 + }, + { + "Category": "Monitor", + "Value": 161, + "ColorVal": 33 + }, + { + "Category": "Monitor", + "Value": 543, + "ColorVal": 34 + }, + { + "Category": "Monitor", + "Value": 841, + "ColorVal": 35 + }, + { + "Category": "Monitor", + "Value": 599, + "ColorVal": 36 + }, + { + "Category": "Monitor", + "Value": 304, + "ColorVal": 37 + }, + { + "Category": "Monitor", + "Value": 764, + "ColorVal": 38 + }, + { + "Category": "Monitor", + "Value": 888, + "ColorVal": 39 + }, + { + "Category": "Monitor", + "Value": 221, + "ColorVal": 40 + }, + { + "Category": "Monitor", + "Value": 342, + "ColorVal": 41 + }, + { + "Category": "Monitor", + "Value": 502, + "ColorVal": 42 + }, + { + "Category": "Monitor", + "Value": 44, + "ColorVal": 43 + }, + { + "Category": "Monitor", + "Value": 807, + "ColorVal": 44 + }, + { + "Category": "Monitor", + "Value": 202, + "ColorVal": 45 + }, + { + "Category": "Monitor", + "Value": 903, + "ColorVal": 46 + }, + { + "Category": "Monitor", + "Value": 345, + "ColorVal": 47 + }, + { + "Category": "Monitor", + "Value": 706, + "ColorVal": 48 + }, + { + "Category": "Monitor", + "Value": 118, + "ColorVal": 49 + }, + { + "Category": "Monitor", + "Value": 205, + "ColorVal": 50 + }, + { + "Category": "Keyboard", + "Value": 943, + "ColorVal": 1 + }, + { + "Category": "Keyboard", + "Value": 654, + "ColorVal": 2 + }, + { + "Category": "Keyboard", + "Value": 910, + "ColorVal": 3 + }, + { + "Category": "Keyboard", + "Value": 142, + "ColorVal": 4 + }, + { + "Category": "Keyboard", + "Value": 793, + "ColorVal": 5 + }, + { + "Category": "Keyboard", + "Value": 383, + "ColorVal": 6 + }, + { + "Category": "Keyboard", + "Value": 773, + "ColorVal": 7 + }, + { + "Category": "Keyboard", + "Value": 496, + "ColorVal": 8 + }, + { + "Category": "Keyboard", + "Value": 159, + "ColorVal": 9 + }, + { + "Category": "Keyboard", + "Value": 803, + "ColorVal": 10 + }, + { + "Category": "Keyboard", + "Value": 253, + "ColorVal": 11 + }, + { + "Category": "Keyboard", + "Value": 432, + "ColorVal": 12 + }, + { + "Category": "Keyboard", + "Value": 836, + "ColorVal": 13 + }, + { + "Category": "Keyboard", + "Value": 315, + "ColorVal": 14 + }, + { + "Category": "Keyboard", + "Value": 976, + "ColorVal": 15 + }, + { + "Category": "Keyboard", + "Value": 434, + "ColorVal": 16 + }, + { + "Category": "Keyboard", + "Value": 572, + "ColorVal": 17 + }, + { + "Category": "Keyboard", + "Value": 124, + "ColorVal": 18 + }, + { + "Category": "Keyboard", + "Value": 237, + "ColorVal": 19 + }, + { + "Category": "Keyboard", + "Value": 625, + "ColorVal": 20 + }, + { + "Category": "Keyboard", + "Value": 229, + "ColorVal": 21 + }, + { + "Category": "Keyboard", + "Value": 396, + "ColorVal": 22 + }, + { + "Category": "Keyboard", + "Value": 542, + "ColorVal": 23 + }, + { + "Category": "Keyboard", + "Value": 480, + "ColorVal": 24 + }, + { + "Category": "Keyboard", + "Value": 670, + "ColorVal": 25 + }, + { + "Category": "Keyboard", + "Value": 400, + "ColorVal": 26 + }, + { + "Category": "Keyboard", + "Value": 371, + "ColorVal": 27 + }, + { + "Category": "Keyboard", + "Value": 686, + "ColorVal": 28 + }, + { + "Category": "Keyboard", + "Value": 415, + "ColorVal": 29 + }, + { + "Category": "Keyboard", + "Value": 502, + "ColorVal": 30 + }, + { + "Category": "Keyboard", + "Value": 490, + "ColorVal": 31 + }, + { + "Category": "Keyboard", + "Value": 623, + "ColorVal": 32 + }, + { + "Category": "Keyboard", + "Value": 201, + "ColorVal": 33 + }, + { + "Category": "Keyboard", + "Value": 523, + "ColorVal": 34 + }, + { + "Category": "Keyboard", + "Value": 547, + "ColorVal": 35 + }, + { + "Category": "Keyboard", + "Value": 163, + "ColorVal": 36 + }, + { + "Category": "Keyboard", + "Value": 892, + "ColorVal": 37 + }, + { + "Category": "Keyboard", + "Value": 553, + "ColorVal": 38 + }, + { + "Category": "Keyboard", + "Value": 159, + "ColorVal": 39 + }, + { + "Category": "Keyboard", + "Value": 340, + "ColorVal": 40 + }, + { + "Category": "Keyboard", + "Value": 580, + "ColorVal": 41 + }, + { + "Category": "Keyboard", + "Value": 613, + "ColorVal": 42 + }, + { + "Category": "Keyboard", + "Value": 945, + "ColorVal": 43 + }, + { + "Category": "Keyboard", + "Value": 14, + "ColorVal": 44 + }, + { + "Category": "Keyboard", + "Value": 48, + "ColorVal": 45 + }, + { + "Category": "Keyboard", + "Value": 108, + "ColorVal": 46 + }, + { + "Category": "Keyboard", + "Value": 269, + "ColorVal": 47 + }, + { + "Category": "Keyboard", + "Value": 64, + "ColorVal": 48 + }, + { + "Category": "Keyboard", + "Value": 936, + "ColorVal": 49 + }, + { + "Category": "Keyboard", + "Value": 144, + "ColorVal": 50 + }, + { + "Category": "Mouse", + "Value": 267, + "ColorVal": 1 + }, + { + "Category": "Mouse", + "Value": 994, + "ColorVal": 2 + }, + { + "Category": "Mouse", + "Value": 665, + "ColorVal": 3 + }, + { + "Category": "Mouse", + "Value": 41, + "ColorVal": 4 + }, + { + "Category": "Mouse", + "Value": 21, + "ColorVal": 5 + }, + { + "Category": "Mouse", + "Value": 155, + "ColorVal": 6 + }, + { + "Category": "Mouse", + "Value": 481, + "ColorVal": 7 + }, + { + "Category": "Mouse", + "Value": 625, + "ColorVal": 8 + }, + { + "Category": "Mouse", + "Value": 58, + "ColorVal": 9 + }, + { + "Category": "Mouse", + "Value": 250, + "ColorVal": 10 + }, + { + "Category": "Mouse", + "Value": 902, + "ColorVal": 11 + }, + { + "Category": "Mouse", + "Value": 85, + "ColorVal": 12 + }, + { + "Category": "Mouse", + "Value": 453, + "ColorVal": 13 + }, + { + "Category": "Mouse", + "Value": 360, + "ColorVal": 14 + }, + { + "Category": "Mouse", + "Value": 232, + "ColorVal": 15 + }, + { + "Category": "Mouse", + "Value": 90, + "ColorVal": 16 + }, + { + "Category": "Mouse", + "Value": 114, + "ColorVal": 17 + }, + { + "Category": "Mouse", + "Value": 858, + "ColorVal": 18 + }, + { + "Category": "Mouse", + "Value": 432, + "ColorVal": 19 + }, + { + "Category": "Mouse", + "Value": 460, + "ColorVal": 20 + }, + { + "Category": "Mouse", + "Value": 450, + "ColorVal": 21 + }, + { + "Category": "Mouse", + "Value": 783, + "ColorVal": 22 + }, + { + "Category": "Mouse", + "Value": 610, + "ColorVal": 23 + }, + { + "Category": "Mouse", + "Value": 633, + "ColorVal": 24 + }, + { + "Category": "Mouse", + "Value": 682, + "ColorVal": 25 + }, + { + "Category": "Mouse", + "Value": 732, + "ColorVal": 26 + }, + { + "Category": "Mouse", + "Value": 56, + "ColorVal": 27 + }, + { + "Category": "Mouse", + "Value": 886, + "ColorVal": 28 + }, + { + "Category": "Mouse", + "Value": 943, + "ColorVal": 29 + }, + { + "Category": "Mouse", + "Value": 744, + "ColorVal": 30 + }, + { + "Category": "Mouse", + "Value": 948, + "ColorVal": 31 + }, + { + "Category": "Mouse", + "Value": 328, + "ColorVal": 32 + }, + { + "Category": "Mouse", + "Value": 854, + "ColorVal": 33 + }, + { + "Category": "Mouse", + "Value": 960, + "ColorVal": 34 + }, + { + "Category": "Mouse", + "Value": 386, + "ColorVal": 35 + }, + { + "Category": "Mouse", + "Value": 379, + "ColorVal": 36 + }, + { + "Category": "Mouse", + "Value": 128, + "ColorVal": 37 + }, + { + "Category": "Mouse", + "Value": 293, + "ColorVal": 38 + }, + { + "Category": "Mouse", + "Value": 557, + "ColorVal": 39 + }, + { + "Category": "Mouse", + "Value": 235, + "ColorVal": 40 + }, + { + "Category": "Mouse", + "Value": 685, + "ColorVal": 41 + }, + { + "Category": "Mouse", + "Value": 955, + "ColorVal": 42 + }, + { + "Category": "Mouse", + "Value": 590, + "ColorVal": 43 + }, + { + "Category": "Mouse", + "Value": 747, + "ColorVal": 44 + }, + { + "Category": "Mouse", + "Value": 349, + "ColorVal": 45 + }, + { + "Category": "Mouse", + "Value": 311, + "ColorVal": 46 + }, + { + "Category": "Mouse", + "Value": 389, + "ColorVal": 47 + }, + { + "Category": "Mouse", + "Value": 557, + "ColorVal": 48 + }, + { + "Category": "Mouse", + "Value": 226, + "ColorVal": 49 + }, + { + "Category": "Mouse", + "Value": 479, + "ColorVal": 50 + }, + { + "Category": "Headphones", + "Value": 665, + "ColorVal": 1 + }, + { + "Category": "Headphones", + "Value": 875, + "ColorVal": 2 + }, + { + "Category": "Headphones", + "Value": 324, + "ColorVal": 3 + }, + { + "Category": "Headphones", + "Value": 778, + "ColorVal": 4 + }, + { + "Category": "Headphones", + "Value": 436, + "ColorVal": 5 + }, + { + "Category": "Headphones", + "Value": 191, + "ColorVal": 6 + }, + { + "Category": "Headphones", + "Value": 120, + "ColorVal": 7 + }, + { + "Category": "Headphones", + "Value": 248, + "ColorVal": 8 + }, + { + "Category": "Headphones", + "Value": 678, + "ColorVal": 9 + }, + { + "Category": "Headphones", + "Value": 394, + "ColorVal": 10 + }, + { + "Category": "Headphones", + "Value": 503, + "ColorVal": 11 + }, + { + "Category": "Headphones", + "Value": 52, + "ColorVal": 12 + }, + { + "Category": "Headphones", + "Value": 332, + "ColorVal": 13 + }, + { + "Category": "Headphones", + "Value": 304, + "ColorVal": 14 + }, + { + "Category": "Headphones", + "Value": 849, + "ColorVal": 15 + }, + { + "Category": "Headphones", + "Value": 372, + "ColorVal": 16 + }, + { + "Category": "Headphones", + "Value": 24, + "ColorVal": 17 + }, + { + "Category": "Headphones", + "Value": 246, + "ColorVal": 18 + }, + { + "Category": "Headphones", + "Value": 735, + "ColorVal": 19 + }, + { + "Category": "Headphones", + "Value": 427, + "ColorVal": 20 + }, + { + "Category": "Headphones", + "Value": 981, + "ColorVal": 21 + }, + { + "Category": "Headphones", + "Value": 668, + "ColorVal": 22 + }, + { + "Category": "Headphones", + "Value": 492, + "ColorVal": 23 + }, + { + "Category": "Headphones", + "Value": 168, + "ColorVal": 24 + }, + { + "Category": "Headphones", + "Value": 850, + "ColorVal": 25 + }, + { + "Category": "Headphones", + "Value": 68, + "ColorVal": 26 + }, + { + "Category": "Headphones", + "Value": 754, + "ColorVal": 27 + }, + { + "Category": "Headphones", + "Value": 573, + "ColorVal": 28 + }, + { + "Category": "Headphones", + "Value": 704, + "ColorVal": 29 + }, + { + "Category": "Headphones", + "Value": 962, + "ColorVal": 30 + }, + { + "Category": "Headphones", + "Value": 21, + "ColorVal": 31 + }, + { + "Category": "Headphones", + "Value": 959, + "ColorVal": 32 + }, + { + "Category": "Headphones", + "Value": 746, + "ColorVal": 33 + }, + { + "Category": "Headphones", + "Value": 243, + "ColorVal": 34 + }, + { + "Category": "Headphones", + "Value": 431, + "ColorVal": 35 + }, + { + "Category": "Headphones", + "Value": 866, + "ColorVal": 36 + }, + { + "Category": "Headphones", + "Value": 938, + "ColorVal": 37 + }, + { + "Category": "Headphones", + "Value": 679, + "ColorVal": 38 + }, + { + "Category": "Headphones", + "Value": 751, + "ColorVal": 39 + }, + { + "Category": "Headphones", + "Value": 862, + "ColorVal": 40 + }, + { + "Category": "Headphones", + "Value": 44, + "ColorVal": 41 + }, + { + "Category": "Headphones", + "Value": 721, + "ColorVal": 42 + }, + { + "Category": "Headphones", + "Value": 816, + "ColorVal": 43 + }, + { + "Category": "Headphones", + "Value": 956, + "ColorVal": 44 + }, + { + "Category": "Headphones", + "Value": 316, + "ColorVal": 45 + }, + { + "Category": "Headphones", + "Value": 49, + "ColorVal": 46 + }, + { + "Category": "Headphones", + "Value": 929, + "ColorVal": 47 + }, + { + "Category": "Headphones", + "Value": 414, + "ColorVal": 48 + }, + { + "Category": "Headphones", + "Value": 786, + "ColorVal": 49 + }, + { + "Category": "Headphones", + "Value": 915, + "ColorVal": 50 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/grouped-bar-chart/09-card5.flint.json b/test-harness/excel/evaluations/inputs/grouped-bar-chart/09-card5.flint.json new file mode 100644 index 00000000..f7dfa563 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/grouped-bar-chart/09-card5.flint.json @@ -0,0 +1,273 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity", + "ColorVal": "Quantity" + }, + "chart_spec": { + "chartType": "Grouped Bar Chart", + "encodings": { + "x": "Category", + "y": "Value", + "group": "ColorVal" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Value": 463, + "ColorVal": 32.32 + }, + { + "Category": "Laptop", + "Value": 566, + "ColorVal": 38.29 + }, + { + "Category": "Laptop", + "Value": 529, + "ColorVal": 37.65 + }, + { + "Category": "Laptop", + "Value": 922, + "ColorVal": 9.81 + }, + { + "Category": "Laptop", + "Value": 788, + "ColorVal": 10.93 + }, + { + "Category": "Laptop", + "Value": 527, + "ColorVal": 1.86 + }, + { + "Category": "Laptop", + "Value": 991, + "ColorVal": 11.69 + }, + { + "Category": "Laptop", + "Value": 581, + "ColorVal": 16.23 + }, + { + "Category": "Laptop", + "Value": 297, + "ColorVal": 30.57 + }, + { + "Category": "Laptop", + "Value": 634, + "ColorVal": 14.39 + }, + { + "Category": "Phone", + "Value": 611, + "ColorVal": 28.8 + }, + { + "Category": "Phone", + "Value": 766, + "ColorVal": 11.33 + }, + { + "Category": "Phone", + "Value": 665, + "ColorVal": 2.13 + }, + { + "Category": "Phone", + "Value": 593, + "ColorVal": 6.47 + }, + { + "Category": "Phone", + "Value": 228, + "ColorVal": 35.89 + }, + { + "Category": "Phone", + "Value": 235, + "ColorVal": 34.12 + }, + { + "Category": "Phone", + "Value": 46, + "ColorVal": 34.35 + }, + { + "Category": "Phone", + "Value": 15, + "ColorVal": 3.86 + }, + { + "Category": "Phone", + "Value": 745, + "ColorVal": 18.13 + }, + { + "Category": "Phone", + "Value": 528, + "ColorVal": 37.92 + }, + { + "Category": "Tablet", + "Value": 52, + "ColorVal": 16.96 + }, + { + "Category": "Tablet", + "Value": 846, + "ColorVal": 35.69 + }, + { + "Category": "Tablet", + "Value": 738, + "ColorVal": 28.15 + }, + { + "Category": "Tablet", + "Value": 90, + "ColorVal": 28.1 + }, + { + "Category": "Tablet", + "Value": 865, + "ColorVal": 18.43 + }, + { + "Category": "Tablet", + "Value": 698, + "ColorVal": 1.59 + }, + { + "Category": "Tablet", + "Value": 843, + "ColorVal": 25.45 + }, + { + "Category": "Tablet", + "Value": 68, + "ColorVal": 24.81 + }, + { + "Category": "Tablet", + "Value": 426, + "ColorVal": 32.88 + }, + { + "Category": "Tablet", + "Value": 786, + "ColorVal": 34.33 + }, + { + "Category": "Desktop", + "Value": 25, + "ColorVal": 10.99 + }, + { + "Category": "Desktop", + "Value": 884, + "ColorVal": 37.34 + }, + { + "Category": "Desktop", + "Value": 720, + "ColorVal": 37.94 + }, + { + "Category": "Desktop", + "Value": 475, + "ColorVal": 28.42 + }, + { + "Category": "Desktop", + "Value": 217, + "ColorVal": 12.06 + }, + { + "Category": "Desktop", + "Value": 852, + "ColorVal": 11.68 + }, + { + "Category": "Desktop", + "Value": 86, + "ColorVal": 18.77 + }, + { + "Category": "Desktop", + "Value": 463, + "ColorVal": 2.28 + }, + { + "Category": "Desktop", + "Value": 316, + "ColorVal": 16.39 + }, + { + "Category": "Desktop", + "Value": 250, + "ColorVal": 26.99 + }, + { + "Category": "Monitor", + "Value": 680, + "ColorVal": 9.95 + }, + { + "Category": "Monitor", + "Value": 591, + "ColorVal": 38.38 + }, + { + "Category": "Monitor", + "Value": 343, + "ColorVal": 9.6 + }, + { + "Category": "Monitor", + "Value": 307, + "ColorVal": 3.78 + }, + { + "Category": "Monitor", + "Value": 324, + "ColorVal": 15.43 + }, + { + "Category": "Monitor", + "Value": 613, + "ColorVal": 16.55 + }, + { + "Category": "Monitor", + "Value": 55, + "ColorVal": 30.47 + }, + { + "Category": "Monitor", + "Value": 759, + "ColorVal": 31.68 + }, + { + "Category": "Monitor", + "Value": 465, + "ColorVal": 18.57 + }, + { + "Category": "Monitor", + "Value": 282, + "ColorVal": 23.85 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/grouped-bar-chart/10-card5.flint.json b/test-harness/excel/evaluations/inputs/grouped-bar-chart/10-card5.flint.json new file mode 100644 index 00000000..b6e65f8c --- /dev/null +++ b/test-harness/excel/evaluations/inputs/grouped-bar-chart/10-card5.flint.json @@ -0,0 +1,123 @@ +{ + "semantic_types": { + "Category": "Category", + "Group": "Category", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Grouped Bar Chart", + "encodings": { + "x": "Category", + "y": "Group", + "group": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Group": "USA", + "Segment": "Engineering" + }, + { + "Category": "Laptop", + "Group": "China", + "Segment": "Marketing" + }, + { + "Category": "Laptop", + "Group": "Japan", + "Segment": "Sales" + }, + { + "Category": "Laptop", + "Group": "Germany", + "Segment": "Engineering" + }, + { + "Category": "Phone", + "Group": "China", + "Segment": "Marketing" + }, + { + "Category": "Phone", + "Group": "Japan", + "Segment": "Marketing" + }, + { + "Category": "Phone", + "Group": "Germany", + "Segment": "Marketing" + }, + { + "Category": "Phone", + "Group": "UK", + "Segment": "Engineering" + }, + { + "Category": "Tablet", + "Group": "China", + "Segment": "Marketing" + }, + { + "Category": "Tablet", + "Group": "Japan", + "Segment": "Sales" + }, + { + "Category": "Tablet", + "Group": "Germany", + "Segment": "Marketing" + }, + { + "Category": "Desktop", + "Group": "USA", + "Segment": "Marketing" + }, + { + "Category": "Desktop", + "Group": "China", + "Segment": "Engineering" + }, + { + "Category": "Desktop", + "Group": "Japan", + "Segment": "Sales" + }, + { + "Category": "Desktop", + "Group": "Germany", + "Segment": "Engineering" + }, + { + "Category": "Desktop", + "Group": "UK", + "Segment": "Sales" + }, + { + "Category": "Monitor", + "Group": "USA", + "Segment": "Marketing" + }, + { + "Category": "Monitor", + "Group": "China", + "Segment": "Sales" + }, + { + "Category": "Monitor", + "Group": "Japan", + "Segment": "Marketing" + }, + { + "Category": "Monitor", + "Group": "Germany", + "Segment": "Marketing" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/grouped-bar-chart/11-card5.flint.json b/test-harness/excel/evaluations/inputs/grouped-bar-chart/11-card5.flint.json new file mode 100644 index 00000000..162de392 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/grouped-bar-chart/11-card5.flint.json @@ -0,0 +1,42 @@ +{ + "semantic_types": { + "Region": "Category", + "Sales": "Quantity" + }, + "chart_spec": { + "chartType": "Grouped Bar Chart", + "encodings": { + "x": "Region", + "y": "Sales", + "group": "Region" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Region": "Electronics", + "Sales": 300 + }, + { + "Region": "Clothing", + "Sales": 527 + }, + { + "Region": "Food", + "Sales": 975 + }, + { + "Region": "Books", + "Sales": 311 + }, + { + "Region": "Sports", + "Sales": 930 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/grouped-bar-chart/12-card6.flint.json b/test-harness/excel/evaluations/inputs/grouped-bar-chart/12-card6.flint.json new file mode 100644 index 00000000..c8a3829b --- /dev/null +++ b/test-harness/excel/evaluations/inputs/grouped-bar-chart/12-card6.flint.json @@ -0,0 +1,93 @@ +{ + "semantic_types": { + "Region": "Category", + "Sales": "Quantity", + "Channel": "Category" + }, + "chart_spec": { + "chartType": "Grouped Bar Chart", + "encodings": { + "x": "Region", + "y": "Sales", + "group": "Channel" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Region": "North", + "Channel": "Retail", + "Sales": 901 + }, + { + "Region": "North", + "Channel": "Online", + "Sales": 625 + }, + { + "Region": "South", + "Channel": "Online", + "Sales": 481 + }, + { + "Region": "South", + "Channel": "Wholesale", + "Sales": 331 + }, + { + "Region": "South", + "Channel": "Direct", + "Sales": 841 + }, + { + "Region": "East", + "Channel": "Wholesale", + "Sales": 818 + }, + { + "Region": "East", + "Channel": "Direct", + "Sales": 594 + }, + { + "Region": "West", + "Channel": "Retail", + "Sales": 330 + }, + { + "Region": "West", + "Channel": "Direct", + "Sales": 699 + }, + { + "Region": "Central", + "Channel": "Retail", + "Sales": 460 + }, + { + "Region": "Central", + "Channel": "Online", + "Sales": 903 + }, + { + "Region": "Central", + "Channel": "Wholesale", + "Sales": 981 + }, + { + "Region": "Coast", + "Channel": "Online", + "Sales": 882 + }, + { + "Region": "Coast", + "Channel": "Direct", + "Sales": 966 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/grouped-bar-chart/13-card6.flint.json b/test-harness/excel/evaluations/inputs/grouped-bar-chart/13-card6.flint.json new file mode 100644 index 00000000..6bee1735 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/grouped-bar-chart/13-card6.flint.json @@ -0,0 +1,96 @@ +{ + "semantic_types": { + "Region": "Category", + "Sales": "Quantity", + "Channel": "Category" + }, + "chart_spec": { + "chartType": "Grouped Bar Chart", + "encodings": { + "x": "Region", + "y": "Sales", + "group": "Channel" + }, + "baseSize": { + "width": 560, + "height": 360 + }, + "chartProperties": { + "dodge": "global" + } + }, + "data": { + "values": [ + { + "Region": "North", + "Channel": "Retail", + "Sales": 300 + }, + { + "Region": "North", + "Channel": "Online", + "Sales": 330 + }, + { + "Region": "South", + "Channel": "Online", + "Sales": 340 + }, + { + "Region": "South", + "Channel": "Wholesale", + "Sales": 370 + }, + { + "Region": "South", + "Channel": "Direct", + "Sales": 400 + }, + { + "Region": "East", + "Channel": "Wholesale", + "Sales": 380 + }, + { + "Region": "East", + "Channel": "Direct", + "Sales": 410 + }, + { + "Region": "West", + "Channel": "Retail", + "Sales": 420 + }, + { + "Region": "West", + "Channel": "Direct", + "Sales": 450 + }, + { + "Region": "Central", + "Channel": "Retail", + "Sales": 460 + }, + { + "Region": "Central", + "Channel": "Online", + "Sales": 490 + }, + { + "Region": "Central", + "Channel": "Wholesale", + "Sales": 520 + }, + { + "Region": "Coast", + "Channel": "Online", + "Sales": 500 + }, + { + "Region": "Coast", + "Channel": "Direct", + "Sales": 530 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/grouped-bar-chart/14-card6.flint.json b/test-harness/excel/evaluations/inputs/grouped-bar-chart/14-card6.flint.json new file mode 100644 index 00000000..589da374 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/grouped-bar-chart/14-card6.flint.json @@ -0,0 +1,96 @@ +{ + "semantic_types": { + "Region": "Category", + "Sales": "Quantity", + "Channel": "Category" + }, + "chart_spec": { + "chartType": "Grouped Bar Chart", + "encodings": { + "x": "Region", + "y": "Sales", + "group": "Channel" + }, + "baseSize": { + "width": 560, + "height": 360 + }, + "chartProperties": { + "dodge": "local" + } + }, + "data": { + "values": [ + { + "Region": "North", + "Channel": "Retail", + "Sales": 300 + }, + { + "Region": "North", + "Channel": "Online", + "Sales": 330 + }, + { + "Region": "South", + "Channel": "Online", + "Sales": 340 + }, + { + "Region": "South", + "Channel": "Wholesale", + "Sales": 370 + }, + { + "Region": "South", + "Channel": "Direct", + "Sales": 400 + }, + { + "Region": "East", + "Channel": "Wholesale", + "Sales": 380 + }, + { + "Region": "East", + "Channel": "Direct", + "Sales": 410 + }, + { + "Region": "West", + "Channel": "Retail", + "Sales": 420 + }, + { + "Region": "West", + "Channel": "Direct", + "Sales": 450 + }, + { + "Region": "Central", + "Channel": "Retail", + "Sales": 460 + }, + { + "Region": "Central", + "Channel": "Online", + "Sales": 490 + }, + { + "Region": "Central", + "Channel": "Wholesale", + "Sales": 520 + }, + { + "Region": "Coast", + "Channel": "Online", + "Sales": 500 + }, + { + "Region": "Coast", + "Channel": "Direct", + "Sales": 530 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/heatmap/00-card5.flint.json b/test-harness/excel/evaluations/inputs/heatmap/00-card5.flint.json new file mode 100644 index 00000000..357d9725 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/heatmap/00-card5.flint.json @@ -0,0 +1,173 @@ +{ + "semantic_types": { + "Category": "Category", + "Month": "Month", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Heatmap", + "encodings": { + "x": "Category", + "y": "Month", + "color": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Electronics", + "Month": "Jan", + "Value": 0 + }, + { + "Category": "Electronics", + "Month": "Feb", + "Value": 77 + }, + { + "Category": "Electronics", + "Month": "Mar", + "Value": 80 + }, + { + "Category": "Electronics", + "Month": "Apr", + "Value": 33 + }, + { + "Category": "Electronics", + "Month": "May", + "Value": 38 + }, + { + "Category": "Electronics", + "Month": "Jun", + "Value": 48 + }, + { + "Category": "Clothing", + "Month": "Jan", + "Value": 52 + }, + { + "Category": "Clothing", + "Month": "Feb", + "Value": 43 + }, + { + "Category": "Clothing", + "Month": "Mar", + "Value": 65 + }, + { + "Category": "Clothing", + "Month": "Apr", + "Value": 35 + }, + { + "Category": "Clothing", + "Month": "May", + "Value": 75 + }, + { + "Category": "Clothing", + "Month": "Jun", + "Value": 71 + }, + { + "Category": "Food", + "Month": "Jan", + "Value": 48 + }, + { + "Category": "Food", + "Month": "Feb", + "Value": 29 + }, + { + "Category": "Food", + "Month": "Mar", + "Value": 73 + }, + { + "Category": "Food", + "Month": "Apr", + "Value": 85 + }, + { + "Category": "Food", + "Month": "May", + "Value": 57 + }, + { + "Category": "Food", + "Month": "Jun", + "Value": 85 + }, + { + "Category": "Books", + "Month": "Jan", + "Value": 71 + }, + { + "Category": "Books", + "Month": "Feb", + "Value": 42 + }, + { + "Category": "Books", + "Month": "Mar", + "Value": 74 + }, + { + "Category": "Books", + "Month": "Apr", + "Value": 39 + }, + { + "Category": "Books", + "Month": "May", + "Value": 49 + }, + { + "Category": "Books", + "Month": "Jun", + "Value": 22 + }, + { + "Category": "Sports", + "Month": "Jan", + "Value": 8 + }, + { + "Category": "Sports", + "Month": "Feb", + "Value": 46 + }, + { + "Category": "Sports", + "Month": "Mar", + "Value": 98 + }, + { + "Category": "Sports", + "Month": "Apr", + "Value": 96 + }, + { + "Category": "Sports", + "Month": "May", + "Value": 100 + }, + { + "Category": "Sports", + "Month": "Jun", + "Value": 60 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/heatmap/01-card10.flint.json b/test-harness/excel/evaluations/inputs/heatmap/01-card10.flint.json new file mode 100644 index 00000000..df9d3793 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/heatmap/01-card10.flint.json @@ -0,0 +1,423 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity", + "Density": "Quantity" + }, + "chart_spec": { + "chartType": "Heatmap", + "encodings": { + "x": "X", + "y": "Y", + "color": "Density" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 0, + "Y": 0, + "Density": 16 + }, + { + "X": 0, + "Y": 5, + "Density": 10 + }, + { + "X": 0, + "Y": 10, + "Density": 23 + }, + { + "X": 0, + "Y": 15, + "Density": 73 + }, + { + "X": 0, + "Y": 20, + "Density": 4 + }, + { + "X": 0, + "Y": 25, + "Density": 12 + }, + { + "X": 0, + "Y": 30, + "Density": 32 + }, + { + "X": 0, + "Y": 35, + "Density": 21 + }, + { + "X": 10, + "Y": 0, + "Density": 52 + }, + { + "X": 10, + "Y": 5, + "Density": 67 + }, + { + "X": 10, + "Y": 10, + "Density": 52 + }, + { + "X": 10, + "Y": 15, + "Density": 28 + }, + { + "X": 10, + "Y": 20, + "Density": 33 + }, + { + "X": 10, + "Y": 25, + "Density": 68 + }, + { + "X": 10, + "Y": 30, + "Density": 76 + }, + { + "X": 10, + "Y": 35, + "Density": 34 + }, + { + "X": 20, + "Y": 0, + "Density": 82 + }, + { + "X": 20, + "Y": 5, + "Density": 35 + }, + { + "X": 20, + "Y": 10, + "Density": 35 + }, + { + "X": 20, + "Y": 15, + "Density": 21 + }, + { + "X": 20, + "Y": 20, + "Density": 25 + }, + { + "X": 20, + "Y": 25, + "Density": 87 + }, + { + "X": 20, + "Y": 30, + "Density": 89 + }, + { + "X": 20, + "Y": 35, + "Density": 45 + }, + { + "X": 30, + "Y": 0, + "Density": 63 + }, + { + "X": 30, + "Y": 5, + "Density": 25 + }, + { + "X": 30, + "Y": 10, + "Density": 26 + }, + { + "X": 30, + "Y": 15, + "Density": 83 + }, + { + "X": 30, + "Y": 20, + "Density": 60 + }, + { + "X": 30, + "Y": 25, + "Density": 28 + }, + { + "X": 30, + "Y": 30, + "Density": 33 + }, + { + "X": 30, + "Y": 35, + "Density": 26 + }, + { + "X": 40, + "Y": 0, + "Density": 15 + }, + { + "X": 40, + "Y": 5, + "Density": 52 + }, + { + "X": 40, + "Y": 10, + "Density": 32 + }, + { + "X": 40, + "Y": 15, + "Density": 99 + }, + { + "X": 40, + "Y": 20, + "Density": 7 + }, + { + "X": 40, + "Y": 25, + "Density": 37 + }, + { + "X": 40, + "Y": 30, + "Density": 88 + }, + { + "X": 40, + "Y": 35, + "Density": 87 + }, + { + "X": 50, + "Y": 0, + "Density": 35 + }, + { + "X": 50, + "Y": 5, + "Density": 7 + }, + { + "X": 50, + "Y": 10, + "Density": 54 + }, + { + "X": 50, + "Y": 15, + "Density": 91 + }, + { + "X": 50, + "Y": 20, + "Density": 87 + }, + { + "X": 50, + "Y": 25, + "Density": 22 + }, + { + "X": 50, + "Y": 30, + "Density": 49 + }, + { + "X": 50, + "Y": 35, + "Density": 4 + }, + { + "X": 60, + "Y": 0, + "Density": 76 + }, + { + "X": 60, + "Y": 5, + "Density": 10 + }, + { + "X": 60, + "Y": 10, + "Density": 91 + }, + { + "X": 60, + "Y": 15, + "Density": 68 + }, + { + "X": 60, + "Y": 20, + "Density": 93 + }, + { + "X": 60, + "Y": 25, + "Density": 23 + }, + { + "X": 60, + "Y": 30, + "Density": 12 + }, + { + "X": 60, + "Y": 35, + "Density": 77 + }, + { + "X": 70, + "Y": 0, + "Density": 11 + }, + { + "X": 70, + "Y": 5, + "Density": 71 + }, + { + "X": 70, + "Y": 10, + "Density": 73 + }, + { + "X": 70, + "Y": 15, + "Density": 29 + }, + { + "X": 70, + "Y": 20, + "Density": 60 + }, + { + "X": 70, + "Y": 25, + "Density": 16 + }, + { + "X": 70, + "Y": 30, + "Density": 51 + }, + { + "X": 70, + "Y": 35, + "Density": 64 + }, + { + "X": 80, + "Y": 0, + "Density": 56 + }, + { + "X": 80, + "Y": 5, + "Density": 99 + }, + { + "X": 80, + "Y": 10, + "Density": 4 + }, + { + "X": 80, + "Y": 15, + "Density": 76 + }, + { + "X": 80, + "Y": 20, + "Density": 66 + }, + { + "X": 80, + "Y": 25, + "Density": 70 + }, + { + "X": 80, + "Y": 30, + "Density": 65 + }, + { + "X": 80, + "Y": 35, + "Density": 96 + }, + { + "X": 90, + "Y": 0, + "Density": 61 + }, + { + "X": 90, + "Y": 5, + "Density": 16 + }, + { + "X": 90, + "Y": 10, + "Density": 86 + }, + { + "X": 90, + "Y": 15, + "Density": 83 + }, + { + "X": 90, + "Y": 20, + "Density": 20 + }, + { + "X": 90, + "Y": 25, + "Density": 53 + }, + { + "X": 90, + "Y": 30, + "Density": 22 + }, + { + "X": 90, + "Y": 35, + "Density": 24 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/heatmap/02-card50.flint.json b/test-harness/excel/evaluations/inputs/heatmap/02-card50.flint.json new file mode 100644 index 00000000..c3f7777a --- /dev/null +++ b/test-harness/excel/evaluations/inputs/heatmap/02-card50.flint.json @@ -0,0 +1,7523 @@ +{ + "semantic_types": { + "Hour": "Quantity", + "Day": "Quantity", + "Activity": "Quantity" + }, + "chart_spec": { + "chartType": "Heatmap", + "encodings": { + "x": "Hour", + "y": "Day", + "color": "Activity" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Hour": 0, + "Day": 0, + "Activity": 68 + }, + { + "Hour": 0, + "Day": 1, + "Activity": 15 + }, + { + "Hour": 0, + "Day": 2, + "Activity": 29 + }, + { + "Hour": 0, + "Day": 3, + "Activity": 37 + }, + { + "Hour": 0, + "Day": 4, + "Activity": 42 + }, + { + "Hour": 0, + "Day": 5, + "Activity": 2 + }, + { + "Hour": 0, + "Day": 6, + "Activity": 88 + }, + { + "Hour": 0, + "Day": 7, + "Activity": 38 + }, + { + "Hour": 0, + "Day": 8, + "Activity": 35 + }, + { + "Hour": 0, + "Day": 9, + "Activity": 21 + }, + { + "Hour": 0, + "Day": 10, + "Activity": 50 + }, + { + "Hour": 0, + "Day": 11, + "Activity": 29 + }, + { + "Hour": 0, + "Day": 12, + "Activity": 50 + }, + { + "Hour": 0, + "Day": 13, + "Activity": 15 + }, + { + "Hour": 0, + "Day": 14, + "Activity": 44 + }, + { + "Hour": 0, + "Day": 15, + "Activity": 91 + }, + { + "Hour": 0, + "Day": 16, + "Activity": 95 + }, + { + "Hour": 0, + "Day": 17, + "Activity": 96 + }, + { + "Hour": 0, + "Day": 18, + "Activity": 45 + }, + { + "Hour": 0, + "Day": 19, + "Activity": 77 + }, + { + "Hour": 0, + "Day": 20, + "Activity": 50 + }, + { + "Hour": 0, + "Day": 21, + "Activity": 3 + }, + { + "Hour": 0, + "Day": 22, + "Activity": 17 + }, + { + "Hour": 0, + "Day": 23, + "Activity": 67 + }, + { + "Hour": 0, + "Day": 24, + "Activity": 91 + }, + { + "Hour": 0, + "Day": 25, + "Activity": 86 + }, + { + "Hour": 0, + "Day": 26, + "Activity": 87 + }, + { + "Hour": 0, + "Day": 27, + "Activity": 77 + }, + { + "Hour": 0, + "Day": 28, + "Activity": 59 + }, + { + "Hour": 0, + "Day": 29, + "Activity": 79 + }, + { + "Hour": 1, + "Day": 0, + "Activity": 5 + }, + { + "Hour": 1, + "Day": 1, + "Activity": 70 + }, + { + "Hour": 1, + "Day": 2, + "Activity": 7 + }, + { + "Hour": 1, + "Day": 3, + "Activity": 8 + }, + { + "Hour": 1, + "Day": 4, + "Activity": 65 + }, + { + "Hour": 1, + "Day": 5, + "Activity": 38 + }, + { + "Hour": 1, + "Day": 6, + "Activity": 91 + }, + { + "Hour": 1, + "Day": 7, + "Activity": 45 + }, + { + "Hour": 1, + "Day": 8, + "Activity": 6 + }, + { + "Hour": 1, + "Day": 9, + "Activity": 26 + }, + { + "Hour": 1, + "Day": 10, + "Activity": 2 + }, + { + "Hour": 1, + "Day": 11, + "Activity": 55 + }, + { + "Hour": 1, + "Day": 12, + "Activity": 2 + }, + { + "Hour": 1, + "Day": 13, + "Activity": 88 + }, + { + "Hour": 1, + "Day": 14, + "Activity": 62 + }, + { + "Hour": 1, + "Day": 15, + "Activity": 63 + }, + { + "Hour": 1, + "Day": 16, + "Activity": 36 + }, + { + "Hour": 1, + "Day": 17, + "Activity": 63 + }, + { + "Hour": 1, + "Day": 18, + "Activity": 82 + }, + { + "Hour": 1, + "Day": 19, + "Activity": 54 + }, + { + "Hour": 1, + "Day": 20, + "Activity": 92 + }, + { + "Hour": 1, + "Day": 21, + "Activity": 22 + }, + { + "Hour": 1, + "Day": 22, + "Activity": 66 + }, + { + "Hour": 1, + "Day": 23, + "Activity": 63 + }, + { + "Hour": 1, + "Day": 24, + "Activity": 19 + }, + { + "Hour": 1, + "Day": 25, + "Activity": 84 + }, + { + "Hour": 1, + "Day": 26, + "Activity": 25 + }, + { + "Hour": 1, + "Day": 27, + "Activity": 1 + }, + { + "Hour": 1, + "Day": 28, + "Activity": 74 + }, + { + "Hour": 1, + "Day": 29, + "Activity": 16 + }, + { + "Hour": 2, + "Day": 0, + "Activity": 59 + }, + { + "Hour": 2, + "Day": 1, + "Activity": 82 + }, + { + "Hour": 2, + "Day": 2, + "Activity": 9 + }, + { + "Hour": 2, + "Day": 3, + "Activity": 10 + }, + { + "Hour": 2, + "Day": 4, + "Activity": 53 + }, + { + "Hour": 2, + "Day": 5, + "Activity": 67 + }, + { + "Hour": 2, + "Day": 6, + "Activity": 53 + }, + { + "Hour": 2, + "Day": 7, + "Activity": 55 + }, + { + "Hour": 2, + "Day": 8, + "Activity": 58 + }, + { + "Hour": 2, + "Day": 9, + "Activity": 65 + }, + { + "Hour": 2, + "Day": 10, + "Activity": 76 + }, + { + "Hour": 2, + "Day": 11, + "Activity": 15 + }, + { + "Hour": 2, + "Day": 12, + "Activity": 47 + }, + { + "Hour": 2, + "Day": 13, + "Activity": 84 + }, + { + "Hour": 2, + "Day": 14, + "Activity": 82 + }, + { + "Hour": 2, + "Day": 15, + "Activity": 62 + }, + { + "Hour": 2, + "Day": 16, + "Activity": 80 + }, + { + "Hour": 2, + "Day": 17, + "Activity": 46 + }, + { + "Hour": 2, + "Day": 18, + "Activity": 6 + }, + { + "Hour": 2, + "Day": 19, + "Activity": 43 + }, + { + "Hour": 2, + "Day": 20, + "Activity": 63 + }, + { + "Hour": 2, + "Day": 21, + "Activity": 98 + }, + { + "Hour": 2, + "Day": 22, + "Activity": 20 + }, + { + "Hour": 2, + "Day": 23, + "Activity": 78 + }, + { + "Hour": 2, + "Day": 24, + "Activity": 92 + }, + { + "Hour": 2, + "Day": 25, + "Activity": 12 + }, + { + "Hour": 2, + "Day": 26, + "Activity": 68 + }, + { + "Hour": 2, + "Day": 27, + "Activity": 37 + }, + { + "Hour": 2, + "Day": 28, + "Activity": 67 + }, + { + "Hour": 2, + "Day": 29, + "Activity": 35 + }, + { + "Hour": 3, + "Day": 0, + "Activity": 49 + }, + { + "Hour": 3, + "Day": 1, + "Activity": 10 + }, + { + "Hour": 3, + "Day": 2, + "Activity": 57 + }, + { + "Hour": 3, + "Day": 3, + "Activity": 21 + }, + { + "Hour": 3, + "Day": 4, + "Activity": 63 + }, + { + "Hour": 3, + "Day": 5, + "Activity": 66 + }, + { + "Hour": 3, + "Day": 6, + "Activity": 71 + }, + { + "Hour": 3, + "Day": 7, + "Activity": 22 + }, + { + "Hour": 3, + "Day": 8, + "Activity": 72 + }, + { + "Hour": 3, + "Day": 9, + "Activity": 1 + }, + { + "Hour": 3, + "Day": 10, + "Activity": 36 + }, + { + "Hour": 3, + "Day": 11, + "Activity": 28 + }, + { + "Hour": 3, + "Day": 12, + "Activity": 2 + }, + { + "Hour": 3, + "Day": 13, + "Activity": 87 + }, + { + "Hour": 3, + "Day": 14, + "Activity": 63 + }, + { + "Hour": 3, + "Day": 15, + "Activity": 82 + }, + { + "Hour": 3, + "Day": 16, + "Activity": 36 + }, + { + "Hour": 3, + "Day": 17, + "Activity": 27 + }, + { + "Hour": 3, + "Day": 18, + "Activity": 86 + }, + { + "Hour": 3, + "Day": 19, + "Activity": 55 + }, + { + "Hour": 3, + "Day": 20, + "Activity": 2 + }, + { + "Hour": 3, + "Day": 21, + "Activity": 49 + }, + { + "Hour": 3, + "Day": 22, + "Activity": 66 + }, + { + "Hour": 3, + "Day": 23, + "Activity": 60 + }, + { + "Hour": 3, + "Day": 24, + "Activity": 71 + }, + { + "Hour": 3, + "Day": 25, + "Activity": 47 + }, + { + "Hour": 3, + "Day": 26, + "Activity": 84 + }, + { + "Hour": 3, + "Day": 27, + "Activity": 2 + }, + { + "Hour": 3, + "Day": 28, + "Activity": 78 + }, + { + "Hour": 3, + "Day": 29, + "Activity": 32 + }, + { + "Hour": 4, + "Day": 0, + "Activity": 94 + }, + { + "Hour": 4, + "Day": 1, + "Activity": 1 + }, + { + "Hour": 4, + "Day": 2, + "Activity": 97 + }, + { + "Hour": 4, + "Day": 3, + "Activity": 60 + }, + { + "Hour": 4, + "Day": 4, + "Activity": 17 + }, + { + "Hour": 4, + "Day": 5, + "Activity": 68 + }, + { + "Hour": 4, + "Day": 6, + "Activity": 77 + }, + { + "Hour": 4, + "Day": 7, + "Activity": 1 + }, + { + "Hour": 4, + "Day": 8, + "Activity": 87 + }, + { + "Hour": 4, + "Day": 9, + "Activity": 33 + }, + { + "Hour": 4, + "Day": 10, + "Activity": 75 + }, + { + "Hour": 4, + "Day": 11, + "Activity": 86 + }, + { + "Hour": 4, + "Day": 12, + "Activity": 77 + }, + { + "Hour": 4, + "Day": 13, + "Activity": 32 + }, + { + "Hour": 4, + "Day": 14, + "Activity": 58 + }, + { + "Hour": 4, + "Day": 15, + "Activity": 76 + }, + { + "Hour": 4, + "Day": 16, + "Activity": 56 + }, + { + "Hour": 4, + "Day": 17, + "Activity": 80 + }, + { + "Hour": 4, + "Day": 18, + "Activity": 24 + }, + { + "Hour": 4, + "Day": 19, + "Activity": 18 + }, + { + "Hour": 4, + "Day": 20, + "Activity": 30 + }, + { + "Hour": 4, + "Day": 21, + "Activity": 44 + }, + { + "Hour": 4, + "Day": 22, + "Activity": 68 + }, + { + "Hour": 4, + "Day": 23, + "Activity": 67 + }, + { + "Hour": 4, + "Day": 24, + "Activity": 59 + }, + { + "Hour": 4, + "Day": 25, + "Activity": 86 + }, + { + "Hour": 4, + "Day": 26, + "Activity": 25 + }, + { + "Hour": 4, + "Day": 27, + "Activity": 28 + }, + { + "Hour": 4, + "Day": 28, + "Activity": 63 + }, + { + "Hour": 4, + "Day": 29, + "Activity": 21 + }, + { + "Hour": 5, + "Day": 0, + "Activity": 46 + }, + { + "Hour": 5, + "Day": 1, + "Activity": 35 + }, + { + "Hour": 5, + "Day": 2, + "Activity": 27 + }, + { + "Hour": 5, + "Day": 3, + "Activity": 87 + }, + { + "Hour": 5, + "Day": 4, + "Activity": 0 + }, + { + "Hour": 5, + "Day": 5, + "Activity": 79 + }, + { + "Hour": 5, + "Day": 6, + "Activity": 93 + }, + { + "Hour": 5, + "Day": 7, + "Activity": 77 + }, + { + "Hour": 5, + "Day": 8, + "Activity": 53 + }, + { + "Hour": 5, + "Day": 9, + "Activity": 41 + }, + { + "Hour": 5, + "Day": 10, + "Activity": 8 + }, + { + "Hour": 5, + "Day": 11, + "Activity": 77 + }, + { + "Hour": 5, + "Day": 12, + "Activity": 93 + }, + { + "Hour": 5, + "Day": 13, + "Activity": 61 + }, + { + "Hour": 5, + "Day": 14, + "Activity": 8 + }, + { + "Hour": 5, + "Day": 15, + "Activity": 2 + }, + { + "Hour": 5, + "Day": 16, + "Activity": 43 + }, + { + "Hour": 5, + "Day": 17, + "Activity": 93 + }, + { + "Hour": 5, + "Day": 18, + "Activity": 23 + }, + { + "Hour": 5, + "Day": 19, + "Activity": 8 + }, + { + "Hour": 5, + "Day": 20, + "Activity": 98 + }, + { + "Hour": 5, + "Day": 21, + "Activity": 66 + }, + { + "Hour": 5, + "Day": 22, + "Activity": 91 + }, + { + "Hour": 5, + "Day": 23, + "Activity": 62 + }, + { + "Hour": 5, + "Day": 24, + "Activity": 3 + }, + { + "Hour": 5, + "Day": 25, + "Activity": 86 + }, + { + "Hour": 5, + "Day": 26, + "Activity": 23 + }, + { + "Hour": 5, + "Day": 27, + "Activity": 7 + }, + { + "Hour": 5, + "Day": 28, + "Activity": 51 + }, + { + "Hour": 5, + "Day": 29, + "Activity": 44 + }, + { + "Hour": 6, + "Day": 0, + "Activity": 18 + }, + { + "Hour": 6, + "Day": 1, + "Activity": 87 + }, + { + "Hour": 6, + "Day": 2, + "Activity": 97 + }, + { + "Hour": 6, + "Day": 3, + "Activity": 58 + }, + { + "Hour": 6, + "Day": 4, + "Activity": 80 + }, + { + "Hour": 6, + "Day": 5, + "Activity": 82 + }, + { + "Hour": 6, + "Day": 6, + "Activity": 71 + }, + { + "Hour": 6, + "Day": 7, + "Activity": 36 + }, + { + "Hour": 6, + "Day": 8, + "Activity": 0 + }, + { + "Hour": 6, + "Day": 9, + "Activity": 38 + }, + { + "Hour": 6, + "Day": 10, + "Activity": 12 + }, + { + "Hour": 6, + "Day": 11, + "Activity": 47 + }, + { + "Hour": 6, + "Day": 12, + "Activity": 76 + }, + { + "Hour": 6, + "Day": 13, + "Activity": 71 + }, + { + "Hour": 6, + "Day": 14, + "Activity": 22 + }, + { + "Hour": 6, + "Day": 15, + "Activity": 11 + }, + { + "Hour": 6, + "Day": 16, + "Activity": 50 + }, + { + "Hour": 6, + "Day": 17, + "Activity": 39 + }, + { + "Hour": 6, + "Day": 18, + "Activity": 92 + }, + { + "Hour": 6, + "Day": 19, + "Activity": 72 + }, + { + "Hour": 6, + "Day": 20, + "Activity": 29 + }, + { + "Hour": 6, + "Day": 21, + "Activity": 6 + }, + { + "Hour": 6, + "Day": 22, + "Activity": 96 + }, + { + "Hour": 6, + "Day": 23, + "Activity": 99 + }, + { + "Hour": 6, + "Day": 24, + "Activity": 83 + }, + { + "Hour": 6, + "Day": 25, + "Activity": 49 + }, + { + "Hour": 6, + "Day": 26, + "Activity": 52 + }, + { + "Hour": 6, + "Day": 27, + "Activity": 84 + }, + { + "Hour": 6, + "Day": 28, + "Activity": 66 + }, + { + "Hour": 6, + "Day": 29, + "Activity": 11 + }, + { + "Hour": 7, + "Day": 0, + "Activity": 63 + }, + { + "Hour": 7, + "Day": 1, + "Activity": 42 + }, + { + "Hour": 7, + "Day": 2, + "Activity": 50 + }, + { + "Hour": 7, + "Day": 3, + "Activity": 0 + }, + { + "Hour": 7, + "Day": 4, + "Activity": 67 + }, + { + "Hour": 7, + "Day": 5, + "Activity": 27 + }, + { + "Hour": 7, + "Day": 6, + "Activity": 37 + }, + { + "Hour": 7, + "Day": 7, + "Activity": 6 + }, + { + "Hour": 7, + "Day": 8, + "Activity": 4 + }, + { + "Hour": 7, + "Day": 9, + "Activity": 42 + }, + { + "Hour": 7, + "Day": 10, + "Activity": 42 + }, + { + "Hour": 7, + "Day": 11, + "Activity": 11 + }, + { + "Hour": 7, + "Day": 12, + "Activity": 51 + }, + { + "Hour": 7, + "Day": 13, + "Activity": 43 + }, + { + "Hour": 7, + "Day": 14, + "Activity": 95 + }, + { + "Hour": 7, + "Day": 15, + "Activity": 92 + }, + { + "Hour": 7, + "Day": 16, + "Activity": 65 + }, + { + "Hour": 7, + "Day": 17, + "Activity": 13 + }, + { + "Hour": 7, + "Day": 18, + "Activity": 87 + }, + { + "Hour": 7, + "Day": 19, + "Activity": 96 + }, + { + "Hour": 7, + "Day": 20, + "Activity": 89 + }, + { + "Hour": 7, + "Day": 21, + "Activity": 12 + }, + { + "Hour": 7, + "Day": 22, + "Activity": 97 + }, + { + "Hour": 7, + "Day": 23, + "Activity": 30 + }, + { + "Hour": 7, + "Day": 24, + "Activity": 38 + }, + { + "Hour": 7, + "Day": 25, + "Activity": 38 + }, + { + "Hour": 7, + "Day": 26, + "Activity": 35 + }, + { + "Hour": 7, + "Day": 27, + "Activity": 8 + }, + { + "Hour": 7, + "Day": 28, + "Activity": 78 + }, + { + "Hour": 7, + "Day": 29, + "Activity": 22 + }, + { + "Hour": 8, + "Day": 0, + "Activity": 57 + }, + { + "Hour": 8, + "Day": 1, + "Activity": 68 + }, + { + "Hour": 8, + "Day": 2, + "Activity": 92 + }, + { + "Hour": 8, + "Day": 3, + "Activity": 82 + }, + { + "Hour": 8, + "Day": 4, + "Activity": 25 + }, + { + "Hour": 8, + "Day": 5, + "Activity": 20 + }, + { + "Hour": 8, + "Day": 6, + "Activity": 5 + }, + { + "Hour": 8, + "Day": 7, + "Activity": 91 + }, + { + "Hour": 8, + "Day": 8, + "Activity": 86 + }, + { + "Hour": 8, + "Day": 9, + "Activity": 40 + }, + { + "Hour": 8, + "Day": 10, + "Activity": 62 + }, + { + "Hour": 8, + "Day": 11, + "Activity": 48 + }, + { + "Hour": 8, + "Day": 12, + "Activity": 10 + }, + { + "Hour": 8, + "Day": 13, + "Activity": 49 + }, + { + "Hour": 8, + "Day": 14, + "Activity": 7 + }, + { + "Hour": 8, + "Day": 15, + "Activity": 92 + }, + { + "Hour": 8, + "Day": 16, + "Activity": 31 + }, + { + "Hour": 8, + "Day": 17, + "Activity": 4 + }, + { + "Hour": 8, + "Day": 18, + "Activity": 37 + }, + { + "Hour": 8, + "Day": 19, + "Activity": 99 + }, + { + "Hour": 8, + "Day": 20, + "Activity": 1 + }, + { + "Hour": 8, + "Day": 21, + "Activity": 88 + }, + { + "Hour": 8, + "Day": 22, + "Activity": 55 + }, + { + "Hour": 8, + "Day": 23, + "Activity": 4 + }, + { + "Hour": 8, + "Day": 24, + "Activity": 37 + }, + { + "Hour": 8, + "Day": 25, + "Activity": 47 + }, + { + "Hour": 8, + "Day": 26, + "Activity": 91 + }, + { + "Hour": 8, + "Day": 27, + "Activity": 32 + }, + { + "Hour": 8, + "Day": 28, + "Activity": 21 + }, + { + "Hour": 8, + "Day": 29, + "Activity": 86 + }, + { + "Hour": 9, + "Day": 0, + "Activity": 77 + }, + { + "Hour": 9, + "Day": 1, + "Activity": 84 + }, + { + "Hour": 9, + "Day": 2, + "Activity": 76 + }, + { + "Hour": 9, + "Day": 3, + "Activity": 93 + }, + { + "Hour": 9, + "Day": 4, + "Activity": 59 + }, + { + "Hour": 9, + "Day": 5, + "Activity": 13 + }, + { + "Hour": 9, + "Day": 6, + "Activity": 85 + }, + { + "Hour": 9, + "Day": 7, + "Activity": 96 + }, + { + "Hour": 9, + "Day": 8, + "Activity": 54 + }, + { + "Hour": 9, + "Day": 9, + "Activity": 65 + }, + { + "Hour": 9, + "Day": 10, + "Activity": 50 + }, + { + "Hour": 9, + "Day": 11, + "Activity": 34 + }, + { + "Hour": 9, + "Day": 12, + "Activity": 21 + }, + { + "Hour": 9, + "Day": 13, + "Activity": 17 + }, + { + "Hour": 9, + "Day": 14, + "Activity": 39 + }, + { + "Hour": 9, + "Day": 15, + "Activity": 24 + }, + { + "Hour": 9, + "Day": 16, + "Activity": 42 + }, + { + "Hour": 9, + "Day": 17, + "Activity": 1 + }, + { + "Hour": 9, + "Day": 18, + "Activity": 87 + }, + { + "Hour": 9, + "Day": 19, + "Activity": 91 + }, + { + "Hour": 9, + "Day": 20, + "Activity": 88 + }, + { + "Hour": 9, + "Day": 21, + "Activity": 43 + }, + { + "Hour": 9, + "Day": 22, + "Activity": 53 + }, + { + "Hour": 9, + "Day": 23, + "Activity": 66 + }, + { + "Hour": 9, + "Day": 24, + "Activity": 33 + }, + { + "Hour": 9, + "Day": 25, + "Activity": 14 + }, + { + "Hour": 9, + "Day": 26, + "Activity": 97 + }, + { + "Hour": 9, + "Day": 27, + "Activity": 95 + }, + { + "Hour": 9, + "Day": 28, + "Activity": 5 + }, + { + "Hour": 9, + "Day": 29, + "Activity": 8 + }, + { + "Hour": 10, + "Day": 0, + "Activity": 67 + }, + { + "Hour": 10, + "Day": 1, + "Activity": 90 + }, + { + "Hour": 10, + "Day": 2, + "Activity": 48 + }, + { + "Hour": 10, + "Day": 3, + "Activity": 94 + }, + { + "Hour": 10, + "Day": 4, + "Activity": 34 + }, + { + "Hour": 10, + "Day": 5, + "Activity": 64 + }, + { + "Hour": 10, + "Day": 6, + "Activity": 32 + }, + { + "Hour": 10, + "Day": 7, + "Activity": 14 + }, + { + "Hour": 10, + "Day": 8, + "Activity": 88 + }, + { + "Hour": 10, + "Day": 9, + "Activity": 51 + }, + { + "Hour": 10, + "Day": 10, + "Activity": 30 + }, + { + "Hour": 10, + "Day": 11, + "Activity": 90 + }, + { + "Hour": 10, + "Day": 12, + "Activity": 58 + }, + { + "Hour": 10, + "Day": 13, + "Activity": 99 + }, + { + "Hour": 10, + "Day": 14, + "Activity": 24 + }, + { + "Hour": 10, + "Day": 15, + "Activity": 16 + }, + { + "Hour": 10, + "Day": 16, + "Activity": 97 + }, + { + "Hour": 10, + "Day": 17, + "Activity": 84 + }, + { + "Hour": 10, + "Day": 18, + "Activity": 82 + }, + { + "Hour": 10, + "Day": 19, + "Activity": 89 + }, + { + "Hour": 10, + "Day": 20, + "Activity": 58 + }, + { + "Hour": 10, + "Day": 21, + "Activity": 59 + }, + { + "Hour": 10, + "Day": 22, + "Activity": 74 + }, + { + "Hour": 10, + "Day": 23, + "Activity": 44 + }, + { + "Hour": 10, + "Day": 24, + "Activity": 20 + }, + { + "Hour": 10, + "Day": 25, + "Activity": 83 + }, + { + "Hour": 10, + "Day": 26, + "Activity": 10 + }, + { + "Hour": 10, + "Day": 27, + "Activity": 68 + }, + { + "Hour": 10, + "Day": 28, + "Activity": 78 + }, + { + "Hour": 10, + "Day": 29, + "Activity": 83 + }, + { + "Hour": 11, + "Day": 0, + "Activity": 9 + }, + { + "Hour": 11, + "Day": 1, + "Activity": 48 + }, + { + "Hour": 11, + "Day": 2, + "Activity": 67 + }, + { + "Hour": 11, + "Day": 3, + "Activity": 13 + }, + { + "Hour": 11, + "Day": 4, + "Activity": 79 + }, + { + "Hour": 11, + "Day": 5, + "Activity": 25 + }, + { + "Hour": 11, + "Day": 6, + "Activity": 68 + }, + { + "Hour": 11, + "Day": 7, + "Activity": 14 + }, + { + "Hour": 11, + "Day": 8, + "Activity": 66 + }, + { + "Hour": 11, + "Day": 9, + "Activity": 6 + }, + { + "Hour": 11, + "Day": 10, + "Activity": 81 + }, + { + "Hour": 11, + "Day": 11, + "Activity": 97 + }, + { + "Hour": 11, + "Day": 12, + "Activity": 43 + }, + { + "Hour": 11, + "Day": 13, + "Activity": 1 + }, + { + "Hour": 11, + "Day": 14, + "Activity": 46 + }, + { + "Hour": 11, + "Day": 15, + "Activity": 5 + }, + { + "Hour": 11, + "Day": 16, + "Activity": 13 + }, + { + "Hour": 11, + "Day": 17, + "Activity": 51 + }, + { + "Hour": 11, + "Day": 18, + "Activity": 76 + }, + { + "Hour": 11, + "Day": 19, + "Activity": 17 + }, + { + "Hour": 11, + "Day": 20, + "Activity": 52 + }, + { + "Hour": 11, + "Day": 21, + "Activity": 96 + }, + { + "Hour": 11, + "Day": 22, + "Activity": 29 + }, + { + "Hour": 11, + "Day": 23, + "Activity": 31 + }, + { + "Hour": 11, + "Day": 24, + "Activity": 43 + }, + { + "Hour": 11, + "Day": 25, + "Activity": 93 + }, + { + "Hour": 11, + "Day": 26, + "Activity": 81 + }, + { + "Hour": 11, + "Day": 27, + "Activity": 75 + }, + { + "Hour": 11, + "Day": 28, + "Activity": 29 + }, + { + "Hour": 11, + "Day": 29, + "Activity": 78 + }, + { + "Hour": 12, + "Day": 0, + "Activity": 84 + }, + { + "Hour": 12, + "Day": 1, + "Activity": 49 + }, + { + "Hour": 12, + "Day": 2, + "Activity": 4 + }, + { + "Hour": 12, + "Day": 3, + "Activity": 99 + }, + { + "Hour": 12, + "Day": 4, + "Activity": 68 + }, + { + "Hour": 12, + "Day": 5, + "Activity": 95 + }, + { + "Hour": 12, + "Day": 6, + "Activity": 25 + }, + { + "Hour": 12, + "Day": 7, + "Activity": 71 + }, + { + "Hour": 12, + "Day": 8, + "Activity": 66 + }, + { + "Hour": 12, + "Day": 9, + "Activity": 10 + }, + { + "Hour": 12, + "Day": 10, + "Activity": 82 + }, + { + "Hour": 12, + "Day": 11, + "Activity": 67 + }, + { + "Hour": 12, + "Day": 12, + "Activity": 82 + }, + { + "Hour": 12, + "Day": 13, + "Activity": 18 + }, + { + "Hour": 12, + "Day": 14, + "Activity": 12 + }, + { + "Hour": 12, + "Day": 15, + "Activity": 72 + }, + { + "Hour": 12, + "Day": 16, + "Activity": 2 + }, + { + "Hour": 12, + "Day": 17, + "Activity": 8 + }, + { + "Hour": 12, + "Day": 18, + "Activity": 83 + }, + { + "Hour": 12, + "Day": 19, + "Activity": 56 + }, + { + "Hour": 12, + "Day": 20, + "Activity": 98 + }, + { + "Hour": 12, + "Day": 21, + "Activity": 63 + }, + { + "Hour": 12, + "Day": 22, + "Activity": 95 + }, + { + "Hour": 12, + "Day": 23, + "Activity": 83 + }, + { + "Hour": 12, + "Day": 24, + "Activity": 39 + }, + { + "Hour": 12, + "Day": 25, + "Activity": 18 + }, + { + "Hour": 12, + "Day": 26, + "Activity": 29 + }, + { + "Hour": 12, + "Day": 27, + "Activity": 83 + }, + { + "Hour": 12, + "Day": 28, + "Activity": 30 + }, + { + "Hour": 12, + "Day": 29, + "Activity": 31 + }, + { + "Hour": 13, + "Day": 0, + "Activity": 31 + }, + { + "Hour": 13, + "Day": 1, + "Activity": 73 + }, + { + "Hour": 13, + "Day": 2, + "Activity": 40 + }, + { + "Hour": 13, + "Day": 3, + "Activity": 85 + }, + { + "Hour": 13, + "Day": 4, + "Activity": 51 + }, + { + "Hour": 13, + "Day": 5, + "Activity": 96 + }, + { + "Hour": 13, + "Day": 6, + "Activity": 5 + }, + { + "Hour": 13, + "Day": 7, + "Activity": 88 + }, + { + "Hour": 13, + "Day": 8, + "Activity": 82 + }, + { + "Hour": 13, + "Day": 9, + "Activity": 100 + }, + { + "Hour": 13, + "Day": 10, + "Activity": 47 + }, + { + "Hour": 13, + "Day": 11, + "Activity": 58 + }, + { + "Hour": 13, + "Day": 12, + "Activity": 9 + }, + { + "Hour": 13, + "Day": 13, + "Activity": 52 + }, + { + "Hour": 13, + "Day": 14, + "Activity": 1 + }, + { + "Hour": 13, + "Day": 15, + "Activity": 97 + }, + { + "Hour": 13, + "Day": 16, + "Activity": 77 + }, + { + "Hour": 13, + "Day": 17, + "Activity": 94 + }, + { + "Hour": 13, + "Day": 18, + "Activity": 29 + }, + { + "Hour": 13, + "Day": 19, + "Activity": 85 + }, + { + "Hour": 13, + "Day": 20, + "Activity": 82 + }, + { + "Hour": 13, + "Day": 21, + "Activity": 59 + }, + { + "Hour": 13, + "Day": 22, + "Activity": 97 + }, + { + "Hour": 13, + "Day": 23, + "Activity": 68 + }, + { + "Hour": 13, + "Day": 24, + "Activity": 40 + }, + { + "Hour": 13, + "Day": 25, + "Activity": 59 + }, + { + "Hour": 13, + "Day": 26, + "Activity": 87 + }, + { + "Hour": 13, + "Day": 27, + "Activity": 53 + }, + { + "Hour": 13, + "Day": 28, + "Activity": 96 + }, + { + "Hour": 13, + "Day": 29, + "Activity": 64 + }, + { + "Hour": 14, + "Day": 0, + "Activity": 67 + }, + { + "Hour": 14, + "Day": 1, + "Activity": 69 + }, + { + "Hour": 14, + "Day": 2, + "Activity": 26 + }, + { + "Hour": 14, + "Day": 3, + "Activity": 86 + }, + { + "Hour": 14, + "Day": 4, + "Activity": 43 + }, + { + "Hour": 14, + "Day": 5, + "Activity": 48 + }, + { + "Hour": 14, + "Day": 6, + "Activity": 17 + }, + { + "Hour": 14, + "Day": 7, + "Activity": 92 + }, + { + "Hour": 14, + "Day": 8, + "Activity": 17 + }, + { + "Hour": 14, + "Day": 9, + "Activity": 4 + }, + { + "Hour": 14, + "Day": 10, + "Activity": 85 + }, + { + "Hour": 14, + "Day": 11, + "Activity": 59 + }, + { + "Hour": 14, + "Day": 12, + "Activity": 79 + }, + { + "Hour": 14, + "Day": 13, + "Activity": 28 + }, + { + "Hour": 14, + "Day": 14, + "Activity": 95 + }, + { + "Hour": 14, + "Day": 15, + "Activity": 61 + }, + { + "Hour": 14, + "Day": 16, + "Activity": 77 + }, + { + "Hour": 14, + "Day": 17, + "Activity": 39 + }, + { + "Hour": 14, + "Day": 18, + "Activity": 94 + }, + { + "Hour": 14, + "Day": 19, + "Activity": 12 + }, + { + "Hour": 14, + "Day": 20, + "Activity": 30 + }, + { + "Hour": 14, + "Day": 21, + "Activity": 90 + }, + { + "Hour": 14, + "Day": 22, + "Activity": 53 + }, + { + "Hour": 14, + "Day": 23, + "Activity": 62 + }, + { + "Hour": 14, + "Day": 24, + "Activity": 80 + }, + { + "Hour": 14, + "Day": 25, + "Activity": 4 + }, + { + "Hour": 14, + "Day": 26, + "Activity": 75 + }, + { + "Hour": 14, + "Day": 27, + "Activity": 54 + }, + { + "Hour": 14, + "Day": 28, + "Activity": 85 + }, + { + "Hour": 14, + "Day": 29, + "Activity": 22 + }, + { + "Hour": 15, + "Day": 0, + "Activity": 54 + }, + { + "Hour": 15, + "Day": 1, + "Activity": 79 + }, + { + "Hour": 15, + "Day": 2, + "Activity": 19 + }, + { + "Hour": 15, + "Day": 3, + "Activity": 88 + }, + { + "Hour": 15, + "Day": 4, + "Activity": 48 + }, + { + "Hour": 15, + "Day": 5, + "Activity": 19 + }, + { + "Hour": 15, + "Day": 6, + "Activity": 1 + }, + { + "Hour": 15, + "Day": 7, + "Activity": 72 + }, + { + "Hour": 15, + "Day": 8, + "Activity": 41 + }, + { + "Hour": 15, + "Day": 9, + "Activity": 82 + }, + { + "Hour": 15, + "Day": 10, + "Activity": 88 + }, + { + "Hour": 15, + "Day": 11, + "Activity": 78 + }, + { + "Hour": 15, + "Day": 12, + "Activity": 83 + }, + { + "Hour": 15, + "Day": 13, + "Activity": 41 + }, + { + "Hour": 15, + "Day": 14, + "Activity": 50 + }, + { + "Hour": 15, + "Day": 15, + "Activity": 88 + }, + { + "Hour": 15, + "Day": 16, + "Activity": 43 + }, + { + "Hour": 15, + "Day": 17, + "Activity": 68 + }, + { + "Hour": 15, + "Day": 18, + "Activity": 67 + }, + { + "Hour": 15, + "Day": 19, + "Activity": 61 + }, + { + "Hour": 15, + "Day": 20, + "Activity": 6 + }, + { + "Hour": 15, + "Day": 21, + "Activity": 34 + }, + { + "Hour": 15, + "Day": 22, + "Activity": 60 + }, + { + "Hour": 15, + "Day": 23, + "Activity": 41 + }, + { + "Hour": 15, + "Day": 24, + "Activity": 74 + }, + { + "Hour": 15, + "Day": 25, + "Activity": 2 + }, + { + "Hour": 15, + "Day": 26, + "Activity": 93 + }, + { + "Hour": 15, + "Day": 27, + "Activity": 2 + }, + { + "Hour": 15, + "Day": 28, + "Activity": 58 + }, + { + "Hour": 15, + "Day": 29, + "Activity": 0 + }, + { + "Hour": 16, + "Day": 0, + "Activity": 90 + }, + { + "Hour": 16, + "Day": 1, + "Activity": 75 + }, + { + "Hour": 16, + "Day": 2, + "Activity": 23 + }, + { + "Hour": 16, + "Day": 3, + "Activity": 83 + }, + { + "Hour": 16, + "Day": 4, + "Activity": 92 + }, + { + "Hour": 16, + "Day": 5, + "Activity": 17 + }, + { + "Hour": 16, + "Day": 6, + "Activity": 22 + }, + { + "Hour": 16, + "Day": 7, + "Activity": 72 + }, + { + "Hour": 16, + "Day": 8, + "Activity": 4 + }, + { + "Hour": 16, + "Day": 9, + "Activity": 88 + }, + { + "Hour": 16, + "Day": 10, + "Activity": 67 + }, + { + "Hour": 16, + "Day": 11, + "Activity": 71 + }, + { + "Hour": 16, + "Day": 12, + "Activity": 66 + }, + { + "Hour": 16, + "Day": 13, + "Activity": 53 + }, + { + "Hour": 16, + "Day": 14, + "Activity": 87 + }, + { + "Hour": 16, + "Day": 15, + "Activity": 65 + }, + { + "Hour": 16, + "Day": 16, + "Activity": 57 + }, + { + "Hour": 16, + "Day": 17, + "Activity": 26 + }, + { + "Hour": 16, + "Day": 18, + "Activity": 28 + }, + { + "Hour": 16, + "Day": 19, + "Activity": 50 + }, + { + "Hour": 16, + "Day": 20, + "Activity": 85 + }, + { + "Hour": 16, + "Day": 21, + "Activity": 23 + }, + { + "Hour": 16, + "Day": 22, + "Activity": 32 + }, + { + "Hour": 16, + "Day": 23, + "Activity": 89 + }, + { + "Hour": 16, + "Day": 24, + "Activity": 79 + }, + { + "Hour": 16, + "Day": 25, + "Activity": 18 + }, + { + "Hour": 16, + "Day": 26, + "Activity": 32 + }, + { + "Hour": 16, + "Day": 27, + "Activity": 30 + }, + { + "Hour": 16, + "Day": 28, + "Activity": 5 + }, + { + "Hour": 16, + "Day": 29, + "Activity": 75 + }, + { + "Hour": 17, + "Day": 0, + "Activity": 59 + }, + { + "Hour": 17, + "Day": 1, + "Activity": 62 + }, + { + "Hour": 17, + "Day": 2, + "Activity": 26 + }, + { + "Hour": 17, + "Day": 3, + "Activity": 12 + }, + { + "Hour": 17, + "Day": 4, + "Activity": 89 + }, + { + "Hour": 17, + "Day": 5, + "Activity": 82 + }, + { + "Hour": 17, + "Day": 6, + "Activity": 59 + }, + { + "Hour": 17, + "Day": 7, + "Activity": 79 + }, + { + "Hour": 17, + "Day": 8, + "Activity": 45 + }, + { + "Hour": 17, + "Day": 9, + "Activity": 79 + }, + { + "Hour": 17, + "Day": 10, + "Activity": 4 + }, + { + "Hour": 17, + "Day": 11, + "Activity": 26 + }, + { + "Hour": 17, + "Day": 12, + "Activity": 31 + }, + { + "Hour": 17, + "Day": 13, + "Activity": 79 + }, + { + "Hour": 17, + "Day": 14, + "Activity": 66 + }, + { + "Hour": 17, + "Day": 15, + "Activity": 45 + }, + { + "Hour": 17, + "Day": 16, + "Activity": 27 + }, + { + "Hour": 17, + "Day": 17, + "Activity": 76 + }, + { + "Hour": 17, + "Day": 18, + "Activity": 80 + }, + { + "Hour": 17, + "Day": 19, + "Activity": 20 + }, + { + "Hour": 17, + "Day": 20, + "Activity": 80 + }, + { + "Hour": 17, + "Day": 21, + "Activity": 76 + }, + { + "Hour": 17, + "Day": 22, + "Activity": 4 + }, + { + "Hour": 17, + "Day": 23, + "Activity": 96 + }, + { + "Hour": 17, + "Day": 24, + "Activity": 39 + }, + { + "Hour": 17, + "Day": 25, + "Activity": 70 + }, + { + "Hour": 17, + "Day": 26, + "Activity": 77 + }, + { + "Hour": 17, + "Day": 27, + "Activity": 40 + }, + { + "Hour": 17, + "Day": 28, + "Activity": 61 + }, + { + "Hour": 17, + "Day": 29, + "Activity": 63 + }, + { + "Hour": 18, + "Day": 0, + "Activity": 67 + }, + { + "Hour": 18, + "Day": 1, + "Activity": 71 + }, + { + "Hour": 18, + "Day": 2, + "Activity": 54 + }, + { + "Hour": 18, + "Day": 3, + "Activity": 81 + }, + { + "Hour": 18, + "Day": 4, + "Activity": 1 + }, + { + "Hour": 18, + "Day": 5, + "Activity": 27 + }, + { + "Hour": 18, + "Day": 6, + "Activity": 39 + }, + { + "Hour": 18, + "Day": 7, + "Activity": 20 + }, + { + "Hour": 18, + "Day": 8, + "Activity": 74 + }, + { + "Hour": 18, + "Day": 9, + "Activity": 44 + }, + { + "Hour": 18, + "Day": 10, + "Activity": 45 + }, + { + "Hour": 18, + "Day": 11, + "Activity": 26 + }, + { + "Hour": 18, + "Day": 12, + "Activity": 59 + }, + { + "Hour": 18, + "Day": 13, + "Activity": 23 + }, + { + "Hour": 18, + "Day": 14, + "Activity": 40 + }, + { + "Hour": 18, + "Day": 15, + "Activity": 99 + }, + { + "Hour": 18, + "Day": 16, + "Activity": 50 + }, + { + "Hour": 18, + "Day": 17, + "Activity": 94 + }, + { + "Hour": 18, + "Day": 18, + "Activity": 15 + }, + { + "Hour": 18, + "Day": 19, + "Activity": 36 + }, + { + "Hour": 18, + "Day": 20, + "Activity": 56 + }, + { + "Hour": 18, + "Day": 21, + "Activity": 83 + }, + { + "Hour": 18, + "Day": 22, + "Activity": 6 + }, + { + "Hour": 18, + "Day": 23, + "Activity": 1 + }, + { + "Hour": 18, + "Day": 24, + "Activity": 66 + }, + { + "Hour": 18, + "Day": 25, + "Activity": 17 + }, + { + "Hour": 18, + "Day": 26, + "Activity": 56 + }, + { + "Hour": 18, + "Day": 27, + "Activity": 17 + }, + { + "Hour": 18, + "Day": 28, + "Activity": 85 + }, + { + "Hour": 18, + "Day": 29, + "Activity": 66 + }, + { + "Hour": 19, + "Day": 0, + "Activity": 90 + }, + { + "Hour": 19, + "Day": 1, + "Activity": 75 + }, + { + "Hour": 19, + "Day": 2, + "Activity": 85 + }, + { + "Hour": 19, + "Day": 3, + "Activity": 22 + }, + { + "Hour": 19, + "Day": 4, + "Activity": 98 + }, + { + "Hour": 19, + "Day": 5, + "Activity": 63 + }, + { + "Hour": 19, + "Day": 6, + "Activity": 62 + }, + { + "Hour": 19, + "Day": 7, + "Activity": 82 + }, + { + "Hour": 19, + "Day": 8, + "Activity": 92 + }, + { + "Hour": 19, + "Day": 9, + "Activity": 67 + }, + { + "Hour": 19, + "Day": 10, + "Activity": 41 + }, + { + "Hour": 19, + "Day": 11, + "Activity": 71 + }, + { + "Hour": 19, + "Day": 12, + "Activity": 6 + }, + { + "Hour": 19, + "Day": 13, + "Activity": 18 + }, + { + "Hour": 19, + "Day": 14, + "Activity": 63 + }, + { + "Hour": 19, + "Day": 15, + "Activity": 71 + }, + { + "Hour": 19, + "Day": 16, + "Activity": 28 + }, + { + "Hour": 19, + "Day": 17, + "Activity": 52 + }, + { + "Hour": 19, + "Day": 18, + "Activity": 72 + }, + { + "Hour": 19, + "Day": 19, + "Activity": 37 + }, + { + "Hour": 19, + "Day": 20, + "Activity": 37 + }, + { + "Hour": 19, + "Day": 21, + "Activity": 98 + }, + { + "Hour": 19, + "Day": 22, + "Activity": 56 + }, + { + "Hour": 19, + "Day": 23, + "Activity": 79 + }, + { + "Hour": 19, + "Day": 24, + "Activity": 44 + }, + { + "Hour": 19, + "Day": 25, + "Activity": 66 + }, + { + "Hour": 19, + "Day": 26, + "Activity": 61 + }, + { + "Hour": 19, + "Day": 27, + "Activity": 14 + }, + { + "Hour": 19, + "Day": 28, + "Activity": 68 + }, + { + "Hour": 19, + "Day": 29, + "Activity": 83 + }, + { + "Hour": 20, + "Day": 0, + "Activity": 81 + }, + { + "Hour": 20, + "Day": 1, + "Activity": 3 + }, + { + "Hour": 20, + "Day": 2, + "Activity": 32 + }, + { + "Hour": 20, + "Day": 3, + "Activity": 53 + }, + { + "Hour": 20, + "Day": 4, + "Activity": 57 + }, + { + "Hour": 20, + "Day": 5, + "Activity": 59 + }, + { + "Hour": 20, + "Day": 6, + "Activity": 48 + }, + { + "Hour": 20, + "Day": 7, + "Activity": 91 + }, + { + "Hour": 20, + "Day": 8, + "Activity": 58 + }, + { + "Hour": 20, + "Day": 9, + "Activity": 56 + }, + { + "Hour": 20, + "Day": 10, + "Activity": 63 + }, + { + "Hour": 20, + "Day": 11, + "Activity": 2 + }, + { + "Hour": 20, + "Day": 12, + "Activity": 57 + }, + { + "Hour": 20, + "Day": 13, + "Activity": 34 + }, + { + "Hour": 20, + "Day": 14, + "Activity": 6 + }, + { + "Hour": 20, + "Day": 15, + "Activity": 50 + }, + { + "Hour": 20, + "Day": 16, + "Activity": 77 + }, + { + "Hour": 20, + "Day": 17, + "Activity": 42 + }, + { + "Hour": 20, + "Day": 18, + "Activity": 89 + }, + { + "Hour": 20, + "Day": 19, + "Activity": 23 + }, + { + "Hour": 20, + "Day": 20, + "Activity": 10 + }, + { + "Hour": 20, + "Day": 21, + "Activity": 32 + }, + { + "Hour": 20, + "Day": 22, + "Activity": 77 + }, + { + "Hour": 20, + "Day": 23, + "Activity": 5 + }, + { + "Hour": 20, + "Day": 24, + "Activity": 68 + }, + { + "Hour": 20, + "Day": 25, + "Activity": 24 + }, + { + "Hour": 20, + "Day": 26, + "Activity": 13 + }, + { + "Hour": 20, + "Day": 27, + "Activity": 70 + }, + { + "Hour": 20, + "Day": 28, + "Activity": 75 + }, + { + "Hour": 20, + "Day": 29, + "Activity": 74 + }, + { + "Hour": 21, + "Day": 0, + "Activity": 50 + }, + { + "Hour": 21, + "Day": 1, + "Activity": 13 + }, + { + "Hour": 21, + "Day": 2, + "Activity": 75 + }, + { + "Hour": 21, + "Day": 3, + "Activity": 59 + }, + { + "Hour": 21, + "Day": 4, + "Activity": 71 + }, + { + "Hour": 21, + "Day": 5, + "Activity": 13 + }, + { + "Hour": 21, + "Day": 6, + "Activity": 84 + }, + { + "Hour": 21, + "Day": 7, + "Activity": 76 + }, + { + "Hour": 21, + "Day": 8, + "Activity": 71 + }, + { + "Hour": 21, + "Day": 9, + "Activity": 76 + }, + { + "Hour": 21, + "Day": 10, + "Activity": 41 + }, + { + "Hour": 21, + "Day": 11, + "Activity": 97 + }, + { + "Hour": 21, + "Day": 12, + "Activity": 68 + }, + { + "Hour": 21, + "Day": 13, + "Activity": 38 + }, + { + "Hour": 21, + "Day": 14, + "Activity": 46 + }, + { + "Hour": 21, + "Day": 15, + "Activity": 22 + }, + { + "Hour": 21, + "Day": 16, + "Activity": 41 + }, + { + "Hour": 21, + "Day": 17, + "Activity": 47 + }, + { + "Hour": 21, + "Day": 18, + "Activity": 24 + }, + { + "Hour": 21, + "Day": 19, + "Activity": 24 + }, + { + "Hour": 21, + "Day": 20, + "Activity": 25 + }, + { + "Hour": 21, + "Day": 21, + "Activity": 87 + }, + { + "Hour": 21, + "Day": 22, + "Activity": 9 + }, + { + "Hour": 21, + "Day": 23, + "Activity": 93 + }, + { + "Hour": 21, + "Day": 24, + "Activity": 63 + }, + { + "Hour": 21, + "Day": 25, + "Activity": 29 + }, + { + "Hour": 21, + "Day": 26, + "Activity": 53 + }, + { + "Hour": 21, + "Day": 27, + "Activity": 81 + }, + { + "Hour": 21, + "Day": 28, + "Activity": 25 + }, + { + "Hour": 21, + "Day": 29, + "Activity": 38 + }, + { + "Hour": 22, + "Day": 0, + "Activity": 80 + }, + { + "Hour": 22, + "Day": 1, + "Activity": 59 + }, + { + "Hour": 22, + "Day": 2, + "Activity": 64 + }, + { + "Hour": 22, + "Day": 3, + "Activity": 24 + }, + { + "Hour": 22, + "Day": 4, + "Activity": 24 + }, + { + "Hour": 22, + "Day": 5, + "Activity": 17 + }, + { + "Hour": 22, + "Day": 6, + "Activity": 30 + }, + { + "Hour": 22, + "Day": 7, + "Activity": 92 + }, + { + "Hour": 22, + "Day": 8, + "Activity": 70 + }, + { + "Hour": 22, + "Day": 9, + "Activity": 46 + }, + { + "Hour": 22, + "Day": 10, + "Activity": 10 + }, + { + "Hour": 22, + "Day": 11, + "Activity": 79 + }, + { + "Hour": 22, + "Day": 12, + "Activity": 86 + }, + { + "Hour": 22, + "Day": 13, + "Activity": 63 + }, + { + "Hour": 22, + "Day": 14, + "Activity": 5 + }, + { + "Hour": 22, + "Day": 15, + "Activity": 30 + }, + { + "Hour": 22, + "Day": 16, + "Activity": 85 + }, + { + "Hour": 22, + "Day": 17, + "Activity": 7 + }, + { + "Hour": 22, + "Day": 18, + "Activity": 12 + }, + { + "Hour": 22, + "Day": 19, + "Activity": 65 + }, + { + "Hour": 22, + "Day": 20, + "Activity": 16 + }, + { + "Hour": 22, + "Day": 21, + "Activity": 7 + }, + { + "Hour": 22, + "Day": 22, + "Activity": 21 + }, + { + "Hour": 22, + "Day": 23, + "Activity": 83 + }, + { + "Hour": 22, + "Day": 24, + "Activity": 75 + }, + { + "Hour": 22, + "Day": 25, + "Activity": 61 + }, + { + "Hour": 22, + "Day": 26, + "Activity": 2 + }, + { + "Hour": 22, + "Day": 27, + "Activity": 40 + }, + { + "Hour": 22, + "Day": 28, + "Activity": 22 + }, + { + "Hour": 22, + "Day": 29, + "Activity": 70 + }, + { + "Hour": 23, + "Day": 0, + "Activity": 63 + }, + { + "Hour": 23, + "Day": 1, + "Activity": 11 + }, + { + "Hour": 23, + "Day": 2, + "Activity": 81 + }, + { + "Hour": 23, + "Day": 3, + "Activity": 60 + }, + { + "Hour": 23, + "Day": 4, + "Activity": 75 + }, + { + "Hour": 23, + "Day": 5, + "Activity": 43 + }, + { + "Hour": 23, + "Day": 6, + "Activity": 59 + }, + { + "Hour": 23, + "Day": 7, + "Activity": 95 + }, + { + "Hour": 23, + "Day": 8, + "Activity": 84 + }, + { + "Hour": 23, + "Day": 9, + "Activity": 94 + }, + { + "Hour": 23, + "Day": 10, + "Activity": 2 + }, + { + "Hour": 23, + "Day": 11, + "Activity": 93 + }, + { + "Hour": 23, + "Day": 12, + "Activity": 57 + }, + { + "Hour": 23, + "Day": 13, + "Activity": 39 + }, + { + "Hour": 23, + "Day": 14, + "Activity": 4 + }, + { + "Hour": 23, + "Day": 15, + "Activity": 77 + }, + { + "Hour": 23, + "Day": 16, + "Activity": 56 + }, + { + "Hour": 23, + "Day": 17, + "Activity": 46 + }, + { + "Hour": 23, + "Day": 18, + "Activity": 58 + }, + { + "Hour": 23, + "Day": 19, + "Activity": 43 + }, + { + "Hour": 23, + "Day": 20, + "Activity": 6 + }, + { + "Hour": 23, + "Day": 21, + "Activity": 53 + }, + { + "Hour": 23, + "Day": 22, + "Activity": 69 + }, + { + "Hour": 23, + "Day": 23, + "Activity": 93 + }, + { + "Hour": 23, + "Day": 24, + "Activity": 51 + }, + { + "Hour": 23, + "Day": 25, + "Activity": 40 + }, + { + "Hour": 23, + "Day": 26, + "Activity": 21 + }, + { + "Hour": 23, + "Day": 27, + "Activity": 35 + }, + { + "Hour": 23, + "Day": 28, + "Activity": 31 + }, + { + "Hour": 23, + "Day": 29, + "Activity": 52 + }, + { + "Hour": 24, + "Day": 0, + "Activity": 10 + }, + { + "Hour": 24, + "Day": 1, + "Activity": 68 + }, + { + "Hour": 24, + "Day": 2, + "Activity": 60 + }, + { + "Hour": 24, + "Day": 3, + "Activity": 26 + }, + { + "Hour": 24, + "Day": 4, + "Activity": 21 + }, + { + "Hour": 24, + "Day": 5, + "Activity": 24 + }, + { + "Hour": 24, + "Day": 6, + "Activity": 54 + }, + { + "Hour": 24, + "Day": 7, + "Activity": 74 + }, + { + "Hour": 24, + "Day": 8, + "Activity": 31 + }, + { + "Hour": 24, + "Day": 9, + "Activity": 79 + }, + { + "Hour": 24, + "Day": 10, + "Activity": 87 + }, + { + "Hour": 24, + "Day": 11, + "Activity": 41 + }, + { + "Hour": 24, + "Day": 12, + "Activity": 65 + }, + { + "Hour": 24, + "Day": 13, + "Activity": 82 + }, + { + "Hour": 24, + "Day": 14, + "Activity": 29 + }, + { + "Hour": 24, + "Day": 15, + "Activity": 1 + }, + { + "Hour": 24, + "Day": 16, + "Activity": 48 + }, + { + "Hour": 24, + "Day": 17, + "Activity": 94 + }, + { + "Hour": 24, + "Day": 18, + "Activity": 38 + }, + { + "Hour": 24, + "Day": 19, + "Activity": 60 + }, + { + "Hour": 24, + "Day": 20, + "Activity": 35 + }, + { + "Hour": 24, + "Day": 21, + "Activity": 20 + }, + { + "Hour": 24, + "Day": 22, + "Activity": 61 + }, + { + "Hour": 24, + "Day": 23, + "Activity": 14 + }, + { + "Hour": 24, + "Day": 24, + "Activity": 44 + }, + { + "Hour": 24, + "Day": 25, + "Activity": 76 + }, + { + "Hour": 24, + "Day": 26, + "Activity": 32 + }, + { + "Hour": 24, + "Day": 27, + "Activity": 94 + }, + { + "Hour": 24, + "Day": 28, + "Activity": 37 + }, + { + "Hour": 24, + "Day": 29, + "Activity": 83 + }, + { + "Hour": 25, + "Day": 0, + "Activity": 38 + }, + { + "Hour": 25, + "Day": 1, + "Activity": 42 + }, + { + "Hour": 25, + "Day": 2, + "Activity": 6 + }, + { + "Hour": 25, + "Day": 3, + "Activity": 10 + }, + { + "Hour": 25, + "Day": 4, + "Activity": 1 + }, + { + "Hour": 25, + "Day": 5, + "Activity": 16 + }, + { + "Hour": 25, + "Day": 6, + "Activity": 24 + }, + { + "Hour": 25, + "Day": 7, + "Activity": 9 + }, + { + "Hour": 25, + "Day": 8, + "Activity": 21 + }, + { + "Hour": 25, + "Day": 9, + "Activity": 58 + }, + { + "Hour": 25, + "Day": 10, + "Activity": 74 + }, + { + "Hour": 25, + "Day": 11, + "Activity": 4 + }, + { + "Hour": 25, + "Day": 12, + "Activity": 74 + }, + { + "Hour": 25, + "Day": 13, + "Activity": 15 + }, + { + "Hour": 25, + "Day": 14, + "Activity": 56 + }, + { + "Hour": 25, + "Day": 15, + "Activity": 84 + }, + { + "Hour": 25, + "Day": 16, + "Activity": 13 + }, + { + "Hour": 25, + "Day": 17, + "Activity": 84 + }, + { + "Hour": 25, + "Day": 18, + "Activity": 44 + }, + { + "Hour": 25, + "Day": 19, + "Activity": 10 + }, + { + "Hour": 25, + "Day": 20, + "Activity": 16 + }, + { + "Hour": 25, + "Day": 21, + "Activity": 7 + }, + { + "Hour": 25, + "Day": 22, + "Activity": 74 + }, + { + "Hour": 25, + "Day": 23, + "Activity": 39 + }, + { + "Hour": 25, + "Day": 24, + "Activity": 10 + }, + { + "Hour": 25, + "Day": 25, + "Activity": 70 + }, + { + "Hour": 25, + "Day": 26, + "Activity": 3 + }, + { + "Hour": 25, + "Day": 27, + "Activity": 37 + }, + { + "Hour": 25, + "Day": 28, + "Activity": 64 + }, + { + "Hour": 25, + "Day": 29, + "Activity": 76 + }, + { + "Hour": 26, + "Day": 0, + "Activity": 69 + }, + { + "Hour": 26, + "Day": 1, + "Activity": 12 + }, + { + "Hour": 26, + "Day": 2, + "Activity": 80 + }, + { + "Hour": 26, + "Day": 3, + "Activity": 89 + }, + { + "Hour": 26, + "Day": 4, + "Activity": 53 + }, + { + "Hour": 26, + "Day": 5, + "Activity": 25 + }, + { + "Hour": 26, + "Day": 6, + "Activity": 45 + }, + { + "Hour": 26, + "Day": 7, + "Activity": 52 + }, + { + "Hour": 26, + "Day": 8, + "Activity": 68 + }, + { + "Hour": 26, + "Day": 9, + "Activity": 84 + }, + { + "Hour": 26, + "Day": 10, + "Activity": 75 + }, + { + "Hour": 26, + "Day": 11, + "Activity": 15 + }, + { + "Hour": 26, + "Day": 12, + "Activity": 79 + }, + { + "Hour": 26, + "Day": 13, + "Activity": 45 + }, + { + "Hour": 26, + "Day": 14, + "Activity": 76 + }, + { + "Hour": 26, + "Day": 15, + "Activity": 43 + }, + { + "Hour": 26, + "Day": 16, + "Activity": 18 + }, + { + "Hour": 26, + "Day": 17, + "Activity": 35 + }, + { + "Hour": 26, + "Day": 18, + "Activity": 7 + }, + { + "Hour": 26, + "Day": 19, + "Activity": 12 + }, + { + "Hour": 26, + "Day": 20, + "Activity": 79 + }, + { + "Hour": 26, + "Day": 21, + "Activity": 41 + }, + { + "Hour": 26, + "Day": 22, + "Activity": 98 + }, + { + "Hour": 26, + "Day": 23, + "Activity": 27 + }, + { + "Hour": 26, + "Day": 24, + "Activity": 23 + }, + { + "Hour": 26, + "Day": 25, + "Activity": 7 + }, + { + "Hour": 26, + "Day": 26, + "Activity": 50 + }, + { + "Hour": 26, + "Day": 27, + "Activity": 82 + }, + { + "Hour": 26, + "Day": 28, + "Activity": 20 + }, + { + "Hour": 26, + "Day": 29, + "Activity": 31 + }, + { + "Hour": 27, + "Day": 0, + "Activity": 35 + }, + { + "Hour": 27, + "Day": 1, + "Activity": 2 + }, + { + "Hour": 27, + "Day": 2, + "Activity": 41 + }, + { + "Hour": 27, + "Day": 3, + "Activity": 94 + }, + { + "Hour": 27, + "Day": 4, + "Activity": 93 + }, + { + "Hour": 27, + "Day": 5, + "Activity": 99 + }, + { + "Hour": 27, + "Day": 6, + "Activity": 77 + }, + { + "Hour": 27, + "Day": 7, + "Activity": 44 + }, + { + "Hour": 27, + "Day": 8, + "Activity": 46 + }, + { + "Hour": 27, + "Day": 9, + "Activity": 33 + }, + { + "Hour": 27, + "Day": 10, + "Activity": 78 + }, + { + "Hour": 27, + "Day": 11, + "Activity": 31 + }, + { + "Hour": 27, + "Day": 12, + "Activity": 30 + }, + { + "Hour": 27, + "Day": 13, + "Activity": 58 + }, + { + "Hour": 27, + "Day": 14, + "Activity": 2 + }, + { + "Hour": 27, + "Day": 15, + "Activity": 95 + }, + { + "Hour": 27, + "Day": 16, + "Activity": 50 + }, + { + "Hour": 27, + "Day": 17, + "Activity": 68 + }, + { + "Hour": 27, + "Day": 18, + "Activity": 2 + }, + { + "Hour": 27, + "Day": 19, + "Activity": 93 + }, + { + "Hour": 27, + "Day": 20, + "Activity": 22 + }, + { + "Hour": 27, + "Day": 21, + "Activity": 9 + }, + { + "Hour": 27, + "Day": 22, + "Activity": 76 + }, + { + "Hour": 27, + "Day": 23, + "Activity": 28 + }, + { + "Hour": 27, + "Day": 24, + "Activity": 77 + }, + { + "Hour": 27, + "Day": 25, + "Activity": 52 + }, + { + "Hour": 27, + "Day": 26, + "Activity": 60 + }, + { + "Hour": 27, + "Day": 27, + "Activity": 76 + }, + { + "Hour": 27, + "Day": 28, + "Activity": 6 + }, + { + "Hour": 27, + "Day": 29, + "Activity": 71 + }, + { + "Hour": 28, + "Day": 0, + "Activity": 52 + }, + { + "Hour": 28, + "Day": 1, + "Activity": 53 + }, + { + "Hour": 28, + "Day": 2, + "Activity": 92 + }, + { + "Hour": 28, + "Day": 3, + "Activity": 23 + }, + { + "Hour": 28, + "Day": 4, + "Activity": 89 + }, + { + "Hour": 28, + "Day": 5, + "Activity": 24 + }, + { + "Hour": 28, + "Day": 6, + "Activity": 43 + }, + { + "Hour": 28, + "Day": 7, + "Activity": 96 + }, + { + "Hour": 28, + "Day": 8, + "Activity": 16 + }, + { + "Hour": 28, + "Day": 9, + "Activity": 9 + }, + { + "Hour": 28, + "Day": 10, + "Activity": 51 + }, + { + "Hour": 28, + "Day": 11, + "Activity": 29 + }, + { + "Hour": 28, + "Day": 12, + "Activity": 65 + }, + { + "Hour": 28, + "Day": 13, + "Activity": 69 + }, + { + "Hour": 28, + "Day": 14, + "Activity": 64 + }, + { + "Hour": 28, + "Day": 15, + "Activity": 30 + }, + { + "Hour": 28, + "Day": 16, + "Activity": 2 + }, + { + "Hour": 28, + "Day": 17, + "Activity": 46 + }, + { + "Hour": 28, + "Day": 18, + "Activity": 74 + }, + { + "Hour": 28, + "Day": 19, + "Activity": 34 + }, + { + "Hour": 28, + "Day": 20, + "Activity": 86 + }, + { + "Hour": 28, + "Day": 21, + "Activity": 54 + }, + { + "Hour": 28, + "Day": 22, + "Activity": 40 + }, + { + "Hour": 28, + "Day": 23, + "Activity": 90 + }, + { + "Hour": 28, + "Day": 24, + "Activity": 23 + }, + { + "Hour": 28, + "Day": 25, + "Activity": 54 + }, + { + "Hour": 28, + "Day": 26, + "Activity": 35 + }, + { + "Hour": 28, + "Day": 27, + "Activity": 94 + }, + { + "Hour": 28, + "Day": 28, + "Activity": 22 + }, + { + "Hour": 28, + "Day": 29, + "Activity": 51 + }, + { + "Hour": 29, + "Day": 0, + "Activity": 76 + }, + { + "Hour": 29, + "Day": 1, + "Activity": 44 + }, + { + "Hour": 29, + "Day": 2, + "Activity": 7 + }, + { + "Hour": 29, + "Day": 3, + "Activity": 71 + }, + { + "Hour": 29, + "Day": 4, + "Activity": 59 + }, + { + "Hour": 29, + "Day": 5, + "Activity": 19 + }, + { + "Hour": 29, + "Day": 6, + "Activity": 98 + }, + { + "Hour": 29, + "Day": 7, + "Activity": 33 + }, + { + "Hour": 29, + "Day": 8, + "Activity": 88 + }, + { + "Hour": 29, + "Day": 9, + "Activity": 62 + }, + { + "Hour": 29, + "Day": 10, + "Activity": 0 + }, + { + "Hour": 29, + "Day": 11, + "Activity": 19 + }, + { + "Hour": 29, + "Day": 12, + "Activity": 27 + }, + { + "Hour": 29, + "Day": 13, + "Activity": 46 + }, + { + "Hour": 29, + "Day": 14, + "Activity": 9 + }, + { + "Hour": 29, + "Day": 15, + "Activity": 98 + }, + { + "Hour": 29, + "Day": 16, + "Activity": 5 + }, + { + "Hour": 29, + "Day": 17, + "Activity": 95 + }, + { + "Hour": 29, + "Day": 18, + "Activity": 45 + }, + { + "Hour": 29, + "Day": 19, + "Activity": 61 + }, + { + "Hour": 29, + "Day": 20, + "Activity": 71 + }, + { + "Hour": 29, + "Day": 21, + "Activity": 36 + }, + { + "Hour": 29, + "Day": 22, + "Activity": 2 + }, + { + "Hour": 29, + "Day": 23, + "Activity": 49 + }, + { + "Hour": 29, + "Day": 24, + "Activity": 36 + }, + { + "Hour": 29, + "Day": 25, + "Activity": 9 + }, + { + "Hour": 29, + "Day": 26, + "Activity": 48 + }, + { + "Hour": 29, + "Day": 27, + "Activity": 100 + }, + { + "Hour": 29, + "Day": 28, + "Activity": 20 + }, + { + "Hour": 29, + "Day": 29, + "Activity": 62 + }, + { + "Hour": 30, + "Day": 0, + "Activity": 34 + }, + { + "Hour": 30, + "Day": 1, + "Activity": 82 + }, + { + "Hour": 30, + "Day": 2, + "Activity": 78 + }, + { + "Hour": 30, + "Day": 3, + "Activity": 64 + }, + { + "Hour": 30, + "Day": 4, + "Activity": 67 + }, + { + "Hour": 30, + "Day": 5, + "Activity": 80 + }, + { + "Hour": 30, + "Day": 6, + "Activity": 2 + }, + { + "Hour": 30, + "Day": 7, + "Activity": 3 + }, + { + "Hour": 30, + "Day": 8, + "Activity": 38 + }, + { + "Hour": 30, + "Day": 9, + "Activity": 27 + }, + { + "Hour": 30, + "Day": 10, + "Activity": 17 + }, + { + "Hour": 30, + "Day": 11, + "Activity": 13 + }, + { + "Hour": 30, + "Day": 12, + "Activity": 70 + }, + { + "Hour": 30, + "Day": 13, + "Activity": 54 + }, + { + "Hour": 30, + "Day": 14, + "Activity": 42 + }, + { + "Hour": 30, + "Day": 15, + "Activity": 71 + }, + { + "Hour": 30, + "Day": 16, + "Activity": 22 + }, + { + "Hour": 30, + "Day": 17, + "Activity": 98 + }, + { + "Hour": 30, + "Day": 18, + "Activity": 23 + }, + { + "Hour": 30, + "Day": 19, + "Activity": 75 + }, + { + "Hour": 30, + "Day": 20, + "Activity": 31 + }, + { + "Hour": 30, + "Day": 21, + "Activity": 21 + }, + { + "Hour": 30, + "Day": 22, + "Activity": 90 + }, + { + "Hour": 30, + "Day": 23, + "Activity": 62 + }, + { + "Hour": 30, + "Day": 24, + "Activity": 21 + }, + { + "Hour": 30, + "Day": 25, + "Activity": 8 + }, + { + "Hour": 30, + "Day": 26, + "Activity": 50 + }, + { + "Hour": 30, + "Day": 27, + "Activity": 47 + }, + { + "Hour": 30, + "Day": 28, + "Activity": 61 + }, + { + "Hour": 30, + "Day": 29, + "Activity": 67 + }, + { + "Hour": 31, + "Day": 0, + "Activity": 86 + }, + { + "Hour": 31, + "Day": 1, + "Activity": 25 + }, + { + "Hour": 31, + "Day": 2, + "Activity": 30 + }, + { + "Hour": 31, + "Day": 3, + "Activity": 58 + }, + { + "Hour": 31, + "Day": 4, + "Activity": 86 + }, + { + "Hour": 31, + "Day": 5, + "Activity": 22 + }, + { + "Hour": 31, + "Day": 6, + "Activity": 56 + }, + { + "Hour": 31, + "Day": 7, + "Activity": 15 + }, + { + "Hour": 31, + "Day": 8, + "Activity": 63 + }, + { + "Hour": 31, + "Day": 9, + "Activity": 48 + }, + { + "Hour": 31, + "Day": 10, + "Activity": 54 + }, + { + "Hour": 31, + "Day": 11, + "Activity": 72 + }, + { + "Hour": 31, + "Day": 12, + "Activity": 58 + }, + { + "Hour": 31, + "Day": 13, + "Activity": 70 + }, + { + "Hour": 31, + "Day": 14, + "Activity": 50 + }, + { + "Hour": 31, + "Day": 15, + "Activity": 24 + }, + { + "Hour": 31, + "Day": 16, + "Activity": 20 + }, + { + "Hour": 31, + "Day": 17, + "Activity": 3 + }, + { + "Hour": 31, + "Day": 18, + "Activity": 69 + }, + { + "Hour": 31, + "Day": 19, + "Activity": 70 + }, + { + "Hour": 31, + "Day": 20, + "Activity": 55 + }, + { + "Hour": 31, + "Day": 21, + "Activity": 52 + }, + { + "Hour": 31, + "Day": 22, + "Activity": 31 + }, + { + "Hour": 31, + "Day": 23, + "Activity": 93 + }, + { + "Hour": 31, + "Day": 24, + "Activity": 94 + }, + { + "Hour": 31, + "Day": 25, + "Activity": 53 + }, + { + "Hour": 31, + "Day": 26, + "Activity": 23 + }, + { + "Hour": 31, + "Day": 27, + "Activity": 20 + }, + { + "Hour": 31, + "Day": 28, + "Activity": 53 + }, + { + "Hour": 31, + "Day": 29, + "Activity": 45 + }, + { + "Hour": 32, + "Day": 0, + "Activity": 79 + }, + { + "Hour": 32, + "Day": 1, + "Activity": 35 + }, + { + "Hour": 32, + "Day": 2, + "Activity": 75 + }, + { + "Hour": 32, + "Day": 3, + "Activity": 55 + }, + { + "Hour": 32, + "Day": 4, + "Activity": 50 + }, + { + "Hour": 32, + "Day": 5, + "Activity": 72 + }, + { + "Hour": 32, + "Day": 6, + "Activity": 15 + }, + { + "Hour": 32, + "Day": 7, + "Activity": 4 + }, + { + "Hour": 32, + "Day": 8, + "Activity": 61 + }, + { + "Hour": 32, + "Day": 9, + "Activity": 35 + }, + { + "Hour": 32, + "Day": 10, + "Activity": 28 + }, + { + "Hour": 32, + "Day": 11, + "Activity": 78 + }, + { + "Hour": 32, + "Day": 12, + "Activity": 99 + }, + { + "Hour": 32, + "Day": 13, + "Activity": 48 + }, + { + "Hour": 32, + "Day": 14, + "Activity": 83 + }, + { + "Hour": 32, + "Day": 15, + "Activity": 60 + }, + { + "Hour": 32, + "Day": 16, + "Activity": 18 + }, + { + "Hour": 32, + "Day": 17, + "Activity": 48 + }, + { + "Hour": 32, + "Day": 18, + "Activity": 59 + }, + { + "Hour": 32, + "Day": 19, + "Activity": 58 + }, + { + "Hour": 32, + "Day": 20, + "Activity": 5 + }, + { + "Hour": 32, + "Day": 21, + "Activity": 55 + }, + { + "Hour": 32, + "Day": 22, + "Activity": 85 + }, + { + "Hour": 32, + "Day": 23, + "Activity": 68 + }, + { + "Hour": 32, + "Day": 24, + "Activity": 38 + }, + { + "Hour": 32, + "Day": 25, + "Activity": 26 + }, + { + "Hour": 32, + "Day": 26, + "Activity": 68 + }, + { + "Hour": 32, + "Day": 27, + "Activity": 92 + }, + { + "Hour": 32, + "Day": 28, + "Activity": 62 + }, + { + "Hour": 32, + "Day": 29, + "Activity": 82 + }, + { + "Hour": 33, + "Day": 0, + "Activity": 14 + }, + { + "Hour": 33, + "Day": 1, + "Activity": 99 + }, + { + "Hour": 33, + "Day": 2, + "Activity": 53 + }, + { + "Hour": 33, + "Day": 3, + "Activity": 11 + }, + { + "Hour": 33, + "Day": 4, + "Activity": 33 + }, + { + "Hour": 33, + "Day": 5, + "Activity": 98 + }, + { + "Hour": 33, + "Day": 6, + "Activity": 77 + }, + { + "Hour": 33, + "Day": 7, + "Activity": 59 + }, + { + "Hour": 33, + "Day": 8, + "Activity": 37 + }, + { + "Hour": 33, + "Day": 9, + "Activity": 9 + }, + { + "Hour": 33, + "Day": 10, + "Activity": 11 + }, + { + "Hour": 33, + "Day": 11, + "Activity": 30 + }, + { + "Hour": 33, + "Day": 12, + "Activity": 55 + }, + { + "Hour": 33, + "Day": 13, + "Activity": 60 + }, + { + "Hour": 33, + "Day": 14, + "Activity": 78 + }, + { + "Hour": 33, + "Day": 15, + "Activity": 96 + }, + { + "Hour": 33, + "Day": 16, + "Activity": 54 + }, + { + "Hour": 33, + "Day": 17, + "Activity": 66 + }, + { + "Hour": 33, + "Day": 18, + "Activity": 2 + }, + { + "Hour": 33, + "Day": 19, + "Activity": 14 + }, + { + "Hour": 33, + "Day": 20, + "Activity": 2 + }, + { + "Hour": 33, + "Day": 21, + "Activity": 39 + }, + { + "Hour": 33, + "Day": 22, + "Activity": 76 + }, + { + "Hour": 33, + "Day": 23, + "Activity": 96 + }, + { + "Hour": 33, + "Day": 24, + "Activity": 23 + }, + { + "Hour": 33, + "Day": 25, + "Activity": 31 + }, + { + "Hour": 33, + "Day": 26, + "Activity": 6 + }, + { + "Hour": 33, + "Day": 27, + "Activity": 26 + }, + { + "Hour": 33, + "Day": 28, + "Activity": 3 + }, + { + "Hour": 33, + "Day": 29, + "Activity": 28 + }, + { + "Hour": 34, + "Day": 0, + "Activity": 93 + }, + { + "Hour": 34, + "Day": 1, + "Activity": 17 + }, + { + "Hour": 34, + "Day": 2, + "Activity": 92 + }, + { + "Hour": 34, + "Day": 3, + "Activity": 95 + }, + { + "Hour": 34, + "Day": 4, + "Activity": 5 + }, + { + "Hour": 34, + "Day": 5, + "Activity": 57 + }, + { + "Hour": 34, + "Day": 6, + "Activity": 8 + }, + { + "Hour": 34, + "Day": 7, + "Activity": 13 + }, + { + "Hour": 34, + "Day": 8, + "Activity": 98 + }, + { + "Hour": 34, + "Day": 9, + "Activity": 26 + }, + { + "Hour": 34, + "Day": 10, + "Activity": 48 + }, + { + "Hour": 34, + "Day": 11, + "Activity": 31 + }, + { + "Hour": 34, + "Day": 12, + "Activity": 95 + }, + { + "Hour": 34, + "Day": 13, + "Activity": 21 + }, + { + "Hour": 34, + "Day": 14, + "Activity": 52 + }, + { + "Hour": 34, + "Day": 15, + "Activity": 65 + }, + { + "Hour": 34, + "Day": 16, + "Activity": 89 + }, + { + "Hour": 34, + "Day": 17, + "Activity": 18 + }, + { + "Hour": 34, + "Day": 18, + "Activity": 73 + }, + { + "Hour": 34, + "Day": 19, + "Activity": 73 + }, + { + "Hour": 34, + "Day": 20, + "Activity": 99 + }, + { + "Hour": 34, + "Day": 21, + "Activity": 78 + }, + { + "Hour": 34, + "Day": 22, + "Activity": 90 + }, + { + "Hour": 34, + "Day": 23, + "Activity": 80 + }, + { + "Hour": 34, + "Day": 24, + "Activity": 71 + }, + { + "Hour": 34, + "Day": 25, + "Activity": 3 + }, + { + "Hour": 34, + "Day": 26, + "Activity": 10 + }, + { + "Hour": 34, + "Day": 27, + "Activity": 3 + }, + { + "Hour": 34, + "Day": 28, + "Activity": 33 + }, + { + "Hour": 34, + "Day": 29, + "Activity": 95 + }, + { + "Hour": 35, + "Day": 0, + "Activity": 20 + }, + { + "Hour": 35, + "Day": 1, + "Activity": 10 + }, + { + "Hour": 35, + "Day": 2, + "Activity": 65 + }, + { + "Hour": 35, + "Day": 3, + "Activity": 66 + }, + { + "Hour": 35, + "Day": 4, + "Activity": 37 + }, + { + "Hour": 35, + "Day": 5, + "Activity": 69 + }, + { + "Hour": 35, + "Day": 6, + "Activity": 16 + }, + { + "Hour": 35, + "Day": 7, + "Activity": 58 + }, + { + "Hour": 35, + "Day": 8, + "Activity": 77 + }, + { + "Hour": 35, + "Day": 9, + "Activity": 56 + }, + { + "Hour": 35, + "Day": 10, + "Activity": 8 + }, + { + "Hour": 35, + "Day": 11, + "Activity": 29 + }, + { + "Hour": 35, + "Day": 12, + "Activity": 77 + }, + { + "Hour": 35, + "Day": 13, + "Activity": 21 + }, + { + "Hour": 35, + "Day": 14, + "Activity": 98 + }, + { + "Hour": 35, + "Day": 15, + "Activity": 3 + }, + { + "Hour": 35, + "Day": 16, + "Activity": 30 + }, + { + "Hour": 35, + "Day": 17, + "Activity": 30 + }, + { + "Hour": 35, + "Day": 18, + "Activity": 22 + }, + { + "Hour": 35, + "Day": 19, + "Activity": 96 + }, + { + "Hour": 35, + "Day": 20, + "Activity": 83 + }, + { + "Hour": 35, + "Day": 21, + "Activity": 65 + }, + { + "Hour": 35, + "Day": 22, + "Activity": 93 + }, + { + "Hour": 35, + "Day": 23, + "Activity": 2 + }, + { + "Hour": 35, + "Day": 24, + "Activity": 41 + }, + { + "Hour": 35, + "Day": 25, + "Activity": 26 + }, + { + "Hour": 35, + "Day": 26, + "Activity": 48 + }, + { + "Hour": 35, + "Day": 27, + "Activity": 46 + }, + { + "Hour": 35, + "Day": 28, + "Activity": 62 + }, + { + "Hour": 35, + "Day": 29, + "Activity": 34 + }, + { + "Hour": 36, + "Day": 0, + "Activity": 76 + }, + { + "Hour": 36, + "Day": 1, + "Activity": 97 + }, + { + "Hour": 36, + "Day": 2, + "Activity": 66 + }, + { + "Hour": 36, + "Day": 3, + "Activity": 12 + }, + { + "Hour": 36, + "Day": 4, + "Activity": 28 + }, + { + "Hour": 36, + "Day": 5, + "Activity": 9 + }, + { + "Hour": 36, + "Day": 6, + "Activity": 56 + }, + { + "Hour": 36, + "Day": 7, + "Activity": 10 + }, + { + "Hour": 36, + "Day": 8, + "Activity": 76 + }, + { + "Hour": 36, + "Day": 9, + "Activity": 13 + }, + { + "Hour": 36, + "Day": 10, + "Activity": 86 + }, + { + "Hour": 36, + "Day": 11, + "Activity": 59 + }, + { + "Hour": 36, + "Day": 12, + "Activity": 58 + }, + { + "Hour": 36, + "Day": 13, + "Activity": 74 + }, + { + "Hour": 36, + "Day": 14, + "Activity": 61 + }, + { + "Hour": 36, + "Day": 15, + "Activity": 60 + }, + { + "Hour": 36, + "Day": 16, + "Activity": 60 + }, + { + "Hour": 36, + "Day": 17, + "Activity": 86 + }, + { + "Hour": 36, + "Day": 18, + "Activity": 18 + }, + { + "Hour": 36, + "Day": 19, + "Activity": 15 + }, + { + "Hour": 36, + "Day": 20, + "Activity": 79 + }, + { + "Hour": 36, + "Day": 21, + "Activity": 92 + }, + { + "Hour": 36, + "Day": 22, + "Activity": 2 + }, + { + "Hour": 36, + "Day": 23, + "Activity": 23 + }, + { + "Hour": 36, + "Day": 24, + "Activity": 56 + }, + { + "Hour": 36, + "Day": 25, + "Activity": 54 + }, + { + "Hour": 36, + "Day": 26, + "Activity": 18 + }, + { + "Hour": 36, + "Day": 27, + "Activity": 11 + }, + { + "Hour": 36, + "Day": 28, + "Activity": 47 + }, + { + "Hour": 36, + "Day": 29, + "Activity": 85 + }, + { + "Hour": 37, + "Day": 0, + "Activity": 27 + }, + { + "Hour": 37, + "Day": 1, + "Activity": 88 + }, + { + "Hour": 37, + "Day": 2, + "Activity": 79 + }, + { + "Hour": 37, + "Day": 3, + "Activity": 91 + }, + { + "Hour": 37, + "Day": 4, + "Activity": 88 + }, + { + "Hour": 37, + "Day": 5, + "Activity": 50 + }, + { + "Hour": 37, + "Day": 6, + "Activity": 23 + }, + { + "Hour": 37, + "Day": 7, + "Activity": 75 + }, + { + "Hour": 37, + "Day": 8, + "Activity": 25 + }, + { + "Hour": 37, + "Day": 9, + "Activity": 76 + }, + { + "Hour": 37, + "Day": 10, + "Activity": 94 + }, + { + "Hour": 37, + "Day": 11, + "Activity": 73 + }, + { + "Hour": 37, + "Day": 12, + "Activity": 90 + }, + { + "Hour": 37, + "Day": 13, + "Activity": 0 + }, + { + "Hour": 37, + "Day": 14, + "Activity": 94 + }, + { + "Hour": 37, + "Day": 15, + "Activity": 19 + }, + { + "Hour": 37, + "Day": 16, + "Activity": 56 + }, + { + "Hour": 37, + "Day": 17, + "Activity": 0 + }, + { + "Hour": 37, + "Day": 18, + "Activity": 52 + }, + { + "Hour": 37, + "Day": 19, + "Activity": 87 + }, + { + "Hour": 37, + "Day": 20, + "Activity": 16 + }, + { + "Hour": 37, + "Day": 21, + "Activity": 16 + }, + { + "Hour": 37, + "Day": 22, + "Activity": 47 + }, + { + "Hour": 37, + "Day": 23, + "Activity": 35 + }, + { + "Hour": 37, + "Day": 24, + "Activity": 55 + }, + { + "Hour": 37, + "Day": 25, + "Activity": 86 + }, + { + "Hour": 37, + "Day": 26, + "Activity": 90 + }, + { + "Hour": 37, + "Day": 27, + "Activity": 30 + }, + { + "Hour": 37, + "Day": 28, + "Activity": 80 + }, + { + "Hour": 37, + "Day": 29, + "Activity": 30 + }, + { + "Hour": 38, + "Day": 0, + "Activity": 80 + }, + { + "Hour": 38, + "Day": 1, + "Activity": 30 + }, + { + "Hour": 38, + "Day": 2, + "Activity": 40 + }, + { + "Hour": 38, + "Day": 3, + "Activity": 61 + }, + { + "Hour": 38, + "Day": 4, + "Activity": 83 + }, + { + "Hour": 38, + "Day": 5, + "Activity": 50 + }, + { + "Hour": 38, + "Day": 6, + "Activity": 96 + }, + { + "Hour": 38, + "Day": 7, + "Activity": 15 + }, + { + "Hour": 38, + "Day": 8, + "Activity": 64 + }, + { + "Hour": 38, + "Day": 9, + "Activity": 94 + }, + { + "Hour": 38, + "Day": 10, + "Activity": 90 + }, + { + "Hour": 38, + "Day": 11, + "Activity": 36 + }, + { + "Hour": 38, + "Day": 12, + "Activity": 5 + }, + { + "Hour": 38, + "Day": 13, + "Activity": 96 + }, + { + "Hour": 38, + "Day": 14, + "Activity": 88 + }, + { + "Hour": 38, + "Day": 15, + "Activity": 10 + }, + { + "Hour": 38, + "Day": 16, + "Activity": 82 + }, + { + "Hour": 38, + "Day": 17, + "Activity": 78 + }, + { + "Hour": 38, + "Day": 18, + "Activity": 33 + }, + { + "Hour": 38, + "Day": 19, + "Activity": 60 + }, + { + "Hour": 38, + "Day": 20, + "Activity": 22 + }, + { + "Hour": 38, + "Day": 21, + "Activity": 80 + }, + { + "Hour": 38, + "Day": 22, + "Activity": 88 + }, + { + "Hour": 38, + "Day": 23, + "Activity": 63 + }, + { + "Hour": 38, + "Day": 24, + "Activity": 92 + }, + { + "Hour": 38, + "Day": 25, + "Activity": 50 + }, + { + "Hour": 38, + "Day": 26, + "Activity": 24 + }, + { + "Hour": 38, + "Day": 27, + "Activity": 57 + }, + { + "Hour": 38, + "Day": 28, + "Activity": 51 + }, + { + "Hour": 38, + "Day": 29, + "Activity": 64 + }, + { + "Hour": 39, + "Day": 0, + "Activity": 97 + }, + { + "Hour": 39, + "Day": 1, + "Activity": 63 + }, + { + "Hour": 39, + "Day": 2, + "Activity": 97 + }, + { + "Hour": 39, + "Day": 3, + "Activity": 32 + }, + { + "Hour": 39, + "Day": 4, + "Activity": 59 + }, + { + "Hour": 39, + "Day": 5, + "Activity": 43 + }, + { + "Hour": 39, + "Day": 6, + "Activity": 88 + }, + { + "Hour": 39, + "Day": 7, + "Activity": 31 + }, + { + "Hour": 39, + "Day": 8, + "Activity": 54 + }, + { + "Hour": 39, + "Day": 9, + "Activity": 15 + }, + { + "Hour": 39, + "Day": 10, + "Activity": 53 + }, + { + "Hour": 39, + "Day": 11, + "Activity": 47 + }, + { + "Hour": 39, + "Day": 12, + "Activity": 30 + }, + { + "Hour": 39, + "Day": 13, + "Activity": 14 + }, + { + "Hour": 39, + "Day": 14, + "Activity": 90 + }, + { + "Hour": 39, + "Day": 15, + "Activity": 22 + }, + { + "Hour": 39, + "Day": 16, + "Activity": 93 + }, + { + "Hour": 39, + "Day": 17, + "Activity": 10 + }, + { + "Hour": 39, + "Day": 18, + "Activity": 81 + }, + { + "Hour": 39, + "Day": 19, + "Activity": 27 + }, + { + "Hour": 39, + "Day": 20, + "Activity": 96 + }, + { + "Hour": 39, + "Day": 21, + "Activity": 0 + }, + { + "Hour": 39, + "Day": 22, + "Activity": 57 + }, + { + "Hour": 39, + "Day": 23, + "Activity": 46 + }, + { + "Hour": 39, + "Day": 24, + "Activity": 22 + }, + { + "Hour": 39, + "Day": 25, + "Activity": 7 + }, + { + "Hour": 39, + "Day": 26, + "Activity": 44 + }, + { + "Hour": 39, + "Day": 27, + "Activity": 77 + }, + { + "Hour": 39, + "Day": 28, + "Activity": 25 + }, + { + "Hour": 39, + "Day": 29, + "Activity": 96 + }, + { + "Hour": 40, + "Day": 0, + "Activity": 100 + }, + { + "Hour": 40, + "Day": 1, + "Activity": 55 + }, + { + "Hour": 40, + "Day": 2, + "Activity": 81 + }, + { + "Hour": 40, + "Day": 3, + "Activity": 89 + }, + { + "Hour": 40, + "Day": 4, + "Activity": 29 + }, + { + "Hour": 40, + "Day": 5, + "Activity": 50 + }, + { + "Hour": 40, + "Day": 6, + "Activity": 37 + }, + { + "Hour": 40, + "Day": 7, + "Activity": 41 + }, + { + "Hour": 40, + "Day": 8, + "Activity": 85 + }, + { + "Hour": 40, + "Day": 9, + "Activity": 81 + }, + { + "Hour": 40, + "Day": 10, + "Activity": 81 + }, + { + "Hour": 40, + "Day": 11, + "Activity": 88 + }, + { + "Hour": 40, + "Day": 12, + "Activity": 85 + }, + { + "Hour": 40, + "Day": 13, + "Activity": 1 + }, + { + "Hour": 40, + "Day": 14, + "Activity": 82 + }, + { + "Hour": 40, + "Day": 15, + "Activity": 23 + }, + { + "Hour": 40, + "Day": 16, + "Activity": 39 + }, + { + "Hour": 40, + "Day": 17, + "Activity": 34 + }, + { + "Hour": 40, + "Day": 18, + "Activity": 51 + }, + { + "Hour": 40, + "Day": 19, + "Activity": 89 + }, + { + "Hour": 40, + "Day": 20, + "Activity": 15 + }, + { + "Hour": 40, + "Day": 21, + "Activity": 81 + }, + { + "Hour": 40, + "Day": 22, + "Activity": 18 + }, + { + "Hour": 40, + "Day": 23, + "Activity": 35 + }, + { + "Hour": 40, + "Day": 24, + "Activity": 68 + }, + { + "Hour": 40, + "Day": 25, + "Activity": 32 + }, + { + "Hour": 40, + "Day": 26, + "Activity": 13 + }, + { + "Hour": 40, + "Day": 27, + "Activity": 4 + }, + { + "Hour": 40, + "Day": 28, + "Activity": 70 + }, + { + "Hour": 40, + "Day": 29, + "Activity": 4 + }, + { + "Hour": 41, + "Day": 0, + "Activity": 95 + }, + { + "Hour": 41, + "Day": 1, + "Activity": 39 + }, + { + "Hour": 41, + "Day": 2, + "Activity": 51 + }, + { + "Hour": 41, + "Day": 3, + "Activity": 73 + }, + { + "Hour": 41, + "Day": 4, + "Activity": 6 + }, + { + "Hour": 41, + "Day": 5, + "Activity": 25 + }, + { + "Hour": 41, + "Day": 6, + "Activity": 41 + }, + { + "Hour": 41, + "Day": 7, + "Activity": 96 + }, + { + "Hour": 41, + "Day": 8, + "Activity": 19 + }, + { + "Hour": 41, + "Day": 9, + "Activity": 83 + }, + { + "Hour": 41, + "Day": 10, + "Activity": 36 + }, + { + "Hour": 41, + "Day": 11, + "Activity": 74 + }, + { + "Hour": 41, + "Day": 12, + "Activity": 8 + }, + { + "Hour": 41, + "Day": 13, + "Activity": 70 + }, + { + "Hour": 41, + "Day": 14, + "Activity": 36 + }, + { + "Hour": 41, + "Day": 15, + "Activity": 92 + }, + { + "Hour": 41, + "Day": 16, + "Activity": 22 + }, + { + "Hour": 41, + "Day": 17, + "Activity": 19 + }, + { + "Hour": 41, + "Day": 18, + "Activity": 99 + }, + { + "Hour": 41, + "Day": 19, + "Activity": 82 + }, + { + "Hour": 41, + "Day": 20, + "Activity": 14 + }, + { + "Hour": 41, + "Day": 21, + "Activity": 30 + }, + { + "Hour": 41, + "Day": 22, + "Activity": 56 + }, + { + "Hour": 41, + "Day": 23, + "Activity": 8 + }, + { + "Hour": 41, + "Day": 24, + "Activity": 40 + }, + { + "Hour": 41, + "Day": 25, + "Activity": 63 + }, + { + "Hour": 41, + "Day": 26, + "Activity": 58 + }, + { + "Hour": 41, + "Day": 27, + "Activity": 99 + }, + { + "Hour": 41, + "Day": 28, + "Activity": 94 + }, + { + "Hour": 41, + "Day": 29, + "Activity": 93 + }, + { + "Hour": 42, + "Day": 0, + "Activity": 27 + }, + { + "Hour": 42, + "Day": 1, + "Activity": 12 + }, + { + "Hour": 42, + "Day": 2, + "Activity": 67 + }, + { + "Hour": 42, + "Day": 3, + "Activity": 7 + }, + { + "Hour": 42, + "Day": 4, + "Activity": 9 + }, + { + "Hour": 42, + "Day": 5, + "Activity": 76 + }, + { + "Hour": 42, + "Day": 6, + "Activity": 35 + }, + { + "Hour": 42, + "Day": 7, + "Activity": 62 + }, + { + "Hour": 42, + "Day": 8, + "Activity": 49 + }, + { + "Hour": 42, + "Day": 9, + "Activity": 67 + }, + { + "Hour": 42, + "Day": 10, + "Activity": 55 + }, + { + "Hour": 42, + "Day": 11, + "Activity": 99 + }, + { + "Hour": 42, + "Day": 12, + "Activity": 76 + }, + { + "Hour": 42, + "Day": 13, + "Activity": 26 + }, + { + "Hour": 42, + "Day": 14, + "Activity": 59 + }, + { + "Hour": 42, + "Day": 15, + "Activity": 65 + }, + { + "Hour": 42, + "Day": 16, + "Activity": 14 + }, + { + "Hour": 42, + "Day": 17, + "Activity": 16 + }, + { + "Hour": 42, + "Day": 18, + "Activity": 13 + }, + { + "Hour": 42, + "Day": 19, + "Activity": 17 + }, + { + "Hour": 42, + "Day": 20, + "Activity": 14 + }, + { + "Hour": 42, + "Day": 21, + "Activity": 60 + }, + { + "Hour": 42, + "Day": 22, + "Activity": 81 + }, + { + "Hour": 42, + "Day": 23, + "Activity": 67 + }, + { + "Hour": 42, + "Day": 24, + "Activity": 59 + }, + { + "Hour": 42, + "Day": 25, + "Activity": 67 + }, + { + "Hour": 42, + "Day": 26, + "Activity": 48 + }, + { + "Hour": 42, + "Day": 27, + "Activity": 98 + }, + { + "Hour": 42, + "Day": 28, + "Activity": 10 + }, + { + "Hour": 42, + "Day": 29, + "Activity": 44 + }, + { + "Hour": 43, + "Day": 0, + "Activity": 81 + }, + { + "Hour": 43, + "Day": 1, + "Activity": 70 + }, + { + "Hour": 43, + "Day": 2, + "Activity": 33 + }, + { + "Hour": 43, + "Day": 3, + "Activity": 12 + }, + { + "Hour": 43, + "Day": 4, + "Activity": 13 + }, + { + "Hour": 43, + "Day": 5, + "Activity": 41 + }, + { + "Hour": 43, + "Day": 6, + "Activity": 7 + }, + { + "Hour": 43, + "Day": 7, + "Activity": 32 + }, + { + "Hour": 43, + "Day": 8, + "Activity": 38 + }, + { + "Hour": 43, + "Day": 9, + "Activity": 60 + }, + { + "Hour": 43, + "Day": 10, + "Activity": 11 + }, + { + "Hour": 43, + "Day": 11, + "Activity": 37 + }, + { + "Hour": 43, + "Day": 12, + "Activity": 79 + }, + { + "Hour": 43, + "Day": 13, + "Activity": 68 + }, + { + "Hour": 43, + "Day": 14, + "Activity": 99 + }, + { + "Hour": 43, + "Day": 15, + "Activity": 24 + }, + { + "Hour": 43, + "Day": 16, + "Activity": 2 + }, + { + "Hour": 43, + "Day": 17, + "Activity": 47 + }, + { + "Hour": 43, + "Day": 18, + "Activity": 88 + }, + { + "Hour": 43, + "Day": 19, + "Activity": 91 + }, + { + "Hour": 43, + "Day": 20, + "Activity": 15 + }, + { + "Hour": 43, + "Day": 21, + "Activity": 8 + }, + { + "Hour": 43, + "Day": 22, + "Activity": 3 + }, + { + "Hour": 43, + "Day": 23, + "Activity": 14 + }, + { + "Hour": 43, + "Day": 24, + "Activity": 23 + }, + { + "Hour": 43, + "Day": 25, + "Activity": 74 + }, + { + "Hour": 43, + "Day": 26, + "Activity": 70 + }, + { + "Hour": 43, + "Day": 27, + "Activity": 48 + }, + { + "Hour": 43, + "Day": 28, + "Activity": 41 + }, + { + "Hour": 43, + "Day": 29, + "Activity": 82 + }, + { + "Hour": 44, + "Day": 0, + "Activity": 22 + }, + { + "Hour": 44, + "Day": 1, + "Activity": 56 + }, + { + "Hour": 44, + "Day": 2, + "Activity": 89 + }, + { + "Hour": 44, + "Day": 3, + "Activity": 2 + }, + { + "Hour": 44, + "Day": 4, + "Activity": 99 + }, + { + "Hour": 44, + "Day": 5, + "Activity": 18 + }, + { + "Hour": 44, + "Day": 6, + "Activity": 46 + }, + { + "Hour": 44, + "Day": 7, + "Activity": 96 + }, + { + "Hour": 44, + "Day": 8, + "Activity": 17 + }, + { + "Hour": 44, + "Day": 9, + "Activity": 4 + }, + { + "Hour": 44, + "Day": 10, + "Activity": 71 + }, + { + "Hour": 44, + "Day": 11, + "Activity": 54 + }, + { + "Hour": 44, + "Day": 12, + "Activity": 60 + }, + { + "Hour": 44, + "Day": 13, + "Activity": 57 + }, + { + "Hour": 44, + "Day": 14, + "Activity": 92 + }, + { + "Hour": 44, + "Day": 15, + "Activity": 75 + }, + { + "Hour": 44, + "Day": 16, + "Activity": 93 + }, + { + "Hour": 44, + "Day": 17, + "Activity": 2 + }, + { + "Hour": 44, + "Day": 18, + "Activity": 9 + }, + { + "Hour": 44, + "Day": 19, + "Activity": 18 + }, + { + "Hour": 44, + "Day": 20, + "Activity": 61 + }, + { + "Hour": 44, + "Day": 21, + "Activity": 70 + }, + { + "Hour": 44, + "Day": 22, + "Activity": 29 + }, + { + "Hour": 44, + "Day": 23, + "Activity": 52 + }, + { + "Hour": 44, + "Day": 24, + "Activity": 21 + }, + { + "Hour": 44, + "Day": 25, + "Activity": 30 + }, + { + "Hour": 44, + "Day": 26, + "Activity": 53 + }, + { + "Hour": 44, + "Day": 27, + "Activity": 45 + }, + { + "Hour": 44, + "Day": 28, + "Activity": 88 + }, + { + "Hour": 44, + "Day": 29, + "Activity": 67 + }, + { + "Hour": 45, + "Day": 0, + "Activity": 16 + }, + { + "Hour": 45, + "Day": 1, + "Activity": 23 + }, + { + "Hour": 45, + "Day": 2, + "Activity": 48 + }, + { + "Hour": 45, + "Day": 3, + "Activity": 21 + }, + { + "Hour": 45, + "Day": 4, + "Activity": 8 + }, + { + "Hour": 45, + "Day": 5, + "Activity": 52 + }, + { + "Hour": 45, + "Day": 6, + "Activity": 39 + }, + { + "Hour": 45, + "Day": 7, + "Activity": 69 + }, + { + "Hour": 45, + "Day": 8, + "Activity": 28 + }, + { + "Hour": 45, + "Day": 9, + "Activity": 23 + }, + { + "Hour": 45, + "Day": 10, + "Activity": 77 + }, + { + "Hour": 45, + "Day": 11, + "Activity": 18 + }, + { + "Hour": 45, + "Day": 12, + "Activity": 96 + }, + { + "Hour": 45, + "Day": 13, + "Activity": 78 + }, + { + "Hour": 45, + "Day": 14, + "Activity": 48 + }, + { + "Hour": 45, + "Day": 15, + "Activity": 24 + }, + { + "Hour": 45, + "Day": 16, + "Activity": 94 + }, + { + "Hour": 45, + "Day": 17, + "Activity": 15 + }, + { + "Hour": 45, + "Day": 18, + "Activity": 78 + }, + { + "Hour": 45, + "Day": 19, + "Activity": 77 + }, + { + "Hour": 45, + "Day": 20, + "Activity": 84 + }, + { + "Hour": 45, + "Day": 21, + "Activity": 7 + }, + { + "Hour": 45, + "Day": 22, + "Activity": 39 + }, + { + "Hour": 45, + "Day": 23, + "Activity": 93 + }, + { + "Hour": 45, + "Day": 24, + "Activity": 48 + }, + { + "Hour": 45, + "Day": 25, + "Activity": 31 + }, + { + "Hour": 45, + "Day": 26, + "Activity": 34 + }, + { + "Hour": 45, + "Day": 27, + "Activity": 67 + }, + { + "Hour": 45, + "Day": 28, + "Activity": 66 + }, + { + "Hour": 45, + "Day": 29, + "Activity": 12 + }, + { + "Hour": 46, + "Day": 0, + "Activity": 18 + }, + { + "Hour": 46, + "Day": 1, + "Activity": 60 + }, + { + "Hour": 46, + "Day": 2, + "Activity": 59 + }, + { + "Hour": 46, + "Day": 3, + "Activity": 21 + }, + { + "Hour": 46, + "Day": 4, + "Activity": 88 + }, + { + "Hour": 46, + "Day": 5, + "Activity": 53 + }, + { + "Hour": 46, + "Day": 6, + "Activity": 59 + }, + { + "Hour": 46, + "Day": 7, + "Activity": 64 + }, + { + "Hour": 46, + "Day": 8, + "Activity": 53 + }, + { + "Hour": 46, + "Day": 9, + "Activity": 72 + }, + { + "Hour": 46, + "Day": 10, + "Activity": 13 + }, + { + "Hour": 46, + "Day": 11, + "Activity": 78 + }, + { + "Hour": 46, + "Day": 12, + "Activity": 56 + }, + { + "Hour": 46, + "Day": 13, + "Activity": 16 + }, + { + "Hour": 46, + "Day": 14, + "Activity": 43 + }, + { + "Hour": 46, + "Day": 15, + "Activity": 8 + }, + { + "Hour": 46, + "Day": 16, + "Activity": 79 + }, + { + "Hour": 46, + "Day": 17, + "Activity": 69 + }, + { + "Hour": 46, + "Day": 18, + "Activity": 16 + }, + { + "Hour": 46, + "Day": 19, + "Activity": 84 + }, + { + "Hour": 46, + "Day": 20, + "Activity": 55 + }, + { + "Hour": 46, + "Day": 21, + "Activity": 11 + }, + { + "Hour": 46, + "Day": 22, + "Activity": 1 + }, + { + "Hour": 46, + "Day": 23, + "Activity": 56 + }, + { + "Hour": 46, + "Day": 24, + "Activity": 94 + }, + { + "Hour": 46, + "Day": 25, + "Activity": 36 + }, + { + "Hour": 46, + "Day": 26, + "Activity": 66 + }, + { + "Hour": 46, + "Day": 27, + "Activity": 31 + }, + { + "Hour": 46, + "Day": 28, + "Activity": 79 + }, + { + "Hour": 46, + "Day": 29, + "Activity": 83 + }, + { + "Hour": 47, + "Day": 0, + "Activity": 35 + }, + { + "Hour": 47, + "Day": 1, + "Activity": 43 + }, + { + "Hour": 47, + "Day": 2, + "Activity": 19 + }, + { + "Hour": 47, + "Day": 3, + "Activity": 76 + }, + { + "Hour": 47, + "Day": 4, + "Activity": 63 + }, + { + "Hour": 47, + "Day": 5, + "Activity": 70 + }, + { + "Hour": 47, + "Day": 6, + "Activity": 74 + }, + { + "Hour": 47, + "Day": 7, + "Activity": 22 + }, + { + "Hour": 47, + "Day": 8, + "Activity": 94 + }, + { + "Hour": 47, + "Day": 9, + "Activity": 48 + }, + { + "Hour": 47, + "Day": 10, + "Activity": 64 + }, + { + "Hour": 47, + "Day": 11, + "Activity": 20 + }, + { + "Hour": 47, + "Day": 12, + "Activity": 73 + }, + { + "Hour": 47, + "Day": 13, + "Activity": 28 + }, + { + "Hour": 47, + "Day": 14, + "Activity": 76 + }, + { + "Hour": 47, + "Day": 15, + "Activity": 51 + }, + { + "Hour": 47, + "Day": 16, + "Activity": 30 + }, + { + "Hour": 47, + "Day": 17, + "Activity": 61 + }, + { + "Hour": 47, + "Day": 18, + "Activity": 15 + }, + { + "Hour": 47, + "Day": 19, + "Activity": 82 + }, + { + "Hour": 47, + "Day": 20, + "Activity": 23 + }, + { + "Hour": 47, + "Day": 21, + "Activity": 81 + }, + { + "Hour": 47, + "Day": 22, + "Activity": 92 + }, + { + "Hour": 47, + "Day": 23, + "Activity": 100 + }, + { + "Hour": 47, + "Day": 24, + "Activity": 69 + }, + { + "Hour": 47, + "Day": 25, + "Activity": 85 + }, + { + "Hour": 47, + "Day": 26, + "Activity": 98 + }, + { + "Hour": 47, + "Day": 27, + "Activity": 15 + }, + { + "Hour": 47, + "Day": 28, + "Activity": 64 + }, + { + "Hour": 47, + "Day": 29, + "Activity": 52 + }, + { + "Hour": 48, + "Day": 0, + "Activity": 75 + }, + { + "Hour": 48, + "Day": 1, + "Activity": 76 + }, + { + "Hour": 48, + "Day": 2, + "Activity": 92 + }, + { + "Hour": 48, + "Day": 3, + "Activity": 16 + }, + { + "Hour": 48, + "Day": 4, + "Activity": 30 + }, + { + "Hour": 48, + "Day": 5, + "Activity": 83 + }, + { + "Hour": 48, + "Day": 6, + "Activity": 90 + }, + { + "Hour": 48, + "Day": 7, + "Activity": 23 + }, + { + "Hour": 48, + "Day": 8, + "Activity": 94 + }, + { + "Hour": 48, + "Day": 9, + "Activity": 68 + }, + { + "Hour": 48, + "Day": 10, + "Activity": 68 + }, + { + "Hour": 48, + "Day": 11, + "Activity": 49 + }, + { + "Hour": 48, + "Day": 12, + "Activity": 2 + }, + { + "Hour": 48, + "Day": 13, + "Activity": 58 + }, + { + "Hour": 48, + "Day": 14, + "Activity": 57 + }, + { + "Hour": 48, + "Day": 15, + "Activity": 70 + }, + { + "Hour": 48, + "Day": 16, + "Activity": 2 + }, + { + "Hour": 48, + "Day": 17, + "Activity": 33 + }, + { + "Hour": 48, + "Day": 18, + "Activity": 40 + }, + { + "Hour": 48, + "Day": 19, + "Activity": 81 + }, + { + "Hour": 48, + "Day": 20, + "Activity": 65 + }, + { + "Hour": 48, + "Day": 21, + "Activity": 60 + }, + { + "Hour": 48, + "Day": 22, + "Activity": 94 + }, + { + "Hour": 48, + "Day": 23, + "Activity": 17 + }, + { + "Hour": 48, + "Day": 24, + "Activity": 22 + }, + { + "Hour": 48, + "Day": 25, + "Activity": 72 + }, + { + "Hour": 48, + "Day": 26, + "Activity": 83 + }, + { + "Hour": 48, + "Day": 27, + "Activity": 57 + }, + { + "Hour": 48, + "Day": 28, + "Activity": 29 + }, + { + "Hour": 48, + "Day": 29, + "Activity": 47 + }, + { + "Hour": 49, + "Day": 0, + "Activity": 25 + }, + { + "Hour": 49, + "Day": 1, + "Activity": 74 + }, + { + "Hour": 49, + "Day": 2, + "Activity": 39 + }, + { + "Hour": 49, + "Day": 3, + "Activity": 49 + }, + { + "Hour": 49, + "Day": 4, + "Activity": 54 + }, + { + "Hour": 49, + "Day": 5, + "Activity": 20 + }, + { + "Hour": 49, + "Day": 6, + "Activity": 97 + }, + { + "Hour": 49, + "Day": 7, + "Activity": 78 + }, + { + "Hour": 49, + "Day": 8, + "Activity": 82 + }, + { + "Hour": 49, + "Day": 9, + "Activity": 33 + }, + { + "Hour": 49, + "Day": 10, + "Activity": 96 + }, + { + "Hour": 49, + "Day": 11, + "Activity": 89 + }, + { + "Hour": 49, + "Day": 12, + "Activity": 66 + }, + { + "Hour": 49, + "Day": 13, + "Activity": 22 + }, + { + "Hour": 49, + "Day": 14, + "Activity": 32 + }, + { + "Hour": 49, + "Day": 15, + "Activity": 85 + }, + { + "Hour": 49, + "Day": 16, + "Activity": 89 + }, + { + "Hour": 49, + "Day": 17, + "Activity": 61 + }, + { + "Hour": 49, + "Day": 18, + "Activity": 67 + }, + { + "Hour": 49, + "Day": 19, + "Activity": 41 + }, + { + "Hour": 49, + "Day": 20, + "Activity": 94 + }, + { + "Hour": 49, + "Day": 21, + "Activity": 43 + }, + { + "Hour": 49, + "Day": 22, + "Activity": 59 + }, + { + "Hour": 49, + "Day": 23, + "Activity": 65 + }, + { + "Hour": 49, + "Day": 24, + "Activity": 22 + }, + { + "Hour": 49, + "Day": 25, + "Activity": 25 + }, + { + "Hour": 49, + "Day": 26, + "Activity": 3 + }, + { + "Hour": 49, + "Day": 27, + "Activity": 18 + }, + { + "Hour": 49, + "Day": 28, + "Activity": 39 + }, + { + "Hour": 49, + "Day": 29, + "Activity": 58 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/heatmap/03-card12.flint.json b/test-harness/excel/evaluations/inputs/heatmap/03-card12.flint.json new file mode 100644 index 00000000..3714b735 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/heatmap/03-card12.flint.json @@ -0,0 +1,383 @@ +{ + "semantic_types": { + "Month": "Month", + "Product": "Product", + "Sales": "Amount" + }, + "chart_spec": { + "chartType": "Heatmap", + "encodings": { + "x": "Month", + "y": "Product", + "color": "Sales" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Month": "Jan", + "Product": "Laptop", + "Sales": 351 + }, + { + "Month": "Jan", + "Product": "Phone", + "Sales": 917 + }, + { + "Month": "Jan", + "Product": "Tablet", + "Sales": 456 + }, + { + "Month": "Jan", + "Product": "Desktop", + "Sales": 803 + }, + { + "Month": "Jan", + "Product": "Monitor", + "Sales": 65 + }, + { + "Month": "Jan", + "Product": "Keyboard", + "Sales": 442 + }, + { + "Month": "Feb", + "Product": "Laptop", + "Sales": 435 + }, + { + "Month": "Feb", + "Product": "Phone", + "Sales": 552 + }, + { + "Month": "Feb", + "Product": "Tablet", + "Sales": 883 + }, + { + "Month": "Feb", + "Product": "Desktop", + "Sales": 602 + }, + { + "Month": "Feb", + "Product": "Monitor", + "Sales": 658 + }, + { + "Month": "Feb", + "Product": "Keyboard", + "Sales": 898 + }, + { + "Month": "Mar", + "Product": "Laptop", + "Sales": 850 + }, + { + "Month": "Mar", + "Product": "Phone", + "Sales": 142 + }, + { + "Month": "Mar", + "Product": "Tablet", + "Sales": 643 + }, + { + "Month": "Mar", + "Product": "Desktop", + "Sales": 349 + }, + { + "Month": "Mar", + "Product": "Monitor", + "Sales": 614 + }, + { + "Month": "Mar", + "Product": "Keyboard", + "Sales": 375 + }, + { + "Month": "Apr", + "Product": "Laptop", + "Sales": 113 + }, + { + "Month": "Apr", + "Product": "Phone", + "Sales": 140 + }, + { + "Month": "Apr", + "Product": "Tablet", + "Sales": 910 + }, + { + "Month": "Apr", + "Product": "Desktop", + "Sales": 589 + }, + { + "Month": "Apr", + "Product": "Monitor", + "Sales": 525 + }, + { + "Month": "Apr", + "Product": "Keyboard", + "Sales": 197 + }, + { + "Month": "May", + "Product": "Laptop", + "Sales": 574 + }, + { + "Month": "May", + "Product": "Phone", + "Sales": 731 + }, + { + "Month": "May", + "Product": "Tablet", + "Sales": 200 + }, + { + "Month": "May", + "Product": "Desktop", + "Sales": 146 + }, + { + "Month": "May", + "Product": "Monitor", + "Sales": 91 + }, + { + "Month": "May", + "Product": "Keyboard", + "Sales": 152 + }, + { + "Month": "Jun", + "Product": "Laptop", + "Sales": 828 + }, + { + "Month": "Jun", + "Product": "Phone", + "Sales": 120 + }, + { + "Month": "Jun", + "Product": "Tablet", + "Sales": 876 + }, + { + "Month": "Jun", + "Product": "Desktop", + "Sales": 979 + }, + { + "Month": "Jun", + "Product": "Monitor", + "Sales": 775 + }, + { + "Month": "Jun", + "Product": "Keyboard", + "Sales": 19 + }, + { + "Month": "Jul", + "Product": "Laptop", + "Sales": 789 + }, + { + "Month": "Jul", + "Product": "Phone", + "Sales": 3 + }, + { + "Month": "Jul", + "Product": "Tablet", + "Sales": 734 + }, + { + "Month": "Jul", + "Product": "Desktop", + "Sales": 964 + }, + { + "Month": "Jul", + "Product": "Monitor", + "Sales": 508 + }, + { + "Month": "Jul", + "Product": "Keyboard", + "Sales": 519 + }, + { + "Month": "Aug", + "Product": "Laptop", + "Sales": 259 + }, + { + "Month": "Aug", + "Product": "Phone", + "Sales": 690 + }, + { + "Month": "Aug", + "Product": "Tablet", + "Sales": 715 + }, + { + "Month": "Aug", + "Product": "Desktop", + "Sales": 466 + }, + { + "Month": "Aug", + "Product": "Monitor", + "Sales": 336 + }, + { + "Month": "Aug", + "Product": "Keyboard", + "Sales": 554 + }, + { + "Month": "Sep", + "Product": "Laptop", + "Sales": 539 + }, + { + "Month": "Sep", + "Product": "Phone", + "Sales": 515 + }, + { + "Month": "Sep", + "Product": "Tablet", + "Sales": 818 + }, + { + "Month": "Sep", + "Product": "Desktop", + "Sales": 572 + }, + { + "Month": "Sep", + "Product": "Monitor", + "Sales": 381 + }, + { + "Month": "Sep", + "Product": "Keyboard", + "Sales": 691 + }, + { + "Month": "Oct", + "Product": "Laptop", + "Sales": 897 + }, + { + "Month": "Oct", + "Product": "Phone", + "Sales": 845 + }, + { + "Month": "Oct", + "Product": "Tablet", + "Sales": 154 + }, + { + "Month": "Oct", + "Product": "Desktop", + "Sales": 293 + }, + { + "Month": "Oct", + "Product": "Monitor", + "Sales": 582 + }, + { + "Month": "Oct", + "Product": "Keyboard", + "Sales": 810 + }, + { + "Month": "Nov", + "Product": "Laptop", + "Sales": 153 + }, + { + "Month": "Nov", + "Product": "Phone", + "Sales": 155 + }, + { + "Month": "Nov", + "Product": "Tablet", + "Sales": 867 + }, + { + "Month": "Nov", + "Product": "Desktop", + "Sales": 835 + }, + { + "Month": "Nov", + "Product": "Monitor", + "Sales": 225 + }, + { + "Month": "Nov", + "Product": "Keyboard", + "Sales": 77 + }, + { + "Month": "Dec", + "Product": "Laptop", + "Sales": 832 + }, + { + "Month": "Dec", + "Product": "Phone", + "Sales": 427 + }, + { + "Month": "Dec", + "Product": "Tablet", + "Sales": 973 + }, + { + "Month": "Dec", + "Product": "Desktop", + "Sales": 478 + }, + { + "Month": "Dec", + "Product": "Monitor", + "Sales": 429 + }, + { + "Month": "Dec", + "Product": "Keyboard", + "Sales": 627 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/heatmap/04-card80.flint.json b/test-harness/excel/evaluations/inputs/heatmap/04-card80.flint.json new file mode 100644 index 00000000..45213aa2 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/heatmap/04-card80.flint.json @@ -0,0 +1,2023 @@ +{ + "semantic_types": { + "Date": "Date", + "Category": "Category", + "Intensity": "Quantity" + }, + "chart_spec": { + "chartType": "Heatmap", + "encodings": { + "x": "Date", + "y": "Category", + "color": "Intensity" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2016-01-01", + "Category": "Electronics", + "Intensity": 41 + }, + { + "Date": "2016-01-01", + "Category": "Clothing", + "Intensity": 12 + }, + { + "Date": "2016-01-01", + "Category": "Food", + "Intensity": 15 + }, + { + "Date": "2016-01-01", + "Category": "Books", + "Intensity": 56 + }, + { + "Date": "2016-01-01", + "Category": "Sports", + "Intensity": 90 + }, + { + "Date": "2016-01-14", + "Category": "Electronics", + "Intensity": 7 + }, + { + "Date": "2016-01-14", + "Category": "Clothing", + "Intensity": 97 + }, + { + "Date": "2016-01-14", + "Category": "Food", + "Intensity": 58 + }, + { + "Date": "2016-01-14", + "Category": "Books", + "Intensity": 81 + }, + { + "Date": "2016-01-14", + "Category": "Sports", + "Intensity": 8 + }, + { + "Date": "2016-01-28", + "Category": "Electronics", + "Intensity": 61 + }, + { + "Date": "2016-01-28", + "Category": "Clothing", + "Intensity": 32 + }, + { + "Date": "2016-01-28", + "Category": "Food", + "Intensity": 96 + }, + { + "Date": "2016-01-28", + "Category": "Books", + "Intensity": 62 + }, + { + "Date": "2016-01-28", + "Category": "Sports", + "Intensity": 27 + }, + { + "Date": "2016-02-11", + "Category": "Electronics", + "Intensity": 92 + }, + { + "Date": "2016-02-11", + "Category": "Clothing", + "Intensity": 82 + }, + { + "Date": "2016-02-11", + "Category": "Food", + "Intensity": 30 + }, + { + "Date": "2016-02-11", + "Category": "Books", + "Intensity": 53 + }, + { + "Date": "2016-02-11", + "Category": "Sports", + "Intensity": 46 + }, + { + "Date": "2016-02-24", + "Category": "Electronics", + "Intensity": 61 + }, + { + "Date": "2016-02-24", + "Category": "Clothing", + "Intensity": 31 + }, + { + "Date": "2016-02-24", + "Category": "Food", + "Intensity": 18 + }, + { + "Date": "2016-02-24", + "Category": "Books", + "Intensity": 34 + }, + { + "Date": "2016-02-24", + "Category": "Sports", + "Intensity": 25 + }, + { + "Date": "2016-03-09", + "Category": "Electronics", + "Intensity": 71 + }, + { + "Date": "2016-03-09", + "Category": "Clothing", + "Intensity": 68 + }, + { + "Date": "2016-03-09", + "Category": "Food", + "Intensity": 58 + }, + { + "Date": "2016-03-09", + "Category": "Books", + "Intensity": 10 + }, + { + "Date": "2016-03-09", + "Category": "Sports", + "Intensity": 37 + }, + { + "Date": "2016-03-23", + "Category": "Electronics", + "Intensity": 4 + }, + { + "Date": "2016-03-23", + "Category": "Clothing", + "Intensity": 91 + }, + { + "Date": "2016-03-23", + "Category": "Food", + "Intensity": 45 + }, + { + "Date": "2016-03-23", + "Category": "Books", + "Intensity": 65 + }, + { + "Date": "2016-03-23", + "Category": "Sports", + "Intensity": 24 + }, + { + "Date": "2016-04-05", + "Category": "Electronics", + "Intensity": 93 + }, + { + "Date": "2016-04-05", + "Category": "Clothing", + "Intensity": 24 + }, + { + "Date": "2016-04-05", + "Category": "Food", + "Intensity": 11 + }, + { + "Date": "2016-04-05", + "Category": "Books", + "Intensity": 20 + }, + { + "Date": "2016-04-05", + "Category": "Sports", + "Intensity": 84 + }, + { + "Date": "2016-04-19", + "Category": "Electronics", + "Intensity": 76 + }, + { + "Date": "2016-04-19", + "Category": "Clothing", + "Intensity": 32 + }, + { + "Date": "2016-04-19", + "Category": "Food", + "Intensity": 94 + }, + { + "Date": "2016-04-19", + "Category": "Books", + "Intensity": 26 + }, + { + "Date": "2016-04-19", + "Category": "Sports", + "Intensity": 83 + }, + { + "Date": "2016-05-03", + "Category": "Electronics", + "Intensity": 18 + }, + { + "Date": "2016-05-03", + "Category": "Clothing", + "Intensity": 11 + }, + { + "Date": "2016-05-03", + "Category": "Food", + "Intensity": 70 + }, + { + "Date": "2016-05-03", + "Category": "Books", + "Intensity": 72 + }, + { + "Date": "2016-05-03", + "Category": "Sports", + "Intensity": 5 + }, + { + "Date": "2016-05-16", + "Category": "Electronics", + "Intensity": 35 + }, + { + "Date": "2016-05-16", + "Category": "Clothing", + "Intensity": 61 + }, + { + "Date": "2016-05-16", + "Category": "Food", + "Intensity": 67 + }, + { + "Date": "2016-05-16", + "Category": "Books", + "Intensity": 60 + }, + { + "Date": "2016-05-16", + "Category": "Sports", + "Intensity": 93 + }, + { + "Date": "2016-05-30", + "Category": "Electronics", + "Intensity": 34 + }, + { + "Date": "2016-05-30", + "Category": "Clothing", + "Intensity": 44 + }, + { + "Date": "2016-05-30", + "Category": "Food", + "Intensity": 3 + }, + { + "Date": "2016-05-30", + "Category": "Books", + "Intensity": 99 + }, + { + "Date": "2016-05-30", + "Category": "Sports", + "Intensity": 46 + }, + { + "Date": "2016-06-13", + "Category": "Electronics", + "Intensity": 85 + }, + { + "Date": "2016-06-13", + "Category": "Clothing", + "Intensity": 43 + }, + { + "Date": "2016-06-13", + "Category": "Food", + "Intensity": 79 + }, + { + "Date": "2016-06-13", + "Category": "Books", + "Intensity": 20 + }, + { + "Date": "2016-06-13", + "Category": "Sports", + "Intensity": 87 + }, + { + "Date": "2016-06-26", + "Category": "Electronics", + "Intensity": 83 + }, + { + "Date": "2016-06-26", + "Category": "Clothing", + "Intensity": 38 + }, + { + "Date": "2016-06-26", + "Category": "Food", + "Intensity": 8 + }, + { + "Date": "2016-06-26", + "Category": "Books", + "Intensity": 20 + }, + { + "Date": "2016-06-26", + "Category": "Sports", + "Intensity": 97 + }, + { + "Date": "2016-07-10", + "Category": "Electronics", + "Intensity": 39 + }, + { + "Date": "2016-07-10", + "Category": "Clothing", + "Intensity": 73 + }, + { + "Date": "2016-07-10", + "Category": "Food", + "Intensity": 53 + }, + { + "Date": "2016-07-10", + "Category": "Books", + "Intensity": 91 + }, + { + "Date": "2016-07-10", + "Category": "Sports", + "Intensity": 60 + }, + { + "Date": "2016-07-24", + "Category": "Electronics", + "Intensity": 37 + }, + { + "Date": "2016-07-24", + "Category": "Clothing", + "Intensity": 0 + }, + { + "Date": "2016-07-24", + "Category": "Food", + "Intensity": 51 + }, + { + "Date": "2016-07-24", + "Category": "Books", + "Intensity": 72 + }, + { + "Date": "2016-07-24", + "Category": "Sports", + "Intensity": 53 + }, + { + "Date": "2016-08-07", + "Category": "Electronics", + "Intensity": 90 + }, + { + "Date": "2016-08-07", + "Category": "Clothing", + "Intensity": 100 + }, + { + "Date": "2016-08-07", + "Category": "Food", + "Intensity": 35 + }, + { + "Date": "2016-08-07", + "Category": "Books", + "Intensity": 35 + }, + { + "Date": "2016-08-07", + "Category": "Sports", + "Intensity": 10 + }, + { + "Date": "2016-08-20", + "Category": "Electronics", + "Intensity": 36 + }, + { + "Date": "2016-08-20", + "Category": "Clothing", + "Intensity": 18 + }, + { + "Date": "2016-08-20", + "Category": "Food", + "Intensity": 40 + }, + { + "Date": "2016-08-20", + "Category": "Books", + "Intensity": 52 + }, + { + "Date": "2016-08-20", + "Category": "Sports", + "Intensity": 22 + }, + { + "Date": "2016-09-03", + "Category": "Electronics", + "Intensity": 97 + }, + { + "Date": "2016-09-03", + "Category": "Clothing", + "Intensity": 100 + }, + { + "Date": "2016-09-03", + "Category": "Food", + "Intensity": 20 + }, + { + "Date": "2016-09-03", + "Category": "Books", + "Intensity": 33 + }, + { + "Date": "2016-09-03", + "Category": "Sports", + "Intensity": 63 + }, + { + "Date": "2016-09-17", + "Category": "Electronics", + "Intensity": 3 + }, + { + "Date": "2016-09-17", + "Category": "Clothing", + "Intensity": 80 + }, + { + "Date": "2016-09-17", + "Category": "Food", + "Intensity": 88 + }, + { + "Date": "2016-09-17", + "Category": "Books", + "Intensity": 39 + }, + { + "Date": "2016-09-17", + "Category": "Sports", + "Intensity": 81 + }, + { + "Date": "2016-09-30", + "Category": "Electronics", + "Intensity": 46 + }, + { + "Date": "2016-09-30", + "Category": "Clothing", + "Intensity": 40 + }, + { + "Date": "2016-09-30", + "Category": "Food", + "Intensity": 49 + }, + { + "Date": "2016-09-30", + "Category": "Books", + "Intensity": 16 + }, + { + "Date": "2016-09-30", + "Category": "Sports", + "Intensity": 32 + }, + { + "Date": "2016-10-14", + "Category": "Electronics", + "Intensity": 62 + }, + { + "Date": "2016-10-14", + "Category": "Clothing", + "Intensity": 96 + }, + { + "Date": "2016-10-14", + "Category": "Food", + "Intensity": 2 + }, + { + "Date": "2016-10-14", + "Category": "Books", + "Intensity": 2 + }, + { + "Date": "2016-10-14", + "Category": "Sports", + "Intensity": 3 + }, + { + "Date": "2016-10-28", + "Category": "Electronics", + "Intensity": 92 + }, + { + "Date": "2016-10-28", + "Category": "Clothing", + "Intensity": 15 + }, + { + "Date": "2016-10-28", + "Category": "Food", + "Intensity": 52 + }, + { + "Date": "2016-10-28", + "Category": "Books", + "Intensity": 81 + }, + { + "Date": "2016-10-28", + "Category": "Sports", + "Intensity": 63 + }, + { + "Date": "2016-11-10", + "Category": "Electronics", + "Intensity": 23 + }, + { + "Date": "2016-11-10", + "Category": "Clothing", + "Intensity": 99 + }, + { + "Date": "2016-11-10", + "Category": "Food", + "Intensity": 85 + }, + { + "Date": "2016-11-10", + "Category": "Books", + "Intensity": 38 + }, + { + "Date": "2016-11-10", + "Category": "Sports", + "Intensity": 59 + }, + { + "Date": "2016-11-24", + "Category": "Electronics", + "Intensity": 41 + }, + { + "Date": "2016-11-24", + "Category": "Clothing", + "Intensity": 60 + }, + { + "Date": "2016-11-24", + "Category": "Food", + "Intensity": 38 + }, + { + "Date": "2016-11-24", + "Category": "Books", + "Intensity": 33 + }, + { + "Date": "2016-11-24", + "Category": "Sports", + "Intensity": 68 + }, + { + "Date": "2016-12-08", + "Category": "Electronics", + "Intensity": 83 + }, + { + "Date": "2016-12-08", + "Category": "Clothing", + "Intensity": 30 + }, + { + "Date": "2016-12-08", + "Category": "Food", + "Intensity": 8 + }, + { + "Date": "2016-12-08", + "Category": "Books", + "Intensity": 93 + }, + { + "Date": "2016-12-08", + "Category": "Sports", + "Intensity": 60 + }, + { + "Date": "2016-12-21", + "Category": "Electronics", + "Intensity": 99 + }, + { + "Date": "2016-12-21", + "Category": "Clothing", + "Intensity": 53 + }, + { + "Date": "2016-12-21", + "Category": "Food", + "Intensity": 89 + }, + { + "Date": "2016-12-21", + "Category": "Books", + "Intensity": 33 + }, + { + "Date": "2016-12-21", + "Category": "Sports", + "Intensity": 20 + }, + { + "Date": "2017-01-04", + "Category": "Electronics", + "Intensity": 95 + }, + { + "Date": "2017-01-04", + "Category": "Clothing", + "Intensity": 5 + }, + { + "Date": "2017-01-04", + "Category": "Food", + "Intensity": 96 + }, + { + "Date": "2017-01-04", + "Category": "Books", + "Intensity": 38 + }, + { + "Date": "2017-01-04", + "Category": "Sports", + "Intensity": 20 + }, + { + "Date": "2017-01-18", + "Category": "Electronics", + "Intensity": 89 + }, + { + "Date": "2017-01-18", + "Category": "Clothing", + "Intensity": 53 + }, + { + "Date": "2017-01-18", + "Category": "Food", + "Intensity": 35 + }, + { + "Date": "2017-01-18", + "Category": "Books", + "Intensity": 55 + }, + { + "Date": "2017-01-18", + "Category": "Sports", + "Intensity": 22 + }, + { + "Date": "2017-01-31", + "Category": "Electronics", + "Intensity": 35 + }, + { + "Date": "2017-01-31", + "Category": "Clothing", + "Intensity": 45 + }, + { + "Date": "2017-01-31", + "Category": "Food", + "Intensity": 24 + }, + { + "Date": "2017-01-31", + "Category": "Books", + "Intensity": 73 + }, + { + "Date": "2017-01-31", + "Category": "Sports", + "Intensity": 31 + }, + { + "Date": "2017-02-14", + "Category": "Electronics", + "Intensity": 86 + }, + { + "Date": "2017-02-14", + "Category": "Clothing", + "Intensity": 24 + }, + { + "Date": "2017-02-14", + "Category": "Food", + "Intensity": 34 + }, + { + "Date": "2017-02-14", + "Category": "Books", + "Intensity": 16 + }, + { + "Date": "2017-02-14", + "Category": "Sports", + "Intensity": 55 + }, + { + "Date": "2017-02-28", + "Category": "Electronics", + "Intensity": 0 + }, + { + "Date": "2017-02-28", + "Category": "Clothing", + "Intensity": 75 + }, + { + "Date": "2017-02-28", + "Category": "Food", + "Intensity": 7 + }, + { + "Date": "2017-02-28", + "Category": "Books", + "Intensity": 11 + }, + { + "Date": "2017-02-28", + "Category": "Sports", + "Intensity": 20 + }, + { + "Date": "2017-03-14", + "Category": "Electronics", + "Intensity": 100 + }, + { + "Date": "2017-03-14", + "Category": "Clothing", + "Intensity": 85 + }, + { + "Date": "2017-03-14", + "Category": "Food", + "Intensity": 93 + }, + { + "Date": "2017-03-14", + "Category": "Books", + "Intensity": 63 + }, + { + "Date": "2017-03-14", + "Category": "Sports", + "Intensity": 47 + }, + { + "Date": "2017-03-27", + "Category": "Electronics", + "Intensity": 56 + }, + { + "Date": "2017-03-27", + "Category": "Clothing", + "Intensity": 77 + }, + { + "Date": "2017-03-27", + "Category": "Food", + "Intensity": 41 + }, + { + "Date": "2017-03-27", + "Category": "Books", + "Intensity": 18 + }, + { + "Date": "2017-03-27", + "Category": "Sports", + "Intensity": 98 + }, + { + "Date": "2017-04-10", + "Category": "Electronics", + "Intensity": 28 + }, + { + "Date": "2017-04-10", + "Category": "Clothing", + "Intensity": 59 + }, + { + "Date": "2017-04-10", + "Category": "Food", + "Intensity": 40 + }, + { + "Date": "2017-04-10", + "Category": "Books", + "Intensity": 35 + }, + { + "Date": "2017-04-10", + "Category": "Sports", + "Intensity": 80 + }, + { + "Date": "2017-04-24", + "Category": "Electronics", + "Intensity": 30 + }, + { + "Date": "2017-04-24", + "Category": "Clothing", + "Intensity": 0 + }, + { + "Date": "2017-04-24", + "Category": "Food", + "Intensity": 71 + }, + { + "Date": "2017-04-24", + "Category": "Books", + "Intensity": 75 + }, + { + "Date": "2017-04-24", + "Category": "Sports", + "Intensity": 33 + }, + { + "Date": "2017-05-07", + "Category": "Electronics", + "Intensity": 12 + }, + { + "Date": "2017-05-07", + "Category": "Clothing", + "Intensity": 51 + }, + { + "Date": "2017-05-07", + "Category": "Food", + "Intensity": 99 + }, + { + "Date": "2017-05-07", + "Category": "Books", + "Intensity": 5 + }, + { + "Date": "2017-05-07", + "Category": "Sports", + "Intensity": 15 + }, + { + "Date": "2017-05-21", + "Category": "Electronics", + "Intensity": 73 + }, + { + "Date": "2017-05-21", + "Category": "Clothing", + "Intensity": 80 + }, + { + "Date": "2017-05-21", + "Category": "Food", + "Intensity": 85 + }, + { + "Date": "2017-05-21", + "Category": "Books", + "Intensity": 45 + }, + { + "Date": "2017-05-21", + "Category": "Sports", + "Intensity": 3 + }, + { + "Date": "2017-06-04", + "Category": "Electronics", + "Intensity": 44 + }, + { + "Date": "2017-06-04", + "Category": "Clothing", + "Intensity": 96 + }, + { + "Date": "2017-06-04", + "Category": "Food", + "Intensity": 55 + }, + { + "Date": "2017-06-04", + "Category": "Books", + "Intensity": 79 + }, + { + "Date": "2017-06-04", + "Category": "Sports", + "Intensity": 60 + }, + { + "Date": "2017-06-17", + "Category": "Electronics", + "Intensity": 92 + }, + { + "Date": "2017-06-17", + "Category": "Clothing", + "Intensity": 53 + }, + { + "Date": "2017-06-17", + "Category": "Food", + "Intensity": 42 + }, + { + "Date": "2017-06-17", + "Category": "Books", + "Intensity": 72 + }, + { + "Date": "2017-06-17", + "Category": "Sports", + "Intensity": 48 + }, + { + "Date": "2017-07-01", + "Category": "Electronics", + "Intensity": 26 + }, + { + "Date": "2017-07-01", + "Category": "Clothing", + "Intensity": 55 + }, + { + "Date": "2017-07-01", + "Category": "Food", + "Intensity": 35 + }, + { + "Date": "2017-07-01", + "Category": "Books", + "Intensity": 68 + }, + { + "Date": "2017-07-01", + "Category": "Sports", + "Intensity": 76 + }, + { + "Date": "2017-07-15", + "Category": "Electronics", + "Intensity": 72 + }, + { + "Date": "2017-07-15", + "Category": "Clothing", + "Intensity": 55 + }, + { + "Date": "2017-07-15", + "Category": "Food", + "Intensity": 10 + }, + { + "Date": "2017-07-15", + "Category": "Books", + "Intensity": 73 + }, + { + "Date": "2017-07-15", + "Category": "Sports", + "Intensity": 9 + }, + { + "Date": "2017-07-28", + "Category": "Electronics", + "Intensity": 5 + }, + { + "Date": "2017-07-28", + "Category": "Clothing", + "Intensity": 92 + }, + { + "Date": "2017-07-28", + "Category": "Food", + "Intensity": 16 + }, + { + "Date": "2017-07-28", + "Category": "Books", + "Intensity": 42 + }, + { + "Date": "2017-07-28", + "Category": "Sports", + "Intensity": 73 + }, + { + "Date": "2017-08-11", + "Category": "Electronics", + "Intensity": 37 + }, + { + "Date": "2017-08-11", + "Category": "Clothing", + "Intensity": 41 + }, + { + "Date": "2017-08-11", + "Category": "Food", + "Intensity": 100 + }, + { + "Date": "2017-08-11", + "Category": "Books", + "Intensity": 92 + }, + { + "Date": "2017-08-11", + "Category": "Sports", + "Intensity": 39 + }, + { + "Date": "2017-08-25", + "Category": "Electronics", + "Intensity": 48 + }, + { + "Date": "2017-08-25", + "Category": "Clothing", + "Intensity": 86 + }, + { + "Date": "2017-08-25", + "Category": "Food", + "Intensity": 82 + }, + { + "Date": "2017-08-25", + "Category": "Books", + "Intensity": 48 + }, + { + "Date": "2017-08-25", + "Category": "Sports", + "Intensity": 37 + }, + { + "Date": "2017-09-07", + "Category": "Electronics", + "Intensity": 30 + }, + { + "Date": "2017-09-07", + "Category": "Clothing", + "Intensity": 81 + }, + { + "Date": "2017-09-07", + "Category": "Food", + "Intensity": 11 + }, + { + "Date": "2017-09-07", + "Category": "Books", + "Intensity": 73 + }, + { + "Date": "2017-09-07", + "Category": "Sports", + "Intensity": 24 + }, + { + "Date": "2017-09-21", + "Category": "Electronics", + "Intensity": 61 + }, + { + "Date": "2017-09-21", + "Category": "Clothing", + "Intensity": 72 + }, + { + "Date": "2017-09-21", + "Category": "Food", + "Intensity": 23 + }, + { + "Date": "2017-09-21", + "Category": "Books", + "Intensity": 58 + }, + { + "Date": "2017-09-21", + "Category": "Sports", + "Intensity": 41 + }, + { + "Date": "2017-10-05", + "Category": "Electronics", + "Intensity": 31 + }, + { + "Date": "2017-10-05", + "Category": "Clothing", + "Intensity": 10 + }, + { + "Date": "2017-10-05", + "Category": "Food", + "Intensity": 35 + }, + { + "Date": "2017-10-05", + "Category": "Books", + "Intensity": 43 + }, + { + "Date": "2017-10-05", + "Category": "Sports", + "Intensity": 92 + }, + { + "Date": "2017-10-19", + "Category": "Electronics", + "Intensity": 25 + }, + { + "Date": "2017-10-19", + "Category": "Clothing", + "Intensity": 41 + }, + { + "Date": "2017-10-19", + "Category": "Food", + "Intensity": 85 + }, + { + "Date": "2017-10-19", + "Category": "Books", + "Intensity": 87 + }, + { + "Date": "2017-10-19", + "Category": "Sports", + "Intensity": 76 + }, + { + "Date": "2017-11-01", + "Category": "Electronics", + "Intensity": 62 + }, + { + "Date": "2017-11-01", + "Category": "Clothing", + "Intensity": 76 + }, + { + "Date": "2017-11-01", + "Category": "Food", + "Intensity": 42 + }, + { + "Date": "2017-11-01", + "Category": "Books", + "Intensity": 9 + }, + { + "Date": "2017-11-01", + "Category": "Sports", + "Intensity": 13 + }, + { + "Date": "2017-11-15", + "Category": "Electronics", + "Intensity": 18 + }, + { + "Date": "2017-11-15", + "Category": "Clothing", + "Intensity": 89 + }, + { + "Date": "2017-11-15", + "Category": "Food", + "Intensity": 90 + }, + { + "Date": "2017-11-15", + "Category": "Books", + "Intensity": 24 + }, + { + "Date": "2017-11-15", + "Category": "Sports", + "Intensity": 95 + }, + { + "Date": "2017-11-29", + "Category": "Electronics", + "Intensity": 92 + }, + { + "Date": "2017-11-29", + "Category": "Clothing", + "Intensity": 88 + }, + { + "Date": "2017-11-29", + "Category": "Food", + "Intensity": 32 + }, + { + "Date": "2017-11-29", + "Category": "Books", + "Intensity": 43 + }, + { + "Date": "2017-11-29", + "Category": "Sports", + "Intensity": 47 + }, + { + "Date": "2017-12-12", + "Category": "Electronics", + "Intensity": 36 + }, + { + "Date": "2017-12-12", + "Category": "Clothing", + "Intensity": 13 + }, + { + "Date": "2017-12-12", + "Category": "Food", + "Intensity": 30 + }, + { + "Date": "2017-12-12", + "Category": "Books", + "Intensity": 17 + }, + { + "Date": "2017-12-12", + "Category": "Sports", + "Intensity": 24 + }, + { + "Date": "2017-12-26", + "Category": "Electronics", + "Intensity": 23 + }, + { + "Date": "2017-12-26", + "Category": "Clothing", + "Intensity": 17 + }, + { + "Date": "2017-12-26", + "Category": "Food", + "Intensity": 90 + }, + { + "Date": "2017-12-26", + "Category": "Books", + "Intensity": 36 + }, + { + "Date": "2017-12-26", + "Category": "Sports", + "Intensity": 28 + }, + { + "Date": "2018-01-09", + "Category": "Electronics", + "Intensity": 65 + }, + { + "Date": "2018-01-09", + "Category": "Clothing", + "Intensity": 67 + }, + { + "Date": "2018-01-09", + "Category": "Food", + "Intensity": 95 + }, + { + "Date": "2018-01-09", + "Category": "Books", + "Intensity": 19 + }, + { + "Date": "2018-01-09", + "Category": "Sports", + "Intensity": 41 + }, + { + "Date": "2018-01-22", + "Category": "Electronics", + "Intensity": 99 + }, + { + "Date": "2018-01-22", + "Category": "Clothing", + "Intensity": 22 + }, + { + "Date": "2018-01-22", + "Category": "Food", + "Intensity": 47 + }, + { + "Date": "2018-01-22", + "Category": "Books", + "Intensity": 48 + }, + { + "Date": "2018-01-22", + "Category": "Sports", + "Intensity": 65 + }, + { + "Date": "2018-02-05", + "Category": "Electronics", + "Intensity": 99 + }, + { + "Date": "2018-02-05", + "Category": "Clothing", + "Intensity": 66 + }, + { + "Date": "2018-02-05", + "Category": "Food", + "Intensity": 42 + }, + { + "Date": "2018-02-05", + "Category": "Books", + "Intensity": 87 + }, + { + "Date": "2018-02-05", + "Category": "Sports", + "Intensity": 78 + }, + { + "Date": "2018-02-19", + "Category": "Electronics", + "Intensity": 15 + }, + { + "Date": "2018-02-19", + "Category": "Clothing", + "Intensity": 51 + }, + { + "Date": "2018-02-19", + "Category": "Food", + "Intensity": 94 + }, + { + "Date": "2018-02-19", + "Category": "Books", + "Intensity": 19 + }, + { + "Date": "2018-02-19", + "Category": "Sports", + "Intensity": 33 + }, + { + "Date": "2018-03-04", + "Category": "Electronics", + "Intensity": 57 + }, + { + "Date": "2018-03-04", + "Category": "Clothing", + "Intensity": 86 + }, + { + "Date": "2018-03-04", + "Category": "Food", + "Intensity": 30 + }, + { + "Date": "2018-03-04", + "Category": "Books", + "Intensity": 63 + }, + { + "Date": "2018-03-04", + "Category": "Sports", + "Intensity": 94 + }, + { + "Date": "2018-03-18", + "Category": "Electronics", + "Intensity": 52 + }, + { + "Date": "2018-03-18", + "Category": "Clothing", + "Intensity": 44 + }, + { + "Date": "2018-03-18", + "Category": "Food", + "Intensity": 16 + }, + { + "Date": "2018-03-18", + "Category": "Books", + "Intensity": 79 + }, + { + "Date": "2018-03-18", + "Category": "Sports", + "Intensity": 19 + }, + { + "Date": "2018-04-01", + "Category": "Electronics", + "Intensity": 93 + }, + { + "Date": "2018-04-01", + "Category": "Clothing", + "Intensity": 35 + }, + { + "Date": "2018-04-01", + "Category": "Food", + "Intensity": 8 + }, + { + "Date": "2018-04-01", + "Category": "Books", + "Intensity": 86 + }, + { + "Date": "2018-04-01", + "Category": "Sports", + "Intensity": 30 + }, + { + "Date": "2018-04-14", + "Category": "Electronics", + "Intensity": 67 + }, + { + "Date": "2018-04-14", + "Category": "Clothing", + "Intensity": 5 + }, + { + "Date": "2018-04-14", + "Category": "Food", + "Intensity": 67 + }, + { + "Date": "2018-04-14", + "Category": "Books", + "Intensity": 19 + }, + { + "Date": "2018-04-14", + "Category": "Sports", + "Intensity": 6 + }, + { + "Date": "2018-04-28", + "Category": "Electronics", + "Intensity": 82 + }, + { + "Date": "2018-04-28", + "Category": "Clothing", + "Intensity": 53 + }, + { + "Date": "2018-04-28", + "Category": "Food", + "Intensity": 13 + }, + { + "Date": "2018-04-28", + "Category": "Books", + "Intensity": 76 + }, + { + "Date": "2018-04-28", + "Category": "Sports", + "Intensity": 15 + }, + { + "Date": "2018-05-12", + "Category": "Electronics", + "Intensity": 30 + }, + { + "Date": "2018-05-12", + "Category": "Clothing", + "Intensity": 2 + }, + { + "Date": "2018-05-12", + "Category": "Food", + "Intensity": 49 + }, + { + "Date": "2018-05-12", + "Category": "Books", + "Intensity": 48 + }, + { + "Date": "2018-05-12", + "Category": "Sports", + "Intensity": 61 + }, + { + "Date": "2018-05-26", + "Category": "Electronics", + "Intensity": 67 + }, + { + "Date": "2018-05-26", + "Category": "Clothing", + "Intensity": 30 + }, + { + "Date": "2018-05-26", + "Category": "Food", + "Intensity": 10 + }, + { + "Date": "2018-05-26", + "Category": "Books", + "Intensity": 44 + }, + { + "Date": "2018-05-26", + "Category": "Sports", + "Intensity": 22 + }, + { + "Date": "2018-06-08", + "Category": "Electronics", + "Intensity": 63 + }, + { + "Date": "2018-06-08", + "Category": "Clothing", + "Intensity": 14 + }, + { + "Date": "2018-06-08", + "Category": "Food", + "Intensity": 91 + }, + { + "Date": "2018-06-08", + "Category": "Books", + "Intensity": 30 + }, + { + "Date": "2018-06-08", + "Category": "Sports", + "Intensity": 22 + }, + { + "Date": "2018-06-22", + "Category": "Electronics", + "Intensity": 0 + }, + { + "Date": "2018-06-22", + "Category": "Clothing", + "Intensity": 73 + }, + { + "Date": "2018-06-22", + "Category": "Food", + "Intensity": 21 + }, + { + "Date": "2018-06-22", + "Category": "Books", + "Intensity": 49 + }, + { + "Date": "2018-06-22", + "Category": "Sports", + "Intensity": 83 + }, + { + "Date": "2018-07-06", + "Category": "Electronics", + "Intensity": 42 + }, + { + "Date": "2018-07-06", + "Category": "Clothing", + "Intensity": 7 + }, + { + "Date": "2018-07-06", + "Category": "Food", + "Intensity": 90 + }, + { + "Date": "2018-07-06", + "Category": "Books", + "Intensity": 92 + }, + { + "Date": "2018-07-06", + "Category": "Sports", + "Intensity": 23 + }, + { + "Date": "2018-07-19", + "Category": "Electronics", + "Intensity": 32 + }, + { + "Date": "2018-07-19", + "Category": "Clothing", + "Intensity": 75 + }, + { + "Date": "2018-07-19", + "Category": "Food", + "Intensity": 55 + }, + { + "Date": "2018-07-19", + "Category": "Books", + "Intensity": 74 + }, + { + "Date": "2018-07-19", + "Category": "Sports", + "Intensity": 53 + }, + { + "Date": "2018-08-02", + "Category": "Electronics", + "Intensity": 83 + }, + { + "Date": "2018-08-02", + "Category": "Clothing", + "Intensity": 89 + }, + { + "Date": "2018-08-02", + "Category": "Food", + "Intensity": 23 + }, + { + "Date": "2018-08-02", + "Category": "Books", + "Intensity": 59 + }, + { + "Date": "2018-08-02", + "Category": "Sports", + "Intensity": 41 + }, + { + "Date": "2018-08-16", + "Category": "Electronics", + "Intensity": 24 + }, + { + "Date": "2018-08-16", + "Category": "Clothing", + "Intensity": 39 + }, + { + "Date": "2018-08-16", + "Category": "Food", + "Intensity": 49 + }, + { + "Date": "2018-08-16", + "Category": "Books", + "Intensity": 59 + }, + { + "Date": "2018-08-16", + "Category": "Sports", + "Intensity": 25 + }, + { + "Date": "2018-08-29", + "Category": "Electronics", + "Intensity": 81 + }, + { + "Date": "2018-08-29", + "Category": "Clothing", + "Intensity": 73 + }, + { + "Date": "2018-08-29", + "Category": "Food", + "Intensity": 59 + }, + { + "Date": "2018-08-29", + "Category": "Books", + "Intensity": 90 + }, + { + "Date": "2018-08-29", + "Category": "Sports", + "Intensity": 48 + }, + { + "Date": "2018-09-12", + "Category": "Electronics", + "Intensity": 48 + }, + { + "Date": "2018-09-12", + "Category": "Clothing", + "Intensity": 79 + }, + { + "Date": "2018-09-12", + "Category": "Food", + "Intensity": 98 + }, + { + "Date": "2018-09-12", + "Category": "Books", + "Intensity": 57 + }, + { + "Date": "2018-09-12", + "Category": "Sports", + "Intensity": 60 + }, + { + "Date": "2018-09-26", + "Category": "Electronics", + "Intensity": 27 + }, + { + "Date": "2018-09-26", + "Category": "Clothing", + "Intensity": 64 + }, + { + "Date": "2018-09-26", + "Category": "Food", + "Intensity": 33 + }, + { + "Date": "2018-09-26", + "Category": "Books", + "Intensity": 38 + }, + { + "Date": "2018-09-26", + "Category": "Sports", + "Intensity": 86 + }, + { + "Date": "2018-10-09", + "Category": "Electronics", + "Intensity": 36 + }, + { + "Date": "2018-10-09", + "Category": "Clothing", + "Intensity": 52 + }, + { + "Date": "2018-10-09", + "Category": "Food", + "Intensity": 71 + }, + { + "Date": "2018-10-09", + "Category": "Books", + "Intensity": 5 + }, + { + "Date": "2018-10-09", + "Category": "Sports", + "Intensity": 35 + }, + { + "Date": "2018-10-23", + "Category": "Electronics", + "Intensity": 32 + }, + { + "Date": "2018-10-23", + "Category": "Clothing", + "Intensity": 78 + }, + { + "Date": "2018-10-23", + "Category": "Food", + "Intensity": 52 + }, + { + "Date": "2018-10-23", + "Category": "Books", + "Intensity": 16 + }, + { + "Date": "2018-10-23", + "Category": "Sports", + "Intensity": 69 + }, + { + "Date": "2018-11-06", + "Category": "Electronics", + "Intensity": 72 + }, + { + "Date": "2018-11-06", + "Category": "Clothing", + "Intensity": 52 + }, + { + "Date": "2018-11-06", + "Category": "Food", + "Intensity": 58 + }, + { + "Date": "2018-11-06", + "Category": "Books", + "Intensity": 14 + }, + { + "Date": "2018-11-06", + "Category": "Sports", + "Intensity": 1 + }, + { + "Date": "2018-11-19", + "Category": "Electronics", + "Intensity": 44 + }, + { + "Date": "2018-11-19", + "Category": "Clothing", + "Intensity": 91 + }, + { + "Date": "2018-11-19", + "Category": "Food", + "Intensity": 43 + }, + { + "Date": "2018-11-19", + "Category": "Books", + "Intensity": 66 + }, + { + "Date": "2018-11-19", + "Category": "Sports", + "Intensity": 51 + }, + { + "Date": "2018-12-03", + "Category": "Electronics", + "Intensity": 15 + }, + { + "Date": "2018-12-03", + "Category": "Clothing", + "Intensity": 86 + }, + { + "Date": "2018-12-03", + "Category": "Food", + "Intensity": 79 + }, + { + "Date": "2018-12-03", + "Category": "Books", + "Intensity": 62 + }, + { + "Date": "2018-12-03", + "Category": "Sports", + "Intensity": 56 + }, + { + "Date": "2018-12-17", + "Category": "Electronics", + "Intensity": 28 + }, + { + "Date": "2018-12-17", + "Category": "Clothing", + "Intensity": 97 + }, + { + "Date": "2018-12-17", + "Category": "Food", + "Intensity": 44 + }, + { + "Date": "2018-12-17", + "Category": "Books", + "Intensity": 2 + }, + { + "Date": "2018-12-17", + "Category": "Sports", + "Intensity": 84 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/heatmap/05-card5.flint.json b/test-harness/excel/evaluations/inputs/heatmap/05-card5.flint.json new file mode 100644 index 00000000..24322504 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/heatmap/05-card5.flint.json @@ -0,0 +1,2023 @@ +{ + "semantic_types": { + "Product": "Product", + "Date": "Date", + "Score": "Score" + }, + "chart_spec": { + "chartType": "Heatmap", + "encodings": { + "x": "Product", + "y": "Date", + "color": "Score" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Product": "Laptop", + "Date": "2016-01-01", + "Score": 39 + }, + { + "Product": "Laptop", + "Date": "2016-01-14", + "Score": 41 + }, + { + "Product": "Laptop", + "Date": "2016-01-28", + "Score": 5 + }, + { + "Product": "Laptop", + "Date": "2016-02-11", + "Score": 47 + }, + { + "Product": "Laptop", + "Date": "2016-02-24", + "Score": 82 + }, + { + "Product": "Laptop", + "Date": "2016-03-09", + "Score": 65 + }, + { + "Product": "Laptop", + "Date": "2016-03-23", + "Score": 24 + }, + { + "Product": "Laptop", + "Date": "2016-04-05", + "Score": 10 + }, + { + "Product": "Laptop", + "Date": "2016-04-19", + "Score": 8 + }, + { + "Product": "Laptop", + "Date": "2016-05-03", + "Score": 18 + }, + { + "Product": "Laptop", + "Date": "2016-05-16", + "Score": 37 + }, + { + "Product": "Laptop", + "Date": "2016-05-30", + "Score": 7 + }, + { + "Product": "Laptop", + "Date": "2016-06-13", + "Score": 42 + }, + { + "Product": "Laptop", + "Date": "2016-06-26", + "Score": 12 + }, + { + "Product": "Laptop", + "Date": "2016-07-10", + "Score": 72 + }, + { + "Product": "Laptop", + "Date": "2016-07-24", + "Score": 13 + }, + { + "Product": "Laptop", + "Date": "2016-08-07", + "Score": 26 + }, + { + "Product": "Laptop", + "Date": "2016-08-20", + "Score": 62 + }, + { + "Product": "Laptop", + "Date": "2016-09-03", + "Score": 91 + }, + { + "Product": "Laptop", + "Date": "2016-09-17", + "Score": 1 + }, + { + "Product": "Laptop", + "Date": "2016-09-30", + "Score": 74 + }, + { + "Product": "Laptop", + "Date": "2016-10-14", + "Score": 84 + }, + { + "Product": "Laptop", + "Date": "2016-10-28", + "Score": 90 + }, + { + "Product": "Laptop", + "Date": "2016-11-10", + "Score": 47 + }, + { + "Product": "Laptop", + "Date": "2016-11-24", + "Score": 36 + }, + { + "Product": "Laptop", + "Date": "2016-12-08", + "Score": 31 + }, + { + "Product": "Laptop", + "Date": "2016-12-21", + "Score": 82 + }, + { + "Product": "Laptop", + "Date": "2017-01-04", + "Score": 37 + }, + { + "Product": "Laptop", + "Date": "2017-01-18", + "Score": 58 + }, + { + "Product": "Laptop", + "Date": "2017-01-31", + "Score": 47 + }, + { + "Product": "Laptop", + "Date": "2017-02-14", + "Score": 55 + }, + { + "Product": "Laptop", + "Date": "2017-02-28", + "Score": 94 + }, + { + "Product": "Laptop", + "Date": "2017-03-14", + "Score": 51 + }, + { + "Product": "Laptop", + "Date": "2017-03-27", + "Score": 34 + }, + { + "Product": "Laptop", + "Date": "2017-04-10", + "Score": 1 + }, + { + "Product": "Laptop", + "Date": "2017-04-24", + "Score": 3 + }, + { + "Product": "Laptop", + "Date": "2017-05-07", + "Score": 7 + }, + { + "Product": "Laptop", + "Date": "2017-05-21", + "Score": 13 + }, + { + "Product": "Laptop", + "Date": "2017-06-04", + "Score": 45 + }, + { + "Product": "Laptop", + "Date": "2017-06-17", + "Score": 79 + }, + { + "Product": "Laptop", + "Date": "2017-07-01", + "Score": 97 + }, + { + "Product": "Laptop", + "Date": "2017-07-15", + "Score": 59 + }, + { + "Product": "Laptop", + "Date": "2017-07-28", + "Score": 52 + }, + { + "Product": "Laptop", + "Date": "2017-08-11", + "Score": 9 + }, + { + "Product": "Laptop", + "Date": "2017-08-25", + "Score": 18 + }, + { + "Product": "Laptop", + "Date": "2017-09-07", + "Score": 69 + }, + { + "Product": "Laptop", + "Date": "2017-09-21", + "Score": 67 + }, + { + "Product": "Laptop", + "Date": "2017-10-05", + "Score": 61 + }, + { + "Product": "Laptop", + "Date": "2017-10-19", + "Score": 60 + }, + { + "Product": "Laptop", + "Date": "2017-11-01", + "Score": 41 + }, + { + "Product": "Laptop", + "Date": "2017-11-15", + "Score": 53 + }, + { + "Product": "Laptop", + "Date": "2017-11-29", + "Score": 99 + }, + { + "Product": "Laptop", + "Date": "2017-12-12", + "Score": 52 + }, + { + "Product": "Laptop", + "Date": "2017-12-26", + "Score": 31 + }, + { + "Product": "Laptop", + "Date": "2018-01-09", + "Score": 81 + }, + { + "Product": "Laptop", + "Date": "2018-01-22", + "Score": 14 + }, + { + "Product": "Laptop", + "Date": "2018-02-05", + "Score": 82 + }, + { + "Product": "Laptop", + "Date": "2018-02-19", + "Score": 53 + }, + { + "Product": "Laptop", + "Date": "2018-03-04", + "Score": 28 + }, + { + "Product": "Laptop", + "Date": "2018-03-18", + "Score": 88 + }, + { + "Product": "Laptop", + "Date": "2018-04-01", + "Score": 11 + }, + { + "Product": "Laptop", + "Date": "2018-04-14", + "Score": 9 + }, + { + "Product": "Laptop", + "Date": "2018-04-28", + "Score": 61 + }, + { + "Product": "Laptop", + "Date": "2018-05-12", + "Score": 5 + }, + { + "Product": "Laptop", + "Date": "2018-05-26", + "Score": 70 + }, + { + "Product": "Laptop", + "Date": "2018-06-08", + "Score": 91 + }, + { + "Product": "Laptop", + "Date": "2018-06-22", + "Score": 90 + }, + { + "Product": "Laptop", + "Date": "2018-07-06", + "Score": 6 + }, + { + "Product": "Laptop", + "Date": "2018-07-19", + "Score": 48 + }, + { + "Product": "Laptop", + "Date": "2018-08-02", + "Score": 11 + }, + { + "Product": "Laptop", + "Date": "2018-08-16", + "Score": 34 + }, + { + "Product": "Laptop", + "Date": "2018-08-29", + "Score": 48 + }, + { + "Product": "Laptop", + "Date": "2018-09-12", + "Score": 83 + }, + { + "Product": "Laptop", + "Date": "2018-09-26", + "Score": 90 + }, + { + "Product": "Laptop", + "Date": "2018-10-09", + "Score": 88 + }, + { + "Product": "Laptop", + "Date": "2018-10-23", + "Score": 94 + }, + { + "Product": "Laptop", + "Date": "2018-11-06", + "Score": 91 + }, + { + "Product": "Laptop", + "Date": "2018-11-19", + "Score": 53 + }, + { + "Product": "Laptop", + "Date": "2018-12-03", + "Score": 47 + }, + { + "Product": "Laptop", + "Date": "2018-12-17", + "Score": 95 + }, + { + "Product": "Phone", + "Date": "2016-01-01", + "Score": 79 + }, + { + "Product": "Phone", + "Date": "2016-01-14", + "Score": 64 + }, + { + "Product": "Phone", + "Date": "2016-01-28", + "Score": 88 + }, + { + "Product": "Phone", + "Date": "2016-02-11", + "Score": 35 + }, + { + "Product": "Phone", + "Date": "2016-02-24", + "Score": 36 + }, + { + "Product": "Phone", + "Date": "2016-03-09", + "Score": 43 + }, + { + "Product": "Phone", + "Date": "2016-03-23", + "Score": 38 + }, + { + "Product": "Phone", + "Date": "2016-04-05", + "Score": 38 + }, + { + "Product": "Phone", + "Date": "2016-04-19", + "Score": 87 + }, + { + "Product": "Phone", + "Date": "2016-05-03", + "Score": 99 + }, + { + "Product": "Phone", + "Date": "2016-05-16", + "Score": 8 + }, + { + "Product": "Phone", + "Date": "2016-05-30", + "Score": 94 + }, + { + "Product": "Phone", + "Date": "2016-06-13", + "Score": 65 + }, + { + "Product": "Phone", + "Date": "2016-06-26", + "Score": 93 + }, + { + "Product": "Phone", + "Date": "2016-07-10", + "Score": 32 + }, + { + "Product": "Phone", + "Date": "2016-07-24", + "Score": 38 + }, + { + "Product": "Phone", + "Date": "2016-08-07", + "Score": 71 + }, + { + "Product": "Phone", + "Date": "2016-08-20", + "Score": 20 + }, + { + "Product": "Phone", + "Date": "2016-09-03", + "Score": 71 + }, + { + "Product": "Phone", + "Date": "2016-09-17", + "Score": 51 + }, + { + "Product": "Phone", + "Date": "2016-09-30", + "Score": 36 + }, + { + "Product": "Phone", + "Date": "2016-10-14", + "Score": 7 + }, + { + "Product": "Phone", + "Date": "2016-10-28", + "Score": 17 + }, + { + "Product": "Phone", + "Date": "2016-11-10", + "Score": 9 + }, + { + "Product": "Phone", + "Date": "2016-11-24", + "Score": 61 + }, + { + "Product": "Phone", + "Date": "2016-12-08", + "Score": 45 + }, + { + "Product": "Phone", + "Date": "2016-12-21", + "Score": 87 + }, + { + "Product": "Phone", + "Date": "2017-01-04", + "Score": 12 + }, + { + "Product": "Phone", + "Date": "2017-01-18", + "Score": 24 + }, + { + "Product": "Phone", + "Date": "2017-01-31", + "Score": 62 + }, + { + "Product": "Phone", + "Date": "2017-02-14", + "Score": 31 + }, + { + "Product": "Phone", + "Date": "2017-02-28", + "Score": 58 + }, + { + "Product": "Phone", + "Date": "2017-03-14", + "Score": 33 + }, + { + "Product": "Phone", + "Date": "2017-03-27", + "Score": 59 + }, + { + "Product": "Phone", + "Date": "2017-04-10", + "Score": 76 + }, + { + "Product": "Phone", + "Date": "2017-04-24", + "Score": 15 + }, + { + "Product": "Phone", + "Date": "2017-05-07", + "Score": 9 + }, + { + "Product": "Phone", + "Date": "2017-05-21", + "Score": 86 + }, + { + "Product": "Phone", + "Date": "2017-06-04", + "Score": 42 + }, + { + "Product": "Phone", + "Date": "2017-06-17", + "Score": 83 + }, + { + "Product": "Phone", + "Date": "2017-07-01", + "Score": 53 + }, + { + "Product": "Phone", + "Date": "2017-07-15", + "Score": 74 + }, + { + "Product": "Phone", + "Date": "2017-07-28", + "Score": 84 + }, + { + "Product": "Phone", + "Date": "2017-08-11", + "Score": 64 + }, + { + "Product": "Phone", + "Date": "2017-08-25", + "Score": 28 + }, + { + "Product": "Phone", + "Date": "2017-09-07", + "Score": 92 + }, + { + "Product": "Phone", + "Date": "2017-09-21", + "Score": 98 + }, + { + "Product": "Phone", + "Date": "2017-10-05", + "Score": 88 + }, + { + "Product": "Phone", + "Date": "2017-10-19", + "Score": 4 + }, + { + "Product": "Phone", + "Date": "2017-11-01", + "Score": 97 + }, + { + "Product": "Phone", + "Date": "2017-11-15", + "Score": 21 + }, + { + "Product": "Phone", + "Date": "2017-11-29", + "Score": 86 + }, + { + "Product": "Phone", + "Date": "2017-12-12", + "Score": 95 + }, + { + "Product": "Phone", + "Date": "2017-12-26", + "Score": 53 + }, + { + "Product": "Phone", + "Date": "2018-01-09", + "Score": 33 + }, + { + "Product": "Phone", + "Date": "2018-01-22", + "Score": 82 + }, + { + "Product": "Phone", + "Date": "2018-02-05", + "Score": 46 + }, + { + "Product": "Phone", + "Date": "2018-02-19", + "Score": 74 + }, + { + "Product": "Phone", + "Date": "2018-03-04", + "Score": 54 + }, + { + "Product": "Phone", + "Date": "2018-03-18", + "Score": 88 + }, + { + "Product": "Phone", + "Date": "2018-04-01", + "Score": 89 + }, + { + "Product": "Phone", + "Date": "2018-04-14", + "Score": 61 + }, + { + "Product": "Phone", + "Date": "2018-04-28", + "Score": 17 + }, + { + "Product": "Phone", + "Date": "2018-05-12", + "Score": 58 + }, + { + "Product": "Phone", + "Date": "2018-05-26", + "Score": 26 + }, + { + "Product": "Phone", + "Date": "2018-06-08", + "Score": 1 + }, + { + "Product": "Phone", + "Date": "2018-06-22", + "Score": 41 + }, + { + "Product": "Phone", + "Date": "2018-07-06", + "Score": 34 + }, + { + "Product": "Phone", + "Date": "2018-07-19", + "Score": 7 + }, + { + "Product": "Phone", + "Date": "2018-08-02", + "Score": 55 + }, + { + "Product": "Phone", + "Date": "2018-08-16", + "Score": 34 + }, + { + "Product": "Phone", + "Date": "2018-08-29", + "Score": 64 + }, + { + "Product": "Phone", + "Date": "2018-09-12", + "Score": 37 + }, + { + "Product": "Phone", + "Date": "2018-09-26", + "Score": 37 + }, + { + "Product": "Phone", + "Date": "2018-10-09", + "Score": 55 + }, + { + "Product": "Phone", + "Date": "2018-10-23", + "Score": 22 + }, + { + "Product": "Phone", + "Date": "2018-11-06", + "Score": 92 + }, + { + "Product": "Phone", + "Date": "2018-11-19", + "Score": 96 + }, + { + "Product": "Phone", + "Date": "2018-12-03", + "Score": 4 + }, + { + "Product": "Phone", + "Date": "2018-12-17", + "Score": 51 + }, + { + "Product": "Tablet", + "Date": "2016-01-01", + "Score": 54 + }, + { + "Product": "Tablet", + "Date": "2016-01-14", + "Score": 76 + }, + { + "Product": "Tablet", + "Date": "2016-01-28", + "Score": 100 + }, + { + "Product": "Tablet", + "Date": "2016-02-11", + "Score": 45 + }, + { + "Product": "Tablet", + "Date": "2016-02-24", + "Score": 7 + }, + { + "Product": "Tablet", + "Date": "2016-03-09", + "Score": 59 + }, + { + "Product": "Tablet", + "Date": "2016-03-23", + "Score": 16 + }, + { + "Product": "Tablet", + "Date": "2016-04-05", + "Score": 50 + }, + { + "Product": "Tablet", + "Date": "2016-04-19", + "Score": 68 + }, + { + "Product": "Tablet", + "Date": "2016-05-03", + "Score": 94 + }, + { + "Product": "Tablet", + "Date": "2016-05-16", + "Score": 41 + }, + { + "Product": "Tablet", + "Date": "2016-05-30", + "Score": 61 + }, + { + "Product": "Tablet", + "Date": "2016-06-13", + "Score": 96 + }, + { + "Product": "Tablet", + "Date": "2016-06-26", + "Score": 18 + }, + { + "Product": "Tablet", + "Date": "2016-07-10", + "Score": 48 + }, + { + "Product": "Tablet", + "Date": "2016-07-24", + "Score": 64 + }, + { + "Product": "Tablet", + "Date": "2016-08-07", + "Score": 51 + }, + { + "Product": "Tablet", + "Date": "2016-08-20", + "Score": 61 + }, + { + "Product": "Tablet", + "Date": "2016-09-03", + "Score": 68 + }, + { + "Product": "Tablet", + "Date": "2016-09-17", + "Score": 65 + }, + { + "Product": "Tablet", + "Date": "2016-09-30", + "Score": 59 + }, + { + "Product": "Tablet", + "Date": "2016-10-14", + "Score": 84 + }, + { + "Product": "Tablet", + "Date": "2016-10-28", + "Score": 78 + }, + { + "Product": "Tablet", + "Date": "2016-11-10", + "Score": 39 + }, + { + "Product": "Tablet", + "Date": "2016-11-24", + "Score": 7 + }, + { + "Product": "Tablet", + "Date": "2016-12-08", + "Score": 69 + }, + { + "Product": "Tablet", + "Date": "2016-12-21", + "Score": 22 + }, + { + "Product": "Tablet", + "Date": "2017-01-04", + "Score": 96 + }, + { + "Product": "Tablet", + "Date": "2017-01-18", + "Score": 5 + }, + { + "Product": "Tablet", + "Date": "2017-01-31", + "Score": 66 + }, + { + "Product": "Tablet", + "Date": "2017-02-14", + "Score": 40 + }, + { + "Product": "Tablet", + "Date": "2017-02-28", + "Score": 13 + }, + { + "Product": "Tablet", + "Date": "2017-03-14", + "Score": 9 + }, + { + "Product": "Tablet", + "Date": "2017-03-27", + "Score": 46 + }, + { + "Product": "Tablet", + "Date": "2017-04-10", + "Score": 57 + }, + { + "Product": "Tablet", + "Date": "2017-04-24", + "Score": 12 + }, + { + "Product": "Tablet", + "Date": "2017-05-07", + "Score": 87 + }, + { + "Product": "Tablet", + "Date": "2017-05-21", + "Score": 57 + }, + { + "Product": "Tablet", + "Date": "2017-06-04", + "Score": 63 + }, + { + "Product": "Tablet", + "Date": "2017-06-17", + "Score": 6 + }, + { + "Product": "Tablet", + "Date": "2017-07-01", + "Score": 80 + }, + { + "Product": "Tablet", + "Date": "2017-07-15", + "Score": 85 + }, + { + "Product": "Tablet", + "Date": "2017-07-28", + "Score": 90 + }, + { + "Product": "Tablet", + "Date": "2017-08-11", + "Score": 40 + }, + { + "Product": "Tablet", + "Date": "2017-08-25", + "Score": 25 + }, + { + "Product": "Tablet", + "Date": "2017-09-07", + "Score": 89 + }, + { + "Product": "Tablet", + "Date": "2017-09-21", + "Score": 52 + }, + { + "Product": "Tablet", + "Date": "2017-10-05", + "Score": 0 + }, + { + "Product": "Tablet", + "Date": "2017-10-19", + "Score": 45 + }, + { + "Product": "Tablet", + "Date": "2017-11-01", + "Score": 31 + }, + { + "Product": "Tablet", + "Date": "2017-11-15", + "Score": 18 + }, + { + "Product": "Tablet", + "Date": "2017-11-29", + "Score": 46 + }, + { + "Product": "Tablet", + "Date": "2017-12-12", + "Score": 12 + }, + { + "Product": "Tablet", + "Date": "2017-12-26", + "Score": 10 + }, + { + "Product": "Tablet", + "Date": "2018-01-09", + "Score": 52 + }, + { + "Product": "Tablet", + "Date": "2018-01-22", + "Score": 90 + }, + { + "Product": "Tablet", + "Date": "2018-02-05", + "Score": 28 + }, + { + "Product": "Tablet", + "Date": "2018-02-19", + "Score": 31 + }, + { + "Product": "Tablet", + "Date": "2018-03-04", + "Score": 21 + }, + { + "Product": "Tablet", + "Date": "2018-03-18", + "Score": 57 + }, + { + "Product": "Tablet", + "Date": "2018-04-01", + "Score": 22 + }, + { + "Product": "Tablet", + "Date": "2018-04-14", + "Score": 95 + }, + { + "Product": "Tablet", + "Date": "2018-04-28", + "Score": 16 + }, + { + "Product": "Tablet", + "Date": "2018-05-12", + "Score": 46 + }, + { + "Product": "Tablet", + "Date": "2018-05-26", + "Score": 53 + }, + { + "Product": "Tablet", + "Date": "2018-06-08", + "Score": 77 + }, + { + "Product": "Tablet", + "Date": "2018-06-22", + "Score": 37 + }, + { + "Product": "Tablet", + "Date": "2018-07-06", + "Score": 20 + }, + { + "Product": "Tablet", + "Date": "2018-07-19", + "Score": 75 + }, + { + "Product": "Tablet", + "Date": "2018-08-02", + "Score": 12 + }, + { + "Product": "Tablet", + "Date": "2018-08-16", + "Score": 6 + }, + { + "Product": "Tablet", + "Date": "2018-08-29", + "Score": 5 + }, + { + "Product": "Tablet", + "Date": "2018-09-12", + "Score": 53 + }, + { + "Product": "Tablet", + "Date": "2018-09-26", + "Score": 92 + }, + { + "Product": "Tablet", + "Date": "2018-10-09", + "Score": 68 + }, + { + "Product": "Tablet", + "Date": "2018-10-23", + "Score": 43 + }, + { + "Product": "Tablet", + "Date": "2018-11-06", + "Score": 17 + }, + { + "Product": "Tablet", + "Date": "2018-11-19", + "Score": 50 + }, + { + "Product": "Tablet", + "Date": "2018-12-03", + "Score": 93 + }, + { + "Product": "Tablet", + "Date": "2018-12-17", + "Score": 64 + }, + { + "Product": "Desktop", + "Date": "2016-01-01", + "Score": 40 + }, + { + "Product": "Desktop", + "Date": "2016-01-14", + "Score": 79 + }, + { + "Product": "Desktop", + "Date": "2016-01-28", + "Score": 54 + }, + { + "Product": "Desktop", + "Date": "2016-02-11", + "Score": 82 + }, + { + "Product": "Desktop", + "Date": "2016-02-24", + "Score": 82 + }, + { + "Product": "Desktop", + "Date": "2016-03-09", + "Score": 67 + }, + { + "Product": "Desktop", + "Date": "2016-03-23", + "Score": 22 + }, + { + "Product": "Desktop", + "Date": "2016-04-05", + "Score": 32 + }, + { + "Product": "Desktop", + "Date": "2016-04-19", + "Score": 26 + }, + { + "Product": "Desktop", + "Date": "2016-05-03", + "Score": 94 + }, + { + "Product": "Desktop", + "Date": "2016-05-16", + "Score": 38 + }, + { + "Product": "Desktop", + "Date": "2016-05-30", + "Score": 23 + }, + { + "Product": "Desktop", + "Date": "2016-06-13", + "Score": 22 + }, + { + "Product": "Desktop", + "Date": "2016-06-26", + "Score": 44 + }, + { + "Product": "Desktop", + "Date": "2016-07-10", + "Score": 33 + }, + { + "Product": "Desktop", + "Date": "2016-07-24", + "Score": 6 + }, + { + "Product": "Desktop", + "Date": "2016-08-07", + "Score": 33 + }, + { + "Product": "Desktop", + "Date": "2016-08-20", + "Score": 84 + }, + { + "Product": "Desktop", + "Date": "2016-09-03", + "Score": 39 + }, + { + "Product": "Desktop", + "Date": "2016-09-17", + "Score": 83 + }, + { + "Product": "Desktop", + "Date": "2016-09-30", + "Score": 64 + }, + { + "Product": "Desktop", + "Date": "2016-10-14", + "Score": 55 + }, + { + "Product": "Desktop", + "Date": "2016-10-28", + "Score": 80 + }, + { + "Product": "Desktop", + "Date": "2016-11-10", + "Score": 67 + }, + { + "Product": "Desktop", + "Date": "2016-11-24", + "Score": 77 + }, + { + "Product": "Desktop", + "Date": "2016-12-08", + "Score": 79 + }, + { + "Product": "Desktop", + "Date": "2016-12-21", + "Score": 97 + }, + { + "Product": "Desktop", + "Date": "2017-01-04", + "Score": 71 + }, + { + "Product": "Desktop", + "Date": "2017-01-18", + "Score": 29 + }, + { + "Product": "Desktop", + "Date": "2017-01-31", + "Score": 0 + }, + { + "Product": "Desktop", + "Date": "2017-02-14", + "Score": 84 + }, + { + "Product": "Desktop", + "Date": "2017-02-28", + "Score": 53 + }, + { + "Product": "Desktop", + "Date": "2017-03-14", + "Score": 82 + }, + { + "Product": "Desktop", + "Date": "2017-03-27", + "Score": 22 + }, + { + "Product": "Desktop", + "Date": "2017-04-10", + "Score": 31 + }, + { + "Product": "Desktop", + "Date": "2017-04-24", + "Score": 5 + }, + { + "Product": "Desktop", + "Date": "2017-05-07", + "Score": 59 + }, + { + "Product": "Desktop", + "Date": "2017-05-21", + "Score": 80 + }, + { + "Product": "Desktop", + "Date": "2017-06-04", + "Score": 80 + }, + { + "Product": "Desktop", + "Date": "2017-06-17", + "Score": 92 + }, + { + "Product": "Desktop", + "Date": "2017-07-01", + "Score": 70 + }, + { + "Product": "Desktop", + "Date": "2017-07-15", + "Score": 96 + }, + { + "Product": "Desktop", + "Date": "2017-07-28", + "Score": 23 + }, + { + "Product": "Desktop", + "Date": "2017-08-11", + "Score": 54 + }, + { + "Product": "Desktop", + "Date": "2017-08-25", + "Score": 47 + }, + { + "Product": "Desktop", + "Date": "2017-09-07", + "Score": 19 + }, + { + "Product": "Desktop", + "Date": "2017-09-21", + "Score": 82 + }, + { + "Product": "Desktop", + "Date": "2017-10-05", + "Score": 31 + }, + { + "Product": "Desktop", + "Date": "2017-10-19", + "Score": 79 + }, + { + "Product": "Desktop", + "Date": "2017-11-01", + "Score": 58 + }, + { + "Product": "Desktop", + "Date": "2017-11-15", + "Score": 51 + }, + { + "Product": "Desktop", + "Date": "2017-11-29", + "Score": 65 + }, + { + "Product": "Desktop", + "Date": "2017-12-12", + "Score": 48 + }, + { + "Product": "Desktop", + "Date": "2017-12-26", + "Score": 51 + }, + { + "Product": "Desktop", + "Date": "2018-01-09", + "Score": 58 + }, + { + "Product": "Desktop", + "Date": "2018-01-22", + "Score": 65 + }, + { + "Product": "Desktop", + "Date": "2018-02-05", + "Score": 96 + }, + { + "Product": "Desktop", + "Date": "2018-02-19", + "Score": 73 + }, + { + "Product": "Desktop", + "Date": "2018-03-04", + "Score": 54 + }, + { + "Product": "Desktop", + "Date": "2018-03-18", + "Score": 2 + }, + { + "Product": "Desktop", + "Date": "2018-04-01", + "Score": 97 + }, + { + "Product": "Desktop", + "Date": "2018-04-14", + "Score": 38 + }, + { + "Product": "Desktop", + "Date": "2018-04-28", + "Score": 39 + }, + { + "Product": "Desktop", + "Date": "2018-05-12", + "Score": 92 + }, + { + "Product": "Desktop", + "Date": "2018-05-26", + "Score": 23 + }, + { + "Product": "Desktop", + "Date": "2018-06-08", + "Score": 22 + }, + { + "Product": "Desktop", + "Date": "2018-06-22", + "Score": 63 + }, + { + "Product": "Desktop", + "Date": "2018-07-06", + "Score": 43 + }, + { + "Product": "Desktop", + "Date": "2018-07-19", + "Score": 67 + }, + { + "Product": "Desktop", + "Date": "2018-08-02", + "Score": 73 + }, + { + "Product": "Desktop", + "Date": "2018-08-16", + "Score": 38 + }, + { + "Product": "Desktop", + "Date": "2018-08-29", + "Score": 23 + }, + { + "Product": "Desktop", + "Date": "2018-09-12", + "Score": 89 + }, + { + "Product": "Desktop", + "Date": "2018-09-26", + "Score": 81 + }, + { + "Product": "Desktop", + "Date": "2018-10-09", + "Score": 15 + }, + { + "Product": "Desktop", + "Date": "2018-10-23", + "Score": 88 + }, + { + "Product": "Desktop", + "Date": "2018-11-06", + "Score": 78 + }, + { + "Product": "Desktop", + "Date": "2018-11-19", + "Score": 99 + }, + { + "Product": "Desktop", + "Date": "2018-12-03", + "Score": 5 + }, + { + "Product": "Desktop", + "Date": "2018-12-17", + "Score": 74 + }, + { + "Product": "Monitor", + "Date": "2016-01-01", + "Score": 65 + }, + { + "Product": "Monitor", + "Date": "2016-01-14", + "Score": 59 + }, + { + "Product": "Monitor", + "Date": "2016-01-28", + "Score": 61 + }, + { + "Product": "Monitor", + "Date": "2016-02-11", + "Score": 63 + }, + { + "Product": "Monitor", + "Date": "2016-02-24", + "Score": 40 + }, + { + "Product": "Monitor", + "Date": "2016-03-09", + "Score": 99 + }, + { + "Product": "Monitor", + "Date": "2016-03-23", + "Score": 82 + }, + { + "Product": "Monitor", + "Date": "2016-04-05", + "Score": 6 + }, + { + "Product": "Monitor", + "Date": "2016-04-19", + "Score": 93 + }, + { + "Product": "Monitor", + "Date": "2016-05-03", + "Score": 59 + }, + { + "Product": "Monitor", + "Date": "2016-05-16", + "Score": 2 + }, + { + "Product": "Monitor", + "Date": "2016-05-30", + "Score": 7 + }, + { + "Product": "Monitor", + "Date": "2016-06-13", + "Score": 26 + }, + { + "Product": "Monitor", + "Date": "2016-06-26", + "Score": 62 + }, + { + "Product": "Monitor", + "Date": "2016-07-10", + "Score": 27 + }, + { + "Product": "Monitor", + "Date": "2016-07-24", + "Score": 14 + }, + { + "Product": "Monitor", + "Date": "2016-08-07", + "Score": 34 + }, + { + "Product": "Monitor", + "Date": "2016-08-20", + "Score": 33 + }, + { + "Product": "Monitor", + "Date": "2016-09-03", + "Score": 9 + }, + { + "Product": "Monitor", + "Date": "2016-09-17", + "Score": 19 + }, + { + "Product": "Monitor", + "Date": "2016-09-30", + "Score": 22 + }, + { + "Product": "Monitor", + "Date": "2016-10-14", + "Score": 79 + }, + { + "Product": "Monitor", + "Date": "2016-10-28", + "Score": 26 + }, + { + "Product": "Monitor", + "Date": "2016-11-10", + "Score": 7 + }, + { + "Product": "Monitor", + "Date": "2016-11-24", + "Score": 16 + }, + { + "Product": "Monitor", + "Date": "2016-12-08", + "Score": 52 + }, + { + "Product": "Monitor", + "Date": "2016-12-21", + "Score": 35 + }, + { + "Product": "Monitor", + "Date": "2017-01-04", + "Score": 50 + }, + { + "Product": "Monitor", + "Date": "2017-01-18", + "Score": 37 + }, + { + "Product": "Monitor", + "Date": "2017-01-31", + "Score": 17 + }, + { + "Product": "Monitor", + "Date": "2017-02-14", + "Score": 75 + }, + { + "Product": "Monitor", + "Date": "2017-02-28", + "Score": 58 + }, + { + "Product": "Monitor", + "Date": "2017-03-14", + "Score": 88 + }, + { + "Product": "Monitor", + "Date": "2017-03-27", + "Score": 6 + }, + { + "Product": "Monitor", + "Date": "2017-04-10", + "Score": 60 + }, + { + "Product": "Monitor", + "Date": "2017-04-24", + "Score": 85 + }, + { + "Product": "Monitor", + "Date": "2017-05-07", + "Score": 40 + }, + { + "Product": "Monitor", + "Date": "2017-05-21", + "Score": 31 + }, + { + "Product": "Monitor", + "Date": "2017-06-04", + "Score": 34 + }, + { + "Product": "Monitor", + "Date": "2017-06-17", + "Score": 54 + }, + { + "Product": "Monitor", + "Date": "2017-07-01", + "Score": 62 + }, + { + "Product": "Monitor", + "Date": "2017-07-15", + "Score": 83 + }, + { + "Product": "Monitor", + "Date": "2017-07-28", + "Score": 77 + }, + { + "Product": "Monitor", + "Date": "2017-08-11", + "Score": 81 + }, + { + "Product": "Monitor", + "Date": "2017-08-25", + "Score": 85 + }, + { + "Product": "Monitor", + "Date": "2017-09-07", + "Score": 57 + }, + { + "Product": "Monitor", + "Date": "2017-09-21", + "Score": 43 + }, + { + "Product": "Monitor", + "Date": "2017-10-05", + "Score": 80 + }, + { + "Product": "Monitor", + "Date": "2017-10-19", + "Score": 30 + }, + { + "Product": "Monitor", + "Date": "2017-11-01", + "Score": 11 + }, + { + "Product": "Monitor", + "Date": "2017-11-15", + "Score": 53 + }, + { + "Product": "Monitor", + "Date": "2017-11-29", + "Score": 35 + }, + { + "Product": "Monitor", + "Date": "2017-12-12", + "Score": 5 + }, + { + "Product": "Monitor", + "Date": "2017-12-26", + "Score": 15 + }, + { + "Product": "Monitor", + "Date": "2018-01-09", + "Score": 9 + }, + { + "Product": "Monitor", + "Date": "2018-01-22", + "Score": 46 + }, + { + "Product": "Monitor", + "Date": "2018-02-05", + "Score": 65 + }, + { + "Product": "Monitor", + "Date": "2018-02-19", + "Score": 74 + }, + { + "Product": "Monitor", + "Date": "2018-03-04", + "Score": 85 + }, + { + "Product": "Monitor", + "Date": "2018-03-18", + "Score": 96 + }, + { + "Product": "Monitor", + "Date": "2018-04-01", + "Score": 4 + }, + { + "Product": "Monitor", + "Date": "2018-04-14", + "Score": 79 + }, + { + "Product": "Monitor", + "Date": "2018-04-28", + "Score": 66 + }, + { + "Product": "Monitor", + "Date": "2018-05-12", + "Score": 36 + }, + { + "Product": "Monitor", + "Date": "2018-05-26", + "Score": 97 + }, + { + "Product": "Monitor", + "Date": "2018-06-08", + "Score": 89 + }, + { + "Product": "Monitor", + "Date": "2018-06-22", + "Score": 49 + }, + { + "Product": "Monitor", + "Date": "2018-07-06", + "Score": 100 + }, + { + "Product": "Monitor", + "Date": "2018-07-19", + "Score": 31 + }, + { + "Product": "Monitor", + "Date": "2018-08-02", + "Score": 18 + }, + { + "Product": "Monitor", + "Date": "2018-08-16", + "Score": 32 + }, + { + "Product": "Monitor", + "Date": "2018-08-29", + "Score": 86 + }, + { + "Product": "Monitor", + "Date": "2018-09-12", + "Score": 63 + }, + { + "Product": "Monitor", + "Date": "2018-09-26", + "Score": 41 + }, + { + "Product": "Monitor", + "Date": "2018-10-09", + "Score": 23 + }, + { + "Product": "Monitor", + "Date": "2018-10-23", + "Score": 76 + }, + { + "Product": "Monitor", + "Date": "2018-11-06", + "Score": 89 + }, + { + "Product": "Monitor", + "Date": "2018-11-19", + "Score": 42 + }, + { + "Product": "Monitor", + "Date": "2018-12-03", + "Score": 12 + }, + { + "Product": "Monitor", + "Date": "2018-12-17", + "Score": 16 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/heatmap/06-card60.flint.json b/test-harness/excel/evaluations/inputs/heatmap/06-card60.flint.json new file mode 100644 index 00000000..a2a68837 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/heatmap/06-card60.flint.json @@ -0,0 +1,12023 @@ +{ + "semantic_types": { + "StartDate": "Date", + "EndDate": "Date", + "Correlation": "Quantity" + }, + "chart_spec": { + "chartType": "Heatmap", + "encodings": { + "x": "StartDate", + "y": "EndDate", + "color": "Correlation" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "StartDate": "2018-01-01", + "EndDate": "2020-01-01", + "Correlation": -0.29 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2020-01-28", + "Correlation": 0.35 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2020-02-24", + "Correlation": 0.55 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2020-03-23", + "Correlation": 0.19 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2020-04-19", + "Correlation": 0.3 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2020-05-16", + "Correlation": -0.96 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2020-06-13", + "Correlation": 0.53 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2020-07-10", + "Correlation": -0.56 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2020-08-07", + "Correlation": 0.03 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2020-09-03", + "Correlation": 0.24 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2020-09-30", + "Correlation": 0.97 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2020-10-28", + "Correlation": 0.93 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2020-11-24", + "Correlation": -0.59 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2020-12-21", + "Correlation": 0.19 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2021-01-18", + "Correlation": 0.12 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2021-02-14", + "Correlation": 0.78 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2021-03-14", + "Correlation": -0.99 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2021-04-10", + "Correlation": 0.75 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2021-05-07", + "Correlation": 0.6 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2021-06-04", + "Correlation": 0.92 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2021-07-01", + "Correlation": -0.74 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2021-07-28", + "Correlation": -0.87 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2021-08-25", + "Correlation": -0.43 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2021-09-21", + "Correlation": -0.27 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2021-10-19", + "Correlation": 0.51 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2021-11-15", + "Correlation": 0.64 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2021-12-12", + "Correlation": 0.66 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2022-01-09", + "Correlation": 0.64 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2022-02-05", + "Correlation": 0.56 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2022-03-04", + "Correlation": -0.78 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2022-04-01", + "Correlation": 0.2 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2022-04-28", + "Correlation": -0.47 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2022-05-26", + "Correlation": 0.33 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2022-06-22", + "Correlation": 0.11 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2022-07-19", + "Correlation": 0.48 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2022-08-16", + "Correlation": -0.94 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2022-09-12", + "Correlation": 0.69 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2022-10-09", + "Correlation": 0.83 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2022-11-06", + "Correlation": -0.4 + }, + { + "StartDate": "2018-01-01", + "EndDate": "2022-12-03", + "Correlation": -0.23 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2020-01-01", + "Correlation": -0.25 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2020-01-28", + "Correlation": -0.65 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2020-02-24", + "Correlation": 0.83 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2020-03-23", + "Correlation": -0.82 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2020-04-19", + "Correlation": -0.23 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2020-05-16", + "Correlation": 0.21 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2020-06-13", + "Correlation": -0.2 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2020-07-10", + "Correlation": 0.1 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2020-08-07", + "Correlation": 0.87 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2020-09-03", + "Correlation": 0.37 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2020-09-30", + "Correlation": 0.57 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2020-10-28", + "Correlation": 0.46 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2020-11-24", + "Correlation": 0.58 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2020-12-21", + "Correlation": 0.17 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2021-01-18", + "Correlation": 0.37 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2021-02-14", + "Correlation": -0.56 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2021-03-14", + "Correlation": -0.88 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2021-04-10", + "Correlation": 0.83 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2021-05-07", + "Correlation": -0.22 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2021-06-04", + "Correlation": -0.17 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2021-07-01", + "Correlation": 0.69 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2021-07-28", + "Correlation": -0.22 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2021-08-25", + "Correlation": 0.41 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2021-09-21", + "Correlation": -0.27 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2021-10-19", + "Correlation": -0.22 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2021-11-15", + "Correlation": -0.89 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2021-12-12", + "Correlation": 0.97 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2022-01-09", + "Correlation": 0.18 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2022-02-05", + "Correlation": 0.08 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2022-03-04", + "Correlation": -0.73 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2022-04-01", + "Correlation": -0.66 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2022-04-28", + "Correlation": 0.72 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2022-05-26", + "Correlation": 0.88 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2022-06-22", + "Correlation": 0.61 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2022-07-19", + "Correlation": -0.01 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2022-08-16", + "Correlation": 0.19 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2022-09-12", + "Correlation": -0.64 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2022-10-09", + "Correlation": -0.75 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2022-11-06", + "Correlation": -0.57 + }, + { + "StartDate": "2018-01-19", + "EndDate": "2022-12-03", + "Correlation": 0.01 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2020-01-01", + "Correlation": 0.21 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2020-01-28", + "Correlation": -0.86 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2020-02-24", + "Correlation": 0.51 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2020-03-23", + "Correlation": -0.48 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2020-04-19", + "Correlation": 0.75 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2020-05-16", + "Correlation": -0.54 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2020-06-13", + "Correlation": 0.33 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2020-07-10", + "Correlation": 0.51 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2020-08-07", + "Correlation": -0.19 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2020-09-03", + "Correlation": 0.68 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2020-09-30", + "Correlation": -0.55 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2020-10-28", + "Correlation": -0.04 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2020-11-24", + "Correlation": -0.43 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2020-12-21", + "Correlation": 0.91 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2021-01-18", + "Correlation": 0.72 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2021-02-14", + "Correlation": -0.51 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2021-03-14", + "Correlation": 0.65 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2021-04-10", + "Correlation": -0.63 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2021-05-07", + "Correlation": 0.78 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2021-06-04", + "Correlation": -0.57 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2021-07-01", + "Correlation": -0.08 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2021-07-28", + "Correlation": -0.72 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2021-08-25", + "Correlation": -0.01 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2021-09-21", + "Correlation": 0.7 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2021-10-19", + "Correlation": -0.31 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2021-11-15", + "Correlation": -0.79 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2021-12-12", + "Correlation": -0.57 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2022-01-09", + "Correlation": -0.77 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2022-02-05", + "Correlation": 0.72 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2022-03-04", + "Correlation": 0.93 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2022-04-01", + "Correlation": -0.59 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2022-04-28", + "Correlation": 0.84 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2022-05-26", + "Correlation": -0.02 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2022-06-22", + "Correlation": -0.97 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2022-07-19", + "Correlation": 0.23 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2022-08-16", + "Correlation": 0.73 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2022-09-12", + "Correlation": 0.33 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2022-10-09", + "Correlation": 0.53 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2022-11-06", + "Correlation": -0.98 + }, + { + "StartDate": "2018-02-06", + "EndDate": "2022-12-03", + "Correlation": 0.14 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2020-01-01", + "Correlation": 0.13 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2020-01-28", + "Correlation": -0.12 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2020-02-24", + "Correlation": -0.94 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2020-03-23", + "Correlation": 0.81 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2020-04-19", + "Correlation": 0.96 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2020-05-16", + "Correlation": -0.35 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2020-06-13", + "Correlation": 0.94 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2020-07-10", + "Correlation": -0.89 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2020-08-07", + "Correlation": -0.72 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2020-09-03", + "Correlation": -0.25 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2020-09-30", + "Correlation": 0.77 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2020-10-28", + "Correlation": 0.48 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2020-11-24", + "Correlation": -0.91 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2020-12-21", + "Correlation": 0.38 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2021-01-18", + "Correlation": -0.63 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2021-02-14", + "Correlation": -0.97 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2021-03-14", + "Correlation": -0.69 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2021-04-10", + "Correlation": -0.41 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2021-05-07", + "Correlation": 0.21 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2021-06-04", + "Correlation": -0.99 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2021-07-01", + "Correlation": 0.31 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2021-07-28", + "Correlation": -0.52 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2021-08-25", + "Correlation": 0.22 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2021-09-21", + "Correlation": -0.82 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2021-10-19", + "Correlation": 0.95 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2021-11-15", + "Correlation": -0.19 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2021-12-12", + "Correlation": -0.64 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2022-01-09", + "Correlation": 0.63 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2022-02-05", + "Correlation": -0.56 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2022-03-04", + "Correlation": 0.61 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2022-04-01", + "Correlation": 0.95 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2022-04-28", + "Correlation": -0.3 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2022-05-26", + "Correlation": 0.7 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2022-06-22", + "Correlation": -0.68 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2022-07-19", + "Correlation": 0.76 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2022-08-16", + "Correlation": 0.8 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2022-09-12", + "Correlation": -0.89 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2022-10-09", + "Correlation": -0.21 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2022-11-06", + "Correlation": 0 + }, + { + "StartDate": "2018-02-24", + "EndDate": "2022-12-03", + "Correlation": 0.15 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2020-01-01", + "Correlation": 0.27 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2020-01-28", + "Correlation": 0.62 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2020-02-24", + "Correlation": 0.71 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2020-03-23", + "Correlation": 0.47 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2020-04-19", + "Correlation": 0.68 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2020-05-16", + "Correlation": 0.63 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2020-06-13", + "Correlation": 0.57 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2020-07-10", + "Correlation": 0.56 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2020-08-07", + "Correlation": 0.35 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2020-09-03", + "Correlation": -0.36 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2020-09-30", + "Correlation": 0.1 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2020-10-28", + "Correlation": -0.18 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2020-11-24", + "Correlation": 0.48 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2020-12-21", + "Correlation": -0.5 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2021-01-18", + "Correlation": 0.84 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2021-02-14", + "Correlation": 0.75 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2021-03-14", + "Correlation": -0.43 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2021-04-10", + "Correlation": 0.5 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2021-05-07", + "Correlation": 0.06 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2021-06-04", + "Correlation": 0.15 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2021-07-01", + "Correlation": 0.24 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2021-07-28", + "Correlation": -0.35 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2021-08-25", + "Correlation": -0.65 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2021-09-21", + "Correlation": -0.88 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2021-10-19", + "Correlation": 0.94 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2021-11-15", + "Correlation": 0.24 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2021-12-12", + "Correlation": -0.23 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2022-01-09", + "Correlation": 0.12 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2022-02-05", + "Correlation": 0.31 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2022-03-04", + "Correlation": 0.87 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2022-04-01", + "Correlation": 0.73 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2022-04-28", + "Correlation": -0.37 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2022-05-26", + "Correlation": -0.22 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2022-06-22", + "Correlation": -0.56 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2022-07-19", + "Correlation": 0.56 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2022-08-16", + "Correlation": -0.11 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2022-09-12", + "Correlation": 0.91 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2022-10-09", + "Correlation": -0.01 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2022-11-06", + "Correlation": -0.78 + }, + { + "StartDate": "2018-03-15", + "EndDate": "2022-12-03", + "Correlation": 0.59 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2020-01-01", + "Correlation": -0.99 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2020-01-28", + "Correlation": -0.93 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2020-02-24", + "Correlation": -0.34 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2020-03-23", + "Correlation": 0.26 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2020-04-19", + "Correlation": -0.74 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2020-05-16", + "Correlation": -0.73 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2020-06-13", + "Correlation": -0.51 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2020-07-10", + "Correlation": 0.83 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2020-08-07", + "Correlation": 0.75 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2020-09-03", + "Correlation": 0.56 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2020-09-30", + "Correlation": -0.33 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2020-10-28", + "Correlation": -0.26 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2020-11-24", + "Correlation": -0.3 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2020-12-21", + "Correlation": 0.5 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2021-01-18", + "Correlation": -0.07 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2021-02-14", + "Correlation": 0.02 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2021-03-14", + "Correlation": -0.74 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2021-04-10", + "Correlation": -0.92 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2021-05-07", + "Correlation": 0.91 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2021-06-04", + "Correlation": -0.62 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2021-07-01", + "Correlation": 0.59 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2021-07-28", + "Correlation": -0.51 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2021-08-25", + "Correlation": 0.79 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2021-09-21", + "Correlation": -0.47 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2021-10-19", + "Correlation": 0.4 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2021-11-15", + "Correlation": -0.77 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2021-12-12", + "Correlation": 0.06 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2022-01-09", + "Correlation": 0.85 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2022-02-05", + "Correlation": 0.22 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2022-03-04", + "Correlation": 0.71 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2022-04-01", + "Correlation": -0.72 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2022-04-28", + "Correlation": -0.44 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2022-05-26", + "Correlation": 0.18 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2022-06-22", + "Correlation": -0.06 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2022-07-19", + "Correlation": -0.63 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2022-08-16", + "Correlation": 0.87 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2022-09-12", + "Correlation": -0.15 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2022-10-09", + "Correlation": 0.16 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2022-11-06", + "Correlation": 0.22 + }, + { + "StartDate": "2018-04-02", + "EndDate": "2022-12-03", + "Correlation": 0.95 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2020-01-01", + "Correlation": -0.7 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2020-01-28", + "Correlation": -0.89 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2020-02-24", + "Correlation": 0.67 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2020-03-23", + "Correlation": 0.58 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2020-04-19", + "Correlation": -0.99 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2020-05-16", + "Correlation": 0.13 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2020-06-13", + "Correlation": 0.46 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2020-07-10", + "Correlation": 0.32 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2020-08-07", + "Correlation": 0.06 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2020-09-03", + "Correlation": -0.52 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2020-09-30", + "Correlation": -0.61 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2020-10-28", + "Correlation": 0.91 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2020-11-24", + "Correlation": -0.74 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2020-12-21", + "Correlation": 0.55 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2021-01-18", + "Correlation": -0.94 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2021-02-14", + "Correlation": 0.03 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2021-03-14", + "Correlation": 0.78 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2021-04-10", + "Correlation": -0.62 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2021-05-07", + "Correlation": 0.33 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2021-06-04", + "Correlation": 0.24 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2021-07-01", + "Correlation": 0.97 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2021-07-28", + "Correlation": -0.88 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2021-08-25", + "Correlation": -0.37 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2021-09-21", + "Correlation": -0.85 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2021-10-19", + "Correlation": 0.37 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2021-11-15", + "Correlation": -0.56 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2021-12-12", + "Correlation": -0.94 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2022-01-09", + "Correlation": 0.79 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2022-02-05", + "Correlation": 0.35 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2022-03-04", + "Correlation": -1 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2022-04-01", + "Correlation": -0.65 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2022-04-28", + "Correlation": 0.68 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2022-05-26", + "Correlation": -0.44 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2022-06-22", + "Correlation": -0.35 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2022-07-19", + "Correlation": -0.35 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2022-08-16", + "Correlation": -0.86 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2022-09-12", + "Correlation": 0.33 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2022-10-09", + "Correlation": -0.91 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2022-11-06", + "Correlation": 0.2 + }, + { + "StartDate": "2018-04-20", + "EndDate": "2022-12-03", + "Correlation": -0.93 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2020-01-01", + "Correlation": 0.46 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2020-01-28", + "Correlation": 0.17 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2020-02-24", + "Correlation": -0.56 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2020-03-23", + "Correlation": 0.42 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2020-04-19", + "Correlation": 0.39 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2020-05-16", + "Correlation": -0.37 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2020-06-13", + "Correlation": -0.16 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2020-07-10", + "Correlation": -0.35 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2020-08-07", + "Correlation": -0.07 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2020-09-03", + "Correlation": 0.78 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2020-09-30", + "Correlation": -0.21 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2020-10-28", + "Correlation": -0.79 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2020-11-24", + "Correlation": -0.47 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2020-12-21", + "Correlation": -0.13 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2021-01-18", + "Correlation": 0.61 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2021-02-14", + "Correlation": 0.77 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2021-03-14", + "Correlation": -0.19 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2021-04-10", + "Correlation": -0.65 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2021-05-07", + "Correlation": 0.45 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2021-06-04", + "Correlation": -0.77 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2021-07-01", + "Correlation": -0.3 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2021-07-28", + "Correlation": -0.66 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2021-08-25", + "Correlation": 0.47 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2021-09-21", + "Correlation": -0.5 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2021-10-19", + "Correlation": -0.56 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2021-11-15", + "Correlation": -0.4 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2021-12-12", + "Correlation": 0.19 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2022-01-09", + "Correlation": 0.01 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2022-02-05", + "Correlation": -0.89 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2022-03-04", + "Correlation": -0.79 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2022-04-01", + "Correlation": -0.12 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2022-04-28", + "Correlation": -0.52 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2022-05-26", + "Correlation": -0.64 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2022-06-22", + "Correlation": 0.72 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2022-07-19", + "Correlation": 0.33 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2022-08-16", + "Correlation": 0.97 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2022-09-12", + "Correlation": 0.88 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2022-10-09", + "Correlation": 0.66 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2022-11-06", + "Correlation": 0.04 + }, + { + "StartDate": "2018-05-08", + "EndDate": "2022-12-03", + "Correlation": -0.18 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2020-01-01", + "Correlation": -0.11 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2020-01-28", + "Correlation": 0.08 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2020-02-24", + "Correlation": -0.64 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2020-03-23", + "Correlation": -0.27 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2020-04-19", + "Correlation": 0.32 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2020-05-16", + "Correlation": -0.74 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2020-06-13", + "Correlation": -0.1 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2020-07-10", + "Correlation": -0.11 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2020-08-07", + "Correlation": 0.99 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2020-09-03", + "Correlation": 0.95 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2020-09-30", + "Correlation": 0.89 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2020-10-28", + "Correlation": -0.74 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2020-11-24", + "Correlation": -0.86 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2020-12-21", + "Correlation": 0.31 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2021-01-18", + "Correlation": -0.43 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2021-02-14", + "Correlation": -0.56 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2021-03-14", + "Correlation": -0.59 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2021-04-10", + "Correlation": 0.95 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2021-05-07", + "Correlation": -0.21 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2021-06-04", + "Correlation": -0.96 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2021-07-01", + "Correlation": 0.17 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2021-07-28", + "Correlation": -0.33 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2021-08-25", + "Correlation": 0.85 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2021-09-21", + "Correlation": -0.07 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2021-10-19", + "Correlation": -0.34 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2021-11-15", + "Correlation": -0.17 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2021-12-12", + "Correlation": -0.22 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2022-01-09", + "Correlation": -0.13 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2022-02-05", + "Correlation": -0.06 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2022-03-04", + "Correlation": 0.27 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2022-04-01", + "Correlation": 0.11 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2022-04-28", + "Correlation": -0.69 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2022-05-26", + "Correlation": -0.8 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2022-06-22", + "Correlation": -0.21 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2022-07-19", + "Correlation": -0.14 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2022-08-16", + "Correlation": 0.26 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2022-09-12", + "Correlation": -0.28 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2022-10-09", + "Correlation": 0.34 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2022-11-06", + "Correlation": 0.12 + }, + { + "StartDate": "2018-05-27", + "EndDate": "2022-12-03", + "Correlation": 0.39 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2020-01-01", + "Correlation": -0.29 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2020-01-28", + "Correlation": -0.47 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2020-02-24", + "Correlation": -0.29 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2020-03-23", + "Correlation": -0.25 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2020-04-19", + "Correlation": -0.25 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2020-05-16", + "Correlation": 0.15 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2020-06-13", + "Correlation": 0.5 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2020-07-10", + "Correlation": -0.05 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2020-08-07", + "Correlation": -0.32 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2020-09-03", + "Correlation": 0.7 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2020-09-30", + "Correlation": 0.19 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2020-10-28", + "Correlation": 0.35 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2020-11-24", + "Correlation": -0.58 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2020-12-21", + "Correlation": 0.91 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2021-01-18", + "Correlation": 0.1 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2021-02-14", + "Correlation": 0.8 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2021-03-14", + "Correlation": -0.65 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2021-04-10", + "Correlation": 0.23 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2021-05-07", + "Correlation": 0.34 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2021-06-04", + "Correlation": 0.66 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2021-07-01", + "Correlation": 0.42 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2021-07-28", + "Correlation": 0.17 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2021-08-25", + "Correlation": 0.65 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2021-09-21", + "Correlation": 0.29 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2021-10-19", + "Correlation": -0.14 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2021-11-15", + "Correlation": 0.09 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2021-12-12", + "Correlation": 0.7 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2022-01-09", + "Correlation": 0.88 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2022-02-05", + "Correlation": -0.84 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2022-03-04", + "Correlation": -0.48 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2022-04-01", + "Correlation": -0.11 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2022-04-28", + "Correlation": 0.82 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2022-05-26", + "Correlation": -0.27 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2022-06-22", + "Correlation": 0.63 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2022-07-19", + "Correlation": 0.63 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2022-08-16", + "Correlation": -0.68 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2022-09-12", + "Correlation": -0.61 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2022-10-09", + "Correlation": -0.95 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2022-11-06", + "Correlation": 0.86 + }, + { + "StartDate": "2018-06-14", + "EndDate": "2022-12-03", + "Correlation": 0.9 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2020-01-01", + "Correlation": 0.74 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2020-01-28", + "Correlation": -0.8 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2020-02-24", + "Correlation": -0.3 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2020-03-23", + "Correlation": 0.28 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2020-04-19", + "Correlation": 0.31 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2020-05-16", + "Correlation": -0.37 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2020-06-13", + "Correlation": -0.1 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2020-07-10", + "Correlation": 0.74 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2020-08-07", + "Correlation": -0.91 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2020-09-03", + "Correlation": 0.49 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2020-09-30", + "Correlation": -0.5 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2020-10-28", + "Correlation": -0.65 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2020-11-24", + "Correlation": 0.85 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2020-12-21", + "Correlation": 0.57 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2021-01-18", + "Correlation": 0.79 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2021-02-14", + "Correlation": 0.46 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2021-03-14", + "Correlation": -0.5 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2021-04-10", + "Correlation": -0.83 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2021-05-07", + "Correlation": 0.31 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2021-06-04", + "Correlation": 0.6 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2021-07-01", + "Correlation": -0.69 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2021-07-28", + "Correlation": 0.15 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2021-08-25", + "Correlation": 0.56 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2021-09-21", + "Correlation": -0.1 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2021-10-19", + "Correlation": 0.95 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2021-11-15", + "Correlation": -0.68 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2021-12-12", + "Correlation": 0.65 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2022-01-09", + "Correlation": 0.5 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2022-02-05", + "Correlation": -0.99 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2022-03-04", + "Correlation": -0.76 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2022-04-01", + "Correlation": 0.07 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2022-04-28", + "Correlation": -0.25 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2022-05-26", + "Correlation": -0.72 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2022-06-22", + "Correlation": 0.43 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2022-07-19", + "Correlation": -0.26 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2022-08-16", + "Correlation": -0.44 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2022-09-12", + "Correlation": 0.64 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2022-10-09", + "Correlation": 0.87 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2022-11-06", + "Correlation": -0.71 + }, + { + "StartDate": "2018-07-02", + "EndDate": "2022-12-03", + "Correlation": -0.4 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2020-01-01", + "Correlation": 0.28 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2020-01-28", + "Correlation": -0.8 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2020-02-24", + "Correlation": 0.76 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2020-03-23", + "Correlation": -0.18 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2020-04-19", + "Correlation": 0.56 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2020-05-16", + "Correlation": 0.06 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2020-06-13", + "Correlation": 0.9 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2020-07-10", + "Correlation": 0.16 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2020-08-07", + "Correlation": -0.77 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2020-09-03", + "Correlation": 0.4 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2020-09-30", + "Correlation": 0.63 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2020-10-28", + "Correlation": -0.19 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2020-11-24", + "Correlation": 0.07 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2020-12-21", + "Correlation": -0.18 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2021-01-18", + "Correlation": -0.08 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2021-02-14", + "Correlation": 0.53 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2021-03-14", + "Correlation": 0.02 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2021-04-10", + "Correlation": 0.81 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2021-05-07", + "Correlation": 0.56 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2021-06-04", + "Correlation": -0.04 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2021-07-01", + "Correlation": 0.43 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2021-07-28", + "Correlation": -0.71 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2021-08-25", + "Correlation": -0.63 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2021-09-21", + "Correlation": -0.26 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2021-10-19", + "Correlation": -0.71 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2021-11-15", + "Correlation": 0.49 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2021-12-12", + "Correlation": -0.82 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2022-01-09", + "Correlation": -0.09 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2022-02-05", + "Correlation": -0.25 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2022-03-04", + "Correlation": 0.89 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2022-04-01", + "Correlation": -0.85 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2022-04-28", + "Correlation": -0.23 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2022-05-26", + "Correlation": -0.12 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2022-06-22", + "Correlation": -0.88 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2022-07-19", + "Correlation": 0.59 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2022-08-16", + "Correlation": -0.12 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2022-09-12", + "Correlation": 0.26 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2022-10-09", + "Correlation": 0.73 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2022-11-06", + "Correlation": -0.55 + }, + { + "StartDate": "2018-07-20", + "EndDate": "2022-12-03", + "Correlation": -0.78 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2020-01-01", + "Correlation": 0.54 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2020-01-28", + "Correlation": -0.99 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2020-02-24", + "Correlation": 0.82 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2020-03-23", + "Correlation": -0.86 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2020-04-19", + "Correlation": 0.79 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2020-05-16", + "Correlation": 0.99 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2020-06-13", + "Correlation": 0.38 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2020-07-10", + "Correlation": -0.06 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2020-08-07", + "Correlation": -0.43 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2020-09-03", + "Correlation": -0.77 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2020-09-30", + "Correlation": 0.4 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2020-10-28", + "Correlation": 0.56 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2020-11-24", + "Correlation": 0.57 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2020-12-21", + "Correlation": 0.86 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2021-01-18", + "Correlation": 0.94 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2021-02-14", + "Correlation": -0.82 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2021-03-14", + "Correlation": -0.92 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2021-04-10", + "Correlation": 0.07 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2021-05-07", + "Correlation": -0.97 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2021-06-04", + "Correlation": -0.41 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2021-07-01", + "Correlation": -0.96 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2021-07-28", + "Correlation": -0.15 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2021-08-25", + "Correlation": -0.84 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2021-09-21", + "Correlation": 0.89 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2021-10-19", + "Correlation": -0.9 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2021-11-15", + "Correlation": -0.09 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2021-12-12", + "Correlation": -0.15 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2022-01-09", + "Correlation": -0.71 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2022-02-05", + "Correlation": 0.21 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2022-03-04", + "Correlation": -0.44 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2022-04-01", + "Correlation": -0.55 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2022-04-28", + "Correlation": 0.5 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2022-05-26", + "Correlation": 0.52 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2022-06-22", + "Correlation": -0.73 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2022-07-19", + "Correlation": 0.35 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2022-08-16", + "Correlation": -0.46 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2022-09-12", + "Correlation": -0.3 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2022-10-09", + "Correlation": -0.02 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2022-11-06", + "Correlation": -0.45 + }, + { + "StartDate": "2018-08-08", + "EndDate": "2022-12-03", + "Correlation": 0.01 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2020-01-01", + "Correlation": -0.51 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2020-01-28", + "Correlation": -0.33 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2020-02-24", + "Correlation": -0.99 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2020-03-23", + "Correlation": 0.12 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2020-04-19", + "Correlation": 0.66 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2020-05-16", + "Correlation": -0.21 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2020-06-13", + "Correlation": 0.12 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2020-07-10", + "Correlation": 0.6 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2020-08-07", + "Correlation": -0.32 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2020-09-03", + "Correlation": -0.27 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2020-09-30", + "Correlation": -0.54 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2020-10-28", + "Correlation": -0.4 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2020-11-24", + "Correlation": 0.9 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2020-12-21", + "Correlation": 0.78 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2021-01-18", + "Correlation": -0.43 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2021-02-14", + "Correlation": 0.66 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2021-03-14", + "Correlation": -0.54 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2021-04-10", + "Correlation": 0.62 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2021-05-07", + "Correlation": 0.87 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2021-06-04", + "Correlation": 0.2 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2021-07-01", + "Correlation": 0.49 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2021-07-28", + "Correlation": -0.4 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2021-08-25", + "Correlation": 0.61 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2021-09-21", + "Correlation": 0.86 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2021-10-19", + "Correlation": -0.69 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2021-11-15", + "Correlation": 0.75 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2021-12-12", + "Correlation": 0.22 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2022-01-09", + "Correlation": -0.26 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2022-02-05", + "Correlation": 0.59 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2022-03-04", + "Correlation": 0.23 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2022-04-01", + "Correlation": -0.75 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2022-04-28", + "Correlation": -0.74 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2022-05-26", + "Correlation": -0.31 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2022-06-22", + "Correlation": 0.7 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2022-07-19", + "Correlation": 0.35 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2022-08-16", + "Correlation": 0.41 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2022-09-12", + "Correlation": -0.18 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2022-10-09", + "Correlation": 0.86 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2022-11-06", + "Correlation": -0.24 + }, + { + "StartDate": "2018-08-26", + "EndDate": "2022-12-03", + "Correlation": 0.51 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2020-01-01", + "Correlation": -0.49 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2020-01-28", + "Correlation": -0.11 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2020-02-24", + "Correlation": -0.53 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2020-03-23", + "Correlation": 0.07 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2020-04-19", + "Correlation": 0.74 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2020-05-16", + "Correlation": 0.99 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2020-06-13", + "Correlation": -0.25 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2020-07-10", + "Correlation": -0.2 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2020-08-07", + "Correlation": -0.15 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2020-09-03", + "Correlation": 0.8 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2020-09-30", + "Correlation": 0.05 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2020-10-28", + "Correlation": -0.8 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2020-11-24", + "Correlation": 0.25 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2020-12-21", + "Correlation": 0.5 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2021-01-18", + "Correlation": -0.79 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2021-02-14", + "Correlation": -0.81 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2021-03-14", + "Correlation": 0.89 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2021-04-10", + "Correlation": 0.34 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2021-05-07", + "Correlation": -0.75 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2021-06-04", + "Correlation": 0.32 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2021-07-01", + "Correlation": 0.37 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2021-07-28", + "Correlation": -0.36 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2021-08-25", + "Correlation": -0.93 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2021-09-21", + "Correlation": 0.64 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2021-10-19", + "Correlation": -0.88 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2021-11-15", + "Correlation": -0.24 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2021-12-12", + "Correlation": 0.52 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2022-01-09", + "Correlation": 0.12 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2022-02-05", + "Correlation": 0.02 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2022-03-04", + "Correlation": -0.01 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2022-04-01", + "Correlation": 0.91 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2022-04-28", + "Correlation": 0.99 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2022-05-26", + "Correlation": -0.01 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2022-06-22", + "Correlation": 0.44 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2022-07-19", + "Correlation": -0.5 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2022-08-16", + "Correlation": 0.66 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2022-09-12", + "Correlation": 0.44 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2022-10-09", + "Correlation": -0.03 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2022-11-06", + "Correlation": 0.36 + }, + { + "StartDate": "2018-09-13", + "EndDate": "2022-12-03", + "Correlation": 0.53 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2020-01-01", + "Correlation": -0.97 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2020-01-28", + "Correlation": 0.98 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2020-02-24", + "Correlation": -0.81 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2020-03-23", + "Correlation": -0.7 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2020-04-19", + "Correlation": 0.99 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2020-05-16", + "Correlation": -0.85 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2020-06-13", + "Correlation": -0.95 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2020-07-10", + "Correlation": -0.51 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2020-08-07", + "Correlation": 0.99 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2020-09-03", + "Correlation": -0.61 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2020-09-30", + "Correlation": 0.81 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2020-10-28", + "Correlation": 0.4 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2020-11-24", + "Correlation": -1 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2020-12-21", + "Correlation": 0.62 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2021-01-18", + "Correlation": -0.14 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2021-02-14", + "Correlation": 0.85 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2021-03-14", + "Correlation": 1 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2021-04-10", + "Correlation": 0.36 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2021-05-07", + "Correlation": -0.81 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2021-06-04", + "Correlation": 0.46 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2021-07-01", + "Correlation": -0.49 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2021-07-28", + "Correlation": -0.49 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2021-08-25", + "Correlation": -0.51 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2021-09-21", + "Correlation": 0.07 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2021-10-19", + "Correlation": 0.69 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2021-11-15", + "Correlation": 0.37 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2021-12-12", + "Correlation": -0.96 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2022-01-09", + "Correlation": 0.34 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2022-02-05", + "Correlation": 0.73 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2022-03-04", + "Correlation": -0.25 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2022-04-01", + "Correlation": -0.06 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2022-04-28", + "Correlation": 0.74 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2022-05-26", + "Correlation": 0.13 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2022-06-22", + "Correlation": -0.26 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2022-07-19", + "Correlation": 0.5 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2022-08-16", + "Correlation": -0.32 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2022-09-12", + "Correlation": 0.28 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2022-10-09", + "Correlation": 0.42 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2022-11-06", + "Correlation": 0.16 + }, + { + "StartDate": "2018-10-01", + "EndDate": "2022-12-03", + "Correlation": -0.44 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2020-01-01", + "Correlation": 0.92 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2020-01-28", + "Correlation": 0.08 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2020-02-24", + "Correlation": -0.11 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2020-03-23", + "Correlation": -0.2 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2020-04-19", + "Correlation": -0.94 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2020-05-16", + "Correlation": -0.07 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2020-06-13", + "Correlation": -0.51 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2020-07-10", + "Correlation": 0.59 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2020-08-07", + "Correlation": 0.04 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2020-09-03", + "Correlation": -0.31 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2020-09-30", + "Correlation": -0.25 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2020-10-28", + "Correlation": -0.42 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2020-11-24", + "Correlation": -0.69 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2020-12-21", + "Correlation": -0.91 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2021-01-18", + "Correlation": -0.78 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2021-02-14", + "Correlation": 0.46 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2021-03-14", + "Correlation": -0.63 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2021-04-10", + "Correlation": -0.27 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2021-05-07", + "Correlation": 0.41 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2021-06-04", + "Correlation": 0.73 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2021-07-01", + "Correlation": -0.68 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2021-07-28", + "Correlation": -0.03 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2021-08-25", + "Correlation": -0.5 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2021-09-21", + "Correlation": 0.94 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2021-10-19", + "Correlation": -0.24 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2021-11-15", + "Correlation": -0.13 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2021-12-12", + "Correlation": 0.76 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2022-01-09", + "Correlation": -0.07 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2022-02-05", + "Correlation": -0.71 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2022-03-04", + "Correlation": -0.68 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2022-04-01", + "Correlation": -0.35 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2022-04-28", + "Correlation": -0.64 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2022-05-26", + "Correlation": 0.99 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2022-06-22", + "Correlation": 0.03 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2022-07-19", + "Correlation": -0.58 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2022-08-16", + "Correlation": 0.83 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2022-09-12", + "Correlation": -0.43 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2022-10-09", + "Correlation": 0.1 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2022-11-06", + "Correlation": 0.98 + }, + { + "StartDate": "2018-10-20", + "EndDate": "2022-12-03", + "Correlation": 0.03 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2020-01-01", + "Correlation": -0.7 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2020-01-28", + "Correlation": 0.18 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2020-02-24", + "Correlation": 0.24 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2020-03-23", + "Correlation": -0.84 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2020-04-19", + "Correlation": -0.76 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2020-05-16", + "Correlation": -1 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2020-06-13", + "Correlation": -0.7 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2020-07-10", + "Correlation": 0.98 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2020-08-07", + "Correlation": -0.81 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2020-09-03", + "Correlation": 0.03 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2020-09-30", + "Correlation": -0.55 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2020-10-28", + "Correlation": 0.08 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2020-11-24", + "Correlation": -0.58 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2020-12-21", + "Correlation": -0.01 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2021-01-18", + "Correlation": 0.93 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2021-02-14", + "Correlation": 0.27 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2021-03-14", + "Correlation": -0.09 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2021-04-10", + "Correlation": -0.89 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2021-05-07", + "Correlation": 0.95 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2021-06-04", + "Correlation": 0.05 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2021-07-01", + "Correlation": 0.35 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2021-07-28", + "Correlation": -0.68 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2021-08-25", + "Correlation": -0.44 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2021-09-21", + "Correlation": 0.55 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2021-10-19", + "Correlation": -0.21 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2021-11-15", + "Correlation": -0.97 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2021-12-12", + "Correlation": -0.05 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2022-01-09", + "Correlation": -0.58 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2022-02-05", + "Correlation": -0.35 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2022-03-04", + "Correlation": -0.12 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2022-04-01", + "Correlation": -0.75 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2022-04-28", + "Correlation": 0.2 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2022-05-26", + "Correlation": -0.65 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2022-06-22", + "Correlation": -0.85 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2022-07-19", + "Correlation": -0.73 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2022-08-16", + "Correlation": 0.83 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2022-09-12", + "Correlation": -0.9 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2022-10-09", + "Correlation": -0.26 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2022-11-06", + "Correlation": -0.45 + }, + { + "StartDate": "2018-11-07", + "EndDate": "2022-12-03", + "Correlation": -0.53 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2020-01-01", + "Correlation": 0.39 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2020-01-28", + "Correlation": -0.08 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2020-02-24", + "Correlation": 0.45 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2020-03-23", + "Correlation": 0.76 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2020-04-19", + "Correlation": 0.38 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2020-05-16", + "Correlation": -0.31 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2020-06-13", + "Correlation": 0.73 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2020-07-10", + "Correlation": 0.79 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2020-08-07", + "Correlation": -0.18 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2020-09-03", + "Correlation": 0.46 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2020-09-30", + "Correlation": 0.55 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2020-10-28", + "Correlation": 0.89 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2020-11-24", + "Correlation": 0.39 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2020-12-21", + "Correlation": 0.11 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2021-01-18", + "Correlation": -0.83 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2021-02-14", + "Correlation": -0.73 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2021-03-14", + "Correlation": -0.44 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2021-04-10", + "Correlation": 0.78 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2021-05-07", + "Correlation": 0.09 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2021-06-04", + "Correlation": -0.39 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2021-07-01", + "Correlation": -0.32 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2021-07-28", + "Correlation": 0.42 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2021-08-25", + "Correlation": -0.87 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2021-09-21", + "Correlation": -0.14 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2021-10-19", + "Correlation": 0.45 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2021-11-15", + "Correlation": -0.93 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2021-12-12", + "Correlation": 0.57 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2022-01-09", + "Correlation": 0.01 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2022-02-05", + "Correlation": -0.35 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2022-03-04", + "Correlation": 0.28 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2022-04-01", + "Correlation": 0.96 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2022-04-28", + "Correlation": -0.1 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2022-05-26", + "Correlation": 0.58 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2022-06-22", + "Correlation": 0.75 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2022-07-19", + "Correlation": 0.03 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2022-08-16", + "Correlation": 0.52 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2022-09-12", + "Correlation": -0.21 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2022-10-09", + "Correlation": 1 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2022-11-06", + "Correlation": 0 + }, + { + "StartDate": "2018-11-25", + "EndDate": "2022-12-03", + "Correlation": 0.73 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2020-01-01", + "Correlation": -0.86 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2020-01-28", + "Correlation": -0.11 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2020-02-24", + "Correlation": -0.61 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2020-03-23", + "Correlation": 0.15 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2020-04-19", + "Correlation": -0.46 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2020-05-16", + "Correlation": 0.58 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2020-06-13", + "Correlation": -0.72 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2020-07-10", + "Correlation": -0.17 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2020-08-07", + "Correlation": 0.73 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2020-09-03", + "Correlation": 0.28 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2020-09-30", + "Correlation": -0.17 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2020-10-28", + "Correlation": -0.61 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2020-11-24", + "Correlation": 0.3 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2020-12-21", + "Correlation": 0.1 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2021-01-18", + "Correlation": 0.71 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2021-02-14", + "Correlation": -0.72 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2021-03-14", + "Correlation": 0.53 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2021-04-10", + "Correlation": 0.43 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2021-05-07", + "Correlation": 0.41 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2021-06-04", + "Correlation": 0.34 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2021-07-01", + "Correlation": -0.36 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2021-07-28", + "Correlation": 0.5 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2021-08-25", + "Correlation": 0.51 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2021-09-21", + "Correlation": -0.47 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2021-10-19", + "Correlation": -0.64 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2021-11-15", + "Correlation": 0.46 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2021-12-12", + "Correlation": -0.79 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2022-01-09", + "Correlation": -0.44 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2022-02-05", + "Correlation": -0.95 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2022-03-04", + "Correlation": 0.67 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2022-04-01", + "Correlation": -0.8 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2022-04-28", + "Correlation": 0.16 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2022-05-26", + "Correlation": -0.93 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2022-06-22", + "Correlation": 0.59 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2022-07-19", + "Correlation": 0.43 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2022-08-16", + "Correlation": 0.02 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2022-09-12", + "Correlation": 0.17 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2022-10-09", + "Correlation": -0.8 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2022-11-06", + "Correlation": -0.07 + }, + { + "StartDate": "2018-12-13", + "EndDate": "2022-12-03", + "Correlation": 0.04 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2020-01-01", + "Correlation": 0.46 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2020-01-28", + "Correlation": -0.2 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2020-02-24", + "Correlation": 0.39 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2020-03-23", + "Correlation": -0.77 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2020-04-19", + "Correlation": -0.3 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2020-05-16", + "Correlation": 0.42 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2020-06-13", + "Correlation": 0 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2020-07-10", + "Correlation": -0.9 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2020-08-07", + "Correlation": 0.99 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2020-09-03", + "Correlation": -0.72 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2020-09-30", + "Correlation": -0.05 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2020-10-28", + "Correlation": 0.32 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2020-11-24", + "Correlation": -1 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2020-12-21", + "Correlation": -0.59 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2021-01-18", + "Correlation": 0.12 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2021-02-14", + "Correlation": -0.17 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2021-03-14", + "Correlation": 0.59 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2021-04-10", + "Correlation": 0.33 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2021-05-07", + "Correlation": -0.71 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2021-06-04", + "Correlation": -0.98 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2021-07-01", + "Correlation": -0.58 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2021-07-28", + "Correlation": -0.01 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2021-08-25", + "Correlation": 0.21 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2021-09-21", + "Correlation": 0.41 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2021-10-19", + "Correlation": 0.09 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2021-11-15", + "Correlation": -0.55 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2021-12-12", + "Correlation": 0.37 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2022-01-09", + "Correlation": -0.9 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2022-02-05", + "Correlation": 0.37 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2022-03-04", + "Correlation": 0.75 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2022-04-01", + "Correlation": 0.63 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2022-04-28", + "Correlation": 0.65 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2022-05-26", + "Correlation": 0.09 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2022-06-22", + "Correlation": 0.95 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2022-07-19", + "Correlation": -0.05 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2022-08-16", + "Correlation": 0.69 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2022-09-12", + "Correlation": -0.36 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2022-10-09", + "Correlation": 0.26 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2022-11-06", + "Correlation": -0.71 + }, + { + "StartDate": "2019-01-01", + "EndDate": "2022-12-03", + "Correlation": 0.45 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2020-01-01", + "Correlation": -0.96 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2020-01-28", + "Correlation": -0.06 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2020-02-24", + "Correlation": -0.43 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2020-03-23", + "Correlation": 0.57 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2020-04-19", + "Correlation": 0.49 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2020-05-16", + "Correlation": -0.37 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2020-06-13", + "Correlation": -0.52 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2020-07-10", + "Correlation": -0.25 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2020-08-07", + "Correlation": 0.51 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2020-09-03", + "Correlation": -0.48 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2020-09-30", + "Correlation": -0.54 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2020-10-28", + "Correlation": 0.97 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2020-11-24", + "Correlation": -0.27 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2020-12-21", + "Correlation": -0.27 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2021-01-18", + "Correlation": 0.22 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2021-02-14", + "Correlation": 0.05 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2021-03-14", + "Correlation": -0.66 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2021-04-10", + "Correlation": -0.24 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2021-05-07", + "Correlation": 0.44 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2021-06-04", + "Correlation": 0.75 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2021-07-01", + "Correlation": -0.76 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2021-07-28", + "Correlation": 0.63 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2021-08-25", + "Correlation": -0.91 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2021-09-21", + "Correlation": 0.59 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2021-10-19", + "Correlation": -0.07 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2021-11-15", + "Correlation": -0.21 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2021-12-12", + "Correlation": 0.87 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2022-01-09", + "Correlation": 0.06 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2022-02-05", + "Correlation": -0.9 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2022-03-04", + "Correlation": -0.96 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2022-04-01", + "Correlation": -0.02 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2022-04-28", + "Correlation": 0.56 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2022-05-26", + "Correlation": 0.68 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2022-06-22", + "Correlation": 0.77 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2022-07-19", + "Correlation": 0.43 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2022-08-16", + "Correlation": 0.69 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2022-09-12", + "Correlation": -0.84 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2022-10-09", + "Correlation": -0.02 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2022-11-06", + "Correlation": -0.68 + }, + { + "StartDate": "2019-01-19", + "EndDate": "2022-12-03", + "Correlation": -0.85 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2020-01-01", + "Correlation": 0.43 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2020-01-28", + "Correlation": 0.82 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2020-02-24", + "Correlation": -0.55 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2020-03-23", + "Correlation": -0.83 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2020-04-19", + "Correlation": 0.31 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2020-05-16", + "Correlation": 0.75 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2020-06-13", + "Correlation": 0.93 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2020-07-10", + "Correlation": -0.84 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2020-08-07", + "Correlation": -1 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2020-09-03", + "Correlation": 0.6 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2020-09-30", + "Correlation": -0.17 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2020-10-28", + "Correlation": -0.98 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2020-11-24", + "Correlation": -0.32 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2020-12-21", + "Correlation": -0.69 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2021-01-18", + "Correlation": -0.2 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2021-02-14", + "Correlation": -0.26 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2021-03-14", + "Correlation": 0.29 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2021-04-10", + "Correlation": 0.86 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2021-05-07", + "Correlation": 0.32 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2021-06-04", + "Correlation": -0.1 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2021-07-01", + "Correlation": 0.7 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2021-07-28", + "Correlation": 0.42 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2021-08-25", + "Correlation": -0.89 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2021-09-21", + "Correlation": 0.61 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2021-10-19", + "Correlation": -0.18 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2021-11-15", + "Correlation": 0.25 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2021-12-12", + "Correlation": 0.56 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2022-01-09", + "Correlation": -0.93 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2022-02-05", + "Correlation": 0.11 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2022-03-04", + "Correlation": -0.63 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2022-04-01", + "Correlation": -0.15 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2022-04-28", + "Correlation": 0.33 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2022-05-26", + "Correlation": -0.04 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2022-06-22", + "Correlation": 0.39 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2022-07-19", + "Correlation": -0.99 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2022-08-16", + "Correlation": -0.09 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2022-09-12", + "Correlation": 0.41 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2022-10-09", + "Correlation": 0.06 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2022-11-06", + "Correlation": -0.16 + }, + { + "StartDate": "2019-02-06", + "EndDate": "2022-12-03", + "Correlation": -0.15 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2020-01-01", + "Correlation": -0.42 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2020-01-28", + "Correlation": 0.81 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2020-02-24", + "Correlation": 0.72 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2020-03-23", + "Correlation": -0.3 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2020-04-19", + "Correlation": -0.26 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2020-05-16", + "Correlation": 0.29 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2020-06-13", + "Correlation": 0.84 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2020-07-10", + "Correlation": -0.21 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2020-08-07", + "Correlation": -0.59 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2020-09-03", + "Correlation": -0.87 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2020-09-30", + "Correlation": -0.28 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2020-10-28", + "Correlation": 0.01 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2020-11-24", + "Correlation": -0.94 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2020-12-21", + "Correlation": 0.23 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2021-01-18", + "Correlation": 0.69 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2021-02-14", + "Correlation": -0.3 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2021-03-14", + "Correlation": 0.12 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2021-04-10", + "Correlation": -0.77 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2021-05-07", + "Correlation": -0.48 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2021-06-04", + "Correlation": 0.21 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2021-07-01", + "Correlation": 0.76 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2021-07-28", + "Correlation": -0.67 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2021-08-25", + "Correlation": -0.37 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2021-09-21", + "Correlation": -0.54 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2021-10-19", + "Correlation": -0.77 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2021-11-15", + "Correlation": -0.3 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2021-12-12", + "Correlation": -0.1 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2022-01-09", + "Correlation": -0.75 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2022-02-05", + "Correlation": -0.13 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2022-03-04", + "Correlation": -0.31 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2022-04-01", + "Correlation": -0.71 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2022-04-28", + "Correlation": 0.89 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2022-05-26", + "Correlation": 0.74 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2022-06-22", + "Correlation": -0.38 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2022-07-19", + "Correlation": 0.72 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2022-08-16", + "Correlation": 0.81 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2022-09-12", + "Correlation": 0.65 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2022-10-09", + "Correlation": -0.91 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2022-11-06", + "Correlation": 0.58 + }, + { + "StartDate": "2019-02-24", + "EndDate": "2022-12-03", + "Correlation": 0.93 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2020-01-01", + "Correlation": -0.57 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2020-01-28", + "Correlation": 0.73 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2020-02-24", + "Correlation": 0.43 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2020-03-23", + "Correlation": 0.3 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2020-04-19", + "Correlation": -0.86 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2020-05-16", + "Correlation": 0.82 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2020-06-13", + "Correlation": -0.39 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2020-07-10", + "Correlation": -0.11 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2020-08-07", + "Correlation": 0.6 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2020-09-03", + "Correlation": -0.76 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2020-09-30", + "Correlation": -0.32 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2020-10-28", + "Correlation": 0.51 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2020-11-24", + "Correlation": 0.35 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2020-12-21", + "Correlation": -0.42 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2021-01-18", + "Correlation": -0.33 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2021-02-14", + "Correlation": 0.75 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2021-03-14", + "Correlation": 0.92 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2021-04-10", + "Correlation": 0.93 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2021-05-07", + "Correlation": 0.31 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2021-06-04", + "Correlation": -0.8 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2021-07-01", + "Correlation": 0.55 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2021-07-28", + "Correlation": 0.59 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2021-08-25", + "Correlation": -0.55 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2021-09-21", + "Correlation": -0.67 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2021-10-19", + "Correlation": 0.73 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2021-11-15", + "Correlation": -0.83 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2021-12-12", + "Correlation": -0.24 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2022-01-09", + "Correlation": -0.83 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2022-02-05", + "Correlation": -0.87 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2022-03-04", + "Correlation": 0.42 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2022-04-01", + "Correlation": -0.7 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2022-04-28", + "Correlation": -0.67 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2022-05-26", + "Correlation": 0.24 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2022-06-22", + "Correlation": 0.59 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2022-07-19", + "Correlation": 0.09 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2022-08-16", + "Correlation": 0.42 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2022-09-12", + "Correlation": -0.14 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2022-10-09", + "Correlation": -0.13 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2022-11-06", + "Correlation": 0.37 + }, + { + "StartDate": "2019-03-15", + "EndDate": "2022-12-03", + "Correlation": 0.04 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2020-01-01", + "Correlation": -0.83 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2020-01-28", + "Correlation": 0.67 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2020-02-24", + "Correlation": -0.78 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2020-03-23", + "Correlation": -0.55 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2020-04-19", + "Correlation": -0.55 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2020-05-16", + "Correlation": 0.33 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2020-06-13", + "Correlation": -0.71 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2020-07-10", + "Correlation": 0.77 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2020-08-07", + "Correlation": 1 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2020-09-03", + "Correlation": 0.65 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2020-09-30", + "Correlation": -0.41 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2020-10-28", + "Correlation": 0.62 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2020-11-24", + "Correlation": 0.65 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2020-12-21", + "Correlation": -0.11 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2021-01-18", + "Correlation": 0.38 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2021-02-14", + "Correlation": 0.28 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2021-03-14", + "Correlation": 0.33 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2021-04-10", + "Correlation": 0.32 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2021-05-07", + "Correlation": -0.51 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2021-06-04", + "Correlation": 0.16 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2021-07-01", + "Correlation": -0.8 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2021-07-28", + "Correlation": -0.04 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2021-08-25", + "Correlation": 0.55 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2021-09-21", + "Correlation": 0.55 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2021-10-19", + "Correlation": -0.63 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2021-11-15", + "Correlation": -0.38 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2021-12-12", + "Correlation": -0.92 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2022-01-09", + "Correlation": 0.92 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2022-02-05", + "Correlation": -0.88 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2022-03-04", + "Correlation": 0.79 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2022-04-01", + "Correlation": -0.43 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2022-04-28", + "Correlation": 0.88 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2022-05-26", + "Correlation": 0.74 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2022-06-22", + "Correlation": -0.06 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2022-07-19", + "Correlation": 0.4 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2022-08-16", + "Correlation": 0.47 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2022-09-12", + "Correlation": -0.83 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2022-10-09", + "Correlation": 0.85 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2022-11-06", + "Correlation": -0.28 + }, + { + "StartDate": "2019-04-02", + "EndDate": "2022-12-03", + "Correlation": 0.39 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2020-01-01", + "Correlation": -0.75 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2020-01-28", + "Correlation": 0.66 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2020-02-24", + "Correlation": 0.24 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2020-03-23", + "Correlation": -0.85 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2020-04-19", + "Correlation": 0.35 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2020-05-16", + "Correlation": -0.2 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2020-06-13", + "Correlation": 0.16 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2020-07-10", + "Correlation": -0.82 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2020-08-07", + "Correlation": -0.12 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2020-09-03", + "Correlation": 0.86 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2020-09-30", + "Correlation": -0.22 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2020-10-28", + "Correlation": -0.81 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2020-11-24", + "Correlation": 0.56 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2020-12-21", + "Correlation": 0.49 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2021-01-18", + "Correlation": 0.64 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2021-02-14", + "Correlation": 0.79 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2021-03-14", + "Correlation": 0.32 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2021-04-10", + "Correlation": 0.45 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2021-05-07", + "Correlation": 0.36 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2021-06-04", + "Correlation": 0 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2021-07-01", + "Correlation": -0.11 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2021-07-28", + "Correlation": 0.13 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2021-08-25", + "Correlation": 0.59 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2021-09-21", + "Correlation": 0.76 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2021-10-19", + "Correlation": 0.68 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2021-11-15", + "Correlation": 0.35 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2021-12-12", + "Correlation": 0.82 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2022-01-09", + "Correlation": 0.49 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2022-02-05", + "Correlation": -0.57 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2022-03-04", + "Correlation": -0.55 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2022-04-01", + "Correlation": -0.68 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2022-04-28", + "Correlation": -0.97 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2022-05-26", + "Correlation": 0.06 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2022-06-22", + "Correlation": -0.15 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2022-07-19", + "Correlation": -0.23 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2022-08-16", + "Correlation": 0.72 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2022-09-12", + "Correlation": -0.24 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2022-10-09", + "Correlation": -0.03 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2022-11-06", + "Correlation": 0.53 + }, + { + "StartDate": "2019-04-20", + "EndDate": "2022-12-03", + "Correlation": -1 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2020-01-01", + "Correlation": -0.58 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2020-01-28", + "Correlation": 0.52 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2020-02-24", + "Correlation": 0.89 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2020-03-23", + "Correlation": -0.82 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2020-04-19", + "Correlation": 0.74 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2020-05-16", + "Correlation": -0.39 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2020-06-13", + "Correlation": -0.54 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2020-07-10", + "Correlation": 0.56 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2020-08-07", + "Correlation": -0.72 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2020-09-03", + "Correlation": 0.19 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2020-09-30", + "Correlation": -0.53 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2020-10-28", + "Correlation": -0.93 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2020-11-24", + "Correlation": 0 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2020-12-21", + "Correlation": -0.07 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2021-01-18", + "Correlation": -0.44 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2021-02-14", + "Correlation": -0.11 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2021-03-14", + "Correlation": 0.18 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2021-04-10", + "Correlation": -0.71 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2021-05-07", + "Correlation": 0.77 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2021-06-04", + "Correlation": -0.8 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2021-07-01", + "Correlation": -0.7 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2021-07-28", + "Correlation": 0.87 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2021-08-25", + "Correlation": 0.91 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2021-09-21", + "Correlation": -0.84 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2021-10-19", + "Correlation": -0.76 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2021-11-15", + "Correlation": 0 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2021-12-12", + "Correlation": -0.73 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2022-01-09", + "Correlation": 0.9 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2022-02-05", + "Correlation": 0.06 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2022-03-04", + "Correlation": -0.16 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2022-04-01", + "Correlation": -0.22 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2022-04-28", + "Correlation": -0.01 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2022-05-26", + "Correlation": 0.31 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2022-06-22", + "Correlation": -0.77 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2022-07-19", + "Correlation": -0.57 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2022-08-16", + "Correlation": 0.4 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2022-09-12", + "Correlation": -0.3 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2022-10-09", + "Correlation": 0.19 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2022-11-06", + "Correlation": 0.08 + }, + { + "StartDate": "2019-05-08", + "EndDate": "2022-12-03", + "Correlation": 0.1 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2020-01-01", + "Correlation": 0 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2020-01-28", + "Correlation": -0.97 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2020-02-24", + "Correlation": 0.87 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2020-03-23", + "Correlation": 0.01 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2020-04-19", + "Correlation": 0.45 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2020-05-16", + "Correlation": 0.03 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2020-06-13", + "Correlation": -0.81 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2020-07-10", + "Correlation": -0.25 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2020-08-07", + "Correlation": -0.98 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2020-09-03", + "Correlation": -0.92 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2020-09-30", + "Correlation": 0.58 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2020-10-28", + "Correlation": -0.67 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2020-11-24", + "Correlation": -0.29 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2020-12-21", + "Correlation": 0.4 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2021-01-18", + "Correlation": 0.05 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2021-02-14", + "Correlation": -0.57 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2021-03-14", + "Correlation": -0.77 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2021-04-10", + "Correlation": 0.17 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2021-05-07", + "Correlation": -0.33 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2021-06-04", + "Correlation": -0.28 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2021-07-01", + "Correlation": -0.76 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2021-07-28", + "Correlation": -0.25 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2021-08-25", + "Correlation": -0.67 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2021-09-21", + "Correlation": 0.91 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2021-10-19", + "Correlation": -0.11 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2021-11-15", + "Correlation": -0.38 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2021-12-12", + "Correlation": 0.56 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2022-01-09", + "Correlation": -0.71 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2022-02-05", + "Correlation": 0.61 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2022-03-04", + "Correlation": -0.33 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2022-04-01", + "Correlation": 0.58 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2022-04-28", + "Correlation": -0.61 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2022-05-26", + "Correlation": 0.2 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2022-06-22", + "Correlation": 0.23 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2022-07-19", + "Correlation": -0.1 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2022-08-16", + "Correlation": -0.66 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2022-09-12", + "Correlation": 0.27 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2022-10-09", + "Correlation": -0.92 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2022-11-06", + "Correlation": -0.33 + }, + { + "StartDate": "2019-05-27", + "EndDate": "2022-12-03", + "Correlation": -0.23 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2020-01-01", + "Correlation": 0.01 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2020-01-28", + "Correlation": -0.28 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2020-02-24", + "Correlation": -0.45 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2020-03-23", + "Correlation": 0.53 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2020-04-19", + "Correlation": 0.85 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2020-05-16", + "Correlation": 0.97 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2020-06-13", + "Correlation": -0.16 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2020-07-10", + "Correlation": 0.16 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2020-08-07", + "Correlation": -0.93 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2020-09-03", + "Correlation": -0.17 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2020-09-30", + "Correlation": -0.58 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2020-10-28", + "Correlation": -0.79 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2020-11-24", + "Correlation": -0.48 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2020-12-21", + "Correlation": 0.28 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2021-01-18", + "Correlation": -0.51 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2021-02-14", + "Correlation": 0.66 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2021-03-14", + "Correlation": 0.98 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2021-04-10", + "Correlation": 0.46 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2021-05-07", + "Correlation": -0.52 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2021-06-04", + "Correlation": 0.71 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2021-07-01", + "Correlation": 0.13 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2021-07-28", + "Correlation": 0.7 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2021-08-25", + "Correlation": 0.91 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2021-09-21", + "Correlation": -0.78 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2021-10-19", + "Correlation": 0.85 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2021-11-15", + "Correlation": 0.1 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2021-12-12", + "Correlation": 0.49 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2022-01-09", + "Correlation": 0.33 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2022-02-05", + "Correlation": 0.49 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2022-03-04", + "Correlation": 0.97 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2022-04-01", + "Correlation": -0.14 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2022-04-28", + "Correlation": -0.34 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2022-05-26", + "Correlation": -0.65 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2022-06-22", + "Correlation": -0.33 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2022-07-19", + "Correlation": -0.14 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2022-08-16", + "Correlation": -0.95 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2022-09-12", + "Correlation": -0.87 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2022-10-09", + "Correlation": 0.67 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2022-11-06", + "Correlation": 0.01 + }, + { + "StartDate": "2019-06-14", + "EndDate": "2022-12-03", + "Correlation": 0.04 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2020-01-01", + "Correlation": 0.01 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2020-01-28", + "Correlation": 0.75 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2020-02-24", + "Correlation": 0.6 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2020-03-23", + "Correlation": 0.99 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2020-04-19", + "Correlation": 0.28 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2020-05-16", + "Correlation": 0.78 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2020-06-13", + "Correlation": 0.84 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2020-07-10", + "Correlation": 0.78 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2020-08-07", + "Correlation": -0.09 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2020-09-03", + "Correlation": -0.32 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2020-09-30", + "Correlation": -0.74 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2020-10-28", + "Correlation": -0.05 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2020-11-24", + "Correlation": -0.59 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2020-12-21", + "Correlation": 0.81 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2021-01-18", + "Correlation": 0.97 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2021-02-14", + "Correlation": -0.53 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2021-03-14", + "Correlation": -0.15 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2021-04-10", + "Correlation": -0.04 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2021-05-07", + "Correlation": 0.61 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2021-06-04", + "Correlation": -0.52 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2021-07-01", + "Correlation": 0.04 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2021-07-28", + "Correlation": -0.77 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2021-08-25", + "Correlation": 0.75 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2021-09-21", + "Correlation": 0.79 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2021-10-19", + "Correlation": 0.81 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2021-11-15", + "Correlation": -0.18 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2021-12-12", + "Correlation": -0.04 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2022-01-09", + "Correlation": 0.02 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2022-02-05", + "Correlation": 0.92 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2022-03-04", + "Correlation": -0.92 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2022-04-01", + "Correlation": 0.03 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2022-04-28", + "Correlation": 0.7 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2022-05-26", + "Correlation": 0.53 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2022-06-22", + "Correlation": 0.87 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2022-07-19", + "Correlation": -0.24 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2022-08-16", + "Correlation": 0.2 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2022-09-12", + "Correlation": -0.15 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2022-10-09", + "Correlation": 0.01 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2022-11-06", + "Correlation": 0.01 + }, + { + "StartDate": "2019-07-02", + "EndDate": "2022-12-03", + "Correlation": 0.67 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2020-01-01", + "Correlation": -0.87 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2020-01-28", + "Correlation": 0.87 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2020-02-24", + "Correlation": -0.92 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2020-03-23", + "Correlation": -0.19 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2020-04-19", + "Correlation": -0.55 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2020-05-16", + "Correlation": -0.58 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2020-06-13", + "Correlation": 0.28 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2020-07-10", + "Correlation": -0.9 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2020-08-07", + "Correlation": -0.01 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2020-09-03", + "Correlation": 0.55 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2020-09-30", + "Correlation": -0.22 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2020-10-28", + "Correlation": 0.92 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2020-11-24", + "Correlation": 0.67 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2020-12-21", + "Correlation": -0.84 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2021-01-18", + "Correlation": -0.75 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2021-02-14", + "Correlation": 0.32 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2021-03-14", + "Correlation": 0.46 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2021-04-10", + "Correlation": 0.78 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2021-05-07", + "Correlation": 0.88 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2021-06-04", + "Correlation": 0.02 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2021-07-01", + "Correlation": 0.53 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2021-07-28", + "Correlation": -0.07 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2021-08-25", + "Correlation": 0.39 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2021-09-21", + "Correlation": -0.3 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2021-10-19", + "Correlation": -0.87 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2021-11-15", + "Correlation": 0.03 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2021-12-12", + "Correlation": 0.3 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2022-01-09", + "Correlation": 0.94 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2022-02-05", + "Correlation": 0.51 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2022-03-04", + "Correlation": -0.06 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2022-04-01", + "Correlation": 0.94 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2022-04-28", + "Correlation": -0.85 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2022-05-26", + "Correlation": 0.94 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2022-06-22", + "Correlation": 0.45 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2022-07-19", + "Correlation": 0.62 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2022-08-16", + "Correlation": -0.61 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2022-09-12", + "Correlation": 0.49 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2022-10-09", + "Correlation": -0.81 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2022-11-06", + "Correlation": -0.5 + }, + { + "StartDate": "2019-07-20", + "EndDate": "2022-12-03", + "Correlation": 0.08 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2020-01-01", + "Correlation": 0.33 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2020-01-28", + "Correlation": -0.15 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2020-02-24", + "Correlation": 0.19 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2020-03-23", + "Correlation": 0.13 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2020-04-19", + "Correlation": 0.54 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2020-05-16", + "Correlation": 0.66 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2020-06-13", + "Correlation": -0.54 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2020-07-10", + "Correlation": 0.8 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2020-08-07", + "Correlation": 0.65 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2020-09-03", + "Correlation": 0.88 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2020-09-30", + "Correlation": 0.07 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2020-10-28", + "Correlation": -0.63 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2020-11-24", + "Correlation": -0.23 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2020-12-21", + "Correlation": -0.32 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2021-01-18", + "Correlation": 0.27 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2021-02-14", + "Correlation": 0.28 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2021-03-14", + "Correlation": -0.56 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2021-04-10", + "Correlation": 0.95 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2021-05-07", + "Correlation": -0.67 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2021-06-04", + "Correlation": -0.22 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2021-07-01", + "Correlation": 0.85 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2021-07-28", + "Correlation": -0.67 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2021-08-25", + "Correlation": -0.87 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2021-09-21", + "Correlation": -0.72 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2021-10-19", + "Correlation": -0.26 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2021-11-15", + "Correlation": 0.75 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2021-12-12", + "Correlation": 0.4 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2022-01-09", + "Correlation": -0.53 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2022-02-05", + "Correlation": 0.36 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2022-03-04", + "Correlation": 0.76 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2022-04-01", + "Correlation": 0.65 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2022-04-28", + "Correlation": 0.66 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2022-05-26", + "Correlation": 0.55 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2022-06-22", + "Correlation": -0.69 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2022-07-19", + "Correlation": 0.98 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2022-08-16", + "Correlation": 0.08 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2022-09-12", + "Correlation": 0.56 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2022-10-09", + "Correlation": -0.33 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2022-11-06", + "Correlation": -0.44 + }, + { + "StartDate": "2019-08-08", + "EndDate": "2022-12-03", + "Correlation": -0.48 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2020-01-01", + "Correlation": -0.28 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2020-01-28", + "Correlation": 0.74 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2020-02-24", + "Correlation": -0.8 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2020-03-23", + "Correlation": -0.02 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2020-04-19", + "Correlation": 0.72 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2020-05-16", + "Correlation": -0.78 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2020-06-13", + "Correlation": 0.01 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2020-07-10", + "Correlation": 0.3 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2020-08-07", + "Correlation": 0.47 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2020-09-03", + "Correlation": -0.36 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2020-09-30", + "Correlation": 0.34 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2020-10-28", + "Correlation": -0.9 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2020-11-24", + "Correlation": 0.18 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2020-12-21", + "Correlation": -0.89 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2021-01-18", + "Correlation": -0.21 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2021-02-14", + "Correlation": 0.14 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2021-03-14", + "Correlation": -0.76 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2021-04-10", + "Correlation": -0.98 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2021-05-07", + "Correlation": 0.62 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2021-06-04", + "Correlation": -0.49 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2021-07-01", + "Correlation": -0.95 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2021-07-28", + "Correlation": 0.2 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2021-08-25", + "Correlation": -0.86 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2021-09-21", + "Correlation": 0.25 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2021-10-19", + "Correlation": 0.19 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2021-11-15", + "Correlation": 0.78 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2021-12-12", + "Correlation": 0.13 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2022-01-09", + "Correlation": 0.85 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2022-02-05", + "Correlation": -0.97 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2022-03-04", + "Correlation": -0.16 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2022-04-01", + "Correlation": -0.3 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2022-04-28", + "Correlation": 0.56 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2022-05-26", + "Correlation": 0.28 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2022-06-22", + "Correlation": -0.85 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2022-07-19", + "Correlation": -0.1 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2022-08-16", + "Correlation": -0.28 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2022-09-12", + "Correlation": -0.99 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2022-10-09", + "Correlation": 0.01 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2022-11-06", + "Correlation": 0.93 + }, + { + "StartDate": "2019-08-26", + "EndDate": "2022-12-03", + "Correlation": 0 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2020-01-01", + "Correlation": -0.38 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2020-01-28", + "Correlation": 0.99 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2020-02-24", + "Correlation": -0.38 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2020-03-23", + "Correlation": 0.08 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2020-04-19", + "Correlation": 0.97 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2020-05-16", + "Correlation": 0.23 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2020-06-13", + "Correlation": -0.6 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2020-07-10", + "Correlation": 0.59 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2020-08-07", + "Correlation": 0.22 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2020-09-03", + "Correlation": -0.99 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2020-09-30", + "Correlation": 0.85 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2020-10-28", + "Correlation": 0.91 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2020-11-24", + "Correlation": 0.96 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2020-12-21", + "Correlation": -0.25 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2021-01-18", + "Correlation": 0.79 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2021-02-14", + "Correlation": -0.05 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2021-03-14", + "Correlation": 0.65 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2021-04-10", + "Correlation": -0.96 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2021-05-07", + "Correlation": 0.43 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2021-06-04", + "Correlation": -0.55 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2021-07-01", + "Correlation": -0.56 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2021-07-28", + "Correlation": -0.08 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2021-08-25", + "Correlation": -0.34 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2021-09-21", + "Correlation": -0.53 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2021-10-19", + "Correlation": -0.12 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2021-11-15", + "Correlation": -0.12 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2021-12-12", + "Correlation": -0.6 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2022-01-09", + "Correlation": 0.92 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2022-02-05", + "Correlation": -0.27 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2022-03-04", + "Correlation": 0.91 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2022-04-01", + "Correlation": -0.34 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2022-04-28", + "Correlation": 0.61 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2022-05-26", + "Correlation": 0.78 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2022-06-22", + "Correlation": 0.13 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2022-07-19", + "Correlation": 0.75 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2022-08-16", + "Correlation": 0.56 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2022-09-12", + "Correlation": -0.32 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2022-10-09", + "Correlation": 0.73 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2022-11-06", + "Correlation": -0.59 + }, + { + "StartDate": "2019-09-13", + "EndDate": "2022-12-03", + "Correlation": 0.71 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2020-01-01", + "Correlation": -0.15 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2020-01-28", + "Correlation": -0.63 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2020-02-24", + "Correlation": -0.07 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2020-03-23", + "Correlation": 0.44 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2020-04-19", + "Correlation": -0.53 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2020-05-16", + "Correlation": -0.72 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2020-06-13", + "Correlation": 0.03 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2020-07-10", + "Correlation": -0.31 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2020-08-07", + "Correlation": -0.45 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2020-09-03", + "Correlation": 0.73 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2020-09-30", + "Correlation": 0.9 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2020-10-28", + "Correlation": 0.2 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2020-11-24", + "Correlation": -0.92 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2020-12-21", + "Correlation": 0.06 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2021-01-18", + "Correlation": -0.59 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2021-02-14", + "Correlation": 0.52 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2021-03-14", + "Correlation": 0.51 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2021-04-10", + "Correlation": -0.79 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2021-05-07", + "Correlation": 0.18 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2021-06-04", + "Correlation": -0.56 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2021-07-01", + "Correlation": -0.71 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2021-07-28", + "Correlation": -0.8 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2021-08-25", + "Correlation": 0.01 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2021-09-21", + "Correlation": -0.92 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2021-10-19", + "Correlation": 0.07 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2021-11-15", + "Correlation": -0.16 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2021-12-12", + "Correlation": 0.62 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2022-01-09", + "Correlation": 0.77 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2022-02-05", + "Correlation": -0.41 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2022-03-04", + "Correlation": 0.49 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2022-04-01", + "Correlation": 0.77 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2022-04-28", + "Correlation": 0.44 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2022-05-26", + "Correlation": 0.62 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2022-06-22", + "Correlation": 0.1 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2022-07-19", + "Correlation": -0.79 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2022-08-16", + "Correlation": -0.63 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2022-09-12", + "Correlation": 0.07 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2022-10-09", + "Correlation": -0.35 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2022-11-06", + "Correlation": -0.12 + }, + { + "StartDate": "2019-10-01", + "EndDate": "2022-12-03", + "Correlation": 0.25 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2020-01-01", + "Correlation": -0.18 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2020-01-28", + "Correlation": -0.47 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2020-02-24", + "Correlation": -0.39 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2020-03-23", + "Correlation": 0.04 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2020-04-19", + "Correlation": 0.85 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2020-05-16", + "Correlation": 0.3 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2020-06-13", + "Correlation": 0.97 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2020-07-10", + "Correlation": 0.53 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2020-08-07", + "Correlation": 0.48 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2020-09-03", + "Correlation": 0.97 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2020-09-30", + "Correlation": 0.27 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2020-10-28", + "Correlation": 0.85 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2020-11-24", + "Correlation": -0.36 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2020-12-21", + "Correlation": 0.01 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2021-01-18", + "Correlation": 0.68 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2021-02-14", + "Correlation": -0.81 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2021-03-14", + "Correlation": 0.9 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2021-04-10", + "Correlation": -0.27 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2021-05-07", + "Correlation": -0.1 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2021-06-04", + "Correlation": 0.32 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2021-07-01", + "Correlation": 0.5 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2021-07-28", + "Correlation": 0.25 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2021-08-25", + "Correlation": -0.5 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2021-09-21", + "Correlation": 0.11 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2021-10-19", + "Correlation": -0.03 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2021-11-15", + "Correlation": 0.71 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2021-12-12", + "Correlation": 0.02 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2022-01-09", + "Correlation": -0.01 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2022-02-05", + "Correlation": 0.94 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2022-03-04", + "Correlation": -0.6 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2022-04-01", + "Correlation": -0.17 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2022-04-28", + "Correlation": -0.59 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2022-05-26", + "Correlation": -0.63 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2022-06-22", + "Correlation": -0.93 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2022-07-19", + "Correlation": 0.13 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2022-08-16", + "Correlation": 0.27 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2022-09-12", + "Correlation": -0.22 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2022-10-09", + "Correlation": 0.88 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2022-11-06", + "Correlation": 0.42 + }, + { + "StartDate": "2019-10-20", + "EndDate": "2022-12-03", + "Correlation": 0.89 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2020-01-01", + "Correlation": 0.89 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2020-01-28", + "Correlation": -0.03 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2020-02-24", + "Correlation": -0.35 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2020-03-23", + "Correlation": -1 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2020-04-19", + "Correlation": -0.59 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2020-05-16", + "Correlation": -0.32 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2020-06-13", + "Correlation": 0.37 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2020-07-10", + "Correlation": 0.94 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2020-08-07", + "Correlation": -0.88 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2020-09-03", + "Correlation": 0.07 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2020-09-30", + "Correlation": -0.78 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2020-10-28", + "Correlation": 0.62 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2020-11-24", + "Correlation": -0.55 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2020-12-21", + "Correlation": 0.07 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2021-01-18", + "Correlation": -0.4 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2021-02-14", + "Correlation": -0.26 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2021-03-14", + "Correlation": -0.95 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2021-04-10", + "Correlation": 0.05 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2021-05-07", + "Correlation": 0.84 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2021-06-04", + "Correlation": 0.72 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2021-07-01", + "Correlation": -0.44 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2021-07-28", + "Correlation": 0.19 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2021-08-25", + "Correlation": -0.07 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2021-09-21", + "Correlation": 0.57 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2021-10-19", + "Correlation": -0.4 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2021-11-15", + "Correlation": -0.14 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2021-12-12", + "Correlation": -0.1 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2022-01-09", + "Correlation": -0.07 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2022-02-05", + "Correlation": -0.06 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2022-03-04", + "Correlation": -0.02 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2022-04-01", + "Correlation": 0.39 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2022-04-28", + "Correlation": -0.22 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2022-05-26", + "Correlation": 0.69 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2022-06-22", + "Correlation": 0.12 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2022-07-19", + "Correlation": -0.73 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2022-08-16", + "Correlation": 0.92 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2022-09-12", + "Correlation": -0.68 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2022-10-09", + "Correlation": 0.25 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2022-11-06", + "Correlation": 0.31 + }, + { + "StartDate": "2019-11-07", + "EndDate": "2022-12-03", + "Correlation": 0.29 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2020-01-01", + "Correlation": 0.5 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2020-01-28", + "Correlation": -0.43 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2020-02-24", + "Correlation": 0.72 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2020-03-23", + "Correlation": -0.74 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2020-04-19", + "Correlation": -0.92 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2020-05-16", + "Correlation": -0.83 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2020-06-13", + "Correlation": 0.62 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2020-07-10", + "Correlation": 0.99 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2020-08-07", + "Correlation": -0.84 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2020-09-03", + "Correlation": -0.79 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2020-09-30", + "Correlation": 0.79 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2020-10-28", + "Correlation": 0.3 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2020-11-24", + "Correlation": -0.31 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2020-12-21", + "Correlation": -0.45 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2021-01-18", + "Correlation": -0.81 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2021-02-14", + "Correlation": 0.03 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2021-03-14", + "Correlation": 0.19 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2021-04-10", + "Correlation": -0.49 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2021-05-07", + "Correlation": 0.27 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2021-06-04", + "Correlation": -0.49 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2021-07-01", + "Correlation": 1 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2021-07-28", + "Correlation": 0.03 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2021-08-25", + "Correlation": 0.13 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2021-09-21", + "Correlation": 0.41 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2021-10-19", + "Correlation": 0.27 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2021-11-15", + "Correlation": 0.49 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2021-12-12", + "Correlation": -0.25 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2022-01-09", + "Correlation": 0.57 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2022-02-05", + "Correlation": -0.08 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2022-03-04", + "Correlation": 0.02 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2022-04-01", + "Correlation": -0.87 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2022-04-28", + "Correlation": 0.75 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2022-05-26", + "Correlation": 0.18 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2022-06-22", + "Correlation": -0.82 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2022-07-19", + "Correlation": -0.76 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2022-08-16", + "Correlation": -0.35 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2022-09-12", + "Correlation": -0.62 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2022-10-09", + "Correlation": -0.66 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2022-11-06", + "Correlation": 0.01 + }, + { + "StartDate": "2019-11-25", + "EndDate": "2022-12-03", + "Correlation": -0.24 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2020-01-01", + "Correlation": -0.89 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2020-01-28", + "Correlation": 0.22 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2020-02-24", + "Correlation": -0.64 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2020-03-23", + "Correlation": 0.61 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2020-04-19", + "Correlation": -0.71 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2020-05-16", + "Correlation": -0.46 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2020-06-13", + "Correlation": -0.01 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2020-07-10", + "Correlation": 0.12 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2020-08-07", + "Correlation": 0.49 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2020-09-03", + "Correlation": -0.75 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2020-09-30", + "Correlation": -0.35 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2020-10-28", + "Correlation": 0.48 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2020-11-24", + "Correlation": -0.5 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2020-12-21", + "Correlation": -0.13 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2021-01-18", + "Correlation": -0.51 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2021-02-14", + "Correlation": 0.18 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2021-03-14", + "Correlation": -0.23 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2021-04-10", + "Correlation": -0.02 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2021-05-07", + "Correlation": -0.54 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2021-06-04", + "Correlation": 0.51 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2021-07-01", + "Correlation": 0.57 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2021-07-28", + "Correlation": 0.42 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2021-08-25", + "Correlation": 0.31 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2021-09-21", + "Correlation": -0.14 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2021-10-19", + "Correlation": -0.68 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2021-11-15", + "Correlation": -0.77 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2021-12-12", + "Correlation": -0.81 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2022-01-09", + "Correlation": 0.36 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2022-02-05", + "Correlation": 0.27 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2022-03-04", + "Correlation": -0.36 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2022-04-01", + "Correlation": 0.45 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2022-04-28", + "Correlation": 0.03 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2022-05-26", + "Correlation": -0.57 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2022-06-22", + "Correlation": -0.17 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2022-07-19", + "Correlation": 0.24 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2022-08-16", + "Correlation": 0.18 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2022-09-12", + "Correlation": -0.01 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2022-10-09", + "Correlation": -0.97 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2022-11-06", + "Correlation": -0.1 + }, + { + "StartDate": "2019-12-13", + "EndDate": "2022-12-03", + "Correlation": -0.45 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2020-01-01", + "Correlation": -0.99 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2020-01-28", + "Correlation": 0.94 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2020-02-24", + "Correlation": 0.16 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2020-03-23", + "Correlation": -0.03 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2020-04-19", + "Correlation": -0.46 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2020-05-16", + "Correlation": 0.02 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2020-06-13", + "Correlation": -0.2 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2020-07-10", + "Correlation": -0.9 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2020-08-07", + "Correlation": 0.85 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2020-09-03", + "Correlation": 0.54 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2020-09-30", + "Correlation": 0.02 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2020-10-28", + "Correlation": -0.17 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2020-11-24", + "Correlation": -0.68 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2020-12-21", + "Correlation": 0.75 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2021-01-18", + "Correlation": 0.58 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2021-02-14", + "Correlation": -0.12 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2021-03-14", + "Correlation": -0.87 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2021-04-10", + "Correlation": 0.97 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2021-05-07", + "Correlation": 0.05 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2021-06-04", + "Correlation": -0.1 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2021-07-01", + "Correlation": -0.94 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2021-07-28", + "Correlation": 0.99 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2021-08-25", + "Correlation": -0.91 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2021-09-21", + "Correlation": 0.71 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2021-10-19", + "Correlation": -0.03 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2021-11-15", + "Correlation": 0.45 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2021-12-12", + "Correlation": 0.27 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2022-01-09", + "Correlation": 0.45 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2022-02-05", + "Correlation": 0.44 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2022-03-04", + "Correlation": 0.5 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2022-04-01", + "Correlation": 0.45 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2022-04-28", + "Correlation": -0.38 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2022-05-26", + "Correlation": 0.02 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2022-06-22", + "Correlation": 0.87 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2022-07-19", + "Correlation": 0.25 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2022-08-16", + "Correlation": 0.15 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2022-09-12", + "Correlation": -0.82 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2022-10-09", + "Correlation": 0.82 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2022-11-06", + "Correlation": -0.02 + }, + { + "StartDate": "2020-01-01", + "EndDate": "2022-12-03", + "Correlation": -0.31 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2020-01-01", + "Correlation": 0.55 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2020-01-28", + "Correlation": -0.58 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2020-02-24", + "Correlation": -0.71 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2020-03-23", + "Correlation": 0.29 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2020-04-19", + "Correlation": 0.55 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2020-05-16", + "Correlation": -0.97 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2020-06-13", + "Correlation": -0.24 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2020-07-10", + "Correlation": -0.84 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2020-08-07", + "Correlation": -0.82 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2020-09-03", + "Correlation": 0.98 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2020-09-30", + "Correlation": 0.64 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2020-10-28", + "Correlation": -0.35 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2020-11-24", + "Correlation": -0.2 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2020-12-21", + "Correlation": 0.97 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2021-01-18", + "Correlation": -0.96 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2021-02-14", + "Correlation": 0.73 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2021-03-14", + "Correlation": 0.82 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2021-04-10", + "Correlation": -0.95 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2021-05-07", + "Correlation": 0.35 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2021-06-04", + "Correlation": 0.47 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2021-07-01", + "Correlation": -0.27 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2021-07-28", + "Correlation": 0.75 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2021-08-25", + "Correlation": 0.53 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2021-09-21", + "Correlation": -0.22 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2021-10-19", + "Correlation": -0.28 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2021-11-15", + "Correlation": -0.38 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2021-12-12", + "Correlation": -0.76 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2022-01-09", + "Correlation": -0.49 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2022-02-05", + "Correlation": -0.63 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2022-03-04", + "Correlation": -0.83 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2022-04-01", + "Correlation": 0.24 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2022-04-28", + "Correlation": 0.23 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2022-05-26", + "Correlation": -0.16 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2022-06-22", + "Correlation": 0.46 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2022-07-19", + "Correlation": -0.48 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2022-08-16", + "Correlation": 0.39 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2022-09-12", + "Correlation": -0.64 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2022-10-09", + "Correlation": 0.82 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2022-11-06", + "Correlation": 0.26 + }, + { + "StartDate": "2020-01-19", + "EndDate": "2022-12-03", + "Correlation": 0.53 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2020-01-01", + "Correlation": -0.04 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2020-01-28", + "Correlation": 0.41 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2020-02-24", + "Correlation": 0.06 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2020-03-23", + "Correlation": 0.47 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2020-04-19", + "Correlation": -0.09 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2020-05-16", + "Correlation": -0.99 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2020-06-13", + "Correlation": 0.71 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2020-07-10", + "Correlation": 0.24 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2020-08-07", + "Correlation": 0.37 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2020-09-03", + "Correlation": -0.98 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2020-09-30", + "Correlation": 0.25 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2020-10-28", + "Correlation": -0.1 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2020-11-24", + "Correlation": -0.87 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2020-12-21", + "Correlation": -0.45 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2021-01-18", + "Correlation": -0.13 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2021-02-14", + "Correlation": -0.64 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2021-03-14", + "Correlation": 0.5 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2021-04-10", + "Correlation": 0.17 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2021-05-07", + "Correlation": -0.76 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2021-06-04", + "Correlation": 0.64 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2021-07-01", + "Correlation": 0.7 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2021-07-28", + "Correlation": -0.43 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2021-08-25", + "Correlation": -0.49 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2021-09-21", + "Correlation": 0.44 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2021-10-19", + "Correlation": 0.39 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2021-11-15", + "Correlation": 0.4 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2021-12-12", + "Correlation": -0.36 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2022-01-09", + "Correlation": -0.19 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2022-02-05", + "Correlation": 0.72 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2022-03-04", + "Correlation": -0.7 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2022-04-01", + "Correlation": 0.22 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2022-04-28", + "Correlation": -0.92 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2022-05-26", + "Correlation": -0.4 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2022-06-22", + "Correlation": 0.07 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2022-07-19", + "Correlation": -0.9 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2022-08-16", + "Correlation": -0.72 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2022-09-12", + "Correlation": 0.05 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2022-10-09", + "Correlation": 0.59 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2022-11-06", + "Correlation": -0.3 + }, + { + "StartDate": "2020-02-06", + "EndDate": "2022-12-03", + "Correlation": 0.46 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2020-01-01", + "Correlation": 0.23 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2020-01-28", + "Correlation": -0.61 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2020-02-24", + "Correlation": 0.22 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2020-03-23", + "Correlation": 0.51 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2020-04-19", + "Correlation": -0.95 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2020-05-16", + "Correlation": -0.11 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2020-06-13", + "Correlation": -0.02 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2020-07-10", + "Correlation": -0.62 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2020-08-07", + "Correlation": -0.25 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2020-09-03", + "Correlation": -0.59 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2020-09-30", + "Correlation": -0.04 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2020-10-28", + "Correlation": 0.49 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2020-11-24", + "Correlation": -0.15 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2020-12-21", + "Correlation": 0.44 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2021-01-18", + "Correlation": -0.9 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2021-02-14", + "Correlation": -0.62 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2021-03-14", + "Correlation": 0.42 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2021-04-10", + "Correlation": 0.03 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2021-05-07", + "Correlation": 0.71 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2021-06-04", + "Correlation": -0.09 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2021-07-01", + "Correlation": -0.79 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2021-07-28", + "Correlation": 0.42 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2021-08-25", + "Correlation": -0.45 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2021-09-21", + "Correlation": 0.55 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2021-10-19", + "Correlation": 0.73 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2021-11-15", + "Correlation": 0.98 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2021-12-12", + "Correlation": 0.36 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2022-01-09", + "Correlation": 0.22 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2022-02-05", + "Correlation": 0.4 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2022-03-04", + "Correlation": -0.85 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2022-04-01", + "Correlation": -0.64 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2022-04-28", + "Correlation": 0.8 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2022-05-26", + "Correlation": 0.17 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2022-06-22", + "Correlation": -1 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2022-07-19", + "Correlation": -0.53 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2022-08-16", + "Correlation": 0.48 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2022-09-12", + "Correlation": 0.13 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2022-10-09", + "Correlation": 0.3 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2022-11-06", + "Correlation": 0.73 + }, + { + "StartDate": "2020-02-24", + "EndDate": "2022-12-03", + "Correlation": 0.58 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2020-01-01", + "Correlation": 0.52 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2020-01-28", + "Correlation": -0.56 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2020-02-24", + "Correlation": 0.91 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2020-03-23", + "Correlation": 0.98 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2020-04-19", + "Correlation": 0.13 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2020-05-16", + "Correlation": 0.05 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2020-06-13", + "Correlation": -0.03 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2020-07-10", + "Correlation": 0.58 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2020-08-07", + "Correlation": 0.77 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2020-09-03", + "Correlation": -0.24 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2020-09-30", + "Correlation": -0.34 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2020-10-28", + "Correlation": 0.88 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2020-11-24", + "Correlation": -0.57 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2020-12-21", + "Correlation": 0.01 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2021-01-18", + "Correlation": 0.92 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2021-02-14", + "Correlation": 0.94 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2021-03-14", + "Correlation": -0.2 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2021-04-10", + "Correlation": 0.18 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2021-05-07", + "Correlation": -0.07 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2021-06-04", + "Correlation": 0.29 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2021-07-01", + "Correlation": -0.38 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2021-07-28", + "Correlation": 0.1 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2021-08-25", + "Correlation": -0.01 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2021-09-21", + "Correlation": -0.6 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2021-10-19", + "Correlation": 0.76 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2021-11-15", + "Correlation": -0.94 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2021-12-12", + "Correlation": -0.98 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2022-01-09", + "Correlation": -0.96 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2022-02-05", + "Correlation": 0.21 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2022-03-04", + "Correlation": 0.25 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2022-04-01", + "Correlation": -0.41 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2022-04-28", + "Correlation": -0.19 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2022-05-26", + "Correlation": -0.52 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2022-06-22", + "Correlation": -0.7 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2022-07-19", + "Correlation": 0.62 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2022-08-16", + "Correlation": -0.36 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2022-09-12", + "Correlation": 0.48 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2022-10-09", + "Correlation": 0.59 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2022-11-06", + "Correlation": -0.56 + }, + { + "StartDate": "2020-03-14", + "EndDate": "2022-12-03", + "Correlation": 0.62 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2020-01-01", + "Correlation": 0.13 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2020-01-28", + "Correlation": -0.9 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2020-02-24", + "Correlation": -0.36 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2020-03-23", + "Correlation": 0.42 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2020-04-19", + "Correlation": -0.19 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2020-05-16", + "Correlation": -0.38 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2020-06-13", + "Correlation": 0.68 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2020-07-10", + "Correlation": 0.02 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2020-08-07", + "Correlation": 0.79 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2020-09-03", + "Correlation": -0.7 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2020-09-30", + "Correlation": 0.42 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2020-10-28", + "Correlation": 0.01 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2020-11-24", + "Correlation": -0.03 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2020-12-21", + "Correlation": -0.06 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2021-01-18", + "Correlation": -0.2 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2021-02-14", + "Correlation": -0.46 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2021-03-14", + "Correlation": -0.2 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2021-04-10", + "Correlation": 0.65 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2021-05-07", + "Correlation": -0.4 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2021-06-04", + "Correlation": -0.78 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2021-07-01", + "Correlation": -0.28 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2021-07-28", + "Correlation": -0.9 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2021-08-25", + "Correlation": -0.73 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2021-09-21", + "Correlation": 0.59 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2021-10-19", + "Correlation": -0.27 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2021-11-15", + "Correlation": 0.56 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2021-12-12", + "Correlation": 0.3 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2022-01-09", + "Correlation": -0.7 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2022-02-05", + "Correlation": -0.31 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2022-03-04", + "Correlation": -0.53 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2022-04-01", + "Correlation": -0.32 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2022-04-28", + "Correlation": 0.52 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2022-05-26", + "Correlation": 0.98 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2022-06-22", + "Correlation": -0.43 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2022-07-19", + "Correlation": -0.42 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2022-08-16", + "Correlation": -0.02 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2022-09-12", + "Correlation": 0.93 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2022-10-09", + "Correlation": 1 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2022-11-06", + "Correlation": -0.65 + }, + { + "StartDate": "2020-04-01", + "EndDate": "2022-12-03", + "Correlation": -0.34 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2020-01-01", + "Correlation": 0.79 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2020-01-28", + "Correlation": -0.38 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2020-02-24", + "Correlation": 0.97 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2020-03-23", + "Correlation": 0.56 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2020-04-19", + "Correlation": 0.13 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2020-05-16", + "Correlation": 0.92 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2020-06-13", + "Correlation": 0.97 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2020-07-10", + "Correlation": 0.13 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2020-08-07", + "Correlation": 0.92 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2020-09-03", + "Correlation": 0.38 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2020-09-30", + "Correlation": -0.76 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2020-10-28", + "Correlation": 0.02 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2020-11-24", + "Correlation": -0.71 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2020-12-21", + "Correlation": 0.18 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2021-01-18", + "Correlation": -0.23 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2021-02-14", + "Correlation": -0.79 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2021-03-14", + "Correlation": -0.06 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2021-04-10", + "Correlation": -0.78 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2021-05-07", + "Correlation": 0.92 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2021-06-04", + "Correlation": 0.31 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2021-07-01", + "Correlation": -0.26 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2021-07-28", + "Correlation": -0.24 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2021-08-25", + "Correlation": 0.86 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2021-09-21", + "Correlation": -0.92 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2021-10-19", + "Correlation": -0.61 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2021-11-15", + "Correlation": 0.57 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2021-12-12", + "Correlation": -0.25 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2022-01-09", + "Correlation": -0.33 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2022-02-05", + "Correlation": -0.73 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2022-03-04", + "Correlation": 0.78 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2022-04-01", + "Correlation": -0.39 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2022-04-28", + "Correlation": -0.21 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2022-05-26", + "Correlation": -0.75 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2022-06-22", + "Correlation": -0.04 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2022-07-19", + "Correlation": 0.66 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2022-08-16", + "Correlation": -0.94 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2022-09-12", + "Correlation": -0.29 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2022-10-09", + "Correlation": 0.4 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2022-11-06", + "Correlation": -0.28 + }, + { + "StartDate": "2020-04-19", + "EndDate": "2022-12-03", + "Correlation": 0.43 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2020-01-01", + "Correlation": -0.02 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2020-01-28", + "Correlation": -0.85 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2020-02-24", + "Correlation": -0.17 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2020-03-23", + "Correlation": 0.09 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2020-04-19", + "Correlation": -0.72 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2020-05-16", + "Correlation": 0.1 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2020-06-13", + "Correlation": 0.82 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2020-07-10", + "Correlation": 0.04 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2020-08-07", + "Correlation": -0.13 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2020-09-03", + "Correlation": 0.51 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2020-09-30", + "Correlation": 0.33 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2020-10-28", + "Correlation": 0.57 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2020-11-24", + "Correlation": -0.84 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2020-12-21", + "Correlation": -0.92 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2021-01-18", + "Correlation": 0.23 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2021-02-14", + "Correlation": -0.64 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2021-03-14", + "Correlation": -0.72 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2021-04-10", + "Correlation": 0.76 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2021-05-07", + "Correlation": 0.7 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2021-06-04", + "Correlation": -0.78 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2021-07-01", + "Correlation": -0.37 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2021-07-28", + "Correlation": -0.04 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2021-08-25", + "Correlation": 0.04 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2021-09-21", + "Correlation": 0.27 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2021-10-19", + "Correlation": 0.39 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2021-11-15", + "Correlation": 0.87 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2021-12-12", + "Correlation": 0.57 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2022-01-09", + "Correlation": 0.46 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2022-02-05", + "Correlation": 0.52 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2022-03-04", + "Correlation": -0.26 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2022-04-01", + "Correlation": -0.65 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2022-04-28", + "Correlation": -0.56 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2022-05-26", + "Correlation": -0.34 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2022-06-22", + "Correlation": 0.9 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2022-07-19", + "Correlation": -0.38 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2022-08-16", + "Correlation": 0.42 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2022-09-12", + "Correlation": -0.28 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2022-10-09", + "Correlation": 0.81 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2022-11-06", + "Correlation": -0.16 + }, + { + "StartDate": "2020-05-07", + "EndDate": "2022-12-03", + "Correlation": 0.31 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2020-01-01", + "Correlation": -0.07 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2020-01-28", + "Correlation": -0.59 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2020-02-24", + "Correlation": 0.39 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2020-03-23", + "Correlation": 0.44 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2020-04-19", + "Correlation": -0.89 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2020-05-16", + "Correlation": 0.84 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2020-06-13", + "Correlation": 0.24 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2020-07-10", + "Correlation": -0.95 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2020-08-07", + "Correlation": -0.61 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2020-09-03", + "Correlation": 0.97 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2020-09-30", + "Correlation": -0.14 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2020-10-28", + "Correlation": 0.34 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2020-11-24", + "Correlation": -0.01 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2020-12-21", + "Correlation": 0.22 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2021-01-18", + "Correlation": -0.86 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2021-02-14", + "Correlation": 0.49 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2021-03-14", + "Correlation": -0.28 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2021-04-10", + "Correlation": 0.23 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2021-05-07", + "Correlation": -0.57 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2021-06-04", + "Correlation": 0.01 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2021-07-01", + "Correlation": -0.05 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2021-07-28", + "Correlation": 0.34 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2021-08-25", + "Correlation": -0.79 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2021-09-21", + "Correlation": 0.07 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2021-10-19", + "Correlation": -0.87 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2021-11-15", + "Correlation": 0.54 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2021-12-12", + "Correlation": 0.03 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2022-01-09", + "Correlation": 0.35 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2022-02-05", + "Correlation": 0.08 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2022-03-04", + "Correlation": 0.58 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2022-04-01", + "Correlation": 0.47 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2022-04-28", + "Correlation": 0.16 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2022-05-26", + "Correlation": -0.83 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2022-06-22", + "Correlation": 0.27 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2022-07-19", + "Correlation": 0.1 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2022-08-16", + "Correlation": -0.27 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2022-09-12", + "Correlation": -0.85 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2022-10-09", + "Correlation": 0.15 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2022-11-06", + "Correlation": 0.45 + }, + { + "StartDate": "2020-05-26", + "EndDate": "2022-12-03", + "Correlation": 0.79 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2020-01-01", + "Correlation": -0.86 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2020-01-28", + "Correlation": -0.33 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2020-02-24", + "Correlation": -0.13 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2020-03-23", + "Correlation": 0.65 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2020-04-19", + "Correlation": 0.02 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2020-05-16", + "Correlation": 0.01 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2020-06-13", + "Correlation": -0.31 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2020-07-10", + "Correlation": -0.17 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2020-08-07", + "Correlation": 0.25 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2020-09-03", + "Correlation": -0.37 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2020-09-30", + "Correlation": 0.58 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2020-10-28", + "Correlation": 0 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2020-11-24", + "Correlation": 0.03 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2020-12-21", + "Correlation": 0.51 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2021-01-18", + "Correlation": 0.26 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2021-02-14", + "Correlation": 0.42 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2021-03-14", + "Correlation": 0.4 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2021-04-10", + "Correlation": -0.58 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2021-05-07", + "Correlation": -0.57 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2021-06-04", + "Correlation": -0.61 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2021-07-01", + "Correlation": -0.37 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2021-07-28", + "Correlation": -0.76 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2021-08-25", + "Correlation": -0.87 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2021-09-21", + "Correlation": 0.64 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2021-10-19", + "Correlation": 0.08 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2021-11-15", + "Correlation": 0.4 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2021-12-12", + "Correlation": -0.81 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2022-01-09", + "Correlation": -0.56 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2022-02-05", + "Correlation": -0.31 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2022-03-04", + "Correlation": -0.69 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2022-04-01", + "Correlation": -0.56 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2022-04-28", + "Correlation": -0.14 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2022-05-26", + "Correlation": -0.25 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2022-06-22", + "Correlation": -0.91 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2022-07-19", + "Correlation": 0.6 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2022-08-16", + "Correlation": 0.81 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2022-09-12", + "Correlation": 0.56 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2022-10-09", + "Correlation": -0.35 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2022-11-06", + "Correlation": -0.25 + }, + { + "StartDate": "2020-06-13", + "EndDate": "2022-12-03", + "Correlation": 0.66 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2020-01-01", + "Correlation": -0.97 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2020-01-28", + "Correlation": 0.76 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2020-02-24", + "Correlation": 0.22 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2020-03-23", + "Correlation": 0.32 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2020-04-19", + "Correlation": -0.39 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2020-05-16", + "Correlation": 0.72 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2020-06-13", + "Correlation": -0.72 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2020-07-10", + "Correlation": -0.16 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2020-08-07", + "Correlation": 0.63 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2020-09-03", + "Correlation": 0.68 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2020-09-30", + "Correlation": -0.74 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2020-10-28", + "Correlation": -0.1 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2020-11-24", + "Correlation": -0.34 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2020-12-21", + "Correlation": -0.5 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2021-01-18", + "Correlation": -0.4 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2021-02-14", + "Correlation": -0.41 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2021-03-14", + "Correlation": -0.58 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2021-04-10", + "Correlation": -0.65 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2021-05-07", + "Correlation": -0.05 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2021-06-04", + "Correlation": 0.08 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2021-07-01", + "Correlation": 0.35 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2021-07-28", + "Correlation": -0.56 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2021-08-25", + "Correlation": -0.27 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2021-09-21", + "Correlation": 0.21 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2021-10-19", + "Correlation": -0.17 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2021-11-15", + "Correlation": -0.04 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2021-12-12", + "Correlation": -0.86 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2022-01-09", + "Correlation": -0.45 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2022-02-05", + "Correlation": 0.97 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2022-03-04", + "Correlation": -0.93 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2022-04-01", + "Correlation": -0.06 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2022-04-28", + "Correlation": -0.28 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2022-05-26", + "Correlation": 0.66 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2022-06-22", + "Correlation": -0.88 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2022-07-19", + "Correlation": -0.91 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2022-08-16", + "Correlation": -0.77 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2022-09-12", + "Correlation": 0.77 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2022-10-09", + "Correlation": -0.2 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2022-11-06", + "Correlation": -0.38 + }, + { + "StartDate": "2020-07-01", + "EndDate": "2022-12-03", + "Correlation": 0.41 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2020-01-01", + "Correlation": 0.06 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2020-01-28", + "Correlation": -0.92 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2020-02-24", + "Correlation": 0.02 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2020-03-23", + "Correlation": -0.68 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2020-04-19", + "Correlation": -0.31 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2020-05-16", + "Correlation": -0.78 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2020-06-13", + "Correlation": -0.84 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2020-07-10", + "Correlation": 0.52 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2020-08-07", + "Correlation": 0.05 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2020-09-03", + "Correlation": 0.8 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2020-09-30", + "Correlation": 0.17 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2020-10-28", + "Correlation": 0.14 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2020-11-24", + "Correlation": -0.26 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2020-12-21", + "Correlation": 0.02 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2021-01-18", + "Correlation": -0.91 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2021-02-14", + "Correlation": 0.92 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2021-03-14", + "Correlation": 0.5 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2021-04-10", + "Correlation": 0.85 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2021-05-07", + "Correlation": -0.38 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2021-06-04", + "Correlation": -0.23 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2021-07-01", + "Correlation": 0.93 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2021-07-28", + "Correlation": 0.18 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2021-08-25", + "Correlation": 0.37 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2021-09-21", + "Correlation": -0.78 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2021-10-19", + "Correlation": -0.42 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2021-11-15", + "Correlation": -0.97 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2021-12-12", + "Correlation": 0.21 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2022-01-09", + "Correlation": -0.55 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2022-02-05", + "Correlation": -0.55 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2022-03-04", + "Correlation": -0.96 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2022-04-01", + "Correlation": -0.18 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2022-04-28", + "Correlation": 0.76 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2022-05-26", + "Correlation": -0.7 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2022-06-22", + "Correlation": -0.73 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2022-07-19", + "Correlation": 0.11 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2022-08-16", + "Correlation": 0.69 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2022-09-12", + "Correlation": -0.56 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2022-10-09", + "Correlation": 0.78 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2022-11-06", + "Correlation": 0.71 + }, + { + "StartDate": "2020-07-19", + "EndDate": "2022-12-03", + "Correlation": 0.34 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2020-01-01", + "Correlation": 0.2 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2020-01-28", + "Correlation": 0.16 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2020-02-24", + "Correlation": -0.09 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2020-03-23", + "Correlation": 0.63 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2020-04-19", + "Correlation": -0.96 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2020-05-16", + "Correlation": -0.78 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2020-06-13", + "Correlation": -0.04 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2020-07-10", + "Correlation": -0.42 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2020-08-07", + "Correlation": 0.88 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2020-09-03", + "Correlation": -0.13 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2020-09-30", + "Correlation": -0.34 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2020-10-28", + "Correlation": 0.3 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2020-11-24", + "Correlation": 0.76 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2020-12-21", + "Correlation": -0.04 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2021-01-18", + "Correlation": -0.62 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2021-02-14", + "Correlation": -0.84 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2021-03-14", + "Correlation": -0.14 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2021-04-10", + "Correlation": -0.84 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2021-05-07", + "Correlation": -0.04 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2021-06-04", + "Correlation": -0.55 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2021-07-01", + "Correlation": -0.7 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2021-07-28", + "Correlation": -0.38 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2021-08-25", + "Correlation": -0.04 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2021-09-21", + "Correlation": -0.92 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2021-10-19", + "Correlation": 0.02 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2021-11-15", + "Correlation": 0.81 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2021-12-12", + "Correlation": -0.93 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2022-01-09", + "Correlation": -0.26 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2022-02-05", + "Correlation": -0.13 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2022-03-04", + "Correlation": 0.94 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2022-04-01", + "Correlation": 0.58 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2022-04-28", + "Correlation": -0.83 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2022-05-26", + "Correlation": 0.53 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2022-06-22", + "Correlation": 0.09 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2022-07-19", + "Correlation": 0.66 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2022-08-16", + "Correlation": -0.47 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2022-09-12", + "Correlation": -0.17 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2022-10-09", + "Correlation": 0.55 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2022-11-06", + "Correlation": -0.4 + }, + { + "StartDate": "2020-08-07", + "EndDate": "2022-12-03", + "Correlation": 0.48 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2020-01-01", + "Correlation": 0.17 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2020-01-28", + "Correlation": -0.86 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2020-02-24", + "Correlation": 0.01 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2020-03-23", + "Correlation": 0.49 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2020-04-19", + "Correlation": 0.93 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2020-05-16", + "Correlation": 0.51 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2020-06-13", + "Correlation": 0.27 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2020-07-10", + "Correlation": 0.53 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2020-08-07", + "Correlation": 0.41 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2020-09-03", + "Correlation": -0.74 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2020-09-30", + "Correlation": 0.64 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2020-10-28", + "Correlation": 0.33 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2020-11-24", + "Correlation": 0.17 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2020-12-21", + "Correlation": 0.22 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2021-01-18", + "Correlation": 0.96 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2021-02-14", + "Correlation": 0.71 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2021-03-14", + "Correlation": 0.67 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2021-04-10", + "Correlation": 0.56 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2021-05-07", + "Correlation": -0.67 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2021-06-04", + "Correlation": 0.26 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2021-07-01", + "Correlation": -0.53 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2021-07-28", + "Correlation": -0.36 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2021-08-25", + "Correlation": -0.91 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2021-09-21", + "Correlation": 0.54 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2021-10-19", + "Correlation": -0.95 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2021-11-15", + "Correlation": 0.41 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2021-12-12", + "Correlation": 0.91 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2022-01-09", + "Correlation": 0.26 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2022-02-05", + "Correlation": 1 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2022-03-04", + "Correlation": -0.35 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2022-04-01", + "Correlation": -0.91 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2022-04-28", + "Correlation": -0.11 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2022-05-26", + "Correlation": -0.14 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2022-06-22", + "Correlation": 0.92 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2022-07-19", + "Correlation": 0.93 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2022-08-16", + "Correlation": 0.6 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2022-09-12", + "Correlation": -0.19 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2022-10-09", + "Correlation": -0.15 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2022-11-06", + "Correlation": 0.21 + }, + { + "StartDate": "2020-08-25", + "EndDate": "2022-12-03", + "Correlation": -0.04 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2020-01-01", + "Correlation": 0.51 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2020-01-28", + "Correlation": -0.89 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2020-02-24", + "Correlation": 0.03 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2020-03-23", + "Correlation": 0.61 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2020-04-19", + "Correlation": 0 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2020-05-16", + "Correlation": 0.94 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2020-06-13", + "Correlation": 0.94 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2020-07-10", + "Correlation": 0.01 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2020-08-07", + "Correlation": 0.74 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2020-09-03", + "Correlation": -0.15 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2020-09-30", + "Correlation": -0.12 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2020-10-28", + "Correlation": -0.83 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2020-11-24", + "Correlation": -0.53 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2020-12-21", + "Correlation": 0.65 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2021-01-18", + "Correlation": -1 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2021-02-14", + "Correlation": -0.32 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2021-03-14", + "Correlation": -0.17 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2021-04-10", + "Correlation": -0.17 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2021-05-07", + "Correlation": -0.1 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2021-06-04", + "Correlation": -0.8 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2021-07-01", + "Correlation": 0.41 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2021-07-28", + "Correlation": 0.91 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2021-08-25", + "Correlation": 0.16 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2021-09-21", + "Correlation": 0.12 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2021-10-19", + "Correlation": -0.82 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2021-11-15", + "Correlation": 0.65 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2021-12-12", + "Correlation": 0.41 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2022-01-09", + "Correlation": -0.03 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2022-02-05", + "Correlation": 0.9 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2022-03-04", + "Correlation": -0.23 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2022-04-01", + "Correlation": -0.94 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2022-04-28", + "Correlation": -0.44 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2022-05-26", + "Correlation": 0.17 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2022-06-22", + "Correlation": 0.86 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2022-07-19", + "Correlation": 0.74 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2022-08-16", + "Correlation": 0.93 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2022-09-12", + "Correlation": -0.32 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2022-10-09", + "Correlation": 0.88 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2022-11-06", + "Correlation": 0.75 + }, + { + "StartDate": "2020-09-12", + "EndDate": "2022-12-03", + "Correlation": 0.81 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2020-01-01", + "Correlation": 0.97 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2020-01-28", + "Correlation": 0.59 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2020-02-24", + "Correlation": -0.88 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2020-03-23", + "Correlation": -0.4 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2020-04-19", + "Correlation": -0.78 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2020-05-16", + "Correlation": -0.01 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2020-06-13", + "Correlation": -0.58 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2020-07-10", + "Correlation": -0.33 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2020-08-07", + "Correlation": -0.5 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2020-09-03", + "Correlation": -0.3 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2020-09-30", + "Correlation": -0.86 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2020-10-28", + "Correlation": -0.16 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2020-11-24", + "Correlation": -0.12 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2020-12-21", + "Correlation": 0.19 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2021-01-18", + "Correlation": -0.28 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2021-02-14", + "Correlation": -0.06 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2021-03-14", + "Correlation": 0.37 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2021-04-10", + "Correlation": -0.46 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2021-05-07", + "Correlation": -0.83 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2021-06-04", + "Correlation": 0.65 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2021-07-01", + "Correlation": -0.13 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2021-07-28", + "Correlation": 0.32 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2021-08-25", + "Correlation": 0.58 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2021-09-21", + "Correlation": -0.41 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2021-10-19", + "Correlation": -0.49 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2021-11-15", + "Correlation": -0.62 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2021-12-12", + "Correlation": -0.03 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2022-01-09", + "Correlation": -0.72 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2022-02-05", + "Correlation": 0.09 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2022-03-04", + "Correlation": 0.01 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2022-04-01", + "Correlation": 0.2 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2022-04-28", + "Correlation": -0.69 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2022-05-26", + "Correlation": -0.76 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2022-06-22", + "Correlation": -0.47 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2022-07-19", + "Correlation": 0.31 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2022-08-16", + "Correlation": 0.99 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2022-09-12", + "Correlation": -0.65 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2022-10-09", + "Correlation": 0.11 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2022-11-06", + "Correlation": -0.3 + }, + { + "StartDate": "2020-09-30", + "EndDate": "2022-12-03", + "Correlation": 0.93 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2020-01-01", + "Correlation": 0.4 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2020-01-28", + "Correlation": -0.51 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2020-02-24", + "Correlation": -0.72 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2020-03-23", + "Correlation": 0.41 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2020-04-19", + "Correlation": 0.86 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2020-05-16", + "Correlation": 0.88 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2020-06-13", + "Correlation": -0.64 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2020-07-10", + "Correlation": -0.94 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2020-08-07", + "Correlation": -0.2 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2020-09-03", + "Correlation": 0.79 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2020-09-30", + "Correlation": 0.23 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2020-10-28", + "Correlation": -0.81 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2020-11-24", + "Correlation": 0.75 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2020-12-21", + "Correlation": 0.5 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2021-01-18", + "Correlation": 0.09 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2021-02-14", + "Correlation": 0.56 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2021-03-14", + "Correlation": -0.43 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2021-04-10", + "Correlation": 0.14 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2021-05-07", + "Correlation": 0.21 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2021-06-04", + "Correlation": 0.34 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2021-07-01", + "Correlation": 0.51 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2021-07-28", + "Correlation": -0.17 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2021-08-25", + "Correlation": 0.21 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2021-09-21", + "Correlation": -0.35 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2021-10-19", + "Correlation": 0.82 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2021-11-15", + "Correlation": -0.49 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2021-12-12", + "Correlation": -0.51 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2022-01-09", + "Correlation": 0.05 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2022-02-05", + "Correlation": 0.36 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2022-03-04", + "Correlation": -0.08 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2022-04-01", + "Correlation": -0.76 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2022-04-28", + "Correlation": -0.79 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2022-05-26", + "Correlation": 0.75 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2022-06-22", + "Correlation": -0.7 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2022-07-19", + "Correlation": 0.72 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2022-08-16", + "Correlation": 0.74 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2022-09-12", + "Correlation": -0.7 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2022-10-09", + "Correlation": 0.1 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2022-11-06", + "Correlation": -0.8 + }, + { + "StartDate": "2020-10-19", + "EndDate": "2022-12-03", + "Correlation": -0.37 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2020-01-01", + "Correlation": -0.9 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2020-01-28", + "Correlation": -0.19 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2020-02-24", + "Correlation": -0.08 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2020-03-23", + "Correlation": -0.17 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2020-04-19", + "Correlation": -0.24 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2020-05-16", + "Correlation": -0.87 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2020-06-13", + "Correlation": -0.2 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2020-07-10", + "Correlation": 0.07 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2020-08-07", + "Correlation": 0.56 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2020-09-03", + "Correlation": -0.51 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2020-09-30", + "Correlation": -0.41 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2020-10-28", + "Correlation": -0.67 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2020-11-24", + "Correlation": 0.8 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2020-12-21", + "Correlation": 0.34 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2021-01-18", + "Correlation": 0.2 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2021-02-14", + "Correlation": 0.28 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2021-03-14", + "Correlation": 0.77 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2021-04-10", + "Correlation": -0.86 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2021-05-07", + "Correlation": 0.85 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2021-06-04", + "Correlation": -0.35 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2021-07-01", + "Correlation": 0.25 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2021-07-28", + "Correlation": -0.04 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2021-08-25", + "Correlation": 0.49 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2021-09-21", + "Correlation": -0.65 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2021-10-19", + "Correlation": 0.68 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2021-11-15", + "Correlation": 0.44 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2021-12-12", + "Correlation": 0.47 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2022-01-09", + "Correlation": -0.31 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2022-02-05", + "Correlation": 0.62 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2022-03-04", + "Correlation": 0.35 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2022-04-01", + "Correlation": -0.02 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2022-04-28", + "Correlation": -0.27 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2022-05-26", + "Correlation": -0.65 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2022-06-22", + "Correlation": -0.83 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2022-07-19", + "Correlation": 0.87 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2022-08-16", + "Correlation": 0.84 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2022-09-12", + "Correlation": 0.7 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2022-10-09", + "Correlation": 0.8 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2022-11-06", + "Correlation": -0.76 + }, + { + "StartDate": "2020-11-06", + "EndDate": "2022-12-03", + "Correlation": -0.54 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2020-01-01", + "Correlation": 0.14 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2020-01-28", + "Correlation": 0.11 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2020-02-24", + "Correlation": -0.52 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2020-03-23", + "Correlation": -0.86 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2020-04-19", + "Correlation": -0.55 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2020-05-16", + "Correlation": 0.62 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2020-06-13", + "Correlation": 0.74 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2020-07-10", + "Correlation": 0.98 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2020-08-07", + "Correlation": 0.16 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2020-09-03", + "Correlation": 0.66 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2020-09-30", + "Correlation": 0.29 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2020-10-28", + "Correlation": -0.42 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2020-11-24", + "Correlation": -0.1 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2020-12-21", + "Correlation": -0.42 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2021-01-18", + "Correlation": -0.4 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2021-02-14", + "Correlation": 0.56 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2021-03-14", + "Correlation": -0.86 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2021-04-10", + "Correlation": -0.62 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2021-05-07", + "Correlation": 0.58 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2021-06-04", + "Correlation": -0.4 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2021-07-01", + "Correlation": -0.46 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2021-07-28", + "Correlation": 0.4 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2021-08-25", + "Correlation": 0.92 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2021-09-21", + "Correlation": 0.59 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2021-10-19", + "Correlation": -0.49 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2021-11-15", + "Correlation": 0.77 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2021-12-12", + "Correlation": 0.66 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2022-01-09", + "Correlation": -0.26 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2022-02-05", + "Correlation": 0.07 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2022-03-04", + "Correlation": -0.94 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2022-04-01", + "Correlation": 0.13 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2022-04-28", + "Correlation": -0.03 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2022-05-26", + "Correlation": 0.3 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2022-06-22", + "Correlation": -0.86 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2022-07-19", + "Correlation": -0.84 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2022-08-16", + "Correlation": 0.53 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2022-09-12", + "Correlation": 0.44 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2022-10-09", + "Correlation": 0.85 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2022-11-06", + "Correlation": -0.15 + }, + { + "StartDate": "2020-11-24", + "EndDate": "2022-12-03", + "Correlation": 0.8 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2020-01-01", + "Correlation": 0.74 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2020-01-28", + "Correlation": 0.42 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2020-02-24", + "Correlation": 0.83 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2020-03-23", + "Correlation": 0.45 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2020-04-19", + "Correlation": -0.04 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2020-05-16", + "Correlation": 0.26 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2020-06-13", + "Correlation": -0.38 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2020-07-10", + "Correlation": 0.29 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2020-08-07", + "Correlation": 0.42 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2020-09-03", + "Correlation": -0.63 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2020-09-30", + "Correlation": -1 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2020-10-28", + "Correlation": -0.26 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2020-11-24", + "Correlation": -0.11 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2020-12-21", + "Correlation": 0.5 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2021-01-18", + "Correlation": 0.53 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2021-02-14", + "Correlation": 0.43 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2021-03-14", + "Correlation": 0.89 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2021-04-10", + "Correlation": -0.46 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2021-05-07", + "Correlation": -0.01 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2021-06-04", + "Correlation": 0.71 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2021-07-01", + "Correlation": 0.27 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2021-07-28", + "Correlation": 0.42 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2021-08-25", + "Correlation": -0.49 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2021-09-21", + "Correlation": -0.34 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2021-10-19", + "Correlation": 0.45 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2021-11-15", + "Correlation": -0.65 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2021-12-12", + "Correlation": -0.19 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2022-01-09", + "Correlation": 0.76 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2022-02-05", + "Correlation": 0.32 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2022-03-04", + "Correlation": -0.27 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2022-04-01", + "Correlation": 0.67 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2022-04-28", + "Correlation": 0.36 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2022-05-26", + "Correlation": 0.85 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2022-06-22", + "Correlation": -0.33 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2022-07-19", + "Correlation": -0.42 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2022-08-16", + "Correlation": -0.84 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2022-09-12", + "Correlation": 0.42 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2022-10-09", + "Correlation": 0.02 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2022-11-06", + "Correlation": 0.6 + }, + { + "StartDate": "2020-12-12", + "EndDate": "2022-12-03", + "Correlation": 0.4 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/heatmap/07-card80.flint.json b/test-harness/excel/evaluations/inputs/heatmap/07-card80.flint.json new file mode 100644 index 00000000..f6a56785 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/heatmap/07-card80.flint.json @@ -0,0 +1,2023 @@ +{ + "semantic_types": { + "Category": "Category", + "Group": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Heatmap", + "encodings": { + "x": "Category", + "y": "Group", + "color": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "C01", + "Group": "Electronics", + "Value": 84 + }, + { + "Category": "C01", + "Group": "Clothing", + "Value": 87 + }, + { + "Category": "C01", + "Group": "Food", + "Value": 66 + }, + { + "Category": "C01", + "Group": "Books", + "Value": 17 + }, + { + "Category": "C01", + "Group": "Sports", + "Value": 3 + }, + { + "Category": "C02", + "Group": "Electronics", + "Value": 35 + }, + { + "Category": "C02", + "Group": "Clothing", + "Value": 43 + }, + { + "Category": "C02", + "Group": "Food", + "Value": 39 + }, + { + "Category": "C02", + "Group": "Books", + "Value": 8 + }, + { + "Category": "C02", + "Group": "Sports", + "Value": 20 + }, + { + "Category": "C03", + "Group": "Electronics", + "Value": 26 + }, + { + "Category": "C03", + "Group": "Clothing", + "Value": 41 + }, + { + "Category": "C03", + "Group": "Food", + "Value": 43 + }, + { + "Category": "C03", + "Group": "Books", + "Value": 42 + }, + { + "Category": "C03", + "Group": "Sports", + "Value": 86 + }, + { + "Category": "C04", + "Group": "Electronics", + "Value": 9 + }, + { + "Category": "C04", + "Group": "Clothing", + "Value": 6 + }, + { + "Category": "C04", + "Group": "Food", + "Value": 34 + }, + { + "Category": "C04", + "Group": "Books", + "Value": 52 + }, + { + "Category": "C04", + "Group": "Sports", + "Value": 46 + }, + { + "Category": "C05", + "Group": "Electronics", + "Value": 35 + }, + { + "Category": "C05", + "Group": "Clothing", + "Value": 83 + }, + { + "Category": "C05", + "Group": "Food", + "Value": 57 + }, + { + "Category": "C05", + "Group": "Books", + "Value": 94 + }, + { + "Category": "C05", + "Group": "Sports", + "Value": 53 + }, + { + "Category": "C06", + "Group": "Electronics", + "Value": 80 + }, + { + "Category": "C06", + "Group": "Clothing", + "Value": 54 + }, + { + "Category": "C06", + "Group": "Food", + "Value": 31 + }, + { + "Category": "C06", + "Group": "Books", + "Value": 2 + }, + { + "Category": "C06", + "Group": "Sports", + "Value": 20 + }, + { + "Category": "C07", + "Group": "Electronics", + "Value": 15 + }, + { + "Category": "C07", + "Group": "Clothing", + "Value": 82 + }, + { + "Category": "C07", + "Group": "Food", + "Value": 25 + }, + { + "Category": "C07", + "Group": "Books", + "Value": 26 + }, + { + "Category": "C07", + "Group": "Sports", + "Value": 38 + }, + { + "Category": "C08", + "Group": "Electronics", + "Value": 83 + }, + { + "Category": "C08", + "Group": "Clothing", + "Value": 54 + }, + { + "Category": "C08", + "Group": "Food", + "Value": 74 + }, + { + "Category": "C08", + "Group": "Books", + "Value": 77 + }, + { + "Category": "C08", + "Group": "Sports", + "Value": 59 + }, + { + "Category": "C09", + "Group": "Electronics", + "Value": 40 + }, + { + "Category": "C09", + "Group": "Clothing", + "Value": 51 + }, + { + "Category": "C09", + "Group": "Food", + "Value": 67 + }, + { + "Category": "C09", + "Group": "Books", + "Value": 76 + }, + { + "Category": "C09", + "Group": "Sports", + "Value": 81 + }, + { + "Category": "C10", + "Group": "Electronics", + "Value": 82 + }, + { + "Category": "C10", + "Group": "Clothing", + "Value": 96 + }, + { + "Category": "C10", + "Group": "Food", + "Value": 76 + }, + { + "Category": "C10", + "Group": "Books", + "Value": 6 + }, + { + "Category": "C10", + "Group": "Sports", + "Value": 12 + }, + { + "Category": "C11", + "Group": "Electronics", + "Value": 26 + }, + { + "Category": "C11", + "Group": "Clothing", + "Value": 9 + }, + { + "Category": "C11", + "Group": "Food", + "Value": 63 + }, + { + "Category": "C11", + "Group": "Books", + "Value": 94 + }, + { + "Category": "C11", + "Group": "Sports", + "Value": 41 + }, + { + "Category": "C12", + "Group": "Electronics", + "Value": 50 + }, + { + "Category": "C12", + "Group": "Clothing", + "Value": 20 + }, + { + "Category": "C12", + "Group": "Food", + "Value": 44 + }, + { + "Category": "C12", + "Group": "Books", + "Value": 98 + }, + { + "Category": "C12", + "Group": "Sports", + "Value": 76 + }, + { + "Category": "C13", + "Group": "Electronics", + "Value": 36 + }, + { + "Category": "C13", + "Group": "Clothing", + "Value": 58 + }, + { + "Category": "C13", + "Group": "Food", + "Value": 63 + }, + { + "Category": "C13", + "Group": "Books", + "Value": 22 + }, + { + "Category": "C13", + "Group": "Sports", + "Value": 65 + }, + { + "Category": "C14", + "Group": "Electronics", + "Value": 62 + }, + { + "Category": "C14", + "Group": "Clothing", + "Value": 24 + }, + { + "Category": "C14", + "Group": "Food", + "Value": 31 + }, + { + "Category": "C14", + "Group": "Books", + "Value": 29 + }, + { + "Category": "C14", + "Group": "Sports", + "Value": 10 + }, + { + "Category": "C15", + "Group": "Electronics", + "Value": 49 + }, + { + "Category": "C15", + "Group": "Clothing", + "Value": 23 + }, + { + "Category": "C15", + "Group": "Food", + "Value": 50 + }, + { + "Category": "C15", + "Group": "Books", + "Value": 17 + }, + { + "Category": "C15", + "Group": "Sports", + "Value": 41 + }, + { + "Category": "C16", + "Group": "Electronics", + "Value": 84 + }, + { + "Category": "C16", + "Group": "Clothing", + "Value": 85 + }, + { + "Category": "C16", + "Group": "Food", + "Value": 25 + }, + { + "Category": "C16", + "Group": "Books", + "Value": 91 + }, + { + "Category": "C16", + "Group": "Sports", + "Value": 21 + }, + { + "Category": "C17", + "Group": "Electronics", + "Value": 95 + }, + { + "Category": "C17", + "Group": "Clothing", + "Value": 50 + }, + { + "Category": "C17", + "Group": "Food", + "Value": 86 + }, + { + "Category": "C17", + "Group": "Books", + "Value": 56 + }, + { + "Category": "C17", + "Group": "Sports", + "Value": 71 + }, + { + "Category": "C18", + "Group": "Electronics", + "Value": 59 + }, + { + "Category": "C18", + "Group": "Clothing", + "Value": 83 + }, + { + "Category": "C18", + "Group": "Food", + "Value": 2 + }, + { + "Category": "C18", + "Group": "Books", + "Value": 44 + }, + { + "Category": "C18", + "Group": "Sports", + "Value": 45 + }, + { + "Category": "C19", + "Group": "Electronics", + "Value": 57 + }, + { + "Category": "C19", + "Group": "Clothing", + "Value": 31 + }, + { + "Category": "C19", + "Group": "Food", + "Value": 14 + }, + { + "Category": "C19", + "Group": "Books", + "Value": 42 + }, + { + "Category": "C19", + "Group": "Sports", + "Value": 9 + }, + { + "Category": "C20", + "Group": "Electronics", + "Value": 99 + }, + { + "Category": "C20", + "Group": "Clothing", + "Value": 10 + }, + { + "Category": "C20", + "Group": "Food", + "Value": 74 + }, + { + "Category": "C20", + "Group": "Books", + "Value": 76 + }, + { + "Category": "C20", + "Group": "Sports", + "Value": 71 + }, + { + "Category": "C21", + "Group": "Electronics", + "Value": 87 + }, + { + "Category": "C21", + "Group": "Clothing", + "Value": 12 + }, + { + "Category": "C21", + "Group": "Food", + "Value": 69 + }, + { + "Category": "C21", + "Group": "Books", + "Value": 81 + }, + { + "Category": "C21", + "Group": "Sports", + "Value": 22 + }, + { + "Category": "C22", + "Group": "Electronics", + "Value": 99 + }, + { + "Category": "C22", + "Group": "Clothing", + "Value": 8 + }, + { + "Category": "C22", + "Group": "Food", + "Value": 22 + }, + { + "Category": "C22", + "Group": "Books", + "Value": 18 + }, + { + "Category": "C22", + "Group": "Sports", + "Value": 41 + }, + { + "Category": "C23", + "Group": "Electronics", + "Value": 87 + }, + { + "Category": "C23", + "Group": "Clothing", + "Value": 66 + }, + { + "Category": "C23", + "Group": "Food", + "Value": 62 + }, + { + "Category": "C23", + "Group": "Books", + "Value": 13 + }, + { + "Category": "C23", + "Group": "Sports", + "Value": 63 + }, + { + "Category": "C24", + "Group": "Electronics", + "Value": 78 + }, + { + "Category": "C24", + "Group": "Clothing", + "Value": 93 + }, + { + "Category": "C24", + "Group": "Food", + "Value": 10 + }, + { + "Category": "C24", + "Group": "Books", + "Value": 94 + }, + { + "Category": "C24", + "Group": "Sports", + "Value": 21 + }, + { + "Category": "C25", + "Group": "Electronics", + "Value": 83 + }, + { + "Category": "C25", + "Group": "Clothing", + "Value": 94 + }, + { + "Category": "C25", + "Group": "Food", + "Value": 79 + }, + { + "Category": "C25", + "Group": "Books", + "Value": 24 + }, + { + "Category": "C25", + "Group": "Sports", + "Value": 18 + }, + { + "Category": "C26", + "Group": "Electronics", + "Value": 78 + }, + { + "Category": "C26", + "Group": "Clothing", + "Value": 98 + }, + { + "Category": "C26", + "Group": "Food", + "Value": 80 + }, + { + "Category": "C26", + "Group": "Books", + "Value": 54 + }, + { + "Category": "C26", + "Group": "Sports", + "Value": 64 + }, + { + "Category": "C27", + "Group": "Electronics", + "Value": 35 + }, + { + "Category": "C27", + "Group": "Clothing", + "Value": 88 + }, + { + "Category": "C27", + "Group": "Food", + "Value": 51 + }, + { + "Category": "C27", + "Group": "Books", + "Value": 25 + }, + { + "Category": "C27", + "Group": "Sports", + "Value": 29 + }, + { + "Category": "C28", + "Group": "Electronics", + "Value": 96 + }, + { + "Category": "C28", + "Group": "Clothing", + "Value": 68 + }, + { + "Category": "C28", + "Group": "Food", + "Value": 22 + }, + { + "Category": "C28", + "Group": "Books", + "Value": 91 + }, + { + "Category": "C28", + "Group": "Sports", + "Value": 76 + }, + { + "Category": "C29", + "Group": "Electronics", + "Value": 52 + }, + { + "Category": "C29", + "Group": "Clothing", + "Value": 18 + }, + { + "Category": "C29", + "Group": "Food", + "Value": 61 + }, + { + "Category": "C29", + "Group": "Books", + "Value": 41 + }, + { + "Category": "C29", + "Group": "Sports", + "Value": 67 + }, + { + "Category": "C30", + "Group": "Electronics", + "Value": 63 + }, + { + "Category": "C30", + "Group": "Clothing", + "Value": 55 + }, + { + "Category": "C30", + "Group": "Food", + "Value": 93 + }, + { + "Category": "C30", + "Group": "Books", + "Value": 41 + }, + { + "Category": "C30", + "Group": "Sports", + "Value": 33 + }, + { + "Category": "C31", + "Group": "Electronics", + "Value": 97 + }, + { + "Category": "C31", + "Group": "Clothing", + "Value": 59 + }, + { + "Category": "C31", + "Group": "Food", + "Value": 44 + }, + { + "Category": "C31", + "Group": "Books", + "Value": 32 + }, + { + "Category": "C31", + "Group": "Sports", + "Value": 84 + }, + { + "Category": "C32", + "Group": "Electronics", + "Value": 85 + }, + { + "Category": "C32", + "Group": "Clothing", + "Value": 67 + }, + { + "Category": "C32", + "Group": "Food", + "Value": 74 + }, + { + "Category": "C32", + "Group": "Books", + "Value": 25 + }, + { + "Category": "C32", + "Group": "Sports", + "Value": 72 + }, + { + "Category": "C33", + "Group": "Electronics", + "Value": 87 + }, + { + "Category": "C33", + "Group": "Clothing", + "Value": 1 + }, + { + "Category": "C33", + "Group": "Food", + "Value": 57 + }, + { + "Category": "C33", + "Group": "Books", + "Value": 87 + }, + { + "Category": "C33", + "Group": "Sports", + "Value": 74 + }, + { + "Category": "C34", + "Group": "Electronics", + "Value": 63 + }, + { + "Category": "C34", + "Group": "Clothing", + "Value": 66 + }, + { + "Category": "C34", + "Group": "Food", + "Value": 29 + }, + { + "Category": "C34", + "Group": "Books", + "Value": 89 + }, + { + "Category": "C34", + "Group": "Sports", + "Value": 10 + }, + { + "Category": "C35", + "Group": "Electronics", + "Value": 75 + }, + { + "Category": "C35", + "Group": "Clothing", + "Value": 21 + }, + { + "Category": "C35", + "Group": "Food", + "Value": 82 + }, + { + "Category": "C35", + "Group": "Books", + "Value": 54 + }, + { + "Category": "C35", + "Group": "Sports", + "Value": 65 + }, + { + "Category": "C36", + "Group": "Electronics", + "Value": 30 + }, + { + "Category": "C36", + "Group": "Clothing", + "Value": 51 + }, + { + "Category": "C36", + "Group": "Food", + "Value": 33 + }, + { + "Category": "C36", + "Group": "Books", + "Value": 58 + }, + { + "Category": "C36", + "Group": "Sports", + "Value": 32 + }, + { + "Category": "C37", + "Group": "Electronics", + "Value": 58 + }, + { + "Category": "C37", + "Group": "Clothing", + "Value": 75 + }, + { + "Category": "C37", + "Group": "Food", + "Value": 11 + }, + { + "Category": "C37", + "Group": "Books", + "Value": 63 + }, + { + "Category": "C37", + "Group": "Sports", + "Value": 85 + }, + { + "Category": "C38", + "Group": "Electronics", + "Value": 93 + }, + { + "Category": "C38", + "Group": "Clothing", + "Value": 32 + }, + { + "Category": "C38", + "Group": "Food", + "Value": 48 + }, + { + "Category": "C38", + "Group": "Books", + "Value": 11 + }, + { + "Category": "C38", + "Group": "Sports", + "Value": 95 + }, + { + "Category": "C39", + "Group": "Electronics", + "Value": 57 + }, + { + "Category": "C39", + "Group": "Clothing", + "Value": 13 + }, + { + "Category": "C39", + "Group": "Food", + "Value": 60 + }, + { + "Category": "C39", + "Group": "Books", + "Value": 86 + }, + { + "Category": "C39", + "Group": "Sports", + "Value": 21 + }, + { + "Category": "C40", + "Group": "Electronics", + "Value": 41 + }, + { + "Category": "C40", + "Group": "Clothing", + "Value": 68 + }, + { + "Category": "C40", + "Group": "Food", + "Value": 34 + }, + { + "Category": "C40", + "Group": "Books", + "Value": 33 + }, + { + "Category": "C40", + "Group": "Sports", + "Value": 40 + }, + { + "Category": "C41", + "Group": "Electronics", + "Value": 16 + }, + { + "Category": "C41", + "Group": "Clothing", + "Value": 3 + }, + { + "Category": "C41", + "Group": "Food", + "Value": 66 + }, + { + "Category": "C41", + "Group": "Books", + "Value": 14 + }, + { + "Category": "C41", + "Group": "Sports", + "Value": 76 + }, + { + "Category": "C42", + "Group": "Electronics", + "Value": 8 + }, + { + "Category": "C42", + "Group": "Clothing", + "Value": 99 + }, + { + "Category": "C42", + "Group": "Food", + "Value": 50 + }, + { + "Category": "C42", + "Group": "Books", + "Value": 71 + }, + { + "Category": "C42", + "Group": "Sports", + "Value": 3 + }, + { + "Category": "C43", + "Group": "Electronics", + "Value": 54 + }, + { + "Category": "C43", + "Group": "Clothing", + "Value": 54 + }, + { + "Category": "C43", + "Group": "Food", + "Value": 79 + }, + { + "Category": "C43", + "Group": "Books", + "Value": 66 + }, + { + "Category": "C43", + "Group": "Sports", + "Value": 66 + }, + { + "Category": "C44", + "Group": "Electronics", + "Value": 26 + }, + { + "Category": "C44", + "Group": "Clothing", + "Value": 24 + }, + { + "Category": "C44", + "Group": "Food", + "Value": 3 + }, + { + "Category": "C44", + "Group": "Books", + "Value": 84 + }, + { + "Category": "C44", + "Group": "Sports", + "Value": 23 + }, + { + "Category": "C45", + "Group": "Electronics", + "Value": 19 + }, + { + "Category": "C45", + "Group": "Clothing", + "Value": 31 + }, + { + "Category": "C45", + "Group": "Food", + "Value": 43 + }, + { + "Category": "C45", + "Group": "Books", + "Value": 3 + }, + { + "Category": "C45", + "Group": "Sports", + "Value": 13 + }, + { + "Category": "C46", + "Group": "Electronics", + "Value": 11 + }, + { + "Category": "C46", + "Group": "Clothing", + "Value": 18 + }, + { + "Category": "C46", + "Group": "Food", + "Value": 61 + }, + { + "Category": "C46", + "Group": "Books", + "Value": 93 + }, + { + "Category": "C46", + "Group": "Sports", + "Value": 52 + }, + { + "Category": "C47", + "Group": "Electronics", + "Value": 85 + }, + { + "Category": "C47", + "Group": "Clothing", + "Value": 41 + }, + { + "Category": "C47", + "Group": "Food", + "Value": 0 + }, + { + "Category": "C47", + "Group": "Books", + "Value": 59 + }, + { + "Category": "C47", + "Group": "Sports", + "Value": 38 + }, + { + "Category": "C48", + "Group": "Electronics", + "Value": 25 + }, + { + "Category": "C48", + "Group": "Clothing", + "Value": 33 + }, + { + "Category": "C48", + "Group": "Food", + "Value": 28 + }, + { + "Category": "C48", + "Group": "Books", + "Value": 73 + }, + { + "Category": "C48", + "Group": "Sports", + "Value": 52 + }, + { + "Category": "C49", + "Group": "Electronics", + "Value": 68 + }, + { + "Category": "C49", + "Group": "Clothing", + "Value": 8 + }, + { + "Category": "C49", + "Group": "Food", + "Value": 19 + }, + { + "Category": "C49", + "Group": "Books", + "Value": 29 + }, + { + "Category": "C49", + "Group": "Sports", + "Value": 65 + }, + { + "Category": "C50", + "Group": "Electronics", + "Value": 2 + }, + { + "Category": "C50", + "Group": "Clothing", + "Value": 9 + }, + { + "Category": "C50", + "Group": "Food", + "Value": 97 + }, + { + "Category": "C50", + "Group": "Books", + "Value": 86 + }, + { + "Category": "C50", + "Group": "Sports", + "Value": 96 + }, + { + "Category": "C51", + "Group": "Electronics", + "Value": 63 + }, + { + "Category": "C51", + "Group": "Clothing", + "Value": 84 + }, + { + "Category": "C51", + "Group": "Food", + "Value": 44 + }, + { + "Category": "C51", + "Group": "Books", + "Value": 11 + }, + { + "Category": "C51", + "Group": "Sports", + "Value": 38 + }, + { + "Category": "C52", + "Group": "Electronics", + "Value": 17 + }, + { + "Category": "C52", + "Group": "Clothing", + "Value": 54 + }, + { + "Category": "C52", + "Group": "Food", + "Value": 58 + }, + { + "Category": "C52", + "Group": "Books", + "Value": 72 + }, + { + "Category": "C52", + "Group": "Sports", + "Value": 54 + }, + { + "Category": "C53", + "Group": "Electronics", + "Value": 41 + }, + { + "Category": "C53", + "Group": "Clothing", + "Value": 50 + }, + { + "Category": "C53", + "Group": "Food", + "Value": 62 + }, + { + "Category": "C53", + "Group": "Books", + "Value": 76 + }, + { + "Category": "C53", + "Group": "Sports", + "Value": 17 + }, + { + "Category": "C54", + "Group": "Electronics", + "Value": 65 + }, + { + "Category": "C54", + "Group": "Clothing", + "Value": 8 + }, + { + "Category": "C54", + "Group": "Food", + "Value": 40 + }, + { + "Category": "C54", + "Group": "Books", + "Value": 41 + }, + { + "Category": "C54", + "Group": "Sports", + "Value": 9 + }, + { + "Category": "C55", + "Group": "Electronics", + "Value": 28 + }, + { + "Category": "C55", + "Group": "Clothing", + "Value": 77 + }, + { + "Category": "C55", + "Group": "Food", + "Value": 74 + }, + { + "Category": "C55", + "Group": "Books", + "Value": 22 + }, + { + "Category": "C55", + "Group": "Sports", + "Value": 47 + }, + { + "Category": "C56", + "Group": "Electronics", + "Value": 85 + }, + { + "Category": "C56", + "Group": "Clothing", + "Value": 90 + }, + { + "Category": "C56", + "Group": "Food", + "Value": 76 + }, + { + "Category": "C56", + "Group": "Books", + "Value": 78 + }, + { + "Category": "C56", + "Group": "Sports", + "Value": 5 + }, + { + "Category": "C57", + "Group": "Electronics", + "Value": 57 + }, + { + "Category": "C57", + "Group": "Clothing", + "Value": 99 + }, + { + "Category": "C57", + "Group": "Food", + "Value": 10 + }, + { + "Category": "C57", + "Group": "Books", + "Value": 20 + }, + { + "Category": "C57", + "Group": "Sports", + "Value": 41 + }, + { + "Category": "C58", + "Group": "Electronics", + "Value": 9 + }, + { + "Category": "C58", + "Group": "Clothing", + "Value": 92 + }, + { + "Category": "C58", + "Group": "Food", + "Value": 54 + }, + { + "Category": "C58", + "Group": "Books", + "Value": 89 + }, + { + "Category": "C58", + "Group": "Sports", + "Value": 95 + }, + { + "Category": "C59", + "Group": "Electronics", + "Value": 74 + }, + { + "Category": "C59", + "Group": "Clothing", + "Value": 35 + }, + { + "Category": "C59", + "Group": "Food", + "Value": 44 + }, + { + "Category": "C59", + "Group": "Books", + "Value": 69 + }, + { + "Category": "C59", + "Group": "Sports", + "Value": 80 + }, + { + "Category": "C60", + "Group": "Electronics", + "Value": 78 + }, + { + "Category": "C60", + "Group": "Clothing", + "Value": 83 + }, + { + "Category": "C60", + "Group": "Food", + "Value": 71 + }, + { + "Category": "C60", + "Group": "Books", + "Value": 39 + }, + { + "Category": "C60", + "Group": "Sports", + "Value": 48 + }, + { + "Category": "C61", + "Group": "Electronics", + "Value": 5 + }, + { + "Category": "C61", + "Group": "Clothing", + "Value": 74 + }, + { + "Category": "C61", + "Group": "Food", + "Value": 35 + }, + { + "Category": "C61", + "Group": "Books", + "Value": 53 + }, + { + "Category": "C61", + "Group": "Sports", + "Value": 45 + }, + { + "Category": "C62", + "Group": "Electronics", + "Value": 60 + }, + { + "Category": "C62", + "Group": "Clothing", + "Value": 26 + }, + { + "Category": "C62", + "Group": "Food", + "Value": 52 + }, + { + "Category": "C62", + "Group": "Books", + "Value": 52 + }, + { + "Category": "C62", + "Group": "Sports", + "Value": 20 + }, + { + "Category": "C63", + "Group": "Electronics", + "Value": 90 + }, + { + "Category": "C63", + "Group": "Clothing", + "Value": 53 + }, + { + "Category": "C63", + "Group": "Food", + "Value": 70 + }, + { + "Category": "C63", + "Group": "Books", + "Value": 1 + }, + { + "Category": "C63", + "Group": "Sports", + "Value": 55 + }, + { + "Category": "C64", + "Group": "Electronics", + "Value": 2 + }, + { + "Category": "C64", + "Group": "Clothing", + "Value": 55 + }, + { + "Category": "C64", + "Group": "Food", + "Value": 1 + }, + { + "Category": "C64", + "Group": "Books", + "Value": 93 + }, + { + "Category": "C64", + "Group": "Sports", + "Value": 26 + }, + { + "Category": "C65", + "Group": "Electronics", + "Value": 82 + }, + { + "Category": "C65", + "Group": "Clothing", + "Value": 81 + }, + { + "Category": "C65", + "Group": "Food", + "Value": 50 + }, + { + "Category": "C65", + "Group": "Books", + "Value": 43 + }, + { + "Category": "C65", + "Group": "Sports", + "Value": 63 + }, + { + "Category": "C66", + "Group": "Electronics", + "Value": 34 + }, + { + "Category": "C66", + "Group": "Clothing", + "Value": 69 + }, + { + "Category": "C66", + "Group": "Food", + "Value": 47 + }, + { + "Category": "C66", + "Group": "Books", + "Value": 92 + }, + { + "Category": "C66", + "Group": "Sports", + "Value": 49 + }, + { + "Category": "C67", + "Group": "Electronics", + "Value": 52 + }, + { + "Category": "C67", + "Group": "Clothing", + "Value": 99 + }, + { + "Category": "C67", + "Group": "Food", + "Value": 48 + }, + { + "Category": "C67", + "Group": "Books", + "Value": 14 + }, + { + "Category": "C67", + "Group": "Sports", + "Value": 52 + }, + { + "Category": "C68", + "Group": "Electronics", + "Value": 23 + }, + { + "Category": "C68", + "Group": "Clothing", + "Value": 11 + }, + { + "Category": "C68", + "Group": "Food", + "Value": 31 + }, + { + "Category": "C68", + "Group": "Books", + "Value": 13 + }, + { + "Category": "C68", + "Group": "Sports", + "Value": 56 + }, + { + "Category": "C69", + "Group": "Electronics", + "Value": 37 + }, + { + "Category": "C69", + "Group": "Clothing", + "Value": 58 + }, + { + "Category": "C69", + "Group": "Food", + "Value": 61 + }, + { + "Category": "C69", + "Group": "Books", + "Value": 21 + }, + { + "Category": "C69", + "Group": "Sports", + "Value": 23 + }, + { + "Category": "C70", + "Group": "Electronics", + "Value": 79 + }, + { + "Category": "C70", + "Group": "Clothing", + "Value": 46 + }, + { + "Category": "C70", + "Group": "Food", + "Value": 74 + }, + { + "Category": "C70", + "Group": "Books", + "Value": 15 + }, + { + "Category": "C70", + "Group": "Sports", + "Value": 70 + }, + { + "Category": "C71", + "Group": "Electronics", + "Value": 37 + }, + { + "Category": "C71", + "Group": "Clothing", + "Value": 62 + }, + { + "Category": "C71", + "Group": "Food", + "Value": 0 + }, + { + "Category": "C71", + "Group": "Books", + "Value": 52 + }, + { + "Category": "C71", + "Group": "Sports", + "Value": 44 + }, + { + "Category": "C72", + "Group": "Electronics", + "Value": 93 + }, + { + "Category": "C72", + "Group": "Clothing", + "Value": 33 + }, + { + "Category": "C72", + "Group": "Food", + "Value": 91 + }, + { + "Category": "C72", + "Group": "Books", + "Value": 47 + }, + { + "Category": "C72", + "Group": "Sports", + "Value": 95 + }, + { + "Category": "C73", + "Group": "Electronics", + "Value": 48 + }, + { + "Category": "C73", + "Group": "Clothing", + "Value": 16 + }, + { + "Category": "C73", + "Group": "Food", + "Value": 61 + }, + { + "Category": "C73", + "Group": "Books", + "Value": 97 + }, + { + "Category": "C73", + "Group": "Sports", + "Value": 59 + }, + { + "Category": "C74", + "Group": "Electronics", + "Value": 49 + }, + { + "Category": "C74", + "Group": "Clothing", + "Value": 85 + }, + { + "Category": "C74", + "Group": "Food", + "Value": 96 + }, + { + "Category": "C74", + "Group": "Books", + "Value": 70 + }, + { + "Category": "C74", + "Group": "Sports", + "Value": 85 + }, + { + "Category": "C75", + "Group": "Electronics", + "Value": 72 + }, + { + "Category": "C75", + "Group": "Clothing", + "Value": 14 + }, + { + "Category": "C75", + "Group": "Food", + "Value": 25 + }, + { + "Category": "C75", + "Group": "Books", + "Value": 73 + }, + { + "Category": "C75", + "Group": "Sports", + "Value": 35 + }, + { + "Category": "C76", + "Group": "Electronics", + "Value": 96 + }, + { + "Category": "C76", + "Group": "Clothing", + "Value": 8 + }, + { + "Category": "C76", + "Group": "Food", + "Value": 61 + }, + { + "Category": "C76", + "Group": "Books", + "Value": 50 + }, + { + "Category": "C76", + "Group": "Sports", + "Value": 73 + }, + { + "Category": "C77", + "Group": "Electronics", + "Value": 84 + }, + { + "Category": "C77", + "Group": "Clothing", + "Value": 8 + }, + { + "Category": "C77", + "Group": "Food", + "Value": 6 + }, + { + "Category": "C77", + "Group": "Books", + "Value": 69 + }, + { + "Category": "C77", + "Group": "Sports", + "Value": 86 + }, + { + "Category": "C78", + "Group": "Electronics", + "Value": 73 + }, + { + "Category": "C78", + "Group": "Clothing", + "Value": 18 + }, + { + "Category": "C78", + "Group": "Food", + "Value": 71 + }, + { + "Category": "C78", + "Group": "Books", + "Value": 19 + }, + { + "Category": "C78", + "Group": "Sports", + "Value": 43 + }, + { + "Category": "C79", + "Group": "Electronics", + "Value": 45 + }, + { + "Category": "C79", + "Group": "Clothing", + "Value": 16 + }, + { + "Category": "C79", + "Group": "Food", + "Value": 62 + }, + { + "Category": "C79", + "Group": "Books", + "Value": 47 + }, + { + "Category": "C79", + "Group": "Sports", + "Value": 91 + }, + { + "Category": "C80", + "Group": "Electronics", + "Value": 12 + }, + { + "Category": "C80", + "Group": "Clothing", + "Value": 66 + }, + { + "Category": "C80", + "Group": "Food", + "Value": 51 + }, + { + "Category": "C80", + "Group": "Books", + "Value": 56 + }, + { + "Category": "C80", + "Group": "Sports", + "Value": 2 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/heatmap/08-card5.flint.json b/test-harness/excel/evaluations/inputs/heatmap/08-card5.flint.json new file mode 100644 index 00000000..a28d63dc --- /dev/null +++ b/test-harness/excel/evaluations/inputs/heatmap/08-card5.flint.json @@ -0,0 +1,2023 @@ +{ + "semantic_types": { + "Group": "Category", + "Category": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Heatmap", + "encodings": { + "x": "Group", + "y": "Category", + "color": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Group": "Electronics", + "Category": "C01", + "Value": 97 + }, + { + "Group": "Electronics", + "Category": "C02", + "Value": 29 + }, + { + "Group": "Electronics", + "Category": "C03", + "Value": 93 + }, + { + "Group": "Electronics", + "Category": "C04", + "Value": 93 + }, + { + "Group": "Electronics", + "Category": "C05", + "Value": 88 + }, + { + "Group": "Electronics", + "Category": "C06", + "Value": 38 + }, + { + "Group": "Electronics", + "Category": "C07", + "Value": 99 + }, + { + "Group": "Electronics", + "Category": "C08", + "Value": 16 + }, + { + "Group": "Electronics", + "Category": "C09", + "Value": 84 + }, + { + "Group": "Electronics", + "Category": "C10", + "Value": 56 + }, + { + "Group": "Electronics", + "Category": "C11", + "Value": 38 + }, + { + "Group": "Electronics", + "Category": "C12", + "Value": 24 + }, + { + "Group": "Electronics", + "Category": "C13", + "Value": 85 + }, + { + "Group": "Electronics", + "Category": "C14", + "Value": 99 + }, + { + "Group": "Electronics", + "Category": "C15", + "Value": 3 + }, + { + "Group": "Electronics", + "Category": "C16", + "Value": 33 + }, + { + "Group": "Electronics", + "Category": "C17", + "Value": 8 + }, + { + "Group": "Electronics", + "Category": "C18", + "Value": 78 + }, + { + "Group": "Electronics", + "Category": "C19", + "Value": 31 + }, + { + "Group": "Electronics", + "Category": "C20", + "Value": 24 + }, + { + "Group": "Electronics", + "Category": "C21", + "Value": 36 + }, + { + "Group": "Electronics", + "Category": "C22", + "Value": 48 + }, + { + "Group": "Electronics", + "Category": "C23", + "Value": 48 + }, + { + "Group": "Electronics", + "Category": "C24", + "Value": 24 + }, + { + "Group": "Electronics", + "Category": "C25", + "Value": 15 + }, + { + "Group": "Electronics", + "Category": "C26", + "Value": 24 + }, + { + "Group": "Electronics", + "Category": "C27", + "Value": 66 + }, + { + "Group": "Electronics", + "Category": "C28", + "Value": 62 + }, + { + "Group": "Electronics", + "Category": "C29", + "Value": 28 + }, + { + "Group": "Electronics", + "Category": "C30", + "Value": 83 + }, + { + "Group": "Electronics", + "Category": "C31", + "Value": 91 + }, + { + "Group": "Electronics", + "Category": "C32", + "Value": 16 + }, + { + "Group": "Electronics", + "Category": "C33", + "Value": 97 + }, + { + "Group": "Electronics", + "Category": "C34", + "Value": 15 + }, + { + "Group": "Electronics", + "Category": "C35", + "Value": 6 + }, + { + "Group": "Electronics", + "Category": "C36", + "Value": 37 + }, + { + "Group": "Electronics", + "Category": "C37", + "Value": 4 + }, + { + "Group": "Electronics", + "Category": "C38", + "Value": 21 + }, + { + "Group": "Electronics", + "Category": "C39", + "Value": 58 + }, + { + "Group": "Electronics", + "Category": "C40", + "Value": 81 + }, + { + "Group": "Electronics", + "Category": "C41", + "Value": 69 + }, + { + "Group": "Electronics", + "Category": "C42", + "Value": 22 + }, + { + "Group": "Electronics", + "Category": "C43", + "Value": 48 + }, + { + "Group": "Electronics", + "Category": "C44", + "Value": 8 + }, + { + "Group": "Electronics", + "Category": "C45", + "Value": 91 + }, + { + "Group": "Electronics", + "Category": "C46", + "Value": 93 + }, + { + "Group": "Electronics", + "Category": "C47", + "Value": 20 + }, + { + "Group": "Electronics", + "Category": "C48", + "Value": 23 + }, + { + "Group": "Electronics", + "Category": "C49", + "Value": 28 + }, + { + "Group": "Electronics", + "Category": "C50", + "Value": 11 + }, + { + "Group": "Electronics", + "Category": "C51", + "Value": 23 + }, + { + "Group": "Electronics", + "Category": "C52", + "Value": 19 + }, + { + "Group": "Electronics", + "Category": "C53", + "Value": 10 + }, + { + "Group": "Electronics", + "Category": "C54", + "Value": 58 + }, + { + "Group": "Electronics", + "Category": "C55", + "Value": 50 + }, + { + "Group": "Electronics", + "Category": "C56", + "Value": 62 + }, + { + "Group": "Electronics", + "Category": "C57", + "Value": 85 + }, + { + "Group": "Electronics", + "Category": "C58", + "Value": 48 + }, + { + "Group": "Electronics", + "Category": "C59", + "Value": 88 + }, + { + "Group": "Electronics", + "Category": "C60", + "Value": 54 + }, + { + "Group": "Electronics", + "Category": "C61", + "Value": 70 + }, + { + "Group": "Electronics", + "Category": "C62", + "Value": 64 + }, + { + "Group": "Electronics", + "Category": "C63", + "Value": 38 + }, + { + "Group": "Electronics", + "Category": "C64", + "Value": 64 + }, + { + "Group": "Electronics", + "Category": "C65", + "Value": 32 + }, + { + "Group": "Electronics", + "Category": "C66", + "Value": 84 + }, + { + "Group": "Electronics", + "Category": "C67", + "Value": 11 + }, + { + "Group": "Electronics", + "Category": "C68", + "Value": 69 + }, + { + "Group": "Electronics", + "Category": "C69", + "Value": 13 + }, + { + "Group": "Electronics", + "Category": "C70", + "Value": 68 + }, + { + "Group": "Electronics", + "Category": "C71", + "Value": 12 + }, + { + "Group": "Electronics", + "Category": "C72", + "Value": 86 + }, + { + "Group": "Electronics", + "Category": "C73", + "Value": 17 + }, + { + "Group": "Electronics", + "Category": "C74", + "Value": 84 + }, + { + "Group": "Electronics", + "Category": "C75", + "Value": 78 + }, + { + "Group": "Electronics", + "Category": "C76", + "Value": 28 + }, + { + "Group": "Electronics", + "Category": "C77", + "Value": 74 + }, + { + "Group": "Electronics", + "Category": "C78", + "Value": 85 + }, + { + "Group": "Electronics", + "Category": "C79", + "Value": 3 + }, + { + "Group": "Electronics", + "Category": "C80", + "Value": 73 + }, + { + "Group": "Clothing", + "Category": "C01", + "Value": 79 + }, + { + "Group": "Clothing", + "Category": "C02", + "Value": 41 + }, + { + "Group": "Clothing", + "Category": "C03", + "Value": 29 + }, + { + "Group": "Clothing", + "Category": "C04", + "Value": 26 + }, + { + "Group": "Clothing", + "Category": "C05", + "Value": 74 + }, + { + "Group": "Clothing", + "Category": "C06", + "Value": 73 + }, + { + "Group": "Clothing", + "Category": "C07", + "Value": 30 + }, + { + "Group": "Clothing", + "Category": "C08", + "Value": 12 + }, + { + "Group": "Clothing", + "Category": "C09", + "Value": 43 + }, + { + "Group": "Clothing", + "Category": "C10", + "Value": 4 + }, + { + "Group": "Clothing", + "Category": "C11", + "Value": 62 + }, + { + "Group": "Clothing", + "Category": "C12", + "Value": 96 + }, + { + "Group": "Clothing", + "Category": "C13", + "Value": 69 + }, + { + "Group": "Clothing", + "Category": "C14", + "Value": 15 + }, + { + "Group": "Clothing", + "Category": "C15", + "Value": 38 + }, + { + "Group": "Clothing", + "Category": "C16", + "Value": 25 + }, + { + "Group": "Clothing", + "Category": "C17", + "Value": 65 + }, + { + "Group": "Clothing", + "Category": "C18", + "Value": 24 + }, + { + "Group": "Clothing", + "Category": "C19", + "Value": 37 + }, + { + "Group": "Clothing", + "Category": "C20", + "Value": 56 + }, + { + "Group": "Clothing", + "Category": "C21", + "Value": 8 + }, + { + "Group": "Clothing", + "Category": "C22", + "Value": 17 + }, + { + "Group": "Clothing", + "Category": "C23", + "Value": 4 + }, + { + "Group": "Clothing", + "Category": "C24", + "Value": 5 + }, + { + "Group": "Clothing", + "Category": "C25", + "Value": 66 + }, + { + "Group": "Clothing", + "Category": "C26", + "Value": 94 + }, + { + "Group": "Clothing", + "Category": "C27", + "Value": 46 + }, + { + "Group": "Clothing", + "Category": "C28", + "Value": 81 + }, + { + "Group": "Clothing", + "Category": "C29", + "Value": 25 + }, + { + "Group": "Clothing", + "Category": "C30", + "Value": 74 + }, + { + "Group": "Clothing", + "Category": "C31", + "Value": 93 + }, + { + "Group": "Clothing", + "Category": "C32", + "Value": 15 + }, + { + "Group": "Clothing", + "Category": "C33", + "Value": 41 + }, + { + "Group": "Clothing", + "Category": "C34", + "Value": 52 + }, + { + "Group": "Clothing", + "Category": "C35", + "Value": 89 + }, + { + "Group": "Clothing", + "Category": "C36", + "Value": 39 + }, + { + "Group": "Clothing", + "Category": "C37", + "Value": 9 + }, + { + "Group": "Clothing", + "Category": "C38", + "Value": 52 + }, + { + "Group": "Clothing", + "Category": "C39", + "Value": 95 + }, + { + "Group": "Clothing", + "Category": "C40", + "Value": 78 + }, + { + "Group": "Clothing", + "Category": "C41", + "Value": 84 + }, + { + "Group": "Clothing", + "Category": "C42", + "Value": 69 + }, + { + "Group": "Clothing", + "Category": "C43", + "Value": 78 + }, + { + "Group": "Clothing", + "Category": "C44", + "Value": 57 + }, + { + "Group": "Clothing", + "Category": "C45", + "Value": 23 + }, + { + "Group": "Clothing", + "Category": "C46", + "Value": 40 + }, + { + "Group": "Clothing", + "Category": "C47", + "Value": 93 + }, + { + "Group": "Clothing", + "Category": "C48", + "Value": 41 + }, + { + "Group": "Clothing", + "Category": "C49", + "Value": 79 + }, + { + "Group": "Clothing", + "Category": "C50", + "Value": 89 + }, + { + "Group": "Clothing", + "Category": "C51", + "Value": 87 + }, + { + "Group": "Clothing", + "Category": "C52", + "Value": 63 + }, + { + "Group": "Clothing", + "Category": "C53", + "Value": 77 + }, + { + "Group": "Clothing", + "Category": "C54", + "Value": 65 + }, + { + "Group": "Clothing", + "Category": "C55", + "Value": 98 + }, + { + "Group": "Clothing", + "Category": "C56", + "Value": 86 + }, + { + "Group": "Clothing", + "Category": "C57", + "Value": 72 + }, + { + "Group": "Clothing", + "Category": "C58", + "Value": 21 + }, + { + "Group": "Clothing", + "Category": "C59", + "Value": 6 + }, + { + "Group": "Clothing", + "Category": "C60", + "Value": 25 + }, + { + "Group": "Clothing", + "Category": "C61", + "Value": 93 + }, + { + "Group": "Clothing", + "Category": "C62", + "Value": 79 + }, + { + "Group": "Clothing", + "Category": "C63", + "Value": 27 + }, + { + "Group": "Clothing", + "Category": "C64", + "Value": 95 + }, + { + "Group": "Clothing", + "Category": "C65", + "Value": 78 + }, + { + "Group": "Clothing", + "Category": "C66", + "Value": 53 + }, + { + "Group": "Clothing", + "Category": "C67", + "Value": 35 + }, + { + "Group": "Clothing", + "Category": "C68", + "Value": 70 + }, + { + "Group": "Clothing", + "Category": "C69", + "Value": 63 + }, + { + "Group": "Clothing", + "Category": "C70", + "Value": 2 + }, + { + "Group": "Clothing", + "Category": "C71", + "Value": 95 + }, + { + "Group": "Clothing", + "Category": "C72", + "Value": 11 + }, + { + "Group": "Clothing", + "Category": "C73", + "Value": 55 + }, + { + "Group": "Clothing", + "Category": "C74", + "Value": 99 + }, + { + "Group": "Clothing", + "Category": "C75", + "Value": 27 + }, + { + "Group": "Clothing", + "Category": "C76", + "Value": 26 + }, + { + "Group": "Clothing", + "Category": "C77", + "Value": 33 + }, + { + "Group": "Clothing", + "Category": "C78", + "Value": 6 + }, + { + "Group": "Clothing", + "Category": "C79", + "Value": 92 + }, + { + "Group": "Clothing", + "Category": "C80", + "Value": 64 + }, + { + "Group": "Food", + "Category": "C01", + "Value": 94 + }, + { + "Group": "Food", + "Category": "C02", + "Value": 66 + }, + { + "Group": "Food", + "Category": "C03", + "Value": 33 + }, + { + "Group": "Food", + "Category": "C04", + "Value": 80 + }, + { + "Group": "Food", + "Category": "C05", + "Value": 97 + }, + { + "Group": "Food", + "Category": "C06", + "Value": 90 + }, + { + "Group": "Food", + "Category": "C07", + "Value": 75 + }, + { + "Group": "Food", + "Category": "C08", + "Value": 22 + }, + { + "Group": "Food", + "Category": "C09", + "Value": 18 + }, + { + "Group": "Food", + "Category": "C10", + "Value": 69 + }, + { + "Group": "Food", + "Category": "C11", + "Value": 97 + }, + { + "Group": "Food", + "Category": "C12", + "Value": 44 + }, + { + "Group": "Food", + "Category": "C13", + "Value": 68 + }, + { + "Group": "Food", + "Category": "C14", + "Value": 31 + }, + { + "Group": "Food", + "Category": "C15", + "Value": 96 + }, + { + "Group": "Food", + "Category": "C16", + "Value": 3 + }, + { + "Group": "Food", + "Category": "C17", + "Value": 16 + }, + { + "Group": "Food", + "Category": "C18", + "Value": 2 + }, + { + "Group": "Food", + "Category": "C19", + "Value": 68 + }, + { + "Group": "Food", + "Category": "C20", + "Value": 62 + }, + { + "Group": "Food", + "Category": "C21", + "Value": 37 + }, + { + "Group": "Food", + "Category": "C22", + "Value": 29 + }, + { + "Group": "Food", + "Category": "C23", + "Value": 72 + }, + { + "Group": "Food", + "Category": "C24", + "Value": 3 + }, + { + "Group": "Food", + "Category": "C25", + "Value": 20 + }, + { + "Group": "Food", + "Category": "C26", + "Value": 82 + }, + { + "Group": "Food", + "Category": "C27", + "Value": 54 + }, + { + "Group": "Food", + "Category": "C28", + "Value": 39 + }, + { + "Group": "Food", + "Category": "C29", + "Value": 59 + }, + { + "Group": "Food", + "Category": "C30", + "Value": 83 + }, + { + "Group": "Food", + "Category": "C31", + "Value": 40 + }, + { + "Group": "Food", + "Category": "C32", + "Value": 51 + }, + { + "Group": "Food", + "Category": "C33", + "Value": 95 + }, + { + "Group": "Food", + "Category": "C34", + "Value": 40 + }, + { + "Group": "Food", + "Category": "C35", + "Value": 94 + }, + { + "Group": "Food", + "Category": "C36", + "Value": 15 + }, + { + "Group": "Food", + "Category": "C37", + "Value": 26 + }, + { + "Group": "Food", + "Category": "C38", + "Value": 68 + }, + { + "Group": "Food", + "Category": "C39", + "Value": 92 + }, + { + "Group": "Food", + "Category": "C40", + "Value": 53 + }, + { + "Group": "Food", + "Category": "C41", + "Value": 86 + }, + { + "Group": "Food", + "Category": "C42", + "Value": 61 + }, + { + "Group": "Food", + "Category": "C43", + "Value": 87 + }, + { + "Group": "Food", + "Category": "C44", + "Value": 35 + }, + { + "Group": "Food", + "Category": "C45", + "Value": 30 + }, + { + "Group": "Food", + "Category": "C46", + "Value": 43 + }, + { + "Group": "Food", + "Category": "C47", + "Value": 30 + }, + { + "Group": "Food", + "Category": "C48", + "Value": 75 + }, + { + "Group": "Food", + "Category": "C49", + "Value": 97 + }, + { + "Group": "Food", + "Category": "C50", + "Value": 82 + }, + { + "Group": "Food", + "Category": "C51", + "Value": 3 + }, + { + "Group": "Food", + "Category": "C52", + "Value": 46 + }, + { + "Group": "Food", + "Category": "C53", + "Value": 97 + }, + { + "Group": "Food", + "Category": "C54", + "Value": 57 + }, + { + "Group": "Food", + "Category": "C55", + "Value": 44 + }, + { + "Group": "Food", + "Category": "C56", + "Value": 51 + }, + { + "Group": "Food", + "Category": "C57", + "Value": 98 + }, + { + "Group": "Food", + "Category": "C58", + "Value": 63 + }, + { + "Group": "Food", + "Category": "C59", + "Value": 25 + }, + { + "Group": "Food", + "Category": "C60", + "Value": 23 + }, + { + "Group": "Food", + "Category": "C61", + "Value": 43 + }, + { + "Group": "Food", + "Category": "C62", + "Value": 99 + }, + { + "Group": "Food", + "Category": "C63", + "Value": 53 + }, + { + "Group": "Food", + "Category": "C64", + "Value": 33 + }, + { + "Group": "Food", + "Category": "C65", + "Value": 74 + }, + { + "Group": "Food", + "Category": "C66", + "Value": 35 + }, + { + "Group": "Food", + "Category": "C67", + "Value": 85 + }, + { + "Group": "Food", + "Category": "C68", + "Value": 83 + }, + { + "Group": "Food", + "Category": "C69", + "Value": 77 + }, + { + "Group": "Food", + "Category": "C70", + "Value": 46 + }, + { + "Group": "Food", + "Category": "C71", + "Value": 47 + }, + { + "Group": "Food", + "Category": "C72", + "Value": 74 + }, + { + "Group": "Food", + "Category": "C73", + "Value": 12 + }, + { + "Group": "Food", + "Category": "C74", + "Value": 97 + }, + { + "Group": "Food", + "Category": "C75", + "Value": 64 + }, + { + "Group": "Food", + "Category": "C76", + "Value": 87 + }, + { + "Group": "Food", + "Category": "C77", + "Value": 27 + }, + { + "Group": "Food", + "Category": "C78", + "Value": 98 + }, + { + "Group": "Food", + "Category": "C79", + "Value": 85 + }, + { + "Group": "Food", + "Category": "C80", + "Value": 59 + }, + { + "Group": "Books", + "Category": "C01", + "Value": 23 + }, + { + "Group": "Books", + "Category": "C02", + "Value": 42 + }, + { + "Group": "Books", + "Category": "C03", + "Value": 30 + }, + { + "Group": "Books", + "Category": "C04", + "Value": 59 + }, + { + "Group": "Books", + "Category": "C05", + "Value": 45 + }, + { + "Group": "Books", + "Category": "C06", + "Value": 24 + }, + { + "Group": "Books", + "Category": "C07", + "Value": 24 + }, + { + "Group": "Books", + "Category": "C08", + "Value": 50 + }, + { + "Group": "Books", + "Category": "C09", + "Value": 36 + }, + { + "Group": "Books", + "Category": "C10", + "Value": 62 + }, + { + "Group": "Books", + "Category": "C11", + "Value": 34 + }, + { + "Group": "Books", + "Category": "C12", + "Value": 8 + }, + { + "Group": "Books", + "Category": "C13", + "Value": 89 + }, + { + "Group": "Books", + "Category": "C14", + "Value": 3 + }, + { + "Group": "Books", + "Category": "C15", + "Value": 3 + }, + { + "Group": "Books", + "Category": "C16", + "Value": 75 + }, + { + "Group": "Books", + "Category": "C17", + "Value": 88 + }, + { + "Group": "Books", + "Category": "C18", + "Value": 16 + }, + { + "Group": "Books", + "Category": "C19", + "Value": 30 + }, + { + "Group": "Books", + "Category": "C20", + "Value": 63 + }, + { + "Group": "Books", + "Category": "C21", + "Value": 36 + }, + { + "Group": "Books", + "Category": "C22", + "Value": 83 + }, + { + "Group": "Books", + "Category": "C23", + "Value": 52 + }, + { + "Group": "Books", + "Category": "C24", + "Value": 13 + }, + { + "Group": "Books", + "Category": "C25", + "Value": 87 + }, + { + "Group": "Books", + "Category": "C26", + "Value": 90 + }, + { + "Group": "Books", + "Category": "C27", + "Value": 12 + }, + { + "Group": "Books", + "Category": "C28", + "Value": 27 + }, + { + "Group": "Books", + "Category": "C29", + "Value": 76 + }, + { + "Group": "Books", + "Category": "C30", + "Value": 71 + }, + { + "Group": "Books", + "Category": "C31", + "Value": 14 + }, + { + "Group": "Books", + "Category": "C32", + "Value": 94 + }, + { + "Group": "Books", + "Category": "C33", + "Value": 42 + }, + { + "Group": "Books", + "Category": "C34", + "Value": 45 + }, + { + "Group": "Books", + "Category": "C35", + "Value": 9 + }, + { + "Group": "Books", + "Category": "C36", + "Value": 22 + }, + { + "Group": "Books", + "Category": "C37", + "Value": 0 + }, + { + "Group": "Books", + "Category": "C38", + "Value": 54 + }, + { + "Group": "Books", + "Category": "C39", + "Value": 43 + }, + { + "Group": "Books", + "Category": "C40", + "Value": 25 + }, + { + "Group": "Books", + "Category": "C41", + "Value": 71 + }, + { + "Group": "Books", + "Category": "C42", + "Value": 56 + }, + { + "Group": "Books", + "Category": "C43", + "Value": 76 + }, + { + "Group": "Books", + "Category": "C44", + "Value": 25 + }, + { + "Group": "Books", + "Category": "C45", + "Value": 42 + }, + { + "Group": "Books", + "Category": "C46", + "Value": 78 + }, + { + "Group": "Books", + "Category": "C47", + "Value": 72 + }, + { + "Group": "Books", + "Category": "C48", + "Value": 44 + }, + { + "Group": "Books", + "Category": "C49", + "Value": 70 + }, + { + "Group": "Books", + "Category": "C50", + "Value": 81 + }, + { + "Group": "Books", + "Category": "C51", + "Value": 44 + }, + { + "Group": "Books", + "Category": "C52", + "Value": 29 + }, + { + "Group": "Books", + "Category": "C53", + "Value": 26 + }, + { + "Group": "Books", + "Category": "C54", + "Value": 74 + }, + { + "Group": "Books", + "Category": "C55", + "Value": 60 + }, + { + "Group": "Books", + "Category": "C56", + "Value": 7 + }, + { + "Group": "Books", + "Category": "C57", + "Value": 60 + }, + { + "Group": "Books", + "Category": "C58", + "Value": 67 + }, + { + "Group": "Books", + "Category": "C59", + "Value": 64 + }, + { + "Group": "Books", + "Category": "C60", + "Value": 98 + }, + { + "Group": "Books", + "Category": "C61", + "Value": 25 + }, + { + "Group": "Books", + "Category": "C62", + "Value": 76 + }, + { + "Group": "Books", + "Category": "C63", + "Value": 84 + }, + { + "Group": "Books", + "Category": "C64", + "Value": 100 + }, + { + "Group": "Books", + "Category": "C65", + "Value": 35 + }, + { + "Group": "Books", + "Category": "C66", + "Value": 25 + }, + { + "Group": "Books", + "Category": "C67", + "Value": 89 + }, + { + "Group": "Books", + "Category": "C68", + "Value": 9 + }, + { + "Group": "Books", + "Category": "C69", + "Value": 57 + }, + { + "Group": "Books", + "Category": "C70", + "Value": 74 + }, + { + "Group": "Books", + "Category": "C71", + "Value": 27 + }, + { + "Group": "Books", + "Category": "C72", + "Value": 56 + }, + { + "Group": "Books", + "Category": "C73", + "Value": 28 + }, + { + "Group": "Books", + "Category": "C74", + "Value": 16 + }, + { + "Group": "Books", + "Category": "C75", + "Value": 73 + }, + { + "Group": "Books", + "Category": "C76", + "Value": 82 + }, + { + "Group": "Books", + "Category": "C77", + "Value": 77 + }, + { + "Group": "Books", + "Category": "C78", + "Value": 54 + }, + { + "Group": "Books", + "Category": "C79", + "Value": 83 + }, + { + "Group": "Books", + "Category": "C80", + "Value": 98 + }, + { + "Group": "Sports", + "Category": "C01", + "Value": 80 + }, + { + "Group": "Sports", + "Category": "C02", + "Value": 49 + }, + { + "Group": "Sports", + "Category": "C03", + "Value": 37 + }, + { + "Group": "Sports", + "Category": "C04", + "Value": 70 + }, + { + "Group": "Sports", + "Category": "C05", + "Value": 61 + }, + { + "Group": "Sports", + "Category": "C06", + "Value": 87 + }, + { + "Group": "Sports", + "Category": "C07", + "Value": 88 + }, + { + "Group": "Sports", + "Category": "C08", + "Value": 86 + }, + { + "Group": "Sports", + "Category": "C09", + "Value": 52 + }, + { + "Group": "Sports", + "Category": "C10", + "Value": 18 + }, + { + "Group": "Sports", + "Category": "C11", + "Value": 29 + }, + { + "Group": "Sports", + "Category": "C12", + "Value": 31 + }, + { + "Group": "Sports", + "Category": "C13", + "Value": 13 + }, + { + "Group": "Sports", + "Category": "C14", + "Value": 40 + }, + { + "Group": "Sports", + "Category": "C15", + "Value": 2 + }, + { + "Group": "Sports", + "Category": "C16", + "Value": 94 + }, + { + "Group": "Sports", + "Category": "C17", + "Value": 63 + }, + { + "Group": "Sports", + "Category": "C18", + "Value": 69 + }, + { + "Group": "Sports", + "Category": "C19", + "Value": 45 + }, + { + "Group": "Sports", + "Category": "C20", + "Value": 70 + }, + { + "Group": "Sports", + "Category": "C21", + "Value": 85 + }, + { + "Group": "Sports", + "Category": "C22", + "Value": 65 + }, + { + "Group": "Sports", + "Category": "C23", + "Value": 60 + }, + { + "Group": "Sports", + "Category": "C24", + "Value": 10 + }, + { + "Group": "Sports", + "Category": "C25", + "Value": 91 + }, + { + "Group": "Sports", + "Category": "C26", + "Value": 47 + }, + { + "Group": "Sports", + "Category": "C27", + "Value": 37 + }, + { + "Group": "Sports", + "Category": "C28", + "Value": 78 + }, + { + "Group": "Sports", + "Category": "C29", + "Value": 7 + }, + { + "Group": "Sports", + "Category": "C30", + "Value": 80 + }, + { + "Group": "Sports", + "Category": "C31", + "Value": 45 + }, + { + "Group": "Sports", + "Category": "C32", + "Value": 96 + }, + { + "Group": "Sports", + "Category": "C33", + "Value": 23 + }, + { + "Group": "Sports", + "Category": "C34", + "Value": 50 + }, + { + "Group": "Sports", + "Category": "C35", + "Value": 80 + }, + { + "Group": "Sports", + "Category": "C36", + "Value": 30 + }, + { + "Group": "Sports", + "Category": "C37", + "Value": 42 + }, + { + "Group": "Sports", + "Category": "C38", + "Value": 59 + }, + { + "Group": "Sports", + "Category": "C39", + "Value": 22 + }, + { + "Group": "Sports", + "Category": "C40", + "Value": 38 + }, + { + "Group": "Sports", + "Category": "C41", + "Value": 79 + }, + { + "Group": "Sports", + "Category": "C42", + "Value": 6 + }, + { + "Group": "Sports", + "Category": "C43", + "Value": 79 + }, + { + "Group": "Sports", + "Category": "C44", + "Value": 97 + }, + { + "Group": "Sports", + "Category": "C45", + "Value": 52 + }, + { + "Group": "Sports", + "Category": "C46", + "Value": 37 + }, + { + "Group": "Sports", + "Category": "C47", + "Value": 90 + }, + { + "Group": "Sports", + "Category": "C48", + "Value": 59 + }, + { + "Group": "Sports", + "Category": "C49", + "Value": 45 + }, + { + "Group": "Sports", + "Category": "C50", + "Value": 50 + }, + { + "Group": "Sports", + "Category": "C51", + "Value": 97 + }, + { + "Group": "Sports", + "Category": "C52", + "Value": 92 + }, + { + "Group": "Sports", + "Category": "C53", + "Value": 81 + }, + { + "Group": "Sports", + "Category": "C54", + "Value": 3 + }, + { + "Group": "Sports", + "Category": "C55", + "Value": 46 + }, + { + "Group": "Sports", + "Category": "C56", + "Value": 40 + }, + { + "Group": "Sports", + "Category": "C57", + "Value": 18 + }, + { + "Group": "Sports", + "Category": "C58", + "Value": 45 + }, + { + "Group": "Sports", + "Category": "C59", + "Value": 2 + }, + { + "Group": "Sports", + "Category": "C60", + "Value": 37 + }, + { + "Group": "Sports", + "Category": "C61", + "Value": 56 + }, + { + "Group": "Sports", + "Category": "C62", + "Value": 87 + }, + { + "Group": "Sports", + "Category": "C63", + "Value": 21 + }, + { + "Group": "Sports", + "Category": "C64", + "Value": 64 + }, + { + "Group": "Sports", + "Category": "C65", + "Value": 50 + }, + { + "Group": "Sports", + "Category": "C66", + "Value": 87 + }, + { + "Group": "Sports", + "Category": "C67", + "Value": 25 + }, + { + "Group": "Sports", + "Category": "C68", + "Value": 67 + }, + { + "Group": "Sports", + "Category": "C69", + "Value": 60 + }, + { + "Group": "Sports", + "Category": "C70", + "Value": 12 + }, + { + "Group": "Sports", + "Category": "C71", + "Value": 14 + }, + { + "Group": "Sports", + "Category": "C72", + "Value": 39 + }, + { + "Group": "Sports", + "Category": "C73", + "Value": 14 + }, + { + "Group": "Sports", + "Category": "C74", + "Value": 94 + }, + { + "Group": "Sports", + "Category": "C75", + "Value": 69 + }, + { + "Group": "Sports", + "Category": "C76", + "Value": 87 + }, + { + "Group": "Sports", + "Category": "C77", + "Value": 39 + }, + { + "Group": "Sports", + "Category": "C78", + "Value": 55 + }, + { + "Group": "Sports", + "Category": "C79", + "Value": 95 + }, + { + "Group": "Sports", + "Category": "C80", + "Value": 45 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/histogram/00-card49.flint.json b/test-harness/excel/evaluations/inputs/histogram/00-card49.flint.json new file mode 100644 index 00000000..90f06ac9 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/histogram/00-card49.flint.json @@ -0,0 +1,319 @@ +{ + "semantic_types": { + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Histogram", + "encodings": { + "x": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Value": 12 + }, + { + "Value": 26 + }, + { + "Value": 23 + }, + { + "Value": 41 + }, + { + "Value": 59 + }, + { + "Value": 52 + }, + { + "Value": 60 + }, + { + "Value": 65 + }, + { + "Value": 66 + }, + { + "Value": 48 + }, + { + "Value": 50 + }, + { + "Value": 57 + }, + { + "Value": 52 + }, + { + "Value": 41 + }, + { + "Value": 30 + }, + { + "Value": 72 + }, + { + "Value": 53 + }, + { + "Value": 45 + }, + { + "Value": 17 + }, + { + "Value": 63 + }, + { + "Value": 60 + }, + { + "Value": 31 + }, + { + "Value": 63 + }, + { + "Value": 60 + }, + { + "Value": 19 + }, + { + "Value": 63 + }, + { + "Value": 81 + }, + { + "Value": 40 + }, + { + "Value": 64 + }, + { + "Value": 52 + }, + { + "Value": 53 + }, + { + "Value": 37 + }, + { + "Value": 38 + }, + { + "Value": 45 + }, + { + "Value": 18 + }, + { + "Value": 37 + }, + { + "Value": 41 + }, + { + "Value": 51 + }, + { + "Value": 70 + }, + { + "Value": 63 + }, + { + "Value": 69 + }, + { + "Value": 34 + }, + { + "Value": 60 + }, + { + "Value": 59 + }, + { + "Value": 41 + }, + { + "Value": 26 + }, + { + "Value": 43 + }, + { + "Value": 35 + }, + { + "Value": 43 + }, + { + "Value": 57 + }, + { + "Value": 53 + }, + { + "Value": 46 + }, + { + "Value": 41 + }, + { + "Value": 51 + }, + { + "Value": 42 + }, + { + "Value": 38 + }, + { + "Value": 47 + }, + { + "Value": 52 + }, + { + "Value": 55 + }, + { + "Value": 54 + }, + { + "Value": 60 + }, + { + "Value": 45 + }, + { + "Value": 60 + }, + { + "Value": 78 + }, + { + "Value": 71 + }, + { + "Value": 55 + }, + { + "Value": 21 + }, + { + "Value": 69 + }, + { + "Value": 57 + }, + { + "Value": 51 + }, + { + "Value": 69 + }, + { + "Value": 49 + }, + { + "Value": 27 + }, + { + "Value": 62 + }, + { + "Value": 43 + }, + { + "Value": 36 + }, + { + "Value": 66 + }, + { + "Value": 47 + }, + { + "Value": 37 + }, + { + "Value": 52 + }, + { + "Value": 23 + }, + { + "Value": 46 + }, + { + "Value": 39 + }, + { + "Value": 55 + }, + { + "Value": 51 + }, + { + "Value": 49 + }, + { + "Value": 56 + }, + { + "Value": 63 + }, + { + "Value": 75 + }, + { + "Value": 68 + }, + { + "Value": 59 + }, + { + "Value": 42 + }, + { + "Value": 61 + }, + { + "Value": 42 + }, + { + "Value": 30 + }, + { + "Value": 37 + }, + { + "Value": 78 + }, + { + "Value": 68 + }, + { + "Value": 64 + }, + { + "Value": 59 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/histogram/01-card42.flint.json b/test-harness/excel/evaluations/inputs/histogram/01-card42.flint.json new file mode 100644 index 00000000..2015b206 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/histogram/01-card42.flint.json @@ -0,0 +1,821 @@ +{ + "semantic_types": { + "Height": "Quantity", + "Gender": "Category" + }, + "chart_spec": { + "chartType": "Histogram", + "encodings": { + "x": "Height", + "color": "Gender" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Height": 176, + "Gender": "Male" + }, + { + "Height": 160, + "Gender": "Female" + }, + { + "Height": 169, + "Gender": "Male" + }, + { + "Height": 160, + "Gender": "Female" + }, + { + "Height": 161, + "Gender": "Male" + }, + { + "Height": 155, + "Gender": "Female" + }, + { + "Height": 189, + "Gender": "Male" + }, + { + "Height": 160, + "Gender": "Female" + }, + { + "Height": 160, + "Gender": "Male" + }, + { + "Height": 155, + "Gender": "Female" + }, + { + "Height": 181, + "Gender": "Male" + }, + { + "Height": 171, + "Gender": "Female" + }, + { + "Height": 160, + "Gender": "Male" + }, + { + "Height": 168, + "Gender": "Female" + }, + { + "Height": 167, + "Gender": "Male" + }, + { + "Height": 172, + "Gender": "Female" + }, + { + "Height": 166, + "Gender": "Male" + }, + { + "Height": 160, + "Gender": "Female" + }, + { + "Height": 158, + "Gender": "Male" + }, + { + "Height": 168, + "Gender": "Female" + }, + { + "Height": 176, + "Gender": "Male" + }, + { + "Height": 147, + "Gender": "Female" + }, + { + "Height": 155, + "Gender": "Male" + }, + { + "Height": 153, + "Gender": "Female" + }, + { + "Height": 156, + "Gender": "Male" + }, + { + "Height": 152, + "Gender": "Female" + }, + { + "Height": 181, + "Gender": "Male" + }, + { + "Height": 166, + "Gender": "Female" + }, + { + "Height": 170, + "Gender": "Male" + }, + { + "Height": 145, + "Gender": "Female" + }, + { + "Height": 162, + "Gender": "Male" + }, + { + "Height": 158, + "Gender": "Female" + }, + { + "Height": 174, + "Gender": "Male" + }, + { + "Height": 152, + "Gender": "Female" + }, + { + "Height": 160, + "Gender": "Male" + }, + { + "Height": 164, + "Gender": "Female" + }, + { + "Height": 169, + "Gender": "Male" + }, + { + "Height": 157, + "Gender": "Female" + }, + { + "Height": 164, + "Gender": "Male" + }, + { + "Height": 161, + "Gender": "Female" + }, + { + "Height": 162, + "Gender": "Male" + }, + { + "Height": 158, + "Gender": "Female" + }, + { + "Height": 176, + "Gender": "Male" + }, + { + "Height": 160, + "Gender": "Female" + }, + { + "Height": 170, + "Gender": "Male" + }, + { + "Height": 170, + "Gender": "Female" + }, + { + "Height": 180, + "Gender": "Male" + }, + { + "Height": 154, + "Gender": "Female" + }, + { + "Height": 174, + "Gender": "Male" + }, + { + "Height": 169, + "Gender": "Female" + }, + { + "Height": 174, + "Gender": "Male" + }, + { + "Height": 156, + "Gender": "Female" + }, + { + "Height": 168, + "Gender": "Male" + }, + { + "Height": 155, + "Gender": "Female" + }, + { + "Height": 173, + "Gender": "Male" + }, + { + "Height": 140, + "Gender": "Female" + }, + { + "Height": 173, + "Gender": "Male" + }, + { + "Height": 161, + "Gender": "Female" + }, + { + "Height": 164, + "Gender": "Male" + }, + { + "Height": 174, + "Gender": "Female" + }, + { + "Height": 169, + "Gender": "Male" + }, + { + "Height": 153, + "Gender": "Female" + }, + { + "Height": 156, + "Gender": "Male" + }, + { + "Height": 160, + "Gender": "Female" + }, + { + "Height": 163, + "Gender": "Male" + }, + { + "Height": 168, + "Gender": "Female" + }, + { + "Height": 170, + "Gender": "Male" + }, + { + "Height": 168, + "Gender": "Female" + }, + { + "Height": 168, + "Gender": "Male" + }, + { + "Height": 157, + "Gender": "Female" + }, + { + "Height": 163, + "Gender": "Male" + }, + { + "Height": 152, + "Gender": "Female" + }, + { + "Height": 180, + "Gender": "Male" + }, + { + "Height": 172, + "Gender": "Female" + }, + { + "Height": 174, + "Gender": "Male" + }, + { + "Height": 156, + "Gender": "Female" + }, + { + "Height": 170, + "Gender": "Male" + }, + { + "Height": 164, + "Gender": "Female" + }, + { + "Height": 150, + "Gender": "Male" + }, + { + "Height": 165, + "Gender": "Female" + }, + { + "Height": 177, + "Gender": "Male" + }, + { + "Height": 163, + "Gender": "Female" + }, + { + "Height": 176, + "Gender": "Male" + }, + { + "Height": 167, + "Gender": "Female" + }, + { + "Height": 164, + "Gender": "Male" + }, + { + "Height": 158, + "Gender": "Female" + }, + { + "Height": 172, + "Gender": "Male" + }, + { + "Height": 162, + "Gender": "Female" + }, + { + "Height": 161, + "Gender": "Male" + }, + { + "Height": 159, + "Gender": "Female" + }, + { + "Height": 169, + "Gender": "Male" + }, + { + "Height": 155, + "Gender": "Female" + }, + { + "Height": 167, + "Gender": "Male" + }, + { + "Height": 173, + "Gender": "Female" + }, + { + "Height": 164, + "Gender": "Male" + }, + { + "Height": 153, + "Gender": "Female" + }, + { + "Height": 162, + "Gender": "Male" + }, + { + "Height": 157, + "Gender": "Female" + }, + { + "Height": 165, + "Gender": "Male" + }, + { + "Height": 158, + "Gender": "Female" + }, + { + "Height": 170, + "Gender": "Male" + }, + { + "Height": 159, + "Gender": "Female" + }, + { + "Height": 177, + "Gender": "Male" + }, + { + "Height": 161, + "Gender": "Female" + }, + { + "Height": 179, + "Gender": "Male" + }, + { + "Height": 154, + "Gender": "Female" + }, + { + "Height": 163, + "Gender": "Male" + }, + { + "Height": 170, + "Gender": "Female" + }, + { + "Height": 180, + "Gender": "Male" + }, + { + "Height": 163, + "Gender": "Female" + }, + { + "Height": 180, + "Gender": "Male" + }, + { + "Height": 164, + "Gender": "Female" + }, + { + "Height": 176, + "Gender": "Male" + }, + { + "Height": 149, + "Gender": "Female" + }, + { + "Height": 180, + "Gender": "Male" + }, + { + "Height": 150, + "Gender": "Female" + }, + { + "Height": 170, + "Gender": "Male" + }, + { + "Height": 159, + "Gender": "Female" + }, + { + "Height": 170, + "Gender": "Male" + }, + { + "Height": 174, + "Gender": "Female" + }, + { + "Height": 161, + "Gender": "Male" + }, + { + "Height": 154, + "Gender": "Female" + }, + { + "Height": 184, + "Gender": "Male" + }, + { + "Height": 156, + "Gender": "Female" + }, + { + "Height": 165, + "Gender": "Male" + }, + { + "Height": 146, + "Gender": "Female" + }, + { + "Height": 158, + "Gender": "Male" + }, + { + "Height": 160, + "Gender": "Female" + }, + { + "Height": 165, + "Gender": "Male" + }, + { + "Height": 159, + "Gender": "Female" + }, + { + "Height": 177, + "Gender": "Male" + }, + { + "Height": 160, + "Gender": "Female" + }, + { + "Height": 170, + "Gender": "Male" + }, + { + "Height": 163, + "Gender": "Female" + }, + { + "Height": 173, + "Gender": "Male" + }, + { + "Height": 162, + "Gender": "Female" + }, + { + "Height": 162, + "Gender": "Male" + }, + { + "Height": 161, + "Gender": "Female" + }, + { + "Height": 197, + "Gender": "Male" + }, + { + "Height": 144, + "Gender": "Female" + }, + { + "Height": 165, + "Gender": "Male" + }, + { + "Height": 163, + "Gender": "Female" + }, + { + "Height": 171, + "Gender": "Male" + }, + { + "Height": 167, + "Gender": "Female" + }, + { + "Height": 167, + "Gender": "Male" + }, + { + "Height": 160, + "Gender": "Female" + }, + { + "Height": 167, + "Gender": "Male" + }, + { + "Height": 154, + "Gender": "Female" + }, + { + "Height": 163, + "Gender": "Male" + }, + { + "Height": 179, + "Gender": "Female" + }, + { + "Height": 164, + "Gender": "Male" + }, + { + "Height": 157, + "Gender": "Female" + }, + { + "Height": 160, + "Gender": "Male" + }, + { + "Height": 166, + "Gender": "Female" + }, + { + "Height": 176, + "Gender": "Male" + }, + { + "Height": 159, + "Gender": "Female" + }, + { + "Height": 164, + "Gender": "Male" + }, + { + "Height": 163, + "Gender": "Female" + }, + { + "Height": 170, + "Gender": "Male" + }, + { + "Height": 152, + "Gender": "Female" + }, + { + "Height": 166, + "Gender": "Male" + }, + { + "Height": 164, + "Gender": "Female" + }, + { + "Height": 182, + "Gender": "Male" + }, + { + "Height": 148, + "Gender": "Female" + }, + { + "Height": 166, + "Gender": "Male" + }, + { + "Height": 145, + "Gender": "Female" + }, + { + "Height": 189, + "Gender": "Male" + }, + { + "Height": 163, + "Gender": "Female" + }, + { + "Height": 154, + "Gender": "Male" + }, + { + "Height": 169, + "Gender": "Female" + }, + { + "Height": 186, + "Gender": "Male" + }, + { + "Height": 153, + "Gender": "Female" + }, + { + "Height": 177, + "Gender": "Male" + }, + { + "Height": 157, + "Gender": "Female" + }, + { + "Height": 168, + "Gender": "Male" + }, + { + "Height": 167, + "Gender": "Female" + }, + { + "Height": 176, + "Gender": "Male" + }, + { + "Height": 167, + "Gender": "Female" + }, + { + "Height": 175, + "Gender": "Male" + }, + { + "Height": 163, + "Gender": "Female" + }, + { + "Height": 161, + "Gender": "Male" + }, + { + "Height": 162, + "Gender": "Female" + }, + { + "Height": 169, + "Gender": "Male" + }, + { + "Height": 165, + "Gender": "Female" + }, + { + "Height": 161, + "Gender": "Male" + }, + { + "Height": 153, + "Gender": "Female" + }, + { + "Height": 177, + "Gender": "Male" + }, + { + "Height": 169, + "Gender": "Female" + }, + { + "Height": 180, + "Gender": "Male" + }, + { + "Height": 158, + "Gender": "Female" + }, + { + "Height": 177, + "Gender": "Male" + }, + { + "Height": 158, + "Gender": "Female" + }, + { + "Height": 162, + "Gender": "Male" + }, + { + "Height": 150, + "Gender": "Female" + }, + { + "Height": 162, + "Gender": "Male" + }, + { + "Height": 169, + "Gender": "Female" + }, + { + "Height": 171, + "Gender": "Male" + }, + { + "Height": 159, + "Gender": "Female" + }, + { + "Height": 171, + "Gender": "Male" + }, + { + "Height": 159, + "Gender": "Female" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/histogram/02-card997.flint.json b/test-harness/excel/evaluations/inputs/histogram/02-card997.flint.json new file mode 100644 index 00000000..1f1d92d6 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/histogram/02-card997.flint.json @@ -0,0 +1,3019 @@ +{ + "semantic_types": { + "Income": "Amount" + }, + "chart_spec": { + "chartType": "Histogram", + "encodings": { + "x": "Income" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Income": 44532 + }, + { + "Income": 122272 + }, + { + "Income": 78688 + }, + { + "Income": 168681 + }, + { + "Income": 144659 + }, + { + "Income": 149832 + }, + { + "Income": 138785 + }, + { + "Income": 57118 + }, + { + "Income": 168530 + }, + { + "Income": 127472 + }, + { + "Income": 177751 + }, + { + "Income": 125212 + }, + { + "Income": 173426 + }, + { + "Income": 148053 + }, + { + "Income": 133132 + }, + { + "Income": 82366 + }, + { + "Income": 66406 + }, + { + "Income": 27748 + }, + { + "Income": 98929 + }, + { + "Income": 163892 + }, + { + "Income": 105495 + }, + { + "Income": 181159 + }, + { + "Income": 165383 + }, + { + "Income": 145503 + }, + { + "Income": 111565 + }, + { + "Income": 137993 + }, + { + "Income": 68512 + }, + { + "Income": 134350 + }, + { + "Income": 48154 + }, + { + "Income": 169679 + }, + { + "Income": 169623 + }, + { + "Income": 130035 + }, + { + "Income": 64525 + }, + { + "Income": 97838 + }, + { + "Income": 187381 + }, + { + "Income": 157495 + }, + { + "Income": 58202 + }, + { + "Income": 21024 + }, + { + "Income": 135574 + }, + { + "Income": 84109 + }, + { + "Income": 27099 + }, + { + "Income": 165677 + }, + { + "Income": 61380 + }, + { + "Income": 157860 + }, + { + "Income": 75629 + }, + { + "Income": 49287 + }, + { + "Income": 130495 + }, + { + "Income": 42070 + }, + { + "Income": 143560 + }, + { + "Income": 38020 + }, + { + "Income": 116026 + }, + { + "Income": 49799 + }, + { + "Income": 97383 + }, + { + "Income": 100163 + }, + { + "Income": 21399 + }, + { + "Income": 130756 + }, + { + "Income": 111676 + }, + { + "Income": 193163 + }, + { + "Income": 126828 + }, + { + "Income": 155080 + }, + { + "Income": 157384 + }, + { + "Income": 165781 + }, + { + "Income": 176592 + }, + { + "Income": 89144 + }, + { + "Income": 41567 + }, + { + "Income": 162830 + }, + { + "Income": 91353 + }, + { + "Income": 82765 + }, + { + "Income": 112900 + }, + { + "Income": 71155 + }, + { + "Income": 100459 + }, + { + "Income": 139265 + }, + { + "Income": 28251 + }, + { + "Income": 93137 + }, + { + "Income": 186522 + }, + { + "Income": 116457 + }, + { + "Income": 101105 + }, + { + "Income": 188760 + }, + { + "Income": 106063 + }, + { + "Income": 187351 + }, + { + "Income": 186272 + }, + { + "Income": 56219 + }, + { + "Income": 178240 + }, + { + "Income": 52112 + }, + { + "Income": 89812 + }, + { + "Income": 110430 + }, + { + "Income": 145001 + }, + { + "Income": 137910 + }, + { + "Income": 116225 + }, + { + "Income": 152238 + }, + { + "Income": 78824 + }, + { + "Income": 122198 + }, + { + "Income": 100321 + }, + { + "Income": 153940 + }, + { + "Income": 74080 + }, + { + "Income": 122765 + }, + { + "Income": 96188 + }, + { + "Income": 167549 + }, + { + "Income": 195143 + }, + { + "Income": 109013 + }, + { + "Income": 73112 + }, + { + "Income": 53512 + }, + { + "Income": 29024 + }, + { + "Income": 133948 + }, + { + "Income": 119939 + }, + { + "Income": 114552 + }, + { + "Income": 107616 + }, + { + "Income": 183780 + }, + { + "Income": 118195 + }, + { + "Income": 139272 + }, + { + "Income": 136403 + }, + { + "Income": 168569 + }, + { + "Income": 66245 + }, + { + "Income": 24285 + }, + { + "Income": 30248 + }, + { + "Income": 176997 + }, + { + "Income": 53733 + }, + { + "Income": 151719 + }, + { + "Income": 176133 + }, + { + "Income": 99961 + }, + { + "Income": 38108 + }, + { + "Income": 166181 + }, + { + "Income": 66691 + }, + { + "Income": 141043 + }, + { + "Income": 29198 + }, + { + "Income": 163694 + }, + { + "Income": 22718 + }, + { + "Income": 153165 + }, + { + "Income": 184366 + }, + { + "Income": 52404 + }, + { + "Income": 142303 + }, + { + "Income": 138581 + }, + { + "Income": 58749 + }, + { + "Income": 27468 + }, + { + "Income": 82601 + }, + { + "Income": 55249 + }, + { + "Income": 74290 + }, + { + "Income": 48996 + }, + { + "Income": 91584 + }, + { + "Income": 198289 + }, + { + "Income": 56168 + }, + { + "Income": 38170 + }, + { + "Income": 127360 + }, + { + "Income": 104768 + }, + { + "Income": 193736 + }, + { + "Income": 39422 + }, + { + "Income": 105259 + }, + { + "Income": 165520 + }, + { + "Income": 122392 + }, + { + "Income": 129047 + }, + { + "Income": 186724 + }, + { + "Income": 87388 + }, + { + "Income": 45420 + }, + { + "Income": 111147 + }, + { + "Income": 122857 + }, + { + "Income": 195028 + }, + { + "Income": 151037 + }, + { + "Income": 52382 + }, + { + "Income": 126231 + }, + { + "Income": 197939 + }, + { + "Income": 127367 + }, + { + "Income": 37194 + }, + { + "Income": 104586 + }, + { + "Income": 190324 + }, + { + "Income": 111096 + }, + { + "Income": 169507 + }, + { + "Income": 168621 + }, + { + "Income": 28722 + }, + { + "Income": 92691 + }, + { + "Income": 74601 + }, + { + "Income": 63645 + }, + { + "Income": 69170 + }, + { + "Income": 40595 + }, + { + "Income": 198702 + }, + { + "Income": 162170 + }, + { + "Income": 153046 + }, + { + "Income": 171884 + }, + { + "Income": 152534 + }, + { + "Income": 192428 + }, + { + "Income": 193691 + }, + { + "Income": 178675 + }, + { + "Income": 169746 + }, + { + "Income": 36051 + }, + { + "Income": 146100 + }, + { + "Income": 63302 + }, + { + "Income": 63798 + }, + { + "Income": 106735 + }, + { + "Income": 137614 + }, + { + "Income": 181852 + }, + { + "Income": 113211 + }, + { + "Income": 79579 + }, + { + "Income": 30258 + }, + { + "Income": 157986 + }, + { + "Income": 31297 + }, + { + "Income": 163420 + }, + { + "Income": 107692 + }, + { + "Income": 23345 + }, + { + "Income": 77329 + }, + { + "Income": 195818 + }, + { + "Income": 121072 + }, + { + "Income": 75283 + }, + { + "Income": 179455 + }, + { + "Income": 136768 + }, + { + "Income": 178268 + }, + { + "Income": 163573 + }, + { + "Income": 154062 + }, + { + "Income": 140376 + }, + { + "Income": 156467 + }, + { + "Income": 68258 + }, + { + "Income": 190747 + }, + { + "Income": 22741 + }, + { + "Income": 190100 + }, + { + "Income": 138443 + }, + { + "Income": 76454 + }, + { + "Income": 62098 + }, + { + "Income": 167498 + }, + { + "Income": 65073 + }, + { + "Income": 122200 + }, + { + "Income": 139652 + }, + { + "Income": 46572 + }, + { + "Income": 28178 + }, + { + "Income": 132311 + }, + { + "Income": 155318 + }, + { + "Income": 189423 + }, + { + "Income": 94098 + }, + { + "Income": 149338 + }, + { + "Income": 122856 + }, + { + "Income": 177885 + }, + { + "Income": 28035 + }, + { + "Income": 59372 + }, + { + "Income": 69809 + }, + { + "Income": 153927 + }, + { + "Income": 34786 + }, + { + "Income": 129726 + }, + { + "Income": 85732 + }, + { + "Income": 125890 + }, + { + "Income": 61083 + }, + { + "Income": 198887 + }, + { + "Income": 28611 + }, + { + "Income": 25609 + }, + { + "Income": 145248 + }, + { + "Income": 151167 + }, + { + "Income": 77748 + }, + { + "Income": 30136 + }, + { + "Income": 98334 + }, + { + "Income": 57392 + }, + { + "Income": 89596 + }, + { + "Income": 83418 + }, + { + "Income": 111199 + }, + { + "Income": 106316 + }, + { + "Income": 105721 + }, + { + "Income": 192810 + }, + { + "Income": 143342 + }, + { + "Income": 148010 + }, + { + "Income": 118877 + }, + { + "Income": 92789 + }, + { + "Income": 101401 + }, + { + "Income": 118844 + }, + { + "Income": 72905 + }, + { + "Income": 175328 + }, + { + "Income": 74632 + }, + { + "Income": 44730 + }, + { + "Income": 28766 + }, + { + "Income": 106086 + }, + { + "Income": 21329 + }, + { + "Income": 43187 + }, + { + "Income": 198289 + }, + { + "Income": 68776 + }, + { + "Income": 85547 + }, + { + "Income": 67534 + }, + { + "Income": 90130 + }, + { + "Income": 61755 + }, + { + "Income": 162671 + }, + { + "Income": 114136 + }, + { + "Income": 136579 + }, + { + "Income": 68902 + }, + { + "Income": 39302 + }, + { + "Income": 68571 + }, + { + "Income": 47163 + }, + { + "Income": 70592 + }, + { + "Income": 186817 + }, + { + "Income": 29551 + }, + { + "Income": 162039 + }, + { + "Income": 112694 + }, + { + "Income": 34160 + }, + { + "Income": 48844 + }, + { + "Income": 60784 + }, + { + "Income": 37272 + }, + { + "Income": 148034 + }, + { + "Income": 165957 + }, + { + "Income": 83517 + }, + { + "Income": 145957 + }, + { + "Income": 171768 + }, + { + "Income": 184060 + }, + { + "Income": 132170 + }, + { + "Income": 127655 + }, + { + "Income": 192649 + }, + { + "Income": 130503 + }, + { + "Income": 190212 + }, + { + "Income": 32368 + }, + { + "Income": 164033 + }, + { + "Income": 150086 + }, + { + "Income": 98385 + }, + { + "Income": 192617 + }, + { + "Income": 129826 + }, + { + "Income": 153656 + }, + { + "Income": 154289 + }, + { + "Income": 178320 + }, + { + "Income": 138257 + }, + { + "Income": 181956 + }, + { + "Income": 62350 + }, + { + "Income": 79726 + }, + { + "Income": 160755 + }, + { + "Income": 130266 + }, + { + "Income": 160798 + }, + { + "Income": 137609 + }, + { + "Income": 91986 + }, + { + "Income": 102667 + }, + { + "Income": 156131 + }, + { + "Income": 172599 + }, + { + "Income": 106216 + }, + { + "Income": 59302 + }, + { + "Income": 150792 + }, + { + "Income": 82849 + }, + { + "Income": 81607 + }, + { + "Income": 90070 + }, + { + "Income": 130204 + }, + { + "Income": 191415 + }, + { + "Income": 85838 + }, + { + "Income": 103121 + }, + { + "Income": 60336 + }, + { + "Income": 64016 + }, + { + "Income": 170502 + }, + { + "Income": 139177 + }, + { + "Income": 167161 + }, + { + "Income": 156465 + }, + { + "Income": 20507 + }, + { + "Income": 81871 + }, + { + "Income": 23101 + }, + { + "Income": 117224 + }, + { + "Income": 196353 + }, + { + "Income": 105150 + }, + { + "Income": 129722 + }, + { + "Income": 23779 + }, + { + "Income": 167498 + }, + { + "Income": 59128 + }, + { + "Income": 106096 + }, + { + "Income": 21849 + }, + { + "Income": 135931 + }, + { + "Income": 158185 + }, + { + "Income": 130913 + }, + { + "Income": 60228 + }, + { + "Income": 43784 + }, + { + "Income": 160548 + }, + { + "Income": 76614 + }, + { + "Income": 54678 + }, + { + "Income": 189208 + }, + { + "Income": 86758 + }, + { + "Income": 78397 + }, + { + "Income": 140351 + }, + { + "Income": 93660 + }, + { + "Income": 169714 + }, + { + "Income": 42184 + }, + { + "Income": 83204 + }, + { + "Income": 112527 + }, + { + "Income": 98737 + }, + { + "Income": 166334 + }, + { + "Income": 121953 + }, + { + "Income": 126047 + }, + { + "Income": 176878 + }, + { + "Income": 36067 + }, + { + "Income": 61217 + }, + { + "Income": 113292 + }, + { + "Income": 185222 + }, + { + "Income": 53017 + }, + { + "Income": 169893 + }, + { + "Income": 177787 + }, + { + "Income": 191905 + }, + { + "Income": 52271 + }, + { + "Income": 57921 + }, + { + "Income": 166092 + }, + { + "Income": 191086 + }, + { + "Income": 138605 + }, + { + "Income": 86879 + }, + { + "Income": 141535 + }, + { + "Income": 190663 + }, + { + "Income": 53647 + }, + { + "Income": 140065 + }, + { + "Income": 146236 + }, + { + "Income": 181123 + }, + { + "Income": 92533 + }, + { + "Income": 119034 + }, + { + "Income": 22551 + }, + { + "Income": 50839 + }, + { + "Income": 105083 + }, + { + "Income": 88856 + }, + { + "Income": 63728 + }, + { + "Income": 192087 + }, + { + "Income": 48298 + }, + { + "Income": 72452 + }, + { + "Income": 122886 + }, + { + "Income": 144067 + }, + { + "Income": 94420 + }, + { + "Income": 162105 + }, + { + "Income": 144239 + }, + { + "Income": 104813 + }, + { + "Income": 52980 + }, + { + "Income": 91788 + }, + { + "Income": 193170 + }, + { + "Income": 73468 + }, + { + "Income": 104861 + }, + { + "Income": 138672 + }, + { + "Income": 131987 + }, + { + "Income": 112436 + }, + { + "Income": 189046 + }, + { + "Income": 63675 + }, + { + "Income": 22896 + }, + { + "Income": 96698 + }, + { + "Income": 110228 + }, + { + "Income": 167396 + }, + { + "Income": 152908 + }, + { + "Income": 183395 + }, + { + "Income": 120266 + }, + { + "Income": 25937 + }, + { + "Income": 80281 + }, + { + "Income": 122628 + }, + { + "Income": 122964 + }, + { + "Income": 197106 + }, + { + "Income": 161721 + }, + { + "Income": 163512 + }, + { + "Income": 28906 + }, + { + "Income": 122244 + }, + { + "Income": 149663 + }, + { + "Income": 181622 + }, + { + "Income": 194202 + }, + { + "Income": 139460 + }, + { + "Income": 56257 + }, + { + "Income": 87074 + }, + { + "Income": 179252 + }, + { + "Income": 152473 + }, + { + "Income": 72133 + }, + { + "Income": 164202 + }, + { + "Income": 98784 + }, + { + "Income": 67398 + }, + { + "Income": 143859 + }, + { + "Income": 195886 + }, + { + "Income": 172633 + }, + { + "Income": 149614 + }, + { + "Income": 74875 + }, + { + "Income": 160522 + }, + { + "Income": 170308 + }, + { + "Income": 123402 + }, + { + "Income": 175217 + }, + { + "Income": 193508 + }, + { + "Income": 164572 + }, + { + "Income": 198170 + }, + { + "Income": 48317 + }, + { + "Income": 23947 + }, + { + "Income": 118930 + }, + { + "Income": 84814 + }, + { + "Income": 170726 + }, + { + "Income": 131091 + }, + { + "Income": 173126 + }, + { + "Income": 153470 + }, + { + "Income": 83916 + }, + { + "Income": 24247 + }, + { + "Income": 124714 + }, + { + "Income": 84604 + }, + { + "Income": 60061 + }, + { + "Income": 121123 + }, + { + "Income": 26187 + }, + { + "Income": 142934 + }, + { + "Income": 127531 + }, + { + "Income": 98966 + }, + { + "Income": 56096 + }, + { + "Income": 87989 + }, + { + "Income": 78071 + }, + { + "Income": 61420 + }, + { + "Income": 107601 + }, + { + "Income": 106064 + }, + { + "Income": 24061 + }, + { + "Income": 60496 + }, + { + "Income": 54479 + }, + { + "Income": 89655 + }, + { + "Income": 175407 + }, + { + "Income": 142708 + }, + { + "Income": 118213 + }, + { + "Income": 89790 + }, + { + "Income": 104424 + }, + { + "Income": 175109 + }, + { + "Income": 170533 + }, + { + "Income": 135885 + }, + { + "Income": 106166 + }, + { + "Income": 117308 + }, + { + "Income": 183085 + }, + { + "Income": 128745 + }, + { + "Income": 154084 + }, + { + "Income": 153047 + }, + { + "Income": 181310 + }, + { + "Income": 174015 + }, + { + "Income": 148366 + }, + { + "Income": 162737 + }, + { + "Income": 132880 + }, + { + "Income": 179811 + }, + { + "Income": 175646 + }, + { + "Income": 197188 + }, + { + "Income": 94308 + }, + { + "Income": 69228 + }, + { + "Income": 108967 + }, + { + "Income": 32304 + }, + { + "Income": 179896 + }, + { + "Income": 171170 + }, + { + "Income": 27703 + }, + { + "Income": 70576 + }, + { + "Income": 96881 + }, + { + "Income": 122838 + }, + { + "Income": 61562 + }, + { + "Income": 151146 + }, + { + "Income": 95103 + }, + { + "Income": 112649 + }, + { + "Income": 167508 + }, + { + "Income": 40177 + }, + { + "Income": 21762 + }, + { + "Income": 121936 + }, + { + "Income": 197443 + }, + { + "Income": 65187 + }, + { + "Income": 64879 + }, + { + "Income": 93990 + }, + { + "Income": 132578 + }, + { + "Income": 132542 + }, + { + "Income": 81394 + }, + { + "Income": 116058 + }, + { + "Income": 45041 + }, + { + "Income": 48838 + }, + { + "Income": 135682 + }, + { + "Income": 102115 + }, + { + "Income": 67705 + }, + { + "Income": 74087 + }, + { + "Income": 53766 + }, + { + "Income": 166114 + }, + { + "Income": 197385 + }, + { + "Income": 173272 + }, + { + "Income": 84119 + }, + { + "Income": 193735 + }, + { + "Income": 23540 + }, + { + "Income": 112995 + }, + { + "Income": 40528 + }, + { + "Income": 154507 + }, + { + "Income": 53836 + }, + { + "Income": 88468 + }, + { + "Income": 198807 + }, + { + "Income": 131673 + }, + { + "Income": 41364 + }, + { + "Income": 171869 + }, + { + "Income": 86592 + }, + { + "Income": 169004 + }, + { + "Income": 177786 + }, + { + "Income": 168355 + }, + { + "Income": 67174 + }, + { + "Income": 156171 + }, + { + "Income": 120326 + }, + { + "Income": 142502 + }, + { + "Income": 77275 + }, + { + "Income": 186807 + }, + { + "Income": 36870 + }, + { + "Income": 47020 + }, + { + "Income": 186641 + }, + { + "Income": 139303 + }, + { + "Income": 131207 + }, + { + "Income": 136539 + }, + { + "Income": 102978 + }, + { + "Income": 169766 + }, + { + "Income": 22887 + }, + { + "Income": 122073 + }, + { + "Income": 160779 + }, + { + "Income": 168158 + }, + { + "Income": 171425 + }, + { + "Income": 171741 + }, + { + "Income": 88001 + }, + { + "Income": 86395 + }, + { + "Income": 103647 + }, + { + "Income": 77123 + }, + { + "Income": 154113 + }, + { + "Income": 94231 + }, + { + "Income": 42846 + }, + { + "Income": 57788 + }, + { + "Income": 88410 + }, + { + "Income": 121789 + }, + { + "Income": 73537 + }, + { + "Income": 176663 + }, + { + "Income": 21291 + }, + { + "Income": 124116 + }, + { + "Income": 115507 + }, + { + "Income": 145027 + }, + { + "Income": 24510 + }, + { + "Income": 32720 + }, + { + "Income": 136916 + }, + { + "Income": 141869 + }, + { + "Income": 57464 + }, + { + "Income": 38891 + }, + { + "Income": 179999 + }, + { + "Income": 104912 + }, + { + "Income": 104083 + }, + { + "Income": 199172 + }, + { + "Income": 143449 + }, + { + "Income": 141975 + }, + { + "Income": 34860 + }, + { + "Income": 108330 + }, + { + "Income": 118176 + }, + { + "Income": 185975 + }, + { + "Income": 97729 + }, + { + "Income": 152365 + }, + { + "Income": 59506 + }, + { + "Income": 161625 + }, + { + "Income": 172577 + }, + { + "Income": 97729 + }, + { + "Income": 154561 + }, + { + "Income": 71640 + }, + { + "Income": 159591 + }, + { + "Income": 178977 + }, + { + "Income": 22871 + }, + { + "Income": 38888 + }, + { + "Income": 133301 + }, + { + "Income": 42607 + }, + { + "Income": 183134 + }, + { + "Income": 56392 + }, + { + "Income": 197241 + }, + { + "Income": 91923 + }, + { + "Income": 128103 + }, + { + "Income": 164760 + }, + { + "Income": 118796 + }, + { + "Income": 161709 + }, + { + "Income": 149863 + }, + { + "Income": 128368 + }, + { + "Income": 118860 + }, + { + "Income": 156065 + }, + { + "Income": 136624 + }, + { + "Income": 92022 + }, + { + "Income": 166993 + }, + { + "Income": 37949 + }, + { + "Income": 187417 + }, + { + "Income": 43377 + }, + { + "Income": 159209 + }, + { + "Income": 69733 + }, + { + "Income": 135688 + }, + { + "Income": 35522 + }, + { + "Income": 77609 + }, + { + "Income": 27223 + }, + { + "Income": 99292 + }, + { + "Income": 135180 + }, + { + "Income": 134820 + }, + { + "Income": 26697 + }, + { + "Income": 78258 + }, + { + "Income": 143202 + }, + { + "Income": 140091 + }, + { + "Income": 56158 + }, + { + "Income": 50749 + }, + { + "Income": 41519 + }, + { + "Income": 76164 + }, + { + "Income": 46806 + }, + { + "Income": 185301 + }, + { + "Income": 107862 + }, + { + "Income": 170854 + }, + { + "Income": 122678 + }, + { + "Income": 74677 + }, + { + "Income": 71069 + }, + { + "Income": 101626 + }, + { + "Income": 131942 + }, + { + "Income": 66940 + }, + { + "Income": 179034 + }, + { + "Income": 88008 + }, + { + "Income": 26877 + }, + { + "Income": 38450 + }, + { + "Income": 147247 + }, + { + "Income": 81012 + }, + { + "Income": 163569 + }, + { + "Income": 90628 + }, + { + "Income": 137665 + }, + { + "Income": 129098 + }, + { + "Income": 148036 + }, + { + "Income": 195079 + }, + { + "Income": 110365 + }, + { + "Income": 123136 + }, + { + "Income": 30563 + }, + { + "Income": 69639 + }, + { + "Income": 190544 + }, + { + "Income": 38790 + }, + { + "Income": 101106 + }, + { + "Income": 25258 + }, + { + "Income": 185090 + }, + { + "Income": 168258 + }, + { + "Income": 51577 + }, + { + "Income": 98900 + }, + { + "Income": 39825 + }, + { + "Income": 41222 + }, + { + "Income": 123058 + }, + { + "Income": 153668 + }, + { + "Income": 178932 + }, + { + "Income": 172619 + }, + { + "Income": 95549 + }, + { + "Income": 50568 + }, + { + "Income": 56142 + }, + { + "Income": 138255 + }, + { + "Income": 157734 + }, + { + "Income": 123419 + }, + { + "Income": 101703 + }, + { + "Income": 155289 + }, + { + "Income": 58288 + }, + { + "Income": 199633 + }, + { + "Income": 158285 + }, + { + "Income": 199996 + }, + { + "Income": 134634 + }, + { + "Income": 136393 + }, + { + "Income": 184349 + }, + { + "Income": 134098 + }, + { + "Income": 128033 + }, + { + "Income": 72876 + }, + { + "Income": 43365 + }, + { + "Income": 141885 + }, + { + "Income": 136418 + }, + { + "Income": 64933 + }, + { + "Income": 110649 + }, + { + "Income": 34460 + }, + { + "Income": 57429 + }, + { + "Income": 173733 + }, + { + "Income": 88424 + }, + { + "Income": 183985 + }, + { + "Income": 140344 + }, + { + "Income": 164749 + }, + { + "Income": 112485 + }, + { + "Income": 113632 + }, + { + "Income": 137141 + }, + { + "Income": 154306 + }, + { + "Income": 107079 + }, + { + "Income": 154396 + }, + { + "Income": 174130 + }, + { + "Income": 110850 + }, + { + "Income": 169232 + }, + { + "Income": 48827 + }, + { + "Income": 133372 + }, + { + "Income": 156155 + }, + { + "Income": 40424 + }, + { + "Income": 21973 + }, + { + "Income": 52597 + }, + { + "Income": 136382 + }, + { + "Income": 164100 + }, + { + "Income": 187743 + }, + { + "Income": 122681 + }, + { + "Income": 119621 + }, + { + "Income": 175756 + }, + { + "Income": 71422 + }, + { + "Income": 91227 + }, + { + "Income": 140010 + }, + { + "Income": 120333 + }, + { + "Income": 72066 + }, + { + "Income": 116864 + }, + { + "Income": 87506 + }, + { + "Income": 46834 + }, + { + "Income": 126062 + }, + { + "Income": 66358 + }, + { + "Income": 111940 + }, + { + "Income": 135615 + }, + { + "Income": 64299 + }, + { + "Income": 67930 + }, + { + "Income": 78070 + }, + { + "Income": 38893 + }, + { + "Income": 31862 + }, + { + "Income": 126817 + }, + { + "Income": 154695 + }, + { + "Income": 153935 + }, + { + "Income": 166736 + }, + { + "Income": 37373 + }, + { + "Income": 44783 + }, + { + "Income": 29520 + }, + { + "Income": 176875 + }, + { + "Income": 165080 + }, + { + "Income": 106727 + }, + { + "Income": 181076 + }, + { + "Income": 198862 + }, + { + "Income": 152984 + }, + { + "Income": 27724 + }, + { + "Income": 54344 + }, + { + "Income": 164780 + }, + { + "Income": 92804 + }, + { + "Income": 176725 + }, + { + "Income": 149768 + }, + { + "Income": 148470 + }, + { + "Income": 115426 + }, + { + "Income": 38568 + }, + { + "Income": 152882 + }, + { + "Income": 111626 + }, + { + "Income": 69908 + }, + { + "Income": 28383 + }, + { + "Income": 152959 + }, + { + "Income": 141324 + }, + { + "Income": 79956 + }, + { + "Income": 53374 + }, + { + "Income": 52856 + }, + { + "Income": 178989 + }, + { + "Income": 47795 + }, + { + "Income": 64872 + }, + { + "Income": 156375 + }, + { + "Income": 140067 + }, + { + "Income": 180648 + }, + { + "Income": 38039 + }, + { + "Income": 79359 + }, + { + "Income": 102010 + }, + { + "Income": 101404 + }, + { + "Income": 183139 + }, + { + "Income": 142142 + }, + { + "Income": 144171 + }, + { + "Income": 37196 + }, + { + "Income": 134138 + }, + { + "Income": 82273 + }, + { + "Income": 127017 + }, + { + "Income": 90751 + }, + { + "Income": 59020 + }, + { + "Income": 87368 + }, + { + "Income": 75043 + }, + { + "Income": 114927 + }, + { + "Income": 114046 + }, + { + "Income": 66933 + }, + { + "Income": 59780 + }, + { + "Income": 75699 + }, + { + "Income": 160556 + }, + { + "Income": 198719 + }, + { + "Income": 85156 + }, + { + "Income": 161652 + }, + { + "Income": 79348 + }, + { + "Income": 102350 + }, + { + "Income": 51509 + }, + { + "Income": 28708 + }, + { + "Income": 39790 + }, + { + "Income": 167333 + }, + { + "Income": 162665 + }, + { + "Income": 189219 + }, + { + "Income": 86760 + }, + { + "Income": 121756 + }, + { + "Income": 44958 + }, + { + "Income": 97370 + }, + { + "Income": 49791 + }, + { + "Income": 133990 + }, + { + "Income": 105855 + }, + { + "Income": 101582 + }, + { + "Income": 116423 + }, + { + "Income": 55595 + }, + { + "Income": 117984 + }, + { + "Income": 22897 + }, + { + "Income": 104356 + }, + { + "Income": 117323 + }, + { + "Income": 72092 + }, + { + "Income": 192889 + }, + { + "Income": 25481 + }, + { + "Income": 167450 + }, + { + "Income": 158153 + }, + { + "Income": 135829 + }, + { + "Income": 60575 + }, + { + "Income": 121269 + }, + { + "Income": 146219 + }, + { + "Income": 80253 + }, + { + "Income": 186484 + }, + { + "Income": 197025 + }, + { + "Income": 53384 + }, + { + "Income": 50708 + }, + { + "Income": 67871 + }, + { + "Income": 166724 + }, + { + "Income": 184005 + }, + { + "Income": 120049 + }, + { + "Income": 168751 + }, + { + "Income": 52616 + }, + { + "Income": 94338 + }, + { + "Income": 45635 + }, + { + "Income": 121581 + }, + { + "Income": 168055 + }, + { + "Income": 53205 + }, + { + "Income": 90485 + }, + { + "Income": 82936 + }, + { + "Income": 113606 + }, + { + "Income": 60340 + }, + { + "Income": 130413 + }, + { + "Income": 105527 + }, + { + "Income": 173385 + }, + { + "Income": 184804 + }, + { + "Income": 45843 + }, + { + "Income": 197694 + }, + { + "Income": 137104 + }, + { + "Income": 68431 + }, + { + "Income": 44900 + }, + { + "Income": 186556 + }, + { + "Income": 144735 + }, + { + "Income": 153563 + }, + { + "Income": 34343 + }, + { + "Income": 68986 + }, + { + "Income": 194809 + }, + { + "Income": 75409 + }, + { + "Income": 132148 + }, + { + "Income": 105496 + }, + { + "Income": 184546 + }, + { + "Income": 24414 + }, + { + "Income": 51038 + }, + { + "Income": 38650 + }, + { + "Income": 97032 + }, + { + "Income": 136531 + }, + { + "Income": 151497 + }, + { + "Income": 46495 + }, + { + "Income": 174819 + }, + { + "Income": 169933 + }, + { + "Income": 119054 + }, + { + "Income": 186378 + }, + { + "Income": 33163 + }, + { + "Income": 27425 + }, + { + "Income": 71414 + }, + { + "Income": 130070 + }, + { + "Income": 100786 + }, + { + "Income": 46733 + }, + { + "Income": 35730 + }, + { + "Income": 151072 + }, + { + "Income": 100208 + }, + { + "Income": 61668 + }, + { + "Income": 139833 + }, + { + "Income": 34109 + }, + { + "Income": 82624 + }, + { + "Income": 83115 + }, + { + "Income": 57117 + }, + { + "Income": 147374 + }, + { + "Income": 49261 + }, + { + "Income": 55220 + }, + { + "Income": 123829 + }, + { + "Income": 155719 + }, + { + "Income": 88823 + }, + { + "Income": 40243 + }, + { + "Income": 48109 + }, + { + "Income": 125190 + }, + { + "Income": 168524 + }, + { + "Income": 20773 + }, + { + "Income": 56778 + }, + { + "Income": 26733 + }, + { + "Income": 144447 + }, + { + "Income": 185752 + }, + { + "Income": 138753 + }, + { + "Income": 53704 + }, + { + "Income": 27948 + }, + { + "Income": 43988 + }, + { + "Income": 163740 + }, + { + "Income": 83369 + }, + { + "Income": 178212 + }, + { + "Income": 124403 + }, + { + "Income": 76885 + }, + { + "Income": 112340 + }, + { + "Income": 22890 + }, + { + "Income": 164210 + }, + { + "Income": 57599 + }, + { + "Income": 152101 + }, + { + "Income": 114562 + }, + { + "Income": 99892 + }, + { + "Income": 139881 + }, + { + "Income": 113668 + }, + { + "Income": 197705 + }, + { + "Income": 155387 + }, + { + "Income": 81971 + }, + { + "Income": 81746 + }, + { + "Income": 90205 + }, + { + "Income": 58592 + }, + { + "Income": 103961 + }, + { + "Income": 138163 + }, + { + "Income": 48784 + }, + { + "Income": 131524 + }, + { + "Income": 68172 + }, + { + "Income": 186311 + }, + { + "Income": 172777 + }, + { + "Income": 41164 + }, + { + "Income": 35057 + }, + { + "Income": 191185 + }, + { + "Income": 188395 + }, + { + "Income": 87484 + }, + { + "Income": 51464 + }, + { + "Income": 176023 + }, + { + "Income": 66614 + }, + { + "Income": 97130 + }, + { + "Income": 160219 + }, + { + "Income": 128317 + }, + { + "Income": 162450 + }, + { + "Income": 183644 + }, + { + "Income": 162852 + }, + { + "Income": 98475 + }, + { + "Income": 84685 + }, + { + "Income": 159371 + }, + { + "Income": 96657 + }, + { + "Income": 137828 + }, + { + "Income": 175603 + }, + { + "Income": 194044 + }, + { + "Income": 183667 + }, + { + "Income": 186874 + }, + { + "Income": 87310 + }, + { + "Income": 174616 + }, + { + "Income": 178931 + }, + { + "Income": 147666 + }, + { + "Income": 108357 + }, + { + "Income": 43895 + }, + { + "Income": 43580 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/00-card30.flint.json b/test-harness/excel/evaluations/inputs/line-chart/00-card30.flint.json new file mode 100644 index 00000000..d029f8ac --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/00-card30.flint.json @@ -0,0 +1,141 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "Date", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 51 + }, + { + "Date": "2020-02-06", + "Value": 46 + }, + { + "Date": "2020-03-14", + "Value": 31 + }, + { + "Date": "2020-04-19", + "Value": 26 + }, + { + "Date": "2020-05-26", + "Value": 18 + }, + { + "Date": "2020-07-01", + "Value": 2 + }, + { + "Date": "2020-08-07", + "Value": 0 + }, + { + "Date": "2020-09-12", + "Value": 0 + }, + { + "Date": "2020-10-19", + "Value": 5 + }, + { + "Date": "2020-11-24", + "Value": 0 + }, + { + "Date": "2020-12-31", + "Value": 0 + }, + { + "Date": "2021-02-05", + "Value": 1 + }, + { + "Date": "2021-03-14", + "Value": 11 + }, + { + "Date": "2021-04-19", + "Value": 2 + }, + { + "Date": "2021-05-26", + "Value": 8 + }, + { + "Date": "2021-07-01", + "Value": 19 + }, + { + "Date": "2021-08-07", + "Value": 31 + }, + { + "Date": "2021-09-12", + "Value": 23 + }, + { + "Date": "2021-10-19", + "Value": 2 + }, + { + "Date": "2021-11-24", + "Value": 0 + }, + { + "Date": "2021-12-31", + "Value": 0 + }, + { + "Date": "2022-02-05", + "Value": 0 + }, + { + "Date": "2022-03-14", + "Value": 0 + }, + { + "Date": "2022-04-19", + "Value": 0 + }, + { + "Date": "2022-05-26", + "Value": 0 + }, + { + "Date": "2022-07-01", + "Value": 0 + }, + { + "Date": "2022-08-07", + "Value": 0 + }, + { + "Date": "2022-09-12", + "Value": 0 + }, + { + "Date": "2022-10-19", + "Value": 0 + }, + { + "Date": "2022-11-24", + "Value": 0 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/01-card50.flint.json b/test-harness/excel/evaluations/inputs/line-chart/01-card50.flint.json new file mode 100644 index 00000000..b88d0a4d --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/01-card50.flint.json @@ -0,0 +1,1023 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity", + "Series": "Category" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "Date", + "y": "Value", + "color": "Series" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 114, + "Series": "Electronics" + }, + { + "Date": "2020-01-22", + "Value": 113, + "Series": "Electronics" + }, + { + "Date": "2020-02-13", + "Value": 116, + "Series": "Electronics" + }, + { + "Date": "2020-03-06", + "Value": 129, + "Series": "Electronics" + }, + { + "Date": "2020-03-28", + "Value": 140, + "Series": "Electronics" + }, + { + "Date": "2020-04-19", + "Value": 156, + "Series": "Electronics" + }, + { + "Date": "2020-05-11", + "Value": 170, + "Series": "Electronics" + }, + { + "Date": "2020-06-02", + "Value": 173, + "Series": "Electronics" + }, + { + "Date": "2020-06-24", + "Value": 168, + "Series": "Electronics" + }, + { + "Date": "2020-07-16", + "Value": 165, + "Series": "Electronics" + }, + { + "Date": "2020-08-07", + "Value": 166, + "Series": "Electronics" + }, + { + "Date": "2020-08-28", + "Value": 155, + "Series": "Electronics" + }, + { + "Date": "2020-09-19", + "Value": 157, + "Series": "Electronics" + }, + { + "Date": "2020-10-11", + "Value": 161, + "Series": "Electronics" + }, + { + "Date": "2020-11-02", + "Value": 175, + "Series": "Electronics" + }, + { + "Date": "2020-11-24", + "Value": 193, + "Series": "Electronics" + }, + { + "Date": "2020-12-16", + "Value": 209, + "Series": "Electronics" + }, + { + "Date": "2021-01-07", + "Value": 228, + "Series": "Electronics" + }, + { + "Date": "2021-01-29", + "Value": 251, + "Series": "Electronics" + }, + { + "Date": "2021-02-20", + "Value": 271, + "Series": "Electronics" + }, + { + "Date": "2021-03-14", + "Value": 289, + "Series": "Electronics" + }, + { + "Date": "2021-04-04", + "Value": 312, + "Series": "Electronics" + }, + { + "Date": "2021-04-26", + "Value": 330, + "Series": "Electronics" + }, + { + "Date": "2021-05-18", + "Value": 352, + "Series": "Electronics" + }, + { + "Date": "2021-06-09", + "Value": 377, + "Series": "Electronics" + }, + { + "Date": "2021-07-01", + "Value": 397, + "Series": "Electronics" + }, + { + "Date": "2021-07-23", + "Value": 412, + "Series": "Electronics" + }, + { + "Date": "2021-08-14", + "Value": 418, + "Series": "Electronics" + }, + { + "Date": "2021-09-05", + "Value": 429, + "Series": "Electronics" + }, + { + "Date": "2021-09-27", + "Value": 442, + "Series": "Electronics" + }, + { + "Date": "2021-10-19", + "Value": 458, + "Series": "Electronics" + }, + { + "Date": "2021-11-09", + "Value": 467, + "Series": "Electronics" + }, + { + "Date": "2021-12-01", + "Value": 485, + "Series": "Electronics" + }, + { + "Date": "2021-12-23", + "Value": 495, + "Series": "Electronics" + }, + { + "Date": "2022-01-14", + "Value": 506, + "Series": "Electronics" + }, + { + "Date": "2022-02-05", + "Value": 513, + "Series": "Electronics" + }, + { + "Date": "2022-02-27", + "Value": 521, + "Series": "Electronics" + }, + { + "Date": "2022-03-21", + "Value": 521, + "Series": "Electronics" + }, + { + "Date": "2022-04-12", + "Value": 519, + "Series": "Electronics" + }, + { + "Date": "2022-05-04", + "Value": 517, + "Series": "Electronics" + }, + { + "Date": "2022-05-26", + "Value": 510, + "Series": "Electronics" + }, + { + "Date": "2022-06-16", + "Value": 500, + "Series": "Electronics" + }, + { + "Date": "2022-07-08", + "Value": 501, + "Series": "Electronics" + }, + { + "Date": "2022-07-30", + "Value": 506, + "Series": "Electronics" + }, + { + "Date": "2022-08-21", + "Value": 512, + "Series": "Electronics" + }, + { + "Date": "2022-09-12", + "Value": 505, + "Series": "Electronics" + }, + { + "Date": "2022-10-04", + "Value": 510, + "Series": "Electronics" + }, + { + "Date": "2022-10-26", + "Value": 504, + "Series": "Electronics" + }, + { + "Date": "2022-11-17", + "Value": 505, + "Series": "Electronics" + }, + { + "Date": "2022-12-09", + "Value": 499, + "Series": "Electronics" + }, + { + "Date": "2020-01-01", + "Value": 154, + "Series": "Clothing" + }, + { + "Date": "2020-01-22", + "Value": 159, + "Series": "Clothing" + }, + { + "Date": "2020-02-13", + "Value": 166, + "Series": "Clothing" + }, + { + "Date": "2020-03-06", + "Value": 173, + "Series": "Clothing" + }, + { + "Date": "2020-03-28", + "Value": 175, + "Series": "Clothing" + }, + { + "Date": "2020-04-19", + "Value": 179, + "Series": "Clothing" + }, + { + "Date": "2020-05-11", + "Value": 177, + "Series": "Clothing" + }, + { + "Date": "2020-06-02", + "Value": 181, + "Series": "Clothing" + }, + { + "Date": "2020-06-24", + "Value": 187, + "Series": "Clothing" + }, + { + "Date": "2020-07-16", + "Value": 193, + "Series": "Clothing" + }, + { + "Date": "2020-08-07", + "Value": 203, + "Series": "Clothing" + }, + { + "Date": "2020-08-28", + "Value": 212, + "Series": "Clothing" + }, + { + "Date": "2020-09-19", + "Value": 219, + "Series": "Clothing" + }, + { + "Date": "2020-10-11", + "Value": 221, + "Series": "Clothing" + }, + { + "Date": "2020-11-02", + "Value": 227, + "Series": "Clothing" + }, + { + "Date": "2020-11-24", + "Value": 233, + "Series": "Clothing" + }, + { + "Date": "2020-12-16", + "Value": 234, + "Series": "Clothing" + }, + { + "Date": "2021-01-07", + "Value": 233, + "Series": "Clothing" + }, + { + "Date": "2021-01-29", + "Value": 235, + "Series": "Clothing" + }, + { + "Date": "2021-02-20", + "Value": 235, + "Series": "Clothing" + }, + { + "Date": "2021-03-14", + "Value": 241, + "Series": "Clothing" + }, + { + "Date": "2021-04-04", + "Value": 242, + "Series": "Clothing" + }, + { + "Date": "2021-04-26", + "Value": 249, + "Series": "Clothing" + }, + { + "Date": "2021-05-18", + "Value": 253, + "Series": "Clothing" + }, + { + "Date": "2021-06-09", + "Value": 260, + "Series": "Clothing" + }, + { + "Date": "2021-07-01", + "Value": 267, + "Series": "Clothing" + }, + { + "Date": "2021-07-23", + "Value": 267, + "Series": "Clothing" + }, + { + "Date": "2021-08-14", + "Value": 263, + "Series": "Clothing" + }, + { + "Date": "2021-09-05", + "Value": 266, + "Series": "Clothing" + }, + { + "Date": "2021-09-27", + "Value": 271, + "Series": "Clothing" + }, + { + "Date": "2021-10-19", + "Value": 274, + "Series": "Clothing" + }, + { + "Date": "2021-11-09", + "Value": 281, + "Series": "Clothing" + }, + { + "Date": "2021-12-01", + "Value": 283, + "Series": "Clothing" + }, + { + "Date": "2021-12-23", + "Value": 289, + "Series": "Clothing" + }, + { + "Date": "2022-01-14", + "Value": 295, + "Series": "Clothing" + }, + { + "Date": "2022-02-05", + "Value": 303, + "Series": "Clothing" + }, + { + "Date": "2022-02-27", + "Value": 306, + "Series": "Clothing" + }, + { + "Date": "2022-03-21", + "Value": 309, + "Series": "Clothing" + }, + { + "Date": "2022-04-12", + "Value": 314, + "Series": "Clothing" + }, + { + "Date": "2022-05-04", + "Value": 321, + "Series": "Clothing" + }, + { + "Date": "2022-05-26", + "Value": 327, + "Series": "Clothing" + }, + { + "Date": "2022-06-16", + "Value": 327, + "Series": "Clothing" + }, + { + "Date": "2022-07-08", + "Value": 332, + "Series": "Clothing" + }, + { + "Date": "2022-07-30", + "Value": 338, + "Series": "Clothing" + }, + { + "Date": "2022-08-21", + "Value": 348, + "Series": "Clothing" + }, + { + "Date": "2022-09-12", + "Value": 355, + "Series": "Clothing" + }, + { + "Date": "2022-10-04", + "Value": 360, + "Series": "Clothing" + }, + { + "Date": "2022-10-26", + "Value": 360, + "Series": "Clothing" + }, + { + "Date": "2022-11-17", + "Value": 357, + "Series": "Clothing" + }, + { + "Date": "2022-12-09", + "Value": 351, + "Series": "Clothing" + }, + { + "Date": "2020-01-01", + "Value": 212, + "Series": "Food" + }, + { + "Date": "2020-01-22", + "Value": 215, + "Series": "Food" + }, + { + "Date": "2020-02-13", + "Value": 226, + "Series": "Food" + }, + { + "Date": "2020-03-06", + "Value": 234, + "Series": "Food" + }, + { + "Date": "2020-03-28", + "Value": 235, + "Series": "Food" + }, + { + "Date": "2020-04-19", + "Value": 232, + "Series": "Food" + }, + { + "Date": "2020-05-11", + "Value": 219, + "Series": "Food" + }, + { + "Date": "2020-06-02", + "Value": 204, + "Series": "Food" + }, + { + "Date": "2020-06-24", + "Value": 198, + "Series": "Food" + }, + { + "Date": "2020-07-16", + "Value": 203, + "Series": "Food" + }, + { + "Date": "2020-08-07", + "Value": 219, + "Series": "Food" + }, + { + "Date": "2020-08-28", + "Value": 224, + "Series": "Food" + }, + { + "Date": "2020-09-19", + "Value": 217, + "Series": "Food" + }, + { + "Date": "2020-10-11", + "Value": 223, + "Series": "Food" + }, + { + "Date": "2020-11-02", + "Value": 222, + "Series": "Food" + }, + { + "Date": "2020-11-24", + "Value": 212, + "Series": "Food" + }, + { + "Date": "2020-12-16", + "Value": 203, + "Series": "Food" + }, + { + "Date": "2021-01-07", + "Value": 200, + "Series": "Food" + }, + { + "Date": "2021-01-29", + "Value": 201, + "Series": "Food" + }, + { + "Date": "2021-02-20", + "Value": 210, + "Series": "Food" + }, + { + "Date": "2021-03-14", + "Value": 218, + "Series": "Food" + }, + { + "Date": "2021-04-04", + "Value": 225, + "Series": "Food" + }, + { + "Date": "2021-04-26", + "Value": 218, + "Series": "Food" + }, + { + "Date": "2021-05-18", + "Value": 220, + "Series": "Food" + }, + { + "Date": "2021-06-09", + "Value": 233, + "Series": "Food" + }, + { + "Date": "2021-07-01", + "Value": 251, + "Series": "Food" + }, + { + "Date": "2021-07-23", + "Value": 268, + "Series": "Food" + }, + { + "Date": "2021-08-14", + "Value": 289, + "Series": "Food" + }, + { + "Date": "2021-09-05", + "Value": 306, + "Series": "Food" + }, + { + "Date": "2021-09-27", + "Value": 329, + "Series": "Food" + }, + { + "Date": "2021-10-19", + "Value": 333, + "Series": "Food" + }, + { + "Date": "2021-11-09", + "Value": 324, + "Series": "Food" + }, + { + "Date": "2021-12-01", + "Value": 327, + "Series": "Food" + }, + { + "Date": "2021-12-23", + "Value": 322, + "Series": "Food" + }, + { + "Date": "2022-01-14", + "Value": 319, + "Series": "Food" + }, + { + "Date": "2022-02-05", + "Value": 309, + "Series": "Food" + }, + { + "Date": "2022-02-27", + "Value": 307, + "Series": "Food" + }, + { + "Date": "2022-03-21", + "Value": 303, + "Series": "Food" + }, + { + "Date": "2022-04-12", + "Value": 295, + "Series": "Food" + }, + { + "Date": "2022-05-04", + "Value": 285, + "Series": "Food" + }, + { + "Date": "2022-05-26", + "Value": 282, + "Series": "Food" + }, + { + "Date": "2022-06-16", + "Value": 272, + "Series": "Food" + }, + { + "Date": "2022-07-08", + "Value": 273, + "Series": "Food" + }, + { + "Date": "2022-07-30", + "Value": 263, + "Series": "Food" + }, + { + "Date": "2022-08-21", + "Value": 266, + "Series": "Food" + }, + { + "Date": "2022-09-12", + "Value": 260, + "Series": "Food" + }, + { + "Date": "2022-10-04", + "Value": 261, + "Series": "Food" + }, + { + "Date": "2022-10-26", + "Value": 259, + "Series": "Food" + }, + { + "Date": "2022-11-17", + "Value": 254, + "Series": "Food" + }, + { + "Date": "2022-12-09", + "Value": 238, + "Series": "Food" + }, + { + "Date": "2020-01-01", + "Value": 248, + "Series": "Books" + }, + { + "Date": "2020-01-22", + "Value": 252, + "Series": "Books" + }, + { + "Date": "2020-02-13", + "Value": 252, + "Series": "Books" + }, + { + "Date": "2020-03-06", + "Value": 246, + "Series": "Books" + }, + { + "Date": "2020-03-28", + "Value": 242, + "Series": "Books" + }, + { + "Date": "2020-04-19", + "Value": 243, + "Series": "Books" + }, + { + "Date": "2020-05-11", + "Value": 245, + "Series": "Books" + }, + { + "Date": "2020-06-02", + "Value": 242, + "Series": "Books" + }, + { + "Date": "2020-06-24", + "Value": 241, + "Series": "Books" + }, + { + "Date": "2020-07-16", + "Value": 240, + "Series": "Books" + }, + { + "Date": "2020-08-07", + "Value": 237, + "Series": "Books" + }, + { + "Date": "2020-08-28", + "Value": 240, + "Series": "Books" + }, + { + "Date": "2020-09-19", + "Value": 244, + "Series": "Books" + }, + { + "Date": "2020-10-11", + "Value": 248, + "Series": "Books" + }, + { + "Date": "2020-11-02", + "Value": 256, + "Series": "Books" + }, + { + "Date": "2020-11-24", + "Value": 260, + "Series": "Books" + }, + { + "Date": "2020-12-16", + "Value": 260, + "Series": "Books" + }, + { + "Date": "2021-01-07", + "Value": 257, + "Series": "Books" + }, + { + "Date": "2021-01-29", + "Value": 257, + "Series": "Books" + }, + { + "Date": "2021-02-20", + "Value": 261, + "Series": "Books" + }, + { + "Date": "2021-03-14", + "Value": 265, + "Series": "Books" + }, + { + "Date": "2021-04-04", + "Value": 267, + "Series": "Books" + }, + { + "Date": "2021-04-26", + "Value": 271, + "Series": "Books" + }, + { + "Date": "2021-05-18", + "Value": 267, + "Series": "Books" + }, + { + "Date": "2021-06-09", + "Value": 263, + "Series": "Books" + }, + { + "Date": "2021-07-01", + "Value": 254, + "Series": "Books" + }, + { + "Date": "2021-07-23", + "Value": 254, + "Series": "Books" + }, + { + "Date": "2021-08-14", + "Value": 247, + "Series": "Books" + }, + { + "Date": "2021-09-05", + "Value": 247, + "Series": "Books" + }, + { + "Date": "2021-09-27", + "Value": 248, + "Series": "Books" + }, + { + "Date": "2021-10-19", + "Value": 247, + "Series": "Books" + }, + { + "Date": "2021-11-09", + "Value": 245, + "Series": "Books" + }, + { + "Date": "2021-12-01", + "Value": 250, + "Series": "Books" + }, + { + "Date": "2021-12-23", + "Value": 247, + "Series": "Books" + }, + { + "Date": "2022-01-14", + "Value": 244, + "Series": "Books" + }, + { + "Date": "2022-02-05", + "Value": 244, + "Series": "Books" + }, + { + "Date": "2022-02-27", + "Value": 251, + "Series": "Books" + }, + { + "Date": "2022-03-21", + "Value": 263, + "Series": "Books" + }, + { + "Date": "2022-04-12", + "Value": 266, + "Series": "Books" + }, + { + "Date": "2022-05-04", + "Value": 262, + "Series": "Books" + }, + { + "Date": "2022-05-26", + "Value": 257, + "Series": "Books" + }, + { + "Date": "2022-06-16", + "Value": 255, + "Series": "Books" + }, + { + "Date": "2022-07-08", + "Value": 250, + "Series": "Books" + }, + { + "Date": "2022-07-30", + "Value": 250, + "Series": "Books" + }, + { + "Date": "2022-08-21", + "Value": 257, + "Series": "Books" + }, + { + "Date": "2022-09-12", + "Value": 262, + "Series": "Books" + }, + { + "Date": "2022-10-04", + "Value": 259, + "Series": "Books" + }, + { + "Date": "2022-10-26", + "Value": 255, + "Series": "Books" + }, + { + "Date": "2022-11-17", + "Value": 252, + "Series": "Books" + }, + { + "Date": "2022-12-09", + "Value": 246, + "Series": "Books" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/02-card100.flint.json b/test-harness/excel/evaluations/inputs/line-chart/02-card100.flint.json new file mode 100644 index 00000000..59ed80e7 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/02-card100.flint.json @@ -0,0 +1,4023 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity", + "Series": "Category" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "Date", + "y": "Value", + "color": "Series" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 173, + "Series": "Electronics" + }, + { + "Date": "2020-01-11", + "Value": 175, + "Series": "Electronics" + }, + { + "Date": "2020-01-22", + "Value": 175, + "Series": "Electronics" + }, + { + "Date": "2020-02-02", + "Value": 181, + "Series": "Electronics" + }, + { + "Date": "2020-02-13", + "Value": 193, + "Series": "Electronics" + }, + { + "Date": "2020-02-24", + "Value": 208, + "Series": "Electronics" + }, + { + "Date": "2020-03-06", + "Value": 219, + "Series": "Electronics" + }, + { + "Date": "2020-03-17", + "Value": 236, + "Series": "Electronics" + }, + { + "Date": "2020-03-28", + "Value": 240, + "Series": "Electronics" + }, + { + "Date": "2020-04-08", + "Value": 251, + "Series": "Electronics" + }, + { + "Date": "2020-04-19", + "Value": 258, + "Series": "Electronics" + }, + { + "Date": "2020-04-30", + "Value": 256, + "Series": "Electronics" + }, + { + "Date": "2020-05-11", + "Value": 251, + "Series": "Electronics" + }, + { + "Date": "2020-05-22", + "Value": 253, + "Series": "Electronics" + }, + { + "Date": "2020-06-02", + "Value": 252, + "Series": "Electronics" + }, + { + "Date": "2020-06-13", + "Value": 252, + "Series": "Electronics" + }, + { + "Date": "2020-06-24", + "Value": 242, + "Series": "Electronics" + }, + { + "Date": "2020-07-05", + "Value": 233, + "Series": "Electronics" + }, + { + "Date": "2020-07-16", + "Value": 227, + "Series": "Electronics" + }, + { + "Date": "2020-07-27", + "Value": 225, + "Series": "Electronics" + }, + { + "Date": "2020-08-07", + "Value": 224, + "Series": "Electronics" + }, + { + "Date": "2020-08-17", + "Value": 220, + "Series": "Electronics" + }, + { + "Date": "2020-08-28", + "Value": 210, + "Series": "Electronics" + }, + { + "Date": "2020-09-08", + "Value": 210, + "Series": "Electronics" + }, + { + "Date": "2020-09-19", + "Value": 207, + "Series": "Electronics" + }, + { + "Date": "2020-09-30", + "Value": 200, + "Series": "Electronics" + }, + { + "Date": "2020-10-11", + "Value": 199, + "Series": "Electronics" + }, + { + "Date": "2020-10-22", + "Value": 190, + "Series": "Electronics" + }, + { + "Date": "2020-11-02", + "Value": 182, + "Series": "Electronics" + }, + { + "Date": "2020-11-13", + "Value": 181, + "Series": "Electronics" + }, + { + "Date": "2020-11-24", + "Value": 176, + "Series": "Electronics" + }, + { + "Date": "2020-12-05", + "Value": 166, + "Series": "Electronics" + }, + { + "Date": "2020-12-16", + "Value": 161, + "Series": "Electronics" + }, + { + "Date": "2020-12-27", + "Value": 154, + "Series": "Electronics" + }, + { + "Date": "2021-01-07", + "Value": 145, + "Series": "Electronics" + }, + { + "Date": "2021-01-18", + "Value": 139, + "Series": "Electronics" + }, + { + "Date": "2021-01-29", + "Value": 143, + "Series": "Electronics" + }, + { + "Date": "2021-02-09", + "Value": 146, + "Series": "Electronics" + }, + { + "Date": "2021-02-20", + "Value": 144, + "Series": "Electronics" + }, + { + "Date": "2021-03-03", + "Value": 141, + "Series": "Electronics" + }, + { + "Date": "2021-03-14", + "Value": 132, + "Series": "Electronics" + }, + { + "Date": "2021-03-24", + "Value": 122, + "Series": "Electronics" + }, + { + "Date": "2021-04-04", + "Value": 114, + "Series": "Electronics" + }, + { + "Date": "2021-04-15", + "Value": 105, + "Series": "Electronics" + }, + { + "Date": "2021-04-26", + "Value": 96, + "Series": "Electronics" + }, + { + "Date": "2021-05-07", + "Value": 95, + "Series": "Electronics" + }, + { + "Date": "2021-05-18", + "Value": 87, + "Series": "Electronics" + }, + { + "Date": "2021-05-29", + "Value": 90, + "Series": "Electronics" + }, + { + "Date": "2021-06-09", + "Value": 91, + "Series": "Electronics" + }, + { + "Date": "2021-06-20", + "Value": 98, + "Series": "Electronics" + }, + { + "Date": "2021-07-01", + "Value": 110, + "Series": "Electronics" + }, + { + "Date": "2021-07-12", + "Value": 126, + "Series": "Electronics" + }, + { + "Date": "2021-07-23", + "Value": 139, + "Series": "Electronics" + }, + { + "Date": "2021-08-03", + "Value": 141, + "Series": "Electronics" + }, + { + "Date": "2021-08-14", + "Value": 133, + "Series": "Electronics" + }, + { + "Date": "2021-08-25", + "Value": 130, + "Series": "Electronics" + }, + { + "Date": "2021-09-05", + "Value": 133, + "Series": "Electronics" + }, + { + "Date": "2021-09-16", + "Value": 131, + "Series": "Electronics" + }, + { + "Date": "2021-09-27", + "Value": 123, + "Series": "Electronics" + }, + { + "Date": "2021-10-08", + "Value": 127, + "Series": "Electronics" + }, + { + "Date": "2021-10-19", + "Value": 133, + "Series": "Electronics" + }, + { + "Date": "2021-10-29", + "Value": 143, + "Series": "Electronics" + }, + { + "Date": "2021-11-09", + "Value": 152, + "Series": "Electronics" + }, + { + "Date": "2021-11-20", + "Value": 166, + "Series": "Electronics" + }, + { + "Date": "2021-12-01", + "Value": 180, + "Series": "Electronics" + }, + { + "Date": "2021-12-12", + "Value": 195, + "Series": "Electronics" + }, + { + "Date": "2021-12-23", + "Value": 210, + "Series": "Electronics" + }, + { + "Date": "2022-01-03", + "Value": 212, + "Series": "Electronics" + }, + { + "Date": "2022-01-14", + "Value": 220, + "Series": "Electronics" + }, + { + "Date": "2022-01-25", + "Value": 234, + "Series": "Electronics" + }, + { + "Date": "2022-02-05", + "Value": 238, + "Series": "Electronics" + }, + { + "Date": "2022-02-16", + "Value": 236, + "Series": "Electronics" + }, + { + "Date": "2022-02-27", + "Value": 243, + "Series": "Electronics" + }, + { + "Date": "2022-03-10", + "Value": 247, + "Series": "Electronics" + }, + { + "Date": "2022-03-21", + "Value": 251, + "Series": "Electronics" + }, + { + "Date": "2022-04-01", + "Value": 257, + "Series": "Electronics" + }, + { + "Date": "2022-04-12", + "Value": 258, + "Series": "Electronics" + }, + { + "Date": "2022-04-23", + "Value": 265, + "Series": "Electronics" + }, + { + "Date": "2022-05-04", + "Value": 275, + "Series": "Electronics" + }, + { + "Date": "2022-05-15", + "Value": 288, + "Series": "Electronics" + }, + { + "Date": "2022-05-26", + "Value": 304, + "Series": "Electronics" + }, + { + "Date": "2022-06-05", + "Value": 305, + "Series": "Electronics" + }, + { + "Date": "2022-06-16", + "Value": 300, + "Series": "Electronics" + }, + { + "Date": "2022-06-27", + "Value": 289, + "Series": "Electronics" + }, + { + "Date": "2022-07-08", + "Value": 291, + "Series": "Electronics" + }, + { + "Date": "2022-07-19", + "Value": 284, + "Series": "Electronics" + }, + { + "Date": "2022-07-30", + "Value": 277, + "Series": "Electronics" + }, + { + "Date": "2022-08-10", + "Value": 274, + "Series": "Electronics" + }, + { + "Date": "2022-08-21", + "Value": 266, + "Series": "Electronics" + }, + { + "Date": "2022-09-01", + "Value": 253, + "Series": "Electronics" + }, + { + "Date": "2022-09-12", + "Value": 243, + "Series": "Electronics" + }, + { + "Date": "2022-09-23", + "Value": 243, + "Series": "Electronics" + }, + { + "Date": "2022-10-04", + "Value": 250, + "Series": "Electronics" + }, + { + "Date": "2022-10-15", + "Value": 255, + "Series": "Electronics" + }, + { + "Date": "2022-10-26", + "Value": 255, + "Series": "Electronics" + }, + { + "Date": "2022-11-06", + "Value": 248, + "Series": "Electronics" + }, + { + "Date": "2022-11-17", + "Value": 249, + "Series": "Electronics" + }, + { + "Date": "2022-11-28", + "Value": 242, + "Series": "Electronics" + }, + { + "Date": "2022-12-09", + "Value": 238, + "Series": "Electronics" + }, + { + "Date": "2022-12-20", + "Value": 239, + "Series": "Electronics" + }, + { + "Date": "2020-01-01", + "Value": 165, + "Series": "Clothing" + }, + { + "Date": "2020-01-11", + "Value": 178, + "Series": "Clothing" + }, + { + "Date": "2020-01-22", + "Value": 182, + "Series": "Clothing" + }, + { + "Date": "2020-02-02", + "Value": 168, + "Series": "Clothing" + }, + { + "Date": "2020-02-13", + "Value": 168, + "Series": "Clothing" + }, + { + "Date": "2020-02-24", + "Value": 162, + "Series": "Clothing" + }, + { + "Date": "2020-03-06", + "Value": 145, + "Series": "Clothing" + }, + { + "Date": "2020-03-17", + "Value": 132, + "Series": "Clothing" + }, + { + "Date": "2020-03-28", + "Value": 136, + "Series": "Clothing" + }, + { + "Date": "2020-04-08", + "Value": 136, + "Series": "Clothing" + }, + { + "Date": "2020-04-19", + "Value": 120, + "Series": "Clothing" + }, + { + "Date": "2020-04-30", + "Value": 126, + "Series": "Clothing" + }, + { + "Date": "2020-05-11", + "Value": 121, + "Series": "Clothing" + }, + { + "Date": "2020-05-22", + "Value": 109, + "Series": "Clothing" + }, + { + "Date": "2020-06-02", + "Value": 113, + "Series": "Clothing" + }, + { + "Date": "2020-06-13", + "Value": 100, + "Series": "Clothing" + }, + { + "Date": "2020-06-24", + "Value": 87, + "Series": "Clothing" + }, + { + "Date": "2020-07-05", + "Value": 93, + "Series": "Clothing" + }, + { + "Date": "2020-07-16", + "Value": 87, + "Series": "Clothing" + }, + { + "Date": "2020-07-27", + "Value": 66, + "Series": "Clothing" + }, + { + "Date": "2020-08-07", + "Value": 43, + "Series": "Clothing" + }, + { + "Date": "2020-08-17", + "Value": 9, + "Series": "Clothing" + }, + { + "Date": "2020-08-28", + "Value": 0, + "Series": "Clothing" + }, + { + "Date": "2020-09-08", + "Value": 0, + "Series": "Clothing" + }, + { + "Date": "2020-09-19", + "Value": 11, + "Series": "Clothing" + }, + { + "Date": "2020-09-30", + "Value": 20, + "Series": "Clothing" + }, + { + "Date": "2020-10-11", + "Value": 37, + "Series": "Clothing" + }, + { + "Date": "2020-10-22", + "Value": 56, + "Series": "Clothing" + }, + { + "Date": "2020-11-02", + "Value": 77, + "Series": "Clothing" + }, + { + "Date": "2020-11-13", + "Value": 110, + "Series": "Clothing" + }, + { + "Date": "2020-11-24", + "Value": 116, + "Series": "Clothing" + }, + { + "Date": "2020-12-05", + "Value": 102, + "Series": "Clothing" + }, + { + "Date": "2020-12-16", + "Value": 88, + "Series": "Clothing" + }, + { + "Date": "2020-12-27", + "Value": 75, + "Series": "Clothing" + }, + { + "Date": "2021-01-07", + "Value": 64, + "Series": "Clothing" + }, + { + "Date": "2021-01-18", + "Value": 47, + "Series": "Clothing" + }, + { + "Date": "2021-01-29", + "Value": 25, + "Series": "Clothing" + }, + { + "Date": "2021-02-09", + "Value": 8, + "Series": "Clothing" + }, + { + "Date": "2021-02-20", + "Value": 0, + "Series": "Clothing" + }, + { + "Date": "2021-03-03", + "Value": 0, + "Series": "Clothing" + }, + { + "Date": "2021-03-14", + "Value": 12, + "Series": "Clothing" + }, + { + "Date": "2021-03-24", + "Value": 18, + "Series": "Clothing" + }, + { + "Date": "2021-04-04", + "Value": 4, + "Series": "Clothing" + }, + { + "Date": "2021-04-15", + "Value": 11, + "Series": "Clothing" + }, + { + "Date": "2021-04-26", + "Value": 12, + "Series": "Clothing" + }, + { + "Date": "2021-05-07", + "Value": 21, + "Series": "Clothing" + }, + { + "Date": "2021-05-18", + "Value": 20, + "Series": "Clothing" + }, + { + "Date": "2021-05-29", + "Value": 27, + "Series": "Clothing" + }, + { + "Date": "2021-06-09", + "Value": 34, + "Series": "Clothing" + }, + { + "Date": "2021-06-20", + "Value": 36, + "Series": "Clothing" + }, + { + "Date": "2021-07-01", + "Value": 55, + "Series": "Clothing" + }, + { + "Date": "2021-07-12", + "Value": 82, + "Series": "Clothing" + }, + { + "Date": "2021-07-23", + "Value": 119, + "Series": "Clothing" + }, + { + "Date": "2021-08-03", + "Value": 156, + "Series": "Clothing" + }, + { + "Date": "2021-08-14", + "Value": 163, + "Series": "Clothing" + }, + { + "Date": "2021-08-25", + "Value": 182, + "Series": "Clothing" + }, + { + "Date": "2021-09-05", + "Value": 207, + "Series": "Clothing" + }, + { + "Date": "2021-09-16", + "Value": 239, + "Series": "Clothing" + }, + { + "Date": "2021-09-27", + "Value": 245, + "Series": "Clothing" + }, + { + "Date": "2021-10-08", + "Value": 234, + "Series": "Clothing" + }, + { + "Date": "2021-10-19", + "Value": 223, + "Series": "Clothing" + }, + { + "Date": "2021-10-29", + "Value": 229, + "Series": "Clothing" + }, + { + "Date": "2021-11-09", + "Value": 233, + "Series": "Clothing" + }, + { + "Date": "2021-11-20", + "Value": 234, + "Series": "Clothing" + }, + { + "Date": "2021-12-01", + "Value": 220, + "Series": "Clothing" + }, + { + "Date": "2021-12-12", + "Value": 208, + "Series": "Clothing" + }, + { + "Date": "2021-12-23", + "Value": 203, + "Series": "Clothing" + }, + { + "Date": "2022-01-03", + "Value": 188, + "Series": "Clothing" + }, + { + "Date": "2022-01-14", + "Value": 165, + "Series": "Clothing" + }, + { + "Date": "2022-01-25", + "Value": 151, + "Series": "Clothing" + }, + { + "Date": "2022-02-05", + "Value": 127, + "Series": "Clothing" + }, + { + "Date": "2022-02-16", + "Value": 117, + "Series": "Clothing" + }, + { + "Date": "2022-02-27", + "Value": 94, + "Series": "Clothing" + }, + { + "Date": "2022-03-10", + "Value": 82, + "Series": "Clothing" + }, + { + "Date": "2022-03-21", + "Value": 65, + "Series": "Clothing" + }, + { + "Date": "2022-04-01", + "Value": 56, + "Series": "Clothing" + }, + { + "Date": "2022-04-12", + "Value": 51, + "Series": "Clothing" + }, + { + "Date": "2022-04-23", + "Value": 44, + "Series": "Clothing" + }, + { + "Date": "2022-05-04", + "Value": 26, + "Series": "Clothing" + }, + { + "Date": "2022-05-15", + "Value": 9, + "Series": "Clothing" + }, + { + "Date": "2022-05-26", + "Value": 0, + "Series": "Clothing" + }, + { + "Date": "2022-06-05", + "Value": 0, + "Series": "Clothing" + }, + { + "Date": "2022-06-16", + "Value": 0, + "Series": "Clothing" + }, + { + "Date": "2022-06-27", + "Value": 0, + "Series": "Clothing" + }, + { + "Date": "2022-07-08", + "Value": 0, + "Series": "Clothing" + }, + { + "Date": "2022-07-19", + "Value": 0, + "Series": "Clothing" + }, + { + "Date": "2022-07-30", + "Value": 8, + "Series": "Clothing" + }, + { + "Date": "2022-08-10", + "Value": 29, + "Series": "Clothing" + }, + { + "Date": "2022-08-21", + "Value": 31, + "Series": "Clothing" + }, + { + "Date": "2022-09-01", + "Value": 35, + "Series": "Clothing" + }, + { + "Date": "2022-09-12", + "Value": 27, + "Series": "Clothing" + }, + { + "Date": "2022-09-23", + "Value": 17, + "Series": "Clothing" + }, + { + "Date": "2022-10-04", + "Value": 16, + "Series": "Clothing" + }, + { + "Date": "2022-10-15", + "Value": 23, + "Series": "Clothing" + }, + { + "Date": "2022-10-26", + "Value": 36, + "Series": "Clothing" + }, + { + "Date": "2022-11-06", + "Value": 44, + "Series": "Clothing" + }, + { + "Date": "2022-11-17", + "Value": 36, + "Series": "Clothing" + }, + { + "Date": "2022-11-28", + "Value": 28, + "Series": "Clothing" + }, + { + "Date": "2022-12-09", + "Value": 41, + "Series": "Clothing" + }, + { + "Date": "2022-12-20", + "Value": 59, + "Series": "Clothing" + }, + { + "Date": "2020-01-01", + "Value": 173, + "Series": "Food" + }, + { + "Date": "2020-01-11", + "Value": 181, + "Series": "Food" + }, + { + "Date": "2020-01-22", + "Value": 192, + "Series": "Food" + }, + { + "Date": "2020-02-02", + "Value": 196, + "Series": "Food" + }, + { + "Date": "2020-02-13", + "Value": 201, + "Series": "Food" + }, + { + "Date": "2020-02-24", + "Value": 212, + "Series": "Food" + }, + { + "Date": "2020-03-06", + "Value": 216, + "Series": "Food" + }, + { + "Date": "2020-03-17", + "Value": 219, + "Series": "Food" + }, + { + "Date": "2020-03-28", + "Value": 208, + "Series": "Food" + }, + { + "Date": "2020-04-08", + "Value": 213, + "Series": "Food" + }, + { + "Date": "2020-04-19", + "Value": 224, + "Series": "Food" + }, + { + "Date": "2020-04-30", + "Value": 231, + "Series": "Food" + }, + { + "Date": "2020-05-11", + "Value": 238, + "Series": "Food" + }, + { + "Date": "2020-05-22", + "Value": 244, + "Series": "Food" + }, + { + "Date": "2020-06-02", + "Value": 254, + "Series": "Food" + }, + { + "Date": "2020-06-13", + "Value": 259, + "Series": "Food" + }, + { + "Date": "2020-06-24", + "Value": 253, + "Series": "Food" + }, + { + "Date": "2020-07-05", + "Value": 258, + "Series": "Food" + }, + { + "Date": "2020-07-16", + "Value": 263, + "Series": "Food" + }, + { + "Date": "2020-07-27", + "Value": 264, + "Series": "Food" + }, + { + "Date": "2020-08-07", + "Value": 276, + "Series": "Food" + }, + { + "Date": "2020-08-17", + "Value": 287, + "Series": "Food" + }, + { + "Date": "2020-08-28", + "Value": 303, + "Series": "Food" + }, + { + "Date": "2020-09-08", + "Value": 321, + "Series": "Food" + }, + { + "Date": "2020-09-19", + "Value": 340, + "Series": "Food" + }, + { + "Date": "2020-09-30", + "Value": 350, + "Series": "Food" + }, + { + "Date": "2020-10-11", + "Value": 368, + "Series": "Food" + }, + { + "Date": "2020-10-22", + "Value": 370, + "Series": "Food" + }, + { + "Date": "2020-11-02", + "Value": 363, + "Series": "Food" + }, + { + "Date": "2020-11-13", + "Value": 353, + "Series": "Food" + }, + { + "Date": "2020-11-24", + "Value": 357, + "Series": "Food" + }, + { + "Date": "2020-12-05", + "Value": 366, + "Series": "Food" + }, + { + "Date": "2020-12-16", + "Value": 365, + "Series": "Food" + }, + { + "Date": "2020-12-27", + "Value": 356, + "Series": "Food" + }, + { + "Date": "2021-01-07", + "Value": 354, + "Series": "Food" + }, + { + "Date": "2021-01-18", + "Value": 354, + "Series": "Food" + }, + { + "Date": "2021-01-29", + "Value": 357, + "Series": "Food" + }, + { + "Date": "2021-02-09", + "Value": 350, + "Series": "Food" + }, + { + "Date": "2021-02-20", + "Value": 345, + "Series": "Food" + }, + { + "Date": "2021-03-03", + "Value": 340, + "Series": "Food" + }, + { + "Date": "2021-03-14", + "Value": 329, + "Series": "Food" + }, + { + "Date": "2021-03-24", + "Value": 327, + "Series": "Food" + }, + { + "Date": "2021-04-04", + "Value": 317, + "Series": "Food" + }, + { + "Date": "2021-04-15", + "Value": 297, + "Series": "Food" + }, + { + "Date": "2021-04-26", + "Value": 291, + "Series": "Food" + }, + { + "Date": "2021-05-07", + "Value": 279, + "Series": "Food" + }, + { + "Date": "2021-05-18", + "Value": 272, + "Series": "Food" + }, + { + "Date": "2021-05-29", + "Value": 271, + "Series": "Food" + }, + { + "Date": "2021-06-09", + "Value": 268, + "Series": "Food" + }, + { + "Date": "2021-06-20", + "Value": 256, + "Series": "Food" + }, + { + "Date": "2021-07-01", + "Value": 255, + "Series": "Food" + }, + { + "Date": "2021-07-12", + "Value": 253, + "Series": "Food" + }, + { + "Date": "2021-07-23", + "Value": 264, + "Series": "Food" + }, + { + "Date": "2021-08-03", + "Value": 273, + "Series": "Food" + }, + { + "Date": "2021-08-14", + "Value": 270, + "Series": "Food" + }, + { + "Date": "2021-08-25", + "Value": 281, + "Series": "Food" + }, + { + "Date": "2021-09-05", + "Value": 277, + "Series": "Food" + }, + { + "Date": "2021-09-16", + "Value": 283, + "Series": "Food" + }, + { + "Date": "2021-09-27", + "Value": 283, + "Series": "Food" + }, + { + "Date": "2021-10-08", + "Value": 270, + "Series": "Food" + }, + { + "Date": "2021-10-19", + "Value": 262, + "Series": "Food" + }, + { + "Date": "2021-10-29", + "Value": 259, + "Series": "Food" + }, + { + "Date": "2021-11-09", + "Value": 269, + "Series": "Food" + }, + { + "Date": "2021-11-20", + "Value": 286, + "Series": "Food" + }, + { + "Date": "2021-12-01", + "Value": 308, + "Series": "Food" + }, + { + "Date": "2021-12-12", + "Value": 316, + "Series": "Food" + }, + { + "Date": "2021-12-23", + "Value": 329, + "Series": "Food" + }, + { + "Date": "2022-01-03", + "Value": 340, + "Series": "Food" + }, + { + "Date": "2022-01-14", + "Value": 347, + "Series": "Food" + }, + { + "Date": "2022-01-25", + "Value": 361, + "Series": "Food" + }, + { + "Date": "2022-02-05", + "Value": 373, + "Series": "Food" + }, + { + "Date": "2022-02-16", + "Value": 373, + "Series": "Food" + }, + { + "Date": "2022-02-27", + "Value": 385, + "Series": "Food" + }, + { + "Date": "2022-03-10", + "Value": 394, + "Series": "Food" + }, + { + "Date": "2022-03-21", + "Value": 400, + "Series": "Food" + }, + { + "Date": "2022-04-01", + "Value": 408, + "Series": "Food" + }, + { + "Date": "2022-04-12", + "Value": 411, + "Series": "Food" + }, + { + "Date": "2022-04-23", + "Value": 420, + "Series": "Food" + }, + { + "Date": "2022-05-04", + "Value": 417, + "Series": "Food" + }, + { + "Date": "2022-05-15", + "Value": 405, + "Series": "Food" + }, + { + "Date": "2022-05-26", + "Value": 408, + "Series": "Food" + }, + { + "Date": "2022-06-05", + "Value": 403, + "Series": "Food" + }, + { + "Date": "2022-06-16", + "Value": 412, + "Series": "Food" + }, + { + "Date": "2022-06-27", + "Value": 418, + "Series": "Food" + }, + { + "Date": "2022-07-08", + "Value": 414, + "Series": "Food" + }, + { + "Date": "2022-07-19", + "Value": 404, + "Series": "Food" + }, + { + "Date": "2022-07-30", + "Value": 401, + "Series": "Food" + }, + { + "Date": "2022-08-10", + "Value": 394, + "Series": "Food" + }, + { + "Date": "2022-08-21", + "Value": 393, + "Series": "Food" + }, + { + "Date": "2022-09-01", + "Value": 391, + "Series": "Food" + }, + { + "Date": "2022-09-12", + "Value": 391, + "Series": "Food" + }, + { + "Date": "2022-09-23", + "Value": 403, + "Series": "Food" + }, + { + "Date": "2022-10-04", + "Value": 404, + "Series": "Food" + }, + { + "Date": "2022-10-15", + "Value": 413, + "Series": "Food" + }, + { + "Date": "2022-10-26", + "Value": 420, + "Series": "Food" + }, + { + "Date": "2022-11-06", + "Value": 433, + "Series": "Food" + }, + { + "Date": "2022-11-17", + "Value": 453, + "Series": "Food" + }, + { + "Date": "2022-11-28", + "Value": 479, + "Series": "Food" + }, + { + "Date": "2022-12-09", + "Value": 490, + "Series": "Food" + }, + { + "Date": "2022-12-20", + "Value": 493, + "Series": "Food" + }, + { + "Date": "2020-01-01", + "Value": 211, + "Series": "Books" + }, + { + "Date": "2020-01-11", + "Value": 212, + "Series": "Books" + }, + { + "Date": "2020-01-22", + "Value": 209, + "Series": "Books" + }, + { + "Date": "2020-02-02", + "Value": 212, + "Series": "Books" + }, + { + "Date": "2020-02-13", + "Value": 210, + "Series": "Books" + }, + { + "Date": "2020-02-24", + "Value": 206, + "Series": "Books" + }, + { + "Date": "2020-03-06", + "Value": 202, + "Series": "Books" + }, + { + "Date": "2020-03-17", + "Value": 195, + "Series": "Books" + }, + { + "Date": "2020-03-28", + "Value": 185, + "Series": "Books" + }, + { + "Date": "2020-04-08", + "Value": 174, + "Series": "Books" + }, + { + "Date": "2020-04-19", + "Value": 171, + "Series": "Books" + }, + { + "Date": "2020-04-30", + "Value": 174, + "Series": "Books" + }, + { + "Date": "2020-05-11", + "Value": 181, + "Series": "Books" + }, + { + "Date": "2020-05-22", + "Value": 185, + "Series": "Books" + }, + { + "Date": "2020-06-02", + "Value": 184, + "Series": "Books" + }, + { + "Date": "2020-06-13", + "Value": 181, + "Series": "Books" + }, + { + "Date": "2020-06-24", + "Value": 176, + "Series": "Books" + }, + { + "Date": "2020-07-05", + "Value": 175, + "Series": "Books" + }, + { + "Date": "2020-07-16", + "Value": 169, + "Series": "Books" + }, + { + "Date": "2020-07-27", + "Value": 159, + "Series": "Books" + }, + { + "Date": "2020-08-07", + "Value": 150, + "Series": "Books" + }, + { + "Date": "2020-08-17", + "Value": 147, + "Series": "Books" + }, + { + "Date": "2020-08-28", + "Value": 150, + "Series": "Books" + }, + { + "Date": "2020-09-08", + "Value": 151, + "Series": "Books" + }, + { + "Date": "2020-09-19", + "Value": 156, + "Series": "Books" + }, + { + "Date": "2020-09-30", + "Value": 165, + "Series": "Books" + }, + { + "Date": "2020-10-11", + "Value": 175, + "Series": "Books" + }, + { + "Date": "2020-10-22", + "Value": 179, + "Series": "Books" + }, + { + "Date": "2020-11-02", + "Value": 181, + "Series": "Books" + }, + { + "Date": "2020-11-13", + "Value": 180, + "Series": "Books" + }, + { + "Date": "2020-11-24", + "Value": 176, + "Series": "Books" + }, + { + "Date": "2020-12-05", + "Value": 170, + "Series": "Books" + }, + { + "Date": "2020-12-16", + "Value": 171, + "Series": "Books" + }, + { + "Date": "2020-12-27", + "Value": 168, + "Series": "Books" + }, + { + "Date": "2021-01-07", + "Value": 168, + "Series": "Books" + }, + { + "Date": "2021-01-18", + "Value": 169, + "Series": "Books" + }, + { + "Date": "2021-01-29", + "Value": 174, + "Series": "Books" + }, + { + "Date": "2021-02-09", + "Value": 180, + "Series": "Books" + }, + { + "Date": "2021-02-20", + "Value": 181, + "Series": "Books" + }, + { + "Date": "2021-03-03", + "Value": 185, + "Series": "Books" + }, + { + "Date": "2021-03-14", + "Value": 193, + "Series": "Books" + }, + { + "Date": "2021-03-24", + "Value": 201, + "Series": "Books" + }, + { + "Date": "2021-04-04", + "Value": 210, + "Series": "Books" + }, + { + "Date": "2021-04-15", + "Value": 212, + "Series": "Books" + }, + { + "Date": "2021-04-26", + "Value": 209, + "Series": "Books" + }, + { + "Date": "2021-05-07", + "Value": 202, + "Series": "Books" + }, + { + "Date": "2021-05-18", + "Value": 196, + "Series": "Books" + }, + { + "Date": "2021-05-29", + "Value": 192, + "Series": "Books" + }, + { + "Date": "2021-06-09", + "Value": 191, + "Series": "Books" + }, + { + "Date": "2021-06-20", + "Value": 192, + "Series": "Books" + }, + { + "Date": "2021-07-01", + "Value": 194, + "Series": "Books" + }, + { + "Date": "2021-07-12", + "Value": 193, + "Series": "Books" + }, + { + "Date": "2021-07-23", + "Value": 192, + "Series": "Books" + }, + { + "Date": "2021-08-03", + "Value": 191, + "Series": "Books" + }, + { + "Date": "2021-08-14", + "Value": 194, + "Series": "Books" + }, + { + "Date": "2021-08-25", + "Value": 196, + "Series": "Books" + }, + { + "Date": "2021-09-05", + "Value": 199, + "Series": "Books" + }, + { + "Date": "2021-09-16", + "Value": 205, + "Series": "Books" + }, + { + "Date": "2021-09-27", + "Value": 211, + "Series": "Books" + }, + { + "Date": "2021-10-08", + "Value": 212, + "Series": "Books" + }, + { + "Date": "2021-10-19", + "Value": 208, + "Series": "Books" + }, + { + "Date": "2021-10-29", + "Value": 202, + "Series": "Books" + }, + { + "Date": "2021-11-09", + "Value": 202, + "Series": "Books" + }, + { + "Date": "2021-11-20", + "Value": 207, + "Series": "Books" + }, + { + "Date": "2021-12-01", + "Value": 208, + "Series": "Books" + }, + { + "Date": "2021-12-12", + "Value": 203, + "Series": "Books" + }, + { + "Date": "2021-12-23", + "Value": 201, + "Series": "Books" + }, + { + "Date": "2022-01-03", + "Value": 199, + "Series": "Books" + }, + { + "Date": "2022-01-14", + "Value": 196, + "Series": "Books" + }, + { + "Date": "2022-01-25", + "Value": 196, + "Series": "Books" + }, + { + "Date": "2022-02-05", + "Value": 195, + "Series": "Books" + }, + { + "Date": "2022-02-16", + "Value": 198, + "Series": "Books" + }, + { + "Date": "2022-02-27", + "Value": 204, + "Series": "Books" + }, + { + "Date": "2022-03-10", + "Value": 212, + "Series": "Books" + }, + { + "Date": "2022-03-21", + "Value": 212, + "Series": "Books" + }, + { + "Date": "2022-04-01", + "Value": 217, + "Series": "Books" + }, + { + "Date": "2022-04-12", + "Value": 215, + "Series": "Books" + }, + { + "Date": "2022-04-23", + "Value": 212, + "Series": "Books" + }, + { + "Date": "2022-05-04", + "Value": 211, + "Series": "Books" + }, + { + "Date": "2022-05-15", + "Value": 212, + "Series": "Books" + }, + { + "Date": "2022-05-26", + "Value": 215, + "Series": "Books" + }, + { + "Date": "2022-06-05", + "Value": 220, + "Series": "Books" + }, + { + "Date": "2022-06-16", + "Value": 221, + "Series": "Books" + }, + { + "Date": "2022-06-27", + "Value": 224, + "Series": "Books" + }, + { + "Date": "2022-07-08", + "Value": 227, + "Series": "Books" + }, + { + "Date": "2022-07-19", + "Value": 226, + "Series": "Books" + }, + { + "Date": "2022-07-30", + "Value": 231, + "Series": "Books" + }, + { + "Date": "2022-08-10", + "Value": 239, + "Series": "Books" + }, + { + "Date": "2022-08-21", + "Value": 250, + "Series": "Books" + }, + { + "Date": "2022-09-01", + "Value": 260, + "Series": "Books" + }, + { + "Date": "2022-09-12", + "Value": 270, + "Series": "Books" + }, + { + "Date": "2022-09-23", + "Value": 274, + "Series": "Books" + }, + { + "Date": "2022-10-04", + "Value": 282, + "Series": "Books" + }, + { + "Date": "2022-10-15", + "Value": 286, + "Series": "Books" + }, + { + "Date": "2022-10-26", + "Value": 285, + "Series": "Books" + }, + { + "Date": "2022-11-06", + "Value": 283, + "Series": "Books" + }, + { + "Date": "2022-11-17", + "Value": 277, + "Series": "Books" + }, + { + "Date": "2022-11-28", + "Value": 271, + "Series": "Books" + }, + { + "Date": "2022-12-09", + "Value": 267, + "Series": "Books" + }, + { + "Date": "2022-12-20", + "Value": 269, + "Series": "Books" + }, + { + "Date": "2020-01-01", + "Value": 57, + "Series": "Sports" + }, + { + "Date": "2020-01-11", + "Value": 63, + "Series": "Sports" + }, + { + "Date": "2020-01-22", + "Value": 76, + "Series": "Sports" + }, + { + "Date": "2020-02-02", + "Value": 76, + "Series": "Sports" + }, + { + "Date": "2020-02-13", + "Value": 75, + "Series": "Sports" + }, + { + "Date": "2020-02-24", + "Value": 67, + "Series": "Sports" + }, + { + "Date": "2020-03-06", + "Value": 73, + "Series": "Sports" + }, + { + "Date": "2020-03-17", + "Value": 82, + "Series": "Sports" + }, + { + "Date": "2020-03-28", + "Value": 89, + "Series": "Sports" + }, + { + "Date": "2020-04-08", + "Value": 85, + "Series": "Sports" + }, + { + "Date": "2020-04-19", + "Value": 90, + "Series": "Sports" + }, + { + "Date": "2020-04-30", + "Value": 87, + "Series": "Sports" + }, + { + "Date": "2020-05-11", + "Value": 89, + "Series": "Sports" + }, + { + "Date": "2020-05-22", + "Value": 81, + "Series": "Sports" + }, + { + "Date": "2020-06-02", + "Value": 62, + "Series": "Sports" + }, + { + "Date": "2020-06-13", + "Value": 60, + "Series": "Sports" + }, + { + "Date": "2020-06-24", + "Value": 53, + "Series": "Sports" + }, + { + "Date": "2020-07-05", + "Value": 46, + "Series": "Sports" + }, + { + "Date": "2020-07-16", + "Value": 52, + "Series": "Sports" + }, + { + "Date": "2020-07-27", + "Value": 46, + "Series": "Sports" + }, + { + "Date": "2020-08-07", + "Value": 32, + "Series": "Sports" + }, + { + "Date": "2020-08-17", + "Value": 28, + "Series": "Sports" + }, + { + "Date": "2020-08-28", + "Value": 20, + "Series": "Sports" + }, + { + "Date": "2020-09-08", + "Value": 3, + "Series": "Sports" + }, + { + "Date": "2020-09-19", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2020-09-30", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2020-10-11", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2020-10-22", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2020-11-02", + "Value": 4, + "Series": "Sports" + }, + { + "Date": "2020-11-13", + "Value": 5, + "Series": "Sports" + }, + { + "Date": "2020-11-24", + "Value": 10, + "Series": "Sports" + }, + { + "Date": "2020-12-05", + "Value": 27, + "Series": "Sports" + }, + { + "Date": "2020-12-16", + "Value": 27, + "Series": "Sports" + }, + { + "Date": "2020-12-27", + "Value": 30, + "Series": "Sports" + }, + { + "Date": "2021-01-07", + "Value": 29, + "Series": "Sports" + }, + { + "Date": "2021-01-18", + "Value": 37, + "Series": "Sports" + }, + { + "Date": "2021-01-29", + "Value": 47, + "Series": "Sports" + }, + { + "Date": "2021-02-09", + "Value": 52, + "Series": "Sports" + }, + { + "Date": "2021-02-20", + "Value": 48, + "Series": "Sports" + }, + { + "Date": "2021-03-03", + "Value": 42, + "Series": "Sports" + }, + { + "Date": "2021-03-14", + "Value": 48, + "Series": "Sports" + }, + { + "Date": "2021-03-24", + "Value": 47, + "Series": "Sports" + }, + { + "Date": "2021-04-04", + "Value": 55, + "Series": "Sports" + }, + { + "Date": "2021-04-15", + "Value": 54, + "Series": "Sports" + }, + { + "Date": "2021-04-26", + "Value": 56, + "Series": "Sports" + }, + { + "Date": "2021-05-07", + "Value": 64, + "Series": "Sports" + }, + { + "Date": "2021-05-18", + "Value": 71, + "Series": "Sports" + }, + { + "Date": "2021-05-29", + "Value": 89, + "Series": "Sports" + }, + { + "Date": "2021-06-09", + "Value": 96, + "Series": "Sports" + }, + { + "Date": "2021-06-20", + "Value": 104, + "Series": "Sports" + }, + { + "Date": "2021-07-01", + "Value": 109, + "Series": "Sports" + }, + { + "Date": "2021-07-12", + "Value": 122, + "Series": "Sports" + }, + { + "Date": "2021-07-23", + "Value": 136, + "Series": "Sports" + }, + { + "Date": "2021-08-03", + "Value": 149, + "Series": "Sports" + }, + { + "Date": "2021-08-14", + "Value": 170, + "Series": "Sports" + }, + { + "Date": "2021-08-25", + "Value": 194, + "Series": "Sports" + }, + { + "Date": "2021-09-05", + "Value": 201, + "Series": "Sports" + }, + { + "Date": "2021-09-16", + "Value": 199, + "Series": "Sports" + }, + { + "Date": "2021-09-27", + "Value": 196, + "Series": "Sports" + }, + { + "Date": "2021-10-08", + "Value": 187, + "Series": "Sports" + }, + { + "Date": "2021-10-19", + "Value": 179, + "Series": "Sports" + }, + { + "Date": "2021-10-29", + "Value": 181, + "Series": "Sports" + }, + { + "Date": "2021-11-09", + "Value": 171, + "Series": "Sports" + }, + { + "Date": "2021-11-20", + "Value": 176, + "Series": "Sports" + }, + { + "Date": "2021-12-01", + "Value": 175, + "Series": "Sports" + }, + { + "Date": "2021-12-12", + "Value": 182, + "Series": "Sports" + }, + { + "Date": "2021-12-23", + "Value": 193, + "Series": "Sports" + }, + { + "Date": "2022-01-03", + "Value": 197, + "Series": "Sports" + }, + { + "Date": "2022-01-14", + "Value": 208, + "Series": "Sports" + }, + { + "Date": "2022-01-25", + "Value": 229, + "Series": "Sports" + }, + { + "Date": "2022-02-05", + "Value": 256, + "Series": "Sports" + }, + { + "Date": "2022-02-16", + "Value": 268, + "Series": "Sports" + }, + { + "Date": "2022-02-27", + "Value": 273, + "Series": "Sports" + }, + { + "Date": "2022-03-10", + "Value": 264, + "Series": "Sports" + }, + { + "Date": "2022-03-21", + "Value": 247, + "Series": "Sports" + }, + { + "Date": "2022-04-01", + "Value": 230, + "Series": "Sports" + }, + { + "Date": "2022-04-12", + "Value": 226, + "Series": "Sports" + }, + { + "Date": "2022-04-23", + "Value": 212, + "Series": "Sports" + }, + { + "Date": "2022-05-04", + "Value": 197, + "Series": "Sports" + }, + { + "Date": "2022-05-15", + "Value": 191, + "Series": "Sports" + }, + { + "Date": "2022-05-26", + "Value": 177, + "Series": "Sports" + }, + { + "Date": "2022-06-05", + "Value": 160, + "Series": "Sports" + }, + { + "Date": "2022-06-16", + "Value": 158, + "Series": "Sports" + }, + { + "Date": "2022-06-27", + "Value": 144, + "Series": "Sports" + }, + { + "Date": "2022-07-08", + "Value": 123, + "Series": "Sports" + }, + { + "Date": "2022-07-19", + "Value": 100, + "Series": "Sports" + }, + { + "Date": "2022-07-30", + "Value": 85, + "Series": "Sports" + }, + { + "Date": "2022-08-10", + "Value": 64, + "Series": "Sports" + }, + { + "Date": "2022-08-21", + "Value": 59, + "Series": "Sports" + }, + { + "Date": "2022-09-01", + "Value": 49, + "Series": "Sports" + }, + { + "Date": "2022-09-12", + "Value": 43, + "Series": "Sports" + }, + { + "Date": "2022-09-23", + "Value": 52, + "Series": "Sports" + }, + { + "Date": "2022-10-04", + "Value": 53, + "Series": "Sports" + }, + { + "Date": "2022-10-15", + "Value": 42, + "Series": "Sports" + }, + { + "Date": "2022-10-26", + "Value": 22, + "Series": "Sports" + }, + { + "Date": "2022-11-06", + "Value": 2, + "Series": "Sports" + }, + { + "Date": "2022-11-17", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-11-28", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-12-09", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-12-20", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2020-01-01", + "Value": 210, + "Series": "Home" + }, + { + "Date": "2020-01-11", + "Value": 216, + "Series": "Home" + }, + { + "Date": "2020-01-22", + "Value": 223, + "Series": "Home" + }, + { + "Date": "2020-02-02", + "Value": 227, + "Series": "Home" + }, + { + "Date": "2020-02-13", + "Value": 225, + "Series": "Home" + }, + { + "Date": "2020-02-24", + "Value": 219, + "Series": "Home" + }, + { + "Date": "2020-03-06", + "Value": 218, + "Series": "Home" + }, + { + "Date": "2020-03-17", + "Value": 223, + "Series": "Home" + }, + { + "Date": "2020-03-28", + "Value": 232, + "Series": "Home" + }, + { + "Date": "2020-04-08", + "Value": 244, + "Series": "Home" + }, + { + "Date": "2020-04-19", + "Value": 253, + "Series": "Home" + }, + { + "Date": "2020-04-30", + "Value": 255, + "Series": "Home" + }, + { + "Date": "2020-05-11", + "Value": 253, + "Series": "Home" + }, + { + "Date": "2020-05-22", + "Value": 250, + "Series": "Home" + }, + { + "Date": "2020-06-02", + "Value": 247, + "Series": "Home" + }, + { + "Date": "2020-06-13", + "Value": 239, + "Series": "Home" + }, + { + "Date": "2020-06-24", + "Value": 237, + "Series": "Home" + }, + { + "Date": "2020-07-05", + "Value": 241, + "Series": "Home" + }, + { + "Date": "2020-07-16", + "Value": 244, + "Series": "Home" + }, + { + "Date": "2020-07-27", + "Value": 252, + "Series": "Home" + }, + { + "Date": "2020-08-07", + "Value": 259, + "Series": "Home" + }, + { + "Date": "2020-08-17", + "Value": 267, + "Series": "Home" + }, + { + "Date": "2020-08-28", + "Value": 279, + "Series": "Home" + }, + { + "Date": "2020-09-08", + "Value": 291, + "Series": "Home" + }, + { + "Date": "2020-09-19", + "Value": 303, + "Series": "Home" + }, + { + "Date": "2020-09-30", + "Value": 308, + "Series": "Home" + }, + { + "Date": "2020-10-11", + "Value": 312, + "Series": "Home" + }, + { + "Date": "2020-10-22", + "Value": 309, + "Series": "Home" + }, + { + "Date": "2020-11-02", + "Value": 306, + "Series": "Home" + }, + { + "Date": "2020-11-13", + "Value": 302, + "Series": "Home" + }, + { + "Date": "2020-11-24", + "Value": 305, + "Series": "Home" + }, + { + "Date": "2020-12-05", + "Value": 303, + "Series": "Home" + }, + { + "Date": "2020-12-16", + "Value": 301, + "Series": "Home" + }, + { + "Date": "2020-12-27", + "Value": 302, + "Series": "Home" + }, + { + "Date": "2021-01-07", + "Value": 305, + "Series": "Home" + }, + { + "Date": "2021-01-18", + "Value": 311, + "Series": "Home" + }, + { + "Date": "2021-01-29", + "Value": 309, + "Series": "Home" + }, + { + "Date": "2021-02-09", + "Value": 307, + "Series": "Home" + }, + { + "Date": "2021-02-20", + "Value": 312, + "Series": "Home" + }, + { + "Date": "2021-03-03", + "Value": 313, + "Series": "Home" + }, + { + "Date": "2021-03-14", + "Value": 317, + "Series": "Home" + }, + { + "Date": "2021-03-24", + "Value": 322, + "Series": "Home" + }, + { + "Date": "2021-04-04", + "Value": 326, + "Series": "Home" + }, + { + "Date": "2021-04-15", + "Value": 334, + "Series": "Home" + }, + { + "Date": "2021-04-26", + "Value": 338, + "Series": "Home" + }, + { + "Date": "2021-05-07", + "Value": 337, + "Series": "Home" + }, + { + "Date": "2021-05-18", + "Value": 336, + "Series": "Home" + }, + { + "Date": "2021-05-29", + "Value": 333, + "Series": "Home" + }, + { + "Date": "2021-06-09", + "Value": 335, + "Series": "Home" + }, + { + "Date": "2021-06-20", + "Value": 344, + "Series": "Home" + }, + { + "Date": "2021-07-01", + "Value": 344, + "Series": "Home" + }, + { + "Date": "2021-07-12", + "Value": 346, + "Series": "Home" + }, + { + "Date": "2021-07-23", + "Value": 349, + "Series": "Home" + }, + { + "Date": "2021-08-03", + "Value": 354, + "Series": "Home" + }, + { + "Date": "2021-08-14", + "Value": 361, + "Series": "Home" + }, + { + "Date": "2021-08-25", + "Value": 359, + "Series": "Home" + }, + { + "Date": "2021-09-05", + "Value": 357, + "Series": "Home" + }, + { + "Date": "2021-09-16", + "Value": 355, + "Series": "Home" + }, + { + "Date": "2021-09-27", + "Value": 359, + "Series": "Home" + }, + { + "Date": "2021-10-08", + "Value": 368, + "Series": "Home" + }, + { + "Date": "2021-10-19", + "Value": 372, + "Series": "Home" + }, + { + "Date": "2021-10-29", + "Value": 382, + "Series": "Home" + }, + { + "Date": "2021-11-09", + "Value": 386, + "Series": "Home" + }, + { + "Date": "2021-11-20", + "Value": 392, + "Series": "Home" + }, + { + "Date": "2021-12-01", + "Value": 390, + "Series": "Home" + }, + { + "Date": "2021-12-12", + "Value": 389, + "Series": "Home" + }, + { + "Date": "2021-12-23", + "Value": 383, + "Series": "Home" + }, + { + "Date": "2022-01-03", + "Value": 377, + "Series": "Home" + }, + { + "Date": "2022-01-14", + "Value": 379, + "Series": "Home" + }, + { + "Date": "2022-01-25", + "Value": 374, + "Series": "Home" + }, + { + "Date": "2022-02-05", + "Value": 376, + "Series": "Home" + }, + { + "Date": "2022-02-16", + "Value": 377, + "Series": "Home" + }, + { + "Date": "2022-02-27", + "Value": 378, + "Series": "Home" + }, + { + "Date": "2022-03-10", + "Value": 383, + "Series": "Home" + }, + { + "Date": "2022-03-21", + "Value": 390, + "Series": "Home" + }, + { + "Date": "2022-04-01", + "Value": 400, + "Series": "Home" + }, + { + "Date": "2022-04-12", + "Value": 405, + "Series": "Home" + }, + { + "Date": "2022-04-23", + "Value": 409, + "Series": "Home" + }, + { + "Date": "2022-05-04", + "Value": 415, + "Series": "Home" + }, + { + "Date": "2022-05-15", + "Value": 413, + "Series": "Home" + }, + { + "Date": "2022-05-26", + "Value": 410, + "Series": "Home" + }, + { + "Date": "2022-06-05", + "Value": 410, + "Series": "Home" + }, + { + "Date": "2022-06-16", + "Value": 416, + "Series": "Home" + }, + { + "Date": "2022-06-27", + "Value": 422, + "Series": "Home" + }, + { + "Date": "2022-07-08", + "Value": 420, + "Series": "Home" + }, + { + "Date": "2022-07-19", + "Value": 424, + "Series": "Home" + }, + { + "Date": "2022-07-30", + "Value": 431, + "Series": "Home" + }, + { + "Date": "2022-08-10", + "Value": 437, + "Series": "Home" + }, + { + "Date": "2022-08-21", + "Value": 446, + "Series": "Home" + }, + { + "Date": "2022-09-01", + "Value": 458, + "Series": "Home" + }, + { + "Date": "2022-09-12", + "Value": 468, + "Series": "Home" + }, + { + "Date": "2022-09-23", + "Value": 470, + "Series": "Home" + }, + { + "Date": "2022-10-04", + "Value": 477, + "Series": "Home" + }, + { + "Date": "2022-10-15", + "Value": 475, + "Series": "Home" + }, + { + "Date": "2022-10-26", + "Value": 480, + "Series": "Home" + }, + { + "Date": "2022-11-06", + "Value": 488, + "Series": "Home" + }, + { + "Date": "2022-11-17", + "Value": 494, + "Series": "Home" + }, + { + "Date": "2022-11-28", + "Value": 499, + "Series": "Home" + }, + { + "Date": "2022-12-09", + "Value": 503, + "Series": "Home" + }, + { + "Date": "2022-12-20", + "Value": 499, + "Series": "Home" + }, + { + "Date": "2020-01-01", + "Value": 69, + "Series": "Garden" + }, + { + "Date": "2020-01-11", + "Value": 72, + "Series": "Garden" + }, + { + "Date": "2020-01-22", + "Value": 61, + "Series": "Garden" + }, + { + "Date": "2020-02-02", + "Value": 65, + "Series": "Garden" + }, + { + "Date": "2020-02-13", + "Value": 71, + "Series": "Garden" + }, + { + "Date": "2020-02-24", + "Value": 76, + "Series": "Garden" + }, + { + "Date": "2020-03-06", + "Value": 70, + "Series": "Garden" + }, + { + "Date": "2020-03-17", + "Value": 75, + "Series": "Garden" + }, + { + "Date": "2020-03-28", + "Value": 67, + "Series": "Garden" + }, + { + "Date": "2020-04-08", + "Value": 59, + "Series": "Garden" + }, + { + "Date": "2020-04-19", + "Value": 55, + "Series": "Garden" + }, + { + "Date": "2020-04-30", + "Value": 55, + "Series": "Garden" + }, + { + "Date": "2020-05-11", + "Value": 48, + "Series": "Garden" + }, + { + "Date": "2020-05-22", + "Value": 27, + "Series": "Garden" + }, + { + "Date": "2020-06-02", + "Value": 0, + "Series": "Garden" + }, + { + "Date": "2020-06-13", + "Value": 0, + "Series": "Garden" + }, + { + "Date": "2020-06-24", + "Value": 0, + "Series": "Garden" + }, + { + "Date": "2020-07-05", + "Value": 0, + "Series": "Garden" + }, + { + "Date": "2020-07-16", + "Value": 0, + "Series": "Garden" + }, + { + "Date": "2020-07-27", + "Value": 6, + "Series": "Garden" + }, + { + "Date": "2020-08-07", + "Value": 0, + "Series": "Garden" + }, + { + "Date": "2020-08-17", + "Value": 0, + "Series": "Garden" + }, + { + "Date": "2020-08-28", + "Value": 0, + "Series": "Garden" + }, + { + "Date": "2020-09-08", + "Value": 0, + "Series": "Garden" + }, + { + "Date": "2020-09-19", + "Value": 0, + "Series": "Garden" + }, + { + "Date": "2020-09-30", + "Value": 3, + "Series": "Garden" + }, + { + "Date": "2020-10-11", + "Value": 0, + "Series": "Garden" + }, + { + "Date": "2020-10-22", + "Value": 5, + "Series": "Garden" + }, + { + "Date": "2020-11-02", + "Value": 0, + "Series": "Garden" + }, + { + "Date": "2020-11-13", + "Value": 4, + "Series": "Garden" + }, + { + "Date": "2020-11-24", + "Value": 15, + "Series": "Garden" + }, + { + "Date": "2020-12-05", + "Value": 34, + "Series": "Garden" + }, + { + "Date": "2020-12-16", + "Value": 46, + "Series": "Garden" + }, + { + "Date": "2020-12-27", + "Value": 51, + "Series": "Garden" + }, + { + "Date": "2021-01-07", + "Value": 41, + "Series": "Garden" + }, + { + "Date": "2021-01-18", + "Value": 30, + "Series": "Garden" + }, + { + "Date": "2021-01-29", + "Value": 31, + "Series": "Garden" + }, + { + "Date": "2021-02-09", + "Value": 49, + "Series": "Garden" + }, + { + "Date": "2021-02-20", + "Value": 57, + "Series": "Garden" + }, + { + "Date": "2021-03-03", + "Value": 46, + "Series": "Garden" + }, + { + "Date": "2021-03-14", + "Value": 46, + "Series": "Garden" + }, + { + "Date": "2021-03-24", + "Value": 37, + "Series": "Garden" + }, + { + "Date": "2021-04-04", + "Value": 15, + "Series": "Garden" + }, + { + "Date": "2021-04-15", + "Value": 0, + "Series": "Garden" + }, + { + "Date": "2021-04-26", + "Value": 0, + "Series": "Garden" + }, + { + "Date": "2021-05-07", + "Value": 3, + "Series": "Garden" + }, + { + "Date": "2021-05-18", + "Value": 7, + "Series": "Garden" + }, + { + "Date": "2021-05-29", + "Value": 19, + "Series": "Garden" + }, + { + "Date": "2021-06-09", + "Value": 9, + "Series": "Garden" + }, + { + "Date": "2021-06-20", + "Value": 4, + "Series": "Garden" + }, + { + "Date": "2021-07-01", + "Value": 11, + "Series": "Garden" + }, + { + "Date": "2021-07-12", + "Value": 30, + "Series": "Garden" + }, + { + "Date": "2021-07-23", + "Value": 41, + "Series": "Garden" + }, + { + "Date": "2021-08-03", + "Value": 64, + "Series": "Garden" + }, + { + "Date": "2021-08-14", + "Value": 98, + "Series": "Garden" + }, + { + "Date": "2021-08-25", + "Value": 118, + "Series": "Garden" + }, + { + "Date": "2021-09-05", + "Value": 129, + "Series": "Garden" + }, + { + "Date": "2021-09-16", + "Value": 141, + "Series": "Garden" + }, + { + "Date": "2021-09-27", + "Value": 157, + "Series": "Garden" + }, + { + "Date": "2021-10-08", + "Value": 172, + "Series": "Garden" + }, + { + "Date": "2021-10-19", + "Value": 169, + "Series": "Garden" + }, + { + "Date": "2021-10-29", + "Value": 184, + "Series": "Garden" + }, + { + "Date": "2021-11-09", + "Value": 211, + "Series": "Garden" + }, + { + "Date": "2021-11-20", + "Value": 215, + "Series": "Garden" + }, + { + "Date": "2021-12-01", + "Value": 222, + "Series": "Garden" + }, + { + "Date": "2021-12-12", + "Value": 240, + "Series": "Garden" + }, + { + "Date": "2021-12-23", + "Value": 252, + "Series": "Garden" + }, + { + "Date": "2022-01-03", + "Value": 254, + "Series": "Garden" + }, + { + "Date": "2022-01-14", + "Value": 250, + "Series": "Garden" + }, + { + "Date": "2022-01-25", + "Value": 247, + "Series": "Garden" + }, + { + "Date": "2022-02-05", + "Value": 232, + "Series": "Garden" + }, + { + "Date": "2022-02-16", + "Value": 238, + "Series": "Garden" + }, + { + "Date": "2022-02-27", + "Value": 249, + "Series": "Garden" + }, + { + "Date": "2022-03-10", + "Value": 256, + "Series": "Garden" + }, + { + "Date": "2022-03-21", + "Value": 265, + "Series": "Garden" + }, + { + "Date": "2022-04-01", + "Value": 259, + "Series": "Garden" + }, + { + "Date": "2022-04-12", + "Value": 260, + "Series": "Garden" + }, + { + "Date": "2022-04-23", + "Value": 271, + "Series": "Garden" + }, + { + "Date": "2022-05-04", + "Value": 268, + "Series": "Garden" + }, + { + "Date": "2022-05-15", + "Value": 279, + "Series": "Garden" + }, + { + "Date": "2022-05-26", + "Value": 270, + "Series": "Garden" + }, + { + "Date": "2022-06-05", + "Value": 265, + "Series": "Garden" + }, + { + "Date": "2022-06-16", + "Value": 262, + "Series": "Garden" + }, + { + "Date": "2022-06-27", + "Value": 263, + "Series": "Garden" + }, + { + "Date": "2022-07-08", + "Value": 280, + "Series": "Garden" + }, + { + "Date": "2022-07-19", + "Value": 309, + "Series": "Garden" + }, + { + "Date": "2022-07-30", + "Value": 331, + "Series": "Garden" + }, + { + "Date": "2022-08-10", + "Value": 334, + "Series": "Garden" + }, + { + "Date": "2022-08-21", + "Value": 330, + "Series": "Garden" + }, + { + "Date": "2022-09-01", + "Value": 322, + "Series": "Garden" + }, + { + "Date": "2022-09-12", + "Value": 326, + "Series": "Garden" + }, + { + "Date": "2022-09-23", + "Value": 329, + "Series": "Garden" + }, + { + "Date": "2022-10-04", + "Value": 320, + "Series": "Garden" + }, + { + "Date": "2022-10-15", + "Value": 300, + "Series": "Garden" + }, + { + "Date": "2022-10-26", + "Value": 266, + "Series": "Garden" + }, + { + "Date": "2022-11-06", + "Value": 223, + "Series": "Garden" + }, + { + "Date": "2022-11-17", + "Value": 174, + "Series": "Garden" + }, + { + "Date": "2022-11-28", + "Value": 132, + "Series": "Garden" + }, + { + "Date": "2022-12-09", + "Value": 102, + "Series": "Garden" + }, + { + "Date": "2022-12-20", + "Value": 89, + "Series": "Garden" + }, + { + "Date": "2020-01-01", + "Value": 233, + "Series": "Auto" + }, + { + "Date": "2020-01-11", + "Value": 239, + "Series": "Auto" + }, + { + "Date": "2020-01-22", + "Value": 252, + "Series": "Auto" + }, + { + "Date": "2020-02-02", + "Value": 266, + "Series": "Auto" + }, + { + "Date": "2020-02-13", + "Value": 277, + "Series": "Auto" + }, + { + "Date": "2020-02-24", + "Value": 283, + "Series": "Auto" + }, + { + "Date": "2020-03-06", + "Value": 291, + "Series": "Auto" + }, + { + "Date": "2020-03-17", + "Value": 295, + "Series": "Auto" + }, + { + "Date": "2020-03-28", + "Value": 306, + "Series": "Auto" + }, + { + "Date": "2020-04-08", + "Value": 319, + "Series": "Auto" + }, + { + "Date": "2020-04-19", + "Value": 333, + "Series": "Auto" + }, + { + "Date": "2020-04-30", + "Value": 342, + "Series": "Auto" + }, + { + "Date": "2020-05-11", + "Value": 343, + "Series": "Auto" + }, + { + "Date": "2020-05-22", + "Value": 354, + "Series": "Auto" + }, + { + "Date": "2020-06-02", + "Value": 363, + "Series": "Auto" + }, + { + "Date": "2020-06-13", + "Value": 382, + "Series": "Auto" + }, + { + "Date": "2020-06-24", + "Value": 395, + "Series": "Auto" + }, + { + "Date": "2020-07-05", + "Value": 407, + "Series": "Auto" + }, + { + "Date": "2020-07-16", + "Value": 422, + "Series": "Auto" + }, + { + "Date": "2020-07-27", + "Value": 424, + "Series": "Auto" + }, + { + "Date": "2020-08-07", + "Value": 413, + "Series": "Auto" + }, + { + "Date": "2020-08-17", + "Value": 413, + "Series": "Auto" + }, + { + "Date": "2020-08-28", + "Value": 404, + "Series": "Auto" + }, + { + "Date": "2020-09-08", + "Value": 390, + "Series": "Auto" + }, + { + "Date": "2020-09-19", + "Value": 376, + "Series": "Auto" + }, + { + "Date": "2020-09-30", + "Value": 377, + "Series": "Auto" + }, + { + "Date": "2020-10-11", + "Value": 385, + "Series": "Auto" + }, + { + "Date": "2020-10-22", + "Value": 394, + "Series": "Auto" + }, + { + "Date": "2020-11-02", + "Value": 409, + "Series": "Auto" + }, + { + "Date": "2020-11-13", + "Value": 414, + "Series": "Auto" + }, + { + "Date": "2020-11-24", + "Value": 427, + "Series": "Auto" + }, + { + "Date": "2020-12-05", + "Value": 430, + "Series": "Auto" + }, + { + "Date": "2020-12-16", + "Value": 426, + "Series": "Auto" + }, + { + "Date": "2020-12-27", + "Value": 431, + "Series": "Auto" + }, + { + "Date": "2021-01-07", + "Value": 446, + "Series": "Auto" + }, + { + "Date": "2021-01-18", + "Value": 450, + "Series": "Auto" + }, + { + "Date": "2021-01-29", + "Value": 461, + "Series": "Auto" + }, + { + "Date": "2021-02-09", + "Value": 475, + "Series": "Auto" + }, + { + "Date": "2021-02-20", + "Value": 496, + "Series": "Auto" + }, + { + "Date": "2021-03-03", + "Value": 510, + "Series": "Auto" + }, + { + "Date": "2021-03-14", + "Value": 508, + "Series": "Auto" + }, + { + "Date": "2021-03-24", + "Value": 507, + "Series": "Auto" + }, + { + "Date": "2021-04-04", + "Value": 504, + "Series": "Auto" + }, + { + "Date": "2021-04-15", + "Value": 509, + "Series": "Auto" + }, + { + "Date": "2021-04-26", + "Value": 500, + "Series": "Auto" + }, + { + "Date": "2021-05-07", + "Value": 482, + "Series": "Auto" + }, + { + "Date": "2021-05-18", + "Value": 465, + "Series": "Auto" + }, + { + "Date": "2021-05-29", + "Value": 456, + "Series": "Auto" + }, + { + "Date": "2021-06-09", + "Value": 458, + "Series": "Auto" + }, + { + "Date": "2021-06-20", + "Value": 460, + "Series": "Auto" + }, + { + "Date": "2021-07-01", + "Value": 468, + "Series": "Auto" + }, + { + "Date": "2021-07-12", + "Value": 479, + "Series": "Auto" + }, + { + "Date": "2021-07-23", + "Value": 489, + "Series": "Auto" + }, + { + "Date": "2021-08-03", + "Value": 505, + "Series": "Auto" + }, + { + "Date": "2021-08-14", + "Value": 528, + "Series": "Auto" + }, + { + "Date": "2021-08-25", + "Value": 550, + "Series": "Auto" + }, + { + "Date": "2021-09-05", + "Value": 577, + "Series": "Auto" + }, + { + "Date": "2021-09-16", + "Value": 605, + "Series": "Auto" + }, + { + "Date": "2021-09-27", + "Value": 612, + "Series": "Auto" + }, + { + "Date": "2021-10-08", + "Value": 620, + "Series": "Auto" + }, + { + "Date": "2021-10-19", + "Value": 618, + "Series": "Auto" + }, + { + "Date": "2021-10-29", + "Value": 604, + "Series": "Auto" + }, + { + "Date": "2021-11-09", + "Value": 600, + "Series": "Auto" + }, + { + "Date": "2021-11-20", + "Value": 604, + "Series": "Auto" + }, + { + "Date": "2021-12-01", + "Value": 609, + "Series": "Auto" + }, + { + "Date": "2021-12-12", + "Value": 611, + "Series": "Auto" + }, + { + "Date": "2021-12-23", + "Value": 624, + "Series": "Auto" + }, + { + "Date": "2022-01-03", + "Value": 626, + "Series": "Auto" + }, + { + "Date": "2022-01-14", + "Value": 640, + "Series": "Auto" + }, + { + "Date": "2022-01-25", + "Value": 661, + "Series": "Auto" + }, + { + "Date": "2022-02-05", + "Value": 683, + "Series": "Auto" + }, + { + "Date": "2022-02-16", + "Value": 696, + "Series": "Auto" + }, + { + "Date": "2022-02-27", + "Value": 701, + "Series": "Auto" + }, + { + "Date": "2022-03-10", + "Value": 692, + "Series": "Auto" + }, + { + "Date": "2022-03-21", + "Value": 690, + "Series": "Auto" + }, + { + "Date": "2022-04-01", + "Value": 682, + "Series": "Auto" + }, + { + "Date": "2022-04-12", + "Value": 682, + "Series": "Auto" + }, + { + "Date": "2022-04-23", + "Value": 685, + "Series": "Auto" + }, + { + "Date": "2022-05-04", + "Value": 683, + "Series": "Auto" + }, + { + "Date": "2022-05-15", + "Value": 691, + "Series": "Auto" + }, + { + "Date": "2022-05-26", + "Value": 685, + "Series": "Auto" + }, + { + "Date": "2022-06-05", + "Value": 681, + "Series": "Auto" + }, + { + "Date": "2022-06-16", + "Value": 687, + "Series": "Auto" + }, + { + "Date": "2022-06-27", + "Value": 701, + "Series": "Auto" + }, + { + "Date": "2022-07-08", + "Value": 723, + "Series": "Auto" + }, + { + "Date": "2022-07-19", + "Value": 743, + "Series": "Auto" + }, + { + "Date": "2022-07-30", + "Value": 762, + "Series": "Auto" + }, + { + "Date": "2022-08-10", + "Value": 777, + "Series": "Auto" + }, + { + "Date": "2022-08-21", + "Value": 797, + "Series": "Auto" + }, + { + "Date": "2022-09-01", + "Value": 800, + "Series": "Auto" + }, + { + "Date": "2022-09-12", + "Value": 798, + "Series": "Auto" + }, + { + "Date": "2022-09-23", + "Value": 795, + "Series": "Auto" + }, + { + "Date": "2022-10-04", + "Value": 793, + "Series": "Auto" + }, + { + "Date": "2022-10-15", + "Value": 800, + "Series": "Auto" + }, + { + "Date": "2022-10-26", + "Value": 806, + "Series": "Auto" + }, + { + "Date": "2022-11-06", + "Value": 806, + "Series": "Auto" + }, + { + "Date": "2022-11-17", + "Value": 809, + "Series": "Auto" + }, + { + "Date": "2022-11-28", + "Value": 809, + "Series": "Auto" + }, + { + "Date": "2022-12-09", + "Value": 814, + "Series": "Auto" + }, + { + "Date": "2022-12-20", + "Value": 809, + "Series": "Auto" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/03-card200.flint.json b/test-harness/excel/evaluations/inputs/line-chart/03-card200.flint.json new file mode 100644 index 00000000..ce4f874e --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/03-card200.flint.json @@ -0,0 +1,20023 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity", + "Series": "Category" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "Date", + "y": "Value", + "color": "Series" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 229, + "Series": "Electronics" + }, + { + "Date": "2020-01-06", + "Value": 229, + "Series": "Electronics" + }, + { + "Date": "2020-01-11", + "Value": 226, + "Series": "Electronics" + }, + { + "Date": "2020-01-17", + "Value": 225, + "Series": "Electronics" + }, + { + "Date": "2020-01-22", + "Value": 229, + "Series": "Electronics" + }, + { + "Date": "2020-01-28", + "Value": 228, + "Series": "Electronics" + }, + { + "Date": "2020-02-02", + "Value": 225, + "Series": "Electronics" + }, + { + "Date": "2020-02-08", + "Value": 227, + "Series": "Electronics" + }, + { + "Date": "2020-02-13", + "Value": 226, + "Series": "Electronics" + }, + { + "Date": "2020-02-19", + "Value": 225, + "Series": "Electronics" + }, + { + "Date": "2020-02-24", + "Value": 221, + "Series": "Electronics" + }, + { + "Date": "2020-03-01", + "Value": 218, + "Series": "Electronics" + }, + { + "Date": "2020-03-06", + "Value": 213, + "Series": "Electronics" + }, + { + "Date": "2020-03-12", + "Value": 204, + "Series": "Electronics" + }, + { + "Date": "2020-03-17", + "Value": 201, + "Series": "Electronics" + }, + { + "Date": "2020-03-23", + "Value": 194, + "Series": "Electronics" + }, + { + "Date": "2020-03-28", + "Value": 187, + "Series": "Electronics" + }, + { + "Date": "2020-04-03", + "Value": 181, + "Series": "Electronics" + }, + { + "Date": "2020-04-08", + "Value": 180, + "Series": "Electronics" + }, + { + "Date": "2020-04-14", + "Value": 175, + "Series": "Electronics" + }, + { + "Date": "2020-04-19", + "Value": 172, + "Series": "Electronics" + }, + { + "Date": "2020-04-24", + "Value": 165, + "Series": "Electronics" + }, + { + "Date": "2020-04-30", + "Value": 164, + "Series": "Electronics" + }, + { + "Date": "2020-05-05", + "Value": 158, + "Series": "Electronics" + }, + { + "Date": "2020-05-11", + "Value": 158, + "Series": "Electronics" + }, + { + "Date": "2020-05-16", + "Value": 156, + "Series": "Electronics" + }, + { + "Date": "2020-05-22", + "Value": 155, + "Series": "Electronics" + }, + { + "Date": "2020-05-27", + "Value": 149, + "Series": "Electronics" + }, + { + "Date": "2020-06-02", + "Value": 149, + "Series": "Electronics" + }, + { + "Date": "2020-06-07", + "Value": 151, + "Series": "Electronics" + }, + { + "Date": "2020-06-13", + "Value": 156, + "Series": "Electronics" + }, + { + "Date": "2020-06-18", + "Value": 155, + "Series": "Electronics" + }, + { + "Date": "2020-06-24", + "Value": 159, + "Series": "Electronics" + }, + { + "Date": "2020-06-29", + "Value": 166, + "Series": "Electronics" + }, + { + "Date": "2020-07-05", + "Value": 173, + "Series": "Electronics" + }, + { + "Date": "2020-07-10", + "Value": 175, + "Series": "Electronics" + }, + { + "Date": "2020-07-16", + "Value": 177, + "Series": "Electronics" + }, + { + "Date": "2020-07-21", + "Value": 176, + "Series": "Electronics" + }, + { + "Date": "2020-07-27", + "Value": 179, + "Series": "Electronics" + }, + { + "Date": "2020-08-01", + "Value": 182, + "Series": "Electronics" + }, + { + "Date": "2020-08-07", + "Value": 187, + "Series": "Electronics" + }, + { + "Date": "2020-08-12", + "Value": 191, + "Series": "Electronics" + }, + { + "Date": "2020-08-17", + "Value": 197, + "Series": "Electronics" + }, + { + "Date": "2020-08-23", + "Value": 202, + "Series": "Electronics" + }, + { + "Date": "2020-08-28", + "Value": 208, + "Series": "Electronics" + }, + { + "Date": "2020-09-03", + "Value": 210, + "Series": "Electronics" + }, + { + "Date": "2020-09-08", + "Value": 209, + "Series": "Electronics" + }, + { + "Date": "2020-09-14", + "Value": 208, + "Series": "Electronics" + }, + { + "Date": "2020-09-19", + "Value": 204, + "Series": "Electronics" + }, + { + "Date": "2020-09-25", + "Value": 205, + "Series": "Electronics" + }, + { + "Date": "2020-09-30", + "Value": 209, + "Series": "Electronics" + }, + { + "Date": "2020-10-06", + "Value": 216, + "Series": "Electronics" + }, + { + "Date": "2020-10-11", + "Value": 223, + "Series": "Electronics" + }, + { + "Date": "2020-10-17", + "Value": 223, + "Series": "Electronics" + }, + { + "Date": "2020-10-22", + "Value": 221, + "Series": "Electronics" + }, + { + "Date": "2020-10-28", + "Value": 223, + "Series": "Electronics" + }, + { + "Date": "2020-11-02", + "Value": 225, + "Series": "Electronics" + }, + { + "Date": "2020-11-08", + "Value": 223, + "Series": "Electronics" + }, + { + "Date": "2020-11-13", + "Value": 221, + "Series": "Electronics" + }, + { + "Date": "2020-11-19", + "Value": 218, + "Series": "Electronics" + }, + { + "Date": "2020-11-24", + "Value": 219, + "Series": "Electronics" + }, + { + "Date": "2020-11-29", + "Value": 225, + "Series": "Electronics" + }, + { + "Date": "2020-12-05", + "Value": 225, + "Series": "Electronics" + }, + { + "Date": "2020-12-10", + "Value": 229, + "Series": "Electronics" + }, + { + "Date": "2020-12-16", + "Value": 229, + "Series": "Electronics" + }, + { + "Date": "2020-12-21", + "Value": 225, + "Series": "Electronics" + }, + { + "Date": "2020-12-27", + "Value": 220, + "Series": "Electronics" + }, + { + "Date": "2021-01-01", + "Value": 220, + "Series": "Electronics" + }, + { + "Date": "2021-01-07", + "Value": 215, + "Series": "Electronics" + }, + { + "Date": "2021-01-12", + "Value": 216, + "Series": "Electronics" + }, + { + "Date": "2021-01-18", + "Value": 213, + "Series": "Electronics" + }, + { + "Date": "2021-01-23", + "Value": 209, + "Series": "Electronics" + }, + { + "Date": "2021-01-29", + "Value": 210, + "Series": "Electronics" + }, + { + "Date": "2021-02-03", + "Value": 212, + "Series": "Electronics" + }, + { + "Date": "2021-02-09", + "Value": 215, + "Series": "Electronics" + }, + { + "Date": "2021-02-14", + "Value": 220, + "Series": "Electronics" + }, + { + "Date": "2021-02-20", + "Value": 220, + "Series": "Electronics" + }, + { + "Date": "2021-02-25", + "Value": 222, + "Series": "Electronics" + }, + { + "Date": "2021-03-03", + "Value": 224, + "Series": "Electronics" + }, + { + "Date": "2021-03-08", + "Value": 224, + "Series": "Electronics" + }, + { + "Date": "2021-03-14", + "Value": 223, + "Series": "Electronics" + }, + { + "Date": "2021-03-19", + "Value": 221, + "Series": "Electronics" + }, + { + "Date": "2021-03-24", + "Value": 224, + "Series": "Electronics" + }, + { + "Date": "2021-03-30", + "Value": 222, + "Series": "Electronics" + }, + { + "Date": "2021-04-04", + "Value": 220, + "Series": "Electronics" + }, + { + "Date": "2021-04-10", + "Value": 223, + "Series": "Electronics" + }, + { + "Date": "2021-04-15", + "Value": 225, + "Series": "Electronics" + }, + { + "Date": "2021-04-21", + "Value": 230, + "Series": "Electronics" + }, + { + "Date": "2021-04-26", + "Value": 236, + "Series": "Electronics" + }, + { + "Date": "2021-05-02", + "Value": 243, + "Series": "Electronics" + }, + { + "Date": "2021-05-07", + "Value": 247, + "Series": "Electronics" + }, + { + "Date": "2021-05-13", + "Value": 252, + "Series": "Electronics" + }, + { + "Date": "2021-05-18", + "Value": 260, + "Series": "Electronics" + }, + { + "Date": "2021-05-24", + "Value": 270, + "Series": "Electronics" + }, + { + "Date": "2021-05-29", + "Value": 280, + "Series": "Electronics" + }, + { + "Date": "2021-06-04", + "Value": 290, + "Series": "Electronics" + }, + { + "Date": "2021-06-09", + "Value": 302, + "Series": "Electronics" + }, + { + "Date": "2021-06-15", + "Value": 313, + "Series": "Electronics" + }, + { + "Date": "2021-06-20", + "Value": 321, + "Series": "Electronics" + }, + { + "Date": "2021-06-26", + "Value": 326, + "Series": "Electronics" + }, + { + "Date": "2021-07-01", + "Value": 325, + "Series": "Electronics" + }, + { + "Date": "2021-07-06", + "Value": 327, + "Series": "Electronics" + }, + { + "Date": "2021-07-12", + "Value": 330, + "Series": "Electronics" + }, + { + "Date": "2021-07-17", + "Value": 334, + "Series": "Electronics" + }, + { + "Date": "2021-07-23", + "Value": 334, + "Series": "Electronics" + }, + { + "Date": "2021-07-28", + "Value": 329, + "Series": "Electronics" + }, + { + "Date": "2021-08-03", + "Value": 331, + "Series": "Electronics" + }, + { + "Date": "2021-08-08", + "Value": 337, + "Series": "Electronics" + }, + { + "Date": "2021-08-14", + "Value": 343, + "Series": "Electronics" + }, + { + "Date": "2021-08-19", + "Value": 350, + "Series": "Electronics" + }, + { + "Date": "2021-08-25", + "Value": 350, + "Series": "Electronics" + }, + { + "Date": "2021-08-30", + "Value": 347, + "Series": "Electronics" + }, + { + "Date": "2021-09-05", + "Value": 343, + "Series": "Electronics" + }, + { + "Date": "2021-09-10", + "Value": 337, + "Series": "Electronics" + }, + { + "Date": "2021-09-16", + "Value": 332, + "Series": "Electronics" + }, + { + "Date": "2021-09-21", + "Value": 324, + "Series": "Electronics" + }, + { + "Date": "2021-09-27", + "Value": 322, + "Series": "Electronics" + }, + { + "Date": "2021-10-02", + "Value": 321, + "Series": "Electronics" + }, + { + "Date": "2021-10-08", + "Value": 326, + "Series": "Electronics" + }, + { + "Date": "2021-10-13", + "Value": 328, + "Series": "Electronics" + }, + { + "Date": "2021-10-19", + "Value": 331, + "Series": "Electronics" + }, + { + "Date": "2021-10-24", + "Value": 330, + "Series": "Electronics" + }, + { + "Date": "2021-10-29", + "Value": 328, + "Series": "Electronics" + }, + { + "Date": "2021-11-04", + "Value": 327, + "Series": "Electronics" + }, + { + "Date": "2021-11-09", + "Value": 331, + "Series": "Electronics" + }, + { + "Date": "2021-11-15", + "Value": 333, + "Series": "Electronics" + }, + { + "Date": "2021-11-20", + "Value": 337, + "Series": "Electronics" + }, + { + "Date": "2021-11-26", + "Value": 342, + "Series": "Electronics" + }, + { + "Date": "2021-12-01", + "Value": 346, + "Series": "Electronics" + }, + { + "Date": "2021-12-07", + "Value": 353, + "Series": "Electronics" + }, + { + "Date": "2021-12-12", + "Value": 354, + "Series": "Electronics" + }, + { + "Date": "2021-12-18", + "Value": 352, + "Series": "Electronics" + }, + { + "Date": "2021-12-23", + "Value": 353, + "Series": "Electronics" + }, + { + "Date": "2021-12-29", + "Value": 357, + "Series": "Electronics" + }, + { + "Date": "2022-01-03", + "Value": 355, + "Series": "Electronics" + }, + { + "Date": "2022-01-09", + "Value": 354, + "Series": "Electronics" + }, + { + "Date": "2022-01-14", + "Value": 350, + "Series": "Electronics" + }, + { + "Date": "2022-01-20", + "Value": 352, + "Series": "Electronics" + }, + { + "Date": "2022-01-25", + "Value": 350, + "Series": "Electronics" + }, + { + "Date": "2022-01-31", + "Value": 350, + "Series": "Electronics" + }, + { + "Date": "2022-02-05", + "Value": 352, + "Series": "Electronics" + }, + { + "Date": "2022-02-10", + "Value": 351, + "Series": "Electronics" + }, + { + "Date": "2022-02-16", + "Value": 351, + "Series": "Electronics" + }, + { + "Date": "2022-02-21", + "Value": 349, + "Series": "Electronics" + }, + { + "Date": "2022-02-27", + "Value": 353, + "Series": "Electronics" + }, + { + "Date": "2022-03-04", + "Value": 359, + "Series": "Electronics" + }, + { + "Date": "2022-03-10", + "Value": 363, + "Series": "Electronics" + }, + { + "Date": "2022-03-15", + "Value": 365, + "Series": "Electronics" + }, + { + "Date": "2022-03-21", + "Value": 369, + "Series": "Electronics" + }, + { + "Date": "2022-03-26", + "Value": 373, + "Series": "Electronics" + }, + { + "Date": "2022-04-01", + "Value": 376, + "Series": "Electronics" + }, + { + "Date": "2022-04-06", + "Value": 374, + "Series": "Electronics" + }, + { + "Date": "2022-04-12", + "Value": 372, + "Series": "Electronics" + }, + { + "Date": "2022-04-17", + "Value": 371, + "Series": "Electronics" + }, + { + "Date": "2022-04-23", + "Value": 368, + "Series": "Electronics" + }, + { + "Date": "2022-04-28", + "Value": 362, + "Series": "Electronics" + }, + { + "Date": "2022-05-04", + "Value": 362, + "Series": "Electronics" + }, + { + "Date": "2022-05-09", + "Value": 364, + "Series": "Electronics" + }, + { + "Date": "2022-05-15", + "Value": 368, + "Series": "Electronics" + }, + { + "Date": "2022-05-20", + "Value": 370, + "Series": "Electronics" + }, + { + "Date": "2022-05-26", + "Value": 372, + "Series": "Electronics" + }, + { + "Date": "2022-05-31", + "Value": 374, + "Series": "Electronics" + }, + { + "Date": "2022-06-05", + "Value": 371, + "Series": "Electronics" + }, + { + "Date": "2022-06-11", + "Value": 366, + "Series": "Electronics" + }, + { + "Date": "2022-06-16", + "Value": 366, + "Series": "Electronics" + }, + { + "Date": "2022-06-22", + "Value": 365, + "Series": "Electronics" + }, + { + "Date": "2022-06-27", + "Value": 360, + "Series": "Electronics" + }, + { + "Date": "2022-07-03", + "Value": 352, + "Series": "Electronics" + }, + { + "Date": "2022-07-08", + "Value": 350, + "Series": "Electronics" + }, + { + "Date": "2022-07-14", + "Value": 351, + "Series": "Electronics" + }, + { + "Date": "2022-07-19", + "Value": 349, + "Series": "Electronics" + }, + { + "Date": "2022-07-25", + "Value": 349, + "Series": "Electronics" + }, + { + "Date": "2022-07-30", + "Value": 350, + "Series": "Electronics" + }, + { + "Date": "2022-08-05", + "Value": 356, + "Series": "Electronics" + }, + { + "Date": "2022-08-10", + "Value": 356, + "Series": "Electronics" + }, + { + "Date": "2022-08-16", + "Value": 360, + "Series": "Electronics" + }, + { + "Date": "2022-08-21", + "Value": 363, + "Series": "Electronics" + }, + { + "Date": "2022-08-27", + "Value": 367, + "Series": "Electronics" + }, + { + "Date": "2022-09-01", + "Value": 375, + "Series": "Electronics" + }, + { + "Date": "2022-09-07", + "Value": 382, + "Series": "Electronics" + }, + { + "Date": "2022-09-12", + "Value": 391, + "Series": "Electronics" + }, + { + "Date": "2022-09-17", + "Value": 401, + "Series": "Electronics" + }, + { + "Date": "2022-09-23", + "Value": 408, + "Series": "Electronics" + }, + { + "Date": "2022-09-28", + "Value": 408, + "Series": "Electronics" + }, + { + "Date": "2022-10-04", + "Value": 413, + "Series": "Electronics" + }, + { + "Date": "2022-10-09", + "Value": 418, + "Series": "Electronics" + }, + { + "Date": "2022-10-15", + "Value": 420, + "Series": "Electronics" + }, + { + "Date": "2022-10-20", + "Value": 423, + "Series": "Electronics" + }, + { + "Date": "2022-10-26", + "Value": 421, + "Series": "Electronics" + }, + { + "Date": "2022-10-31", + "Value": 418, + "Series": "Electronics" + }, + { + "Date": "2022-11-06", + "Value": 414, + "Series": "Electronics" + }, + { + "Date": "2022-11-11", + "Value": 413, + "Series": "Electronics" + }, + { + "Date": "2022-11-17", + "Value": 412, + "Series": "Electronics" + }, + { + "Date": "2022-11-22", + "Value": 412, + "Series": "Electronics" + }, + { + "Date": "2022-11-28", + "Value": 409, + "Series": "Electronics" + }, + { + "Date": "2022-12-03", + "Value": 409, + "Series": "Electronics" + }, + { + "Date": "2022-12-09", + "Value": 408, + "Series": "Electronics" + }, + { + "Date": "2022-12-14", + "Value": 404, + "Series": "Electronics" + }, + { + "Date": "2022-12-20", + "Value": 397, + "Series": "Electronics" + }, + { + "Date": "2022-12-25", + "Value": 391, + "Series": "Electronics" + }, + { + "Date": "2020-01-01", + "Value": 143, + "Series": "Clothing" + }, + { + "Date": "2020-01-06", + "Value": 142, + "Series": "Clothing" + }, + { + "Date": "2020-01-11", + "Value": 143, + "Series": "Clothing" + }, + { + "Date": "2020-01-17", + "Value": 134, + "Series": "Clothing" + }, + { + "Date": "2020-01-22", + "Value": 141, + "Series": "Clothing" + }, + { + "Date": "2020-01-28", + "Value": 159, + "Series": "Clothing" + }, + { + "Date": "2020-02-02", + "Value": 173, + "Series": "Clothing" + }, + { + "Date": "2020-02-08", + "Value": 183, + "Series": "Clothing" + }, + { + "Date": "2020-02-13", + "Value": 190, + "Series": "Clothing" + }, + { + "Date": "2020-02-19", + "Value": 181, + "Series": "Clothing" + }, + { + "Date": "2020-02-24", + "Value": 183, + "Series": "Clothing" + }, + { + "Date": "2020-03-01", + "Value": 192, + "Series": "Clothing" + }, + { + "Date": "2020-03-06", + "Value": 189, + "Series": "Clothing" + }, + { + "Date": "2020-03-12", + "Value": 200, + "Series": "Clothing" + }, + { + "Date": "2020-03-17", + "Value": 214, + "Series": "Clothing" + }, + { + "Date": "2020-03-23", + "Value": 235, + "Series": "Clothing" + }, + { + "Date": "2020-03-28", + "Value": 242, + "Series": "Clothing" + }, + { + "Date": "2020-04-03", + "Value": 240, + "Series": "Clothing" + }, + { + "Date": "2020-04-08", + "Value": 234, + "Series": "Clothing" + }, + { + "Date": "2020-04-14", + "Value": 229, + "Series": "Clothing" + }, + { + "Date": "2020-04-19", + "Value": 238, + "Series": "Clothing" + }, + { + "Date": "2020-04-24", + "Value": 235, + "Series": "Clothing" + }, + { + "Date": "2020-04-30", + "Value": 245, + "Series": "Clothing" + }, + { + "Date": "2020-05-05", + "Value": 249, + "Series": "Clothing" + }, + { + "Date": "2020-05-11", + "Value": 247, + "Series": "Clothing" + }, + { + "Date": "2020-05-16", + "Value": 233, + "Series": "Clothing" + }, + { + "Date": "2020-05-22", + "Value": 225, + "Series": "Clothing" + }, + { + "Date": "2020-05-27", + "Value": 224, + "Series": "Clothing" + }, + { + "Date": "2020-06-02", + "Value": 225, + "Series": "Clothing" + }, + { + "Date": "2020-06-07", + "Value": 226, + "Series": "Clothing" + }, + { + "Date": "2020-06-13", + "Value": 218, + "Series": "Clothing" + }, + { + "Date": "2020-06-18", + "Value": 200, + "Series": "Clothing" + }, + { + "Date": "2020-06-24", + "Value": 187, + "Series": "Clothing" + }, + { + "Date": "2020-06-29", + "Value": 175, + "Series": "Clothing" + }, + { + "Date": "2020-07-05", + "Value": 169, + "Series": "Clothing" + }, + { + "Date": "2020-07-10", + "Value": 178, + "Series": "Clothing" + }, + { + "Date": "2020-07-16", + "Value": 192, + "Series": "Clothing" + }, + { + "Date": "2020-07-21", + "Value": 197, + "Series": "Clothing" + }, + { + "Date": "2020-07-27", + "Value": 203, + "Series": "Clothing" + }, + { + "Date": "2020-08-01", + "Value": 219, + "Series": "Clothing" + }, + { + "Date": "2020-08-07", + "Value": 243, + "Series": "Clothing" + }, + { + "Date": "2020-08-12", + "Value": 264, + "Series": "Clothing" + }, + { + "Date": "2020-08-17", + "Value": 269, + "Series": "Clothing" + }, + { + "Date": "2020-08-23", + "Value": 260, + "Series": "Clothing" + }, + { + "Date": "2020-08-28", + "Value": 250, + "Series": "Clothing" + }, + { + "Date": "2020-09-03", + "Value": 235, + "Series": "Clothing" + }, + { + "Date": "2020-09-08", + "Value": 232, + "Series": "Clothing" + }, + { + "Date": "2020-09-14", + "Value": 220, + "Series": "Clothing" + }, + { + "Date": "2020-09-19", + "Value": 202, + "Series": "Clothing" + }, + { + "Date": "2020-09-25", + "Value": 195, + "Series": "Clothing" + }, + { + "Date": "2020-09-30", + "Value": 200, + "Series": "Clothing" + }, + { + "Date": "2020-10-06", + "Value": 192, + "Series": "Clothing" + }, + { + "Date": "2020-10-11", + "Value": 182, + "Series": "Clothing" + }, + { + "Date": "2020-10-17", + "Value": 183, + "Series": "Clothing" + }, + { + "Date": "2020-10-22", + "Value": 173, + "Series": "Clothing" + }, + { + "Date": "2020-10-28", + "Value": 173, + "Series": "Clothing" + }, + { + "Date": "2020-11-02", + "Value": 182, + "Series": "Clothing" + }, + { + "Date": "2020-11-08", + "Value": 188, + "Series": "Clothing" + }, + { + "Date": "2020-11-13", + "Value": 182, + "Series": "Clothing" + }, + { + "Date": "2020-11-19", + "Value": 188, + "Series": "Clothing" + }, + { + "Date": "2020-11-24", + "Value": 198, + "Series": "Clothing" + }, + { + "Date": "2020-11-29", + "Value": 194, + "Series": "Clothing" + }, + { + "Date": "2020-12-05", + "Value": 186, + "Series": "Clothing" + }, + { + "Date": "2020-12-10", + "Value": 180, + "Series": "Clothing" + }, + { + "Date": "2020-12-16", + "Value": 166, + "Series": "Clothing" + }, + { + "Date": "2020-12-21", + "Value": 171, + "Series": "Clothing" + }, + { + "Date": "2020-12-27", + "Value": 173, + "Series": "Clothing" + }, + { + "Date": "2021-01-01", + "Value": 188, + "Series": "Clothing" + }, + { + "Date": "2021-01-07", + "Value": 209, + "Series": "Clothing" + }, + { + "Date": "2021-01-12", + "Value": 237, + "Series": "Clothing" + }, + { + "Date": "2021-01-18", + "Value": 254, + "Series": "Clothing" + }, + { + "Date": "2021-01-23", + "Value": 264, + "Series": "Clothing" + }, + { + "Date": "2021-01-29", + "Value": 277, + "Series": "Clothing" + }, + { + "Date": "2021-02-03", + "Value": 272, + "Series": "Clothing" + }, + { + "Date": "2021-02-09", + "Value": 282, + "Series": "Clothing" + }, + { + "Date": "2021-02-14", + "Value": 285, + "Series": "Clothing" + }, + { + "Date": "2021-02-20", + "Value": 280, + "Series": "Clothing" + }, + { + "Date": "2021-02-25", + "Value": 280, + "Series": "Clothing" + }, + { + "Date": "2021-03-03", + "Value": 289, + "Series": "Clothing" + }, + { + "Date": "2021-03-08", + "Value": 304, + "Series": "Clothing" + }, + { + "Date": "2021-03-14", + "Value": 302, + "Series": "Clothing" + }, + { + "Date": "2021-03-19", + "Value": 311, + "Series": "Clothing" + }, + { + "Date": "2021-03-24", + "Value": 303, + "Series": "Clothing" + }, + { + "Date": "2021-03-30", + "Value": 289, + "Series": "Clothing" + }, + { + "Date": "2021-04-04", + "Value": 272, + "Series": "Clothing" + }, + { + "Date": "2021-04-10", + "Value": 269, + "Series": "Clothing" + }, + { + "Date": "2021-04-15", + "Value": 280, + "Series": "Clothing" + }, + { + "Date": "2021-04-21", + "Value": 291, + "Series": "Clothing" + }, + { + "Date": "2021-04-26", + "Value": 291, + "Series": "Clothing" + }, + { + "Date": "2021-05-02", + "Value": 294, + "Series": "Clothing" + }, + { + "Date": "2021-05-07", + "Value": 305, + "Series": "Clothing" + }, + { + "Date": "2021-05-13", + "Value": 320, + "Series": "Clothing" + }, + { + "Date": "2021-05-18", + "Value": 323, + "Series": "Clothing" + }, + { + "Date": "2021-05-24", + "Value": 318, + "Series": "Clothing" + }, + { + "Date": "2021-05-29", + "Value": 313, + "Series": "Clothing" + }, + { + "Date": "2021-06-04", + "Value": 299, + "Series": "Clothing" + }, + { + "Date": "2021-06-09", + "Value": 294, + "Series": "Clothing" + }, + { + "Date": "2021-06-15", + "Value": 276, + "Series": "Clothing" + }, + { + "Date": "2021-06-20", + "Value": 257, + "Series": "Clothing" + }, + { + "Date": "2021-06-26", + "Value": 243, + "Series": "Clothing" + }, + { + "Date": "2021-07-01", + "Value": 239, + "Series": "Clothing" + }, + { + "Date": "2021-07-06", + "Value": 248, + "Series": "Clothing" + }, + { + "Date": "2021-07-12", + "Value": 250, + "Series": "Clothing" + }, + { + "Date": "2021-07-17", + "Value": 261, + "Series": "Clothing" + }, + { + "Date": "2021-07-23", + "Value": 277, + "Series": "Clothing" + }, + { + "Date": "2021-07-28", + "Value": 286, + "Series": "Clothing" + }, + { + "Date": "2021-08-03", + "Value": 281, + "Series": "Clothing" + }, + { + "Date": "2021-08-08", + "Value": 277, + "Series": "Clothing" + }, + { + "Date": "2021-08-14", + "Value": 284, + "Series": "Clothing" + }, + { + "Date": "2021-08-19", + "Value": 287, + "Series": "Clothing" + }, + { + "Date": "2021-08-25", + "Value": 284, + "Series": "Clothing" + }, + { + "Date": "2021-08-30", + "Value": 269, + "Series": "Clothing" + }, + { + "Date": "2021-09-05", + "Value": 251, + "Series": "Clothing" + }, + { + "Date": "2021-09-10", + "Value": 235, + "Series": "Clothing" + }, + { + "Date": "2021-09-16", + "Value": 220, + "Series": "Clothing" + }, + { + "Date": "2021-09-21", + "Value": 217, + "Series": "Clothing" + }, + { + "Date": "2021-09-27", + "Value": 229, + "Series": "Clothing" + }, + { + "Date": "2021-10-02", + "Value": 248, + "Series": "Clothing" + }, + { + "Date": "2021-10-08", + "Value": 273, + "Series": "Clothing" + }, + { + "Date": "2021-10-13", + "Value": 290, + "Series": "Clothing" + }, + { + "Date": "2021-10-19", + "Value": 292, + "Series": "Clothing" + }, + { + "Date": "2021-10-24", + "Value": 282, + "Series": "Clothing" + }, + { + "Date": "2021-10-29", + "Value": 272, + "Series": "Clothing" + }, + { + "Date": "2021-11-04", + "Value": 254, + "Series": "Clothing" + }, + { + "Date": "2021-11-09", + "Value": 230, + "Series": "Clothing" + }, + { + "Date": "2021-11-15", + "Value": 220, + "Series": "Clothing" + }, + { + "Date": "2021-11-20", + "Value": 203, + "Series": "Clothing" + }, + { + "Date": "2021-11-26", + "Value": 182, + "Series": "Clothing" + }, + { + "Date": "2021-12-01", + "Value": 155, + "Series": "Clothing" + }, + { + "Date": "2021-12-07", + "Value": 131, + "Series": "Clothing" + }, + { + "Date": "2021-12-12", + "Value": 120, + "Series": "Clothing" + }, + { + "Date": "2021-12-18", + "Value": 104, + "Series": "Clothing" + }, + { + "Date": "2021-12-23", + "Value": 88, + "Series": "Clothing" + }, + { + "Date": "2021-12-29", + "Value": 91, + "Series": "Clothing" + }, + { + "Date": "2022-01-03", + "Value": 96, + "Series": "Clothing" + }, + { + "Date": "2022-01-09", + "Value": 87, + "Series": "Clothing" + }, + { + "Date": "2022-01-14", + "Value": 89, + "Series": "Clothing" + }, + { + "Date": "2022-01-20", + "Value": 96, + "Series": "Clothing" + }, + { + "Date": "2022-01-25", + "Value": 90, + "Series": "Clothing" + }, + { + "Date": "2022-01-31", + "Value": 80, + "Series": "Clothing" + }, + { + "Date": "2022-02-05", + "Value": 75, + "Series": "Clothing" + }, + { + "Date": "2022-02-10", + "Value": 74, + "Series": "Clothing" + }, + { + "Date": "2022-02-16", + "Value": 82, + "Series": "Clothing" + }, + { + "Date": "2022-02-21", + "Value": 77, + "Series": "Clothing" + }, + { + "Date": "2022-02-27", + "Value": 77, + "Series": "Clothing" + }, + { + "Date": "2022-03-04", + "Value": 85, + "Series": "Clothing" + }, + { + "Date": "2022-03-10", + "Value": 102, + "Series": "Clothing" + }, + { + "Date": "2022-03-15", + "Value": 116, + "Series": "Clothing" + }, + { + "Date": "2022-03-21", + "Value": 129, + "Series": "Clothing" + }, + { + "Date": "2022-03-26", + "Value": 138, + "Series": "Clothing" + }, + { + "Date": "2022-04-01", + "Value": 159, + "Series": "Clothing" + }, + { + "Date": "2022-04-06", + "Value": 182, + "Series": "Clothing" + }, + { + "Date": "2022-04-12", + "Value": 206, + "Series": "Clothing" + }, + { + "Date": "2022-04-17", + "Value": 218, + "Series": "Clothing" + }, + { + "Date": "2022-04-23", + "Value": 233, + "Series": "Clothing" + }, + { + "Date": "2022-04-28", + "Value": 240, + "Series": "Clothing" + }, + { + "Date": "2022-05-04", + "Value": 249, + "Series": "Clothing" + }, + { + "Date": "2022-05-09", + "Value": 241, + "Series": "Clothing" + }, + { + "Date": "2022-05-15", + "Value": 230, + "Series": "Clothing" + }, + { + "Date": "2022-05-20", + "Value": 213, + "Series": "Clothing" + }, + { + "Date": "2022-05-26", + "Value": 201, + "Series": "Clothing" + }, + { + "Date": "2022-05-31", + "Value": 198, + "Series": "Clothing" + }, + { + "Date": "2022-06-05", + "Value": 186, + "Series": "Clothing" + }, + { + "Date": "2022-06-11", + "Value": 188, + "Series": "Clothing" + }, + { + "Date": "2022-06-16", + "Value": 190, + "Series": "Clothing" + }, + { + "Date": "2022-06-22", + "Value": 192, + "Series": "Clothing" + }, + { + "Date": "2022-06-27", + "Value": 198, + "Series": "Clothing" + }, + { + "Date": "2022-07-03", + "Value": 215, + "Series": "Clothing" + }, + { + "Date": "2022-07-08", + "Value": 213, + "Series": "Clothing" + }, + { + "Date": "2022-07-14", + "Value": 209, + "Series": "Clothing" + }, + { + "Date": "2022-07-19", + "Value": 194, + "Series": "Clothing" + }, + { + "Date": "2022-07-25", + "Value": 193, + "Series": "Clothing" + }, + { + "Date": "2022-07-30", + "Value": 194, + "Series": "Clothing" + }, + { + "Date": "2022-08-05", + "Value": 194, + "Series": "Clothing" + }, + { + "Date": "2022-08-10", + "Value": 188, + "Series": "Clothing" + }, + { + "Date": "2022-08-16", + "Value": 192, + "Series": "Clothing" + }, + { + "Date": "2022-08-21", + "Value": 206, + "Series": "Clothing" + }, + { + "Date": "2022-08-27", + "Value": 225, + "Series": "Clothing" + }, + { + "Date": "2022-09-01", + "Value": 252, + "Series": "Clothing" + }, + { + "Date": "2022-09-07", + "Value": 276, + "Series": "Clothing" + }, + { + "Date": "2022-09-12", + "Value": 292, + "Series": "Clothing" + }, + { + "Date": "2022-09-17", + "Value": 290, + "Series": "Clothing" + }, + { + "Date": "2022-09-23", + "Value": 280, + "Series": "Clothing" + }, + { + "Date": "2022-09-28", + "Value": 273, + "Series": "Clothing" + }, + { + "Date": "2022-10-04", + "Value": 259, + "Series": "Clothing" + }, + { + "Date": "2022-10-09", + "Value": 242, + "Series": "Clothing" + }, + { + "Date": "2022-10-15", + "Value": 218, + "Series": "Clothing" + }, + { + "Date": "2022-10-20", + "Value": 206, + "Series": "Clothing" + }, + { + "Date": "2022-10-26", + "Value": 190, + "Series": "Clothing" + }, + { + "Date": "2022-10-31", + "Value": 170, + "Series": "Clothing" + }, + { + "Date": "2022-11-06", + "Value": 153, + "Series": "Clothing" + }, + { + "Date": "2022-11-11", + "Value": 143, + "Series": "Clothing" + }, + { + "Date": "2022-11-17", + "Value": 131, + "Series": "Clothing" + }, + { + "Date": "2022-11-22", + "Value": 114, + "Series": "Clothing" + }, + { + "Date": "2022-11-28", + "Value": 107, + "Series": "Clothing" + }, + { + "Date": "2022-12-03", + "Value": 95, + "Series": "Clothing" + }, + { + "Date": "2022-12-09", + "Value": 85, + "Series": "Clothing" + }, + { + "Date": "2022-12-14", + "Value": 84, + "Series": "Clothing" + }, + { + "Date": "2022-12-20", + "Value": 89, + "Series": "Clothing" + }, + { + "Date": "2022-12-25", + "Value": 87, + "Series": "Clothing" + }, + { + "Date": "2020-01-01", + "Value": 109, + "Series": "Food" + }, + { + "Date": "2020-01-06", + "Value": 100, + "Series": "Food" + }, + { + "Date": "2020-01-11", + "Value": 97, + "Series": "Food" + }, + { + "Date": "2020-01-17", + "Value": 101, + "Series": "Food" + }, + { + "Date": "2020-01-22", + "Value": 112, + "Series": "Food" + }, + { + "Date": "2020-01-28", + "Value": 119, + "Series": "Food" + }, + { + "Date": "2020-02-02", + "Value": 125, + "Series": "Food" + }, + { + "Date": "2020-02-08", + "Value": 124, + "Series": "Food" + }, + { + "Date": "2020-02-13", + "Value": 126, + "Series": "Food" + }, + { + "Date": "2020-02-19", + "Value": 136, + "Series": "Food" + }, + { + "Date": "2020-02-24", + "Value": 150, + "Series": "Food" + }, + { + "Date": "2020-03-01", + "Value": 157, + "Series": "Food" + }, + { + "Date": "2020-03-06", + "Value": 153, + "Series": "Food" + }, + { + "Date": "2020-03-12", + "Value": 140, + "Series": "Food" + }, + { + "Date": "2020-03-17", + "Value": 129, + "Series": "Food" + }, + { + "Date": "2020-03-23", + "Value": 121, + "Series": "Food" + }, + { + "Date": "2020-03-28", + "Value": 121, + "Series": "Food" + }, + { + "Date": "2020-04-03", + "Value": 116, + "Series": "Food" + }, + { + "Date": "2020-04-08", + "Value": 120, + "Series": "Food" + }, + { + "Date": "2020-04-14", + "Value": 118, + "Series": "Food" + }, + { + "Date": "2020-04-19", + "Value": 123, + "Series": "Food" + }, + { + "Date": "2020-04-24", + "Value": 133, + "Series": "Food" + }, + { + "Date": "2020-04-30", + "Value": 145, + "Series": "Food" + }, + { + "Date": "2020-05-05", + "Value": 149, + "Series": "Food" + }, + { + "Date": "2020-05-11", + "Value": 144, + "Series": "Food" + }, + { + "Date": "2020-05-16", + "Value": 135, + "Series": "Food" + }, + { + "Date": "2020-05-22", + "Value": 126, + "Series": "Food" + }, + { + "Date": "2020-05-27", + "Value": 124, + "Series": "Food" + }, + { + "Date": "2020-06-02", + "Value": 128, + "Series": "Food" + }, + { + "Date": "2020-06-07", + "Value": 123, + "Series": "Food" + }, + { + "Date": "2020-06-13", + "Value": 120, + "Series": "Food" + }, + { + "Date": "2020-06-18", + "Value": 123, + "Series": "Food" + }, + { + "Date": "2020-06-24", + "Value": 122, + "Series": "Food" + }, + { + "Date": "2020-06-29", + "Value": 130, + "Series": "Food" + }, + { + "Date": "2020-07-05", + "Value": 130, + "Series": "Food" + }, + { + "Date": "2020-07-10", + "Value": 125, + "Series": "Food" + }, + { + "Date": "2020-07-16", + "Value": 129, + "Series": "Food" + }, + { + "Date": "2020-07-21", + "Value": 136, + "Series": "Food" + }, + { + "Date": "2020-07-27", + "Value": 150, + "Series": "Food" + }, + { + "Date": "2020-08-01", + "Value": 169, + "Series": "Food" + }, + { + "Date": "2020-08-07", + "Value": 181, + "Series": "Food" + }, + { + "Date": "2020-08-12", + "Value": 183, + "Series": "Food" + }, + { + "Date": "2020-08-17", + "Value": 183, + "Series": "Food" + }, + { + "Date": "2020-08-23", + "Value": 183, + "Series": "Food" + }, + { + "Date": "2020-08-28", + "Value": 186, + "Series": "Food" + }, + { + "Date": "2020-09-03", + "Value": 180, + "Series": "Food" + }, + { + "Date": "2020-09-08", + "Value": 184, + "Series": "Food" + }, + { + "Date": "2020-09-14", + "Value": 186, + "Series": "Food" + }, + { + "Date": "2020-09-19", + "Value": 187, + "Series": "Food" + }, + { + "Date": "2020-09-25", + "Value": 186, + "Series": "Food" + }, + { + "Date": "2020-09-30", + "Value": 190, + "Series": "Food" + }, + { + "Date": "2020-10-06", + "Value": 190, + "Series": "Food" + }, + { + "Date": "2020-10-11", + "Value": 181, + "Series": "Food" + }, + { + "Date": "2020-10-17", + "Value": 170, + "Series": "Food" + }, + { + "Date": "2020-10-22", + "Value": 156, + "Series": "Food" + }, + { + "Date": "2020-10-28", + "Value": 139, + "Series": "Food" + }, + { + "Date": "2020-11-02", + "Value": 126, + "Series": "Food" + }, + { + "Date": "2020-11-08", + "Value": 119, + "Series": "Food" + }, + { + "Date": "2020-11-13", + "Value": 118, + "Series": "Food" + }, + { + "Date": "2020-11-19", + "Value": 114, + "Series": "Food" + }, + { + "Date": "2020-11-24", + "Value": 116, + "Series": "Food" + }, + { + "Date": "2020-11-29", + "Value": 124, + "Series": "Food" + }, + { + "Date": "2020-12-05", + "Value": 127, + "Series": "Food" + }, + { + "Date": "2020-12-10", + "Value": 131, + "Series": "Food" + }, + { + "Date": "2020-12-16", + "Value": 125, + "Series": "Food" + }, + { + "Date": "2020-12-21", + "Value": 129, + "Series": "Food" + }, + { + "Date": "2020-12-27", + "Value": 131, + "Series": "Food" + }, + { + "Date": "2021-01-01", + "Value": 135, + "Series": "Food" + }, + { + "Date": "2021-01-07", + "Value": 142, + "Series": "Food" + }, + { + "Date": "2021-01-12", + "Value": 150, + "Series": "Food" + }, + { + "Date": "2021-01-18", + "Value": 157, + "Series": "Food" + }, + { + "Date": "2021-01-23", + "Value": 156, + "Series": "Food" + }, + { + "Date": "2021-01-29", + "Value": 152, + "Series": "Food" + }, + { + "Date": "2021-02-03", + "Value": 159, + "Series": "Food" + }, + { + "Date": "2021-02-09", + "Value": 166, + "Series": "Food" + }, + { + "Date": "2021-02-14", + "Value": 171, + "Series": "Food" + }, + { + "Date": "2021-02-20", + "Value": 166, + "Series": "Food" + }, + { + "Date": "2021-02-25", + "Value": 158, + "Series": "Food" + }, + { + "Date": "2021-03-03", + "Value": 154, + "Series": "Food" + }, + { + "Date": "2021-03-08", + "Value": 146, + "Series": "Food" + }, + { + "Date": "2021-03-14", + "Value": 136, + "Series": "Food" + }, + { + "Date": "2021-03-19", + "Value": 136, + "Series": "Food" + }, + { + "Date": "2021-03-24", + "Value": 129, + "Series": "Food" + }, + { + "Date": "2021-03-30", + "Value": 126, + "Series": "Food" + }, + { + "Date": "2021-04-04", + "Value": 117, + "Series": "Food" + }, + { + "Date": "2021-04-10", + "Value": 106, + "Series": "Food" + }, + { + "Date": "2021-04-15", + "Value": 105, + "Series": "Food" + }, + { + "Date": "2021-04-21", + "Value": 109, + "Series": "Food" + }, + { + "Date": "2021-04-26", + "Value": 112, + "Series": "Food" + }, + { + "Date": "2021-05-02", + "Value": 120, + "Series": "Food" + }, + { + "Date": "2021-05-07", + "Value": 127, + "Series": "Food" + }, + { + "Date": "2021-05-13", + "Value": 132, + "Series": "Food" + }, + { + "Date": "2021-05-18", + "Value": 134, + "Series": "Food" + }, + { + "Date": "2021-05-24", + "Value": 145, + "Series": "Food" + }, + { + "Date": "2021-05-29", + "Value": 148, + "Series": "Food" + }, + { + "Date": "2021-06-04", + "Value": 151, + "Series": "Food" + }, + { + "Date": "2021-06-09", + "Value": 157, + "Series": "Food" + }, + { + "Date": "2021-06-15", + "Value": 156, + "Series": "Food" + }, + { + "Date": "2021-06-20", + "Value": 146, + "Series": "Food" + }, + { + "Date": "2021-06-26", + "Value": 145, + "Series": "Food" + }, + { + "Date": "2021-07-01", + "Value": 142, + "Series": "Food" + }, + { + "Date": "2021-07-06", + "Value": 149, + "Series": "Food" + }, + { + "Date": "2021-07-12", + "Value": 159, + "Series": "Food" + }, + { + "Date": "2021-07-17", + "Value": 157, + "Series": "Food" + }, + { + "Date": "2021-07-23", + "Value": 159, + "Series": "Food" + }, + { + "Date": "2021-07-28", + "Value": 157, + "Series": "Food" + }, + { + "Date": "2021-08-03", + "Value": 148, + "Series": "Food" + }, + { + "Date": "2021-08-08", + "Value": 147, + "Series": "Food" + }, + { + "Date": "2021-08-14", + "Value": 140, + "Series": "Food" + }, + { + "Date": "2021-08-19", + "Value": 145, + "Series": "Food" + }, + { + "Date": "2021-08-25", + "Value": 144, + "Series": "Food" + }, + { + "Date": "2021-08-30", + "Value": 143, + "Series": "Food" + }, + { + "Date": "2021-09-05", + "Value": 135, + "Series": "Food" + }, + { + "Date": "2021-09-10", + "Value": 120, + "Series": "Food" + }, + { + "Date": "2021-09-16", + "Value": 100, + "Series": "Food" + }, + { + "Date": "2021-09-21", + "Value": 88, + "Series": "Food" + }, + { + "Date": "2021-09-27", + "Value": 86, + "Series": "Food" + }, + { + "Date": "2021-10-02", + "Value": 88, + "Series": "Food" + }, + { + "Date": "2021-10-08", + "Value": 89, + "Series": "Food" + }, + { + "Date": "2021-10-13", + "Value": 85, + "Series": "Food" + }, + { + "Date": "2021-10-19", + "Value": 81, + "Series": "Food" + }, + { + "Date": "2021-10-24", + "Value": 76, + "Series": "Food" + }, + { + "Date": "2021-10-29", + "Value": 80, + "Series": "Food" + }, + { + "Date": "2021-11-04", + "Value": 88, + "Series": "Food" + }, + { + "Date": "2021-11-09", + "Value": 87, + "Series": "Food" + }, + { + "Date": "2021-11-15", + "Value": 79, + "Series": "Food" + }, + { + "Date": "2021-11-20", + "Value": 82, + "Series": "Food" + }, + { + "Date": "2021-11-26", + "Value": 82, + "Series": "Food" + }, + { + "Date": "2021-12-01", + "Value": 74, + "Series": "Food" + }, + { + "Date": "2021-12-07", + "Value": 63, + "Series": "Food" + }, + { + "Date": "2021-12-12", + "Value": 61, + "Series": "Food" + }, + { + "Date": "2021-12-18", + "Value": 68, + "Series": "Food" + }, + { + "Date": "2021-12-23", + "Value": 66, + "Series": "Food" + }, + { + "Date": "2021-12-29", + "Value": 58, + "Series": "Food" + }, + { + "Date": "2022-01-03", + "Value": 60, + "Series": "Food" + }, + { + "Date": "2022-01-09", + "Value": 65, + "Series": "Food" + }, + { + "Date": "2022-01-14", + "Value": 76, + "Series": "Food" + }, + { + "Date": "2022-01-20", + "Value": 77, + "Series": "Food" + }, + { + "Date": "2022-01-25", + "Value": 81, + "Series": "Food" + }, + { + "Date": "2022-01-31", + "Value": 75, + "Series": "Food" + }, + { + "Date": "2022-02-05", + "Value": 64, + "Series": "Food" + }, + { + "Date": "2022-02-10", + "Value": 49, + "Series": "Food" + }, + { + "Date": "2022-02-16", + "Value": 48, + "Series": "Food" + }, + { + "Date": "2022-02-21", + "Value": 53, + "Series": "Food" + }, + { + "Date": "2022-02-27", + "Value": 65, + "Series": "Food" + }, + { + "Date": "2022-03-04", + "Value": 81, + "Series": "Food" + }, + { + "Date": "2022-03-10", + "Value": 90, + "Series": "Food" + }, + { + "Date": "2022-03-15", + "Value": 88, + "Series": "Food" + }, + { + "Date": "2022-03-21", + "Value": 92, + "Series": "Food" + }, + { + "Date": "2022-03-26", + "Value": 101, + "Series": "Food" + }, + { + "Date": "2022-04-01", + "Value": 99, + "Series": "Food" + }, + { + "Date": "2022-04-06", + "Value": 102, + "Series": "Food" + }, + { + "Date": "2022-04-12", + "Value": 98, + "Series": "Food" + }, + { + "Date": "2022-04-17", + "Value": 99, + "Series": "Food" + }, + { + "Date": "2022-04-23", + "Value": 93, + "Series": "Food" + }, + { + "Date": "2022-04-28", + "Value": 89, + "Series": "Food" + }, + { + "Date": "2022-05-04", + "Value": 94, + "Series": "Food" + }, + { + "Date": "2022-05-09", + "Value": 99, + "Series": "Food" + }, + { + "Date": "2022-05-15", + "Value": 94, + "Series": "Food" + }, + { + "Date": "2022-05-20", + "Value": 90, + "Series": "Food" + }, + { + "Date": "2022-05-26", + "Value": 79, + "Series": "Food" + }, + { + "Date": "2022-05-31", + "Value": 62, + "Series": "Food" + }, + { + "Date": "2022-06-05", + "Value": 53, + "Series": "Food" + }, + { + "Date": "2022-06-11", + "Value": 54, + "Series": "Food" + }, + { + "Date": "2022-06-16", + "Value": 46, + "Series": "Food" + }, + { + "Date": "2022-06-22", + "Value": 40, + "Series": "Food" + }, + { + "Date": "2022-06-27", + "Value": 33, + "Series": "Food" + }, + { + "Date": "2022-07-03", + "Value": 25, + "Series": "Food" + }, + { + "Date": "2022-07-08", + "Value": 15, + "Series": "Food" + }, + { + "Date": "2022-07-14", + "Value": 13, + "Series": "Food" + }, + { + "Date": "2022-07-19", + "Value": 4, + "Series": "Food" + }, + { + "Date": "2022-07-25", + "Value": 0, + "Series": "Food" + }, + { + "Date": "2022-07-30", + "Value": 0, + "Series": "Food" + }, + { + "Date": "2022-08-05", + "Value": 0, + "Series": "Food" + }, + { + "Date": "2022-08-10", + "Value": 0, + "Series": "Food" + }, + { + "Date": "2022-08-16", + "Value": 0, + "Series": "Food" + }, + { + "Date": "2022-08-21", + "Value": 0, + "Series": "Food" + }, + { + "Date": "2022-08-27", + "Value": 2, + "Series": "Food" + }, + { + "Date": "2022-09-01", + "Value": 13, + "Series": "Food" + }, + { + "Date": "2022-09-07", + "Value": 15, + "Series": "Food" + }, + { + "Date": "2022-09-12", + "Value": 25, + "Series": "Food" + }, + { + "Date": "2022-09-17", + "Value": 23, + "Series": "Food" + }, + { + "Date": "2022-09-23", + "Value": 22, + "Series": "Food" + }, + { + "Date": "2022-09-28", + "Value": 19, + "Series": "Food" + }, + { + "Date": "2022-10-04", + "Value": 13, + "Series": "Food" + }, + { + "Date": "2022-10-09", + "Value": 13, + "Series": "Food" + }, + { + "Date": "2022-10-15", + "Value": 8, + "Series": "Food" + }, + { + "Date": "2022-10-20", + "Value": 11, + "Series": "Food" + }, + { + "Date": "2022-10-26", + "Value": 20, + "Series": "Food" + }, + { + "Date": "2022-10-31", + "Value": 34, + "Series": "Food" + }, + { + "Date": "2022-11-06", + "Value": 35, + "Series": "Food" + }, + { + "Date": "2022-11-11", + "Value": 37, + "Series": "Food" + }, + { + "Date": "2022-11-17", + "Value": 46, + "Series": "Food" + }, + { + "Date": "2022-11-22", + "Value": 50, + "Series": "Food" + }, + { + "Date": "2022-11-28", + "Value": 63, + "Series": "Food" + }, + { + "Date": "2022-12-03", + "Value": 73, + "Series": "Food" + }, + { + "Date": "2022-12-09", + "Value": 75, + "Series": "Food" + }, + { + "Date": "2022-12-14", + "Value": 86, + "Series": "Food" + }, + { + "Date": "2022-12-20", + "Value": 86, + "Series": "Food" + }, + { + "Date": "2022-12-25", + "Value": 89, + "Series": "Food" + }, + { + "Date": "2020-01-01", + "Value": 239, + "Series": "Books" + }, + { + "Date": "2020-01-06", + "Value": 245, + "Series": "Books" + }, + { + "Date": "2020-01-11", + "Value": 257, + "Series": "Books" + }, + { + "Date": "2020-01-17", + "Value": 257, + "Series": "Books" + }, + { + "Date": "2020-01-22", + "Value": 262, + "Series": "Books" + }, + { + "Date": "2020-01-28", + "Value": 272, + "Series": "Books" + }, + { + "Date": "2020-02-02", + "Value": 272, + "Series": "Books" + }, + { + "Date": "2020-02-08", + "Value": 278, + "Series": "Books" + }, + { + "Date": "2020-02-13", + "Value": 283, + "Series": "Books" + }, + { + "Date": "2020-02-19", + "Value": 282, + "Series": "Books" + }, + { + "Date": "2020-02-24", + "Value": 280, + "Series": "Books" + }, + { + "Date": "2020-03-01", + "Value": 281, + "Series": "Books" + }, + { + "Date": "2020-03-06", + "Value": 281, + "Series": "Books" + }, + { + "Date": "2020-03-12", + "Value": 285, + "Series": "Books" + }, + { + "Date": "2020-03-17", + "Value": 291, + "Series": "Books" + }, + { + "Date": "2020-03-23", + "Value": 298, + "Series": "Books" + }, + { + "Date": "2020-03-28", + "Value": 302, + "Series": "Books" + }, + { + "Date": "2020-04-03", + "Value": 304, + "Series": "Books" + }, + { + "Date": "2020-04-08", + "Value": 304, + "Series": "Books" + }, + { + "Date": "2020-04-14", + "Value": 305, + "Series": "Books" + }, + { + "Date": "2020-04-19", + "Value": 300, + "Series": "Books" + }, + { + "Date": "2020-04-24", + "Value": 294, + "Series": "Books" + }, + { + "Date": "2020-04-30", + "Value": 297, + "Series": "Books" + }, + { + "Date": "2020-05-05", + "Value": 300, + "Series": "Books" + }, + { + "Date": "2020-05-11", + "Value": 310, + "Series": "Books" + }, + { + "Date": "2020-05-16", + "Value": 316, + "Series": "Books" + }, + { + "Date": "2020-05-22", + "Value": 312, + "Series": "Books" + }, + { + "Date": "2020-05-27", + "Value": 312, + "Series": "Books" + }, + { + "Date": "2020-06-02", + "Value": 318, + "Series": "Books" + }, + { + "Date": "2020-06-07", + "Value": 327, + "Series": "Books" + }, + { + "Date": "2020-06-13", + "Value": 337, + "Series": "Books" + }, + { + "Date": "2020-06-18", + "Value": 352, + "Series": "Books" + }, + { + "Date": "2020-06-24", + "Value": 360, + "Series": "Books" + }, + { + "Date": "2020-06-29", + "Value": 363, + "Series": "Books" + }, + { + "Date": "2020-07-05", + "Value": 372, + "Series": "Books" + }, + { + "Date": "2020-07-10", + "Value": 381, + "Series": "Books" + }, + { + "Date": "2020-07-16", + "Value": 392, + "Series": "Books" + }, + { + "Date": "2020-07-21", + "Value": 407, + "Series": "Books" + }, + { + "Date": "2020-07-27", + "Value": 424, + "Series": "Books" + }, + { + "Date": "2020-08-01", + "Value": 432, + "Series": "Books" + }, + { + "Date": "2020-08-07", + "Value": 434, + "Series": "Books" + }, + { + "Date": "2020-08-12", + "Value": 443, + "Series": "Books" + }, + { + "Date": "2020-08-17", + "Value": 449, + "Series": "Books" + }, + { + "Date": "2020-08-23", + "Value": 461, + "Series": "Books" + }, + { + "Date": "2020-08-28", + "Value": 466, + "Series": "Books" + }, + { + "Date": "2020-09-03", + "Value": 473, + "Series": "Books" + }, + { + "Date": "2020-09-08", + "Value": 486, + "Series": "Books" + }, + { + "Date": "2020-09-14", + "Value": 489, + "Series": "Books" + }, + { + "Date": "2020-09-19", + "Value": 499, + "Series": "Books" + }, + { + "Date": "2020-09-25", + "Value": 513, + "Series": "Books" + }, + { + "Date": "2020-09-30", + "Value": 529, + "Series": "Books" + }, + { + "Date": "2020-10-06", + "Value": 545, + "Series": "Books" + }, + { + "Date": "2020-10-11", + "Value": 557, + "Series": "Books" + }, + { + "Date": "2020-10-17", + "Value": 561, + "Series": "Books" + }, + { + "Date": "2020-10-22", + "Value": 568, + "Series": "Books" + }, + { + "Date": "2020-10-28", + "Value": 567, + "Series": "Books" + }, + { + "Date": "2020-11-02", + "Value": 571, + "Series": "Books" + }, + { + "Date": "2020-11-08", + "Value": 575, + "Series": "Books" + }, + { + "Date": "2020-11-13", + "Value": 583, + "Series": "Books" + }, + { + "Date": "2020-11-19", + "Value": 595, + "Series": "Books" + }, + { + "Date": "2020-11-24", + "Value": 600, + "Series": "Books" + }, + { + "Date": "2020-11-29", + "Value": 595, + "Series": "Books" + }, + { + "Date": "2020-12-05", + "Value": 595, + "Series": "Books" + }, + { + "Date": "2020-12-10", + "Value": 595, + "Series": "Books" + }, + { + "Date": "2020-12-16", + "Value": 594, + "Series": "Books" + }, + { + "Date": "2020-12-21", + "Value": 593, + "Series": "Books" + }, + { + "Date": "2020-12-27", + "Value": 598, + "Series": "Books" + }, + { + "Date": "2021-01-01", + "Value": 599, + "Series": "Books" + }, + { + "Date": "2021-01-07", + "Value": 595, + "Series": "Books" + }, + { + "Date": "2021-01-12", + "Value": 598, + "Series": "Books" + }, + { + "Date": "2021-01-18", + "Value": 594, + "Series": "Books" + }, + { + "Date": "2021-01-23", + "Value": 585, + "Series": "Books" + }, + { + "Date": "2021-01-29", + "Value": 576, + "Series": "Books" + }, + { + "Date": "2021-02-03", + "Value": 565, + "Series": "Books" + }, + { + "Date": "2021-02-09", + "Value": 556, + "Series": "Books" + }, + { + "Date": "2021-02-14", + "Value": 553, + "Series": "Books" + }, + { + "Date": "2021-02-20", + "Value": 546, + "Series": "Books" + }, + { + "Date": "2021-02-25", + "Value": 545, + "Series": "Books" + }, + { + "Date": "2021-03-03", + "Value": 541, + "Series": "Books" + }, + { + "Date": "2021-03-08", + "Value": 540, + "Series": "Books" + }, + { + "Date": "2021-03-14", + "Value": 544, + "Series": "Books" + }, + { + "Date": "2021-03-19", + "Value": 554, + "Series": "Books" + }, + { + "Date": "2021-03-24", + "Value": 554, + "Series": "Books" + }, + { + "Date": "2021-03-30", + "Value": 550, + "Series": "Books" + }, + { + "Date": "2021-04-04", + "Value": 540, + "Series": "Books" + }, + { + "Date": "2021-04-10", + "Value": 538, + "Series": "Books" + }, + { + "Date": "2021-04-15", + "Value": 537, + "Series": "Books" + }, + { + "Date": "2021-04-21", + "Value": 541, + "Series": "Books" + }, + { + "Date": "2021-04-26", + "Value": 541, + "Series": "Books" + }, + { + "Date": "2021-05-02", + "Value": 538, + "Series": "Books" + }, + { + "Date": "2021-05-07", + "Value": 535, + "Series": "Books" + }, + { + "Date": "2021-05-13", + "Value": 536, + "Series": "Books" + }, + { + "Date": "2021-05-18", + "Value": 539, + "Series": "Books" + }, + { + "Date": "2021-05-24", + "Value": 546, + "Series": "Books" + }, + { + "Date": "2021-05-29", + "Value": 558, + "Series": "Books" + }, + { + "Date": "2021-06-04", + "Value": 562, + "Series": "Books" + }, + { + "Date": "2021-06-09", + "Value": 568, + "Series": "Books" + }, + { + "Date": "2021-06-15", + "Value": 580, + "Series": "Books" + }, + { + "Date": "2021-06-20", + "Value": 587, + "Series": "Books" + }, + { + "Date": "2021-06-26", + "Value": 594, + "Series": "Books" + }, + { + "Date": "2021-07-01", + "Value": 607, + "Series": "Books" + }, + { + "Date": "2021-07-06", + "Value": 622, + "Series": "Books" + }, + { + "Date": "2021-07-12", + "Value": 632, + "Series": "Books" + }, + { + "Date": "2021-07-17", + "Value": 635, + "Series": "Books" + }, + { + "Date": "2021-07-23", + "Value": 635, + "Series": "Books" + }, + { + "Date": "2021-07-28", + "Value": 634, + "Series": "Books" + }, + { + "Date": "2021-08-03", + "Value": 633, + "Series": "Books" + }, + { + "Date": "2021-08-08", + "Value": 638, + "Series": "Books" + }, + { + "Date": "2021-08-14", + "Value": 635, + "Series": "Books" + }, + { + "Date": "2021-08-19", + "Value": 633, + "Series": "Books" + }, + { + "Date": "2021-08-25", + "Value": 631, + "Series": "Books" + }, + { + "Date": "2021-08-30", + "Value": 622, + "Series": "Books" + }, + { + "Date": "2021-09-05", + "Value": 611, + "Series": "Books" + }, + { + "Date": "2021-09-10", + "Value": 609, + "Series": "Books" + }, + { + "Date": "2021-09-16", + "Value": 603, + "Series": "Books" + }, + { + "Date": "2021-09-21", + "Value": 592, + "Series": "Books" + }, + { + "Date": "2021-09-27", + "Value": 589, + "Series": "Books" + }, + { + "Date": "2021-10-02", + "Value": 589, + "Series": "Books" + }, + { + "Date": "2021-10-08", + "Value": 581, + "Series": "Books" + }, + { + "Date": "2021-10-13", + "Value": 570, + "Series": "Books" + }, + { + "Date": "2021-10-19", + "Value": 555, + "Series": "Books" + }, + { + "Date": "2021-10-24", + "Value": 546, + "Series": "Books" + }, + { + "Date": "2021-10-29", + "Value": 543, + "Series": "Books" + }, + { + "Date": "2021-11-04", + "Value": 536, + "Series": "Books" + }, + { + "Date": "2021-11-09", + "Value": 537, + "Series": "Books" + }, + { + "Date": "2021-11-15", + "Value": 532, + "Series": "Books" + }, + { + "Date": "2021-11-20", + "Value": 534, + "Series": "Books" + }, + { + "Date": "2021-11-26", + "Value": 528, + "Series": "Books" + }, + { + "Date": "2021-12-01", + "Value": 531, + "Series": "Books" + }, + { + "Date": "2021-12-07", + "Value": 528, + "Series": "Books" + }, + { + "Date": "2021-12-12", + "Value": 518, + "Series": "Books" + }, + { + "Date": "2021-12-18", + "Value": 519, + "Series": "Books" + }, + { + "Date": "2021-12-23", + "Value": 522, + "Series": "Books" + }, + { + "Date": "2021-12-29", + "Value": 523, + "Series": "Books" + }, + { + "Date": "2022-01-03", + "Value": 519, + "Series": "Books" + }, + { + "Date": "2022-01-09", + "Value": 517, + "Series": "Books" + }, + { + "Date": "2022-01-14", + "Value": 522, + "Series": "Books" + }, + { + "Date": "2022-01-20", + "Value": 520, + "Series": "Books" + }, + { + "Date": "2022-01-25", + "Value": 520, + "Series": "Books" + }, + { + "Date": "2022-01-31", + "Value": 515, + "Series": "Books" + }, + { + "Date": "2022-02-05", + "Value": 512, + "Series": "Books" + }, + { + "Date": "2022-02-10", + "Value": 517, + "Series": "Books" + }, + { + "Date": "2022-02-16", + "Value": 519, + "Series": "Books" + }, + { + "Date": "2022-02-21", + "Value": 513, + "Series": "Books" + }, + { + "Date": "2022-02-27", + "Value": 514, + "Series": "Books" + }, + { + "Date": "2022-03-04", + "Value": 509, + "Series": "Books" + }, + { + "Date": "2022-03-10", + "Value": 503, + "Series": "Books" + }, + { + "Date": "2022-03-15", + "Value": 498, + "Series": "Books" + }, + { + "Date": "2022-03-21", + "Value": 496, + "Series": "Books" + }, + { + "Date": "2022-03-26", + "Value": 489, + "Series": "Books" + }, + { + "Date": "2022-04-01", + "Value": 484, + "Series": "Books" + }, + { + "Date": "2022-04-06", + "Value": 475, + "Series": "Books" + }, + { + "Date": "2022-04-12", + "Value": 474, + "Series": "Books" + }, + { + "Date": "2022-04-17", + "Value": 476, + "Series": "Books" + }, + { + "Date": "2022-04-23", + "Value": 471, + "Series": "Books" + }, + { + "Date": "2022-04-28", + "Value": 461, + "Series": "Books" + }, + { + "Date": "2022-05-04", + "Value": 454, + "Series": "Books" + }, + { + "Date": "2022-05-09", + "Value": 442, + "Series": "Books" + }, + { + "Date": "2022-05-15", + "Value": 438, + "Series": "Books" + }, + { + "Date": "2022-05-20", + "Value": 441, + "Series": "Books" + }, + { + "Date": "2022-05-26", + "Value": 438, + "Series": "Books" + }, + { + "Date": "2022-05-31", + "Value": 443, + "Series": "Books" + }, + { + "Date": "2022-06-05", + "Value": 453, + "Series": "Books" + }, + { + "Date": "2022-06-11", + "Value": 460, + "Series": "Books" + }, + { + "Date": "2022-06-16", + "Value": 472, + "Series": "Books" + }, + { + "Date": "2022-06-22", + "Value": 488, + "Series": "Books" + }, + { + "Date": "2022-06-27", + "Value": 505, + "Series": "Books" + }, + { + "Date": "2022-07-03", + "Value": 510, + "Series": "Books" + }, + { + "Date": "2022-07-08", + "Value": 512, + "Series": "Books" + }, + { + "Date": "2022-07-14", + "Value": 512, + "Series": "Books" + }, + { + "Date": "2022-07-19", + "Value": 510, + "Series": "Books" + }, + { + "Date": "2022-07-25", + "Value": 514, + "Series": "Books" + }, + { + "Date": "2022-07-30", + "Value": 515, + "Series": "Books" + }, + { + "Date": "2022-08-05", + "Value": 511, + "Series": "Books" + }, + { + "Date": "2022-08-10", + "Value": 514, + "Series": "Books" + }, + { + "Date": "2022-08-16", + "Value": 519, + "Series": "Books" + }, + { + "Date": "2022-08-21", + "Value": 515, + "Series": "Books" + }, + { + "Date": "2022-08-27", + "Value": 508, + "Series": "Books" + }, + { + "Date": "2022-09-01", + "Value": 509, + "Series": "Books" + }, + { + "Date": "2022-09-07", + "Value": 502, + "Series": "Books" + }, + { + "Date": "2022-09-12", + "Value": 493, + "Series": "Books" + }, + { + "Date": "2022-09-17", + "Value": 490, + "Series": "Books" + }, + { + "Date": "2022-09-23", + "Value": 495, + "Series": "Books" + }, + { + "Date": "2022-09-28", + "Value": 504, + "Series": "Books" + }, + { + "Date": "2022-10-04", + "Value": 508, + "Series": "Books" + }, + { + "Date": "2022-10-09", + "Value": 510, + "Series": "Books" + }, + { + "Date": "2022-10-15", + "Value": 514, + "Series": "Books" + }, + { + "Date": "2022-10-20", + "Value": 512, + "Series": "Books" + }, + { + "Date": "2022-10-26", + "Value": 515, + "Series": "Books" + }, + { + "Date": "2022-10-31", + "Value": 514, + "Series": "Books" + }, + { + "Date": "2022-11-06", + "Value": 508, + "Series": "Books" + }, + { + "Date": "2022-11-11", + "Value": 507, + "Series": "Books" + }, + { + "Date": "2022-11-17", + "Value": 503, + "Series": "Books" + }, + { + "Date": "2022-11-22", + "Value": 494, + "Series": "Books" + }, + { + "Date": "2022-11-28", + "Value": 484, + "Series": "Books" + }, + { + "Date": "2022-12-03", + "Value": 485, + "Series": "Books" + }, + { + "Date": "2022-12-09", + "Value": 488, + "Series": "Books" + }, + { + "Date": "2022-12-14", + "Value": 484, + "Series": "Books" + }, + { + "Date": "2022-12-20", + "Value": 479, + "Series": "Books" + }, + { + "Date": "2022-12-25", + "Value": 483, + "Series": "Books" + }, + { + "Date": "2020-01-01", + "Value": 184, + "Series": "Sports" + }, + { + "Date": "2020-01-06", + "Value": 189, + "Series": "Sports" + }, + { + "Date": "2020-01-11", + "Value": 189, + "Series": "Sports" + }, + { + "Date": "2020-01-17", + "Value": 190, + "Series": "Sports" + }, + { + "Date": "2020-01-22", + "Value": 186, + "Series": "Sports" + }, + { + "Date": "2020-01-28", + "Value": 180, + "Series": "Sports" + }, + { + "Date": "2020-02-02", + "Value": 170, + "Series": "Sports" + }, + { + "Date": "2020-02-08", + "Value": 159, + "Series": "Sports" + }, + { + "Date": "2020-02-13", + "Value": 158, + "Series": "Sports" + }, + { + "Date": "2020-02-19", + "Value": 153, + "Series": "Sports" + }, + { + "Date": "2020-02-24", + "Value": 148, + "Series": "Sports" + }, + { + "Date": "2020-03-01", + "Value": 149, + "Series": "Sports" + }, + { + "Date": "2020-03-06", + "Value": 144, + "Series": "Sports" + }, + { + "Date": "2020-03-12", + "Value": 145, + "Series": "Sports" + }, + { + "Date": "2020-03-17", + "Value": 146, + "Series": "Sports" + }, + { + "Date": "2020-03-23", + "Value": 145, + "Series": "Sports" + }, + { + "Date": "2020-03-28", + "Value": 140, + "Series": "Sports" + }, + { + "Date": "2020-04-03", + "Value": 131, + "Series": "Sports" + }, + { + "Date": "2020-04-08", + "Value": 131, + "Series": "Sports" + }, + { + "Date": "2020-04-14", + "Value": 131, + "Series": "Sports" + }, + { + "Date": "2020-04-19", + "Value": 137, + "Series": "Sports" + }, + { + "Date": "2020-04-24", + "Value": 138, + "Series": "Sports" + }, + { + "Date": "2020-04-30", + "Value": 136, + "Series": "Sports" + }, + { + "Date": "2020-05-05", + "Value": 131, + "Series": "Sports" + }, + { + "Date": "2020-05-11", + "Value": 122, + "Series": "Sports" + }, + { + "Date": "2020-05-16", + "Value": 114, + "Series": "Sports" + }, + { + "Date": "2020-05-22", + "Value": 105, + "Series": "Sports" + }, + { + "Date": "2020-05-27", + "Value": 94, + "Series": "Sports" + }, + { + "Date": "2020-06-02", + "Value": 87, + "Series": "Sports" + }, + { + "Date": "2020-06-07", + "Value": 82, + "Series": "Sports" + }, + { + "Date": "2020-06-13", + "Value": 75, + "Series": "Sports" + }, + { + "Date": "2020-06-18", + "Value": 64, + "Series": "Sports" + }, + { + "Date": "2020-06-24", + "Value": 56, + "Series": "Sports" + }, + { + "Date": "2020-06-29", + "Value": 57, + "Series": "Sports" + }, + { + "Date": "2020-07-05", + "Value": 52, + "Series": "Sports" + }, + { + "Date": "2020-07-10", + "Value": 43, + "Series": "Sports" + }, + { + "Date": "2020-07-16", + "Value": 38, + "Series": "Sports" + }, + { + "Date": "2020-07-21", + "Value": 28, + "Series": "Sports" + }, + { + "Date": "2020-07-27", + "Value": 21, + "Series": "Sports" + }, + { + "Date": "2020-08-01", + "Value": 16, + "Series": "Sports" + }, + { + "Date": "2020-08-07", + "Value": 12, + "Series": "Sports" + }, + { + "Date": "2020-08-12", + "Value": 9, + "Series": "Sports" + }, + { + "Date": "2020-08-17", + "Value": 4, + "Series": "Sports" + }, + { + "Date": "2020-08-23", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2020-08-28", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2020-09-03", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2020-09-08", + "Value": 7, + "Series": "Sports" + }, + { + "Date": "2020-09-14", + "Value": 6, + "Series": "Sports" + }, + { + "Date": "2020-09-19", + "Value": 11, + "Series": "Sports" + }, + { + "Date": "2020-09-25", + "Value": 14, + "Series": "Sports" + }, + { + "Date": "2020-09-30", + "Value": 13, + "Series": "Sports" + }, + { + "Date": "2020-10-06", + "Value": 14, + "Series": "Sports" + }, + { + "Date": "2020-10-11", + "Value": 12, + "Series": "Sports" + }, + { + "Date": "2020-10-17", + "Value": 7, + "Series": "Sports" + }, + { + "Date": "2020-10-22", + "Value": 5, + "Series": "Sports" + }, + { + "Date": "2020-10-28", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2020-11-02", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2020-11-08", + "Value": 4, + "Series": "Sports" + }, + { + "Date": "2020-11-13", + "Value": 1, + "Series": "Sports" + }, + { + "Date": "2020-11-19", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2020-11-24", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2020-11-29", + "Value": 4, + "Series": "Sports" + }, + { + "Date": "2020-12-05", + "Value": 4, + "Series": "Sports" + }, + { + "Date": "2020-12-10", + "Value": 1, + "Series": "Sports" + }, + { + "Date": "2020-12-16", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2020-12-21", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2020-12-27", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-01-01", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-01-07", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-01-12", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-01-18", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-01-23", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-01-29", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-02-03", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-02-09", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-02-14", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-02-20", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-02-25", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-03-03", + "Value": 1, + "Series": "Sports" + }, + { + "Date": "2021-03-08", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-03-14", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-03-19", + "Value": 1, + "Series": "Sports" + }, + { + "Date": "2021-03-24", + "Value": 7, + "Series": "Sports" + }, + { + "Date": "2021-03-30", + "Value": 9, + "Series": "Sports" + }, + { + "Date": "2021-04-04", + "Value": 7, + "Series": "Sports" + }, + { + "Date": "2021-04-10", + "Value": 5, + "Series": "Sports" + }, + { + "Date": "2021-04-15", + "Value": 6, + "Series": "Sports" + }, + { + "Date": "2021-04-21", + "Value": 7, + "Series": "Sports" + }, + { + "Date": "2021-04-26", + "Value": 13, + "Series": "Sports" + }, + { + "Date": "2021-05-02", + "Value": 12, + "Series": "Sports" + }, + { + "Date": "2021-05-07", + "Value": 11, + "Series": "Sports" + }, + { + "Date": "2021-05-13", + "Value": 14, + "Series": "Sports" + }, + { + "Date": "2021-05-18", + "Value": 14, + "Series": "Sports" + }, + { + "Date": "2021-05-24", + "Value": 12, + "Series": "Sports" + }, + { + "Date": "2021-05-29", + "Value": 12, + "Series": "Sports" + }, + { + "Date": "2021-06-04", + "Value": 19, + "Series": "Sports" + }, + { + "Date": "2021-06-09", + "Value": 27, + "Series": "Sports" + }, + { + "Date": "2021-06-15", + "Value": 29, + "Series": "Sports" + }, + { + "Date": "2021-06-20", + "Value": 24, + "Series": "Sports" + }, + { + "Date": "2021-06-26", + "Value": 15, + "Series": "Sports" + }, + { + "Date": "2021-07-01", + "Value": 2, + "Series": "Sports" + }, + { + "Date": "2021-07-06", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-07-12", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-07-17", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-07-23", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-07-28", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-08-03", + "Value": 1, + "Series": "Sports" + }, + { + "Date": "2021-08-08", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-08-14", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-08-19", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-08-25", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-08-30", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-09-05", + "Value": 1, + "Series": "Sports" + }, + { + "Date": "2021-09-10", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-09-16", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-09-21", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-09-27", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-10-02", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-10-08", + "Value": 4, + "Series": "Sports" + }, + { + "Date": "2021-10-13", + "Value": 5, + "Series": "Sports" + }, + { + "Date": "2021-10-19", + "Value": 8, + "Series": "Sports" + }, + { + "Date": "2021-10-24", + "Value": 13, + "Series": "Sports" + }, + { + "Date": "2021-10-29", + "Value": 15, + "Series": "Sports" + }, + { + "Date": "2021-11-04", + "Value": 13, + "Series": "Sports" + }, + { + "Date": "2021-11-09", + "Value": 5, + "Series": "Sports" + }, + { + "Date": "2021-11-15", + "Value": 1, + "Series": "Sports" + }, + { + "Date": "2021-11-20", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-11-26", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-12-01", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-12-07", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-12-12", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-12-18", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-12-23", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2021-12-29", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-01-03", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-01-09", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-01-14", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-01-20", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-01-25", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-01-31", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-02-05", + "Value": 3, + "Series": "Sports" + }, + { + "Date": "2022-02-10", + "Value": 10, + "Series": "Sports" + }, + { + "Date": "2022-02-16", + "Value": 11, + "Series": "Sports" + }, + { + "Date": "2022-02-21", + "Value": 8, + "Series": "Sports" + }, + { + "Date": "2022-02-27", + "Value": 13, + "Series": "Sports" + }, + { + "Date": "2022-03-04", + "Value": 10, + "Series": "Sports" + }, + { + "Date": "2022-03-10", + "Value": 14, + "Series": "Sports" + }, + { + "Date": "2022-03-15", + "Value": 17, + "Series": "Sports" + }, + { + "Date": "2022-03-21", + "Value": 20, + "Series": "Sports" + }, + { + "Date": "2022-03-26", + "Value": 18, + "Series": "Sports" + }, + { + "Date": "2022-04-01", + "Value": 10, + "Series": "Sports" + }, + { + "Date": "2022-04-06", + "Value": 11, + "Series": "Sports" + }, + { + "Date": "2022-04-12", + "Value": 7, + "Series": "Sports" + }, + { + "Date": "2022-04-17", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-04-23", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-04-28", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-05-04", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-05-09", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-05-15", + "Value": 2, + "Series": "Sports" + }, + { + "Date": "2022-05-20", + "Value": 1, + "Series": "Sports" + }, + { + "Date": "2022-05-26", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-05-31", + "Value": 1, + "Series": "Sports" + }, + { + "Date": "2022-06-05", + "Value": 8, + "Series": "Sports" + }, + { + "Date": "2022-06-11", + "Value": 15, + "Series": "Sports" + }, + { + "Date": "2022-06-16", + "Value": 21, + "Series": "Sports" + }, + { + "Date": "2022-06-22", + "Value": 22, + "Series": "Sports" + }, + { + "Date": "2022-06-27", + "Value": 28, + "Series": "Sports" + }, + { + "Date": "2022-07-03", + "Value": 31, + "Series": "Sports" + }, + { + "Date": "2022-07-08", + "Value": 34, + "Series": "Sports" + }, + { + "Date": "2022-07-14", + "Value": 34, + "Series": "Sports" + }, + { + "Date": "2022-07-19", + "Value": 36, + "Series": "Sports" + }, + { + "Date": "2022-07-25", + "Value": 32, + "Series": "Sports" + }, + { + "Date": "2022-07-30", + "Value": 32, + "Series": "Sports" + }, + { + "Date": "2022-08-05", + "Value": 32, + "Series": "Sports" + }, + { + "Date": "2022-08-10", + "Value": 30, + "Series": "Sports" + }, + { + "Date": "2022-08-16", + "Value": 26, + "Series": "Sports" + }, + { + "Date": "2022-08-21", + "Value": 28, + "Series": "Sports" + }, + { + "Date": "2022-08-27", + "Value": 24, + "Series": "Sports" + }, + { + "Date": "2022-09-01", + "Value": 17, + "Series": "Sports" + }, + { + "Date": "2022-09-07", + "Value": 11, + "Series": "Sports" + }, + { + "Date": "2022-09-12", + "Value": 9, + "Series": "Sports" + }, + { + "Date": "2022-09-17", + "Value": 2, + "Series": "Sports" + }, + { + "Date": "2022-09-23", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-09-28", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-10-04", + "Value": 1, + "Series": "Sports" + }, + { + "Date": "2022-10-09", + "Value": 7, + "Series": "Sports" + }, + { + "Date": "2022-10-15", + "Value": 18, + "Series": "Sports" + }, + { + "Date": "2022-10-20", + "Value": 20, + "Series": "Sports" + }, + { + "Date": "2022-10-26", + "Value": 16, + "Series": "Sports" + }, + { + "Date": "2022-10-31", + "Value": 12, + "Series": "Sports" + }, + { + "Date": "2022-11-06", + "Value": 6, + "Series": "Sports" + }, + { + "Date": "2022-11-11", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-11-17", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-11-22", + "Value": 1, + "Series": "Sports" + }, + { + "Date": "2022-11-28", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-12-03", + "Value": 0, + "Series": "Sports" + }, + { + "Date": "2022-12-09", + "Value": 4, + "Series": "Sports" + }, + { + "Date": "2022-12-14", + "Value": 6, + "Series": "Sports" + }, + { + "Date": "2022-12-20", + "Value": 14, + "Series": "Sports" + }, + { + "Date": "2022-12-25", + "Value": 20, + "Series": "Sports" + }, + { + "Date": "2020-01-01", + "Value": 244, + "Series": "Home" + }, + { + "Date": "2020-01-06", + "Value": 249, + "Series": "Home" + }, + { + "Date": "2020-01-11", + "Value": 237, + "Series": "Home" + }, + { + "Date": "2020-01-17", + "Value": 226, + "Series": "Home" + }, + { + "Date": "2020-01-22", + "Value": 209, + "Series": "Home" + }, + { + "Date": "2020-01-28", + "Value": 182, + "Series": "Home" + }, + { + "Date": "2020-02-02", + "Value": 148, + "Series": "Home" + }, + { + "Date": "2020-02-08", + "Value": 115, + "Series": "Home" + }, + { + "Date": "2020-02-13", + "Value": 95, + "Series": "Home" + }, + { + "Date": "2020-02-19", + "Value": 75, + "Series": "Home" + }, + { + "Date": "2020-02-24", + "Value": 45, + "Series": "Home" + }, + { + "Date": "2020-03-01", + "Value": 27, + "Series": "Home" + }, + { + "Date": "2020-03-06", + "Value": 26, + "Series": "Home" + }, + { + "Date": "2020-03-12", + "Value": 37, + "Series": "Home" + }, + { + "Date": "2020-03-17", + "Value": 42, + "Series": "Home" + }, + { + "Date": "2020-03-23", + "Value": 59, + "Series": "Home" + }, + { + "Date": "2020-03-28", + "Value": 73, + "Series": "Home" + }, + { + "Date": "2020-04-03", + "Value": 94, + "Series": "Home" + }, + { + "Date": "2020-04-08", + "Value": 103, + "Series": "Home" + }, + { + "Date": "2020-04-14", + "Value": 116, + "Series": "Home" + }, + { + "Date": "2020-04-19", + "Value": 118, + "Series": "Home" + }, + { + "Date": "2020-04-24", + "Value": 136, + "Series": "Home" + }, + { + "Date": "2020-04-30", + "Value": 139, + "Series": "Home" + }, + { + "Date": "2020-05-05", + "Value": 137, + "Series": "Home" + }, + { + "Date": "2020-05-11", + "Value": 127, + "Series": "Home" + }, + { + "Date": "2020-05-16", + "Value": 115, + "Series": "Home" + }, + { + "Date": "2020-05-22", + "Value": 121, + "Series": "Home" + }, + { + "Date": "2020-05-27", + "Value": 125, + "Series": "Home" + }, + { + "Date": "2020-06-02", + "Value": 122, + "Series": "Home" + }, + { + "Date": "2020-06-07", + "Value": 122, + "Series": "Home" + }, + { + "Date": "2020-06-13", + "Value": 130, + "Series": "Home" + }, + { + "Date": "2020-06-18", + "Value": 126, + "Series": "Home" + }, + { + "Date": "2020-06-24", + "Value": 134, + "Series": "Home" + }, + { + "Date": "2020-06-29", + "Value": 138, + "Series": "Home" + }, + { + "Date": "2020-07-05", + "Value": 127, + "Series": "Home" + }, + { + "Date": "2020-07-10", + "Value": 111, + "Series": "Home" + }, + { + "Date": "2020-07-16", + "Value": 102, + "Series": "Home" + }, + { + "Date": "2020-07-21", + "Value": 92, + "Series": "Home" + }, + { + "Date": "2020-07-27", + "Value": 74, + "Series": "Home" + }, + { + "Date": "2020-08-01", + "Value": 75, + "Series": "Home" + }, + { + "Date": "2020-08-07", + "Value": 69, + "Series": "Home" + }, + { + "Date": "2020-08-12", + "Value": 51, + "Series": "Home" + }, + { + "Date": "2020-08-17", + "Value": 43, + "Series": "Home" + }, + { + "Date": "2020-08-23", + "Value": 28, + "Series": "Home" + }, + { + "Date": "2020-08-28", + "Value": 17, + "Series": "Home" + }, + { + "Date": "2020-09-03", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-09-08", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-09-14", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-09-19", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-09-25", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-09-30", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-10-06", + "Value": 4, + "Series": "Home" + }, + { + "Date": "2020-10-11", + "Value": 4, + "Series": "Home" + }, + { + "Date": "2020-10-17", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-10-22", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-10-28", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-11-02", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-11-08", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-11-13", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-11-19", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-11-24", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-11-29", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-12-05", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-12-10", + "Value": 5, + "Series": "Home" + }, + { + "Date": "2020-12-16", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-12-21", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-12-27", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-01-01", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-01-07", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-01-12", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-01-18", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-01-23", + "Value": 1, + "Series": "Home" + }, + { + "Date": "2021-01-29", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-02-03", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-02-09", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-02-14", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-02-20", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-02-25", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-03-03", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-03-08", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-03-14", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-03-19", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-03-24", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-03-30", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-04-04", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-04-10", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-04-15", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-04-21", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-04-26", + "Value": 2, + "Series": "Home" + }, + { + "Date": "2021-05-02", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-05-07", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2021-05-13", + "Value": 7, + "Series": "Home" + }, + { + "Date": "2021-05-18", + "Value": 24, + "Series": "Home" + }, + { + "Date": "2021-05-24", + "Value": 37, + "Series": "Home" + }, + { + "Date": "2021-05-29", + "Value": 53, + "Series": "Home" + }, + { + "Date": "2021-06-04", + "Value": 79, + "Series": "Home" + }, + { + "Date": "2021-06-09", + "Value": 96, + "Series": "Home" + }, + { + "Date": "2021-06-15", + "Value": 113, + "Series": "Home" + }, + { + "Date": "2021-06-20", + "Value": 117, + "Series": "Home" + }, + { + "Date": "2021-06-26", + "Value": 106, + "Series": "Home" + }, + { + "Date": "2021-07-01", + "Value": 104, + "Series": "Home" + }, + { + "Date": "2021-07-06", + "Value": 105, + "Series": "Home" + }, + { + "Date": "2021-07-12", + "Value": 120, + "Series": "Home" + }, + { + "Date": "2021-07-17", + "Value": 121, + "Series": "Home" + }, + { + "Date": "2021-07-23", + "Value": 111, + "Series": "Home" + }, + { + "Date": "2021-07-28", + "Value": 94, + "Series": "Home" + }, + { + "Date": "2021-08-03", + "Value": 74, + "Series": "Home" + }, + { + "Date": "2021-08-08", + "Value": 72, + "Series": "Home" + }, + { + "Date": "2021-08-14", + "Value": 78, + "Series": "Home" + }, + { + "Date": "2021-08-19", + "Value": 89, + "Series": "Home" + }, + { + "Date": "2021-08-25", + "Value": 108, + "Series": "Home" + }, + { + "Date": "2021-08-30", + "Value": 124, + "Series": "Home" + }, + { + "Date": "2021-09-05", + "Value": 123, + "Series": "Home" + }, + { + "Date": "2021-09-10", + "Value": 137, + "Series": "Home" + }, + { + "Date": "2021-09-16", + "Value": 156, + "Series": "Home" + }, + { + "Date": "2021-09-21", + "Value": 161, + "Series": "Home" + }, + { + "Date": "2021-09-27", + "Value": 162, + "Series": "Home" + }, + { + "Date": "2021-10-02", + "Value": 167, + "Series": "Home" + }, + { + "Date": "2021-10-08", + "Value": 164, + "Series": "Home" + }, + { + "Date": "2021-10-13", + "Value": 160, + "Series": "Home" + }, + { + "Date": "2021-10-19", + "Value": 170, + "Series": "Home" + }, + { + "Date": "2021-10-24", + "Value": 189, + "Series": "Home" + }, + { + "Date": "2021-10-29", + "Value": 192, + "Series": "Home" + }, + { + "Date": "2021-11-04", + "Value": 180, + "Series": "Home" + }, + { + "Date": "2021-11-09", + "Value": 172, + "Series": "Home" + }, + { + "Date": "2021-11-15", + "Value": 176, + "Series": "Home" + }, + { + "Date": "2021-11-20", + "Value": 186, + "Series": "Home" + }, + { + "Date": "2021-11-26", + "Value": 196, + "Series": "Home" + }, + { + "Date": "2021-12-01", + "Value": 208, + "Series": "Home" + }, + { + "Date": "2021-12-07", + "Value": 229, + "Series": "Home" + }, + { + "Date": "2021-12-12", + "Value": 248, + "Series": "Home" + }, + { + "Date": "2021-12-18", + "Value": 246, + "Series": "Home" + }, + { + "Date": "2021-12-23", + "Value": 235, + "Series": "Home" + }, + { + "Date": "2021-12-29", + "Value": 232, + "Series": "Home" + }, + { + "Date": "2022-01-03", + "Value": 216, + "Series": "Home" + }, + { + "Date": "2022-01-09", + "Value": 188, + "Series": "Home" + }, + { + "Date": "2022-01-14", + "Value": 161, + "Series": "Home" + }, + { + "Date": "2022-01-20", + "Value": 150, + "Series": "Home" + }, + { + "Date": "2022-01-25", + "Value": 137, + "Series": "Home" + }, + { + "Date": "2022-01-31", + "Value": 113, + "Series": "Home" + }, + { + "Date": "2022-02-05", + "Value": 104, + "Series": "Home" + }, + { + "Date": "2022-02-10", + "Value": 84, + "Series": "Home" + }, + { + "Date": "2022-02-16", + "Value": 78, + "Series": "Home" + }, + { + "Date": "2022-02-21", + "Value": 83, + "Series": "Home" + }, + { + "Date": "2022-02-27", + "Value": 93, + "Series": "Home" + }, + { + "Date": "2022-03-04", + "Value": 97, + "Series": "Home" + }, + { + "Date": "2022-03-10", + "Value": 93, + "Series": "Home" + }, + { + "Date": "2022-03-15", + "Value": 77, + "Series": "Home" + }, + { + "Date": "2022-03-21", + "Value": 69, + "Series": "Home" + }, + { + "Date": "2022-03-26", + "Value": 56, + "Series": "Home" + }, + { + "Date": "2022-04-01", + "Value": 38, + "Series": "Home" + }, + { + "Date": "2022-04-06", + "Value": 39, + "Series": "Home" + }, + { + "Date": "2022-04-12", + "Value": 43, + "Series": "Home" + }, + { + "Date": "2022-04-17", + "Value": 37, + "Series": "Home" + }, + { + "Date": "2022-04-23", + "Value": 26, + "Series": "Home" + }, + { + "Date": "2022-04-28", + "Value": 15, + "Series": "Home" + }, + { + "Date": "2022-05-04", + "Value": 10, + "Series": "Home" + }, + { + "Date": "2022-05-09", + "Value": 21, + "Series": "Home" + }, + { + "Date": "2022-05-15", + "Value": 15, + "Series": "Home" + }, + { + "Date": "2022-05-20", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-05-26", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-05-31", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-06-05", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-06-11", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-06-16", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-06-22", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-06-27", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-07-03", + "Value": 6, + "Series": "Home" + }, + { + "Date": "2022-07-08", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-07-14", + "Value": 11, + "Series": "Home" + }, + { + "Date": "2022-07-19", + "Value": 25, + "Series": "Home" + }, + { + "Date": "2022-07-25", + "Value": 33, + "Series": "Home" + }, + { + "Date": "2022-07-30", + "Value": 24, + "Series": "Home" + }, + { + "Date": "2022-08-05", + "Value": 9, + "Series": "Home" + }, + { + "Date": "2022-08-10", + "Value": 14, + "Series": "Home" + }, + { + "Date": "2022-08-16", + "Value": 14, + "Series": "Home" + }, + { + "Date": "2022-08-21", + "Value": 28, + "Series": "Home" + }, + { + "Date": "2022-08-27", + "Value": 31, + "Series": "Home" + }, + { + "Date": "2022-09-01", + "Value": 30, + "Series": "Home" + }, + { + "Date": "2022-09-07", + "Value": 15, + "Series": "Home" + }, + { + "Date": "2022-09-12", + "Value": 2, + "Series": "Home" + }, + { + "Date": "2022-09-17", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-09-23", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-09-28", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-10-04", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-10-09", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-10-15", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-10-20", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-10-26", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-10-31", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-11-06", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-11-11", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-11-17", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-11-22", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-11-28", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-12-03", + "Value": 2, + "Series": "Home" + }, + { + "Date": "2022-12-09", + "Value": 12, + "Series": "Home" + }, + { + "Date": "2022-12-14", + "Value": 5, + "Series": "Home" + }, + { + "Date": "2022-12-20", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2022-12-25", + "Value": 0, + "Series": "Home" + }, + { + "Date": "2020-01-01", + "Value": 50, + "Series": "Garden" + }, + { + "Date": "2020-01-06", + "Value": 50, + "Series": "Garden" + }, + { + "Date": "2020-01-11", + "Value": 52, + "Series": "Garden" + }, + { + "Date": "2020-01-17", + "Value": 58, + "Series": "Garden" + }, + { + "Date": "2020-01-22", + "Value": 61, + "Series": "Garden" + }, + { + "Date": "2020-01-28", + "Value": 62, + "Series": "Garden" + }, + { + "Date": "2020-02-02", + "Value": 59, + "Series": "Garden" + }, + { + "Date": "2020-02-08", + "Value": 60, + "Series": "Garden" + }, + { + "Date": "2020-02-13", + "Value": 58, + "Series": "Garden" + }, + { + "Date": "2020-02-19", + "Value": 61, + "Series": "Garden" + }, + { + "Date": "2020-02-24", + "Value": 62, + "Series": "Garden" + }, + { + "Date": "2020-03-01", + "Value": 66, + "Series": "Garden" + }, + { + "Date": "2020-03-06", + "Value": 65, + "Series": "Garden" + }, + { + "Date": "2020-03-12", + "Value": 59, + "Series": "Garden" + }, + { + "Date": "2020-03-17", + "Value": 51, + "Series": "Garden" + }, + { + "Date": "2020-03-23", + "Value": 43, + "Series": "Garden" + }, + { + "Date": "2020-03-28", + "Value": 37, + "Series": "Garden" + }, + { + "Date": "2020-04-03", + "Value": 32, + "Series": "Garden" + }, + { + "Date": "2020-04-08", + "Value": 28, + "Series": "Garden" + }, + { + "Date": "2020-04-14", + "Value": 26, + "Series": "Garden" + }, + { + "Date": "2020-04-19", + "Value": 26, + "Series": "Garden" + }, + { + "Date": "2020-04-24", + "Value": 29, + "Series": "Garden" + }, + { + "Date": "2020-04-30", + "Value": 29, + "Series": "Garden" + }, + { + "Date": "2020-05-05", + "Value": 30, + "Series": "Garden" + }, + { + "Date": "2020-05-11", + "Value": 35, + "Series": "Garden" + }, + { + "Date": "2020-05-16", + "Value": 39, + "Series": "Garden" + }, + { + "Date": "2020-05-22", + "Value": 46, + "Series": "Garden" + }, + { + "Date": "2020-05-27", + "Value": 51, + "Series": "Garden" + }, + { + "Date": "2020-06-02", + "Value": 54, + "Series": "Garden" + }, + { + "Date": "2020-06-07", + "Value": 56, + "Series": "Garden" + }, + { + "Date": "2020-06-13", + "Value": 56, + "Series": "Garden" + }, + { + "Date": "2020-06-18", + "Value": 56, + "Series": "Garden" + }, + { + "Date": "2020-06-24", + "Value": 52, + "Series": "Garden" + }, + { + "Date": "2020-06-29", + "Value": 53, + "Series": "Garden" + }, + { + "Date": "2020-07-05", + "Value": 51, + "Series": "Garden" + }, + { + "Date": "2020-07-10", + "Value": 45, + "Series": "Garden" + }, + { + "Date": "2020-07-16", + "Value": 37, + "Series": "Garden" + }, + { + "Date": "2020-07-21", + "Value": 31, + "Series": "Garden" + }, + { + "Date": "2020-07-27", + "Value": 30, + "Series": "Garden" + }, + { + "Date": "2020-08-01", + "Value": 33, + "Series": "Garden" + }, + { + "Date": "2020-08-07", + "Value": 33, + "Series": "Garden" + }, + { + "Date": "2020-08-12", + "Value": 36, + "Series": "Garden" + }, + { + "Date": "2020-08-17", + "Value": 39, + "Series": "Garden" + }, + { + "Date": "2020-08-23", + "Value": 40, + "Series": "Garden" + }, + { + "Date": "2020-08-28", + "Value": 39, + "Series": "Garden" + }, + { + "Date": "2020-09-03", + "Value": 38, + "Series": "Garden" + }, + { + "Date": "2020-09-08", + "Value": 33, + "Series": "Garden" + }, + { + "Date": "2020-09-14", + "Value": 29, + "Series": "Garden" + }, + { + "Date": "2020-09-19", + "Value": 31, + "Series": "Garden" + }, + { + "Date": "2020-09-25", + "Value": 37, + "Series": "Garden" + }, + { + "Date": "2020-09-30", + "Value": 39, + "Series": "Garden" + }, + { + "Date": "2020-10-06", + "Value": 44, + "Series": "Garden" + }, + { + "Date": "2020-10-11", + "Value": 45, + "Series": "Garden" + }, + { + "Date": "2020-10-17", + "Value": 46, + "Series": "Garden" + }, + { + "Date": "2020-10-22", + "Value": 44, + "Series": "Garden" + }, + { + "Date": "2020-10-28", + "Value": 45, + "Series": "Garden" + }, + { + "Date": "2020-11-02", + "Value": 45, + "Series": "Garden" + }, + { + "Date": "2020-11-08", + "Value": 47, + "Series": "Garden" + }, + { + "Date": "2020-11-13", + "Value": 50, + "Series": "Garden" + }, + { + "Date": "2020-11-19", + "Value": 54, + "Series": "Garden" + }, + { + "Date": "2020-11-24", + "Value": 55, + "Series": "Garden" + }, + { + "Date": "2020-11-29", + "Value": 56, + "Series": "Garden" + }, + { + "Date": "2020-12-05", + "Value": 52, + "Series": "Garden" + }, + { + "Date": "2020-12-10", + "Value": 45, + "Series": "Garden" + }, + { + "Date": "2020-12-16", + "Value": 41, + "Series": "Garden" + }, + { + "Date": "2020-12-21", + "Value": 43, + "Series": "Garden" + }, + { + "Date": "2020-12-27", + "Value": 39, + "Series": "Garden" + }, + { + "Date": "2021-01-01", + "Value": 32, + "Series": "Garden" + }, + { + "Date": "2021-01-07", + "Value": 28, + "Series": "Garden" + }, + { + "Date": "2021-01-12", + "Value": 27, + "Series": "Garden" + }, + { + "Date": "2021-01-18", + "Value": 24, + "Series": "Garden" + }, + { + "Date": "2021-01-23", + "Value": 27, + "Series": "Garden" + }, + { + "Date": "2021-01-29", + "Value": 27, + "Series": "Garden" + }, + { + "Date": "2021-02-03", + "Value": 29, + "Series": "Garden" + }, + { + "Date": "2021-02-09", + "Value": 32, + "Series": "Garden" + }, + { + "Date": "2021-02-14", + "Value": 35, + "Series": "Garden" + }, + { + "Date": "2021-02-20", + "Value": 40, + "Series": "Garden" + }, + { + "Date": "2021-02-25", + "Value": 40, + "Series": "Garden" + }, + { + "Date": "2021-03-03", + "Value": 44, + "Series": "Garden" + }, + { + "Date": "2021-03-08", + "Value": 50, + "Series": "Garden" + }, + { + "Date": "2021-03-14", + "Value": 54, + "Series": "Garden" + }, + { + "Date": "2021-03-19", + "Value": 57, + "Series": "Garden" + }, + { + "Date": "2021-03-24", + "Value": 55, + "Series": "Garden" + }, + { + "Date": "2021-03-30", + "Value": 49, + "Series": "Garden" + }, + { + "Date": "2021-04-04", + "Value": 42, + "Series": "Garden" + }, + { + "Date": "2021-04-10", + "Value": 40, + "Series": "Garden" + }, + { + "Date": "2021-04-15", + "Value": 41, + "Series": "Garden" + }, + { + "Date": "2021-04-21", + "Value": 42, + "Series": "Garden" + }, + { + "Date": "2021-04-26", + "Value": 46, + "Series": "Garden" + }, + { + "Date": "2021-05-02", + "Value": 43, + "Series": "Garden" + }, + { + "Date": "2021-05-07", + "Value": 39, + "Series": "Garden" + }, + { + "Date": "2021-05-13", + "Value": 35, + "Series": "Garden" + }, + { + "Date": "2021-05-18", + "Value": 29, + "Series": "Garden" + }, + { + "Date": "2021-05-24", + "Value": 26, + "Series": "Garden" + }, + { + "Date": "2021-05-29", + "Value": 27, + "Series": "Garden" + }, + { + "Date": "2021-06-04", + "Value": 29, + "Series": "Garden" + }, + { + "Date": "2021-06-09", + "Value": 30, + "Series": "Garden" + }, + { + "Date": "2021-06-15", + "Value": 36, + "Series": "Garden" + }, + { + "Date": "2021-06-20", + "Value": 36, + "Series": "Garden" + }, + { + "Date": "2021-06-26", + "Value": 32, + "Series": "Garden" + }, + { + "Date": "2021-07-01", + "Value": 34, + "Series": "Garden" + }, + { + "Date": "2021-07-06", + "Value": 36, + "Series": "Garden" + }, + { + "Date": "2021-07-12", + "Value": 39, + "Series": "Garden" + }, + { + "Date": "2021-07-17", + "Value": 44, + "Series": "Garden" + }, + { + "Date": "2021-07-23", + "Value": 44, + "Series": "Garden" + }, + { + "Date": "2021-07-28", + "Value": 42, + "Series": "Garden" + }, + { + "Date": "2021-08-03", + "Value": 46, + "Series": "Garden" + }, + { + "Date": "2021-08-08", + "Value": 48, + "Series": "Garden" + }, + { + "Date": "2021-08-14", + "Value": 52, + "Series": "Garden" + }, + { + "Date": "2021-08-19", + "Value": 59, + "Series": "Garden" + }, + { + "Date": "2021-08-25", + "Value": 61, + "Series": "Garden" + }, + { + "Date": "2021-08-30", + "Value": 64, + "Series": "Garden" + }, + { + "Date": "2021-09-05", + "Value": 61, + "Series": "Garden" + }, + { + "Date": "2021-09-10", + "Value": 64, + "Series": "Garden" + }, + { + "Date": "2021-09-16", + "Value": 64, + "Series": "Garden" + }, + { + "Date": "2021-09-21", + "Value": 61, + "Series": "Garden" + }, + { + "Date": "2021-09-27", + "Value": 62, + "Series": "Garden" + }, + { + "Date": "2021-10-02", + "Value": 64, + "Series": "Garden" + }, + { + "Date": "2021-10-08", + "Value": 62, + "Series": "Garden" + }, + { + "Date": "2021-10-13", + "Value": 59, + "Series": "Garden" + }, + { + "Date": "2021-10-19", + "Value": 55, + "Series": "Garden" + }, + { + "Date": "2021-10-24", + "Value": 50, + "Series": "Garden" + }, + { + "Date": "2021-10-29", + "Value": 48, + "Series": "Garden" + }, + { + "Date": "2021-11-04", + "Value": 52, + "Series": "Garden" + }, + { + "Date": "2021-11-09", + "Value": 60, + "Series": "Garden" + }, + { + "Date": "2021-11-15", + "Value": 62, + "Series": "Garden" + }, + { + "Date": "2021-11-20", + "Value": 68, + "Series": "Garden" + }, + { + "Date": "2021-11-26", + "Value": 75, + "Series": "Garden" + }, + { + "Date": "2021-12-01", + "Value": 80, + "Series": "Garden" + }, + { + "Date": "2021-12-07", + "Value": 81, + "Series": "Garden" + }, + { + "Date": "2021-12-12", + "Value": 79, + "Series": "Garden" + }, + { + "Date": "2021-12-18", + "Value": 73, + "Series": "Garden" + }, + { + "Date": "2021-12-23", + "Value": 65, + "Series": "Garden" + }, + { + "Date": "2021-12-29", + "Value": 55, + "Series": "Garden" + }, + { + "Date": "2022-01-03", + "Value": 50, + "Series": "Garden" + }, + { + "Date": "2022-01-09", + "Value": 42, + "Series": "Garden" + }, + { + "Date": "2022-01-14", + "Value": 34, + "Series": "Garden" + }, + { + "Date": "2022-01-20", + "Value": 32, + "Series": "Garden" + }, + { + "Date": "2022-01-25", + "Value": 36, + "Series": "Garden" + }, + { + "Date": "2022-01-31", + "Value": 37, + "Series": "Garden" + }, + { + "Date": "2022-02-05", + "Value": 41, + "Series": "Garden" + }, + { + "Date": "2022-02-10", + "Value": 39, + "Series": "Garden" + }, + { + "Date": "2022-02-16", + "Value": 41, + "Series": "Garden" + }, + { + "Date": "2022-02-21", + "Value": 44, + "Series": "Garden" + }, + { + "Date": "2022-02-27", + "Value": 48, + "Series": "Garden" + }, + { + "Date": "2022-03-04", + "Value": 54, + "Series": "Garden" + }, + { + "Date": "2022-03-10", + "Value": 57, + "Series": "Garden" + }, + { + "Date": "2022-03-15", + "Value": 54, + "Series": "Garden" + }, + { + "Date": "2022-03-21", + "Value": 53, + "Series": "Garden" + }, + { + "Date": "2022-03-26", + "Value": 51, + "Series": "Garden" + }, + { + "Date": "2022-04-01", + "Value": 45, + "Series": "Garden" + }, + { + "Date": "2022-04-06", + "Value": 41, + "Series": "Garden" + }, + { + "Date": "2022-04-12", + "Value": 43, + "Series": "Garden" + }, + { + "Date": "2022-04-17", + "Value": 46, + "Series": "Garden" + }, + { + "Date": "2022-04-23", + "Value": 53, + "Series": "Garden" + }, + { + "Date": "2022-04-28", + "Value": 56, + "Series": "Garden" + }, + { + "Date": "2022-05-04", + "Value": 62, + "Series": "Garden" + }, + { + "Date": "2022-05-09", + "Value": 65, + "Series": "Garden" + }, + { + "Date": "2022-05-15", + "Value": 66, + "Series": "Garden" + }, + { + "Date": "2022-05-20", + "Value": 62, + "Series": "Garden" + }, + { + "Date": "2022-05-26", + "Value": 55, + "Series": "Garden" + }, + { + "Date": "2022-05-31", + "Value": 55, + "Series": "Garden" + }, + { + "Date": "2022-06-05", + "Value": 50, + "Series": "Garden" + }, + { + "Date": "2022-06-11", + "Value": 50, + "Series": "Garden" + }, + { + "Date": "2022-06-16", + "Value": 50, + "Series": "Garden" + }, + { + "Date": "2022-06-22", + "Value": 51, + "Series": "Garden" + }, + { + "Date": "2022-06-27", + "Value": 54, + "Series": "Garden" + }, + { + "Date": "2022-07-03", + "Value": 52, + "Series": "Garden" + }, + { + "Date": "2022-07-08", + "Value": 50, + "Series": "Garden" + }, + { + "Date": "2022-07-14", + "Value": 54, + "Series": "Garden" + }, + { + "Date": "2022-07-19", + "Value": 53, + "Series": "Garden" + }, + { + "Date": "2022-07-25", + "Value": 51, + "Series": "Garden" + }, + { + "Date": "2022-07-30", + "Value": 54, + "Series": "Garden" + }, + { + "Date": "2022-08-05", + "Value": 56, + "Series": "Garden" + }, + { + "Date": "2022-08-10", + "Value": 54, + "Series": "Garden" + }, + { + "Date": "2022-08-16", + "Value": 54, + "Series": "Garden" + }, + { + "Date": "2022-08-21", + "Value": 55, + "Series": "Garden" + }, + { + "Date": "2022-08-27", + "Value": 59, + "Series": "Garden" + }, + { + "Date": "2022-09-01", + "Value": 59, + "Series": "Garden" + }, + { + "Date": "2022-09-07", + "Value": 58, + "Series": "Garden" + }, + { + "Date": "2022-09-12", + "Value": 57, + "Series": "Garden" + }, + { + "Date": "2022-09-17", + "Value": 55, + "Series": "Garden" + }, + { + "Date": "2022-09-23", + "Value": 54, + "Series": "Garden" + }, + { + "Date": "2022-09-28", + "Value": 51, + "Series": "Garden" + }, + { + "Date": "2022-10-04", + "Value": 48, + "Series": "Garden" + }, + { + "Date": "2022-10-09", + "Value": 46, + "Series": "Garden" + }, + { + "Date": "2022-10-15", + "Value": 43, + "Series": "Garden" + }, + { + "Date": "2022-10-20", + "Value": 42, + "Series": "Garden" + }, + { + "Date": "2022-10-26", + "Value": 41, + "Series": "Garden" + }, + { + "Date": "2022-10-31", + "Value": 37, + "Series": "Garden" + }, + { + "Date": "2022-11-06", + "Value": 31, + "Series": "Garden" + }, + { + "Date": "2022-11-11", + "Value": 28, + "Series": "Garden" + }, + { + "Date": "2022-11-17", + "Value": 22, + "Series": "Garden" + }, + { + "Date": "2022-11-22", + "Value": 21, + "Series": "Garden" + }, + { + "Date": "2022-11-28", + "Value": 16, + "Series": "Garden" + }, + { + "Date": "2022-12-03", + "Value": 9, + "Series": "Garden" + }, + { + "Date": "2022-12-09", + "Value": 6, + "Series": "Garden" + }, + { + "Date": "2022-12-14", + "Value": 8, + "Series": "Garden" + }, + { + "Date": "2022-12-20", + "Value": 11, + "Series": "Garden" + }, + { + "Date": "2022-12-25", + "Value": 12, + "Series": "Garden" + }, + { + "Date": "2020-01-01", + "Value": 201, + "Series": "Auto" + }, + { + "Date": "2020-01-06", + "Value": 210, + "Series": "Auto" + }, + { + "Date": "2020-01-11", + "Value": 204, + "Series": "Auto" + }, + { + "Date": "2020-01-17", + "Value": 188, + "Series": "Auto" + }, + { + "Date": "2020-01-22", + "Value": 179, + "Series": "Auto" + }, + { + "Date": "2020-01-28", + "Value": 162, + "Series": "Auto" + }, + { + "Date": "2020-02-02", + "Value": 142, + "Series": "Auto" + }, + { + "Date": "2020-02-08", + "Value": 140, + "Series": "Auto" + }, + { + "Date": "2020-02-13", + "Value": 133, + "Series": "Auto" + }, + { + "Date": "2020-02-19", + "Value": 136, + "Series": "Auto" + }, + { + "Date": "2020-02-24", + "Value": 129, + "Series": "Auto" + }, + { + "Date": "2020-03-01", + "Value": 113, + "Series": "Auto" + }, + { + "Date": "2020-03-06", + "Value": 98, + "Series": "Auto" + }, + { + "Date": "2020-03-12", + "Value": 79, + "Series": "Auto" + }, + { + "Date": "2020-03-17", + "Value": 69, + "Series": "Auto" + }, + { + "Date": "2020-03-23", + "Value": 74, + "Series": "Auto" + }, + { + "Date": "2020-03-28", + "Value": 77, + "Series": "Auto" + }, + { + "Date": "2020-04-03", + "Value": 81, + "Series": "Auto" + }, + { + "Date": "2020-04-08", + "Value": 81, + "Series": "Auto" + }, + { + "Date": "2020-04-14", + "Value": 78, + "Series": "Auto" + }, + { + "Date": "2020-04-19", + "Value": 63, + "Series": "Auto" + }, + { + "Date": "2020-04-24", + "Value": 55, + "Series": "Auto" + }, + { + "Date": "2020-04-30", + "Value": 53, + "Series": "Auto" + }, + { + "Date": "2020-05-05", + "Value": 58, + "Series": "Auto" + }, + { + "Date": "2020-05-11", + "Value": 66, + "Series": "Auto" + }, + { + "Date": "2020-05-16", + "Value": 82, + "Series": "Auto" + }, + { + "Date": "2020-05-22", + "Value": 104, + "Series": "Auto" + }, + { + "Date": "2020-05-27", + "Value": 124, + "Series": "Auto" + }, + { + "Date": "2020-06-02", + "Value": 138, + "Series": "Auto" + }, + { + "Date": "2020-06-07", + "Value": 144, + "Series": "Auto" + }, + { + "Date": "2020-06-13", + "Value": 155, + "Series": "Auto" + }, + { + "Date": "2020-06-18", + "Value": 156, + "Series": "Auto" + }, + { + "Date": "2020-06-24", + "Value": 149, + "Series": "Auto" + }, + { + "Date": "2020-06-29", + "Value": 140, + "Series": "Auto" + }, + { + "Date": "2020-07-05", + "Value": 144, + "Series": "Auto" + }, + { + "Date": "2020-07-10", + "Value": 154, + "Series": "Auto" + }, + { + "Date": "2020-07-16", + "Value": 164, + "Series": "Auto" + }, + { + "Date": "2020-07-21", + "Value": 167, + "Series": "Auto" + }, + { + "Date": "2020-07-27", + "Value": 163, + "Series": "Auto" + }, + { + "Date": "2020-08-01", + "Value": 168, + "Series": "Auto" + }, + { + "Date": "2020-08-07", + "Value": 162, + "Series": "Auto" + }, + { + "Date": "2020-08-12", + "Value": 165, + "Series": "Auto" + }, + { + "Date": "2020-08-17", + "Value": 164, + "Series": "Auto" + }, + { + "Date": "2020-08-23", + "Value": 156, + "Series": "Auto" + }, + { + "Date": "2020-08-28", + "Value": 161, + "Series": "Auto" + }, + { + "Date": "2020-09-03", + "Value": 164, + "Series": "Auto" + }, + { + "Date": "2020-09-08", + "Value": 176, + "Series": "Auto" + }, + { + "Date": "2020-09-14", + "Value": 187, + "Series": "Auto" + }, + { + "Date": "2020-09-19", + "Value": 188, + "Series": "Auto" + }, + { + "Date": "2020-09-25", + "Value": 190, + "Series": "Auto" + }, + { + "Date": "2020-09-30", + "Value": 198, + "Series": "Auto" + }, + { + "Date": "2020-10-06", + "Value": 200, + "Series": "Auto" + }, + { + "Date": "2020-10-11", + "Value": 206, + "Series": "Auto" + }, + { + "Date": "2020-10-17", + "Value": 201, + "Series": "Auto" + }, + { + "Date": "2020-10-22", + "Value": 201, + "Series": "Auto" + }, + { + "Date": "2020-10-28", + "Value": 206, + "Series": "Auto" + }, + { + "Date": "2020-11-02", + "Value": 222, + "Series": "Auto" + }, + { + "Date": "2020-11-08", + "Value": 225, + "Series": "Auto" + }, + { + "Date": "2020-11-13", + "Value": 235, + "Series": "Auto" + }, + { + "Date": "2020-11-19", + "Value": 248, + "Series": "Auto" + }, + { + "Date": "2020-11-24", + "Value": 253, + "Series": "Auto" + }, + { + "Date": "2020-11-29", + "Value": 267, + "Series": "Auto" + }, + { + "Date": "2020-12-05", + "Value": 283, + "Series": "Auto" + }, + { + "Date": "2020-12-10", + "Value": 302, + "Series": "Auto" + }, + { + "Date": "2020-12-16", + "Value": 319, + "Series": "Auto" + }, + { + "Date": "2020-12-21", + "Value": 321, + "Series": "Auto" + }, + { + "Date": "2020-12-27", + "Value": 326, + "Series": "Auto" + }, + { + "Date": "2021-01-01", + "Value": 332, + "Series": "Auto" + }, + { + "Date": "2021-01-07", + "Value": 326, + "Series": "Auto" + }, + { + "Date": "2021-01-12", + "Value": 323, + "Series": "Auto" + }, + { + "Date": "2021-01-18", + "Value": 330, + "Series": "Auto" + }, + { + "Date": "2021-01-23", + "Value": 323, + "Series": "Auto" + }, + { + "Date": "2021-01-29", + "Value": 326, + "Series": "Auto" + }, + { + "Date": "2021-02-03", + "Value": 318, + "Series": "Auto" + }, + { + "Date": "2021-02-09", + "Value": 313, + "Series": "Auto" + }, + { + "Date": "2021-02-14", + "Value": 319, + "Series": "Auto" + }, + { + "Date": "2021-02-20", + "Value": 334, + "Series": "Auto" + }, + { + "Date": "2021-02-25", + "Value": 334, + "Series": "Auto" + }, + { + "Date": "2021-03-03", + "Value": 322, + "Series": "Auto" + }, + { + "Date": "2021-03-08", + "Value": 309, + "Series": "Auto" + }, + { + "Date": "2021-03-14", + "Value": 293, + "Series": "Auto" + }, + { + "Date": "2021-03-19", + "Value": 288, + "Series": "Auto" + }, + { + "Date": "2021-03-24", + "Value": 284, + "Series": "Auto" + }, + { + "Date": "2021-03-30", + "Value": 272, + "Series": "Auto" + }, + { + "Date": "2021-04-04", + "Value": 259, + "Series": "Auto" + }, + { + "Date": "2021-04-10", + "Value": 258, + "Series": "Auto" + }, + { + "Date": "2021-04-15", + "Value": 262, + "Series": "Auto" + }, + { + "Date": "2021-04-21", + "Value": 264, + "Series": "Auto" + }, + { + "Date": "2021-04-26", + "Value": 265, + "Series": "Auto" + }, + { + "Date": "2021-05-02", + "Value": 255, + "Series": "Auto" + }, + { + "Date": "2021-05-07", + "Value": 248, + "Series": "Auto" + }, + { + "Date": "2021-05-13", + "Value": 230, + "Series": "Auto" + }, + { + "Date": "2021-05-18", + "Value": 217, + "Series": "Auto" + }, + { + "Date": "2021-05-24", + "Value": 201, + "Series": "Auto" + }, + { + "Date": "2021-05-29", + "Value": 188, + "Series": "Auto" + }, + { + "Date": "2021-06-04", + "Value": 178, + "Series": "Auto" + }, + { + "Date": "2021-06-09", + "Value": 165, + "Series": "Auto" + }, + { + "Date": "2021-06-15", + "Value": 153, + "Series": "Auto" + }, + { + "Date": "2021-06-20", + "Value": 155, + "Series": "Auto" + }, + { + "Date": "2021-06-26", + "Value": 160, + "Series": "Auto" + }, + { + "Date": "2021-07-01", + "Value": 155, + "Series": "Auto" + }, + { + "Date": "2021-07-06", + "Value": 149, + "Series": "Auto" + }, + { + "Date": "2021-07-12", + "Value": 143, + "Series": "Auto" + }, + { + "Date": "2021-07-17", + "Value": 150, + "Series": "Auto" + }, + { + "Date": "2021-07-23", + "Value": 146, + "Series": "Auto" + }, + { + "Date": "2021-07-28", + "Value": 156, + "Series": "Auto" + }, + { + "Date": "2021-08-03", + "Value": 158, + "Series": "Auto" + }, + { + "Date": "2021-08-08", + "Value": 147, + "Series": "Auto" + }, + { + "Date": "2021-08-14", + "Value": 136, + "Series": "Auto" + }, + { + "Date": "2021-08-19", + "Value": 132, + "Series": "Auto" + }, + { + "Date": "2021-08-25", + "Value": 117, + "Series": "Auto" + }, + { + "Date": "2021-08-30", + "Value": 107, + "Series": "Auto" + }, + { + "Date": "2021-09-05", + "Value": 105, + "Series": "Auto" + }, + { + "Date": "2021-09-10", + "Value": 114, + "Series": "Auto" + }, + { + "Date": "2021-09-16", + "Value": 131, + "Series": "Auto" + }, + { + "Date": "2021-09-21", + "Value": 131, + "Series": "Auto" + }, + { + "Date": "2021-09-27", + "Value": 125, + "Series": "Auto" + }, + { + "Date": "2021-10-02", + "Value": 113, + "Series": "Auto" + }, + { + "Date": "2021-10-08", + "Value": 110, + "Series": "Auto" + }, + { + "Date": "2021-10-13", + "Value": 97, + "Series": "Auto" + }, + { + "Date": "2021-10-19", + "Value": 81, + "Series": "Auto" + }, + { + "Date": "2021-10-24", + "Value": 58, + "Series": "Auto" + }, + { + "Date": "2021-10-29", + "Value": 34, + "Series": "Auto" + }, + { + "Date": "2021-11-04", + "Value": 23, + "Series": "Auto" + }, + { + "Date": "2021-11-09", + "Value": 6, + "Series": "Auto" + }, + { + "Date": "2021-11-15", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2021-11-20", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2021-11-26", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2021-12-01", + "Value": 1, + "Series": "Auto" + }, + { + "Date": "2021-12-07", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2021-12-12", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2021-12-18", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2021-12-23", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2021-12-29", + "Value": 1, + "Series": "Auto" + }, + { + "Date": "2022-01-03", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-01-09", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-01-14", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-01-20", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-01-25", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-01-31", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-02-05", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-02-10", + "Value": 3, + "Series": "Auto" + }, + { + "Date": "2022-02-16", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-02-21", + "Value": 5, + "Series": "Auto" + }, + { + "Date": "2022-02-27", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-03-04", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-03-10", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-03-15", + "Value": 1, + "Series": "Auto" + }, + { + "Date": "2022-03-21", + "Value": 13, + "Series": "Auto" + }, + { + "Date": "2022-03-26", + "Value": 19, + "Series": "Auto" + }, + { + "Date": "2022-04-01", + "Value": 28, + "Series": "Auto" + }, + { + "Date": "2022-04-06", + "Value": 34, + "Series": "Auto" + }, + { + "Date": "2022-04-12", + "Value": 44, + "Series": "Auto" + }, + { + "Date": "2022-04-17", + "Value": 60, + "Series": "Auto" + }, + { + "Date": "2022-04-23", + "Value": 70, + "Series": "Auto" + }, + { + "Date": "2022-04-28", + "Value": 74, + "Series": "Auto" + }, + { + "Date": "2022-05-04", + "Value": 84, + "Series": "Auto" + }, + { + "Date": "2022-05-09", + "Value": 88, + "Series": "Auto" + }, + { + "Date": "2022-05-15", + "Value": 90, + "Series": "Auto" + }, + { + "Date": "2022-05-20", + "Value": 103, + "Series": "Auto" + }, + { + "Date": "2022-05-26", + "Value": 111, + "Series": "Auto" + }, + { + "Date": "2022-05-31", + "Value": 105, + "Series": "Auto" + }, + { + "Date": "2022-06-05", + "Value": 106, + "Series": "Auto" + }, + { + "Date": "2022-06-11", + "Value": 116, + "Series": "Auto" + }, + { + "Date": "2022-06-16", + "Value": 111, + "Series": "Auto" + }, + { + "Date": "2022-06-22", + "Value": 95, + "Series": "Auto" + }, + { + "Date": "2022-06-27", + "Value": 77, + "Series": "Auto" + }, + { + "Date": "2022-07-03", + "Value": 77, + "Series": "Auto" + }, + { + "Date": "2022-07-08", + "Value": 73, + "Series": "Auto" + }, + { + "Date": "2022-07-14", + "Value": 66, + "Series": "Auto" + }, + { + "Date": "2022-07-19", + "Value": 48, + "Series": "Auto" + }, + { + "Date": "2022-07-25", + "Value": 27, + "Series": "Auto" + }, + { + "Date": "2022-07-30", + "Value": 12, + "Series": "Auto" + }, + { + "Date": "2022-08-05", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-08-10", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-08-16", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-08-21", + "Value": 7, + "Series": "Auto" + }, + { + "Date": "2022-08-27", + "Value": 10, + "Series": "Auto" + }, + { + "Date": "2022-09-01", + "Value": 4, + "Series": "Auto" + }, + { + "Date": "2022-09-07", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-09-12", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-09-17", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-09-23", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-09-28", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-10-04", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-10-09", + "Value": 6, + "Series": "Auto" + }, + { + "Date": "2022-10-15", + "Value": 10, + "Series": "Auto" + }, + { + "Date": "2022-10-20", + "Value": 17, + "Series": "Auto" + }, + { + "Date": "2022-10-26", + "Value": 11, + "Series": "Auto" + }, + { + "Date": "2022-10-31", + "Value": 9, + "Series": "Auto" + }, + { + "Date": "2022-11-06", + "Value": 7, + "Series": "Auto" + }, + { + "Date": "2022-11-11", + "Value": 13, + "Series": "Auto" + }, + { + "Date": "2022-11-17", + "Value": 9, + "Series": "Auto" + }, + { + "Date": "2022-11-22", + "Value": 14, + "Series": "Auto" + }, + { + "Date": "2022-11-28", + "Value": 7, + "Series": "Auto" + }, + { + "Date": "2022-12-03", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-12-09", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-12-14", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-12-20", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2022-12-25", + "Value": 0, + "Series": "Auto" + }, + { + "Date": "2020-01-01", + "Value": 127, + "Series": "Health" + }, + { + "Date": "2020-01-06", + "Value": 120, + "Series": "Health" + }, + { + "Date": "2020-01-11", + "Value": 115, + "Series": "Health" + }, + { + "Date": "2020-01-17", + "Value": 111, + "Series": "Health" + }, + { + "Date": "2020-01-22", + "Value": 112, + "Series": "Health" + }, + { + "Date": "2020-01-28", + "Value": 119, + "Series": "Health" + }, + { + "Date": "2020-02-02", + "Value": 128, + "Series": "Health" + }, + { + "Date": "2020-02-08", + "Value": 138, + "Series": "Health" + }, + { + "Date": "2020-02-13", + "Value": 144, + "Series": "Health" + }, + { + "Date": "2020-02-19", + "Value": 144, + "Series": "Health" + }, + { + "Date": "2020-02-24", + "Value": 138, + "Series": "Health" + }, + { + "Date": "2020-03-01", + "Value": 142, + "Series": "Health" + }, + { + "Date": "2020-03-06", + "Value": 136, + "Series": "Health" + }, + { + "Date": "2020-03-12", + "Value": 135, + "Series": "Health" + }, + { + "Date": "2020-03-17", + "Value": 132, + "Series": "Health" + }, + { + "Date": "2020-03-23", + "Value": 134, + "Series": "Health" + }, + { + "Date": "2020-03-28", + "Value": 128, + "Series": "Health" + }, + { + "Date": "2020-04-03", + "Value": 123, + "Series": "Health" + }, + { + "Date": "2020-04-08", + "Value": 114, + "Series": "Health" + }, + { + "Date": "2020-04-14", + "Value": 101, + "Series": "Health" + }, + { + "Date": "2020-04-19", + "Value": 87, + "Series": "Health" + }, + { + "Date": "2020-04-24", + "Value": 72, + "Series": "Health" + }, + { + "Date": "2020-04-30", + "Value": 64, + "Series": "Health" + }, + { + "Date": "2020-05-05", + "Value": 65, + "Series": "Health" + }, + { + "Date": "2020-05-11", + "Value": 70, + "Series": "Health" + }, + { + "Date": "2020-05-16", + "Value": 74, + "Series": "Health" + }, + { + "Date": "2020-05-22", + "Value": 81, + "Series": "Health" + }, + { + "Date": "2020-05-27", + "Value": 91, + "Series": "Health" + }, + { + "Date": "2020-06-02", + "Value": 99, + "Series": "Health" + }, + { + "Date": "2020-06-07", + "Value": 98, + "Series": "Health" + }, + { + "Date": "2020-06-13", + "Value": 92, + "Series": "Health" + }, + { + "Date": "2020-06-18", + "Value": 80, + "Series": "Health" + }, + { + "Date": "2020-06-24", + "Value": 77, + "Series": "Health" + }, + { + "Date": "2020-06-29", + "Value": 72, + "Series": "Health" + }, + { + "Date": "2020-07-05", + "Value": 73, + "Series": "Health" + }, + { + "Date": "2020-07-10", + "Value": 68, + "Series": "Health" + }, + { + "Date": "2020-07-16", + "Value": 61, + "Series": "Health" + }, + { + "Date": "2020-07-21", + "Value": 49, + "Series": "Health" + }, + { + "Date": "2020-07-27", + "Value": 40, + "Series": "Health" + }, + { + "Date": "2020-08-01", + "Value": 34, + "Series": "Health" + }, + { + "Date": "2020-08-07", + "Value": 35, + "Series": "Health" + }, + { + "Date": "2020-08-12", + "Value": 28, + "Series": "Health" + }, + { + "Date": "2020-08-17", + "Value": 25, + "Series": "Health" + }, + { + "Date": "2020-08-23", + "Value": 23, + "Series": "Health" + }, + { + "Date": "2020-08-28", + "Value": 23, + "Series": "Health" + }, + { + "Date": "2020-09-03", + "Value": 28, + "Series": "Health" + }, + { + "Date": "2020-09-08", + "Value": 36, + "Series": "Health" + }, + { + "Date": "2020-09-14", + "Value": 34, + "Series": "Health" + }, + { + "Date": "2020-09-19", + "Value": 33, + "Series": "Health" + }, + { + "Date": "2020-09-25", + "Value": 31, + "Series": "Health" + }, + { + "Date": "2020-09-30", + "Value": 34, + "Series": "Health" + }, + { + "Date": "2020-10-06", + "Value": 43, + "Series": "Health" + }, + { + "Date": "2020-10-11", + "Value": 49, + "Series": "Health" + }, + { + "Date": "2020-10-17", + "Value": 57, + "Series": "Health" + }, + { + "Date": "2020-10-22", + "Value": 55, + "Series": "Health" + }, + { + "Date": "2020-10-28", + "Value": 58, + "Series": "Health" + }, + { + "Date": "2020-11-02", + "Value": 55, + "Series": "Health" + }, + { + "Date": "2020-11-08", + "Value": 50, + "Series": "Health" + }, + { + "Date": "2020-11-13", + "Value": 40, + "Series": "Health" + }, + { + "Date": "2020-11-19", + "Value": 35, + "Series": "Health" + }, + { + "Date": "2020-11-24", + "Value": 26, + "Series": "Health" + }, + { + "Date": "2020-11-29", + "Value": 27, + "Series": "Health" + }, + { + "Date": "2020-12-05", + "Value": 31, + "Series": "Health" + }, + { + "Date": "2020-12-10", + "Value": 35, + "Series": "Health" + }, + { + "Date": "2020-12-16", + "Value": 40, + "Series": "Health" + }, + { + "Date": "2020-12-21", + "Value": 48, + "Series": "Health" + }, + { + "Date": "2020-12-27", + "Value": 50, + "Series": "Health" + }, + { + "Date": "2021-01-01", + "Value": 48, + "Series": "Health" + }, + { + "Date": "2021-01-07", + "Value": 54, + "Series": "Health" + }, + { + "Date": "2021-01-12", + "Value": 67, + "Series": "Health" + }, + { + "Date": "2021-01-18", + "Value": 74, + "Series": "Health" + }, + { + "Date": "2021-01-23", + "Value": 82, + "Series": "Health" + }, + { + "Date": "2021-01-29", + "Value": 93, + "Series": "Health" + }, + { + "Date": "2021-02-03", + "Value": 101, + "Series": "Health" + }, + { + "Date": "2021-02-09", + "Value": 109, + "Series": "Health" + }, + { + "Date": "2021-02-14", + "Value": 111, + "Series": "Health" + }, + { + "Date": "2021-02-20", + "Value": 119, + "Series": "Health" + }, + { + "Date": "2021-02-25", + "Value": 130, + "Series": "Health" + }, + { + "Date": "2021-03-03", + "Value": 133, + "Series": "Health" + }, + { + "Date": "2021-03-08", + "Value": 128, + "Series": "Health" + }, + { + "Date": "2021-03-14", + "Value": 127, + "Series": "Health" + }, + { + "Date": "2021-03-19", + "Value": 127, + "Series": "Health" + }, + { + "Date": "2021-03-24", + "Value": 121, + "Series": "Health" + }, + { + "Date": "2021-03-30", + "Value": 110, + "Series": "Health" + }, + { + "Date": "2021-04-04", + "Value": 98, + "Series": "Health" + }, + { + "Date": "2021-04-10", + "Value": 81, + "Series": "Health" + }, + { + "Date": "2021-04-15", + "Value": 61, + "Series": "Health" + }, + { + "Date": "2021-04-21", + "Value": 50, + "Series": "Health" + }, + { + "Date": "2021-04-26", + "Value": 40, + "Series": "Health" + }, + { + "Date": "2021-05-02", + "Value": 34, + "Series": "Health" + }, + { + "Date": "2021-05-07", + "Value": 31, + "Series": "Health" + }, + { + "Date": "2021-05-13", + "Value": 36, + "Series": "Health" + }, + { + "Date": "2021-05-18", + "Value": 41, + "Series": "Health" + }, + { + "Date": "2021-05-24", + "Value": 37, + "Series": "Health" + }, + { + "Date": "2021-05-29", + "Value": 33, + "Series": "Health" + }, + { + "Date": "2021-06-04", + "Value": 29, + "Series": "Health" + }, + { + "Date": "2021-06-09", + "Value": 29, + "Series": "Health" + }, + { + "Date": "2021-06-15", + "Value": 36, + "Series": "Health" + }, + { + "Date": "2021-06-20", + "Value": 35, + "Series": "Health" + }, + { + "Date": "2021-06-26", + "Value": 29, + "Series": "Health" + }, + { + "Date": "2021-07-01", + "Value": 31, + "Series": "Health" + }, + { + "Date": "2021-07-06", + "Value": 23, + "Series": "Health" + }, + { + "Date": "2021-07-12", + "Value": 11, + "Series": "Health" + }, + { + "Date": "2021-07-17", + "Value": 8, + "Series": "Health" + }, + { + "Date": "2021-07-23", + "Value": 7, + "Series": "Health" + }, + { + "Date": "2021-07-28", + "Value": 3, + "Series": "Health" + }, + { + "Date": "2021-08-03", + "Value": 0, + "Series": "Health" + }, + { + "Date": "2021-08-08", + "Value": 0, + "Series": "Health" + }, + { + "Date": "2021-08-14", + "Value": 3, + "Series": "Health" + }, + { + "Date": "2021-08-19", + "Value": 8, + "Series": "Health" + }, + { + "Date": "2021-08-25", + "Value": 18, + "Series": "Health" + }, + { + "Date": "2021-08-30", + "Value": 28, + "Series": "Health" + }, + { + "Date": "2021-09-05", + "Value": 35, + "Series": "Health" + }, + { + "Date": "2021-09-10", + "Value": 39, + "Series": "Health" + }, + { + "Date": "2021-09-16", + "Value": 33, + "Series": "Health" + }, + { + "Date": "2021-09-21", + "Value": 34, + "Series": "Health" + }, + { + "Date": "2021-09-27", + "Value": 28, + "Series": "Health" + }, + { + "Date": "2021-10-02", + "Value": 32, + "Series": "Health" + }, + { + "Date": "2021-10-08", + "Value": 40, + "Series": "Health" + }, + { + "Date": "2021-10-13", + "Value": 38, + "Series": "Health" + }, + { + "Date": "2021-10-19", + "Value": 43, + "Series": "Health" + }, + { + "Date": "2021-10-24", + "Value": 51, + "Series": "Health" + }, + { + "Date": "2021-10-29", + "Value": 53, + "Series": "Health" + }, + { + "Date": "2021-11-04", + "Value": 58, + "Series": "Health" + }, + { + "Date": "2021-11-09", + "Value": 56, + "Series": "Health" + }, + { + "Date": "2021-11-15", + "Value": 54, + "Series": "Health" + }, + { + "Date": "2021-11-20", + "Value": 49, + "Series": "Health" + }, + { + "Date": "2021-11-26", + "Value": 40, + "Series": "Health" + }, + { + "Date": "2021-12-01", + "Value": 33, + "Series": "Health" + }, + { + "Date": "2021-12-07", + "Value": 22, + "Series": "Health" + }, + { + "Date": "2021-12-12", + "Value": 9, + "Series": "Health" + }, + { + "Date": "2021-12-18", + "Value": 5, + "Series": "Health" + }, + { + "Date": "2021-12-23", + "Value": 9, + "Series": "Health" + }, + { + "Date": "2021-12-29", + "Value": 19, + "Series": "Health" + }, + { + "Date": "2022-01-03", + "Value": 33, + "Series": "Health" + }, + { + "Date": "2022-01-09", + "Value": 36, + "Series": "Health" + }, + { + "Date": "2022-01-14", + "Value": 39, + "Series": "Health" + }, + { + "Date": "2022-01-20", + "Value": 32, + "Series": "Health" + }, + { + "Date": "2022-01-25", + "Value": 23, + "Series": "Health" + }, + { + "Date": "2022-01-31", + "Value": 14, + "Series": "Health" + }, + { + "Date": "2022-02-05", + "Value": 11, + "Series": "Health" + }, + { + "Date": "2022-02-10", + "Value": 13, + "Series": "Health" + }, + { + "Date": "2022-02-16", + "Value": 6, + "Series": "Health" + }, + { + "Date": "2022-02-21", + "Value": 0, + "Series": "Health" + }, + { + "Date": "2022-02-27", + "Value": 0, + "Series": "Health" + }, + { + "Date": "2022-03-04", + "Value": 0, + "Series": "Health" + }, + { + "Date": "2022-03-10", + "Value": 3, + "Series": "Health" + }, + { + "Date": "2022-03-15", + "Value": 14, + "Series": "Health" + }, + { + "Date": "2022-03-21", + "Value": 20, + "Series": "Health" + }, + { + "Date": "2022-03-26", + "Value": 31, + "Series": "Health" + }, + { + "Date": "2022-04-01", + "Value": 32, + "Series": "Health" + }, + { + "Date": "2022-04-06", + "Value": 36, + "Series": "Health" + }, + { + "Date": "2022-04-12", + "Value": 30, + "Series": "Health" + }, + { + "Date": "2022-04-17", + "Value": 25, + "Series": "Health" + }, + { + "Date": "2022-04-23", + "Value": 23, + "Series": "Health" + }, + { + "Date": "2022-04-28", + "Value": 19, + "Series": "Health" + }, + { + "Date": "2022-05-04", + "Value": 24, + "Series": "Health" + }, + { + "Date": "2022-05-09", + "Value": 32, + "Series": "Health" + }, + { + "Date": "2022-05-15", + "Value": 46, + "Series": "Health" + }, + { + "Date": "2022-05-20", + "Value": 64, + "Series": "Health" + }, + { + "Date": "2022-05-26", + "Value": 77, + "Series": "Health" + }, + { + "Date": "2022-05-31", + "Value": 84, + "Series": "Health" + }, + { + "Date": "2022-06-05", + "Value": 96, + "Series": "Health" + }, + { + "Date": "2022-06-11", + "Value": 102, + "Series": "Health" + }, + { + "Date": "2022-06-16", + "Value": 103, + "Series": "Health" + }, + { + "Date": "2022-06-22", + "Value": 96, + "Series": "Health" + }, + { + "Date": "2022-06-27", + "Value": 87, + "Series": "Health" + }, + { + "Date": "2022-07-03", + "Value": 75, + "Series": "Health" + }, + { + "Date": "2022-07-08", + "Value": 62, + "Series": "Health" + }, + { + "Date": "2022-07-14", + "Value": 59, + "Series": "Health" + }, + { + "Date": "2022-07-19", + "Value": 53, + "Series": "Health" + }, + { + "Date": "2022-07-25", + "Value": 51, + "Series": "Health" + }, + { + "Date": "2022-07-30", + "Value": 57, + "Series": "Health" + }, + { + "Date": "2022-08-05", + "Value": 55, + "Series": "Health" + }, + { + "Date": "2022-08-10", + "Value": 59, + "Series": "Health" + }, + { + "Date": "2022-08-16", + "Value": 58, + "Series": "Health" + }, + { + "Date": "2022-08-21", + "Value": 57, + "Series": "Health" + }, + { + "Date": "2022-08-27", + "Value": 60, + "Series": "Health" + }, + { + "Date": "2022-09-01", + "Value": 56, + "Series": "Health" + }, + { + "Date": "2022-09-07", + "Value": 51, + "Series": "Health" + }, + { + "Date": "2022-09-12", + "Value": 47, + "Series": "Health" + }, + { + "Date": "2022-09-17", + "Value": 53, + "Series": "Health" + }, + { + "Date": "2022-09-23", + "Value": 50, + "Series": "Health" + }, + { + "Date": "2022-09-28", + "Value": 55, + "Series": "Health" + }, + { + "Date": "2022-10-04", + "Value": 62, + "Series": "Health" + }, + { + "Date": "2022-10-09", + "Value": 75, + "Series": "Health" + }, + { + "Date": "2022-10-15", + "Value": 86, + "Series": "Health" + }, + { + "Date": "2022-10-20", + "Value": 99, + "Series": "Health" + }, + { + "Date": "2022-10-26", + "Value": 108, + "Series": "Health" + }, + { + "Date": "2022-10-31", + "Value": 113, + "Series": "Health" + }, + { + "Date": "2022-11-06", + "Value": 122, + "Series": "Health" + }, + { + "Date": "2022-11-11", + "Value": 125, + "Series": "Health" + }, + { + "Date": "2022-11-17", + "Value": 126, + "Series": "Health" + }, + { + "Date": "2022-11-22", + "Value": 122, + "Series": "Health" + }, + { + "Date": "2022-11-28", + "Value": 118, + "Series": "Health" + }, + { + "Date": "2022-12-03", + "Value": 115, + "Series": "Health" + }, + { + "Date": "2022-12-09", + "Value": 117, + "Series": "Health" + }, + { + "Date": "2022-12-14", + "Value": 123, + "Series": "Health" + }, + { + "Date": "2022-12-20", + "Value": 122, + "Series": "Health" + }, + { + "Date": "2022-12-25", + "Value": 120, + "Series": "Health" + }, + { + "Date": "2020-01-01", + "Value": 113, + "Series": "Beauty" + }, + { + "Date": "2020-01-06", + "Value": 98, + "Series": "Beauty" + }, + { + "Date": "2020-01-11", + "Value": 96, + "Series": "Beauty" + }, + { + "Date": "2020-01-17", + "Value": 79, + "Series": "Beauty" + }, + { + "Date": "2020-01-22", + "Value": 53, + "Series": "Beauty" + }, + { + "Date": "2020-01-28", + "Value": 18, + "Series": "Beauty" + }, + { + "Date": "2020-02-02", + "Value": 2, + "Series": "Beauty" + }, + { + "Date": "2020-02-08", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-02-13", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-02-19", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-02-24", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-03-01", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-03-06", + "Value": 7, + "Series": "Beauty" + }, + { + "Date": "2020-03-12", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-03-17", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-03-23", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-03-28", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-04-03", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-04-08", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-04-14", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-04-19", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-04-24", + "Value": 1, + "Series": "Beauty" + }, + { + "Date": "2020-04-30", + "Value": 11, + "Series": "Beauty" + }, + { + "Date": "2020-05-05", + "Value": 7, + "Series": "Beauty" + }, + { + "Date": "2020-05-11", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-05-16", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-05-22", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-05-27", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-06-02", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-06-07", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-06-13", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-06-18", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-06-24", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-06-29", + "Value": 2, + "Series": "Beauty" + }, + { + "Date": "2020-07-05", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-07-10", + "Value": 9, + "Series": "Beauty" + }, + { + "Date": "2020-07-16", + "Value": 13, + "Series": "Beauty" + }, + { + "Date": "2020-07-21", + "Value": 14, + "Series": "Beauty" + }, + { + "Date": "2020-07-27", + "Value": 8, + "Series": "Beauty" + }, + { + "Date": "2020-08-01", + "Value": 0, + "Series": "Beauty" + }, + { + "Date": "2020-08-07", + "Value": 3, + "Series": "Beauty" + }, + { + "Date": "2020-08-12", + "Value": 19, + "Series": "Beauty" + }, + { + "Date": "2020-08-17", + "Value": 18, + "Series": "Beauty" + }, + { + "Date": "2020-08-23", + "Value": 16, + "Series": "Beauty" + }, + { + "Date": "2020-08-28", + "Value": 7, + "Series": "Beauty" + }, + { + "Date": "2020-09-03", + "Value": 14, + "Series": "Beauty" + }, + { + "Date": "2020-09-08", + "Value": 5, + "Series": "Beauty" + }, + { + "Date": "2020-09-14", + "Value": 2, + "Series": "Beauty" + }, + { + "Date": "2020-09-19", + "Value": 9, + "Series": "Beauty" + }, + { + "Date": "2020-09-25", + "Value": 24, + "Series": "Beauty" + }, + { + "Date": "2020-09-30", + "Value": 41, + "Series": "Beauty" + }, + { + "Date": "2020-10-06", + "Value": 68, + "Series": "Beauty" + }, + { + "Date": "2020-10-11", + "Value": 88, + "Series": "Beauty" + }, + { + "Date": "2020-10-17", + "Value": 97, + "Series": "Beauty" + }, + { + "Date": "2020-10-22", + "Value": 107, + "Series": "Beauty" + }, + { + "Date": "2020-10-28", + "Value": 117, + "Series": "Beauty" + }, + { + "Date": "2020-11-02", + "Value": 138, + "Series": "Beauty" + }, + { + "Date": "2020-11-08", + "Value": 142, + "Series": "Beauty" + }, + { + "Date": "2020-11-13", + "Value": 140, + "Series": "Beauty" + }, + { + "Date": "2020-11-19", + "Value": 143, + "Series": "Beauty" + }, + { + "Date": "2020-11-24", + "Value": 144, + "Series": "Beauty" + }, + { + "Date": "2020-11-29", + "Value": 133, + "Series": "Beauty" + }, + { + "Date": "2020-12-05", + "Value": 138, + "Series": "Beauty" + }, + { + "Date": "2020-12-10", + "Value": 139, + "Series": "Beauty" + }, + { + "Date": "2020-12-16", + "Value": 141, + "Series": "Beauty" + }, + { + "Date": "2020-12-21", + "Value": 152, + "Series": "Beauty" + }, + { + "Date": "2020-12-27", + "Value": 168, + "Series": "Beauty" + }, + { + "Date": "2021-01-01", + "Value": 181, + "Series": "Beauty" + }, + { + "Date": "2021-01-07", + "Value": 192, + "Series": "Beauty" + }, + { + "Date": "2021-01-12", + "Value": 216, + "Series": "Beauty" + }, + { + "Date": "2021-01-18", + "Value": 240, + "Series": "Beauty" + }, + { + "Date": "2021-01-23", + "Value": 269, + "Series": "Beauty" + }, + { + "Date": "2021-01-29", + "Value": 296, + "Series": "Beauty" + }, + { + "Date": "2021-02-03", + "Value": 309, + "Series": "Beauty" + }, + { + "Date": "2021-02-09", + "Value": 330, + "Series": "Beauty" + }, + { + "Date": "2021-02-14", + "Value": 346, + "Series": "Beauty" + }, + { + "Date": "2021-02-20", + "Value": 343, + "Series": "Beauty" + }, + { + "Date": "2021-02-25", + "Value": 335, + "Series": "Beauty" + }, + { + "Date": "2021-03-03", + "Value": 341, + "Series": "Beauty" + }, + { + "Date": "2021-03-08", + "Value": 362, + "Series": "Beauty" + }, + { + "Date": "2021-03-14", + "Value": 390, + "Series": "Beauty" + }, + { + "Date": "2021-03-19", + "Value": 414, + "Series": "Beauty" + }, + { + "Date": "2021-03-24", + "Value": 424, + "Series": "Beauty" + }, + { + "Date": "2021-03-30", + "Value": 433, + "Series": "Beauty" + }, + { + "Date": "2021-04-04", + "Value": 433, + "Series": "Beauty" + }, + { + "Date": "2021-04-10", + "Value": 423, + "Series": "Beauty" + }, + { + "Date": "2021-04-15", + "Value": 429, + "Series": "Beauty" + }, + { + "Date": "2021-04-21", + "Value": 428, + "Series": "Beauty" + }, + { + "Date": "2021-04-26", + "Value": 416, + "Series": "Beauty" + }, + { + "Date": "2021-05-02", + "Value": 392, + "Series": "Beauty" + }, + { + "Date": "2021-05-07", + "Value": 371, + "Series": "Beauty" + }, + { + "Date": "2021-05-13", + "Value": 340, + "Series": "Beauty" + }, + { + "Date": "2021-05-18", + "Value": 330, + "Series": "Beauty" + }, + { + "Date": "2021-05-24", + "Value": 312, + "Series": "Beauty" + }, + { + "Date": "2021-05-29", + "Value": 292, + "Series": "Beauty" + }, + { + "Date": "2021-06-04", + "Value": 272, + "Series": "Beauty" + }, + { + "Date": "2021-06-09", + "Value": 259, + "Series": "Beauty" + }, + { + "Date": "2021-06-15", + "Value": 255, + "Series": "Beauty" + }, + { + "Date": "2021-06-20", + "Value": 260, + "Series": "Beauty" + }, + { + "Date": "2021-06-26", + "Value": 277, + "Series": "Beauty" + }, + { + "Date": "2021-07-01", + "Value": 301, + "Series": "Beauty" + }, + { + "Date": "2021-07-06", + "Value": 333, + "Series": "Beauty" + }, + { + "Date": "2021-07-12", + "Value": 368, + "Series": "Beauty" + }, + { + "Date": "2021-07-17", + "Value": 401, + "Series": "Beauty" + }, + { + "Date": "2021-07-23", + "Value": 411, + "Series": "Beauty" + }, + { + "Date": "2021-07-28", + "Value": 413, + "Series": "Beauty" + }, + { + "Date": "2021-08-03", + "Value": 426, + "Series": "Beauty" + }, + { + "Date": "2021-08-08", + "Value": 421, + "Series": "Beauty" + }, + { + "Date": "2021-08-14", + "Value": 432, + "Series": "Beauty" + }, + { + "Date": "2021-08-19", + "Value": 441, + "Series": "Beauty" + }, + { + "Date": "2021-08-25", + "Value": 444, + "Series": "Beauty" + }, + { + "Date": "2021-08-30", + "Value": 453, + "Series": "Beauty" + }, + { + "Date": "2021-09-05", + "Value": 459, + "Series": "Beauty" + }, + { + "Date": "2021-09-10", + "Value": 448, + "Series": "Beauty" + }, + { + "Date": "2021-09-16", + "Value": 437, + "Series": "Beauty" + }, + { + "Date": "2021-09-21", + "Value": 413, + "Series": "Beauty" + }, + { + "Date": "2021-09-27", + "Value": 412, + "Series": "Beauty" + }, + { + "Date": "2021-10-02", + "Value": 413, + "Series": "Beauty" + }, + { + "Date": "2021-10-08", + "Value": 408, + "Series": "Beauty" + }, + { + "Date": "2021-10-13", + "Value": 402, + "Series": "Beauty" + }, + { + "Date": "2021-10-19", + "Value": 406, + "Series": "Beauty" + }, + { + "Date": "2021-10-24", + "Value": 397, + "Series": "Beauty" + }, + { + "Date": "2021-10-29", + "Value": 398, + "Series": "Beauty" + }, + { + "Date": "2021-11-04", + "Value": 415, + "Series": "Beauty" + }, + { + "Date": "2021-11-09", + "Value": 413, + "Series": "Beauty" + }, + { + "Date": "2021-11-15", + "Value": 410, + "Series": "Beauty" + }, + { + "Date": "2021-11-20", + "Value": 406, + "Series": "Beauty" + }, + { + "Date": "2021-11-26", + "Value": 393, + "Series": "Beauty" + }, + { + "Date": "2021-12-01", + "Value": 379, + "Series": "Beauty" + }, + { + "Date": "2021-12-07", + "Value": 374, + "Series": "Beauty" + }, + { + "Date": "2021-12-12", + "Value": 384, + "Series": "Beauty" + }, + { + "Date": "2021-12-18", + "Value": 398, + "Series": "Beauty" + }, + { + "Date": "2021-12-23", + "Value": 402, + "Series": "Beauty" + }, + { + "Date": "2021-12-29", + "Value": 404, + "Series": "Beauty" + }, + { + "Date": "2022-01-03", + "Value": 400, + "Series": "Beauty" + }, + { + "Date": "2022-01-09", + "Value": 390, + "Series": "Beauty" + }, + { + "Date": "2022-01-14", + "Value": 393, + "Series": "Beauty" + }, + { + "Date": "2022-01-20", + "Value": 403, + "Series": "Beauty" + }, + { + "Date": "2022-01-25", + "Value": 411, + "Series": "Beauty" + }, + { + "Date": "2022-01-31", + "Value": 415, + "Series": "Beauty" + }, + { + "Date": "2022-02-05", + "Value": 404, + "Series": "Beauty" + }, + { + "Date": "2022-02-10", + "Value": 390, + "Series": "Beauty" + }, + { + "Date": "2022-02-16", + "Value": 396, + "Series": "Beauty" + }, + { + "Date": "2022-02-21", + "Value": 397, + "Series": "Beauty" + }, + { + "Date": "2022-02-27", + "Value": 385, + "Series": "Beauty" + }, + { + "Date": "2022-03-04", + "Value": 374, + "Series": "Beauty" + }, + { + "Date": "2022-03-10", + "Value": 355, + "Series": "Beauty" + }, + { + "Date": "2022-03-15", + "Value": 329, + "Series": "Beauty" + }, + { + "Date": "2022-03-21", + "Value": 315, + "Series": "Beauty" + }, + { + "Date": "2022-03-26", + "Value": 291, + "Series": "Beauty" + }, + { + "Date": "2022-04-01", + "Value": 264, + "Series": "Beauty" + }, + { + "Date": "2022-04-06", + "Value": 228, + "Series": "Beauty" + }, + { + "Date": "2022-04-12", + "Value": 195, + "Series": "Beauty" + }, + { + "Date": "2022-04-17", + "Value": 162, + "Series": "Beauty" + }, + { + "Date": "2022-04-23", + "Value": 138, + "Series": "Beauty" + }, + { + "Date": "2022-04-28", + "Value": 120, + "Series": "Beauty" + }, + { + "Date": "2022-05-04", + "Value": 123, + "Series": "Beauty" + }, + { + "Date": "2022-05-09", + "Value": 115, + "Series": "Beauty" + }, + { + "Date": "2022-05-15", + "Value": 107, + "Series": "Beauty" + }, + { + "Date": "2022-05-20", + "Value": 94, + "Series": "Beauty" + }, + { + "Date": "2022-05-26", + "Value": 94, + "Series": "Beauty" + }, + { + "Date": "2022-05-31", + "Value": 88, + "Series": "Beauty" + }, + { + "Date": "2022-06-05", + "Value": 76, + "Series": "Beauty" + }, + { + "Date": "2022-06-11", + "Value": 83, + "Series": "Beauty" + }, + { + "Date": "2022-06-16", + "Value": 84, + "Series": "Beauty" + }, + { + "Date": "2022-06-22", + "Value": 77, + "Series": "Beauty" + }, + { + "Date": "2022-06-27", + "Value": 82, + "Series": "Beauty" + }, + { + "Date": "2022-07-03", + "Value": 86, + "Series": "Beauty" + }, + { + "Date": "2022-07-08", + "Value": 103, + "Series": "Beauty" + }, + { + "Date": "2022-07-14", + "Value": 101, + "Series": "Beauty" + }, + { + "Date": "2022-07-19", + "Value": 116, + "Series": "Beauty" + }, + { + "Date": "2022-07-25", + "Value": 142, + "Series": "Beauty" + }, + { + "Date": "2022-07-30", + "Value": 168, + "Series": "Beauty" + }, + { + "Date": "2022-08-05", + "Value": 196, + "Series": "Beauty" + }, + { + "Date": "2022-08-10", + "Value": 221, + "Series": "Beauty" + }, + { + "Date": "2022-08-16", + "Value": 253, + "Series": "Beauty" + }, + { + "Date": "2022-08-21", + "Value": 260, + "Series": "Beauty" + }, + { + "Date": "2022-08-27", + "Value": 253, + "Series": "Beauty" + }, + { + "Date": "2022-09-01", + "Value": 263, + "Series": "Beauty" + }, + { + "Date": "2022-09-07", + "Value": 258, + "Series": "Beauty" + }, + { + "Date": "2022-09-12", + "Value": 263, + "Series": "Beauty" + }, + { + "Date": "2022-09-17", + "Value": 257, + "Series": "Beauty" + }, + { + "Date": "2022-09-23", + "Value": 250, + "Series": "Beauty" + }, + { + "Date": "2022-09-28", + "Value": 249, + "Series": "Beauty" + }, + { + "Date": "2022-10-04", + "Value": 260, + "Series": "Beauty" + }, + { + "Date": "2022-10-09", + "Value": 274, + "Series": "Beauty" + }, + { + "Date": "2022-10-15", + "Value": 285, + "Series": "Beauty" + }, + { + "Date": "2022-10-20", + "Value": 305, + "Series": "Beauty" + }, + { + "Date": "2022-10-26", + "Value": 326, + "Series": "Beauty" + }, + { + "Date": "2022-10-31", + "Value": 327, + "Series": "Beauty" + }, + { + "Date": "2022-11-06", + "Value": 343, + "Series": "Beauty" + }, + { + "Date": "2022-11-11", + "Value": 347, + "Series": "Beauty" + }, + { + "Date": "2022-11-17", + "Value": 334, + "Series": "Beauty" + }, + { + "Date": "2022-11-22", + "Value": 316, + "Series": "Beauty" + }, + { + "Date": "2022-11-28", + "Value": 293, + "Series": "Beauty" + }, + { + "Date": "2022-12-03", + "Value": 275, + "Series": "Beauty" + }, + { + "Date": "2022-12-09", + "Value": 248, + "Series": "Beauty" + }, + { + "Date": "2022-12-14", + "Value": 216, + "Series": "Beauty" + }, + { + "Date": "2022-12-20", + "Value": 186, + "Series": "Beauty" + }, + { + "Date": "2022-12-25", + "Value": 163, + "Series": "Beauty" + }, + { + "Date": "2020-01-01", + "Value": 74, + "Series": "Toys" + }, + { + "Date": "2020-01-06", + "Value": 74, + "Series": "Toys" + }, + { + "Date": "2020-01-11", + "Value": 70, + "Series": "Toys" + }, + { + "Date": "2020-01-17", + "Value": 64, + "Series": "Toys" + }, + { + "Date": "2020-01-22", + "Value": 64, + "Series": "Toys" + }, + { + "Date": "2020-01-28", + "Value": 62, + "Series": "Toys" + }, + { + "Date": "2020-02-02", + "Value": 70, + "Series": "Toys" + }, + { + "Date": "2020-02-08", + "Value": 86, + "Series": "Toys" + }, + { + "Date": "2020-02-13", + "Value": 87, + "Series": "Toys" + }, + { + "Date": "2020-02-19", + "Value": 81, + "Series": "Toys" + }, + { + "Date": "2020-02-24", + "Value": 76, + "Series": "Toys" + }, + { + "Date": "2020-03-01", + "Value": 70, + "Series": "Toys" + }, + { + "Date": "2020-03-06", + "Value": 73, + "Series": "Toys" + }, + { + "Date": "2020-03-12", + "Value": 79, + "Series": "Toys" + }, + { + "Date": "2020-03-17", + "Value": 75, + "Series": "Toys" + }, + { + "Date": "2020-03-23", + "Value": 72, + "Series": "Toys" + }, + { + "Date": "2020-03-28", + "Value": 60, + "Series": "Toys" + }, + { + "Date": "2020-04-03", + "Value": 57, + "Series": "Toys" + }, + { + "Date": "2020-04-08", + "Value": 64, + "Series": "Toys" + }, + { + "Date": "2020-04-14", + "Value": 63, + "Series": "Toys" + }, + { + "Date": "2020-04-19", + "Value": 68, + "Series": "Toys" + }, + { + "Date": "2020-04-24", + "Value": 71, + "Series": "Toys" + }, + { + "Date": "2020-04-30", + "Value": 73, + "Series": "Toys" + }, + { + "Date": "2020-05-05", + "Value": 72, + "Series": "Toys" + }, + { + "Date": "2020-05-11", + "Value": 75, + "Series": "Toys" + }, + { + "Date": "2020-05-16", + "Value": 87, + "Series": "Toys" + }, + { + "Date": "2020-05-22", + "Value": 89, + "Series": "Toys" + }, + { + "Date": "2020-05-27", + "Value": 83, + "Series": "Toys" + }, + { + "Date": "2020-06-02", + "Value": 77, + "Series": "Toys" + }, + { + "Date": "2020-06-07", + "Value": 70, + "Series": "Toys" + }, + { + "Date": "2020-06-13", + "Value": 62, + "Series": "Toys" + }, + { + "Date": "2020-06-18", + "Value": 62, + "Series": "Toys" + }, + { + "Date": "2020-06-24", + "Value": 68, + "Series": "Toys" + }, + { + "Date": "2020-06-29", + "Value": 64, + "Series": "Toys" + }, + { + "Date": "2020-07-05", + "Value": 60, + "Series": "Toys" + }, + { + "Date": "2020-07-10", + "Value": 61, + "Series": "Toys" + }, + { + "Date": "2020-07-16", + "Value": 72, + "Series": "Toys" + }, + { + "Date": "2020-07-21", + "Value": 74, + "Series": "Toys" + }, + { + "Date": "2020-07-27", + "Value": 83, + "Series": "Toys" + }, + { + "Date": "2020-08-01", + "Value": 80, + "Series": "Toys" + }, + { + "Date": "2020-08-07", + "Value": 76, + "Series": "Toys" + }, + { + "Date": "2020-08-12", + "Value": 79, + "Series": "Toys" + }, + { + "Date": "2020-08-17", + "Value": 77, + "Series": "Toys" + }, + { + "Date": "2020-08-23", + "Value": 80, + "Series": "Toys" + }, + { + "Date": "2020-08-28", + "Value": 88, + "Series": "Toys" + }, + { + "Date": "2020-09-03", + "Value": 96, + "Series": "Toys" + }, + { + "Date": "2020-09-08", + "Value": 98, + "Series": "Toys" + }, + { + "Date": "2020-09-14", + "Value": 95, + "Series": "Toys" + }, + { + "Date": "2020-09-19", + "Value": 97, + "Series": "Toys" + }, + { + "Date": "2020-09-25", + "Value": 107, + "Series": "Toys" + }, + { + "Date": "2020-09-30", + "Value": 114, + "Series": "Toys" + }, + { + "Date": "2020-10-06", + "Value": 122, + "Series": "Toys" + }, + { + "Date": "2020-10-11", + "Value": 126, + "Series": "Toys" + }, + { + "Date": "2020-10-17", + "Value": 131, + "Series": "Toys" + }, + { + "Date": "2020-10-22", + "Value": 133, + "Series": "Toys" + }, + { + "Date": "2020-10-28", + "Value": 137, + "Series": "Toys" + }, + { + "Date": "2020-11-02", + "Value": 138, + "Series": "Toys" + }, + { + "Date": "2020-11-08", + "Value": 134, + "Series": "Toys" + }, + { + "Date": "2020-11-13", + "Value": 128, + "Series": "Toys" + }, + { + "Date": "2020-11-19", + "Value": 131, + "Series": "Toys" + }, + { + "Date": "2020-11-24", + "Value": 141, + "Series": "Toys" + }, + { + "Date": "2020-11-29", + "Value": 155, + "Series": "Toys" + }, + { + "Date": "2020-12-05", + "Value": 169, + "Series": "Toys" + }, + { + "Date": "2020-12-10", + "Value": 181, + "Series": "Toys" + }, + { + "Date": "2020-12-16", + "Value": 183, + "Series": "Toys" + }, + { + "Date": "2020-12-21", + "Value": 179, + "Series": "Toys" + }, + { + "Date": "2020-12-27", + "Value": 184, + "Series": "Toys" + }, + { + "Date": "2021-01-01", + "Value": 184, + "Series": "Toys" + }, + { + "Date": "2021-01-07", + "Value": 194, + "Series": "Toys" + }, + { + "Date": "2021-01-12", + "Value": 208, + "Series": "Toys" + }, + { + "Date": "2021-01-18", + "Value": 227, + "Series": "Toys" + }, + { + "Date": "2021-01-23", + "Value": 244, + "Series": "Toys" + }, + { + "Date": "2021-01-29", + "Value": 254, + "Series": "Toys" + }, + { + "Date": "2021-02-03", + "Value": 262, + "Series": "Toys" + }, + { + "Date": "2021-02-09", + "Value": 276, + "Series": "Toys" + }, + { + "Date": "2021-02-14", + "Value": 291, + "Series": "Toys" + }, + { + "Date": "2021-02-20", + "Value": 292, + "Series": "Toys" + }, + { + "Date": "2021-02-25", + "Value": 299, + "Series": "Toys" + }, + { + "Date": "2021-03-03", + "Value": 299, + "Series": "Toys" + }, + { + "Date": "2021-03-08", + "Value": 292, + "Series": "Toys" + }, + { + "Date": "2021-03-14", + "Value": 285, + "Series": "Toys" + }, + { + "Date": "2021-03-19", + "Value": 271, + "Series": "Toys" + }, + { + "Date": "2021-03-24", + "Value": 253, + "Series": "Toys" + }, + { + "Date": "2021-03-30", + "Value": 248, + "Series": "Toys" + }, + { + "Date": "2021-04-04", + "Value": 239, + "Series": "Toys" + }, + { + "Date": "2021-04-10", + "Value": 240, + "Series": "Toys" + }, + { + "Date": "2021-04-15", + "Value": 239, + "Series": "Toys" + }, + { + "Date": "2021-04-21", + "Value": 229, + "Series": "Toys" + }, + { + "Date": "2021-04-26", + "Value": 232, + "Series": "Toys" + }, + { + "Date": "2021-05-02", + "Value": 228, + "Series": "Toys" + }, + { + "Date": "2021-05-07", + "Value": 221, + "Series": "Toys" + }, + { + "Date": "2021-05-13", + "Value": 213, + "Series": "Toys" + }, + { + "Date": "2021-05-18", + "Value": 199, + "Series": "Toys" + }, + { + "Date": "2021-05-24", + "Value": 181, + "Series": "Toys" + }, + { + "Date": "2021-05-29", + "Value": 172, + "Series": "Toys" + }, + { + "Date": "2021-06-04", + "Value": 162, + "Series": "Toys" + }, + { + "Date": "2021-06-09", + "Value": 153, + "Series": "Toys" + }, + { + "Date": "2021-06-15", + "Value": 148, + "Series": "Toys" + }, + { + "Date": "2021-06-20", + "Value": 147, + "Series": "Toys" + }, + { + "Date": "2021-06-26", + "Value": 140, + "Series": "Toys" + }, + { + "Date": "2021-07-01", + "Value": 137, + "Series": "Toys" + }, + { + "Date": "2021-07-06", + "Value": 125, + "Series": "Toys" + }, + { + "Date": "2021-07-12", + "Value": 107, + "Series": "Toys" + }, + { + "Date": "2021-07-17", + "Value": 99, + "Series": "Toys" + }, + { + "Date": "2021-07-23", + "Value": 90, + "Series": "Toys" + }, + { + "Date": "2021-07-28", + "Value": 83, + "Series": "Toys" + }, + { + "Date": "2021-08-03", + "Value": 72, + "Series": "Toys" + }, + { + "Date": "2021-08-08", + "Value": 62, + "Series": "Toys" + }, + { + "Date": "2021-08-14", + "Value": 65, + "Series": "Toys" + }, + { + "Date": "2021-08-19", + "Value": 63, + "Series": "Toys" + }, + { + "Date": "2021-08-25", + "Value": 59, + "Series": "Toys" + }, + { + "Date": "2021-08-30", + "Value": 52, + "Series": "Toys" + }, + { + "Date": "2021-09-05", + "Value": 40, + "Series": "Toys" + }, + { + "Date": "2021-09-10", + "Value": 29, + "Series": "Toys" + }, + { + "Date": "2021-09-16", + "Value": 19, + "Series": "Toys" + }, + { + "Date": "2021-09-21", + "Value": 14, + "Series": "Toys" + }, + { + "Date": "2021-09-27", + "Value": 11, + "Series": "Toys" + }, + { + "Date": "2021-10-02", + "Value": 0, + "Series": "Toys" + }, + { + "Date": "2021-10-08", + "Value": 0, + "Series": "Toys" + }, + { + "Date": "2021-10-13", + "Value": 0, + "Series": "Toys" + }, + { + "Date": "2021-10-19", + "Value": 0, + "Series": "Toys" + }, + { + "Date": "2021-10-24", + "Value": 0, + "Series": "Toys" + }, + { + "Date": "2021-10-29", + "Value": 5, + "Series": "Toys" + }, + { + "Date": "2021-11-04", + "Value": 5, + "Series": "Toys" + }, + { + "Date": "2021-11-09", + "Value": 14, + "Series": "Toys" + }, + { + "Date": "2021-11-15", + "Value": 20, + "Series": "Toys" + }, + { + "Date": "2021-11-20", + "Value": 34, + "Series": "Toys" + }, + { + "Date": "2021-11-26", + "Value": 38, + "Series": "Toys" + }, + { + "Date": "2021-12-01", + "Value": 47, + "Series": "Toys" + }, + { + "Date": "2021-12-07", + "Value": 51, + "Series": "Toys" + }, + { + "Date": "2021-12-12", + "Value": 59, + "Series": "Toys" + }, + { + "Date": "2021-12-18", + "Value": 65, + "Series": "Toys" + }, + { + "Date": "2021-12-23", + "Value": 77, + "Series": "Toys" + }, + { + "Date": "2021-12-29", + "Value": 80, + "Series": "Toys" + }, + { + "Date": "2022-01-03", + "Value": 87, + "Series": "Toys" + }, + { + "Date": "2022-01-09", + "Value": 87, + "Series": "Toys" + }, + { + "Date": "2022-01-14", + "Value": 97, + "Series": "Toys" + }, + { + "Date": "2022-01-20", + "Value": 96, + "Series": "Toys" + }, + { + "Date": "2022-01-25", + "Value": 97, + "Series": "Toys" + }, + { + "Date": "2022-01-31", + "Value": 102, + "Series": "Toys" + }, + { + "Date": "2022-02-05", + "Value": 95, + "Series": "Toys" + }, + { + "Date": "2022-02-10", + "Value": 94, + "Series": "Toys" + }, + { + "Date": "2022-02-16", + "Value": 87, + "Series": "Toys" + }, + { + "Date": "2022-02-21", + "Value": 86, + "Series": "Toys" + }, + { + "Date": "2022-02-27", + "Value": 93, + "Series": "Toys" + }, + { + "Date": "2022-03-04", + "Value": 105, + "Series": "Toys" + }, + { + "Date": "2022-03-10", + "Value": 114, + "Series": "Toys" + }, + { + "Date": "2022-03-15", + "Value": 128, + "Series": "Toys" + }, + { + "Date": "2022-03-21", + "Value": 141, + "Series": "Toys" + }, + { + "Date": "2022-03-26", + "Value": 155, + "Series": "Toys" + }, + { + "Date": "2022-04-01", + "Value": 172, + "Series": "Toys" + }, + { + "Date": "2022-04-06", + "Value": 179, + "Series": "Toys" + }, + { + "Date": "2022-04-12", + "Value": 182, + "Series": "Toys" + }, + { + "Date": "2022-04-17", + "Value": 183, + "Series": "Toys" + }, + { + "Date": "2022-04-23", + "Value": 178, + "Series": "Toys" + }, + { + "Date": "2022-04-28", + "Value": 174, + "Series": "Toys" + }, + { + "Date": "2022-05-04", + "Value": 179, + "Series": "Toys" + }, + { + "Date": "2022-05-09", + "Value": 174, + "Series": "Toys" + }, + { + "Date": "2022-05-15", + "Value": 179, + "Series": "Toys" + }, + { + "Date": "2022-05-20", + "Value": 187, + "Series": "Toys" + }, + { + "Date": "2022-05-26", + "Value": 196, + "Series": "Toys" + }, + { + "Date": "2022-05-31", + "Value": 206, + "Series": "Toys" + }, + { + "Date": "2022-06-05", + "Value": 217, + "Series": "Toys" + }, + { + "Date": "2022-06-11", + "Value": 234, + "Series": "Toys" + }, + { + "Date": "2022-06-16", + "Value": 238, + "Series": "Toys" + }, + { + "Date": "2022-06-22", + "Value": 245, + "Series": "Toys" + }, + { + "Date": "2022-06-27", + "Value": 245, + "Series": "Toys" + }, + { + "Date": "2022-07-03", + "Value": 254, + "Series": "Toys" + }, + { + "Date": "2022-07-08", + "Value": 267, + "Series": "Toys" + }, + { + "Date": "2022-07-14", + "Value": 267, + "Series": "Toys" + }, + { + "Date": "2022-07-19", + "Value": 275, + "Series": "Toys" + }, + { + "Date": "2022-07-25", + "Value": 272, + "Series": "Toys" + }, + { + "Date": "2022-07-30", + "Value": 270, + "Series": "Toys" + }, + { + "Date": "2022-08-05", + "Value": 267, + "Series": "Toys" + }, + { + "Date": "2022-08-10", + "Value": 270, + "Series": "Toys" + }, + { + "Date": "2022-08-16", + "Value": 266, + "Series": "Toys" + }, + { + "Date": "2022-08-21", + "Value": 257, + "Series": "Toys" + }, + { + "Date": "2022-08-27", + "Value": 244, + "Series": "Toys" + }, + { + "Date": "2022-09-01", + "Value": 228, + "Series": "Toys" + }, + { + "Date": "2022-09-07", + "Value": 222, + "Series": "Toys" + }, + { + "Date": "2022-09-12", + "Value": 210, + "Series": "Toys" + }, + { + "Date": "2022-09-17", + "Value": 193, + "Series": "Toys" + }, + { + "Date": "2022-09-23", + "Value": 188, + "Series": "Toys" + }, + { + "Date": "2022-09-28", + "Value": 180, + "Series": "Toys" + }, + { + "Date": "2022-10-04", + "Value": 178, + "Series": "Toys" + }, + { + "Date": "2022-10-09", + "Value": 183, + "Series": "Toys" + }, + { + "Date": "2022-10-15", + "Value": 188, + "Series": "Toys" + }, + { + "Date": "2022-10-20", + "Value": 182, + "Series": "Toys" + }, + { + "Date": "2022-10-26", + "Value": 186, + "Series": "Toys" + }, + { + "Date": "2022-10-31", + "Value": 185, + "Series": "Toys" + }, + { + "Date": "2022-11-06", + "Value": 179, + "Series": "Toys" + }, + { + "Date": "2022-11-11", + "Value": 166, + "Series": "Toys" + }, + { + "Date": "2022-11-17", + "Value": 158, + "Series": "Toys" + }, + { + "Date": "2022-11-22", + "Value": 161, + "Series": "Toys" + }, + { + "Date": "2022-11-28", + "Value": 169, + "Series": "Toys" + }, + { + "Date": "2022-12-03", + "Value": 174, + "Series": "Toys" + }, + { + "Date": "2022-12-09", + "Value": 168, + "Series": "Toys" + }, + { + "Date": "2022-12-14", + "Value": 174, + "Series": "Toys" + }, + { + "Date": "2022-12-20", + "Value": 182, + "Series": "Toys" + }, + { + "Date": "2022-12-25", + "Value": 190, + "Series": "Toys" + }, + { + "Date": "2020-01-01", + "Value": 206, + "Series": "Music" + }, + { + "Date": "2020-01-06", + "Value": 197, + "Series": "Music" + }, + { + "Date": "2020-01-11", + "Value": 196, + "Series": "Music" + }, + { + "Date": "2020-01-17", + "Value": 199, + "Series": "Music" + }, + { + "Date": "2020-01-22", + "Value": 208, + "Series": "Music" + }, + { + "Date": "2020-01-28", + "Value": 217, + "Series": "Music" + }, + { + "Date": "2020-02-02", + "Value": 228, + "Series": "Music" + }, + { + "Date": "2020-02-08", + "Value": 245, + "Series": "Music" + }, + { + "Date": "2020-02-13", + "Value": 253, + "Series": "Music" + }, + { + "Date": "2020-02-19", + "Value": 252, + "Series": "Music" + }, + { + "Date": "2020-02-24", + "Value": 255, + "Series": "Music" + }, + { + "Date": "2020-03-01", + "Value": 263, + "Series": "Music" + }, + { + "Date": "2020-03-06", + "Value": 261, + "Series": "Music" + }, + { + "Date": "2020-03-12", + "Value": 253, + "Series": "Music" + }, + { + "Date": "2020-03-17", + "Value": 251, + "Series": "Music" + }, + { + "Date": "2020-03-23", + "Value": 245, + "Series": "Music" + }, + { + "Date": "2020-03-28", + "Value": 243, + "Series": "Music" + }, + { + "Date": "2020-04-03", + "Value": 245, + "Series": "Music" + }, + { + "Date": "2020-04-08", + "Value": 247, + "Series": "Music" + }, + { + "Date": "2020-04-14", + "Value": 243, + "Series": "Music" + }, + { + "Date": "2020-04-19", + "Value": 249, + "Series": "Music" + }, + { + "Date": "2020-04-24", + "Value": 259, + "Series": "Music" + }, + { + "Date": "2020-04-30", + "Value": 265, + "Series": "Music" + }, + { + "Date": "2020-05-05", + "Value": 276, + "Series": "Music" + }, + { + "Date": "2020-05-11", + "Value": 281, + "Series": "Music" + }, + { + "Date": "2020-05-16", + "Value": 292, + "Series": "Music" + }, + { + "Date": "2020-05-22", + "Value": 291, + "Series": "Music" + }, + { + "Date": "2020-05-27", + "Value": 287, + "Series": "Music" + }, + { + "Date": "2020-06-02", + "Value": 291, + "Series": "Music" + }, + { + "Date": "2020-06-07", + "Value": 289, + "Series": "Music" + }, + { + "Date": "2020-06-13", + "Value": 285, + "Series": "Music" + }, + { + "Date": "2020-06-18", + "Value": 280, + "Series": "Music" + }, + { + "Date": "2020-06-24", + "Value": 269, + "Series": "Music" + }, + { + "Date": "2020-06-29", + "Value": 252, + "Series": "Music" + }, + { + "Date": "2020-07-05", + "Value": 232, + "Series": "Music" + }, + { + "Date": "2020-07-10", + "Value": 213, + "Series": "Music" + }, + { + "Date": "2020-07-16", + "Value": 194, + "Series": "Music" + }, + { + "Date": "2020-07-21", + "Value": 175, + "Series": "Music" + }, + { + "Date": "2020-07-27", + "Value": 163, + "Series": "Music" + }, + { + "Date": "2020-08-01", + "Value": 149, + "Series": "Music" + }, + { + "Date": "2020-08-07", + "Value": 131, + "Series": "Music" + }, + { + "Date": "2020-08-12", + "Value": 122, + "Series": "Music" + }, + { + "Date": "2020-08-17", + "Value": 108, + "Series": "Music" + }, + { + "Date": "2020-08-23", + "Value": 99, + "Series": "Music" + }, + { + "Date": "2020-08-28", + "Value": 95, + "Series": "Music" + }, + { + "Date": "2020-09-03", + "Value": 93, + "Series": "Music" + }, + { + "Date": "2020-09-08", + "Value": 94, + "Series": "Music" + }, + { + "Date": "2020-09-14", + "Value": 97, + "Series": "Music" + }, + { + "Date": "2020-09-19", + "Value": 97, + "Series": "Music" + }, + { + "Date": "2020-09-25", + "Value": 105, + "Series": "Music" + }, + { + "Date": "2020-09-30", + "Value": 117, + "Series": "Music" + }, + { + "Date": "2020-10-06", + "Value": 121, + "Series": "Music" + }, + { + "Date": "2020-10-11", + "Value": 120, + "Series": "Music" + }, + { + "Date": "2020-10-17", + "Value": 125, + "Series": "Music" + }, + { + "Date": "2020-10-22", + "Value": 131, + "Series": "Music" + }, + { + "Date": "2020-10-28", + "Value": 127, + "Series": "Music" + }, + { + "Date": "2020-11-02", + "Value": 120, + "Series": "Music" + }, + { + "Date": "2020-11-08", + "Value": 109, + "Series": "Music" + }, + { + "Date": "2020-11-13", + "Value": 107, + "Series": "Music" + }, + { + "Date": "2020-11-19", + "Value": 108, + "Series": "Music" + }, + { + "Date": "2020-11-24", + "Value": 103, + "Series": "Music" + }, + { + "Date": "2020-11-29", + "Value": 94, + "Series": "Music" + }, + { + "Date": "2020-12-05", + "Value": 86, + "Series": "Music" + }, + { + "Date": "2020-12-10", + "Value": 75, + "Series": "Music" + }, + { + "Date": "2020-12-16", + "Value": 61, + "Series": "Music" + }, + { + "Date": "2020-12-21", + "Value": 49, + "Series": "Music" + }, + { + "Date": "2020-12-27", + "Value": 36, + "Series": "Music" + }, + { + "Date": "2021-01-01", + "Value": 29, + "Series": "Music" + }, + { + "Date": "2021-01-07", + "Value": 29, + "Series": "Music" + }, + { + "Date": "2021-01-12", + "Value": 37, + "Series": "Music" + }, + { + "Date": "2021-01-18", + "Value": 40, + "Series": "Music" + }, + { + "Date": "2021-01-23", + "Value": 42, + "Series": "Music" + }, + { + "Date": "2021-01-29", + "Value": 41, + "Series": "Music" + }, + { + "Date": "2021-02-03", + "Value": 44, + "Series": "Music" + }, + { + "Date": "2021-02-09", + "Value": 41, + "Series": "Music" + }, + { + "Date": "2021-02-14", + "Value": 46, + "Series": "Music" + }, + { + "Date": "2021-02-20", + "Value": 46, + "Series": "Music" + }, + { + "Date": "2021-02-25", + "Value": 50, + "Series": "Music" + }, + { + "Date": "2021-03-03", + "Value": 54, + "Series": "Music" + }, + { + "Date": "2021-03-08", + "Value": 59, + "Series": "Music" + }, + { + "Date": "2021-03-14", + "Value": 62, + "Series": "Music" + }, + { + "Date": "2021-03-19", + "Value": 57, + "Series": "Music" + }, + { + "Date": "2021-03-24", + "Value": 56, + "Series": "Music" + }, + { + "Date": "2021-03-30", + "Value": 57, + "Series": "Music" + }, + { + "Date": "2021-04-04", + "Value": 50, + "Series": "Music" + }, + { + "Date": "2021-04-10", + "Value": 48, + "Series": "Music" + }, + { + "Date": "2021-04-15", + "Value": 42, + "Series": "Music" + }, + { + "Date": "2021-04-21", + "Value": 39, + "Series": "Music" + }, + { + "Date": "2021-04-26", + "Value": 42, + "Series": "Music" + }, + { + "Date": "2021-05-02", + "Value": 47, + "Series": "Music" + }, + { + "Date": "2021-05-07", + "Value": 58, + "Series": "Music" + }, + { + "Date": "2021-05-13", + "Value": 63, + "Series": "Music" + }, + { + "Date": "2021-05-18", + "Value": 73, + "Series": "Music" + }, + { + "Date": "2021-05-24", + "Value": 84, + "Series": "Music" + }, + { + "Date": "2021-05-29", + "Value": 87, + "Series": "Music" + }, + { + "Date": "2021-06-04", + "Value": 96, + "Series": "Music" + }, + { + "Date": "2021-06-09", + "Value": 104, + "Series": "Music" + }, + { + "Date": "2021-06-15", + "Value": 104, + "Series": "Music" + }, + { + "Date": "2021-06-20", + "Value": 112, + "Series": "Music" + }, + { + "Date": "2021-06-26", + "Value": 109, + "Series": "Music" + }, + { + "Date": "2021-07-01", + "Value": 106, + "Series": "Music" + }, + { + "Date": "2021-07-06", + "Value": 107, + "Series": "Music" + }, + { + "Date": "2021-07-12", + "Value": 110, + "Series": "Music" + }, + { + "Date": "2021-07-17", + "Value": 115, + "Series": "Music" + }, + { + "Date": "2021-07-23", + "Value": 117, + "Series": "Music" + }, + { + "Date": "2021-07-28", + "Value": 127, + "Series": "Music" + }, + { + "Date": "2021-08-03", + "Value": 127, + "Series": "Music" + }, + { + "Date": "2021-08-08", + "Value": 130, + "Series": "Music" + }, + { + "Date": "2021-08-14", + "Value": 132, + "Series": "Music" + }, + { + "Date": "2021-08-19", + "Value": 136, + "Series": "Music" + }, + { + "Date": "2021-08-25", + "Value": 135, + "Series": "Music" + }, + { + "Date": "2021-08-30", + "Value": 136, + "Series": "Music" + }, + { + "Date": "2021-09-05", + "Value": 143, + "Series": "Music" + }, + { + "Date": "2021-09-10", + "Value": 145, + "Series": "Music" + }, + { + "Date": "2021-09-16", + "Value": 150, + "Series": "Music" + }, + { + "Date": "2021-09-21", + "Value": 155, + "Series": "Music" + }, + { + "Date": "2021-09-27", + "Value": 163, + "Series": "Music" + }, + { + "Date": "2021-10-02", + "Value": 165, + "Series": "Music" + }, + { + "Date": "2021-10-08", + "Value": 165, + "Series": "Music" + }, + { + "Date": "2021-10-13", + "Value": 163, + "Series": "Music" + }, + { + "Date": "2021-10-19", + "Value": 163, + "Series": "Music" + }, + { + "Date": "2021-10-24", + "Value": 167, + "Series": "Music" + }, + { + "Date": "2021-10-29", + "Value": 168, + "Series": "Music" + }, + { + "Date": "2021-11-04", + "Value": 170, + "Series": "Music" + }, + { + "Date": "2021-11-09", + "Value": 165, + "Series": "Music" + }, + { + "Date": "2021-11-15", + "Value": 170, + "Series": "Music" + }, + { + "Date": "2021-11-20", + "Value": 181, + "Series": "Music" + }, + { + "Date": "2021-11-26", + "Value": 188, + "Series": "Music" + }, + { + "Date": "2021-12-01", + "Value": 185, + "Series": "Music" + }, + { + "Date": "2021-12-07", + "Value": 189, + "Series": "Music" + }, + { + "Date": "2021-12-12", + "Value": 200, + "Series": "Music" + }, + { + "Date": "2021-12-18", + "Value": 215, + "Series": "Music" + }, + { + "Date": "2021-12-23", + "Value": 230, + "Series": "Music" + }, + { + "Date": "2021-12-29", + "Value": 238, + "Series": "Music" + }, + { + "Date": "2022-01-03", + "Value": 235, + "Series": "Music" + }, + { + "Date": "2022-01-09", + "Value": 225, + "Series": "Music" + }, + { + "Date": "2022-01-14", + "Value": 220, + "Series": "Music" + }, + { + "Date": "2022-01-20", + "Value": 210, + "Series": "Music" + }, + { + "Date": "2022-01-25", + "Value": 205, + "Series": "Music" + }, + { + "Date": "2022-01-31", + "Value": 199, + "Series": "Music" + }, + { + "Date": "2022-02-05", + "Value": 194, + "Series": "Music" + }, + { + "Date": "2022-02-10", + "Value": 181, + "Series": "Music" + }, + { + "Date": "2022-02-16", + "Value": 180, + "Series": "Music" + }, + { + "Date": "2022-02-21", + "Value": 175, + "Series": "Music" + }, + { + "Date": "2022-02-27", + "Value": 170, + "Series": "Music" + }, + { + "Date": "2022-03-04", + "Value": 174, + "Series": "Music" + }, + { + "Date": "2022-03-10", + "Value": 177, + "Series": "Music" + }, + { + "Date": "2022-03-15", + "Value": 183, + "Series": "Music" + }, + { + "Date": "2022-03-21", + "Value": 187, + "Series": "Music" + }, + { + "Date": "2022-03-26", + "Value": 196, + "Series": "Music" + }, + { + "Date": "2022-04-01", + "Value": 194, + "Series": "Music" + }, + { + "Date": "2022-04-06", + "Value": 195, + "Series": "Music" + }, + { + "Date": "2022-04-12", + "Value": 190, + "Series": "Music" + }, + { + "Date": "2022-04-17", + "Value": 194, + "Series": "Music" + }, + { + "Date": "2022-04-23", + "Value": 196, + "Series": "Music" + }, + { + "Date": "2022-04-28", + "Value": 189, + "Series": "Music" + }, + { + "Date": "2022-05-04", + "Value": 177, + "Series": "Music" + }, + { + "Date": "2022-05-09", + "Value": 174, + "Series": "Music" + }, + { + "Date": "2022-05-15", + "Value": 167, + "Series": "Music" + }, + { + "Date": "2022-05-20", + "Value": 168, + "Series": "Music" + }, + { + "Date": "2022-05-26", + "Value": 173, + "Series": "Music" + }, + { + "Date": "2022-05-31", + "Value": 171, + "Series": "Music" + }, + { + "Date": "2022-06-05", + "Value": 165, + "Series": "Music" + }, + { + "Date": "2022-06-11", + "Value": 153, + "Series": "Music" + }, + { + "Date": "2022-06-16", + "Value": 145, + "Series": "Music" + }, + { + "Date": "2022-06-22", + "Value": 133, + "Series": "Music" + }, + { + "Date": "2022-06-27", + "Value": 125, + "Series": "Music" + }, + { + "Date": "2022-07-03", + "Value": 111, + "Series": "Music" + }, + { + "Date": "2022-07-08", + "Value": 96, + "Series": "Music" + }, + { + "Date": "2022-07-14", + "Value": 87, + "Series": "Music" + }, + { + "Date": "2022-07-19", + "Value": 73, + "Series": "Music" + }, + { + "Date": "2022-07-25", + "Value": 60, + "Series": "Music" + }, + { + "Date": "2022-07-30", + "Value": 57, + "Series": "Music" + }, + { + "Date": "2022-08-05", + "Value": 48, + "Series": "Music" + }, + { + "Date": "2022-08-10", + "Value": 43, + "Series": "Music" + }, + { + "Date": "2022-08-16", + "Value": 36, + "Series": "Music" + }, + { + "Date": "2022-08-21", + "Value": 30, + "Series": "Music" + }, + { + "Date": "2022-08-27", + "Value": 23, + "Series": "Music" + }, + { + "Date": "2022-09-01", + "Value": 26, + "Series": "Music" + }, + { + "Date": "2022-09-07", + "Value": 27, + "Series": "Music" + }, + { + "Date": "2022-09-12", + "Value": 25, + "Series": "Music" + }, + { + "Date": "2022-09-17", + "Value": 26, + "Series": "Music" + }, + { + "Date": "2022-09-23", + "Value": 27, + "Series": "Music" + }, + { + "Date": "2022-09-28", + "Value": 22, + "Series": "Music" + }, + { + "Date": "2022-10-04", + "Value": 10, + "Series": "Music" + }, + { + "Date": "2022-10-09", + "Value": 10, + "Series": "Music" + }, + { + "Date": "2022-10-15", + "Value": 11, + "Series": "Music" + }, + { + "Date": "2022-10-20", + "Value": 4, + "Series": "Music" + }, + { + "Date": "2022-10-26", + "Value": 5, + "Series": "Music" + }, + { + "Date": "2022-10-31", + "Value": 8, + "Series": "Music" + }, + { + "Date": "2022-11-06", + "Value": 19, + "Series": "Music" + }, + { + "Date": "2022-11-11", + "Value": 34, + "Series": "Music" + }, + { + "Date": "2022-11-17", + "Value": 37, + "Series": "Music" + }, + { + "Date": "2022-11-22", + "Value": 40, + "Series": "Music" + }, + { + "Date": "2022-11-28", + "Value": 36, + "Series": "Music" + }, + { + "Date": "2022-12-03", + "Value": 41, + "Series": "Music" + }, + { + "Date": "2022-12-09", + "Value": 53, + "Series": "Music" + }, + { + "Date": "2022-12-14", + "Value": 56, + "Series": "Music" + }, + { + "Date": "2022-12-20", + "Value": 62, + "Series": "Music" + }, + { + "Date": "2022-12-25", + "Value": 57, + "Series": "Music" + }, + { + "Date": "2020-01-01", + "Value": 240, + "Series": "Movies" + }, + { + "Date": "2020-01-06", + "Value": 252, + "Series": "Movies" + }, + { + "Date": "2020-01-11", + "Value": 269, + "Series": "Movies" + }, + { + "Date": "2020-01-17", + "Value": 269, + "Series": "Movies" + }, + { + "Date": "2020-01-22", + "Value": 272, + "Series": "Movies" + }, + { + "Date": "2020-01-28", + "Value": 289, + "Series": "Movies" + }, + { + "Date": "2020-02-02", + "Value": 302, + "Series": "Movies" + }, + { + "Date": "2020-02-08", + "Value": 299, + "Series": "Movies" + }, + { + "Date": "2020-02-13", + "Value": 296, + "Series": "Movies" + }, + { + "Date": "2020-02-19", + "Value": 297, + "Series": "Movies" + }, + { + "Date": "2020-02-24", + "Value": 309, + "Series": "Movies" + }, + { + "Date": "2020-03-01", + "Value": 331, + "Series": "Movies" + }, + { + "Date": "2020-03-06", + "Value": 332, + "Series": "Movies" + }, + { + "Date": "2020-03-12", + "Value": 326, + "Series": "Movies" + }, + { + "Date": "2020-03-17", + "Value": 321, + "Series": "Movies" + }, + { + "Date": "2020-03-23", + "Value": 329, + "Series": "Movies" + }, + { + "Date": "2020-03-28", + "Value": 324, + "Series": "Movies" + }, + { + "Date": "2020-04-03", + "Value": 331, + "Series": "Movies" + }, + { + "Date": "2020-04-08", + "Value": 344, + "Series": "Movies" + }, + { + "Date": "2020-04-14", + "Value": 341, + "Series": "Movies" + }, + { + "Date": "2020-04-19", + "Value": 338, + "Series": "Movies" + }, + { + "Date": "2020-04-24", + "Value": 320, + "Series": "Movies" + }, + { + "Date": "2020-04-30", + "Value": 315, + "Series": "Movies" + }, + { + "Date": "2020-05-05", + "Value": 319, + "Series": "Movies" + }, + { + "Date": "2020-05-11", + "Value": 319, + "Series": "Movies" + }, + { + "Date": "2020-05-16", + "Value": 316, + "Series": "Movies" + }, + { + "Date": "2020-05-22", + "Value": 301, + "Series": "Movies" + }, + { + "Date": "2020-05-27", + "Value": 273, + "Series": "Movies" + }, + { + "Date": "2020-06-02", + "Value": 268, + "Series": "Movies" + }, + { + "Date": "2020-06-07", + "Value": 250, + "Series": "Movies" + }, + { + "Date": "2020-06-13", + "Value": 223, + "Series": "Movies" + }, + { + "Date": "2020-06-18", + "Value": 221, + "Series": "Movies" + }, + { + "Date": "2020-06-24", + "Value": 209, + "Series": "Movies" + }, + { + "Date": "2020-06-29", + "Value": 199, + "Series": "Movies" + }, + { + "Date": "2020-07-05", + "Value": 209, + "Series": "Movies" + }, + { + "Date": "2020-07-10", + "Value": 205, + "Series": "Movies" + }, + { + "Date": "2020-07-16", + "Value": 218, + "Series": "Movies" + }, + { + "Date": "2020-07-21", + "Value": 216, + "Series": "Movies" + }, + { + "Date": "2020-07-27", + "Value": 204, + "Series": "Movies" + }, + { + "Date": "2020-08-01", + "Value": 204, + "Series": "Movies" + }, + { + "Date": "2020-08-07", + "Value": 201, + "Series": "Movies" + }, + { + "Date": "2020-08-12", + "Value": 201, + "Series": "Movies" + }, + { + "Date": "2020-08-17", + "Value": 198, + "Series": "Movies" + }, + { + "Date": "2020-08-23", + "Value": 192, + "Series": "Movies" + }, + { + "Date": "2020-08-28", + "Value": 201, + "Series": "Movies" + }, + { + "Date": "2020-09-03", + "Value": 194, + "Series": "Movies" + }, + { + "Date": "2020-09-08", + "Value": 196, + "Series": "Movies" + }, + { + "Date": "2020-09-14", + "Value": 214, + "Series": "Movies" + }, + { + "Date": "2020-09-19", + "Value": 221, + "Series": "Movies" + }, + { + "Date": "2020-09-25", + "Value": 213, + "Series": "Movies" + }, + { + "Date": "2020-09-30", + "Value": 218, + "Series": "Movies" + }, + { + "Date": "2020-10-06", + "Value": 217, + "Series": "Movies" + }, + { + "Date": "2020-10-11", + "Value": 208, + "Series": "Movies" + }, + { + "Date": "2020-10-17", + "Value": 210, + "Series": "Movies" + }, + { + "Date": "2020-10-22", + "Value": 224, + "Series": "Movies" + }, + { + "Date": "2020-10-28", + "Value": 240, + "Series": "Movies" + }, + { + "Date": "2020-11-02", + "Value": 246, + "Series": "Movies" + }, + { + "Date": "2020-11-08", + "Value": 265, + "Series": "Movies" + }, + { + "Date": "2020-11-13", + "Value": 269, + "Series": "Movies" + }, + { + "Date": "2020-11-19", + "Value": 274, + "Series": "Movies" + }, + { + "Date": "2020-11-24", + "Value": 262, + "Series": "Movies" + }, + { + "Date": "2020-11-29", + "Value": 260, + "Series": "Movies" + }, + { + "Date": "2020-12-05", + "Value": 265, + "Series": "Movies" + }, + { + "Date": "2020-12-10", + "Value": 255, + "Series": "Movies" + }, + { + "Date": "2020-12-16", + "Value": 246, + "Series": "Movies" + }, + { + "Date": "2020-12-21", + "Value": 251, + "Series": "Movies" + }, + { + "Date": "2020-12-27", + "Value": 270, + "Series": "Movies" + }, + { + "Date": "2021-01-01", + "Value": 300, + "Series": "Movies" + }, + { + "Date": "2021-01-07", + "Value": 323, + "Series": "Movies" + }, + { + "Date": "2021-01-12", + "Value": 325, + "Series": "Movies" + }, + { + "Date": "2021-01-18", + "Value": 316, + "Series": "Movies" + }, + { + "Date": "2021-01-23", + "Value": 302, + "Series": "Movies" + }, + { + "Date": "2021-01-29", + "Value": 286, + "Series": "Movies" + }, + { + "Date": "2021-02-03", + "Value": 288, + "Series": "Movies" + }, + { + "Date": "2021-02-09", + "Value": 291, + "Series": "Movies" + }, + { + "Date": "2021-02-14", + "Value": 300, + "Series": "Movies" + }, + { + "Date": "2021-02-20", + "Value": 319, + "Series": "Movies" + }, + { + "Date": "2021-02-25", + "Value": 326, + "Series": "Movies" + }, + { + "Date": "2021-03-03", + "Value": 325, + "Series": "Movies" + }, + { + "Date": "2021-03-08", + "Value": 324, + "Series": "Movies" + }, + { + "Date": "2021-03-14", + "Value": 313, + "Series": "Movies" + }, + { + "Date": "2021-03-19", + "Value": 318, + "Series": "Movies" + }, + { + "Date": "2021-03-24", + "Value": 338, + "Series": "Movies" + }, + { + "Date": "2021-03-30", + "Value": 358, + "Series": "Movies" + }, + { + "Date": "2021-04-04", + "Value": 383, + "Series": "Movies" + }, + { + "Date": "2021-04-10", + "Value": 397, + "Series": "Movies" + }, + { + "Date": "2021-04-15", + "Value": 415, + "Series": "Movies" + }, + { + "Date": "2021-04-21", + "Value": 413, + "Series": "Movies" + }, + { + "Date": "2021-04-26", + "Value": 400, + "Series": "Movies" + }, + { + "Date": "2021-05-02", + "Value": 389, + "Series": "Movies" + }, + { + "Date": "2021-05-07", + "Value": 372, + "Series": "Movies" + }, + { + "Date": "2021-05-13", + "Value": 350, + "Series": "Movies" + }, + { + "Date": "2021-05-18", + "Value": 334, + "Series": "Movies" + }, + { + "Date": "2021-05-24", + "Value": 316, + "Series": "Movies" + }, + { + "Date": "2021-05-29", + "Value": 309, + "Series": "Movies" + }, + { + "Date": "2021-06-04", + "Value": 310, + "Series": "Movies" + }, + { + "Date": "2021-06-09", + "Value": 327, + "Series": "Movies" + }, + { + "Date": "2021-06-15", + "Value": 343, + "Series": "Movies" + }, + { + "Date": "2021-06-20", + "Value": 345, + "Series": "Movies" + }, + { + "Date": "2021-06-26", + "Value": 354, + "Series": "Movies" + }, + { + "Date": "2021-07-01", + "Value": 366, + "Series": "Movies" + }, + { + "Date": "2021-07-06", + "Value": 365, + "Series": "Movies" + }, + { + "Date": "2021-07-12", + "Value": 376, + "Series": "Movies" + }, + { + "Date": "2021-07-17", + "Value": 394, + "Series": "Movies" + }, + { + "Date": "2021-07-23", + "Value": 414, + "Series": "Movies" + }, + { + "Date": "2021-07-28", + "Value": 411, + "Series": "Movies" + }, + { + "Date": "2021-08-03", + "Value": 394, + "Series": "Movies" + }, + { + "Date": "2021-08-08", + "Value": 369, + "Series": "Movies" + }, + { + "Date": "2021-08-14", + "Value": 352, + "Series": "Movies" + }, + { + "Date": "2021-08-19", + "Value": 348, + "Series": "Movies" + }, + { + "Date": "2021-08-25", + "Value": 343, + "Series": "Movies" + }, + { + "Date": "2021-08-30", + "Value": 342, + "Series": "Movies" + }, + { + "Date": "2021-09-05", + "Value": 333, + "Series": "Movies" + }, + { + "Date": "2021-09-10", + "Value": 321, + "Series": "Movies" + }, + { + "Date": "2021-09-16", + "Value": 322, + "Series": "Movies" + }, + { + "Date": "2021-09-21", + "Value": 310, + "Series": "Movies" + }, + { + "Date": "2021-09-27", + "Value": 287, + "Series": "Movies" + }, + { + "Date": "2021-10-02", + "Value": 283, + "Series": "Movies" + }, + { + "Date": "2021-10-08", + "Value": 297, + "Series": "Movies" + }, + { + "Date": "2021-10-13", + "Value": 295, + "Series": "Movies" + }, + { + "Date": "2021-10-19", + "Value": 288, + "Series": "Movies" + }, + { + "Date": "2021-10-24", + "Value": 284, + "Series": "Movies" + }, + { + "Date": "2021-10-29", + "Value": 295, + "Series": "Movies" + }, + { + "Date": "2021-11-04", + "Value": 312, + "Series": "Movies" + }, + { + "Date": "2021-11-09", + "Value": 316, + "Series": "Movies" + }, + { + "Date": "2021-11-15", + "Value": 313, + "Series": "Movies" + }, + { + "Date": "2021-11-20", + "Value": 320, + "Series": "Movies" + }, + { + "Date": "2021-11-26", + "Value": 340, + "Series": "Movies" + }, + { + "Date": "2021-12-01", + "Value": 355, + "Series": "Movies" + }, + { + "Date": "2021-12-07", + "Value": 359, + "Series": "Movies" + }, + { + "Date": "2021-12-12", + "Value": 356, + "Series": "Movies" + }, + { + "Date": "2021-12-18", + "Value": 371, + "Series": "Movies" + }, + { + "Date": "2021-12-23", + "Value": 397, + "Series": "Movies" + }, + { + "Date": "2021-12-29", + "Value": 410, + "Series": "Movies" + }, + { + "Date": "2022-01-03", + "Value": 417, + "Series": "Movies" + }, + { + "Date": "2022-01-09", + "Value": 415, + "Series": "Movies" + }, + { + "Date": "2022-01-14", + "Value": 419, + "Series": "Movies" + }, + { + "Date": "2022-01-20", + "Value": 432, + "Series": "Movies" + }, + { + "Date": "2022-01-25", + "Value": 431, + "Series": "Movies" + }, + { + "Date": "2022-01-31", + "Value": 445, + "Series": "Movies" + }, + { + "Date": "2022-02-05", + "Value": 447, + "Series": "Movies" + }, + { + "Date": "2022-02-10", + "Value": 433, + "Series": "Movies" + }, + { + "Date": "2022-02-16", + "Value": 413, + "Series": "Movies" + }, + { + "Date": "2022-02-21", + "Value": 393, + "Series": "Movies" + }, + { + "Date": "2022-02-27", + "Value": 384, + "Series": "Movies" + }, + { + "Date": "2022-03-04", + "Value": 370, + "Series": "Movies" + }, + { + "Date": "2022-03-10", + "Value": 370, + "Series": "Movies" + }, + { + "Date": "2022-03-15", + "Value": 367, + "Series": "Movies" + }, + { + "Date": "2022-03-21", + "Value": 366, + "Series": "Movies" + }, + { + "Date": "2022-03-26", + "Value": 362, + "Series": "Movies" + }, + { + "Date": "2022-04-01", + "Value": 345, + "Series": "Movies" + }, + { + "Date": "2022-04-06", + "Value": 316, + "Series": "Movies" + }, + { + "Date": "2022-04-12", + "Value": 310, + "Series": "Movies" + }, + { + "Date": "2022-04-17", + "Value": 297, + "Series": "Movies" + }, + { + "Date": "2022-04-23", + "Value": 278, + "Series": "Movies" + }, + { + "Date": "2022-04-28", + "Value": 256, + "Series": "Movies" + }, + { + "Date": "2022-05-04", + "Value": 236, + "Series": "Movies" + }, + { + "Date": "2022-05-09", + "Value": 239, + "Series": "Movies" + }, + { + "Date": "2022-05-15", + "Value": 225, + "Series": "Movies" + }, + { + "Date": "2022-05-20", + "Value": 199, + "Series": "Movies" + }, + { + "Date": "2022-05-26", + "Value": 186, + "Series": "Movies" + }, + { + "Date": "2022-05-31", + "Value": 162, + "Series": "Movies" + }, + { + "Date": "2022-06-05", + "Value": 139, + "Series": "Movies" + }, + { + "Date": "2022-06-11", + "Value": 130, + "Series": "Movies" + }, + { + "Date": "2022-06-16", + "Value": 114, + "Series": "Movies" + }, + { + "Date": "2022-06-22", + "Value": 107, + "Series": "Movies" + }, + { + "Date": "2022-06-27", + "Value": 117, + "Series": "Movies" + }, + { + "Date": "2022-07-03", + "Value": 109, + "Series": "Movies" + }, + { + "Date": "2022-07-08", + "Value": 120, + "Series": "Movies" + }, + { + "Date": "2022-07-14", + "Value": 136, + "Series": "Movies" + }, + { + "Date": "2022-07-19", + "Value": 142, + "Series": "Movies" + }, + { + "Date": "2022-07-25", + "Value": 142, + "Series": "Movies" + }, + { + "Date": "2022-07-30", + "Value": 129, + "Series": "Movies" + }, + { + "Date": "2022-08-05", + "Value": 130, + "Series": "Movies" + }, + { + "Date": "2022-08-10", + "Value": 119, + "Series": "Movies" + }, + { + "Date": "2022-08-16", + "Value": 115, + "Series": "Movies" + }, + { + "Date": "2022-08-21", + "Value": 120, + "Series": "Movies" + }, + { + "Date": "2022-08-27", + "Value": 108, + "Series": "Movies" + }, + { + "Date": "2022-09-01", + "Value": 100, + "Series": "Movies" + }, + { + "Date": "2022-09-07", + "Value": 82, + "Series": "Movies" + }, + { + "Date": "2022-09-12", + "Value": 78, + "Series": "Movies" + }, + { + "Date": "2022-09-17", + "Value": 72, + "Series": "Movies" + }, + { + "Date": "2022-09-23", + "Value": 77, + "Series": "Movies" + }, + { + "Date": "2022-09-28", + "Value": 78, + "Series": "Movies" + }, + { + "Date": "2022-10-04", + "Value": 83, + "Series": "Movies" + }, + { + "Date": "2022-10-09", + "Value": 71, + "Series": "Movies" + }, + { + "Date": "2022-10-15", + "Value": 60, + "Series": "Movies" + }, + { + "Date": "2022-10-20", + "Value": 36, + "Series": "Movies" + }, + { + "Date": "2022-10-26", + "Value": 7, + "Series": "Movies" + }, + { + "Date": "2022-10-31", + "Value": 0, + "Series": "Movies" + }, + { + "Date": "2022-11-06", + "Value": 0, + "Series": "Movies" + }, + { + "Date": "2022-11-11", + "Value": 10, + "Series": "Movies" + }, + { + "Date": "2022-11-17", + "Value": 24, + "Series": "Movies" + }, + { + "Date": "2022-11-22", + "Value": 34, + "Series": "Movies" + }, + { + "Date": "2022-11-28", + "Value": 45, + "Series": "Movies" + }, + { + "Date": "2022-12-03", + "Value": 53, + "Series": "Movies" + }, + { + "Date": "2022-12-09", + "Value": 64, + "Series": "Movies" + }, + { + "Date": "2022-12-14", + "Value": 86, + "Series": "Movies" + }, + { + "Date": "2022-12-20", + "Value": 102, + "Series": "Movies" + }, + { + "Date": "2022-12-25", + "Value": 102, + "Series": "Movies" + }, + { + "Date": "2020-01-01", + "Value": 229, + "Series": "Software" + }, + { + "Date": "2020-01-06", + "Value": 231, + "Series": "Software" + }, + { + "Date": "2020-01-11", + "Value": 227, + "Series": "Software" + }, + { + "Date": "2020-01-17", + "Value": 224, + "Series": "Software" + }, + { + "Date": "2020-01-22", + "Value": 225, + "Series": "Software" + }, + { + "Date": "2020-01-28", + "Value": 234, + "Series": "Software" + }, + { + "Date": "2020-02-02", + "Value": 247, + "Series": "Software" + }, + { + "Date": "2020-02-08", + "Value": 253, + "Series": "Software" + }, + { + "Date": "2020-02-13", + "Value": 267, + "Series": "Software" + }, + { + "Date": "2020-02-19", + "Value": 281, + "Series": "Software" + }, + { + "Date": "2020-02-24", + "Value": 294, + "Series": "Software" + }, + { + "Date": "2020-03-01", + "Value": 299, + "Series": "Software" + }, + { + "Date": "2020-03-06", + "Value": 313, + "Series": "Software" + }, + { + "Date": "2020-03-12", + "Value": 318, + "Series": "Software" + }, + { + "Date": "2020-03-17", + "Value": 315, + "Series": "Software" + }, + { + "Date": "2020-03-23", + "Value": 313, + "Series": "Software" + }, + { + "Date": "2020-03-28", + "Value": 318, + "Series": "Software" + }, + { + "Date": "2020-04-03", + "Value": 311, + "Series": "Software" + }, + { + "Date": "2020-04-08", + "Value": 295, + "Series": "Software" + }, + { + "Date": "2020-04-14", + "Value": 280, + "Series": "Software" + }, + { + "Date": "2020-04-19", + "Value": 277, + "Series": "Software" + }, + { + "Date": "2020-04-24", + "Value": 270, + "Series": "Software" + }, + { + "Date": "2020-04-30", + "Value": 267, + "Series": "Software" + }, + { + "Date": "2020-05-05", + "Value": 263, + "Series": "Software" + }, + { + "Date": "2020-05-11", + "Value": 267, + "Series": "Software" + }, + { + "Date": "2020-05-16", + "Value": 268, + "Series": "Software" + }, + { + "Date": "2020-05-22", + "Value": 259, + "Series": "Software" + }, + { + "Date": "2020-05-27", + "Value": 254, + "Series": "Software" + }, + { + "Date": "2020-06-02", + "Value": 248, + "Series": "Software" + }, + { + "Date": "2020-06-07", + "Value": 237, + "Series": "Software" + }, + { + "Date": "2020-06-13", + "Value": 224, + "Series": "Software" + }, + { + "Date": "2020-06-18", + "Value": 224, + "Series": "Software" + }, + { + "Date": "2020-06-24", + "Value": 219, + "Series": "Software" + }, + { + "Date": "2020-06-29", + "Value": 208, + "Series": "Software" + }, + { + "Date": "2020-07-05", + "Value": 194, + "Series": "Software" + }, + { + "Date": "2020-07-10", + "Value": 189, + "Series": "Software" + }, + { + "Date": "2020-07-16", + "Value": 196, + "Series": "Software" + }, + { + "Date": "2020-07-21", + "Value": 209, + "Series": "Software" + }, + { + "Date": "2020-07-27", + "Value": 222, + "Series": "Software" + }, + { + "Date": "2020-08-01", + "Value": 233, + "Series": "Software" + }, + { + "Date": "2020-08-07", + "Value": 249, + "Series": "Software" + }, + { + "Date": "2020-08-12", + "Value": 265, + "Series": "Software" + }, + { + "Date": "2020-08-17", + "Value": 278, + "Series": "Software" + }, + { + "Date": "2020-08-23", + "Value": 297, + "Series": "Software" + }, + { + "Date": "2020-08-28", + "Value": 314, + "Series": "Software" + }, + { + "Date": "2020-09-03", + "Value": 324, + "Series": "Software" + }, + { + "Date": "2020-09-08", + "Value": 341, + "Series": "Software" + }, + { + "Date": "2020-09-14", + "Value": 347, + "Series": "Software" + }, + { + "Date": "2020-09-19", + "Value": 355, + "Series": "Software" + }, + { + "Date": "2020-09-25", + "Value": 356, + "Series": "Software" + }, + { + "Date": "2020-09-30", + "Value": 361, + "Series": "Software" + }, + { + "Date": "2020-10-06", + "Value": 375, + "Series": "Software" + }, + { + "Date": "2020-10-11", + "Value": 392, + "Series": "Software" + }, + { + "Date": "2020-10-17", + "Value": 409, + "Series": "Software" + }, + { + "Date": "2020-10-22", + "Value": 428, + "Series": "Software" + }, + { + "Date": "2020-10-28", + "Value": 449, + "Series": "Software" + }, + { + "Date": "2020-11-02", + "Value": 466, + "Series": "Software" + }, + { + "Date": "2020-11-08", + "Value": 470, + "Series": "Software" + }, + { + "Date": "2020-11-13", + "Value": 473, + "Series": "Software" + }, + { + "Date": "2020-11-19", + "Value": 470, + "Series": "Software" + }, + { + "Date": "2020-11-24", + "Value": 477, + "Series": "Software" + }, + { + "Date": "2020-11-29", + "Value": 478, + "Series": "Software" + }, + { + "Date": "2020-12-05", + "Value": 468, + "Series": "Software" + }, + { + "Date": "2020-12-10", + "Value": 454, + "Series": "Software" + }, + { + "Date": "2020-12-16", + "Value": 438, + "Series": "Software" + }, + { + "Date": "2020-12-21", + "Value": 418, + "Series": "Software" + }, + { + "Date": "2020-12-27", + "Value": 404, + "Series": "Software" + }, + { + "Date": "2021-01-01", + "Value": 398, + "Series": "Software" + }, + { + "Date": "2021-01-07", + "Value": 384, + "Series": "Software" + }, + { + "Date": "2021-01-12", + "Value": 365, + "Series": "Software" + }, + { + "Date": "2021-01-18", + "Value": 355, + "Series": "Software" + }, + { + "Date": "2021-01-23", + "Value": 345, + "Series": "Software" + }, + { + "Date": "2021-01-29", + "Value": 329, + "Series": "Software" + }, + { + "Date": "2021-02-03", + "Value": 311, + "Series": "Software" + }, + { + "Date": "2021-02-09", + "Value": 303, + "Series": "Software" + }, + { + "Date": "2021-02-14", + "Value": 301, + "Series": "Software" + }, + { + "Date": "2021-02-20", + "Value": 292, + "Series": "Software" + }, + { + "Date": "2021-02-25", + "Value": 292, + "Series": "Software" + }, + { + "Date": "2021-03-03", + "Value": 288, + "Series": "Software" + }, + { + "Date": "2021-03-08", + "Value": 295, + "Series": "Software" + }, + { + "Date": "2021-03-14", + "Value": 302, + "Series": "Software" + }, + { + "Date": "2021-03-19", + "Value": 306, + "Series": "Software" + }, + { + "Date": "2021-03-24", + "Value": 317, + "Series": "Software" + }, + { + "Date": "2021-03-30", + "Value": 325, + "Series": "Software" + }, + { + "Date": "2021-04-04", + "Value": 320, + "Series": "Software" + }, + { + "Date": "2021-04-10", + "Value": 317, + "Series": "Software" + }, + { + "Date": "2021-04-15", + "Value": 316, + "Series": "Software" + }, + { + "Date": "2021-04-21", + "Value": 318, + "Series": "Software" + }, + { + "Date": "2021-04-26", + "Value": 318, + "Series": "Software" + }, + { + "Date": "2021-05-02", + "Value": 313, + "Series": "Software" + }, + { + "Date": "2021-05-07", + "Value": 299, + "Series": "Software" + }, + { + "Date": "2021-05-13", + "Value": 287, + "Series": "Software" + }, + { + "Date": "2021-05-18", + "Value": 284, + "Series": "Software" + }, + { + "Date": "2021-05-24", + "Value": 286, + "Series": "Software" + }, + { + "Date": "2021-05-29", + "Value": 293, + "Series": "Software" + }, + { + "Date": "2021-06-04", + "Value": 295, + "Series": "Software" + }, + { + "Date": "2021-06-09", + "Value": 292, + "Series": "Software" + }, + { + "Date": "2021-06-15", + "Value": 300, + "Series": "Software" + }, + { + "Date": "2021-06-20", + "Value": 309, + "Series": "Software" + }, + { + "Date": "2021-06-26", + "Value": 321, + "Series": "Software" + }, + { + "Date": "2021-07-01", + "Value": 337, + "Series": "Software" + }, + { + "Date": "2021-07-06", + "Value": 344, + "Series": "Software" + }, + { + "Date": "2021-07-12", + "Value": 358, + "Series": "Software" + }, + { + "Date": "2021-07-17", + "Value": 363, + "Series": "Software" + }, + { + "Date": "2021-07-23", + "Value": 361, + "Series": "Software" + }, + { + "Date": "2021-07-28", + "Value": 366, + "Series": "Software" + }, + { + "Date": "2021-08-03", + "Value": 379, + "Series": "Software" + }, + { + "Date": "2021-08-08", + "Value": 397, + "Series": "Software" + }, + { + "Date": "2021-08-14", + "Value": 409, + "Series": "Software" + }, + { + "Date": "2021-08-19", + "Value": 427, + "Series": "Software" + }, + { + "Date": "2021-08-25", + "Value": 446, + "Series": "Software" + }, + { + "Date": "2021-08-30", + "Value": 467, + "Series": "Software" + }, + { + "Date": "2021-09-05", + "Value": 486, + "Series": "Software" + }, + { + "Date": "2021-09-10", + "Value": 493, + "Series": "Software" + }, + { + "Date": "2021-09-16", + "Value": 498, + "Series": "Software" + }, + { + "Date": "2021-09-21", + "Value": 496, + "Series": "Software" + }, + { + "Date": "2021-09-27", + "Value": 488, + "Series": "Software" + }, + { + "Date": "2021-10-02", + "Value": 486, + "Series": "Software" + }, + { + "Date": "2021-10-08", + "Value": 487, + "Series": "Software" + }, + { + "Date": "2021-10-13", + "Value": 480, + "Series": "Software" + }, + { + "Date": "2021-10-19", + "Value": 472, + "Series": "Software" + }, + { + "Date": "2021-10-24", + "Value": 457, + "Series": "Software" + }, + { + "Date": "2021-10-29", + "Value": 448, + "Series": "Software" + }, + { + "Date": "2021-11-04", + "Value": 448, + "Series": "Software" + }, + { + "Date": "2021-11-09", + "Value": 443, + "Series": "Software" + }, + { + "Date": "2021-11-15", + "Value": 449, + "Series": "Software" + }, + { + "Date": "2021-11-20", + "Value": 455, + "Series": "Software" + }, + { + "Date": "2021-11-26", + "Value": 459, + "Series": "Software" + }, + { + "Date": "2021-12-01", + "Value": 463, + "Series": "Software" + }, + { + "Date": "2021-12-07", + "Value": 469, + "Series": "Software" + }, + { + "Date": "2021-12-12", + "Value": 481, + "Series": "Software" + }, + { + "Date": "2021-12-18", + "Value": 479, + "Series": "Software" + }, + { + "Date": "2021-12-23", + "Value": 486, + "Series": "Software" + }, + { + "Date": "2021-12-29", + "Value": 480, + "Series": "Software" + }, + { + "Date": "2022-01-03", + "Value": 484, + "Series": "Software" + }, + { + "Date": "2022-01-09", + "Value": 489, + "Series": "Software" + }, + { + "Date": "2022-01-14", + "Value": 499, + "Series": "Software" + }, + { + "Date": "2022-01-20", + "Value": 511, + "Series": "Software" + }, + { + "Date": "2022-01-25", + "Value": 526, + "Series": "Software" + }, + { + "Date": "2022-01-31", + "Value": 547, + "Series": "Software" + }, + { + "Date": "2022-02-05", + "Value": 560, + "Series": "Software" + }, + { + "Date": "2022-02-10", + "Value": 575, + "Series": "Software" + }, + { + "Date": "2022-02-16", + "Value": 579, + "Series": "Software" + }, + { + "Date": "2022-02-21", + "Value": 574, + "Series": "Software" + }, + { + "Date": "2022-02-27", + "Value": 562, + "Series": "Software" + }, + { + "Date": "2022-03-04", + "Value": 556, + "Series": "Software" + }, + { + "Date": "2022-03-10", + "Value": 551, + "Series": "Software" + }, + { + "Date": "2022-03-15", + "Value": 548, + "Series": "Software" + }, + { + "Date": "2022-03-21", + "Value": 552, + "Series": "Software" + }, + { + "Date": "2022-03-26", + "Value": 562, + "Series": "Software" + }, + { + "Date": "2022-04-01", + "Value": 565, + "Series": "Software" + }, + { + "Date": "2022-04-06", + "Value": 557, + "Series": "Software" + }, + { + "Date": "2022-04-12", + "Value": 562, + "Series": "Software" + }, + { + "Date": "2022-04-17", + "Value": 560, + "Series": "Software" + }, + { + "Date": "2022-04-23", + "Value": 552, + "Series": "Software" + }, + { + "Date": "2022-04-28", + "Value": 553, + "Series": "Software" + }, + { + "Date": "2022-05-04", + "Value": 562, + "Series": "Software" + }, + { + "Date": "2022-05-09", + "Value": 568, + "Series": "Software" + }, + { + "Date": "2022-05-15", + "Value": 576, + "Series": "Software" + }, + { + "Date": "2022-05-20", + "Value": 585, + "Series": "Software" + }, + { + "Date": "2022-05-26", + "Value": 587, + "Series": "Software" + }, + { + "Date": "2022-05-31", + "Value": 581, + "Series": "Software" + }, + { + "Date": "2022-06-05", + "Value": 579, + "Series": "Software" + }, + { + "Date": "2022-06-11", + "Value": 588, + "Series": "Software" + }, + { + "Date": "2022-06-16", + "Value": 590, + "Series": "Software" + }, + { + "Date": "2022-06-22", + "Value": 586, + "Series": "Software" + }, + { + "Date": "2022-06-27", + "Value": 583, + "Series": "Software" + }, + { + "Date": "2022-07-03", + "Value": 581, + "Series": "Software" + }, + { + "Date": "2022-07-08", + "Value": 572, + "Series": "Software" + }, + { + "Date": "2022-07-14", + "Value": 570, + "Series": "Software" + }, + { + "Date": "2022-07-19", + "Value": 568, + "Series": "Software" + }, + { + "Date": "2022-07-25", + "Value": 562, + "Series": "Software" + }, + { + "Date": "2022-07-30", + "Value": 562, + "Series": "Software" + }, + { + "Date": "2022-08-05", + "Value": 569, + "Series": "Software" + }, + { + "Date": "2022-08-10", + "Value": 570, + "Series": "Software" + }, + { + "Date": "2022-08-16", + "Value": 560, + "Series": "Software" + }, + { + "Date": "2022-08-21", + "Value": 554, + "Series": "Software" + }, + { + "Date": "2022-08-27", + "Value": 560, + "Series": "Software" + }, + { + "Date": "2022-09-01", + "Value": 573, + "Series": "Software" + }, + { + "Date": "2022-09-07", + "Value": 591, + "Series": "Software" + }, + { + "Date": "2022-09-12", + "Value": 594, + "Series": "Software" + }, + { + "Date": "2022-09-17", + "Value": 603, + "Series": "Software" + }, + { + "Date": "2022-09-23", + "Value": 611, + "Series": "Software" + }, + { + "Date": "2022-09-28", + "Value": 622, + "Series": "Software" + }, + { + "Date": "2022-10-04", + "Value": 632, + "Series": "Software" + }, + { + "Date": "2022-10-09", + "Value": 649, + "Series": "Software" + }, + { + "Date": "2022-10-15", + "Value": 672, + "Series": "Software" + }, + { + "Date": "2022-10-20", + "Value": 694, + "Series": "Software" + }, + { + "Date": "2022-10-26", + "Value": 699, + "Series": "Software" + }, + { + "Date": "2022-10-31", + "Value": 709, + "Series": "Software" + }, + { + "Date": "2022-11-06", + "Value": 721, + "Series": "Software" + }, + { + "Date": "2022-11-11", + "Value": 733, + "Series": "Software" + }, + { + "Date": "2022-11-17", + "Value": 751, + "Series": "Software" + }, + { + "Date": "2022-11-22", + "Value": 773, + "Series": "Software" + }, + { + "Date": "2022-11-28", + "Value": 786, + "Series": "Software" + }, + { + "Date": "2022-12-03", + "Value": 791, + "Series": "Software" + }, + { + "Date": "2022-12-09", + "Value": 791, + "Series": "Software" + }, + { + "Date": "2022-12-14", + "Value": 802, + "Series": "Software" + }, + { + "Date": "2022-12-20", + "Value": 813, + "Series": "Software" + }, + { + "Date": "2022-12-25", + "Value": 820, + "Series": "Software" + }, + { + "Date": "2020-01-01", + "Value": 124, + "Series": "Games" + }, + { + "Date": "2020-01-06", + "Value": 114, + "Series": "Games" + }, + { + "Date": "2020-01-11", + "Value": 115, + "Series": "Games" + }, + { + "Date": "2020-01-17", + "Value": 119, + "Series": "Games" + }, + { + "Date": "2020-01-22", + "Value": 112, + "Series": "Games" + }, + { + "Date": "2020-01-28", + "Value": 104, + "Series": "Games" + }, + { + "Date": "2020-02-02", + "Value": 109, + "Series": "Games" + }, + { + "Date": "2020-02-08", + "Value": 117, + "Series": "Games" + }, + { + "Date": "2020-02-13", + "Value": 123, + "Series": "Games" + }, + { + "Date": "2020-02-19", + "Value": 128, + "Series": "Games" + }, + { + "Date": "2020-02-24", + "Value": 139, + "Series": "Games" + }, + { + "Date": "2020-03-01", + "Value": 156, + "Series": "Games" + }, + { + "Date": "2020-03-06", + "Value": 163, + "Series": "Games" + }, + { + "Date": "2020-03-12", + "Value": 169, + "Series": "Games" + }, + { + "Date": "2020-03-17", + "Value": 166, + "Series": "Games" + }, + { + "Date": "2020-03-23", + "Value": 174, + "Series": "Games" + }, + { + "Date": "2020-03-28", + "Value": 183, + "Series": "Games" + }, + { + "Date": "2020-04-03", + "Value": 181, + "Series": "Games" + }, + { + "Date": "2020-04-08", + "Value": 174, + "Series": "Games" + }, + { + "Date": "2020-04-14", + "Value": 170, + "Series": "Games" + }, + { + "Date": "2020-04-19", + "Value": 156, + "Series": "Games" + }, + { + "Date": "2020-04-24", + "Value": 137, + "Series": "Games" + }, + { + "Date": "2020-04-30", + "Value": 131, + "Series": "Games" + }, + { + "Date": "2020-05-05", + "Value": 134, + "Series": "Games" + }, + { + "Date": "2020-05-11", + "Value": 141, + "Series": "Games" + }, + { + "Date": "2020-05-16", + "Value": 140, + "Series": "Games" + }, + { + "Date": "2020-05-22", + "Value": 145, + "Series": "Games" + }, + { + "Date": "2020-05-27", + "Value": 152, + "Series": "Games" + }, + { + "Date": "2020-06-02", + "Value": 148, + "Series": "Games" + }, + { + "Date": "2020-06-07", + "Value": 146, + "Series": "Games" + }, + { + "Date": "2020-06-13", + "Value": 135, + "Series": "Games" + }, + { + "Date": "2020-06-18", + "Value": 125, + "Series": "Games" + }, + { + "Date": "2020-06-24", + "Value": 119, + "Series": "Games" + }, + { + "Date": "2020-06-29", + "Value": 105, + "Series": "Games" + }, + { + "Date": "2020-07-05", + "Value": 104, + "Series": "Games" + }, + { + "Date": "2020-07-10", + "Value": 95, + "Series": "Games" + }, + { + "Date": "2020-07-16", + "Value": 96, + "Series": "Games" + }, + { + "Date": "2020-07-21", + "Value": 100, + "Series": "Games" + }, + { + "Date": "2020-07-27", + "Value": 102, + "Series": "Games" + }, + { + "Date": "2020-08-01", + "Value": 112, + "Series": "Games" + }, + { + "Date": "2020-08-07", + "Value": 123, + "Series": "Games" + }, + { + "Date": "2020-08-12", + "Value": 123, + "Series": "Games" + }, + { + "Date": "2020-08-17", + "Value": 123, + "Series": "Games" + }, + { + "Date": "2020-08-23", + "Value": 114, + "Series": "Games" + }, + { + "Date": "2020-08-28", + "Value": 100, + "Series": "Games" + }, + { + "Date": "2020-09-03", + "Value": 100, + "Series": "Games" + }, + { + "Date": "2020-09-08", + "Value": 89, + "Series": "Games" + }, + { + "Date": "2020-09-14", + "Value": 80, + "Series": "Games" + }, + { + "Date": "2020-09-19", + "Value": 68, + "Series": "Games" + }, + { + "Date": "2020-09-25", + "Value": 64, + "Series": "Games" + }, + { + "Date": "2020-09-30", + "Value": 71, + "Series": "Games" + }, + { + "Date": "2020-10-06", + "Value": 80, + "Series": "Games" + }, + { + "Date": "2020-10-11", + "Value": 87, + "Series": "Games" + }, + { + "Date": "2020-10-17", + "Value": 83, + "Series": "Games" + }, + { + "Date": "2020-10-22", + "Value": 84, + "Series": "Games" + }, + { + "Date": "2020-10-28", + "Value": 93, + "Series": "Games" + }, + { + "Date": "2020-11-02", + "Value": 96, + "Series": "Games" + }, + { + "Date": "2020-11-08", + "Value": 89, + "Series": "Games" + }, + { + "Date": "2020-11-13", + "Value": 89, + "Series": "Games" + }, + { + "Date": "2020-11-19", + "Value": 83, + "Series": "Games" + }, + { + "Date": "2020-11-24", + "Value": 82, + "Series": "Games" + }, + { + "Date": "2020-11-29", + "Value": 83, + "Series": "Games" + }, + { + "Date": "2020-12-05", + "Value": 89, + "Series": "Games" + }, + { + "Date": "2020-12-10", + "Value": 94, + "Series": "Games" + }, + { + "Date": "2020-12-16", + "Value": 102, + "Series": "Games" + }, + { + "Date": "2020-12-21", + "Value": 112, + "Series": "Games" + }, + { + "Date": "2020-12-27", + "Value": 116, + "Series": "Games" + }, + { + "Date": "2021-01-01", + "Value": 122, + "Series": "Games" + }, + { + "Date": "2021-01-07", + "Value": 130, + "Series": "Games" + }, + { + "Date": "2021-01-12", + "Value": 138, + "Series": "Games" + }, + { + "Date": "2021-01-18", + "Value": 141, + "Series": "Games" + }, + { + "Date": "2021-01-23", + "Value": 139, + "Series": "Games" + }, + { + "Date": "2021-01-29", + "Value": 146, + "Series": "Games" + }, + { + "Date": "2021-02-03", + "Value": 148, + "Series": "Games" + }, + { + "Date": "2021-02-09", + "Value": 151, + "Series": "Games" + }, + { + "Date": "2021-02-14", + "Value": 149, + "Series": "Games" + }, + { + "Date": "2021-02-20", + "Value": 149, + "Series": "Games" + }, + { + "Date": "2021-02-25", + "Value": 139, + "Series": "Games" + }, + { + "Date": "2021-03-03", + "Value": 125, + "Series": "Games" + }, + { + "Date": "2021-03-08", + "Value": 107, + "Series": "Games" + }, + { + "Date": "2021-03-14", + "Value": 87, + "Series": "Games" + }, + { + "Date": "2021-03-19", + "Value": 63, + "Series": "Games" + }, + { + "Date": "2021-03-24", + "Value": 43, + "Series": "Games" + }, + { + "Date": "2021-03-30", + "Value": 26, + "Series": "Games" + }, + { + "Date": "2021-04-04", + "Value": 14, + "Series": "Games" + }, + { + "Date": "2021-04-10", + "Value": 11, + "Series": "Games" + }, + { + "Date": "2021-04-15", + "Value": 9, + "Series": "Games" + }, + { + "Date": "2021-04-21", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-04-26", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-05-02", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-05-07", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-05-13", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-05-18", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-05-24", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-05-29", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-06-04", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-06-09", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-06-15", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-06-20", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-06-26", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-07-01", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-07-06", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-07-12", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-07-17", + "Value": 4, + "Series": "Games" + }, + { + "Date": "2021-07-23", + "Value": 7, + "Series": "Games" + }, + { + "Date": "2021-07-28", + "Value": 2, + "Series": "Games" + }, + { + "Date": "2021-08-03", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-08-08", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-08-14", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-08-19", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-08-25", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-08-30", + "Value": 6, + "Series": "Games" + }, + { + "Date": "2021-09-05", + "Value": 18, + "Series": "Games" + }, + { + "Date": "2021-09-10", + "Value": 25, + "Series": "Games" + }, + { + "Date": "2021-09-16", + "Value": 22, + "Series": "Games" + }, + { + "Date": "2021-09-21", + "Value": 30, + "Series": "Games" + }, + { + "Date": "2021-09-27", + "Value": 26, + "Series": "Games" + }, + { + "Date": "2021-10-02", + "Value": 27, + "Series": "Games" + }, + { + "Date": "2021-10-08", + "Value": 24, + "Series": "Games" + }, + { + "Date": "2021-10-13", + "Value": 25, + "Series": "Games" + }, + { + "Date": "2021-10-19", + "Value": 29, + "Series": "Games" + }, + { + "Date": "2021-10-24", + "Value": 21, + "Series": "Games" + }, + { + "Date": "2021-10-29", + "Value": 7, + "Series": "Games" + }, + { + "Date": "2021-11-04", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-11-09", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-11-15", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-11-20", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-11-26", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-12-01", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-12-07", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-12-12", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-12-18", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2021-12-23", + "Value": 5, + "Series": "Games" + }, + { + "Date": "2021-12-29", + "Value": 10, + "Series": "Games" + }, + { + "Date": "2022-01-03", + "Value": 4, + "Series": "Games" + }, + { + "Date": "2022-01-09", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-01-14", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-01-20", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-01-25", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-01-31", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-02-05", + "Value": 8, + "Series": "Games" + }, + { + "Date": "2022-02-10", + "Value": 24, + "Series": "Games" + }, + { + "Date": "2022-02-16", + "Value": 32, + "Series": "Games" + }, + { + "Date": "2022-02-21", + "Value": 48, + "Series": "Games" + }, + { + "Date": "2022-02-27", + "Value": 51, + "Series": "Games" + }, + { + "Date": "2022-03-04", + "Value": 45, + "Series": "Games" + }, + { + "Date": "2022-03-10", + "Value": 44, + "Series": "Games" + }, + { + "Date": "2022-03-15", + "Value": 49, + "Series": "Games" + }, + { + "Date": "2022-03-21", + "Value": 42, + "Series": "Games" + }, + { + "Date": "2022-03-26", + "Value": 33, + "Series": "Games" + }, + { + "Date": "2022-04-01", + "Value": 33, + "Series": "Games" + }, + { + "Date": "2022-04-06", + "Value": 30, + "Series": "Games" + }, + { + "Date": "2022-04-12", + "Value": 19, + "Series": "Games" + }, + { + "Date": "2022-04-17", + "Value": 12, + "Series": "Games" + }, + { + "Date": "2022-04-23", + "Value": 2, + "Series": "Games" + }, + { + "Date": "2022-04-28", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-05-04", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-05-09", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-05-15", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-05-20", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-05-26", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-05-31", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-06-05", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-06-11", + "Value": 3, + "Series": "Games" + }, + { + "Date": "2022-06-16", + "Value": 7, + "Series": "Games" + }, + { + "Date": "2022-06-22", + "Value": 4, + "Series": "Games" + }, + { + "Date": "2022-06-27", + "Value": 1, + "Series": "Games" + }, + { + "Date": "2022-07-03", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-07-08", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-07-14", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-07-19", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-07-25", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-07-30", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-08-05", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-08-10", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-08-16", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-08-21", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-08-27", + "Value": 6, + "Series": "Games" + }, + { + "Date": "2022-09-01", + "Value": 3, + "Series": "Games" + }, + { + "Date": "2022-09-07", + "Value": 3, + "Series": "Games" + }, + { + "Date": "2022-09-12", + "Value": 1, + "Series": "Games" + }, + { + "Date": "2022-09-17", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-09-23", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-09-28", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-10-04", + "Value": 0, + "Series": "Games" + }, + { + "Date": "2022-10-09", + "Value": 3, + "Series": "Games" + }, + { + "Date": "2022-10-15", + "Value": 8, + "Series": "Games" + }, + { + "Date": "2022-10-20", + "Value": 17, + "Series": "Games" + }, + { + "Date": "2022-10-26", + "Value": 34, + "Series": "Games" + }, + { + "Date": "2022-10-31", + "Value": 42, + "Series": "Games" + }, + { + "Date": "2022-11-06", + "Value": 41, + "Series": "Games" + }, + { + "Date": "2022-11-11", + "Value": 48, + "Series": "Games" + }, + { + "Date": "2022-11-17", + "Value": 62, + "Series": "Games" + }, + { + "Date": "2022-11-22", + "Value": 64, + "Series": "Games" + }, + { + "Date": "2022-11-28", + "Value": 59, + "Series": "Games" + }, + { + "Date": "2022-12-03", + "Value": 55, + "Series": "Games" + }, + { + "Date": "2022-12-09", + "Value": 43, + "Series": "Games" + }, + { + "Date": "2022-12-14", + "Value": 44, + "Series": "Games" + }, + { + "Date": "2022-12-20", + "Value": 45, + "Series": "Games" + }, + { + "Date": "2022-12-25", + "Value": 37, + "Series": "Games" + }, + { + "Date": "2020-01-01", + "Value": 63, + "Series": "Office" + }, + { + "Date": "2020-01-06", + "Value": 66, + "Series": "Office" + }, + { + "Date": "2020-01-11", + "Value": 71, + "Series": "Office" + }, + { + "Date": "2020-01-17", + "Value": 75, + "Series": "Office" + }, + { + "Date": "2020-01-22", + "Value": 71, + "Series": "Office" + }, + { + "Date": "2020-01-28", + "Value": 63, + "Series": "Office" + }, + { + "Date": "2020-02-02", + "Value": 52, + "Series": "Office" + }, + { + "Date": "2020-02-08", + "Value": 39, + "Series": "Office" + }, + { + "Date": "2020-02-13", + "Value": 28, + "Series": "Office" + }, + { + "Date": "2020-02-19", + "Value": 17, + "Series": "Office" + }, + { + "Date": "2020-02-24", + "Value": 14, + "Series": "Office" + }, + { + "Date": "2020-03-01", + "Value": 7, + "Series": "Office" + }, + { + "Date": "2020-03-06", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2020-03-12", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2020-03-17", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2020-03-23", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2020-03-28", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2020-04-03", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2020-04-08", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2020-04-14", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2020-04-19", + "Value": 2, + "Series": "Office" + }, + { + "Date": "2020-04-24", + "Value": 1, + "Series": "Office" + }, + { + "Date": "2020-04-30", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2020-05-05", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2020-05-11", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2020-05-16", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2020-05-22", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2020-05-27", + "Value": 4, + "Series": "Office" + }, + { + "Date": "2020-06-02", + "Value": 8, + "Series": "Office" + }, + { + "Date": "2020-06-07", + "Value": 11, + "Series": "Office" + }, + { + "Date": "2020-06-13", + "Value": 19, + "Series": "Office" + }, + { + "Date": "2020-06-18", + "Value": 31, + "Series": "Office" + }, + { + "Date": "2020-06-24", + "Value": 36, + "Series": "Office" + }, + { + "Date": "2020-06-29", + "Value": 45, + "Series": "Office" + }, + { + "Date": "2020-07-05", + "Value": 51, + "Series": "Office" + }, + { + "Date": "2020-07-10", + "Value": 57, + "Series": "Office" + }, + { + "Date": "2020-07-16", + "Value": 66, + "Series": "Office" + }, + { + "Date": "2020-07-21", + "Value": 70, + "Series": "Office" + }, + { + "Date": "2020-07-27", + "Value": 77, + "Series": "Office" + }, + { + "Date": "2020-08-01", + "Value": 78, + "Series": "Office" + }, + { + "Date": "2020-08-07", + "Value": 77, + "Series": "Office" + }, + { + "Date": "2020-08-12", + "Value": 75, + "Series": "Office" + }, + { + "Date": "2020-08-17", + "Value": 81, + "Series": "Office" + }, + { + "Date": "2020-08-23", + "Value": 84, + "Series": "Office" + }, + { + "Date": "2020-08-28", + "Value": 87, + "Series": "Office" + }, + { + "Date": "2020-09-03", + "Value": 83, + "Series": "Office" + }, + { + "Date": "2020-09-08", + "Value": 85, + "Series": "Office" + }, + { + "Date": "2020-09-14", + "Value": 84, + "Series": "Office" + }, + { + "Date": "2020-09-19", + "Value": 80, + "Series": "Office" + }, + { + "Date": "2020-09-25", + "Value": 81, + "Series": "Office" + }, + { + "Date": "2020-09-30", + "Value": 75, + "Series": "Office" + }, + { + "Date": "2020-10-06", + "Value": 70, + "Series": "Office" + }, + { + "Date": "2020-10-11", + "Value": 73, + "Series": "Office" + }, + { + "Date": "2020-10-17", + "Value": 81, + "Series": "Office" + }, + { + "Date": "2020-10-22", + "Value": 85, + "Series": "Office" + }, + { + "Date": "2020-10-28", + "Value": 80, + "Series": "Office" + }, + { + "Date": "2020-11-02", + "Value": 83, + "Series": "Office" + }, + { + "Date": "2020-11-08", + "Value": 80, + "Series": "Office" + }, + { + "Date": "2020-11-13", + "Value": 77, + "Series": "Office" + }, + { + "Date": "2020-11-19", + "Value": 82, + "Series": "Office" + }, + { + "Date": "2020-11-24", + "Value": 79, + "Series": "Office" + }, + { + "Date": "2020-11-29", + "Value": 84, + "Series": "Office" + }, + { + "Date": "2020-12-05", + "Value": 86, + "Series": "Office" + }, + { + "Date": "2020-12-10", + "Value": 85, + "Series": "Office" + }, + { + "Date": "2020-12-16", + "Value": 90, + "Series": "Office" + }, + { + "Date": "2020-12-21", + "Value": 101, + "Series": "Office" + }, + { + "Date": "2020-12-27", + "Value": 103, + "Series": "Office" + }, + { + "Date": "2021-01-01", + "Value": 111, + "Series": "Office" + }, + { + "Date": "2021-01-07", + "Value": 116, + "Series": "Office" + }, + { + "Date": "2021-01-12", + "Value": 119, + "Series": "Office" + }, + { + "Date": "2021-01-18", + "Value": 118, + "Series": "Office" + }, + { + "Date": "2021-01-23", + "Value": 117, + "Series": "Office" + }, + { + "Date": "2021-01-29", + "Value": 124, + "Series": "Office" + }, + { + "Date": "2021-02-03", + "Value": 130, + "Series": "Office" + }, + { + "Date": "2021-02-09", + "Value": 130, + "Series": "Office" + }, + { + "Date": "2021-02-14", + "Value": 129, + "Series": "Office" + }, + { + "Date": "2021-02-20", + "Value": 133, + "Series": "Office" + }, + { + "Date": "2021-02-25", + "Value": 138, + "Series": "Office" + }, + { + "Date": "2021-03-03", + "Value": 146, + "Series": "Office" + }, + { + "Date": "2021-03-08", + "Value": 152, + "Series": "Office" + }, + { + "Date": "2021-03-14", + "Value": 149, + "Series": "Office" + }, + { + "Date": "2021-03-19", + "Value": 145, + "Series": "Office" + }, + { + "Date": "2021-03-24", + "Value": 139, + "Series": "Office" + }, + { + "Date": "2021-03-30", + "Value": 128, + "Series": "Office" + }, + { + "Date": "2021-04-04", + "Value": 116, + "Series": "Office" + }, + { + "Date": "2021-04-10", + "Value": 105, + "Series": "Office" + }, + { + "Date": "2021-04-15", + "Value": 90, + "Series": "Office" + }, + { + "Date": "2021-04-21", + "Value": 85, + "Series": "Office" + }, + { + "Date": "2021-04-26", + "Value": 76, + "Series": "Office" + }, + { + "Date": "2021-05-02", + "Value": 68, + "Series": "Office" + }, + { + "Date": "2021-05-07", + "Value": 65, + "Series": "Office" + }, + { + "Date": "2021-05-13", + "Value": 65, + "Series": "Office" + }, + { + "Date": "2021-05-18", + "Value": 62, + "Series": "Office" + }, + { + "Date": "2021-05-24", + "Value": 67, + "Series": "Office" + }, + { + "Date": "2021-05-29", + "Value": 77, + "Series": "Office" + }, + { + "Date": "2021-06-04", + "Value": 81, + "Series": "Office" + }, + { + "Date": "2021-06-09", + "Value": 83, + "Series": "Office" + }, + { + "Date": "2021-06-15", + "Value": 88, + "Series": "Office" + }, + { + "Date": "2021-06-20", + "Value": 84, + "Series": "Office" + }, + { + "Date": "2021-06-26", + "Value": 74, + "Series": "Office" + }, + { + "Date": "2021-07-01", + "Value": 70, + "Series": "Office" + }, + { + "Date": "2021-07-06", + "Value": 65, + "Series": "Office" + }, + { + "Date": "2021-07-12", + "Value": 55, + "Series": "Office" + }, + { + "Date": "2021-07-17", + "Value": 46, + "Series": "Office" + }, + { + "Date": "2021-07-23", + "Value": 36, + "Series": "Office" + }, + { + "Date": "2021-07-28", + "Value": 34, + "Series": "Office" + }, + { + "Date": "2021-08-03", + "Value": 26, + "Series": "Office" + }, + { + "Date": "2021-08-08", + "Value": 24, + "Series": "Office" + }, + { + "Date": "2021-08-14", + "Value": 28, + "Series": "Office" + }, + { + "Date": "2021-08-19", + "Value": 23, + "Series": "Office" + }, + { + "Date": "2021-08-25", + "Value": 23, + "Series": "Office" + }, + { + "Date": "2021-08-30", + "Value": 22, + "Series": "Office" + }, + { + "Date": "2021-09-05", + "Value": 14, + "Series": "Office" + }, + { + "Date": "2021-09-10", + "Value": 12, + "Series": "Office" + }, + { + "Date": "2021-09-16", + "Value": 5, + "Series": "Office" + }, + { + "Date": "2021-09-21", + "Value": 6, + "Series": "Office" + }, + { + "Date": "2021-09-27", + "Value": 7, + "Series": "Office" + }, + { + "Date": "2021-10-02", + "Value": 8, + "Series": "Office" + }, + { + "Date": "2021-10-08", + "Value": 11, + "Series": "Office" + }, + { + "Date": "2021-10-13", + "Value": 10, + "Series": "Office" + }, + { + "Date": "2021-10-19", + "Value": 12, + "Series": "Office" + }, + { + "Date": "2021-10-24", + "Value": 11, + "Series": "Office" + }, + { + "Date": "2021-10-29", + "Value": 18, + "Series": "Office" + }, + { + "Date": "2021-11-04", + "Value": 28, + "Series": "Office" + }, + { + "Date": "2021-11-09", + "Value": 32, + "Series": "Office" + }, + { + "Date": "2021-11-15", + "Value": 35, + "Series": "Office" + }, + { + "Date": "2021-11-20", + "Value": 43, + "Series": "Office" + }, + { + "Date": "2021-11-26", + "Value": 41, + "Series": "Office" + }, + { + "Date": "2021-12-01", + "Value": 42, + "Series": "Office" + }, + { + "Date": "2021-12-07", + "Value": 44, + "Series": "Office" + }, + { + "Date": "2021-12-12", + "Value": 48, + "Series": "Office" + }, + { + "Date": "2021-12-18", + "Value": 44, + "Series": "Office" + }, + { + "Date": "2021-12-23", + "Value": 39, + "Series": "Office" + }, + { + "Date": "2021-12-29", + "Value": 30, + "Series": "Office" + }, + { + "Date": "2022-01-03", + "Value": 23, + "Series": "Office" + }, + { + "Date": "2022-01-09", + "Value": 19, + "Series": "Office" + }, + { + "Date": "2022-01-14", + "Value": 18, + "Series": "Office" + }, + { + "Date": "2022-01-20", + "Value": 14, + "Series": "Office" + }, + { + "Date": "2022-01-25", + "Value": 6, + "Series": "Office" + }, + { + "Date": "2022-01-31", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-02-05", + "Value": 2, + "Series": "Office" + }, + { + "Date": "2022-02-10", + "Value": 9, + "Series": "Office" + }, + { + "Date": "2022-02-16", + "Value": 10, + "Series": "Office" + }, + { + "Date": "2022-02-21", + "Value": 18, + "Series": "Office" + }, + { + "Date": "2022-02-27", + "Value": 22, + "Series": "Office" + }, + { + "Date": "2022-03-04", + "Value": 32, + "Series": "Office" + }, + { + "Date": "2022-03-10", + "Value": 39, + "Series": "Office" + }, + { + "Date": "2022-03-15", + "Value": 46, + "Series": "Office" + }, + { + "Date": "2022-03-21", + "Value": 48, + "Series": "Office" + }, + { + "Date": "2022-03-26", + "Value": 45, + "Series": "Office" + }, + { + "Date": "2022-04-01", + "Value": 48, + "Series": "Office" + }, + { + "Date": "2022-04-06", + "Value": 49, + "Series": "Office" + }, + { + "Date": "2022-04-12", + "Value": 46, + "Series": "Office" + }, + { + "Date": "2022-04-17", + "Value": 39, + "Series": "Office" + }, + { + "Date": "2022-04-23", + "Value": 34, + "Series": "Office" + }, + { + "Date": "2022-04-28", + "Value": 24, + "Series": "Office" + }, + { + "Date": "2022-05-04", + "Value": 20, + "Series": "Office" + }, + { + "Date": "2022-05-09", + "Value": 20, + "Series": "Office" + }, + { + "Date": "2022-05-15", + "Value": 19, + "Series": "Office" + }, + { + "Date": "2022-05-20", + "Value": 20, + "Series": "Office" + }, + { + "Date": "2022-05-26", + "Value": 26, + "Series": "Office" + }, + { + "Date": "2022-05-31", + "Value": 29, + "Series": "Office" + }, + { + "Date": "2022-06-05", + "Value": 26, + "Series": "Office" + }, + { + "Date": "2022-06-11", + "Value": 18, + "Series": "Office" + }, + { + "Date": "2022-06-16", + "Value": 8, + "Series": "Office" + }, + { + "Date": "2022-06-22", + "Value": 2, + "Series": "Office" + }, + { + "Date": "2022-06-27", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-07-03", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-07-08", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-07-14", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-07-19", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-07-25", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-07-30", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-08-05", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-08-10", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-08-16", + "Value": 1, + "Series": "Office" + }, + { + "Date": "2022-08-21", + "Value": 7, + "Series": "Office" + }, + { + "Date": "2022-08-27", + "Value": 11, + "Series": "Office" + }, + { + "Date": "2022-09-01", + "Value": 10, + "Series": "Office" + }, + { + "Date": "2022-09-07", + "Value": 3, + "Series": "Office" + }, + { + "Date": "2022-09-12", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-09-17", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-09-23", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-09-28", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-10-04", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-10-09", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-10-15", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-10-20", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-10-26", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-10-31", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-11-06", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-11-11", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-11-17", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-11-22", + "Value": 1, + "Series": "Office" + }, + { + "Date": "2022-11-28", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-12-03", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-12-09", + "Value": 0, + "Series": "Office" + }, + { + "Date": "2022-12-14", + "Value": 5, + "Series": "Office" + }, + { + "Date": "2022-12-20", + "Value": 10, + "Series": "Office" + }, + { + "Date": "2022-12-25", + "Value": 16, + "Series": "Office" + }, + { + "Date": "2020-01-01", + "Value": 111, + "Series": "Pet" + }, + { + "Date": "2020-01-06", + "Value": 122, + "Series": "Pet" + }, + { + "Date": "2020-01-11", + "Value": 140, + "Series": "Pet" + }, + { + "Date": "2020-01-17", + "Value": 135, + "Series": "Pet" + }, + { + "Date": "2020-01-22", + "Value": 120, + "Series": "Pet" + }, + { + "Date": "2020-01-28", + "Value": 115, + "Series": "Pet" + }, + { + "Date": "2020-02-02", + "Value": 117, + "Series": "Pet" + }, + { + "Date": "2020-02-08", + "Value": 132, + "Series": "Pet" + }, + { + "Date": "2020-02-13", + "Value": 131, + "Series": "Pet" + }, + { + "Date": "2020-02-19", + "Value": 143, + "Series": "Pet" + }, + { + "Date": "2020-02-24", + "Value": 160, + "Series": "Pet" + }, + { + "Date": "2020-03-01", + "Value": 174, + "Series": "Pet" + }, + { + "Date": "2020-03-06", + "Value": 201, + "Series": "Pet" + }, + { + "Date": "2020-03-12", + "Value": 235, + "Series": "Pet" + }, + { + "Date": "2020-03-17", + "Value": 266, + "Series": "Pet" + }, + { + "Date": "2020-03-23", + "Value": 283, + "Series": "Pet" + }, + { + "Date": "2020-03-28", + "Value": 306, + "Series": "Pet" + }, + { + "Date": "2020-04-03", + "Value": 325, + "Series": "Pet" + }, + { + "Date": "2020-04-08", + "Value": 338, + "Series": "Pet" + }, + { + "Date": "2020-04-14", + "Value": 349, + "Series": "Pet" + }, + { + "Date": "2020-04-19", + "Value": 371, + "Series": "Pet" + }, + { + "Date": "2020-04-24", + "Value": 405, + "Series": "Pet" + }, + { + "Date": "2020-04-30", + "Value": 435, + "Series": "Pet" + }, + { + "Date": "2020-05-05", + "Value": 447, + "Series": "Pet" + }, + { + "Date": "2020-05-11", + "Value": 451, + "Series": "Pet" + }, + { + "Date": "2020-05-16", + "Value": 444, + "Series": "Pet" + }, + { + "Date": "2020-05-22", + "Value": 431, + "Series": "Pet" + }, + { + "Date": "2020-05-27", + "Value": 440, + "Series": "Pet" + }, + { + "Date": "2020-06-02", + "Value": 458, + "Series": "Pet" + }, + { + "Date": "2020-06-07", + "Value": 460, + "Series": "Pet" + }, + { + "Date": "2020-06-13", + "Value": 468, + "Series": "Pet" + }, + { + "Date": "2020-06-18", + "Value": 477, + "Series": "Pet" + }, + { + "Date": "2020-06-24", + "Value": 497, + "Series": "Pet" + }, + { + "Date": "2020-06-29", + "Value": 507, + "Series": "Pet" + }, + { + "Date": "2020-07-05", + "Value": 502, + "Series": "Pet" + }, + { + "Date": "2020-07-10", + "Value": 516, + "Series": "Pet" + }, + { + "Date": "2020-07-16", + "Value": 517, + "Series": "Pet" + }, + { + "Date": "2020-07-21", + "Value": 527, + "Series": "Pet" + }, + { + "Date": "2020-07-27", + "Value": 517, + "Series": "Pet" + }, + { + "Date": "2020-08-01", + "Value": 498, + "Series": "Pet" + }, + { + "Date": "2020-08-07", + "Value": 479, + "Series": "Pet" + }, + { + "Date": "2020-08-12", + "Value": 452, + "Series": "Pet" + }, + { + "Date": "2020-08-17", + "Value": 438, + "Series": "Pet" + }, + { + "Date": "2020-08-23", + "Value": 434, + "Series": "Pet" + }, + { + "Date": "2020-08-28", + "Value": 434, + "Series": "Pet" + }, + { + "Date": "2020-09-03", + "Value": 444, + "Series": "Pet" + }, + { + "Date": "2020-09-08", + "Value": 448, + "Series": "Pet" + }, + { + "Date": "2020-09-14", + "Value": 452, + "Series": "Pet" + }, + { + "Date": "2020-09-19", + "Value": 458, + "Series": "Pet" + }, + { + "Date": "2020-09-25", + "Value": 481, + "Series": "Pet" + }, + { + "Date": "2020-09-30", + "Value": 494, + "Series": "Pet" + }, + { + "Date": "2020-10-06", + "Value": 487, + "Series": "Pet" + }, + { + "Date": "2020-10-11", + "Value": 486, + "Series": "Pet" + }, + { + "Date": "2020-10-17", + "Value": 478, + "Series": "Pet" + }, + { + "Date": "2020-10-22", + "Value": 468, + "Series": "Pet" + }, + { + "Date": "2020-10-28", + "Value": 447, + "Series": "Pet" + }, + { + "Date": "2020-11-02", + "Value": 442, + "Series": "Pet" + }, + { + "Date": "2020-11-08", + "Value": 457, + "Series": "Pet" + }, + { + "Date": "2020-11-13", + "Value": 478, + "Series": "Pet" + }, + { + "Date": "2020-11-19", + "Value": 481, + "Series": "Pet" + }, + { + "Date": "2020-11-24", + "Value": 487, + "Series": "Pet" + }, + { + "Date": "2020-11-29", + "Value": 495, + "Series": "Pet" + }, + { + "Date": "2020-12-05", + "Value": 500, + "Series": "Pet" + }, + { + "Date": "2020-12-10", + "Value": 522, + "Series": "Pet" + }, + { + "Date": "2020-12-16", + "Value": 540, + "Series": "Pet" + }, + { + "Date": "2020-12-21", + "Value": 554, + "Series": "Pet" + }, + { + "Date": "2020-12-27", + "Value": 571, + "Series": "Pet" + }, + { + "Date": "2021-01-01", + "Value": 593, + "Series": "Pet" + }, + { + "Date": "2021-01-07", + "Value": 604, + "Series": "Pet" + }, + { + "Date": "2021-01-12", + "Value": 603, + "Series": "Pet" + }, + { + "Date": "2021-01-18", + "Value": 597, + "Series": "Pet" + }, + { + "Date": "2021-01-23", + "Value": 598, + "Series": "Pet" + }, + { + "Date": "2021-01-29", + "Value": 616, + "Series": "Pet" + }, + { + "Date": "2021-02-03", + "Value": 609, + "Series": "Pet" + }, + { + "Date": "2021-02-09", + "Value": 607, + "Series": "Pet" + }, + { + "Date": "2021-02-14", + "Value": 622, + "Series": "Pet" + }, + { + "Date": "2021-02-20", + "Value": 623, + "Series": "Pet" + }, + { + "Date": "2021-02-25", + "Value": 640, + "Series": "Pet" + }, + { + "Date": "2021-03-03", + "Value": 655, + "Series": "Pet" + }, + { + "Date": "2021-03-08", + "Value": 674, + "Series": "Pet" + }, + { + "Date": "2021-03-14", + "Value": 697, + "Series": "Pet" + }, + { + "Date": "2021-03-19", + "Value": 732, + "Series": "Pet" + }, + { + "Date": "2021-03-24", + "Value": 770, + "Series": "Pet" + }, + { + "Date": "2021-03-30", + "Value": 795, + "Series": "Pet" + }, + { + "Date": "2021-04-04", + "Value": 805, + "Series": "Pet" + }, + { + "Date": "2021-04-10", + "Value": 802, + "Series": "Pet" + }, + { + "Date": "2021-04-15", + "Value": 782, + "Series": "Pet" + }, + { + "Date": "2021-04-21", + "Value": 762, + "Series": "Pet" + }, + { + "Date": "2021-04-26", + "Value": 730, + "Series": "Pet" + }, + { + "Date": "2021-05-02", + "Value": 712, + "Series": "Pet" + }, + { + "Date": "2021-05-07", + "Value": 686, + "Series": "Pet" + }, + { + "Date": "2021-05-13", + "Value": 675, + "Series": "Pet" + }, + { + "Date": "2021-05-18", + "Value": 685, + "Series": "Pet" + }, + { + "Date": "2021-05-24", + "Value": 699, + "Series": "Pet" + }, + { + "Date": "2021-05-29", + "Value": 703, + "Series": "Pet" + }, + { + "Date": "2021-06-04", + "Value": 724, + "Series": "Pet" + }, + { + "Date": "2021-06-09", + "Value": 758, + "Series": "Pet" + }, + { + "Date": "2021-06-15", + "Value": 787, + "Series": "Pet" + }, + { + "Date": "2021-06-20", + "Value": 797, + "Series": "Pet" + }, + { + "Date": "2021-06-26", + "Value": 786, + "Series": "Pet" + }, + { + "Date": "2021-07-01", + "Value": 776, + "Series": "Pet" + }, + { + "Date": "2021-07-06", + "Value": 759, + "Series": "Pet" + }, + { + "Date": "2021-07-12", + "Value": 743, + "Series": "Pet" + }, + { + "Date": "2021-07-17", + "Value": 716, + "Series": "Pet" + }, + { + "Date": "2021-07-23", + "Value": 681, + "Series": "Pet" + }, + { + "Date": "2021-07-28", + "Value": 655, + "Series": "Pet" + }, + { + "Date": "2021-08-03", + "Value": 624, + "Series": "Pet" + }, + { + "Date": "2021-08-08", + "Value": 616, + "Series": "Pet" + }, + { + "Date": "2021-08-14", + "Value": 610, + "Series": "Pet" + }, + { + "Date": "2021-08-19", + "Value": 587, + "Series": "Pet" + }, + { + "Date": "2021-08-25", + "Value": 564, + "Series": "Pet" + }, + { + "Date": "2021-08-30", + "Value": 533, + "Series": "Pet" + }, + { + "Date": "2021-09-05", + "Value": 500, + "Series": "Pet" + }, + { + "Date": "2021-09-10", + "Value": 486, + "Series": "Pet" + }, + { + "Date": "2021-09-16", + "Value": 492, + "Series": "Pet" + }, + { + "Date": "2021-09-21", + "Value": 509, + "Series": "Pet" + }, + { + "Date": "2021-09-27", + "Value": 507, + "Series": "Pet" + }, + { + "Date": "2021-10-02", + "Value": 487, + "Series": "Pet" + }, + { + "Date": "2021-10-08", + "Value": 460, + "Series": "Pet" + }, + { + "Date": "2021-10-13", + "Value": 424, + "Series": "Pet" + }, + { + "Date": "2021-10-19", + "Value": 380, + "Series": "Pet" + }, + { + "Date": "2021-10-24", + "Value": 366, + "Series": "Pet" + }, + { + "Date": "2021-10-29", + "Value": 359, + "Series": "Pet" + }, + { + "Date": "2021-11-04", + "Value": 357, + "Series": "Pet" + }, + { + "Date": "2021-11-09", + "Value": 353, + "Series": "Pet" + }, + { + "Date": "2021-11-15", + "Value": 368, + "Series": "Pet" + }, + { + "Date": "2021-11-20", + "Value": 376, + "Series": "Pet" + }, + { + "Date": "2021-11-26", + "Value": 398, + "Series": "Pet" + }, + { + "Date": "2021-12-01", + "Value": 399, + "Series": "Pet" + }, + { + "Date": "2021-12-07", + "Value": 391, + "Series": "Pet" + }, + { + "Date": "2021-12-12", + "Value": 371, + "Series": "Pet" + }, + { + "Date": "2021-12-18", + "Value": 347, + "Series": "Pet" + }, + { + "Date": "2021-12-23", + "Value": 319, + "Series": "Pet" + }, + { + "Date": "2021-12-29", + "Value": 298, + "Series": "Pet" + }, + { + "Date": "2022-01-03", + "Value": 271, + "Series": "Pet" + }, + { + "Date": "2022-01-09", + "Value": 254, + "Series": "Pet" + }, + { + "Date": "2022-01-14", + "Value": 229, + "Series": "Pet" + }, + { + "Date": "2022-01-20", + "Value": 194, + "Series": "Pet" + }, + { + "Date": "2022-01-25", + "Value": 175, + "Series": "Pet" + }, + { + "Date": "2022-01-31", + "Value": 177, + "Series": "Pet" + }, + { + "Date": "2022-02-05", + "Value": 170, + "Series": "Pet" + }, + { + "Date": "2022-02-10", + "Value": 177, + "Series": "Pet" + }, + { + "Date": "2022-02-16", + "Value": 199, + "Series": "Pet" + }, + { + "Date": "2022-02-21", + "Value": 213, + "Series": "Pet" + }, + { + "Date": "2022-02-27", + "Value": 212, + "Series": "Pet" + }, + { + "Date": "2022-03-04", + "Value": 202, + "Series": "Pet" + }, + { + "Date": "2022-03-10", + "Value": 194, + "Series": "Pet" + }, + { + "Date": "2022-03-15", + "Value": 173, + "Series": "Pet" + }, + { + "Date": "2022-03-21", + "Value": 160, + "Series": "Pet" + }, + { + "Date": "2022-03-26", + "Value": 140, + "Series": "Pet" + }, + { + "Date": "2022-04-01", + "Value": 131, + "Series": "Pet" + }, + { + "Date": "2022-04-06", + "Value": 128, + "Series": "Pet" + }, + { + "Date": "2022-04-12", + "Value": 111, + "Series": "Pet" + }, + { + "Date": "2022-04-17", + "Value": 96, + "Series": "Pet" + }, + { + "Date": "2022-04-23", + "Value": 104, + "Series": "Pet" + }, + { + "Date": "2022-04-28", + "Value": 119, + "Series": "Pet" + }, + { + "Date": "2022-05-04", + "Value": 136, + "Series": "Pet" + }, + { + "Date": "2022-05-09", + "Value": 156, + "Series": "Pet" + }, + { + "Date": "2022-05-15", + "Value": 175, + "Series": "Pet" + }, + { + "Date": "2022-05-20", + "Value": 197, + "Series": "Pet" + }, + { + "Date": "2022-05-26", + "Value": 227, + "Series": "Pet" + }, + { + "Date": "2022-05-31", + "Value": 229, + "Series": "Pet" + }, + { + "Date": "2022-06-05", + "Value": 248, + "Series": "Pet" + }, + { + "Date": "2022-06-11", + "Value": 242, + "Series": "Pet" + }, + { + "Date": "2022-06-16", + "Value": 223, + "Series": "Pet" + }, + { + "Date": "2022-06-22", + "Value": 200, + "Series": "Pet" + }, + { + "Date": "2022-06-27", + "Value": 167, + "Series": "Pet" + }, + { + "Date": "2022-07-03", + "Value": 145, + "Series": "Pet" + }, + { + "Date": "2022-07-08", + "Value": 127, + "Series": "Pet" + }, + { + "Date": "2022-07-14", + "Value": 111, + "Series": "Pet" + }, + { + "Date": "2022-07-19", + "Value": 105, + "Series": "Pet" + }, + { + "Date": "2022-07-25", + "Value": 87, + "Series": "Pet" + }, + { + "Date": "2022-07-30", + "Value": 66, + "Series": "Pet" + }, + { + "Date": "2022-08-05", + "Value": 51, + "Series": "Pet" + }, + { + "Date": "2022-08-10", + "Value": 33, + "Series": "Pet" + }, + { + "Date": "2022-08-16", + "Value": 38, + "Series": "Pet" + }, + { + "Date": "2022-08-21", + "Value": 25, + "Series": "Pet" + }, + { + "Date": "2022-08-27", + "Value": 6, + "Series": "Pet" + }, + { + "Date": "2022-09-01", + "Value": 0, + "Series": "Pet" + }, + { + "Date": "2022-09-07", + "Value": 0, + "Series": "Pet" + }, + { + "Date": "2022-09-12", + "Value": 0, + "Series": "Pet" + }, + { + "Date": "2022-09-17", + "Value": 0, + "Series": "Pet" + }, + { + "Date": "2022-09-23", + "Value": 0, + "Series": "Pet" + }, + { + "Date": "2022-09-28", + "Value": 10, + "Series": "Pet" + }, + { + "Date": "2022-10-04", + "Value": 34, + "Series": "Pet" + }, + { + "Date": "2022-10-09", + "Value": 70, + "Series": "Pet" + }, + { + "Date": "2022-10-15", + "Value": 92, + "Series": "Pet" + }, + { + "Date": "2022-10-20", + "Value": 88, + "Series": "Pet" + }, + { + "Date": "2022-10-26", + "Value": 82, + "Series": "Pet" + }, + { + "Date": "2022-10-31", + "Value": 62, + "Series": "Pet" + }, + { + "Date": "2022-11-06", + "Value": 58, + "Series": "Pet" + }, + { + "Date": "2022-11-11", + "Value": 50, + "Series": "Pet" + }, + { + "Date": "2022-11-17", + "Value": 54, + "Series": "Pet" + }, + { + "Date": "2022-11-22", + "Value": 76, + "Series": "Pet" + }, + { + "Date": "2022-11-28", + "Value": 96, + "Series": "Pet" + }, + { + "Date": "2022-12-03", + "Value": 126, + "Series": "Pet" + }, + { + "Date": "2022-12-09", + "Value": 165, + "Series": "Pet" + }, + { + "Date": "2022-12-14", + "Value": 182, + "Series": "Pet" + }, + { + "Date": "2022-12-20", + "Value": 176, + "Series": "Pet" + }, + { + "Date": "2022-12-25", + "Value": 162, + "Series": "Pet" + }, + { + "Date": "2020-01-01", + "Value": 181, + "Series": "Baby" + }, + { + "Date": "2020-01-06", + "Value": 172, + "Series": "Baby" + }, + { + "Date": "2020-01-11", + "Value": 161, + "Series": "Baby" + }, + { + "Date": "2020-01-17", + "Value": 164, + "Series": "Baby" + }, + { + "Date": "2020-01-22", + "Value": 163, + "Series": "Baby" + }, + { + "Date": "2020-01-28", + "Value": 155, + "Series": "Baby" + }, + { + "Date": "2020-02-02", + "Value": 136, + "Series": "Baby" + }, + { + "Date": "2020-02-08", + "Value": 117, + "Series": "Baby" + }, + { + "Date": "2020-02-13", + "Value": 109, + "Series": "Baby" + }, + { + "Date": "2020-02-19", + "Value": 112, + "Series": "Baby" + }, + { + "Date": "2020-02-24", + "Value": 105, + "Series": "Baby" + }, + { + "Date": "2020-03-01", + "Value": 99, + "Series": "Baby" + }, + { + "Date": "2020-03-06", + "Value": 84, + "Series": "Baby" + }, + { + "Date": "2020-03-12", + "Value": 60, + "Series": "Baby" + }, + { + "Date": "2020-03-17", + "Value": 31, + "Series": "Baby" + }, + { + "Date": "2020-03-23", + "Value": 18, + "Series": "Baby" + }, + { + "Date": "2020-03-28", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2020-04-03", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2020-04-08", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2020-04-14", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2020-04-19", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2020-04-24", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2020-04-30", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2020-05-05", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2020-05-11", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2020-05-16", + "Value": 2, + "Series": "Baby" + }, + { + "Date": "2020-05-22", + "Value": 13, + "Series": "Baby" + }, + { + "Date": "2020-05-27", + "Value": 28, + "Series": "Baby" + }, + { + "Date": "2020-06-02", + "Value": 39, + "Series": "Baby" + }, + { + "Date": "2020-06-07", + "Value": 37, + "Series": "Baby" + }, + { + "Date": "2020-06-13", + "Value": 33, + "Series": "Baby" + }, + { + "Date": "2020-06-18", + "Value": 26, + "Series": "Baby" + }, + { + "Date": "2020-06-24", + "Value": 28, + "Series": "Baby" + }, + { + "Date": "2020-06-29", + "Value": 26, + "Series": "Baby" + }, + { + "Date": "2020-07-05", + "Value": 19, + "Series": "Baby" + }, + { + "Date": "2020-07-10", + "Value": 22, + "Series": "Baby" + }, + { + "Date": "2020-07-16", + "Value": 31, + "Series": "Baby" + }, + { + "Date": "2020-07-21", + "Value": 42, + "Series": "Baby" + }, + { + "Date": "2020-07-27", + "Value": 35, + "Series": "Baby" + }, + { + "Date": "2020-08-01", + "Value": 32, + "Series": "Baby" + }, + { + "Date": "2020-08-07", + "Value": 29, + "Series": "Baby" + }, + { + "Date": "2020-08-12", + "Value": 36, + "Series": "Baby" + }, + { + "Date": "2020-08-17", + "Value": 51, + "Series": "Baby" + }, + { + "Date": "2020-08-23", + "Value": 60, + "Series": "Baby" + }, + { + "Date": "2020-08-28", + "Value": 73, + "Series": "Baby" + }, + { + "Date": "2020-09-03", + "Value": 70, + "Series": "Baby" + }, + { + "Date": "2020-09-08", + "Value": 64, + "Series": "Baby" + }, + { + "Date": "2020-09-14", + "Value": 54, + "Series": "Baby" + }, + { + "Date": "2020-09-19", + "Value": 42, + "Series": "Baby" + }, + { + "Date": "2020-09-25", + "Value": 48, + "Series": "Baby" + }, + { + "Date": "2020-09-30", + "Value": 50, + "Series": "Baby" + }, + { + "Date": "2020-10-06", + "Value": 48, + "Series": "Baby" + }, + { + "Date": "2020-10-11", + "Value": 44, + "Series": "Baby" + }, + { + "Date": "2020-10-17", + "Value": 56, + "Series": "Baby" + }, + { + "Date": "2020-10-22", + "Value": 58, + "Series": "Baby" + }, + { + "Date": "2020-10-28", + "Value": 58, + "Series": "Baby" + }, + { + "Date": "2020-11-02", + "Value": 59, + "Series": "Baby" + }, + { + "Date": "2020-11-08", + "Value": 70, + "Series": "Baby" + }, + { + "Date": "2020-11-13", + "Value": 66, + "Series": "Baby" + }, + { + "Date": "2020-11-19", + "Value": 54, + "Series": "Baby" + }, + { + "Date": "2020-11-24", + "Value": 55, + "Series": "Baby" + }, + { + "Date": "2020-11-29", + "Value": 54, + "Series": "Baby" + }, + { + "Date": "2020-12-05", + "Value": 40, + "Series": "Baby" + }, + { + "Date": "2020-12-10", + "Value": 16, + "Series": "Baby" + }, + { + "Date": "2020-12-16", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2020-12-21", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2020-12-27", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2021-01-01", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2021-01-07", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2021-01-12", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2021-01-18", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2021-01-23", + "Value": 7, + "Series": "Baby" + }, + { + "Date": "2021-01-29", + "Value": 5, + "Series": "Baby" + }, + { + "Date": "2021-02-03", + "Value": 8, + "Series": "Baby" + }, + { + "Date": "2021-02-09", + "Value": 2, + "Series": "Baby" + }, + { + "Date": "2021-02-14", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2021-02-20", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2021-02-25", + "Value": 0, + "Series": "Baby" + }, + { + "Date": "2021-03-03", + "Value": 11, + "Series": "Baby" + }, + { + "Date": "2021-03-08", + "Value": 32, + "Series": "Baby" + }, + { + "Date": "2021-03-14", + "Value": 34, + "Series": "Baby" + }, + { + "Date": "2021-03-19", + "Value": 43, + "Series": "Baby" + }, + { + "Date": "2021-03-24", + "Value": 61, + "Series": "Baby" + }, + { + "Date": "2021-03-30", + "Value": 60, + "Series": "Baby" + }, + { + "Date": "2021-04-04", + "Value": 60, + "Series": "Baby" + }, + { + "Date": "2021-04-10", + "Value": 73, + "Series": "Baby" + }, + { + "Date": "2021-04-15", + "Value": 91, + "Series": "Baby" + }, + { + "Date": "2021-04-21", + "Value": 105, + "Series": "Baby" + }, + { + "Date": "2021-04-26", + "Value": 125, + "Series": "Baby" + }, + { + "Date": "2021-05-02", + "Value": 138, + "Series": "Baby" + }, + { + "Date": "2021-05-07", + "Value": 145, + "Series": "Baby" + }, + { + "Date": "2021-05-13", + "Value": 144, + "Series": "Baby" + }, + { + "Date": "2021-05-18", + "Value": 142, + "Series": "Baby" + }, + { + "Date": "2021-05-24", + "Value": 155, + "Series": "Baby" + }, + { + "Date": "2021-05-29", + "Value": 166, + "Series": "Baby" + }, + { + "Date": "2021-06-04", + "Value": 184, + "Series": "Baby" + }, + { + "Date": "2021-06-09", + "Value": 194, + "Series": "Baby" + }, + { + "Date": "2021-06-15", + "Value": 212, + "Series": "Baby" + }, + { + "Date": "2021-06-20", + "Value": 212, + "Series": "Baby" + }, + { + "Date": "2021-06-26", + "Value": 204, + "Series": "Baby" + }, + { + "Date": "2021-07-01", + "Value": 201, + "Series": "Baby" + }, + { + "Date": "2021-07-06", + "Value": 200, + "Series": "Baby" + }, + { + "Date": "2021-07-12", + "Value": 205, + "Series": "Baby" + }, + { + "Date": "2021-07-17", + "Value": 210, + "Series": "Baby" + }, + { + "Date": "2021-07-23", + "Value": 221, + "Series": "Baby" + }, + { + "Date": "2021-07-28", + "Value": 233, + "Series": "Baby" + }, + { + "Date": "2021-08-03", + "Value": 236, + "Series": "Baby" + }, + { + "Date": "2021-08-08", + "Value": 240, + "Series": "Baby" + }, + { + "Date": "2021-08-14", + "Value": 250, + "Series": "Baby" + }, + { + "Date": "2021-08-19", + "Value": 252, + "Series": "Baby" + }, + { + "Date": "2021-08-25", + "Value": 248, + "Series": "Baby" + }, + { + "Date": "2021-08-30", + "Value": 254, + "Series": "Baby" + }, + { + "Date": "2021-09-05", + "Value": 261, + "Series": "Baby" + }, + { + "Date": "2021-09-10", + "Value": 253, + "Series": "Baby" + }, + { + "Date": "2021-09-16", + "Value": 255, + "Series": "Baby" + }, + { + "Date": "2021-09-21", + "Value": 260, + "Series": "Baby" + }, + { + "Date": "2021-09-27", + "Value": 258, + "Series": "Baby" + }, + { + "Date": "2021-10-02", + "Value": 251, + "Series": "Baby" + }, + { + "Date": "2021-10-08", + "Value": 252, + "Series": "Baby" + }, + { + "Date": "2021-10-13", + "Value": 255, + "Series": "Baby" + }, + { + "Date": "2021-10-19", + "Value": 256, + "Series": "Baby" + }, + { + "Date": "2021-10-24", + "Value": 248, + "Series": "Baby" + }, + { + "Date": "2021-10-29", + "Value": 238, + "Series": "Baby" + }, + { + "Date": "2021-11-04", + "Value": 222, + "Series": "Baby" + }, + { + "Date": "2021-11-09", + "Value": 198, + "Series": "Baby" + }, + { + "Date": "2021-11-15", + "Value": 167, + "Series": "Baby" + }, + { + "Date": "2021-11-20", + "Value": 139, + "Series": "Baby" + }, + { + "Date": "2021-11-26", + "Value": 118, + "Series": "Baby" + }, + { + "Date": "2021-12-01", + "Value": 107, + "Series": "Baby" + }, + { + "Date": "2021-12-07", + "Value": 112, + "Series": "Baby" + }, + { + "Date": "2021-12-12", + "Value": 123, + "Series": "Baby" + }, + { + "Date": "2021-12-18", + "Value": 126, + "Series": "Baby" + }, + { + "Date": "2021-12-23", + "Value": 134, + "Series": "Baby" + }, + { + "Date": "2021-12-29", + "Value": 129, + "Series": "Baby" + }, + { + "Date": "2022-01-03", + "Value": 112, + "Series": "Baby" + }, + { + "Date": "2022-01-09", + "Value": 115, + "Series": "Baby" + }, + { + "Date": "2022-01-14", + "Value": 106, + "Series": "Baby" + }, + { + "Date": "2022-01-20", + "Value": 105, + "Series": "Baby" + }, + { + "Date": "2022-01-25", + "Value": 111, + "Series": "Baby" + }, + { + "Date": "2022-01-31", + "Value": 105, + "Series": "Baby" + }, + { + "Date": "2022-02-05", + "Value": 106, + "Series": "Baby" + }, + { + "Date": "2022-02-10", + "Value": 101, + "Series": "Baby" + }, + { + "Date": "2022-02-16", + "Value": 97, + "Series": "Baby" + }, + { + "Date": "2022-02-21", + "Value": 92, + "Series": "Baby" + }, + { + "Date": "2022-02-27", + "Value": 88, + "Series": "Baby" + }, + { + "Date": "2022-03-04", + "Value": 81, + "Series": "Baby" + }, + { + "Date": "2022-03-10", + "Value": 82, + "Series": "Baby" + }, + { + "Date": "2022-03-15", + "Value": 79, + "Series": "Baby" + }, + { + "Date": "2022-03-21", + "Value": 83, + "Series": "Baby" + }, + { + "Date": "2022-03-26", + "Value": 84, + "Series": "Baby" + }, + { + "Date": "2022-04-01", + "Value": 81, + "Series": "Baby" + }, + { + "Date": "2022-04-06", + "Value": 93, + "Series": "Baby" + }, + { + "Date": "2022-04-12", + "Value": 98, + "Series": "Baby" + }, + { + "Date": "2022-04-17", + "Value": 96, + "Series": "Baby" + }, + { + "Date": "2022-04-23", + "Value": 90, + "Series": "Baby" + }, + { + "Date": "2022-04-28", + "Value": 88, + "Series": "Baby" + }, + { + "Date": "2022-05-04", + "Value": 90, + "Series": "Baby" + }, + { + "Date": "2022-05-09", + "Value": 94, + "Series": "Baby" + }, + { + "Date": "2022-05-15", + "Value": 110, + "Series": "Baby" + }, + { + "Date": "2022-05-20", + "Value": 118, + "Series": "Baby" + }, + { + "Date": "2022-05-26", + "Value": 125, + "Series": "Baby" + }, + { + "Date": "2022-05-31", + "Value": 135, + "Series": "Baby" + }, + { + "Date": "2022-06-05", + "Value": 133, + "Series": "Baby" + }, + { + "Date": "2022-06-11", + "Value": 119, + "Series": "Baby" + }, + { + "Date": "2022-06-16", + "Value": 98, + "Series": "Baby" + }, + { + "Date": "2022-06-22", + "Value": 81, + "Series": "Baby" + }, + { + "Date": "2022-06-27", + "Value": 56, + "Series": "Baby" + }, + { + "Date": "2022-07-03", + "Value": 52, + "Series": "Baby" + }, + { + "Date": "2022-07-08", + "Value": 45, + "Series": "Baby" + }, + { + "Date": "2022-07-14", + "Value": 54, + "Series": "Baby" + }, + { + "Date": "2022-07-19", + "Value": 69, + "Series": "Baby" + }, + { + "Date": "2022-07-25", + "Value": 90, + "Series": "Baby" + }, + { + "Date": "2022-07-30", + "Value": 100, + "Series": "Baby" + }, + { + "Date": "2022-08-05", + "Value": 101, + "Series": "Baby" + }, + { + "Date": "2022-08-10", + "Value": 109, + "Series": "Baby" + }, + { + "Date": "2022-08-16", + "Value": 111, + "Series": "Baby" + }, + { + "Date": "2022-08-21", + "Value": 126, + "Series": "Baby" + }, + { + "Date": "2022-08-27", + "Value": 124, + "Series": "Baby" + }, + { + "Date": "2022-09-01", + "Value": 123, + "Series": "Baby" + }, + { + "Date": "2022-09-07", + "Value": 111, + "Series": "Baby" + }, + { + "Date": "2022-09-12", + "Value": 117, + "Series": "Baby" + }, + { + "Date": "2022-09-17", + "Value": 127, + "Series": "Baby" + }, + { + "Date": "2022-09-23", + "Value": 127, + "Series": "Baby" + }, + { + "Date": "2022-09-28", + "Value": 119, + "Series": "Baby" + }, + { + "Date": "2022-10-04", + "Value": 104, + "Series": "Baby" + }, + { + "Date": "2022-10-09", + "Value": 79, + "Series": "Baby" + }, + { + "Date": "2022-10-15", + "Value": 57, + "Series": "Baby" + }, + { + "Date": "2022-10-20", + "Value": 50, + "Series": "Baby" + }, + { + "Date": "2022-10-26", + "Value": 36, + "Series": "Baby" + }, + { + "Date": "2022-10-31", + "Value": 25, + "Series": "Baby" + }, + { + "Date": "2022-11-06", + "Value": 29, + "Series": "Baby" + }, + { + "Date": "2022-11-11", + "Value": 44, + "Series": "Baby" + }, + { + "Date": "2022-11-17", + "Value": 66, + "Series": "Baby" + }, + { + "Date": "2022-11-22", + "Value": 81, + "Series": "Baby" + }, + { + "Date": "2022-11-28", + "Value": 83, + "Series": "Baby" + }, + { + "Date": "2022-12-03", + "Value": 87, + "Series": "Baby" + }, + { + "Date": "2022-12-09", + "Value": 99, + "Series": "Baby" + }, + { + "Date": "2022-12-14", + "Value": 119, + "Series": "Baby" + }, + { + "Date": "2022-12-20", + "Value": 121, + "Series": "Baby" + }, + { + "Date": "2022-12-25", + "Value": 124, + "Series": "Baby" + }, + { + "Date": "2020-01-01", + "Value": 74, + "Series": "Tools" + }, + { + "Date": "2020-01-06", + "Value": 87, + "Series": "Tools" + }, + { + "Date": "2020-01-11", + "Value": 96, + "Series": "Tools" + }, + { + "Date": "2020-01-17", + "Value": 90, + "Series": "Tools" + }, + { + "Date": "2020-01-22", + "Value": 74, + "Series": "Tools" + }, + { + "Date": "2020-01-28", + "Value": 60, + "Series": "Tools" + }, + { + "Date": "2020-02-02", + "Value": 48, + "Series": "Tools" + }, + { + "Date": "2020-02-08", + "Value": 54, + "Series": "Tools" + }, + { + "Date": "2020-02-13", + "Value": 65, + "Series": "Tools" + }, + { + "Date": "2020-02-19", + "Value": 83, + "Series": "Tools" + }, + { + "Date": "2020-02-24", + "Value": 88, + "Series": "Tools" + }, + { + "Date": "2020-03-01", + "Value": 104, + "Series": "Tools" + }, + { + "Date": "2020-03-06", + "Value": 104, + "Series": "Tools" + }, + { + "Date": "2020-03-12", + "Value": 99, + "Series": "Tools" + }, + { + "Date": "2020-03-17", + "Value": 99, + "Series": "Tools" + }, + { + "Date": "2020-03-23", + "Value": 113, + "Series": "Tools" + }, + { + "Date": "2020-03-28", + "Value": 114, + "Series": "Tools" + }, + { + "Date": "2020-04-03", + "Value": 110, + "Series": "Tools" + }, + { + "Date": "2020-04-08", + "Value": 106, + "Series": "Tools" + }, + { + "Date": "2020-04-14", + "Value": 97, + "Series": "Tools" + }, + { + "Date": "2020-04-19", + "Value": 93, + "Series": "Tools" + }, + { + "Date": "2020-04-24", + "Value": 86, + "Series": "Tools" + }, + { + "Date": "2020-04-30", + "Value": 80, + "Series": "Tools" + }, + { + "Date": "2020-05-05", + "Value": 72, + "Series": "Tools" + }, + { + "Date": "2020-05-11", + "Value": 55, + "Series": "Tools" + }, + { + "Date": "2020-05-16", + "Value": 58, + "Series": "Tools" + }, + { + "Date": "2020-05-22", + "Value": 64, + "Series": "Tools" + }, + { + "Date": "2020-05-27", + "Value": 72, + "Series": "Tools" + }, + { + "Date": "2020-06-02", + "Value": 83, + "Series": "Tools" + }, + { + "Date": "2020-06-07", + "Value": 100, + "Series": "Tools" + }, + { + "Date": "2020-06-13", + "Value": 106, + "Series": "Tools" + }, + { + "Date": "2020-06-18", + "Value": 104, + "Series": "Tools" + }, + { + "Date": "2020-06-24", + "Value": 110, + "Series": "Tools" + }, + { + "Date": "2020-06-29", + "Value": 114, + "Series": "Tools" + }, + { + "Date": "2020-07-05", + "Value": 121, + "Series": "Tools" + }, + { + "Date": "2020-07-10", + "Value": 128, + "Series": "Tools" + }, + { + "Date": "2020-07-16", + "Value": 124, + "Series": "Tools" + }, + { + "Date": "2020-07-21", + "Value": 128, + "Series": "Tools" + }, + { + "Date": "2020-07-27", + "Value": 125, + "Series": "Tools" + }, + { + "Date": "2020-08-01", + "Value": 125, + "Series": "Tools" + }, + { + "Date": "2020-08-07", + "Value": 132, + "Series": "Tools" + }, + { + "Date": "2020-08-12", + "Value": 128, + "Series": "Tools" + }, + { + "Date": "2020-08-17", + "Value": 127, + "Series": "Tools" + }, + { + "Date": "2020-08-23", + "Value": 122, + "Series": "Tools" + }, + { + "Date": "2020-08-28", + "Value": 119, + "Series": "Tools" + }, + { + "Date": "2020-09-03", + "Value": 103, + "Series": "Tools" + }, + { + "Date": "2020-09-08", + "Value": 94, + "Series": "Tools" + }, + { + "Date": "2020-09-14", + "Value": 84, + "Series": "Tools" + }, + { + "Date": "2020-09-19", + "Value": 75, + "Series": "Tools" + }, + { + "Date": "2020-09-25", + "Value": 66, + "Series": "Tools" + }, + { + "Date": "2020-09-30", + "Value": 66, + "Series": "Tools" + }, + { + "Date": "2020-10-06", + "Value": 80, + "Series": "Tools" + }, + { + "Date": "2020-10-11", + "Value": 97, + "Series": "Tools" + }, + { + "Date": "2020-10-17", + "Value": 110, + "Series": "Tools" + }, + { + "Date": "2020-10-22", + "Value": 133, + "Series": "Tools" + }, + { + "Date": "2020-10-28", + "Value": 140, + "Series": "Tools" + }, + { + "Date": "2020-11-02", + "Value": 154, + "Series": "Tools" + }, + { + "Date": "2020-11-08", + "Value": 163, + "Series": "Tools" + }, + { + "Date": "2020-11-13", + "Value": 161, + "Series": "Tools" + }, + { + "Date": "2020-11-19", + "Value": 156, + "Series": "Tools" + }, + { + "Date": "2020-11-24", + "Value": 145, + "Series": "Tools" + }, + { + "Date": "2020-11-29", + "Value": 137, + "Series": "Tools" + }, + { + "Date": "2020-12-05", + "Value": 139, + "Series": "Tools" + }, + { + "Date": "2020-12-10", + "Value": 133, + "Series": "Tools" + }, + { + "Date": "2020-12-16", + "Value": 135, + "Series": "Tools" + }, + { + "Date": "2020-12-21", + "Value": 126, + "Series": "Tools" + }, + { + "Date": "2020-12-27", + "Value": 111, + "Series": "Tools" + }, + { + "Date": "2021-01-01", + "Value": 105, + "Series": "Tools" + }, + { + "Date": "2021-01-07", + "Value": 94, + "Series": "Tools" + }, + { + "Date": "2021-01-12", + "Value": 74, + "Series": "Tools" + }, + { + "Date": "2021-01-18", + "Value": 67, + "Series": "Tools" + }, + { + "Date": "2021-01-23", + "Value": 68, + "Series": "Tools" + }, + { + "Date": "2021-01-29", + "Value": 56, + "Series": "Tools" + }, + { + "Date": "2021-02-03", + "Value": 41, + "Series": "Tools" + }, + { + "Date": "2021-02-09", + "Value": 29, + "Series": "Tools" + }, + { + "Date": "2021-02-14", + "Value": 34, + "Series": "Tools" + }, + { + "Date": "2021-02-20", + "Value": 44, + "Series": "Tools" + }, + { + "Date": "2021-02-25", + "Value": 51, + "Series": "Tools" + }, + { + "Date": "2021-03-03", + "Value": 51, + "Series": "Tools" + }, + { + "Date": "2021-03-08", + "Value": 60, + "Series": "Tools" + }, + { + "Date": "2021-03-14", + "Value": 72, + "Series": "Tools" + }, + { + "Date": "2021-03-19", + "Value": 92, + "Series": "Tools" + }, + { + "Date": "2021-03-24", + "Value": 119, + "Series": "Tools" + }, + { + "Date": "2021-03-30", + "Value": 146, + "Series": "Tools" + }, + { + "Date": "2021-04-04", + "Value": 171, + "Series": "Tools" + }, + { + "Date": "2021-04-10", + "Value": 194, + "Series": "Tools" + }, + { + "Date": "2021-04-15", + "Value": 222, + "Series": "Tools" + }, + { + "Date": "2021-04-21", + "Value": 234, + "Series": "Tools" + }, + { + "Date": "2021-04-26", + "Value": 246, + "Series": "Tools" + }, + { + "Date": "2021-05-02", + "Value": 244, + "Series": "Tools" + }, + { + "Date": "2021-05-07", + "Value": 238, + "Series": "Tools" + }, + { + "Date": "2021-05-13", + "Value": 229, + "Series": "Tools" + }, + { + "Date": "2021-05-18", + "Value": 209, + "Series": "Tools" + }, + { + "Date": "2021-05-24", + "Value": 203, + "Series": "Tools" + }, + { + "Date": "2021-05-29", + "Value": 203, + "Series": "Tools" + }, + { + "Date": "2021-06-04", + "Value": 201, + "Series": "Tools" + }, + { + "Date": "2021-06-09", + "Value": 214, + "Series": "Tools" + }, + { + "Date": "2021-06-15", + "Value": 216, + "Series": "Tools" + }, + { + "Date": "2021-06-20", + "Value": 206, + "Series": "Tools" + }, + { + "Date": "2021-06-26", + "Value": 207, + "Series": "Tools" + }, + { + "Date": "2021-07-01", + "Value": 207, + "Series": "Tools" + }, + { + "Date": "2021-07-06", + "Value": 212, + "Series": "Tools" + }, + { + "Date": "2021-07-12", + "Value": 205, + "Series": "Tools" + }, + { + "Date": "2021-07-17", + "Value": 200, + "Series": "Tools" + }, + { + "Date": "2021-07-23", + "Value": 184, + "Series": "Tools" + }, + { + "Date": "2021-07-28", + "Value": 184, + "Series": "Tools" + }, + { + "Date": "2021-08-03", + "Value": 177, + "Series": "Tools" + }, + { + "Date": "2021-08-08", + "Value": 176, + "Series": "Tools" + }, + { + "Date": "2021-08-14", + "Value": 171, + "Series": "Tools" + }, + { + "Date": "2021-08-19", + "Value": 161, + "Series": "Tools" + }, + { + "Date": "2021-08-25", + "Value": 144, + "Series": "Tools" + }, + { + "Date": "2021-08-30", + "Value": 135, + "Series": "Tools" + }, + { + "Date": "2021-09-05", + "Value": 122, + "Series": "Tools" + }, + { + "Date": "2021-09-10", + "Value": 104, + "Series": "Tools" + }, + { + "Date": "2021-09-16", + "Value": 86, + "Series": "Tools" + }, + { + "Date": "2021-09-21", + "Value": 81, + "Series": "Tools" + }, + { + "Date": "2021-09-27", + "Value": 65, + "Series": "Tools" + }, + { + "Date": "2021-10-02", + "Value": 59, + "Series": "Tools" + }, + { + "Date": "2021-10-08", + "Value": 61, + "Series": "Tools" + }, + { + "Date": "2021-10-13", + "Value": 59, + "Series": "Tools" + }, + { + "Date": "2021-10-19", + "Value": 47, + "Series": "Tools" + }, + { + "Date": "2021-10-24", + "Value": 53, + "Series": "Tools" + }, + { + "Date": "2021-10-29", + "Value": 51, + "Series": "Tools" + }, + { + "Date": "2021-11-04", + "Value": 59, + "Series": "Tools" + }, + { + "Date": "2021-11-09", + "Value": 56, + "Series": "Tools" + }, + { + "Date": "2021-11-15", + "Value": 47, + "Series": "Tools" + }, + { + "Date": "2021-11-20", + "Value": 28, + "Series": "Tools" + }, + { + "Date": "2021-11-26", + "Value": 6, + "Series": "Tools" + }, + { + "Date": "2021-12-01", + "Value": 0, + "Series": "Tools" + }, + { + "Date": "2021-12-07", + "Value": 0, + "Series": "Tools" + }, + { + "Date": "2021-12-12", + "Value": 0, + "Series": "Tools" + }, + { + "Date": "2021-12-18", + "Value": 0, + "Series": "Tools" + }, + { + "Date": "2021-12-23", + "Value": 3, + "Series": "Tools" + }, + { + "Date": "2021-12-29", + "Value": 11, + "Series": "Tools" + }, + { + "Date": "2022-01-03", + "Value": 29, + "Series": "Tools" + }, + { + "Date": "2022-01-09", + "Value": 54, + "Series": "Tools" + }, + { + "Date": "2022-01-14", + "Value": 63, + "Series": "Tools" + }, + { + "Date": "2022-01-20", + "Value": 69, + "Series": "Tools" + }, + { + "Date": "2022-01-25", + "Value": 62, + "Series": "Tools" + }, + { + "Date": "2022-01-31", + "Value": 51, + "Series": "Tools" + }, + { + "Date": "2022-02-05", + "Value": 37, + "Series": "Tools" + }, + { + "Date": "2022-02-10", + "Value": 14, + "Series": "Tools" + }, + { + "Date": "2022-02-16", + "Value": 0, + "Series": "Tools" + }, + { + "Date": "2022-02-21", + "Value": 0, + "Series": "Tools" + }, + { + "Date": "2022-02-27", + "Value": 0, + "Series": "Tools" + }, + { + "Date": "2022-03-04", + "Value": 0, + "Series": "Tools" + }, + { + "Date": "2022-03-10", + "Value": 0, + "Series": "Tools" + }, + { + "Date": "2022-03-15", + "Value": 4, + "Series": "Tools" + }, + { + "Date": "2022-03-21", + "Value": 12, + "Series": "Tools" + }, + { + "Date": "2022-03-26", + "Value": 21, + "Series": "Tools" + }, + { + "Date": "2022-04-01", + "Value": 35, + "Series": "Tools" + }, + { + "Date": "2022-04-06", + "Value": 40, + "Series": "Tools" + }, + { + "Date": "2022-04-12", + "Value": 57, + "Series": "Tools" + }, + { + "Date": "2022-04-17", + "Value": 82, + "Series": "Tools" + }, + { + "Date": "2022-04-23", + "Value": 89, + "Series": "Tools" + }, + { + "Date": "2022-04-28", + "Value": 107, + "Series": "Tools" + }, + { + "Date": "2022-05-04", + "Value": 131, + "Series": "Tools" + }, + { + "Date": "2022-05-09", + "Value": 134, + "Series": "Tools" + }, + { + "Date": "2022-05-15", + "Value": 149, + "Series": "Tools" + }, + { + "Date": "2022-05-20", + "Value": 150, + "Series": "Tools" + }, + { + "Date": "2022-05-26", + "Value": 163, + "Series": "Tools" + }, + { + "Date": "2022-05-31", + "Value": 158, + "Series": "Tools" + }, + { + "Date": "2022-06-05", + "Value": 150, + "Series": "Tools" + }, + { + "Date": "2022-06-11", + "Value": 140, + "Series": "Tools" + }, + { + "Date": "2022-06-16", + "Value": 128, + "Series": "Tools" + }, + { + "Date": "2022-06-22", + "Value": 118, + "Series": "Tools" + }, + { + "Date": "2022-06-27", + "Value": 126, + "Series": "Tools" + }, + { + "Date": "2022-07-03", + "Value": 142, + "Series": "Tools" + }, + { + "Date": "2022-07-08", + "Value": 139, + "Series": "Tools" + }, + { + "Date": "2022-07-14", + "Value": 141, + "Series": "Tools" + }, + { + "Date": "2022-07-19", + "Value": 142, + "Series": "Tools" + }, + { + "Date": "2022-07-25", + "Value": 151, + "Series": "Tools" + }, + { + "Date": "2022-07-30", + "Value": 154, + "Series": "Tools" + }, + { + "Date": "2022-08-05", + "Value": 167, + "Series": "Tools" + }, + { + "Date": "2022-08-10", + "Value": 170, + "Series": "Tools" + }, + { + "Date": "2022-08-16", + "Value": 179, + "Series": "Tools" + }, + { + "Date": "2022-08-21", + "Value": 190, + "Series": "Tools" + }, + { + "Date": "2022-08-27", + "Value": 210, + "Series": "Tools" + }, + { + "Date": "2022-09-01", + "Value": 224, + "Series": "Tools" + }, + { + "Date": "2022-09-07", + "Value": 239, + "Series": "Tools" + }, + { + "Date": "2022-09-12", + "Value": 254, + "Series": "Tools" + }, + { + "Date": "2022-09-17", + "Value": 257, + "Series": "Tools" + }, + { + "Date": "2022-09-23", + "Value": 259, + "Series": "Tools" + }, + { + "Date": "2022-09-28", + "Value": 254, + "Series": "Tools" + }, + { + "Date": "2022-10-04", + "Value": 253, + "Series": "Tools" + }, + { + "Date": "2022-10-09", + "Value": 248, + "Series": "Tools" + }, + { + "Date": "2022-10-15", + "Value": 252, + "Series": "Tools" + }, + { + "Date": "2022-10-20", + "Value": 245, + "Series": "Tools" + }, + { + "Date": "2022-10-26", + "Value": 227, + "Series": "Tools" + }, + { + "Date": "2022-10-31", + "Value": 212, + "Series": "Tools" + }, + { + "Date": "2022-11-06", + "Value": 205, + "Series": "Tools" + }, + { + "Date": "2022-11-11", + "Value": 210, + "Series": "Tools" + }, + { + "Date": "2022-11-17", + "Value": 226, + "Series": "Tools" + }, + { + "Date": "2022-11-22", + "Value": 226, + "Series": "Tools" + }, + { + "Date": "2022-11-28", + "Value": 238, + "Series": "Tools" + }, + { + "Date": "2022-12-03", + "Value": 233, + "Series": "Tools" + }, + { + "Date": "2022-12-09", + "Value": 243, + "Series": "Tools" + }, + { + "Date": "2022-12-14", + "Value": 256, + "Series": "Tools" + }, + { + "Date": "2022-12-20", + "Value": 274, + "Series": "Tools" + }, + { + "Date": "2022-12-25", + "Value": 284, + "Series": "Tools" + }, + { + "Date": "2020-01-01", + "Value": 242, + "Series": "Crafts" + }, + { + "Date": "2020-01-06", + "Value": 239, + "Series": "Crafts" + }, + { + "Date": "2020-01-11", + "Value": 235, + "Series": "Crafts" + }, + { + "Date": "2020-01-17", + "Value": 235, + "Series": "Crafts" + }, + { + "Date": "2020-01-22", + "Value": 226, + "Series": "Crafts" + }, + { + "Date": "2020-01-28", + "Value": 216, + "Series": "Crafts" + }, + { + "Date": "2020-02-02", + "Value": 212, + "Series": "Crafts" + }, + { + "Date": "2020-02-08", + "Value": 204, + "Series": "Crafts" + }, + { + "Date": "2020-02-13", + "Value": 204, + "Series": "Crafts" + }, + { + "Date": "2020-02-19", + "Value": 209, + "Series": "Crafts" + }, + { + "Date": "2020-02-24", + "Value": 204, + "Series": "Crafts" + }, + { + "Date": "2020-03-01", + "Value": 194, + "Series": "Crafts" + }, + { + "Date": "2020-03-06", + "Value": 178, + "Series": "Crafts" + }, + { + "Date": "2020-03-12", + "Value": 168, + "Series": "Crafts" + }, + { + "Date": "2020-03-17", + "Value": 161, + "Series": "Crafts" + }, + { + "Date": "2020-03-23", + "Value": 155, + "Series": "Crafts" + }, + { + "Date": "2020-03-28", + "Value": 146, + "Series": "Crafts" + }, + { + "Date": "2020-04-03", + "Value": 137, + "Series": "Crafts" + }, + { + "Date": "2020-04-08", + "Value": 137, + "Series": "Crafts" + }, + { + "Date": "2020-04-14", + "Value": 139, + "Series": "Crafts" + }, + { + "Date": "2020-04-19", + "Value": 143, + "Series": "Crafts" + }, + { + "Date": "2020-04-24", + "Value": 154, + "Series": "Crafts" + }, + { + "Date": "2020-04-30", + "Value": 157, + "Series": "Crafts" + }, + { + "Date": "2020-05-05", + "Value": 161, + "Series": "Crafts" + }, + { + "Date": "2020-05-11", + "Value": 170, + "Series": "Crafts" + }, + { + "Date": "2020-05-16", + "Value": 169, + "Series": "Crafts" + }, + { + "Date": "2020-05-22", + "Value": 168, + "Series": "Crafts" + }, + { + "Date": "2020-05-27", + "Value": 160, + "Series": "Crafts" + }, + { + "Date": "2020-06-02", + "Value": 154, + "Series": "Crafts" + }, + { + "Date": "2020-06-07", + "Value": 153, + "Series": "Crafts" + }, + { + "Date": "2020-06-13", + "Value": 149, + "Series": "Crafts" + }, + { + "Date": "2020-06-18", + "Value": 153, + "Series": "Crafts" + }, + { + "Date": "2020-06-24", + "Value": 163, + "Series": "Crafts" + }, + { + "Date": "2020-06-29", + "Value": 176, + "Series": "Crafts" + }, + { + "Date": "2020-07-05", + "Value": 178, + "Series": "Crafts" + }, + { + "Date": "2020-07-10", + "Value": 172, + "Series": "Crafts" + }, + { + "Date": "2020-07-16", + "Value": 166, + "Series": "Crafts" + }, + { + "Date": "2020-07-21", + "Value": 157, + "Series": "Crafts" + }, + { + "Date": "2020-07-27", + "Value": 148, + "Series": "Crafts" + }, + { + "Date": "2020-08-01", + "Value": 147, + "Series": "Crafts" + }, + { + "Date": "2020-08-07", + "Value": 148, + "Series": "Crafts" + }, + { + "Date": "2020-08-12", + "Value": 156, + "Series": "Crafts" + }, + { + "Date": "2020-08-17", + "Value": 158, + "Series": "Crafts" + }, + { + "Date": "2020-08-23", + "Value": 151, + "Series": "Crafts" + }, + { + "Date": "2020-08-28", + "Value": 151, + "Series": "Crafts" + }, + { + "Date": "2020-09-03", + "Value": 143, + "Series": "Crafts" + }, + { + "Date": "2020-09-08", + "Value": 135, + "Series": "Crafts" + }, + { + "Date": "2020-09-14", + "Value": 132, + "Series": "Crafts" + }, + { + "Date": "2020-09-19", + "Value": 132, + "Series": "Crafts" + }, + { + "Date": "2020-09-25", + "Value": 137, + "Series": "Crafts" + }, + { + "Date": "2020-09-30", + "Value": 149, + "Series": "Crafts" + }, + { + "Date": "2020-10-06", + "Value": 157, + "Series": "Crafts" + }, + { + "Date": "2020-10-11", + "Value": 156, + "Series": "Crafts" + }, + { + "Date": "2020-10-17", + "Value": 161, + "Series": "Crafts" + }, + { + "Date": "2020-10-22", + "Value": 170, + "Series": "Crafts" + }, + { + "Date": "2020-10-28", + "Value": 172, + "Series": "Crafts" + }, + { + "Date": "2020-11-02", + "Value": 177, + "Series": "Crafts" + }, + { + "Date": "2020-11-08", + "Value": 177, + "Series": "Crafts" + }, + { + "Date": "2020-11-13", + "Value": 170, + "Series": "Crafts" + }, + { + "Date": "2020-11-19", + "Value": 162, + "Series": "Crafts" + }, + { + "Date": "2020-11-24", + "Value": 162, + "Series": "Crafts" + }, + { + "Date": "2020-11-29", + "Value": 153, + "Series": "Crafts" + }, + { + "Date": "2020-12-05", + "Value": 154, + "Series": "Crafts" + }, + { + "Date": "2020-12-10", + "Value": 152, + "Series": "Crafts" + }, + { + "Date": "2020-12-16", + "Value": 152, + "Series": "Crafts" + }, + { + "Date": "2020-12-21", + "Value": 146, + "Series": "Crafts" + }, + { + "Date": "2020-12-27", + "Value": 149, + "Series": "Crafts" + }, + { + "Date": "2021-01-01", + "Value": 151, + "Series": "Crafts" + }, + { + "Date": "2021-01-07", + "Value": 153, + "Series": "Crafts" + }, + { + "Date": "2021-01-12", + "Value": 158, + "Series": "Crafts" + }, + { + "Date": "2021-01-18", + "Value": 162, + "Series": "Crafts" + }, + { + "Date": "2021-01-23", + "Value": 162, + "Series": "Crafts" + }, + { + "Date": "2021-01-29", + "Value": 159, + "Series": "Crafts" + }, + { + "Date": "2021-02-03", + "Value": 160, + "Series": "Crafts" + }, + { + "Date": "2021-02-09", + "Value": 159, + "Series": "Crafts" + }, + { + "Date": "2021-02-14", + "Value": 150, + "Series": "Crafts" + }, + { + "Date": "2021-02-20", + "Value": 137, + "Series": "Crafts" + }, + { + "Date": "2021-02-25", + "Value": 137, + "Series": "Crafts" + }, + { + "Date": "2021-03-03", + "Value": 144, + "Series": "Crafts" + }, + { + "Date": "2021-03-08", + "Value": 148, + "Series": "Crafts" + }, + { + "Date": "2021-03-14", + "Value": 150, + "Series": "Crafts" + }, + { + "Date": "2021-03-19", + "Value": 149, + "Series": "Crafts" + }, + { + "Date": "2021-03-24", + "Value": 148, + "Series": "Crafts" + }, + { + "Date": "2021-03-30", + "Value": 156, + "Series": "Crafts" + }, + { + "Date": "2021-04-04", + "Value": 169, + "Series": "Crafts" + }, + { + "Date": "2021-04-10", + "Value": 171, + "Series": "Crafts" + }, + { + "Date": "2021-04-15", + "Value": 174, + "Series": "Crafts" + }, + { + "Date": "2021-04-21", + "Value": 184, + "Series": "Crafts" + }, + { + "Date": "2021-04-26", + "Value": 184, + "Series": "Crafts" + }, + { + "Date": "2021-05-02", + "Value": 193, + "Series": "Crafts" + }, + { + "Date": "2021-05-07", + "Value": 202, + "Series": "Crafts" + }, + { + "Date": "2021-05-13", + "Value": 210, + "Series": "Crafts" + }, + { + "Date": "2021-05-18", + "Value": 207, + "Series": "Crafts" + }, + { + "Date": "2021-05-24", + "Value": 212, + "Series": "Crafts" + }, + { + "Date": "2021-05-29", + "Value": 207, + "Series": "Crafts" + }, + { + "Date": "2021-06-04", + "Value": 199, + "Series": "Crafts" + }, + { + "Date": "2021-06-09", + "Value": 190, + "Series": "Crafts" + }, + { + "Date": "2021-06-15", + "Value": 187, + "Series": "Crafts" + }, + { + "Date": "2021-06-20", + "Value": 191, + "Series": "Crafts" + }, + { + "Date": "2021-06-26", + "Value": 191, + "Series": "Crafts" + }, + { + "Date": "2021-07-01", + "Value": 186, + "Series": "Crafts" + }, + { + "Date": "2021-07-06", + "Value": 185, + "Series": "Crafts" + }, + { + "Date": "2021-07-12", + "Value": 180, + "Series": "Crafts" + }, + { + "Date": "2021-07-17", + "Value": 176, + "Series": "Crafts" + }, + { + "Date": "2021-07-23", + "Value": 169, + "Series": "Crafts" + }, + { + "Date": "2021-07-28", + "Value": 159, + "Series": "Crafts" + }, + { + "Date": "2021-08-03", + "Value": 154, + "Series": "Crafts" + }, + { + "Date": "2021-08-08", + "Value": 144, + "Series": "Crafts" + }, + { + "Date": "2021-08-14", + "Value": 141, + "Series": "Crafts" + }, + { + "Date": "2021-08-19", + "Value": 132, + "Series": "Crafts" + }, + { + "Date": "2021-08-25", + "Value": 134, + "Series": "Crafts" + }, + { + "Date": "2021-08-30", + "Value": 136, + "Series": "Crafts" + }, + { + "Date": "2021-09-05", + "Value": 131, + "Series": "Crafts" + }, + { + "Date": "2021-09-10", + "Value": 131, + "Series": "Crafts" + }, + { + "Date": "2021-09-16", + "Value": 139, + "Series": "Crafts" + }, + { + "Date": "2021-09-21", + "Value": 142, + "Series": "Crafts" + }, + { + "Date": "2021-09-27", + "Value": 137, + "Series": "Crafts" + }, + { + "Date": "2021-10-02", + "Value": 127, + "Series": "Crafts" + }, + { + "Date": "2021-10-08", + "Value": 112, + "Series": "Crafts" + }, + { + "Date": "2021-10-13", + "Value": 94, + "Series": "Crafts" + }, + { + "Date": "2021-10-19", + "Value": 75, + "Series": "Crafts" + }, + { + "Date": "2021-10-24", + "Value": 64, + "Series": "Crafts" + }, + { + "Date": "2021-10-29", + "Value": 64, + "Series": "Crafts" + }, + { + "Date": "2021-11-04", + "Value": 71, + "Series": "Crafts" + }, + { + "Date": "2021-11-09", + "Value": 70, + "Series": "Crafts" + }, + { + "Date": "2021-11-15", + "Value": 73, + "Series": "Crafts" + }, + { + "Date": "2021-11-20", + "Value": 74, + "Series": "Crafts" + }, + { + "Date": "2021-11-26", + "Value": 70, + "Series": "Crafts" + }, + { + "Date": "2021-12-01", + "Value": 74, + "Series": "Crafts" + }, + { + "Date": "2021-12-07", + "Value": 79, + "Series": "Crafts" + }, + { + "Date": "2021-12-12", + "Value": 77, + "Series": "Crafts" + }, + { + "Date": "2021-12-18", + "Value": 73, + "Series": "Crafts" + }, + { + "Date": "2021-12-23", + "Value": 78, + "Series": "Crafts" + }, + { + "Date": "2021-12-29", + "Value": 79, + "Series": "Crafts" + }, + { + "Date": "2022-01-03", + "Value": 81, + "Series": "Crafts" + }, + { + "Date": "2022-01-09", + "Value": 75, + "Series": "Crafts" + }, + { + "Date": "2022-01-14", + "Value": 78, + "Series": "Crafts" + }, + { + "Date": "2022-01-20", + "Value": 74, + "Series": "Crafts" + }, + { + "Date": "2022-01-25", + "Value": 63, + "Series": "Crafts" + }, + { + "Date": "2022-01-31", + "Value": 50, + "Series": "Crafts" + }, + { + "Date": "2022-02-05", + "Value": 38, + "Series": "Crafts" + }, + { + "Date": "2022-02-10", + "Value": 27, + "Series": "Crafts" + }, + { + "Date": "2022-02-16", + "Value": 26, + "Series": "Crafts" + }, + { + "Date": "2022-02-21", + "Value": 27, + "Series": "Crafts" + }, + { + "Date": "2022-02-27", + "Value": 29, + "Series": "Crafts" + }, + { + "Date": "2022-03-04", + "Value": 38, + "Series": "Crafts" + }, + { + "Date": "2022-03-10", + "Value": 49, + "Series": "Crafts" + }, + { + "Date": "2022-03-15", + "Value": 56, + "Series": "Crafts" + }, + { + "Date": "2022-03-21", + "Value": 69, + "Series": "Crafts" + }, + { + "Date": "2022-03-26", + "Value": 77, + "Series": "Crafts" + }, + { + "Date": "2022-04-01", + "Value": 75, + "Series": "Crafts" + }, + { + "Date": "2022-04-06", + "Value": 65, + "Series": "Crafts" + }, + { + "Date": "2022-04-12", + "Value": 61, + "Series": "Crafts" + }, + { + "Date": "2022-04-17", + "Value": 66, + "Series": "Crafts" + }, + { + "Date": "2022-04-23", + "Value": 74, + "Series": "Crafts" + }, + { + "Date": "2022-04-28", + "Value": 71, + "Series": "Crafts" + }, + { + "Date": "2022-05-04", + "Value": 72, + "Series": "Crafts" + }, + { + "Date": "2022-05-09", + "Value": 79, + "Series": "Crafts" + }, + { + "Date": "2022-05-15", + "Value": 91, + "Series": "Crafts" + }, + { + "Date": "2022-05-20", + "Value": 105, + "Series": "Crafts" + }, + { + "Date": "2022-05-26", + "Value": 107, + "Series": "Crafts" + }, + { + "Date": "2022-05-31", + "Value": 105, + "Series": "Crafts" + }, + { + "Date": "2022-06-05", + "Value": 104, + "Series": "Crafts" + }, + { + "Date": "2022-06-11", + "Value": 105, + "Series": "Crafts" + }, + { + "Date": "2022-06-16", + "Value": 114, + "Series": "Crafts" + }, + { + "Date": "2022-06-22", + "Value": 119, + "Series": "Crafts" + }, + { + "Date": "2022-06-27", + "Value": 120, + "Series": "Crafts" + }, + { + "Date": "2022-07-03", + "Value": 117, + "Series": "Crafts" + }, + { + "Date": "2022-07-08", + "Value": 123, + "Series": "Crafts" + }, + { + "Date": "2022-07-14", + "Value": 125, + "Series": "Crafts" + }, + { + "Date": "2022-07-19", + "Value": 120, + "Series": "Crafts" + }, + { + "Date": "2022-07-25", + "Value": 113, + "Series": "Crafts" + }, + { + "Date": "2022-07-30", + "Value": 113, + "Series": "Crafts" + }, + { + "Date": "2022-08-05", + "Value": 119, + "Series": "Crafts" + }, + { + "Date": "2022-08-10", + "Value": 128, + "Series": "Crafts" + }, + { + "Date": "2022-08-16", + "Value": 133, + "Series": "Crafts" + }, + { + "Date": "2022-08-21", + "Value": 133, + "Series": "Crafts" + }, + { + "Date": "2022-08-27", + "Value": 126, + "Series": "Crafts" + }, + { + "Date": "2022-09-01", + "Value": 124, + "Series": "Crafts" + }, + { + "Date": "2022-09-07", + "Value": 115, + "Series": "Crafts" + }, + { + "Date": "2022-09-12", + "Value": 114, + "Series": "Crafts" + }, + { + "Date": "2022-09-17", + "Value": 109, + "Series": "Crafts" + }, + { + "Date": "2022-09-23", + "Value": 108, + "Series": "Crafts" + }, + { + "Date": "2022-09-28", + "Value": 111, + "Series": "Crafts" + }, + { + "Date": "2022-10-04", + "Value": 121, + "Series": "Crafts" + }, + { + "Date": "2022-10-09", + "Value": 130, + "Series": "Crafts" + }, + { + "Date": "2022-10-15", + "Value": 140, + "Series": "Crafts" + }, + { + "Date": "2022-10-20", + "Value": 147, + "Series": "Crafts" + }, + { + "Date": "2022-10-26", + "Value": 159, + "Series": "Crafts" + }, + { + "Date": "2022-10-31", + "Value": 167, + "Series": "Crafts" + }, + { + "Date": "2022-11-06", + "Value": 179, + "Series": "Crafts" + }, + { + "Date": "2022-11-11", + "Value": 196, + "Series": "Crafts" + }, + { + "Date": "2022-11-17", + "Value": 211, + "Series": "Crafts" + }, + { + "Date": "2022-11-22", + "Value": 223, + "Series": "Crafts" + }, + { + "Date": "2022-11-28", + "Value": 232, + "Series": "Crafts" + }, + { + "Date": "2022-12-03", + "Value": 233, + "Series": "Crafts" + }, + { + "Date": "2022-12-09", + "Value": 236, + "Series": "Crafts" + }, + { + "Date": "2022-12-14", + "Value": 238, + "Series": "Crafts" + }, + { + "Date": "2022-12-20", + "Value": 248, + "Series": "Crafts" + }, + { + "Date": "2022-12-25", + "Value": 255, + "Series": "Crafts" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/04-card60.flint.json b/test-harness/excel/evaluations/inputs/line-chart/04-card60.flint.json new file mode 100644 index 00000000..4b4d4c31 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/04-card60.flint.json @@ -0,0 +1,733 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity", + "Series": "Category" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "Date", + "y": "Value", + "color": "Series" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 69, + "Series": "Electronics" + }, + { + "Date": "2020-01-19", + "Value": 67, + "Series": "Electronics" + }, + { + "Date": "2020-02-06", + "Value": 62, + "Series": "Electronics" + }, + { + "Date": "2020-02-24", + "Value": 56, + "Series": "Electronics" + }, + { + "Date": "2020-03-14", + "Value": 47, + "Series": "Electronics" + }, + { + "Date": "2020-05-26", + "Value": 21, + "Series": "Electronics" + }, + { + "Date": "2020-07-01", + "Value": 17, + "Series": "Electronics" + }, + { + "Date": "2020-08-07", + "Value": 17, + "Series": "Electronics" + }, + { + "Date": "2020-08-25", + "Value": 16, + "Series": "Electronics" + }, + { + "Date": "2020-09-12", + "Value": 17, + "Series": "Electronics" + }, + { + "Date": "2020-09-30", + "Value": 16, + "Series": "Electronics" + }, + { + "Date": "2020-10-19", + "Value": 20, + "Series": "Electronics" + }, + { + "Date": "2020-11-06", + "Value": 17, + "Series": "Electronics" + }, + { + "Date": "2020-11-24", + "Value": 22, + "Series": "Electronics" + }, + { + "Date": "2020-12-12", + "Value": 19, + "Series": "Electronics" + }, + { + "Date": "2020-12-31", + "Value": 15, + "Series": "Electronics" + }, + { + "Date": "2021-01-18", + "Value": 19, + "Series": "Electronics" + }, + { + "Date": "2021-02-05", + "Value": 25, + "Series": "Electronics" + }, + { + "Date": "2021-02-23", + "Value": 35, + "Series": "Electronics" + }, + { + "Date": "2021-04-01", + "Value": 50, + "Series": "Electronics" + }, + { + "Date": "2021-04-19", + "Value": 57, + "Series": "Electronics" + }, + { + "Date": "2021-05-26", + "Value": 71, + "Series": "Electronics" + }, + { + "Date": "2021-06-13", + "Value": 72, + "Series": "Electronics" + }, + { + "Date": "2021-07-01", + "Value": 74, + "Series": "Electronics" + }, + { + "Date": "2021-07-19", + "Value": 79, + "Series": "Electronics" + }, + { + "Date": "2021-08-07", + "Value": 90, + "Series": "Electronics" + }, + { + "Date": "2021-08-25", + "Value": 98, + "Series": "Electronics" + }, + { + "Date": "2021-09-12", + "Value": 98, + "Series": "Electronics" + }, + { + "Date": "2021-09-30", + "Value": 100, + "Series": "Electronics" + }, + { + "Date": "2021-10-19", + "Value": 105, + "Series": "Electronics" + }, + { + "Date": "2021-11-06", + "Value": 106, + "Series": "Electronics" + }, + { + "Date": "2021-12-12", + "Value": 97, + "Series": "Electronics" + }, + { + "Date": "2021-12-31", + "Value": 92, + "Series": "Electronics" + }, + { + "Date": "2022-01-18", + "Value": 85, + "Series": "Electronics" + }, + { + "Date": "2022-02-05", + "Value": 86, + "Series": "Electronics" + }, + { + "Date": "2022-02-23", + "Value": 85, + "Series": "Electronics" + }, + { + "Date": "2022-04-19", + "Value": 95, + "Series": "Electronics" + }, + { + "Date": "2022-05-07", + "Value": 92, + "Series": "Electronics" + }, + { + "Date": "2022-06-13", + "Value": 82, + "Series": "Electronics" + }, + { + "Date": "2022-07-01", + "Value": 80, + "Series": "Electronics" + }, + { + "Date": "2022-07-19", + "Value": 85, + "Series": "Electronics" + }, + { + "Date": "2022-08-07", + "Value": 93, + "Series": "Electronics" + }, + { + "Date": "2022-08-25", + "Value": 99, + "Series": "Electronics" + }, + { + "Date": "2022-09-12", + "Value": 104, + "Series": "Electronics" + }, + { + "Date": "2022-09-30", + "Value": 103, + "Series": "Electronics" + }, + { + "Date": "2022-10-19", + "Value": 102, + "Series": "Electronics" + }, + { + "Date": "2022-11-24", + "Value": 87, + "Series": "Electronics" + }, + { + "Date": "2022-12-12", + "Value": 82, + "Series": "Electronics" + }, + { + "Date": "2020-01-01", + "Value": 174, + "Series": "Clothing" + }, + { + "Date": "2020-01-19", + "Value": 181, + "Series": "Clothing" + }, + { + "Date": "2020-02-06", + "Value": 180, + "Series": "Clothing" + }, + { + "Date": "2020-02-24", + "Value": 179, + "Series": "Clothing" + }, + { + "Date": "2020-03-14", + "Value": 170, + "Series": "Clothing" + }, + { + "Date": "2020-04-01", + "Value": 163, + "Series": "Clothing" + }, + { + "Date": "2020-04-19", + "Value": 164, + "Series": "Clothing" + }, + { + "Date": "2020-05-07", + "Value": 161, + "Series": "Clothing" + }, + { + "Date": "2020-06-13", + "Value": 153, + "Series": "Clothing" + }, + { + "Date": "2020-07-01", + "Value": 142, + "Series": "Clothing" + }, + { + "Date": "2020-08-07", + "Value": 122, + "Series": "Clothing" + }, + { + "Date": "2020-08-25", + "Value": 125, + "Series": "Clothing" + }, + { + "Date": "2020-10-19", + "Value": 149, + "Series": "Clothing" + }, + { + "Date": "2020-11-06", + "Value": 161, + "Series": "Clothing" + }, + { + "Date": "2020-11-24", + "Value": 178, + "Series": "Clothing" + }, + { + "Date": "2020-12-31", + "Value": 192, + "Series": "Clothing" + }, + { + "Date": "2021-01-18", + "Value": 195, + "Series": "Clothing" + }, + { + "Date": "2021-03-14", + "Value": 177, + "Series": "Clothing" + }, + { + "Date": "2021-04-01", + "Value": 169, + "Series": "Clothing" + }, + { + "Date": "2021-04-19", + "Value": 172, + "Series": "Clothing" + }, + { + "Date": "2021-05-07", + "Value": 176, + "Series": "Clothing" + }, + { + "Date": "2021-05-26", + "Value": 181, + "Series": "Clothing" + }, + { + "Date": "2021-06-13", + "Value": 182, + "Series": "Clothing" + }, + { + "Date": "2021-07-19", + "Value": 192, + "Series": "Clothing" + }, + { + "Date": "2021-08-07", + "Value": 189, + "Series": "Clothing" + }, + { + "Date": "2021-08-25", + "Value": 181, + "Series": "Clothing" + }, + { + "Date": "2021-09-12", + "Value": 176, + "Series": "Clothing" + }, + { + "Date": "2021-09-30", + "Value": 180, + "Series": "Clothing" + }, + { + "Date": "2021-10-19", + "Value": 183, + "Series": "Clothing" + }, + { + "Date": "2021-11-06", + "Value": 191, + "Series": "Clothing" + }, + { + "Date": "2021-11-24", + "Value": 196, + "Series": "Clothing" + }, + { + "Date": "2021-12-31", + "Value": 207, + "Series": "Clothing" + }, + { + "Date": "2022-01-18", + "Value": 200, + "Series": "Clothing" + }, + { + "Date": "2022-02-05", + "Value": 199, + "Series": "Clothing" + }, + { + "Date": "2022-03-14", + "Value": 185, + "Series": "Clothing" + }, + { + "Date": "2022-04-01", + "Value": 177, + "Series": "Clothing" + }, + { + "Date": "2022-04-19", + "Value": 167, + "Series": "Clothing" + }, + { + "Date": "2022-05-07", + "Value": 152, + "Series": "Clothing" + }, + { + "Date": "2022-05-26", + "Value": 149, + "Series": "Clothing" + }, + { + "Date": "2022-06-13", + "Value": 145, + "Series": "Clothing" + }, + { + "Date": "2022-07-01", + "Value": 141, + "Series": "Clothing" + }, + { + "Date": "2022-07-19", + "Value": 135, + "Series": "Clothing" + }, + { + "Date": "2022-09-12", + "Value": 145, + "Series": "Clothing" + }, + { + "Date": "2022-09-30", + "Value": 148, + "Series": "Clothing" + }, + { + "Date": "2022-12-12", + "Value": 168, + "Series": "Clothing" + }, + { + "Date": "2020-01-01", + "Value": 187, + "Series": "Food" + }, + { + "Date": "2020-01-19", + "Value": 182, + "Series": "Food" + }, + { + "Date": "2020-02-24", + "Value": 157, + "Series": "Food" + }, + { + "Date": "2020-03-14", + "Value": 147, + "Series": "Food" + }, + { + "Date": "2020-04-01", + "Value": 151, + "Series": "Food" + }, + { + "Date": "2020-04-19", + "Value": 158, + "Series": "Food" + }, + { + "Date": "2020-06-13", + "Value": 177, + "Series": "Food" + }, + { + "Date": "2020-07-01", + "Value": 181, + "Series": "Food" + }, + { + "Date": "2020-07-19", + "Value": 182, + "Series": "Food" + }, + { + "Date": "2020-08-07", + "Value": 190, + "Series": "Food" + }, + { + "Date": "2020-08-25", + "Value": 199, + "Series": "Food" + }, + { + "Date": "2020-09-12", + "Value": 201, + "Series": "Food" + }, + { + "Date": "2020-09-30", + "Value": 212, + "Series": "Food" + }, + { + "Date": "2020-10-19", + "Value": 227, + "Series": "Food" + }, + { + "Date": "2020-11-06", + "Value": 232, + "Series": "Food" + }, + { + "Date": "2020-12-12", + "Value": 249, + "Series": "Food" + }, + { + "Date": "2020-12-31", + "Value": 258, + "Series": "Food" + }, + { + "Date": "2021-01-18", + "Value": 260, + "Series": "Food" + }, + { + "Date": "2021-03-14", + "Value": 289, + "Series": "Food" + }, + { + "Date": "2021-04-01", + "Value": 286, + "Series": "Food" + }, + { + "Date": "2021-04-19", + "Value": 292, + "Series": "Food" + }, + { + "Date": "2021-05-07", + "Value": 299, + "Series": "Food" + }, + { + "Date": "2021-05-26", + "Value": 304, + "Series": "Food" + }, + { + "Date": "2021-06-13", + "Value": 312, + "Series": "Food" + }, + { + "Date": "2021-07-01", + "Value": 328, + "Series": "Food" + }, + { + "Date": "2021-07-19", + "Value": 349, + "Series": "Food" + }, + { + "Date": "2021-08-07", + "Value": 362, + "Series": "Food" + }, + { + "Date": "2021-08-25", + "Value": 364, + "Series": "Food" + }, + { + "Date": "2021-09-12", + "Value": 364, + "Series": "Food" + }, + { + "Date": "2021-09-30", + "Value": 355, + "Series": "Food" + }, + { + "Date": "2021-10-19", + "Value": 343, + "Series": "Food" + }, + { + "Date": "2021-11-06", + "Value": 336, + "Series": "Food" + }, + { + "Date": "2021-12-12", + "Value": 351, + "Series": "Food" + }, + { + "Date": "2022-01-18", + "Value": 351, + "Series": "Food" + }, + { + "Date": "2022-02-05", + "Value": 343, + "Series": "Food" + }, + { + "Date": "2022-02-23", + "Value": 327, + "Series": "Food" + }, + { + "Date": "2022-03-14", + "Value": 309, + "Series": "Food" + }, + { + "Date": "2022-04-01", + "Value": 294, + "Series": "Food" + }, + { + "Date": "2022-05-07", + "Value": 261, + "Series": "Food" + }, + { + "Date": "2022-05-26", + "Value": 237, + "Series": "Food" + }, + { + "Date": "2022-06-13", + "Value": 214, + "Series": "Food" + }, + { + "Date": "2022-07-01", + "Value": 194, + "Series": "Food" + }, + { + "Date": "2022-07-19", + "Value": 173, + "Series": "Food" + }, + { + "Date": "2022-08-07", + "Value": 158, + "Series": "Food" + }, + { + "Date": "2022-08-25", + "Value": 154, + "Series": "Food" + }, + { + "Date": "2022-09-30", + "Value": 160, + "Series": "Food" + }, + { + "Date": "2022-10-19", + "Value": 171, + "Series": "Food" + }, + { + "Date": "2022-11-06", + "Value": 170, + "Series": "Food" + }, + { + "Date": "2022-12-12", + "Value": 176, + "Series": "Food" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/05-card30.flint.json b/test-harness/excel/evaluations/inputs/line-chart/05-card30.flint.json new file mode 100644 index 00000000..0852761d --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/05-card30.flint.json @@ -0,0 +1,173 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity", + "ColorVal": "Quantity" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "Date", + "y": "Value", + "color": "ColorVal" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 117, + "ColorVal": 2.4 + }, + { + "Date": "2020-02-06", + "Value": 109, + "ColorVal": 1.9 + }, + { + "Date": "2020-03-14", + "Value": 113, + "ColorVal": 0.3 + }, + { + "Date": "2020-04-19", + "Value": 117, + "ColorVal": 4.2 + }, + { + "Date": "2020-05-26", + "Value": 112, + "ColorVal": 9.5 + }, + { + "Date": "2020-07-01", + "Value": 121, + "ColorVal": 2.5 + }, + { + "Date": "2020-08-07", + "Value": 134, + "ColorVal": 7.5 + }, + { + "Date": "2020-09-12", + "Value": 130, + "ColorVal": 2.7 + }, + { + "Date": "2020-10-19", + "Value": 136, + "ColorVal": 4.3 + }, + { + "Date": "2020-11-24", + "Value": 152, + "ColorVal": 6.4 + }, + { + "Date": "2020-12-31", + "Value": 158, + "ColorVal": 3.8 + }, + { + "Date": "2021-02-05", + "Value": 165, + "ColorVal": 2.5 + }, + { + "Date": "2021-03-14", + "Value": 164, + "ColorVal": 4.7 + }, + { + "Date": "2021-04-19", + "Value": 175, + "ColorVal": 9.1 + }, + { + "Date": "2021-05-26", + "Value": 173, + "ColorVal": 6 + }, + { + "Date": "2021-07-01", + "Value": 161, + "ColorVal": 4.8 + }, + { + "Date": "2021-08-07", + "Value": 167, + "ColorVal": 6.1 + }, + { + "Date": "2021-09-12", + "Value": 157, + "ColorVal": 1.4 + }, + { + "Date": "2021-10-19", + "Value": 151, + "ColorVal": 8.8 + }, + { + "Date": "2021-11-24", + "Value": 149, + "ColorVal": 7.3 + }, + { + "Date": "2021-12-31", + "Value": 159, + "ColorVal": 3.8 + }, + { + "Date": "2022-02-05", + "Value": 177, + "ColorVal": 3.1 + }, + { + "Date": "2022-03-14", + "Value": 195, + "ColorVal": 8.1 + }, + { + "Date": "2022-04-19", + "Value": 211, + "ColorVal": 5 + }, + { + "Date": "2022-05-26", + "Value": 220, + "ColorVal": 0.4 + }, + { + "Date": "2022-07-01", + "Value": 228, + "ColorVal": 6.3 + }, + { + "Date": "2022-08-07", + "Value": 229, + "ColorVal": 1.3 + }, + { + "Date": "2022-09-12", + "Value": 221, + "ColorVal": 8.4 + }, + { + "Date": "2022-10-19", + "Value": 206, + "ColorVal": 0.2 + }, + { + "Date": "2022-11-24", + "Value": 191, + "ColorVal": 7.6 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/06-card5.flint.json b/test-harness/excel/evaluations/inputs/line-chart/06-card5.flint.json new file mode 100644 index 00000000..fbf85b11 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/06-card5.flint.json @@ -0,0 +1,41 @@ +{ + "semantic_types": { + "Stage": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "Stage", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Stage": "Stage 1", + "Value": 113 + }, + { + "Stage": "Stage 2", + "Value": 126 + }, + { + "Stage": "Stage 3", + "Value": 131 + }, + { + "Stage": "Stage 4", + "Value": 144 + }, + { + "Stage": "Stage 5", + "Value": 138 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/07-card12.flint.json b/test-harness/excel/evaluations/inputs/line-chart/07-card12.flint.json new file mode 100644 index 00000000..042e1a85 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/07-card12.flint.json @@ -0,0 +1,263 @@ +{ + "semantic_types": { + "Stage": "Category", + "Value": "Quantity", + "Series": "Category" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "Stage", + "y": "Value", + "color": "Series" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Stage": "Stage 1", + "Value": 240, + "Series": "Electronics" + }, + { + "Stage": "Stage 2", + "Value": 240, + "Series": "Electronics" + }, + { + "Stage": "Stage 3", + "Value": 245, + "Series": "Electronics" + }, + { + "Stage": "Stage 4", + "Value": 242, + "Series": "Electronics" + }, + { + "Stage": "Stage 5", + "Value": 250, + "Series": "Electronics" + }, + { + "Stage": "Stage 6", + "Value": 265, + "Series": "Electronics" + }, + { + "Stage": "Stage 7", + "Value": 280, + "Series": "Electronics" + }, + { + "Stage": "Stage 8", + "Value": 285, + "Series": "Electronics" + }, + { + "Stage": "Stage 9", + "Value": 293, + "Series": "Electronics" + }, + { + "Stage": "Stage 10", + "Value": 297, + "Series": "Electronics" + }, + { + "Stage": "Stage 11", + "Value": 294, + "Series": "Electronics" + }, + { + "Stage": "Stage 12", + "Value": 286, + "Series": "Electronics" + }, + { + "Stage": "Stage 1", + "Value": 107, + "Series": "Clothing" + }, + { + "Stage": "Stage 2", + "Value": 108, + "Series": "Clothing" + }, + { + "Stage": "Stage 3", + "Value": 112, + "Series": "Clothing" + }, + { + "Stage": "Stage 4", + "Value": 113, + "Series": "Clothing" + }, + { + "Stage": "Stage 5", + "Value": 119, + "Series": "Clothing" + }, + { + "Stage": "Stage 6", + "Value": 119, + "Series": "Clothing" + }, + { + "Stage": "Stage 7", + "Value": 117, + "Series": "Clothing" + }, + { + "Stage": "Stage 8", + "Value": 114, + "Series": "Clothing" + }, + { + "Stage": "Stage 9", + "Value": 113, + "Series": "Clothing" + }, + { + "Stage": "Stage 10", + "Value": 113, + "Series": "Clothing" + }, + { + "Stage": "Stage 11", + "Value": 114, + "Series": "Clothing" + }, + { + "Stage": "Stage 12", + "Value": 111, + "Series": "Clothing" + }, + { + "Stage": "Stage 1", + "Value": 244, + "Series": "Food" + }, + { + "Stage": "Stage 2", + "Value": 258, + "Series": "Food" + }, + { + "Stage": "Stage 3", + "Value": 267, + "Series": "Food" + }, + { + "Stage": "Stage 4", + "Value": 280, + "Series": "Food" + }, + { + "Stage": "Stage 5", + "Value": 284, + "Series": "Food" + }, + { + "Stage": "Stage 6", + "Value": 274, + "Series": "Food" + }, + { + "Stage": "Stage 7", + "Value": 282, + "Series": "Food" + }, + { + "Stage": "Stage 8", + "Value": 287, + "Series": "Food" + }, + { + "Stage": "Stage 9", + "Value": 297, + "Series": "Food" + }, + { + "Stage": "Stage 10", + "Value": 294, + "Series": "Food" + }, + { + "Stage": "Stage 11", + "Value": 282, + "Series": "Food" + }, + { + "Stage": "Stage 12", + "Value": 268, + "Series": "Food" + }, + { + "Stage": "Stage 1", + "Value": 93, + "Series": "Books" + }, + { + "Stage": "Stage 2", + "Value": 80, + "Series": "Books" + }, + { + "Stage": "Stage 3", + "Value": 69, + "Series": "Books" + }, + { + "Stage": "Stage 4", + "Value": 59, + "Series": "Books" + }, + { + "Stage": "Stage 5", + "Value": 52, + "Series": "Books" + }, + { + "Stage": "Stage 6", + "Value": 52, + "Series": "Books" + }, + { + "Stage": "Stage 7", + "Value": 42, + "Series": "Books" + }, + { + "Stage": "Stage 8", + "Value": 25, + "Series": "Books" + }, + { + "Stage": "Stage 9", + "Value": 21, + "Series": "Books" + }, + { + "Stage": "Stage 10", + "Value": 16, + "Series": "Books" + }, + { + "Stage": "Stage 11", + "Value": 22, + "Series": "Books" + }, + { + "Stage": "Stage 12", + "Value": 36, + "Series": "Books" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/08-card30.flint.json b/test-harness/excel/evaluations/inputs/line-chart/08-card30.flint.json new file mode 100644 index 00000000..2dbe044e --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/08-card30.flint.json @@ -0,0 +1,141 @@ +{ + "semantic_types": { + "Stage": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "Stage", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Stage": "Stage 1", + "Value": 160 + }, + { + "Stage": "Stage 2", + "Value": 158 + }, + { + "Stage": "Stage 3", + "Value": 157 + }, + { + "Stage": "Stage 4", + "Value": 159 + }, + { + "Stage": "Stage 5", + "Value": 158 + }, + { + "Stage": "Stage 6", + "Value": 159 + }, + { + "Stage": "Stage 7", + "Value": 163 + }, + { + "Stage": "Stage 8", + "Value": 168 + }, + { + "Stage": "Stage 9", + "Value": 169 + }, + { + "Stage": "Stage 10", + "Value": 168 + }, + { + "Stage": "Stage 11", + "Value": 170 + }, + { + "Stage": "Stage 12", + "Value": 171 + }, + { + "Stage": "Stage 13", + "Value": 173 + }, + { + "Stage": "Stage 14", + "Value": 174 + }, + { + "Stage": "Stage 15", + "Value": 177 + }, + { + "Stage": "Stage 16", + "Value": 181 + }, + { + "Stage": "Stage 17", + "Value": 184 + }, + { + "Stage": "Stage 18", + "Value": 188 + }, + { + "Stage": "Stage 19", + "Value": 195 + }, + { + "Stage": "Stage 20", + "Value": 205 + }, + { + "Stage": "Stage 21", + "Value": 217 + }, + { + "Stage": "Stage 22", + "Value": 228 + }, + { + "Stage": "Stage 23", + "Value": 240 + }, + { + "Stage": "Stage 24", + "Value": 253 + }, + { + "Stage": "Stage 25", + "Value": 261 + }, + { + "Stage": "Stage 26", + "Value": 268 + }, + { + "Stage": "Stage 27", + "Value": 273 + }, + { + "Stage": "Stage 28", + "Value": 279 + }, + { + "Stage": "Stage 29", + "Value": 279 + }, + { + "Stage": "Stage 30", + "Value": 281 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/09-card5.flint.json b/test-harness/excel/evaluations/inputs/line-chart/09-card5.flint.json new file mode 100644 index 00000000..a79a3388 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/09-card5.flint.json @@ -0,0 +1,48 @@ +{ + "semantic_types": { + "Stage": "Category", + "Value": "Quantity", + "ColorVal": "Quantity" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "Stage", + "y": "Value", + "color": "ColorVal" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Stage": "Stage 1", + "Value": 155, + "ColorVal": 9 + }, + { + "Stage": "Stage 2", + "Value": 150, + "ColorVal": 3.1 + }, + { + "Stage": "Stage 3", + "Value": 143, + "ColorVal": 0.1 + }, + { + "Stage": "Stage 4", + "Value": 136, + "ColorVal": 10 + }, + { + "Stage": "Stage 5", + "Value": 137, + "ColorVal": 6.2 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/10-card5.flint.json b/test-harness/excel/evaluations/inputs/line-chart/10-card5.flint.json new file mode 100644 index 00000000..d7f2fd8a --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/10-card5.flint.json @@ -0,0 +1,41 @@ +{ + "semantic_types": { + "X": "Quantity", + "Step": "Category" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "X", + "y": "Step" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 0, + "Step": "Stage 1" + }, + { + "X": 25, + "Step": "Stage 2" + }, + { + "X": 50, + "Step": "Stage 3" + }, + { + "X": 75, + "Step": "Stage 4" + }, + { + "X": 100, + "Step": "Stage 5" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/11-card12.flint.json b/test-harness/excel/evaluations/inputs/line-chart/11-card12.flint.json new file mode 100644 index 00000000..325b2500 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/11-card12.flint.json @@ -0,0 +1,263 @@ +{ + "semantic_types": { + "X": "Quantity", + "Step": "Category", + "Series": "Category" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "X", + "y": "Step", + "color": "Series" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 0, + "Step": "Stage 1", + "Series": "Electronics" + }, + { + "X": 9.1, + "Step": "Stage 2", + "Series": "Electronics" + }, + { + "X": 18.2, + "Step": "Stage 3", + "Series": "Electronics" + }, + { + "X": 27.3, + "Step": "Stage 4", + "Series": "Electronics" + }, + { + "X": 36.4, + "Step": "Stage 5", + "Series": "Electronics" + }, + { + "X": 45.5, + "Step": "Stage 6", + "Series": "Electronics" + }, + { + "X": 54.5, + "Step": "Stage 7", + "Series": "Electronics" + }, + { + "X": 63.6, + "Step": "Stage 8", + "Series": "Electronics" + }, + { + "X": 72.7, + "Step": "Stage 9", + "Series": "Electronics" + }, + { + "X": 81.8, + "Step": "Stage 10", + "Series": "Electronics" + }, + { + "X": 90.9, + "Step": "Stage 11", + "Series": "Electronics" + }, + { + "X": 100, + "Step": "Stage 12", + "Series": "Electronics" + }, + { + "X": 0, + "Step": "Stage 1", + "Series": "Clothing" + }, + { + "X": 9.1, + "Step": "Stage 2", + "Series": "Clothing" + }, + { + "X": 18.2, + "Step": "Stage 3", + "Series": "Clothing" + }, + { + "X": 27.3, + "Step": "Stage 4", + "Series": "Clothing" + }, + { + "X": 36.4, + "Step": "Stage 5", + "Series": "Clothing" + }, + { + "X": 45.5, + "Step": "Stage 6", + "Series": "Clothing" + }, + { + "X": 54.5, + "Step": "Stage 7", + "Series": "Clothing" + }, + { + "X": 63.6, + "Step": "Stage 8", + "Series": "Clothing" + }, + { + "X": 72.7, + "Step": "Stage 9", + "Series": "Clothing" + }, + { + "X": 81.8, + "Step": "Stage 10", + "Series": "Clothing" + }, + { + "X": 90.9, + "Step": "Stage 11", + "Series": "Clothing" + }, + { + "X": 100, + "Step": "Stage 12", + "Series": "Clothing" + }, + { + "X": 0, + "Step": "Stage 1", + "Series": "Food" + }, + { + "X": 9.1, + "Step": "Stage 2", + "Series": "Food" + }, + { + "X": 18.2, + "Step": "Stage 3", + "Series": "Food" + }, + { + "X": 27.3, + "Step": "Stage 4", + "Series": "Food" + }, + { + "X": 36.4, + "Step": "Stage 5", + "Series": "Food" + }, + { + "X": 45.5, + "Step": "Stage 6", + "Series": "Food" + }, + { + "X": 54.5, + "Step": "Stage 7", + "Series": "Food" + }, + { + "X": 63.6, + "Step": "Stage 8", + "Series": "Food" + }, + { + "X": 72.7, + "Step": "Stage 9", + "Series": "Food" + }, + { + "X": 81.8, + "Step": "Stage 10", + "Series": "Food" + }, + { + "X": 90.9, + "Step": "Stage 11", + "Series": "Food" + }, + { + "X": 100, + "Step": "Stage 12", + "Series": "Food" + }, + { + "X": 0, + "Step": "Stage 1", + "Series": "Books" + }, + { + "X": 9.1, + "Step": "Stage 2", + "Series": "Books" + }, + { + "X": 18.2, + "Step": "Stage 3", + "Series": "Books" + }, + { + "X": 27.3, + "Step": "Stage 4", + "Series": "Books" + }, + { + "X": 36.4, + "Step": "Stage 5", + "Series": "Books" + }, + { + "X": 45.5, + "Step": "Stage 6", + "Series": "Books" + }, + { + "X": 54.5, + "Step": "Stage 7", + "Series": "Books" + }, + { + "X": 63.6, + "Step": "Stage 8", + "Series": "Books" + }, + { + "X": 72.7, + "Step": "Stage 9", + "Series": "Books" + }, + { + "X": 81.8, + "Step": "Stage 10", + "Series": "Books" + }, + { + "X": 90.9, + "Step": "Stage 11", + "Series": "Books" + }, + { + "X": 100, + "Step": "Stage 12", + "Series": "Books" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/12-card30.flint.json b/test-harness/excel/evaluations/inputs/line-chart/12-card30.flint.json new file mode 100644 index 00000000..242ff18d --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/12-card30.flint.json @@ -0,0 +1,141 @@ +{ + "semantic_types": { + "X": "Quantity", + "Step": "Category" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "X", + "y": "Step" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 0, + "Step": "Stage 1" + }, + { + "X": 3.4, + "Step": "Stage 2" + }, + { + "X": 6.9, + "Step": "Stage 3" + }, + { + "X": 10.3, + "Step": "Stage 4" + }, + { + "X": 13.8, + "Step": "Stage 5" + }, + { + "X": 17.2, + "Step": "Stage 6" + }, + { + "X": 20.7, + "Step": "Stage 7" + }, + { + "X": 24.1, + "Step": "Stage 8" + }, + { + "X": 27.6, + "Step": "Stage 9" + }, + { + "X": 31, + "Step": "Stage 10" + }, + { + "X": 34.5, + "Step": "Stage 11" + }, + { + "X": 37.9, + "Step": "Stage 12" + }, + { + "X": 41.4, + "Step": "Stage 13" + }, + { + "X": 44.8, + "Step": "Stage 14" + }, + { + "X": 48.3, + "Step": "Stage 15" + }, + { + "X": 51.7, + "Step": "Stage 16" + }, + { + "X": 55.2, + "Step": "Stage 17" + }, + { + "X": 58.6, + "Step": "Stage 18" + }, + { + "X": 62.1, + "Step": "Stage 19" + }, + { + "X": 65.5, + "Step": "Stage 20" + }, + { + "X": 69, + "Step": "Stage 21" + }, + { + "X": 72.4, + "Step": "Stage 22" + }, + { + "X": 75.9, + "Step": "Stage 23" + }, + { + "X": 79.3, + "Step": "Stage 24" + }, + { + "X": 82.8, + "Step": "Stage 25" + }, + { + "X": 86.2, + "Step": "Stage 26" + }, + { + "X": 89.7, + "Step": "Stage 27" + }, + { + "X": 93.1, + "Step": "Stage 28" + }, + { + "X": 96.6, + "Step": "Stage 29" + }, + { + "X": 100, + "Step": "Stage 30" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/13-card30.flint.json b/test-harness/excel/evaluations/inputs/line-chart/13-card30.flint.json new file mode 100644 index 00000000..8d2d955b --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/13-card30.flint.json @@ -0,0 +1,141 @@ +{ + "semantic_types": { + "X": "Quantity", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "X", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 0, + "Value": 100 + }, + { + "X": 3.4, + "Value": 102 + }, + { + "X": 6.9, + "Value": 113 + }, + { + "X": 10.3, + "Value": 132 + }, + { + "X": 13.8, + "Value": 152 + }, + { + "X": 17.2, + "Value": 174 + }, + { + "X": 20.7, + "Value": 186 + }, + { + "X": 24.1, + "Value": 202 + }, + { + "X": 27.6, + "Value": 207 + }, + { + "X": 31, + "Value": 200 + }, + { + "X": 34.5, + "Value": 189 + }, + { + "X": 37.9, + "Value": 175 + }, + { + "X": 41.4, + "Value": 171 + }, + { + "X": 44.8, + "Value": 174 + }, + { + "X": 48.3, + "Value": 173 + }, + { + "X": 51.7, + "Value": 180 + }, + { + "X": 55.2, + "Value": 192 + }, + { + "X": 58.6, + "Value": 201 + }, + { + "X": 62.1, + "Value": 217 + }, + { + "X": 65.5, + "Value": 236 + }, + { + "X": 69, + "Value": 241 + }, + { + "X": 72.4, + "Value": 248 + }, + { + "X": 75.9, + "Value": 255 + }, + { + "X": 79.3, + "Value": 262 + }, + { + "X": 82.8, + "Value": 267 + }, + { + "X": 86.2, + "Value": 280 + }, + { + "X": 89.7, + "Value": 289 + }, + { + "X": 93.1, + "Value": 292 + }, + { + "X": 96.6, + "Value": 297 + }, + { + "X": 100, + "Value": 306 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/14-card50.flint.json b/test-harness/excel/evaluations/inputs/line-chart/14-card50.flint.json new file mode 100644 index 00000000..652b0e65 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/14-card50.flint.json @@ -0,0 +1,773 @@ +{ + "semantic_types": { + "X": "Quantity", + "Value": "Quantity", + "Series": "Category" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "X", + "y": "Value", + "color": "Series" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 0, + "Value": 226, + "Series": "Electronics" + }, + { + "X": 2, + "Value": 227, + "Series": "Electronics" + }, + { + "X": 4.1, + "Value": 233, + "Series": "Electronics" + }, + { + "X": 6.1, + "Value": 237, + "Series": "Electronics" + }, + { + "X": 8.2, + "Value": 233, + "Series": "Electronics" + }, + { + "X": 10.2, + "Value": 223, + "Series": "Electronics" + }, + { + "X": 12.2, + "Value": 209, + "Series": "Electronics" + }, + { + "X": 14.3, + "Value": 200, + "Series": "Electronics" + }, + { + "X": 16.3, + "Value": 194, + "Series": "Electronics" + }, + { + "X": 18.4, + "Value": 189, + "Series": "Electronics" + }, + { + "X": 20.4, + "Value": 193, + "Series": "Electronics" + }, + { + "X": 22.4, + "Value": 205, + "Series": "Electronics" + }, + { + "X": 24.5, + "Value": 213, + "Series": "Electronics" + }, + { + "X": 26.5, + "Value": 220, + "Series": "Electronics" + }, + { + "X": 28.6, + "Value": 218, + "Series": "Electronics" + }, + { + "X": 30.6, + "Value": 219, + "Series": "Electronics" + }, + { + "X": 32.7, + "Value": 223, + "Series": "Electronics" + }, + { + "X": 34.7, + "Value": 229, + "Series": "Electronics" + }, + { + "X": 36.7, + "Value": 238, + "Series": "Electronics" + }, + { + "X": 38.8, + "Value": 241, + "Series": "Electronics" + }, + { + "X": 40.8, + "Value": 245, + "Series": "Electronics" + }, + { + "X": 42.9, + "Value": 249, + "Series": "Electronics" + }, + { + "X": 44.9, + "Value": 260, + "Series": "Electronics" + }, + { + "X": 46.9, + "Value": 278, + "Series": "Electronics" + }, + { + "X": 49, + "Value": 285, + "Series": "Electronics" + }, + { + "X": 51, + "Value": 287, + "Series": "Electronics" + }, + { + "X": 53.1, + "Value": 280, + "Series": "Electronics" + }, + { + "X": 55.1, + "Value": 277, + "Series": "Electronics" + }, + { + "X": 57.1, + "Value": 267, + "Series": "Electronics" + }, + { + "X": 59.2, + "Value": 250, + "Series": "Electronics" + }, + { + "X": 61.2, + "Value": 233, + "Series": "Electronics" + }, + { + "X": 63.3, + "Value": 217, + "Series": "Electronics" + }, + { + "X": 65.3, + "Value": 200, + "Series": "Electronics" + }, + { + "X": 67.3, + "Value": 195, + "Series": "Electronics" + }, + { + "X": 69.4, + "Value": 193, + "Series": "Electronics" + }, + { + "X": 71.4, + "Value": 202, + "Series": "Electronics" + }, + { + "X": 73.5, + "Value": 211, + "Series": "Electronics" + }, + { + "X": 75.5, + "Value": 226, + "Series": "Electronics" + }, + { + "X": 77.6, + "Value": 238, + "Series": "Electronics" + }, + { + "X": 79.6, + "Value": 239, + "Series": "Electronics" + }, + { + "X": 81.6, + "Value": 245, + "Series": "Electronics" + }, + { + "X": 83.7, + "Value": 242, + "Series": "Electronics" + }, + { + "X": 85.7, + "Value": 235, + "Series": "Electronics" + }, + { + "X": 87.8, + "Value": 228, + "Series": "Electronics" + }, + { + "X": 89.8, + "Value": 227, + "Series": "Electronics" + }, + { + "X": 91.8, + "Value": 221, + "Series": "Electronics" + }, + { + "X": 93.9, + "Value": 220, + "Series": "Electronics" + }, + { + "X": 95.9, + "Value": 219, + "Series": "Electronics" + }, + { + "X": 98, + "Value": 209, + "Series": "Electronics" + }, + { + "X": 100, + "Value": 203, + "Series": "Electronics" + }, + { + "X": 0, + "Value": 159, + "Series": "Clothing" + }, + { + "X": 2, + "Value": 164, + "Series": "Clothing" + }, + { + "X": 4.1, + "Value": 178, + "Series": "Clothing" + }, + { + "X": 6.1, + "Value": 196, + "Series": "Clothing" + }, + { + "X": 8.2, + "Value": 213, + "Series": "Clothing" + }, + { + "X": 10.2, + "Value": 235, + "Series": "Clothing" + }, + { + "X": 12.2, + "Value": 247, + "Series": "Clothing" + }, + { + "X": 14.3, + "Value": 255, + "Series": "Clothing" + }, + { + "X": 16.3, + "Value": 262, + "Series": "Clothing" + }, + { + "X": 18.4, + "Value": 272, + "Series": "Clothing" + }, + { + "X": 20.4, + "Value": 289, + "Series": "Clothing" + }, + { + "X": 22.4, + "Value": 290, + "Series": "Clothing" + }, + { + "X": 24.5, + "Value": 283, + "Series": "Clothing" + }, + { + "X": 26.5, + "Value": 282, + "Series": "Clothing" + }, + { + "X": 28.6, + "Value": 284, + "Series": "Clothing" + }, + { + "X": 30.6, + "Value": 274, + "Series": "Clothing" + }, + { + "X": 32.7, + "Value": 272, + "Series": "Clothing" + }, + { + "X": 34.7, + "Value": 279, + "Series": "Clothing" + }, + { + "X": 36.7, + "Value": 287, + "Series": "Clothing" + }, + { + "X": 38.8, + "Value": 285, + "Series": "Clothing" + }, + { + "X": 40.8, + "Value": 294, + "Series": "Clothing" + }, + { + "X": 42.9, + "Value": 311, + "Series": "Clothing" + }, + { + "X": 44.9, + "Value": 317, + "Series": "Clothing" + }, + { + "X": 46.9, + "Value": 311, + "Series": "Clothing" + }, + { + "X": 49, + "Value": 307, + "Series": "Clothing" + }, + { + "X": 51, + "Value": 315, + "Series": "Clothing" + }, + { + "X": 53.1, + "Value": 330, + "Series": "Clothing" + }, + { + "X": 55.1, + "Value": 350, + "Series": "Clothing" + }, + { + "X": 57.1, + "Value": 353, + "Series": "Clothing" + }, + { + "X": 59.2, + "Value": 363, + "Series": "Clothing" + }, + { + "X": 61.2, + "Value": 380, + "Series": "Clothing" + }, + { + "X": 63.3, + "Value": 397, + "Series": "Clothing" + }, + { + "X": 65.3, + "Value": 407, + "Series": "Clothing" + }, + { + "X": 67.3, + "Value": 420, + "Series": "Clothing" + }, + { + "X": 69.4, + "Value": 432, + "Series": "Clothing" + }, + { + "X": 71.4, + "Value": 449, + "Series": "Clothing" + }, + { + "X": 73.5, + "Value": 470, + "Series": "Clothing" + }, + { + "X": 75.5, + "Value": 492, + "Series": "Clothing" + }, + { + "X": 77.6, + "Value": 510, + "Series": "Clothing" + }, + { + "X": 79.6, + "Value": 526, + "Series": "Clothing" + }, + { + "X": 81.6, + "Value": 532, + "Series": "Clothing" + }, + { + "X": 83.7, + "Value": 539, + "Series": "Clothing" + }, + { + "X": 85.7, + "Value": 552, + "Series": "Clothing" + }, + { + "X": 87.8, + "Value": 550, + "Series": "Clothing" + }, + { + "X": 89.8, + "Value": 542, + "Series": "Clothing" + }, + { + "X": 91.8, + "Value": 539, + "Series": "Clothing" + }, + { + "X": 93.9, + "Value": 531, + "Series": "Clothing" + }, + { + "X": 95.9, + "Value": 533, + "Series": "Clothing" + }, + { + "X": 98, + "Value": 534, + "Series": "Clothing" + }, + { + "X": 100, + "Value": 529, + "Series": "Clothing" + }, + { + "X": 0, + "Value": 84, + "Series": "Food" + }, + { + "X": 2, + "Value": 88, + "Series": "Food" + }, + { + "X": 4.1, + "Value": 90, + "Series": "Food" + }, + { + "X": 6.1, + "Value": 82, + "Series": "Food" + }, + { + "X": 8.2, + "Value": 90, + "Series": "Food" + }, + { + "X": 10.2, + "Value": 111, + "Series": "Food" + }, + { + "X": 12.2, + "Value": 118, + "Series": "Food" + }, + { + "X": 14.3, + "Value": 119, + "Series": "Food" + }, + { + "X": 16.3, + "Value": 133, + "Series": "Food" + }, + { + "X": 18.4, + "Value": 133, + "Series": "Food" + }, + { + "X": 20.4, + "Value": 131, + "Series": "Food" + }, + { + "X": 22.4, + "Value": 132, + "Series": "Food" + }, + { + "X": 24.5, + "Value": 142, + "Series": "Food" + }, + { + "X": 26.5, + "Value": 153, + "Series": "Food" + }, + { + "X": 28.6, + "Value": 146, + "Series": "Food" + }, + { + "X": 30.6, + "Value": 132, + "Series": "Food" + }, + { + "X": 32.7, + "Value": 123, + "Series": "Food" + }, + { + "X": 34.7, + "Value": 123, + "Series": "Food" + }, + { + "X": 36.7, + "Value": 122, + "Series": "Food" + }, + { + "X": 38.8, + "Value": 133, + "Series": "Food" + }, + { + "X": 40.8, + "Value": 145, + "Series": "Food" + }, + { + "X": 42.9, + "Value": 161, + "Series": "Food" + }, + { + "X": 44.9, + "Value": 158, + "Series": "Food" + }, + { + "X": 46.9, + "Value": 168, + "Series": "Food" + }, + { + "X": 49, + "Value": 187, + "Series": "Food" + }, + { + "X": 51, + "Value": 205, + "Series": "Food" + }, + { + "X": 53.1, + "Value": 223, + "Series": "Food" + }, + { + "X": 55.1, + "Value": 239, + "Series": "Food" + }, + { + "X": 57.1, + "Value": 237, + "Series": "Food" + }, + { + "X": 59.2, + "Value": 246, + "Series": "Food" + }, + { + "X": 61.2, + "Value": 243, + "Series": "Food" + }, + { + "X": 63.3, + "Value": 227, + "Series": "Food" + }, + { + "X": 65.3, + "Value": 218, + "Series": "Food" + }, + { + "X": 67.3, + "Value": 216, + "Series": "Food" + }, + { + "X": 69.4, + "Value": 212, + "Series": "Food" + }, + { + "X": 71.4, + "Value": 197, + "Series": "Food" + }, + { + "X": 73.5, + "Value": 182, + "Series": "Food" + }, + { + "X": 75.5, + "Value": 159, + "Series": "Food" + }, + { + "X": 77.6, + "Value": 128, + "Series": "Food" + }, + { + "X": 79.6, + "Value": 114, + "Series": "Food" + }, + { + "X": 81.6, + "Value": 103, + "Series": "Food" + }, + { + "X": 83.7, + "Value": 108, + "Series": "Food" + }, + { + "X": 85.7, + "Value": 125, + "Series": "Food" + }, + { + "X": 87.8, + "Value": 145, + "Series": "Food" + }, + { + "X": 89.8, + "Value": 156, + "Series": "Food" + }, + { + "X": 91.8, + "Value": 163, + "Series": "Food" + }, + { + "X": 93.9, + "Value": 168, + "Series": "Food" + }, + { + "X": 95.9, + "Value": 159, + "Series": "Food" + }, + { + "X": 98, + "Value": 160, + "Series": "Food" + }, + { + "X": 100, + "Value": 154, + "Series": "Food" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/15-card200.flint.json b/test-harness/excel/evaluations/inputs/line-chart/15-card200.flint.json new file mode 100644 index 00000000..b74db5fe --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/15-card200.flint.json @@ -0,0 +1,821 @@ +{ + "semantic_types": { + "X": "Quantity", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "X", + "y": "Value" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 0, + "Value": 237 + }, + { + "X": 0.5, + "Value": 246 + }, + { + "X": 1, + "Value": 251 + }, + { + "X": 1.5, + "Value": 266 + }, + { + "X": 2, + "Value": 284 + }, + { + "X": 2.5, + "Value": 292 + }, + { + "X": 3, + "Value": 301 + }, + { + "X": 3.5, + "Value": 307 + }, + { + "X": 4, + "Value": 309 + }, + { + "X": 4.5, + "Value": 308 + }, + { + "X": 5, + "Value": 319 + }, + { + "X": 5.5, + "Value": 318 + }, + { + "X": 6, + "Value": 316 + }, + { + "X": 6.5, + "Value": 322 + }, + { + "X": 7, + "Value": 324 + }, + { + "X": 7.5, + "Value": 336 + }, + { + "X": 8, + "Value": 342 + }, + { + "X": 8.5, + "Value": 339 + }, + { + "X": 9, + "Value": 341 + }, + { + "X": 9.5, + "Value": 331 + }, + { + "X": 10.1, + "Value": 321 + }, + { + "X": 10.6, + "Value": 309 + }, + { + "X": 11.1, + "Value": 310 + }, + { + "X": 11.6, + "Value": 318 + }, + { + "X": 12.1, + "Value": 322 + }, + { + "X": 12.6, + "Value": 325 + }, + { + "X": 13.1, + "Value": 329 + }, + { + "X": 13.6, + "Value": 339 + }, + { + "X": 14.1, + "Value": 358 + }, + { + "X": 14.6, + "Value": 378 + }, + { + "X": 15.1, + "Value": 402 + }, + { + "X": 15.6, + "Value": 410 + }, + { + "X": 16.1, + "Value": 424 + }, + { + "X": 16.6, + "Value": 443 + }, + { + "X": 17.1, + "Value": 459 + }, + { + "X": 17.6, + "Value": 462 + }, + { + "X": 18.1, + "Value": 466 + }, + { + "X": 18.6, + "Value": 458 + }, + { + "X": 19.1, + "Value": 455 + }, + { + "X": 19.6, + "Value": 458 + }, + { + "X": 20.1, + "Value": 462 + }, + { + "X": 20.6, + "Value": 465 + }, + { + "X": 21.1, + "Value": 465 + }, + { + "X": 21.6, + "Value": 477 + }, + { + "X": 22.1, + "Value": 487 + }, + { + "X": 22.6, + "Value": 499 + }, + { + "X": 23.1, + "Value": 516 + }, + { + "X": 23.6, + "Value": 517 + }, + { + "X": 24.1, + "Value": 508 + }, + { + "X": 24.6, + "Value": 502 + }, + { + "X": 25.1, + "Value": 492 + }, + { + "X": 25.6, + "Value": 486 + }, + { + "X": 26.1, + "Value": 483 + }, + { + "X": 26.6, + "Value": 477 + }, + { + "X": 27.1, + "Value": 472 + }, + { + "X": 27.6, + "Value": 469 + }, + { + "X": 28.1, + "Value": 463 + }, + { + "X": 28.6, + "Value": 461 + }, + { + "X": 29.1, + "Value": 447 + }, + { + "X": 29.6, + "Value": 437 + }, + { + "X": 30.2, + "Value": 439 + }, + { + "X": 30.7, + "Value": 435 + }, + { + "X": 31.2, + "Value": 435 + }, + { + "X": 31.7, + "Value": 427 + }, + { + "X": 32.2, + "Value": 425 + }, + { + "X": 32.7, + "Value": 412 + }, + { + "X": 33.2, + "Value": 398 + }, + { + "X": 33.7, + "Value": 379 + }, + { + "X": 34.2, + "Value": 365 + }, + { + "X": 34.7, + "Value": 350 + }, + { + "X": 35.2, + "Value": 337 + }, + { + "X": 35.7, + "Value": 326 + }, + { + "X": 36.2, + "Value": 316 + }, + { + "X": 36.7, + "Value": 321 + }, + { + "X": 37.2, + "Value": 331 + }, + { + "X": 37.7, + "Value": 327 + }, + { + "X": 38.2, + "Value": 332 + }, + { + "X": 38.7, + "Value": 337 + }, + { + "X": 39.2, + "Value": 331 + }, + { + "X": 39.7, + "Value": 337 + }, + { + "X": 40.2, + "Value": 331 + }, + { + "X": 40.7, + "Value": 317 + }, + { + "X": 41.2, + "Value": 308 + }, + { + "X": 41.7, + "Value": 307 + }, + { + "X": 42.2, + "Value": 313 + }, + { + "X": 42.7, + "Value": 307 + }, + { + "X": 43.2, + "Value": 300 + }, + { + "X": 43.7, + "Value": 284 + }, + { + "X": 44.2, + "Value": 284 + }, + { + "X": 44.7, + "Value": 282 + }, + { + "X": 45.2, + "Value": 293 + }, + { + "X": 45.7, + "Value": 308 + }, + { + "X": 46.2, + "Value": 328 + }, + { + "X": 46.7, + "Value": 343 + }, + { + "X": 47.2, + "Value": 357 + }, + { + "X": 47.7, + "Value": 364 + }, + { + "X": 48.2, + "Value": 380 + }, + { + "X": 48.7, + "Value": 385 + }, + { + "X": 49.2, + "Value": 390 + }, + { + "X": 49.7, + "Value": 394 + }, + { + "X": 50.3, + "Value": 406 + }, + { + "X": 50.8, + "Value": 418 + }, + { + "X": 51.3, + "Value": 430 + }, + { + "X": 51.8, + "Value": 434 + }, + { + "X": 52.3, + "Value": 434 + }, + { + "X": 52.8, + "Value": 428 + }, + { + "X": 53.3, + "Value": 423 + }, + { + "X": 53.8, + "Value": 418 + }, + { + "X": 54.3, + "Value": 409 + }, + { + "X": 54.8, + "Value": 411 + }, + { + "X": 55.3, + "Value": 417 + }, + { + "X": 55.8, + "Value": 428 + }, + { + "X": 56.3, + "Value": 435 + }, + { + "X": 56.8, + "Value": 443 + }, + { + "X": 57.3, + "Value": 457 + }, + { + "X": 57.8, + "Value": 479 + }, + { + "X": 58.3, + "Value": 497 + }, + { + "X": 58.8, + "Value": 519 + }, + { + "X": 59.3, + "Value": 536 + }, + { + "X": 59.8, + "Value": 552 + }, + { + "X": 60.3, + "Value": 570 + }, + { + "X": 60.8, + "Value": 574 + }, + { + "X": 61.3, + "Value": 586 + }, + { + "X": 61.8, + "Value": 597 + }, + { + "X": 62.3, + "Value": 594 + }, + { + "X": 62.8, + "Value": 603 + }, + { + "X": 63.3, + "Value": 604 + }, + { + "X": 63.8, + "Value": 606 + }, + { + "X": 64.3, + "Value": 608 + }, + { + "X": 64.8, + "Value": 600 + }, + { + "X": 65.3, + "Value": 602 + }, + { + "X": 65.8, + "Value": 609 + }, + { + "X": 66.3, + "Value": 624 + }, + { + "X": 66.8, + "Value": 638 + }, + { + "X": 67.3, + "Value": 643 + }, + { + "X": 67.8, + "Value": 642 + }, + { + "X": 68.3, + "Value": 644 + }, + { + "X": 68.8, + "Value": 641 + }, + { + "X": 69.3, + "Value": 638 + }, + { + "X": 69.8, + "Value": 626 + }, + { + "X": 70.4, + "Value": 617 + }, + { + "X": 70.9, + "Value": 619 + }, + { + "X": 71.4, + "Value": 621 + }, + { + "X": 71.9, + "Value": 611 + }, + { + "X": 72.4, + "Value": 608 + }, + { + "X": 72.9, + "Value": 615 + }, + { + "X": 73.4, + "Value": 618 + }, + { + "X": 73.9, + "Value": 611 + }, + { + "X": 74.4, + "Value": 609 + }, + { + "X": 74.9, + "Value": 600 + }, + { + "X": 75.4, + "Value": 593 + }, + { + "X": 75.9, + "Value": 590 + }, + { + "X": 76.4, + "Value": 584 + }, + { + "X": 76.9, + "Value": 589 + }, + { + "X": 77.4, + "Value": 603 + }, + { + "X": 77.9, + "Value": 602 + }, + { + "X": 78.4, + "Value": 610 + }, + { + "X": 78.9, + "Value": 611 + }, + { + "X": 79.4, + "Value": 602 + }, + { + "X": 79.9, + "Value": 605 + }, + { + "X": 80.4, + "Value": 608 + }, + { + "X": 80.9, + "Value": 601 + }, + { + "X": 81.4, + "Value": 595 + }, + { + "X": 81.9, + "Value": 587 + }, + { + "X": 82.4, + "Value": 584 + }, + { + "X": 82.9, + "Value": 572 + }, + { + "X": 83.4, + "Value": 574 + }, + { + "X": 83.9, + "Value": 580 + }, + { + "X": 84.4, + "Value": 584 + }, + { + "X": 84.9, + "Value": 579 + }, + { + "X": 85.4, + "Value": 567 + }, + { + "X": 85.9, + "Value": 561 + }, + { + "X": 86.4, + "Value": 558 + }, + { + "X": 86.9, + "Value": 565 + }, + { + "X": 87.4, + "Value": 580 + }, + { + "X": 87.9, + "Value": 579 + }, + { + "X": 88.4, + "Value": 588 + }, + { + "X": 88.9, + "Value": 590 + }, + { + "X": 89.4, + "Value": 587 + }, + { + "X": 89.9, + "Value": 588 + }, + { + "X": 90.5, + "Value": 579 + }, + { + "X": 91, + "Value": 581 + }, + { + "X": 91.5, + "Value": 593 + }, + { + "X": 92, + "Value": 594 + }, + { + "X": 92.5, + "Value": 606 + }, + { + "X": 93, + "Value": 604 + }, + { + "X": 93.5, + "Value": 603 + }, + { + "X": 94, + "Value": 603 + }, + { + "X": 94.5, + "Value": 597 + }, + { + "X": 95, + "Value": 582 + }, + { + "X": 95.5, + "Value": 582 + }, + { + "X": 96, + "Value": 583 + }, + { + "X": 96.5, + "Value": 587 + }, + { + "X": 97, + "Value": 596 + }, + { + "X": 97.5, + "Value": 604 + }, + { + "X": 98, + "Value": 611 + }, + { + "X": 98.5, + "Value": 627 + }, + { + "X": 99, + "Value": 637 + }, + { + "X": 99.5, + "Value": 656 + }, + { + "X": 100, + "Value": 674 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/16-card16.flint.json b/test-harness/excel/evaluations/inputs/line-chart/16-card16.flint.json new file mode 100644 index 00000000..4a960e80 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/16-card16.flint.json @@ -0,0 +1,108 @@ +{ + "semantic_types": { + "Date": "Date", + "Revenue": "Quantity", + "Type": "Category" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "Date", + "y": "Revenue", + "strokeDash": "Type" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2024-01-01", + "Revenue": 94, + "Type": "actual" + }, + { + "Date": "2024-03-09", + "Revenue": 89, + "Type": "actual" + }, + { + "Date": "2024-05-16", + "Revenue": 97, + "Type": "actual" + }, + { + "Date": "2024-07-24", + "Revenue": 92, + "Type": "actual" + }, + { + "Date": "2024-09-30", + "Revenue": 100, + "Type": "actual" + }, + { + "Date": "2024-12-08", + "Revenue": 98, + "Type": "actual" + }, + { + "Date": "2025-02-14", + "Revenue": 106, + "Type": "actual" + }, + { + "Date": "2025-04-24", + "Revenue": 103, + "Type": "actual" + }, + { + "Date": "2025-07-01", + "Revenue": 105, + "Type": "actual" + }, + { + "Date": "2025-09-07", + "Revenue": 103, + "Type": "actual" + }, + { + "Date": "2025-11-15", + "Revenue": 104, + "Type": "actual" + }, + { + "Date": "2026-01-22", + "Revenue": 107, + "Type": "actual" + }, + { + "Date": "2026-01-22", + "Revenue": 107, + "Type": "forecast" + }, + { + "Date": "2026-04-01", + "Revenue": 118, + "Type": "forecast" + }, + { + "Date": "2026-06-08", + "Revenue": 123, + "Type": "forecast" + }, + { + "Date": "2026-08-16", + "Revenue": 131, + "Type": "forecast" + }, + { + "Date": "2026-10-23", + "Revenue": 143, + "Type": "forecast" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/line-chart/17-card13.flint.json b/test-harness/excel/evaluations/inputs/line-chart/17-card13.flint.json new file mode 100644 index 00000000..4ff315e8 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/line-chart/17-card13.flint.json @@ -0,0 +1,277 @@ +{ + "semantic_types": { + "Date": "Date", + "Sales": "Quantity", + "Product": "Category", + "Type": "Category" + }, + "chart_spec": { + "chartType": "Line Chart", + "encodings": { + "x": "Date", + "y": "Sales", + "color": "Product", + "strokeDash": "Type" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2024-01-01", + "Sales": 129, + "Product": "Widget A", + "Type": "actual" + }, + { + "Date": "2024-03-25", + "Sales": 133, + "Product": "Widget A", + "Type": "actual" + }, + { + "Date": "2024-06-17", + "Sales": 131, + "Product": "Widget A", + "Type": "actual" + }, + { + "Date": "2024-09-09", + "Sales": 134, + "Product": "Widget A", + "Type": "actual" + }, + { + "Date": "2024-12-02", + "Sales": 132, + "Product": "Widget A", + "Type": "actual" + }, + { + "Date": "2025-02-25", + "Sales": 130, + "Product": "Widget A", + "Type": "actual" + }, + { + "Date": "2025-05-20", + "Sales": 129, + "Product": "Widget A", + "Type": "actual" + }, + { + "Date": "2025-08-12", + "Sales": 133, + "Product": "Widget A", + "Type": "actual" + }, + { + "Date": "2025-11-04", + "Sales": 132, + "Product": "Widget A", + "Type": "actual" + }, + { + "Date": "2026-01-28", + "Sales": 135, + "Product": "Widget A", + "Type": "actual" + }, + { + "Date": "2026-01-28", + "Sales": 135, + "Product": "Widget A", + "Type": "forecast" + }, + { + "Date": "2026-04-22", + "Sales": 139, + "Product": "Widget A", + "Type": "forecast" + }, + { + "Date": "2026-07-15", + "Sales": 149, + "Product": "Widget A", + "Type": "forecast" + }, + { + "Date": "2026-10-07", + "Sales": 153, + "Product": "Widget A", + "Type": "forecast" + }, + { + "Date": "2024-01-01", + "Sales": 100, + "Product": "Widget B", + "Type": "actual" + }, + { + "Date": "2024-03-25", + "Sales": 97, + "Product": "Widget B", + "Type": "actual" + }, + { + "Date": "2024-06-17", + "Sales": 102, + "Product": "Widget B", + "Type": "actual" + }, + { + "Date": "2024-09-09", + "Sales": 108, + "Product": "Widget B", + "Type": "actual" + }, + { + "Date": "2024-12-02", + "Sales": 109, + "Product": "Widget B", + "Type": "actual" + }, + { + "Date": "2025-02-25", + "Sales": 113, + "Product": "Widget B", + "Type": "actual" + }, + { + "Date": "2025-05-20", + "Sales": 118, + "Product": "Widget B", + "Type": "actual" + }, + { + "Date": "2025-08-12", + "Sales": 126, + "Product": "Widget B", + "Type": "actual" + }, + { + "Date": "2025-11-04", + "Sales": 131, + "Product": "Widget B", + "Type": "actual" + }, + { + "Date": "2026-01-28", + "Sales": 137, + "Product": "Widget B", + "Type": "actual" + }, + { + "Date": "2026-01-28", + "Sales": 137, + "Product": "Widget B", + "Type": "forecast" + }, + { + "Date": "2026-04-22", + "Sales": 142, + "Product": "Widget B", + "Type": "forecast" + }, + { + "Date": "2026-07-15", + "Sales": 145, + "Product": "Widget B", + "Type": "forecast" + }, + { + "Date": "2026-10-07", + "Sales": 156, + "Product": "Widget B", + "Type": "forecast" + }, + { + "Date": "2024-01-01", + "Sales": 68, + "Product": "Widget C", + "Type": "actual" + }, + { + "Date": "2024-03-25", + "Sales": 68, + "Product": "Widget C", + "Type": "actual" + }, + { + "Date": "2024-06-17", + "Sales": 69, + "Product": "Widget C", + "Type": "actual" + }, + { + "Date": "2024-09-09", + "Sales": 69, + "Product": "Widget C", + "Type": "actual" + }, + { + "Date": "2024-12-02", + "Sales": 69, + "Product": "Widget C", + "Type": "actual" + }, + { + "Date": "2025-02-25", + "Sales": 69, + "Product": "Widget C", + "Type": "actual" + }, + { + "Date": "2025-05-20", + "Sales": 69, + "Product": "Widget C", + "Type": "actual" + }, + { + "Date": "2025-08-12", + "Sales": 70, + "Product": "Widget C", + "Type": "actual" + }, + { + "Date": "2025-11-04", + "Sales": 71, + "Product": "Widget C", + "Type": "actual" + }, + { + "Date": "2026-01-28", + "Sales": 70, + "Product": "Widget C", + "Type": "actual" + }, + { + "Date": "2026-01-28", + "Sales": 70, + "Product": "Widget C", + "Type": "forecast" + }, + { + "Date": "2026-04-22", + "Sales": 76, + "Product": "Widget C", + "Type": "forecast" + }, + { + "Date": "2026-07-15", + "Sales": 82, + "Product": "Widget C", + "Type": "forecast" + }, + { + "Date": "2026-10-07", + "Sales": 87, + "Product": "Widget C", + "Type": "forecast" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/pie-chart/00-card0.flint.json b/test-harness/excel/evaluations/inputs/pie-chart/00-card0.flint.json new file mode 100644 index 00000000..e222d764 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/pie-chart/00-card0.flint.json @@ -0,0 +1,37 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Pie Chart", + "encodings": { + "size": "Value", + "color": "Category" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Electronics", + "Value": 103 + }, + { + "Category": "Clothing", + "Value": 215 + }, + { + "Category": "Food", + "Value": 342 + }, + { + "Category": "Books", + "Value": 560 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/pie-chart/01-card0.flint.json b/test-harness/excel/evaluations/inputs/pie-chart/01-card0.flint.json new file mode 100644 index 00000000..ea0b281c --- /dev/null +++ b/test-harness/excel/evaluations/inputs/pie-chart/01-card0.flint.json @@ -0,0 +1,61 @@ +{ + "semantic_types": { + "Product": "Product", + "Revenue": "Amount" + }, + "chart_spec": { + "chartType": "Pie Chart", + "encodings": { + "size": "Revenue", + "color": "Product" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Product": "Laptop", + "Revenue": 2924 + }, + { + "Product": "Phone", + "Revenue": 2506 + }, + { + "Product": "Tablet", + "Revenue": 6721 + }, + { + "Product": "Desktop", + "Revenue": 1826 + }, + { + "Product": "Monitor", + "Revenue": 4934 + }, + { + "Product": "Keyboard", + "Revenue": 7789 + }, + { + "Product": "Mouse", + "Revenue": 8215 + }, + { + "Product": "Headphones", + "Revenue": 5798 + }, + { + "Product": "Speaker", + "Revenue": 7950 + }, + { + "Product": "Camera", + "Revenue": 6919 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/pie-chart/02-card0.flint.json b/test-harness/excel/evaluations/inputs/pie-chart/02-card0.flint.json new file mode 100644 index 00000000..552d5daf --- /dev/null +++ b/test-harness/excel/evaluations/inputs/pie-chart/02-card0.flint.json @@ -0,0 +1,101 @@ +{ + "semantic_types": { + "Region": "Category", + "Sales": "Quantity" + }, + "chart_spec": { + "chartType": "Pie Chart", + "encodings": { + "size": "Sales", + "color": "Region" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Region": "Electronics", + "Sales": 4347 + }, + { + "Region": "Clothing", + "Sales": 4301 + }, + { + "Region": "Food", + "Sales": 5098 + }, + { + "Region": "Books", + "Sales": 1293 + }, + { + "Region": "Sports", + "Sales": 4163 + }, + { + "Region": "Home", + "Sales": 2869 + }, + { + "Region": "Garden", + "Sales": 5444 + }, + { + "Region": "Auto", + "Sales": 2591 + }, + { + "Region": "Health", + "Sales": 1407 + }, + { + "Region": "Beauty", + "Sales": 2246 + }, + { + "Region": "Toys", + "Sales": 5168 + }, + { + "Region": "Music", + "Sales": 3215 + }, + { + "Region": "Movies", + "Sales": 3360 + }, + { + "Region": "Software", + "Sales": 1176 + }, + { + "Region": "Games", + "Sales": 4497 + }, + { + "Region": "Office", + "Sales": 5262 + }, + { + "Region": "Pet", + "Sales": 1783 + }, + { + "Region": "Baby", + "Sales": 4292 + }, + { + "Region": "Tools", + "Sales": 5312 + }, + { + "Region": "Crafts", + "Sales": 5358 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/pie-chart/03-card0.flint.json b/test-harness/excel/evaluations/inputs/pie-chart/03-card0.flint.json new file mode 100644 index 00000000..135404a9 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/pie-chart/03-card0.flint.json @@ -0,0 +1,45 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Pie Chart", + "encodings": { + "size": "Value", + "color": "Category" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Dominant", + "Value": 5000 + }, + { + "Category": "Small-A", + "Value": 200 + }, + { + "Category": "Small-B", + "Value": 180 + }, + { + "Category": "Small-C", + "Value": 150 + }, + { + "Category": "Tiny-1", + "Value": 30 + }, + { + "Category": "Tiny-2", + "Value": 20 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/pyramid-chart/00-card18.flint.json b/test-harness/excel/evaluations/inputs/pyramid-chart/00-card18.flint.json new file mode 100644 index 00000000..0ac8cd77 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/pyramid-chart/00-card18.flint.json @@ -0,0 +1,113 @@ +{ + "semantic_types": { + "Age Group": "Category", + "Population": "Quantity", + "Gender": "Category" + }, + "chart_spec": { + "chartType": "Pyramid Chart", + "encodings": { + "y": "Age Group", + "x": "Population", + "color": "Gender" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Age Group": "0-9", + "Gender": "Male", + "Population": 527 + }, + { + "Age Group": "0-9", + "Gender": "Female", + "Population": 1422 + }, + { + "Age Group": "10-19", + "Gender": "Male", + "Population": 974 + }, + { + "Age Group": "10-19", + "Gender": "Female", + "Population": 2170 + }, + { + "Age Group": "20-29", + "Gender": "Male", + "Population": 4821 + }, + { + "Age Group": "20-29", + "Gender": "Female", + "Population": 1091 + }, + { + "Age Group": "30-39", + "Gender": "Male", + "Population": 2992 + }, + { + "Age Group": "30-39", + "Gender": "Female", + "Population": 2650 + }, + { + "Age Group": "40-49", + "Gender": "Male", + "Population": 4160 + }, + { + "Age Group": "40-49", + "Gender": "Female", + "Population": 1654 + }, + { + "Age Group": "50-59", + "Gender": "Male", + "Population": 4915 + }, + { + "Age Group": "50-59", + "Gender": "Female", + "Population": 3139 + }, + { + "Age Group": "60-69", + "Gender": "Male", + "Population": 3470 + }, + { + "Age Group": "60-69", + "Gender": "Female", + "Population": 4381 + }, + { + "Age Group": "70-79", + "Gender": "Male", + "Population": 2929 + }, + { + "Age Group": "70-79", + "Gender": "Female", + "Population": 3097 + }, + { + "Age Group": "80+", + "Gender": "Male", + "Population": 2674 + }, + { + "Age Group": "80+", + "Gender": "Female", + "Population": 4917 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/pyramid-chart/01-card12.flint.json b/test-harness/excel/evaluations/inputs/pyramid-chart/01-card12.flint.json new file mode 100644 index 00000000..f35621c1 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/pyramid-chart/01-card12.flint.json @@ -0,0 +1,83 @@ +{ + "semantic_types": { + "Grade": "Category", + "Count": "Count", + "Type": "Category" + }, + "chart_spec": { + "chartType": "Pyramid Chart", + "encodings": { + "y": "Grade", + "x": "Count", + "color": "Type" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Grade": "Junior", + "Type": "Full-Time", + "Count": 203 + }, + { + "Grade": "Junior", + "Type": "Part-Time", + "Count": 85 + }, + { + "Grade": "Mid-level", + "Type": "Full-Time", + "Count": 97 + }, + { + "Grade": "Mid-level", + "Type": "Part-Time", + "Count": 60 + }, + { + "Grade": "Senior", + "Type": "Full-Time", + "Count": 147 + }, + { + "Grade": "Senior", + "Type": "Part-Time", + "Count": 86 + }, + { + "Grade": "Lead", + "Type": "Full-Time", + "Count": 114 + }, + { + "Grade": "Lead", + "Type": "Part-Time", + "Count": 44 + }, + { + "Grade": "Manager", + "Type": "Full-Time", + "Count": 111 + }, + { + "Grade": "Manager", + "Type": "Part-Time", + "Count": 18 + }, + { + "Grade": "Director", + "Type": "Full-Time", + "Count": 66 + }, + { + "Grade": "Director", + "Type": "Part-Time", + "Count": 76 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/pyramid-chart/02-card10.flint.json b/test-harness/excel/evaluations/inputs/pyramid-chart/02-card10.flint.json new file mode 100644 index 00000000..ce03f066 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/pyramid-chart/02-card10.flint.json @@ -0,0 +1,73 @@ +{ + "semantic_types": { + "Satisfaction Level": "Category", + "Count": "Count", + "Response": "Category" + }, + "chart_spec": { + "chartType": "Pyramid Chart", + "encodings": { + "y": "Satisfaction Level", + "x": "Count", + "color": "Response" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Satisfaction Level": "Very Low", + "Response": "Agree", + "Count": 146 + }, + { + "Satisfaction Level": "Very Low", + "Response": "Disagree", + "Count": 87 + }, + { + "Satisfaction Level": "Low", + "Response": "Agree", + "Count": 328 + }, + { + "Satisfaction Level": "Low", + "Response": "Disagree", + "Count": 250 + }, + { + "Satisfaction Level": "Medium", + "Response": "Agree", + "Count": 331 + }, + { + "Satisfaction Level": "Medium", + "Response": "Disagree", + "Count": 39 + }, + { + "Satisfaction Level": "High", + "Response": "Agree", + "Count": 218 + }, + { + "Satisfaction Level": "High", + "Response": "Disagree", + "Count": 213 + }, + { + "Satisfaction Level": "Very High", + "Response": "Agree", + "Count": 61 + }, + { + "Satisfaction Level": "Very High", + "Response": "Disagree", + "Count": 247 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/pyramid-chart/03-card24.flint.json b/test-harness/excel/evaluations/inputs/pyramid-chart/03-card24.flint.json new file mode 100644 index 00000000..c8755ebe --- /dev/null +++ b/test-harness/excel/evaluations/inputs/pyramid-chart/03-card24.flint.json @@ -0,0 +1,143 @@ +{ + "semantic_types": { + "Income Bracket": "Category", + "Count": "Count", + "Area": "Category" + }, + "chart_spec": { + "chartType": "Pyramid Chart", + "encodings": { + "y": "Income Bracket", + "x": "Count", + "color": "Area" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Income Bracket": "<$20K", + "Area": "Urban", + "Count": 2948 + }, + { + "Income Bracket": "<$20K", + "Area": "Rural", + "Count": 963 + }, + { + "Income Bracket": "$20-30K", + "Area": "Urban", + "Count": 1621 + }, + { + "Income Bracket": "$20-30K", + "Area": "Rural", + "Count": 795 + }, + { + "Income Bracket": "$30-40K", + "Area": "Urban", + "Count": 790 + }, + { + "Income Bracket": "$30-40K", + "Area": "Rural", + "Count": 1034 + }, + { + "Income Bracket": "$40-50K", + "Area": "Urban", + "Count": 2441 + }, + { + "Income Bracket": "$40-50K", + "Area": "Rural", + "Count": 915 + }, + { + "Income Bracket": "$50-60K", + "Area": "Urban", + "Count": 2787 + }, + { + "Income Bracket": "$50-60K", + "Area": "Rural", + "Count": 263 + }, + { + "Income Bracket": "$60-70K", + "Area": "Urban", + "Count": 1799 + }, + { + "Income Bracket": "$60-70K", + "Area": "Rural", + "Count": 475 + }, + { + "Income Bracket": "$70-80K", + "Area": "Urban", + "Count": 2352 + }, + { + "Income Bracket": "$70-80K", + "Area": "Rural", + "Count": 1285 + }, + { + "Income Bracket": "$80-90K", + "Area": "Urban", + "Count": 547 + }, + { + "Income Bracket": "$80-90K", + "Area": "Rural", + "Count": 832 + }, + { + "Income Bracket": "$90-100K", + "Area": "Urban", + "Count": 172 + }, + { + "Income Bracket": "$90-100K", + "Area": "Rural", + "Count": 1038 + }, + { + "Income Bracket": "$100-120K", + "Area": "Urban", + "Count": 1464 + }, + { + "Income Bracket": "$100-120K", + "Area": "Rural", + "Count": 197 + }, + { + "Income Bracket": "$120-150K", + "Area": "Urban", + "Count": 2846 + }, + { + "Income Bracket": "$120-150K", + "Area": "Rural", + "Count": 109 + }, + { + "Income Bracket": "$150K+", + "Area": "Urban", + "Count": 577 + }, + { + "Income Bracket": "$150K+", + "Area": "Rural", + "Count": 1857 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/pyramid-chart/04-card10.flint.json b/test-harness/excel/evaluations/inputs/pyramid-chart/04-card10.flint.json new file mode 100644 index 00000000..6f67c702 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/pyramid-chart/04-card10.flint.json @@ -0,0 +1,73 @@ +{ + "semantic_types": { + "Degree Level": "Category", + "Count": "Count", + "Outcome": "Category" + }, + "chart_spec": { + "chartType": "Pyramid Chart", + "encodings": { + "y": "Degree Level", + "x": "Count", + "color": "Outcome" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Degree Level": "High School", + "Outcome": "Admitted", + "Count": 3305 + }, + { + "Degree Level": "High School", + "Outcome": "Rejected", + "Count": 2560 + }, + { + "Degree Level": "Associate", + "Outcome": "Admitted", + "Count": 4171 + }, + { + "Degree Level": "Associate", + "Outcome": "Rejected", + "Count": 1598 + }, + { + "Degree Level": "Bachelor", + "Outcome": "Admitted", + "Count": 2264 + }, + { + "Degree Level": "Bachelor", + "Outcome": "Rejected", + "Count": 1009 + }, + { + "Degree Level": "Master", + "Outcome": "Admitted", + "Count": 447 + }, + { + "Degree Level": "Master", + "Outcome": "Rejected", + "Count": 1535 + }, + { + "Degree Level": "Doctorate", + "Outcome": "Admitted", + "Count": 1663 + }, + { + "Degree Level": "Doctorate", + "Outcome": "Rejected", + "Count": 208 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/pyramid-chart/05-card20.flint.json b/test-harness/excel/evaluations/inputs/pyramid-chart/05-card20.flint.json new file mode 100644 index 00000000..33e56e8a --- /dev/null +++ b/test-harness/excel/evaluations/inputs/pyramid-chart/05-card20.flint.json @@ -0,0 +1,123 @@ +{ + "semantic_types": { + "Country": "Country", + "Value": "Amount", + "Direction": "Category" + }, + "chart_spec": { + "chartType": "Pyramid Chart", + "encodings": { + "y": "Country", + "x": "Value", + "color": "Direction" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Country": "USA", + "Direction": "Import", + "Value": 31686 + }, + { + "Country": "USA", + "Direction": "Export", + "Value": 44720 + }, + { + "Country": "China", + "Direction": "Import", + "Value": 8071 + }, + { + "Country": "China", + "Direction": "Export", + "Value": 46763 + }, + { + "Country": "Japan", + "Direction": "Import", + "Value": 35829 + }, + { + "Country": "Japan", + "Direction": "Export", + "Value": 23447 + }, + { + "Country": "Germany", + "Direction": "Import", + "Value": 11702 + }, + { + "Country": "Germany", + "Direction": "Export", + "Value": 21445 + }, + { + "Country": "UK", + "Direction": "Import", + "Value": 17460 + }, + { + "Country": "UK", + "Direction": "Export", + "Value": 47488 + }, + { + "Country": "France", + "Direction": "Import", + "Value": 32401 + }, + { + "Country": "France", + "Direction": "Export", + "Value": 8762 + }, + { + "Country": "India", + "Direction": "Import", + "Value": 3322 + }, + { + "Country": "India", + "Direction": "Export", + "Value": 33256 + }, + { + "Country": "Brazil", + "Direction": "Import", + "Value": 29939 + }, + { + "Country": "Brazil", + "Direction": "Export", + "Value": 22031 + }, + { + "Country": "Canada", + "Direction": "Import", + "Value": 10621 + }, + { + "Country": "Canada", + "Direction": "Export", + "Value": 1603 + }, + { + "Country": "Australia", + "Direction": "Import", + "Value": 37942 + }, + { + "Country": "Australia", + "Direction": "Export", + "Value": 41683 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/pyramid-chart/06-card40.flint.json b/test-harness/excel/evaluations/inputs/pyramid-chart/06-card40.flint.json new file mode 100644 index 00000000..cdb0f397 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/pyramid-chart/06-card40.flint.json @@ -0,0 +1,223 @@ +{ + "semantic_types": { + "Age Band": "Category", + "Population": "Quantity", + "Gender": "Category" + }, + "chart_spec": { + "chartType": "Pyramid Chart", + "encodings": { + "y": "Age Band", + "x": "Population", + "color": "Gender" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Age Band": "0-4", + "Gender": "Male", + "Population": 2562 + }, + { + "Age Band": "0-4", + "Gender": "Female", + "Population": 2821 + }, + { + "Age Band": "5-9", + "Gender": "Male", + "Population": 1694 + }, + { + "Age Band": "5-9", + "Gender": "Female", + "Population": 7030 + }, + { + "Age Band": "10-14", + "Gender": "Male", + "Population": 2276 + }, + { + "Age Band": "10-14", + "Gender": "Female", + "Population": 6293 + }, + { + "Age Band": "15-19", + "Gender": "Male", + "Population": 4082 + }, + { + "Age Band": "15-19", + "Gender": "Female", + "Population": 4774 + }, + { + "Age Band": "20-24", + "Gender": "Male", + "Population": 1512 + }, + { + "Age Band": "20-24", + "Gender": "Female", + "Population": 4685 + }, + { + "Age Band": "25-29", + "Gender": "Male", + "Population": 3723 + }, + { + "Age Band": "25-29", + "Gender": "Female", + "Population": 1606 + }, + { + "Age Band": "30-34", + "Gender": "Male", + "Population": 3954 + }, + { + "Age Band": "30-34", + "Gender": "Female", + "Population": 5662 + }, + { + "Age Band": "35-39", + "Gender": "Male", + "Population": 2340 + }, + { + "Age Band": "35-39", + "Gender": "Female", + "Population": 2752 + }, + { + "Age Band": "40-44", + "Gender": "Male", + "Population": 2722 + }, + { + "Age Band": "40-44", + "Gender": "Female", + "Population": 3587 + }, + { + "Age Band": "45-49", + "Gender": "Male", + "Population": 7493 + }, + { + "Age Band": "45-49", + "Gender": "Female", + "Population": 1024 + }, + { + "Age Band": "50-54", + "Gender": "Male", + "Population": 4263 + }, + { + "Age Band": "50-54", + "Gender": "Female", + "Population": 2318 + }, + { + "Age Band": "55-59", + "Gender": "Male", + "Population": 1315 + }, + { + "Age Band": "55-59", + "Gender": "Female", + "Population": 2663 + }, + { + "Age Band": "60-64", + "Gender": "Male", + "Population": 2837 + }, + { + "Age Band": "60-64", + "Gender": "Female", + "Population": 2936 + }, + { + "Age Band": "65-69", + "Gender": "Male", + "Population": 5796 + }, + { + "Age Band": "65-69", + "Gender": "Female", + "Population": 3040 + }, + { + "Age Band": "70-74", + "Gender": "Male", + "Population": 2846 + }, + { + "Age Band": "70-74", + "Gender": "Female", + "Population": 7447 + }, + { + "Age Band": "75-79", + "Gender": "Male", + "Population": 7263 + }, + { + "Age Band": "75-79", + "Gender": "Female", + "Population": 4439 + }, + { + "Age Band": "80-84", + "Gender": "Male", + "Population": 6170 + }, + { + "Age Band": "80-84", + "Gender": "Female", + "Population": 3486 + }, + { + "Age Band": "85-89", + "Gender": "Male", + "Population": 4649 + }, + { + "Age Band": "85-89", + "Gender": "Female", + "Population": 6026 + }, + { + "Age Band": "90-94", + "Gender": "Male", + "Population": 1734 + }, + { + "Age Band": "90-94", + "Gender": "Female", + "Population": 5397 + }, + { + "Age Band": "95-99", + "Gender": "Male", + "Population": 6683 + }, + { + "Age Band": "95-99", + "Gender": "Female", + "Population": 3448 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/pyramid-chart/07-card12.flint.json b/test-harness/excel/evaluations/inputs/pyramid-chart/07-card12.flint.json new file mode 100644 index 00000000..68ed2b33 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/pyramid-chart/07-card12.flint.json @@ -0,0 +1,83 @@ +{ + "semantic_types": { + "Age Group": "Category", + "Population": "Quantity", + "Gender": "Category" + }, + "chart_spec": { + "chartType": "Pyramid Chart", + "encodings": { + "y": "Age Group", + "x": "Population", + "color": "Gender" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Age Group": "0-14", + "Gender": "Male", + "Population": 2612 + }, + { + "Age Group": "0-14", + "Gender": "Female", + "Population": 619 + }, + { + "Age Group": "15-29", + "Gender": "Male", + "Population": 695 + }, + { + "Age Group": "15-29", + "Gender": "Female", + "Population": 1916 + }, + { + "Age Group": "30-44", + "Gender": "Male", + "Population": 476 + }, + { + "Age Group": "30-44", + "Gender": "Female", + "Population": -257 + }, + { + "Age Group": "45-59", + "Gender": "Male", + "Population": 1558 + }, + { + "Age Group": "45-59", + "Gender": "Female", + "Population": 934 + }, + { + "Age Group": "60-74", + "Gender": "Male", + "Population": 2 + }, + { + "Age Group": "60-74", + "Gender": "Female", + "Population": 98 + }, + { + "Age Group": "75+", + "Gender": "Male", + "Population": -388 + }, + { + "Age Group": "75+", + "Gender": "Female", + "Population": 1841 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/radar-chart/00-card5.flint.json b/test-harness/excel/evaluations/inputs/radar-chart/00-card5.flint.json new file mode 100644 index 00000000..577fd9a8 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/radar-chart/00-card5.flint.json @@ -0,0 +1,48 @@ +{ + "semantic_types": { + "Player": "Category", + "Metric": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Radar Chart", + "encodings": { + "x": "Metric", + "y": "Value", + "color": "Player" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Player": "Player A", + "Metric": "Speed", + "Value": 85 + }, + { + "Player": "Player A", + "Metric": "Shooting", + "Value": 70 + }, + { + "Player": "Player A", + "Metric": "Passing", + "Value": 90 + }, + { + "Player": "Player A", + "Metric": "Dribbling", + "Value": 80 + }, + { + "Player": "Player A", + "Metric": "Defense", + "Value": 60 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/radar-chart/01-card6.flint.json b/test-harness/excel/evaluations/inputs/radar-chart/01-card6.flint.json new file mode 100644 index 00000000..20c379a0 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/radar-chart/01-card6.flint.json @@ -0,0 +1,83 @@ +{ + "semantic_types": { + "Team": "Category", + "Metric": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Radar Chart", + "encodings": { + "x": "Metric", + "y": "Value", + "color": "Team" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Team": "Team A", + "Metric": "Attack", + "Value": 85 + }, + { + "Team": "Team A", + "Metric": "Defense", + "Value": 70 + }, + { + "Team": "Team A", + "Metric": "Midfield", + "Value": 78 + }, + { + "Team": "Team A", + "Metric": "Speed", + "Value": 90 + }, + { + "Team": "Team A", + "Metric": "Stamina", + "Value": 65 + }, + { + "Team": "Team A", + "Metric": "Tactics", + "Value": 80 + }, + { + "Team": "Team B", + "Metric": "Attack", + "Value": 72 + }, + { + "Team": "Team B", + "Metric": "Defense", + "Value": 88 + }, + { + "Team": "Team B", + "Metric": "Midfield", + "Value": 82 + }, + { + "Team": "Team B", + "Metric": "Speed", + "Value": 68 + }, + { + "Team": "Team B", + "Metric": "Stamina", + "Value": 85 + }, + { + "Team": "Team B", + "Metric": "Tactics", + "Value": 75 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/radar-chart/02-card5.flint.json b/test-harness/excel/evaluations/inputs/radar-chart/02-card5.flint.json new file mode 100644 index 00000000..8cb22580 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/radar-chart/02-card5.flint.json @@ -0,0 +1,101 @@ +{ + "semantic_types": { + "Product": "Category", + "Metric": "Category", + "Value": "Quantity" + }, + "chart_spec": { + "chartType": "Radar Chart", + "encodings": { + "x": "Metric", + "y": "Value", + "color": "Product" + }, + "baseSize": { + "width": 560, + "height": 360 + }, + "chartProperties": { + "filled": false + } + }, + "data": { + "values": [ + { + "Product": "Widget", + "Metric": "Quality", + "Value": 90 + }, + { + "Product": "Widget", + "Metric": "Price", + "Value": 60 + }, + { + "Product": "Widget", + "Metric": "Durability", + "Value": 80 + }, + { + "Product": "Widget", + "Metric": "Design", + "Value": 75 + }, + { + "Product": "Widget", + "Metric": "Support", + "Value": 85 + }, + { + "Product": "Gadget", + "Metric": "Quality", + "Value": 70 + }, + { + "Product": "Gadget", + "Metric": "Price", + "Value": 85 + }, + { + "Product": "Gadget", + "Metric": "Durability", + "Value": 65 + }, + { + "Product": "Gadget", + "Metric": "Design", + "Value": 90 + }, + { + "Product": "Gadget", + "Metric": "Support", + "Value": 50 + }, + { + "Product": "Doohickey", + "Metric": "Quality", + "Value": 80 + }, + { + "Product": "Doohickey", + "Metric": "Price", + "Value": 70 + }, + { + "Product": "Doohickey", + "Metric": "Durability", + "Value": 90 + }, + { + "Product": "Doohickey", + "Metric": "Design", + "Value": 60 + }, + { + "Product": "Doohickey", + "Metric": "Support", + "Value": 70 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/radar-chart/04-card5.flint.json b/test-harness/excel/evaluations/inputs/radar-chart/04-card5.flint.json new file mode 100644 index 00000000..022dec3e --- /dev/null +++ b/test-harness/excel/evaluations/inputs/radar-chart/04-card5.flint.json @@ -0,0 +1,73 @@ +{ + "semantic_types": { + "Category": "Category", + "Assessment": "Category", + "Score": "Quantity" + }, + "chart_spec": { + "chartType": "Radar Chart", + "encodings": { + "x": "Category", + "y": "Score", + "color": "Assessment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Customer Satisfaction Score", + "Assessment": "Product A", + "Score": 82 + }, + { + "Category": "Annual Revenue Growth Rate", + "Assessment": "Product A", + "Score": 91 + }, + { + "Category": "Employee Retention", + "Assessment": "Product A", + "Score": 74 + }, + { + "Category": "Market Share Percentage", + "Assessment": "Product A", + "Score": 68 + }, + { + "Category": "Net Promoter Score", + "Assessment": "Product A", + "Score": 88 + }, + { + "Category": "Customer Satisfaction Score", + "Assessment": "Product B", + "Score": 70 + }, + { + "Category": "Annual Revenue Growth Rate", + "Assessment": "Product B", + "Score": 65 + }, + { + "Category": "Employee Retention", + "Assessment": "Product B", + "Score": 85 + }, + { + "Category": "Market Share Percentage", + "Assessment": "Product B", + "Score": 78 + }, + { + "Category": "Net Promoter Score", + "Assessment": "Product B", + "Score": 60 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/radar-chart/05-card8.flint.json b/test-harness/excel/evaluations/inputs/radar-chart/05-card8.flint.json new file mode 100644 index 00000000..0fd99b23 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/radar-chart/05-card8.flint.json @@ -0,0 +1,103 @@ +{ + "semantic_types": { + "App": "Category", + "KPI": "Category", + "Rating": "Quantity" + }, + "chart_spec": { + "chartType": "Radar Chart", + "encodings": { + "x": "KPI", + "y": "Rating", + "color": "App" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "App": "Frontend", + "KPI": "Overall User Experience", + "Rating": 56 + }, + { + "App": "Backend", + "KPI": "Overall User Experience", + "Rating": 87 + }, + { + "App": "Frontend", + "KPI": "First Contentful Paint", + "Rating": 76 + }, + { + "App": "Backend", + "KPI": "First Contentful Paint", + "Rating": 50 + }, + { + "App": "Frontend", + "KPI": "Time to Interactive", + "Rating": 72 + }, + { + "App": "Backend", + "KPI": "Time to Interactive", + "Rating": 100 + }, + { + "App": "Frontend", + "KPI": "Cumulative Layout Shift", + "Rating": 99 + }, + { + "App": "Backend", + "KPI": "Cumulative Layout Shift", + "Rating": 68 + }, + { + "App": "Frontend", + "KPI": "Server Response Time", + "Rating": 53 + }, + { + "App": "Backend", + "KPI": "Server Response Time", + "Rating": 87 + }, + { + "App": "Frontend", + "KPI": "Error Rate per Minute", + "Rating": 57 + }, + { + "App": "Backend", + "KPI": "Error Rate per Minute", + "Rating": 89 + }, + { + "App": "Frontend", + "KPI": "Database Query Latency", + "Rating": 51 + }, + { + "App": "Backend", + "KPI": "Database Query Latency", + "Rating": 76 + }, + { + "App": "Frontend", + "KPI": "API Throughput", + "Rating": 93 + }, + { + "App": "Backend", + "KPI": "API Throughput", + "Rating": 53 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/radar-chart/06-card12.flint.json b/test-harness/excel/evaluations/inputs/radar-chart/06-card12.flint.json new file mode 100644 index 00000000..75eaad1a --- /dev/null +++ b/test-harness/excel/evaluations/inputs/radar-chart/06-card12.flint.json @@ -0,0 +1,203 @@ +{ + "semantic_types": { + "Division": "Category", + "Factor": "Category", + "Score": "Quantity" + }, + "chart_spec": { + "chartType": "Radar Chart", + "encodings": { + "x": "Factor", + "y": "Score", + "color": "Division" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Division": "Americas", + "Factor": "Revenue", + "Score": 40 + }, + { + "Division": "EMEA", + "Factor": "Revenue", + "Score": 36 + }, + { + "Division": "APAC", + "Factor": "Revenue", + "Score": 38 + }, + { + "Division": "Americas", + "Factor": "Profit Margin", + "Score": 67 + }, + { + "Division": "EMEA", + "Factor": "Profit Margin", + "Score": 47 + }, + { + "Division": "APAC", + "Factor": "Profit Margin", + "Score": 38 + }, + { + "Division": "Americas", + "Factor": "Customer Retention", + "Score": 83 + }, + { + "Division": "EMEA", + "Factor": "Customer Retention", + "Score": 87 + }, + { + "Division": "APAC", + "Factor": "Customer Retention", + "Score": 92 + }, + { + "Division": "Americas", + "Factor": "Brand Awareness", + "Score": 42 + }, + { + "Division": "EMEA", + "Factor": "Brand Awareness", + "Score": 48 + }, + { + "Division": "APAC", + "Factor": "Brand Awareness", + "Score": 58 + }, + { + "Division": "Americas", + "Factor": "Market Penetration", + "Score": 56 + }, + { + "Division": "EMEA", + "Factor": "Market Penetration", + "Score": 33 + }, + { + "Division": "APAC", + "Factor": "Market Penetration", + "Score": 70 + }, + { + "Division": "Americas", + "Factor": "Product Quality", + "Score": 88 + }, + { + "Division": "EMEA", + "Factor": "Product Quality", + "Score": 84 + }, + { + "Division": "APAC", + "Factor": "Product Quality", + "Score": 45 + }, + { + "Division": "Americas", + "Factor": "Employee Engagement", + "Score": 64 + }, + { + "Division": "EMEA", + "Factor": "Employee Engagement", + "Score": 90 + }, + { + "Division": "APAC", + "Factor": "Employee Engagement", + "Score": 76 + }, + { + "Division": "Americas", + "Factor": "Innovation Index", + "Score": 73 + }, + { + "Division": "EMEA", + "Factor": "Innovation Index", + "Score": 46 + }, + { + "Division": "APAC", + "Factor": "Innovation Index", + "Score": 50 + }, + { + "Division": "Americas", + "Factor": "Supply Chain Efficiency", + "Score": 44 + }, + { + "Division": "EMEA", + "Factor": "Supply Chain Efficiency", + "Score": 80 + }, + { + "Division": "APAC", + "Factor": "Supply Chain Efficiency", + "Score": 90 + }, + { + "Division": "Americas", + "Factor": "Digital Transformation", + "Score": 44 + }, + { + "Division": "EMEA", + "Factor": "Digital Transformation", + "Score": 53 + }, + { + "Division": "APAC", + "Factor": "Digital Transformation", + "Score": 77 + }, + { + "Division": "Americas", + "Factor": "Sustainability Rating", + "Score": 100 + }, + { + "Division": "EMEA", + "Factor": "Sustainability Rating", + "Score": 77 + }, + { + "Division": "APAC", + "Factor": "Sustainability Rating", + "Score": 44 + }, + { + "Division": "Americas", + "Factor": "Compliance Score", + "Score": 89 + }, + { + "Division": "EMEA", + "Factor": "Compliance Score", + "Score": 31 + }, + { + "Division": "APAC", + "Factor": "Compliance Score", + "Score": 30 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/00-card20.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/00-card20.flint.json new file mode 100644 index 00000000..c7f41caa --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/00-card20.flint.json @@ -0,0 +1,101 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Y" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 0, + "Y": 52.5 + }, + { + "X": 73.5, + "Y": 26.3 + }, + { + "X": 37.6, + "Y": 19.6 + }, + { + "X": 97.6, + "Y": 51.2 + }, + { + "X": 53, + "Y": 25.7 + }, + { + "X": 10.7, + "Y": 81.5 + }, + { + "X": 90.1, + "Y": 45.2 + }, + { + "X": 24.5, + "Y": 24.7 + }, + { + "X": 18.8, + "Y": 32.3 + }, + { + "X": 10.3, + "Y": 80.7 + }, + { + "X": 53.4, + "Y": 84.4 + }, + { + "X": 73.7, + "Y": 7.8 + }, + { + "X": 53.9, + "Y": 13.1 + }, + { + "X": 86.3, + "Y": 46.5 + }, + { + "X": 47.2, + "Y": 45 + }, + { + "X": 23.3, + "Y": 1.2 + }, + { + "X": 2.3, + "Y": 99.4 + }, + { + "X": 91.5, + "Y": 78.6 + }, + { + "X": 57.1, + "Y": 76.9 + }, + { + "X": 62.4, + "Y": 34.4 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/01-card20.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/01-card20.flint.json new file mode 100644 index 00000000..796b4995 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/01-card20.flint.json @@ -0,0 +1,123 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Y", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 37.6, + "Y": 26.7, + "Segment": "Electronics" + }, + { + "X": 35.2, + "Y": 64.1, + "Segment": "Clothing" + }, + { + "X": 36.4, + "Y": 5.3, + "Segment": "Food" + }, + { + "X": 52.9, + "Y": 15.8, + "Segment": "Electronics" + }, + { + "X": 45.4, + "Y": 32.9, + "Segment": "Clothing" + }, + { + "X": 19.3, + "Y": 6.5, + "Segment": "Food" + }, + { + "X": 98.7, + "Y": 54.6, + "Segment": "Electronics" + }, + { + "X": 8.9, + "Y": 99.3, + "Segment": "Clothing" + }, + { + "X": 43.4, + "Y": 70.2, + "Segment": "Food" + }, + { + "X": 18.7, + "Y": 54.4, + "Segment": "Electronics" + }, + { + "X": 99.5, + "Y": 19, + "Segment": "Clothing" + }, + { + "X": 68.4, + "Y": 39.9, + "Segment": "Food" + }, + { + "X": 43.9, + "Y": 74.7, + "Segment": "Electronics" + }, + { + "X": 17.8, + "Y": 81.1, + "Segment": "Clothing" + }, + { + "X": 80.6, + "Y": 9.7, + "Segment": "Food" + }, + { + "X": 3, + "Y": 13.4, + "Segment": "Electronics" + }, + { + "X": 63.7, + "Y": 38, + "Segment": "Clothing" + }, + { + "X": 24.9, + "Y": 50.7, + "Segment": "Food" + }, + { + "X": 52.1, + "Y": 10.4, + "Segment": "Electronics" + }, + { + "X": 98.4, + "Y": 34.9, + "Segment": "Clothing" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/02-card20.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/02-card20.flint.json new file mode 100644 index 00000000..8e81c7f2 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/02-card20.flint.json @@ -0,0 +1,123 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity", + "ColorVal": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Y", + "color": "ColorVal" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 76.8, + "Y": 26.5, + "ColorVal": 66.6 + }, + { + "X": 91.5, + "Y": 46.6, + "ColorVal": 44.1 + }, + { + "X": 92.1, + "Y": 46.7, + "ColorVal": 97.7 + }, + { + "X": 32, + "Y": 79.4, + "ColorVal": 86.6 + }, + { + "X": 74.3, + "Y": 55.7, + "ColorVal": 82.7 + }, + { + "X": 53.1, + "Y": 30.7, + "ColorVal": 34.3 + }, + { + "X": 31.1, + "Y": 44.7, + "ColorVal": 56.7 + }, + { + "X": 65.3, + "Y": 6.3, + "ColorVal": 49 + }, + { + "X": 45.6, + "Y": 1, + "ColorVal": 70.1 + }, + { + "X": 38.8, + "Y": 44.7, + "ColorVal": 93.6 + }, + { + "X": 12.5, + "Y": 42.8, + "ColorVal": 29.3 + }, + { + "X": 41.1, + "Y": 24.4, + "ColorVal": 36.6 + }, + { + "X": 71, + "Y": 93.6, + "ColorVal": 1.8 + }, + { + "X": 47.8, + "Y": 82.2, + "ColorVal": 53.3 + }, + { + "X": 12.6, + "Y": 40, + "ColorVal": 12.9 + }, + { + "X": 81.2, + "Y": 39.2, + "ColorVal": 7.6 + }, + { + "X": 59.8, + "Y": 33.7, + "ColorVal": 25.4 + }, + { + "X": 38.6, + "Y": 31.4, + "ColorVal": 61.7 + }, + { + "X": 20.4, + "Y": 28.4, + "ColorVal": 98.9 + }, + { + "X": 19.6, + "Y": 66.2, + "ColorVal": 51.4 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/03-card30.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/03-card30.flint.json new file mode 100644 index 00000000..7513f0b4 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/03-card30.flint.json @@ -0,0 +1,173 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity", + "Timestamp": "Date" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Y", + "color": "Timestamp" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 78.5, + "Y": 12.7, + "Timestamp": "2020-01-01" + }, + { + "X": 35.8, + "Y": 22.2, + "Timestamp": "2020-02-06" + }, + { + "X": 29.9, + "Y": 16.8, + "Timestamp": "2020-03-14" + }, + { + "X": 95.6, + "Y": 72.6, + "Timestamp": "2020-04-19" + }, + { + "X": 58.9, + "Y": 51.8, + "Timestamp": "2020-05-26" + }, + { + "X": 48.9, + "Y": 36.6, + "Timestamp": "2020-07-01" + }, + { + "X": 29.3, + "Y": 39, + "Timestamp": "2020-08-07" + }, + { + "X": 40.8, + "Y": 42.9, + "Timestamp": "2020-09-12" + }, + { + "X": 32.2, + "Y": 35.3, + "Timestamp": "2020-10-19" + }, + { + "X": 10.9, + "Y": 72.9, + "Timestamp": "2020-11-24" + }, + { + "X": 40.9, + "Y": 1, + "Timestamp": "2020-12-31" + }, + { + "X": 35.1, + "Y": 53.7, + "Timestamp": "2021-02-05" + }, + { + "X": 19.2, + "Y": 87, + "Timestamp": "2021-03-14" + }, + { + "X": 91.3, + "Y": 96.5, + "Timestamp": "2021-04-19" + }, + { + "X": 79.4, + "Y": 23.3, + "Timestamp": "2021-05-26" + }, + { + "X": 51, + "Y": 19.7, + "Timestamp": "2021-07-01" + }, + { + "X": 87.1, + "Y": 81.2, + "Timestamp": "2021-08-07" + }, + { + "X": 98.5, + "Y": 34.4, + "Timestamp": "2021-09-12" + }, + { + "X": 62.8, + "Y": 67.5, + "Timestamp": "2021-10-19" + }, + { + "X": 89.2, + "Y": 12.3, + "Timestamp": "2021-11-24" + }, + { + "X": 68, + "Y": 99.7, + "Timestamp": "2021-12-31" + }, + { + "X": 97.6, + "Y": 13, + "Timestamp": "2022-02-05" + }, + { + "X": 36.9, + "Y": 4, + "Timestamp": "2022-03-14" + }, + { + "X": 54.3, + "Y": 17.5, + "Timestamp": "2022-04-19" + }, + { + "X": 50.5, + "Y": 15.6, + "Timestamp": "2022-05-26" + }, + { + "X": 79.3, + "Y": 25, + "Timestamp": "2022-07-01" + }, + { + "X": 21.7, + "Y": 33.8, + "Timestamp": "2022-08-07" + }, + { + "X": 74.5, + "Y": 41.4, + "Timestamp": "2022-09-12" + }, + { + "X": 95.7, + "Y": 57.5, + "Timestamp": "2022-10-19" + }, + { + "X": 45.2, + "Y": 63.7, + "Timestamp": "2022-11-24" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/04-card47.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/04-card47.flint.json new file mode 100644 index 00000000..fa3fa857 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/04-card47.flint.json @@ -0,0 +1,273 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity", + "Size": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Y", + "size": "Size" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 93.7, + "Y": 49.3, + "Size": 46 + }, + { + "X": 8.5, + "Y": 75.3, + "Size": 15.1 + }, + { + "X": 57.2, + "Y": 60.6, + "Size": 34.4 + }, + { + "X": 38.9, + "Y": 22.2, + "Size": 81.6 + }, + { + "X": 48.2, + "Y": 64.9, + "Size": 50.9 + }, + { + "X": 5.7, + "Y": 63, + "Size": 67.4 + }, + { + "X": 15.2, + "Y": 80.2, + "Size": 21.3 + }, + { + "X": 4.9, + "Y": 46, + "Size": 73.8 + }, + { + "X": 96.4, + "Y": 53.6, + "Size": 4.3 + }, + { + "X": 64.6, + "Y": 38.1, + "Size": 49.9 + }, + { + "X": 36.7, + "Y": 38.1, + "Size": 84.6 + }, + { + "X": 84.6, + "Y": 91.5, + "Size": 55.3 + }, + { + "X": 5.2, + "Y": 73.3, + "Size": 26.1 + }, + { + "X": 61.6, + "Y": 2.3, + "Size": 46.8 + }, + { + "X": 63.6, + "Y": 87.9, + "Size": 33.7 + }, + { + "X": 88.4, + "Y": 96.3, + "Size": 45.1 + }, + { + "X": 48.1, + "Y": 88.7, + "Size": 2.5 + }, + { + "X": 3.7, + "Y": 48.1, + "Size": 54.8 + }, + { + "X": 40.5, + "Y": 54.4, + "Size": 66.5 + }, + { + "X": 58.4, + "Y": 62.1, + "Size": 13 + }, + { + "X": 77.5, + "Y": 80.6, + "Size": 97.1 + }, + { + "X": 43.3, + "Y": 8.8, + "Size": 44.2 + }, + { + "X": 98.2, + "Y": 96.9, + "Size": 40.5 + }, + { + "X": 33.1, + "Y": 99.1, + "Size": 79.7 + }, + { + "X": 37.4, + "Y": 30.7, + "Size": 7.1 + }, + { + "X": 92.9, + "Y": 62.8, + "Size": 92.2 + }, + { + "X": 74.3, + "Y": 85.1, + "Size": 14.7 + }, + { + "X": 47.5, + "Y": 5.7, + "Size": 29.6 + }, + { + "X": 25, + "Y": 42.8, + "Size": 73.1 + }, + { + "X": 72.2, + "Y": 24.2, + "Size": 42.9 + }, + { + "X": 79.1, + "Y": 62.5, + "Size": 49.3 + }, + { + "X": 80.1, + "Y": 81.1, + "Size": 26.9 + }, + { + "X": 21.5, + "Y": 65.8, + "Size": 23.2 + }, + { + "X": 38, + "Y": 24.2, + "Size": 62.3 + }, + { + "X": 12, + "Y": 60.4, + "Size": 37.1 + }, + { + "X": 12.5, + "Y": 53.4, + "Size": 38.9 + }, + { + "X": 39.3, + "Y": 93.2, + "Size": 2.8 + }, + { + "X": 9.7, + "Y": 26.4, + "Size": 69.6 + }, + { + "X": 84.6, + "Y": 52.6, + "Size": 0.8 + }, + { + "X": 79.1, + "Y": 38.4, + "Size": 12.9 + }, + { + "X": 15.7, + "Y": 38.7, + "Size": 3.8 + }, + { + "X": 27.2, + "Y": 68.4, + "Size": 19.9 + }, + { + "X": 5.1, + "Y": 70.1, + "Size": 76 + }, + { + "X": 9.6, + "Y": 87.1, + "Size": 55 + }, + { + "X": 50.7, + "Y": 76.8, + "Size": 98.8 + }, + { + "X": 28.9, + "Y": 73, + "Size": 28.7 + }, + { + "X": 52.9, + "Y": 66.5, + "Size": 21.5 + }, + { + "X": 40.2, + "Y": 58.5, + "Size": 60.2 + }, + { + "X": 27.2, + "Y": 68, + "Size": 34.9 + }, + { + "X": 48.7, + "Y": 50.6, + "Size": 33.8 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/05-card20.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/05-card20.flint.json new file mode 100644 index 00000000..ad18f944 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/05-card20.flint.json @@ -0,0 +1,123 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity", + "Level": "Rank" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Y", + "size": "Level" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 72, + "Y": 77.7, + "Level": "Low" + }, + { + "X": 87.7, + "Y": 43.7, + "Level": "Medium" + }, + { + "X": 43.3, + "Y": 31.7, + "Level": "High" + }, + { + "X": 14.4, + "Y": 44, + "Level": "Critical" + }, + { + "X": 75.2, + "Y": 95.8, + "Level": "Low" + }, + { + "X": 82.8, + "Y": 62.8, + "Level": "Medium" + }, + { + "X": 51.7, + "Y": 0.5, + "Level": "High" + }, + { + "X": 93.8, + "Y": 55, + "Level": "Critical" + }, + { + "X": 19.8, + "Y": 74.4, + "Level": "Low" + }, + { + "X": 36.3, + "Y": 44.7, + "Level": "Medium" + }, + { + "X": 14.9, + "Y": 14.2, + "Level": "High" + }, + { + "X": 31.8, + "Y": 92.8, + "Level": "Critical" + }, + { + "X": 75.1, + "Y": 69.2, + "Level": "Low" + }, + { + "X": 72.9, + "Y": 33.9, + "Level": "Medium" + }, + { + "X": 46.2, + "Y": 57.2, + "Level": "High" + }, + { + "X": 64.4, + "Y": 21.9, + "Level": "Critical" + }, + { + "X": 73.9, + "Y": 66.2, + "Level": "Low" + }, + { + "X": 19, + "Y": 17.9, + "Level": "Medium" + }, + { + "X": 81.9, + "Y": 35.7, + "Level": "High" + }, + { + "X": 84.9, + "Y": 93.9, + "Level": "Critical" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/06-card15.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/06-card15.flint.json new file mode 100644 index 00000000..a65f0684 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/06-card15.flint.json @@ -0,0 +1,115 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity", + "Segment": "Category", + "Size": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Y", + "color": "Segment", + "size": "Size" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 88.6, + "Y": 36.1, + "Segment": "Electronics", + "Size": 33 + }, + { + "X": 26.6, + "Y": 56.1, + "Segment": "Clothing", + "Size": 77.6 + }, + { + "X": 80.8, + "Y": 84.9, + "Segment": "Food", + "Size": 36.9 + }, + { + "X": 6.5, + "Y": 20.2, + "Segment": "Electronics", + "Size": 32.8 + }, + { + "X": 68, + "Y": 79.1, + "Segment": "Clothing", + "Size": 62.4 + }, + { + "X": 77.2, + "Y": 26.9, + "Segment": "Food", + "Size": 62 + }, + { + "X": 81.6, + "Y": 2.7, + "Segment": "Electronics", + "Size": 39.3 + }, + { + "X": 35.9, + "Y": 88, + "Segment": "Clothing", + "Size": 58.7 + }, + { + "X": 26.9, + "Y": 32.2, + "Segment": "Food", + "Size": 96.7 + }, + { + "X": 73.2, + "Y": 39.8, + "Segment": "Electronics", + "Size": 47.5 + }, + { + "X": 12.5, + "Y": 6.8, + "Segment": "Clothing", + "Size": 20.1 + }, + { + "X": 84, + "Y": 75.3, + "Segment": "Food", + "Size": 31.3 + }, + { + "X": 1, + "Y": 1.5, + "Segment": "Electronics", + "Size": 21.7 + }, + { + "X": 26.7, + "Y": 60.9, + "Segment": "Clothing", + "Size": 90.9 + }, + { + "X": 41.4, + "Y": 44.9, + "Segment": "Food", + "Size": 78.1 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/07-card30.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/07-card30.flint.json new file mode 100644 index 00000000..2f840973 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/07-card30.flint.json @@ -0,0 +1,205 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity", + "ColorVal": "Quantity", + "Size": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Y", + "color": "ColorVal", + "size": "Size" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 7, + "Y": 96, + "ColorVal": 23.3, + "Size": 85.7 + }, + { + "X": 56.5, + "Y": 19.9, + "ColorVal": 3.6, + "Size": 53.2 + }, + { + "X": 52.3, + "Y": 49.5, + "ColorVal": 14.5, + "Size": 88.1 + }, + { + "X": 90.8, + "Y": 75.5, + "ColorVal": 79.3, + "Size": 52 + }, + { + "X": 28.9, + "Y": 22, + "ColorVal": 6.9, + "Size": 99.1 + }, + { + "X": 20, + "Y": 91.9, + "ColorVal": 87.9, + "Size": 56.4 + }, + { + "X": 82.2, + "Y": 14.8, + "ColorVal": 71.2, + "Size": 27.3 + }, + { + "X": 94.6, + "Y": 18.4, + "ColorVal": 97.8, + "Size": 7.2 + }, + { + "X": 95.1, + "Y": 89.6, + "ColorVal": 80.2, + "Size": 77.4 + }, + { + "X": 97.3, + "Y": 25.5, + "ColorVal": 39.1, + "Size": 17.3 + }, + { + "X": 14, + "Y": 46.5, + "ColorVal": 87.1, + "Size": 76.3 + }, + { + "X": 12.1, + "Y": 19.3, + "ColorVal": 88.1, + "Size": 24.5 + }, + { + "X": 37.5, + "Y": 75.8, + "ColorVal": 31.6, + "Size": 22.9 + }, + { + "X": 50.7, + "Y": 10.6, + "ColorVal": 30.3, + "Size": 99.8 + }, + { + "X": 46.9, + "Y": 22, + "ColorVal": 63, + "Size": 78.4 + }, + { + "X": 52.7, + "Y": 68.4, + "ColorVal": 31, + "Size": 62.9 + }, + { + "X": 41, + "Y": 89.8, + "ColorVal": 60.2, + "Size": 44.2 + }, + { + "X": 81.5, + "Y": 42.6, + "ColorVal": 96.9, + "Size": 25.2 + }, + { + "X": 71, + "Y": 0.1, + "ColorVal": 80.4, + "Size": 24.8 + }, + { + "X": 86.5, + "Y": 33.6, + "ColorVal": 8.4, + "Size": 38.9 + }, + { + "X": 75.4, + "Y": 92.9, + "ColorVal": 31.9, + "Size": 85.6 + }, + { + "X": 25.5, + "Y": 54.9, + "ColorVal": 80.5, + "Size": 42.2 + }, + { + "X": 74.5, + "Y": 59.7, + "ColorVal": 4.2, + "Size": 64.5 + }, + { + "X": 82, + "Y": 72.9, + "ColorVal": 21.8, + "Size": 62.4 + }, + { + "X": 19.8, + "Y": 64.6, + "ColorVal": 46.8, + "Size": 52.4 + }, + { + "X": 70.8, + "Y": 95.4, + "ColorVal": 20.2, + "Size": 10.6 + }, + { + "X": 72.3, + "Y": 74.4, + "ColorVal": 41.8, + "Size": 34.6 + }, + { + "X": 48, + "Y": 80.3, + "ColorVal": 74.4, + "Size": 96.9 + }, + { + "X": 22.5, + "Y": 61.9, + "ColorVal": 84.6, + "Size": 13.7 + }, + { + "X": 39.1, + "Y": 34.1, + "ColorVal": 28, + "Size": 43.5 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/08-card20.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/08-card20.flint.json new file mode 100644 index 00000000..1be156c3 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/08-card20.flint.json @@ -0,0 +1,145 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity", + "Segment": "Category", + "Size": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Y", + "color": "Segment", + "size": "Size" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 20.8, + "Y": 65.9, + "Segment": "Electronics", + "Size": 113041463 + }, + { + "X": 87.1, + "Y": 9.9, + "Segment": "Clothing", + "Size": 489600946 + }, + { + "X": 70.6, + "Y": 84, + "Segment": "Food", + "Size": 170192509 + }, + { + "X": 40.9, + "Y": 8.8, + "Segment": "Books", + "Size": 684784271 + }, + { + "X": 15.2, + "Y": 9, + "Segment": "Sports", + "Size": 272996627 + }, + { + "X": 23.8, + "Y": 88.6, + "Segment": "Home", + "Size": 73843952 + }, + { + "X": 7.9, + "Y": 40.2, + "Segment": "Garden", + "Size": 310037319 + }, + { + "X": 78, + "Y": 40.5, + "Segment": "Auto", + "Size": 636410568 + }, + { + "X": 13.6, + "Y": 17.7, + "Segment": "Health", + "Size": 916931923 + }, + { + "X": 85.8, + "Y": 84.7, + "Segment": "Beauty", + "Size": 465975275 + }, + { + "X": 63, + "Y": 42.6, + "Segment": "Toys", + "Size": 733873108 + }, + { + "X": 18.9, + "Y": 45.2, + "Segment": "Music", + "Size": 679753166 + }, + { + "X": 59.5, + "Y": 28.4, + "Segment": "Movies", + "Size": 405646572 + }, + { + "X": 68.5, + "Y": 4.2, + "Segment": "Software", + "Size": 510611831 + }, + { + "X": 83.6, + "Y": 68.8, + "Segment": "Games", + "Size": 534058494 + }, + { + "X": 90.4, + "Y": 74, + "Segment": "Office", + "Size": 439235648 + }, + { + "X": 21.7, + "Y": 59.3, + "Segment": "Pet", + "Size": 810736068 + }, + { + "X": 2.4, + "Y": 26.2, + "Segment": "Baby", + "Size": 591643630 + }, + { + "X": 73.8, + "Y": 38.7, + "Segment": "Tools", + "Size": 671374505 + }, + { + "X": 77.4, + "Y": 99.5, + "Segment": "Crafts", + "Size": 885994418 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/09-card91.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/09-card91.flint.json new file mode 100644 index 00000000..20f806ff --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/09-card91.flint.json @@ -0,0 +1,421 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Y" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 89.1, + "Y": 42.7 + }, + { + "X": 77, + "Y": 31.6 + }, + { + "X": 71.9, + "Y": 17 + }, + { + "X": 4.4, + "Y": 67 + }, + { + "X": 43.8, + "Y": 99.8 + }, + { + "X": 32.9, + "Y": 63.3 + }, + { + "X": 84.7, + "Y": 56.1 + }, + { + "X": 84.2, + "Y": 74.7 + }, + { + "X": 53.4, + "Y": 8.6 + }, + { + "X": 95, + "Y": 46.8 + }, + { + "X": 61, + "Y": 72.2 + }, + { + "X": 43.6, + "Y": 8.7 + }, + { + "X": 23.2, + "Y": 89.9 + }, + { + "X": 86, + "Y": 65.9 + }, + { + "X": 14, + "Y": 1.2 + }, + { + "X": 24.7, + "Y": 74.4 + }, + { + "X": 5.8, + "Y": 68.7 + }, + { + "X": 70.1, + "Y": 49.6 + }, + { + "X": 52.7, + "Y": 72.5 + }, + { + "X": 43.2, + "Y": 62.1 + }, + { + "X": 5.5, + "Y": 78.8 + }, + { + "X": 94.1, + "Y": 58.2 + }, + { + "X": 98.9, + "Y": 71 + }, + { + "X": 33, + "Y": 96.1 + }, + { + "X": 33.5, + "Y": 95.8 + }, + { + "X": 6.3, + "Y": 18.2 + }, + { + "X": 52.7, + "Y": 78.4 + }, + { + "X": 91, + "Y": 68.7 + }, + { + "X": 31, + "Y": 96.5 + }, + { + "X": 61.3, + "Y": 2.7 + }, + { + "X": 10.6, + "Y": 2.7 + }, + { + "X": 1.8, + "Y": 97.5 + }, + { + "X": 24.8, + "Y": 77.2 + }, + { + "X": 87.1, + "Y": 4.7 + }, + { + "X": 7.9, + "Y": 25.1 + }, + { + "X": 91.3, + "Y": 60.8 + }, + { + "X": 26.9, + "Y": 40.1 + }, + { + "X": 81.2, + "Y": 61.4 + }, + { + "X": 78, + "Y": 99.7 + }, + { + "X": 12.3, + "Y": 47.7 + }, + { + "X": 32, + "Y": 33.9 + }, + { + "X": 1.6, + "Y": 9.2 + }, + { + "X": 4.7, + "Y": 65.1 + }, + { + "X": 5.5, + "Y": 79.5 + }, + { + "X": 0.6, + "Y": 73.3 + }, + { + "X": 53.5, + "Y": 35.1 + }, + { + "X": 9.6, + "Y": 71.7 + }, + { + "X": 33, + "Y": 16.8 + }, + { + "X": 92.7, + "Y": 46.7 + }, + { + "X": 47.2, + "Y": 29.6 + }, + { + "X": 50.2, + "Y": 8.5 + }, + { + "X": 17.7, + "Y": 8.1 + }, + { + "X": 66.7, + "Y": 28.1 + }, + { + "X": 42.5, + "Y": 55.2 + }, + { + "X": 44.1, + "Y": 30.5 + }, + { + "X": 27.4, + "Y": 11.7 + }, + { + "X": 44.8, + "Y": 15.1 + }, + { + "X": 83.9, + "Y": 43.6 + }, + { + "X": 61.9, + "Y": 43.3 + }, + { + "X": 76.4, + "Y": 54.2 + }, + { + "X": 28.1, + "Y": 40.7 + }, + { + "X": 88.7, + "Y": 36.7 + }, + { + "X": 9.4, + "Y": 88.6 + }, + { + "X": 65.1, + "Y": 62.3 + }, + { + "X": 48.9, + "Y": 15.1 + }, + { + "X": 67.1, + "Y": 3.5 + }, + { + "X": 78, + "Y": 56 + }, + { + "X": 36.4, + "Y": 20.2 + }, + { + "X": 30.9, + "Y": 56.5 + }, + { + "X": 6.8, + "Y": 71.5 + }, + { + "X": 0.2, + "Y": 28.6 + }, + { + "X": 16.4, + "Y": 49.2 + }, + { + "X": 50.4, + "Y": 33.3 + }, + { + "X": 52.5, + "Y": 17.9 + }, + { + "X": 19.4, + "Y": 53.3 + }, + { + "X": 47.2, + "Y": 47.7 + }, + { + "X": 82, + "Y": 21.7 + }, + { + "X": 89.2, + "Y": 33.5 + }, + { + "X": 7.4, + "Y": 38.2 + }, + { + "X": 50.4, + "Y": 80.8 + }, + { + "X": 92.3, + "Y": 31.4 + }, + { + "X": 65.7, + "Y": 43.1 + }, + { + "X": 80.6, + "Y": 81.3 + }, + { + "X": 70.2, + "Y": 42.4 + }, + { + "X": 26.9, + "Y": 66 + }, + { + "X": 98.6, + "Y": 11.6 + }, + { + "X": 81.4, + "Y": 31.4 + }, + { + "X": 35.4, + "Y": 95 + }, + { + "X": 52.6, + "Y": 20.5 + }, + { + "X": 70.2, + "Y": 61.9 + }, + { + "X": 85.1, + "Y": 34.2 + }, + { + "X": 17.3, + "Y": 4.3 + }, + { + "X": 31.9, + "Y": 73.7 + }, + { + "X": 93.3, + "Y": 18.8 + }, + { + "X": 64.2, + "Y": 51.9 + }, + { + "X": 64.8, + "Y": 34.5 + }, + { + "X": 10, + "Y": 7.8 + }, + { + "X": 47.5, + "Y": 64.2 + }, + { + "X": 35.4, + "Y": 46.4 + }, + { + "X": 99.3, + "Y": 20 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/10-card395.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/10-card395.flint.json new file mode 100644 index 00000000..56c4cfe0 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/10-card395.flint.json @@ -0,0 +1,2021 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Y" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 96.1, + "Y": 21.1 + }, + { + "X": 19.5, + "Y": 92.5 + }, + { + "X": 6.1, + "Y": 82.5 + }, + { + "X": 92.1, + "Y": 9.4 + }, + { + "X": 77.4, + "Y": 76.3 + }, + { + "X": 50.5, + "Y": 5 + }, + { + "X": 33.7, + "Y": 63 + }, + { + "X": 14.8, + "Y": 88.4 + }, + { + "X": 31.3, + "Y": 67.9 + }, + { + "X": 65.4, + "Y": 89.3 + }, + { + "X": 43.2, + "Y": 74.9 + }, + { + "X": 85.4, + "Y": 7 + }, + { + "X": 87.8, + "Y": 11.3 + }, + { + "X": 22.7, + "Y": 1.9 + }, + { + "X": 6.1, + "Y": 76.1 + }, + { + "X": 99.7, + "Y": 42.1 + }, + { + "X": 98.7, + "Y": 40.8 + }, + { + "X": 61, + "Y": 16.5 + }, + { + "X": 22.1, + "Y": 8.7 + }, + { + "X": 36, + "Y": 1.3 + }, + { + "X": 8.7, + "Y": 94.2 + }, + { + "X": 32.3, + "Y": 93.1 + }, + { + "X": 98.6, + "Y": 11.2 + }, + { + "X": 17.9, + "Y": 60.5 + }, + { + "X": 14, + "Y": 62.1 + }, + { + "X": 37.4, + "Y": 84.4 + }, + { + "X": 14.3, + "Y": 1.3 + }, + { + "X": 45.3, + "Y": 0.6 + }, + { + "X": 31.9, + "Y": 43.8 + }, + { + "X": 24.5, + "Y": 24.3 + }, + { + "X": 17.9, + "Y": 49.1 + }, + { + "X": 59.8, + "Y": 18.1 + }, + { + "X": 46.5, + "Y": 5.7 + }, + { + "X": 20.6, + "Y": 3.8 + }, + { + "X": 24.9, + "Y": 14.8 + }, + { + "X": 80.7, + "Y": 31.9 + }, + { + "X": 91.5, + "Y": 67 + }, + { + "X": 42, + "Y": 32.2 + }, + { + "X": 71.8, + "Y": 40.4 + }, + { + "X": 15.1, + "Y": 84 + }, + { + "X": 15.3, + "Y": 8.6 + }, + { + "X": 55.9, + "Y": 84.9 + }, + { + "X": 2.2, + "Y": 35.9 + }, + { + "X": 4.1, + "Y": 13.1 + }, + { + "X": 8.6, + "Y": 24.4 + }, + { + "X": 0.8, + "Y": 88.3 + }, + { + "X": 21.7, + "Y": 5.4 + }, + { + "X": 29.4, + "Y": 23.5 + }, + { + "X": 67.5, + "Y": 4.2 + }, + { + "X": 69.4, + "Y": 46.7 + }, + { + "X": 9.4, + "Y": 22.2 + }, + { + "X": 1.3, + "Y": 22.4 + }, + { + "X": 65.4, + "Y": 4.5 + }, + { + "X": 23.8, + "Y": 82.6 + }, + { + "X": 54.7, + "Y": 74.6 + }, + { + "X": 97.1, + "Y": 48.4 + }, + { + "X": 38.5, + "Y": 55.8 + }, + { + "X": 12.3, + "Y": 45.4 + }, + { + "X": 46.6, + "Y": 61.3 + }, + { + "X": 20.5, + "Y": 36.6 + }, + { + "X": 74, + "Y": 53 + }, + { + "X": 68.1, + "Y": 10.2 + }, + { + "X": 10.2, + "Y": 50.3 + }, + { + "X": 78, + "Y": 92.4 + }, + { + "X": 74.7, + "Y": 26.1 + }, + { + "X": 30.8, + "Y": 61 + }, + { + "X": 1.6, + "Y": 23.3 + }, + { + "X": 75.6, + "Y": 50 + }, + { + "X": 44.8, + "Y": 36.9 + }, + { + "X": 66.7, + "Y": 4.3 + }, + { + "X": 12, + "Y": 68.4 + }, + { + "X": 2.9, + "Y": 42.9 + }, + { + "X": 29.5, + "Y": 50.3 + }, + { + "X": 39.2, + "Y": 94.3 + }, + { + "X": 0.2, + "Y": 41.4 + }, + { + "X": 66.1, + "Y": 24.5 + }, + { + "X": 79.4, + "Y": 70.2 + }, + { + "X": 17.7, + "Y": 64.4 + }, + { + "X": 96.9, + "Y": 70.9 + }, + { + "X": 23.1, + "Y": 79.9 + }, + { + "X": 15.7, + "Y": 5.7 + }, + { + "X": 71.5, + "Y": 67.9 + }, + { + "X": 0.7, + "Y": 68 + }, + { + "X": 46.5, + "Y": 89.4 + }, + { + "X": 58.4, + "Y": 50.6 + }, + { + "X": 58, + "Y": 55.5 + }, + { + "X": 62, + "Y": 97.4 + }, + { + "X": 92.4, + "Y": 47.2 + }, + { + "X": 12.8, + "Y": 42.6 + }, + { + "X": 98.3, + "Y": 10 + }, + { + "X": 51, + "Y": 36.1 + }, + { + "X": 5.5, + "Y": 84.2 + }, + { + "X": 21.6, + "Y": 54 + }, + { + "X": 6.2, + "Y": 29.3 + }, + { + "X": 37.3, + "Y": 24.2 + }, + { + "X": 23.9, + "Y": 84.4 + }, + { + "X": 11.2, + "Y": 30.1 + }, + { + "X": 17.6, + "Y": 22.5 + }, + { + "X": 20.9, + "Y": 44.5 + }, + { + "X": 59.4, + "Y": 2.9 + }, + { + "X": 85.5, + "Y": 0.2 + }, + { + "X": 39.5, + "Y": 40.8 + }, + { + "X": 9.1, + "Y": 12.3 + }, + { + "X": 35.5, + "Y": 75.8 + }, + { + "X": 91.3, + "Y": 57.5 + }, + { + "X": 78, + "Y": 21 + }, + { + "X": 51.8, + "Y": 26.8 + }, + { + "X": 73.9, + "Y": 59 + }, + { + "X": 41, + "Y": 85.6 + }, + { + "X": 68.4, + "Y": 68.2 + }, + { + "X": 95.5, + "Y": 38.6 + }, + { + "X": 1.9, + "Y": 46.3 + }, + { + "X": 91.2, + "Y": 62 + }, + { + "X": 24.9, + "Y": 92.1 + }, + { + "X": 53.3, + "Y": 23.2 + }, + { + "X": 44.3, + "Y": 77.9 + }, + { + "X": 26.1, + "Y": 3.7 + }, + { + "X": 3.2, + "Y": 33.8 + }, + { + "X": 38, + "Y": 0.1 + }, + { + "X": 13.1, + "Y": 29.4 + }, + { + "X": 86.4, + "Y": 11.7 + }, + { + "X": 32.2, + "Y": 93.8 + }, + { + "X": 8.3, + "Y": 75.8 + }, + { + "X": 42, + "Y": 63.4 + }, + { + "X": 7.8, + "Y": 54.7 + }, + { + "X": 21.2, + "Y": 11.1 + }, + { + "X": 97.3, + "Y": 92.8 + }, + { + "X": 9.4, + "Y": 65.9 + }, + { + "X": 24.2, + "Y": 44.3 + }, + { + "X": 90.6, + "Y": 20.6 + }, + { + "X": 18.5, + "Y": 58.9 + }, + { + "X": 21.9, + "Y": 45.1 + }, + { + "X": 64.5, + "Y": 94.7 + }, + { + "X": 43.4, + "Y": 89.5 + }, + { + "X": 16.1, + "Y": 74.6 + }, + { + "X": 20.7, + "Y": 98.7 + }, + { + "X": 40.1, + "Y": 74.9 + }, + { + "X": 60, + "Y": 26.8 + }, + { + "X": 10.3, + "Y": 39.5 + }, + { + "X": 19.7, + "Y": 0 + }, + { + "X": 23.3, + "Y": 33.3 + }, + { + "X": 35.8, + "Y": 36.4 + }, + { + "X": 38.5, + "Y": 4 + }, + { + "X": 26.3, + "Y": 66.1 + }, + { + "X": 85.3, + "Y": 11.6 + }, + { + "X": 13.8, + "Y": 40.8 + }, + { + "X": 7.4, + "Y": 94.7 + }, + { + "X": 50.7, + "Y": 13.3 + }, + { + "X": 91.3, + "Y": 85.4 + }, + { + "X": 47.5, + "Y": 97 + }, + { + "X": 22.5, + "Y": 38.9 + }, + { + "X": 3.2, + "Y": 45.4 + }, + { + "X": 18.4, + "Y": 24.6 + }, + { + "X": 29.7, + "Y": 81.6 + }, + { + "X": 98.4, + "Y": 86.4 + }, + { + "X": 98.6, + "Y": 74.1 + }, + { + "X": 99.8, + "Y": 9.1 + }, + { + "X": 89.6, + "Y": 18.6 + }, + { + "X": 96.6, + "Y": 13 + }, + { + "X": 31.2, + "Y": 79.2 + }, + { + "X": 22.8, + "Y": 32.3 + }, + { + "X": 76.7, + "Y": 41.5 + }, + { + "X": 81, + "Y": 58.8 + }, + { + "X": 49.4, + "Y": 52.7 + }, + { + "X": 6.1, + "Y": 3.2 + }, + { + "X": 91.4, + "Y": 74.7 + }, + { + "X": 40.3, + "Y": 99 + }, + { + "X": 52.5, + "Y": 65.9 + }, + { + "X": 92.5, + "Y": 86.7 + }, + { + "X": 44.4, + "Y": 42.4 + }, + { + "X": 56.7, + "Y": 21.2 + }, + { + "X": 78.7, + "Y": 38.8 + }, + { + "X": 1.9, + "Y": 60.9 + }, + { + "X": 45.6, + "Y": 71.8 + }, + { + "X": 32.7, + "Y": 99.5 + }, + { + "X": 28.6, + "Y": 79.7 + }, + { + "X": 66.5, + "Y": 82.5 + }, + { + "X": 60.3, + "Y": 29.8 + }, + { + "X": 27.2, + "Y": 61.7 + }, + { + "X": 61, + "Y": 58.2 + }, + { + "X": 70.6, + "Y": 89.3 + }, + { + "X": 21.4, + "Y": 55.5 + }, + { + "X": 28.9, + "Y": 69.4 + }, + { + "X": 59.8, + "Y": 99.8 + }, + { + "X": 29.3, + "Y": 51.8 + }, + { + "X": 52.2, + "Y": 98 + }, + { + "X": 27.4, + "Y": 45.6 + }, + { + "X": 85.6, + "Y": 29.6 + }, + { + "X": 72.6, + "Y": 41.6 + }, + { + "X": 87.8, + "Y": 40.8 + }, + { + "X": 4.7, + "Y": 98.3 + }, + { + "X": 65.6, + "Y": 91.2 + }, + { + "X": 53.1, + "Y": 84.8 + }, + { + "X": 93, + "Y": 64.9 + }, + { + "X": 55.5, + "Y": 76.7 + }, + { + "X": 16.6, + "Y": 51.9 + }, + { + "X": 25.7, + "Y": 42.7 + }, + { + "X": 11.7, + "Y": 37 + }, + { + "X": 33.7, + "Y": 53.8 + }, + { + "X": 92.8, + "Y": 41.9 + }, + { + "X": 18.5, + "Y": 4.3 + }, + { + "X": 0.5, + "Y": 11.1 + }, + { + "X": 76.8, + "Y": 34.7 + }, + { + "X": 56.6, + "Y": 6.6 + }, + { + "X": 80.8, + "Y": 21 + }, + { + "X": 18.6, + "Y": 94.3 + }, + { + "X": 56.7, + "Y": 81.3 + }, + { + "X": 9.9, + "Y": 34.3 + }, + { + "X": 59.8, + "Y": 93.6 + }, + { + "X": 20.8, + "Y": 46.3 + }, + { + "X": 6.4, + "Y": 88.3 + }, + { + "X": 9.2, + "Y": 45.6 + }, + { + "X": 72.5, + "Y": 97.8 + }, + { + "X": 53.4, + "Y": 83.1 + }, + { + "X": 6.9, + "Y": 86.2 + }, + { + "X": 78.4, + "Y": 60.4 + }, + { + "X": 78.9, + "Y": 31.1 + }, + { + "X": 23.7, + "Y": 42.7 + }, + { + "X": 22.9, + "Y": 23.4 + }, + { + "X": 56.7, + "Y": 35 + }, + { + "X": 34.6, + "Y": 77.3 + }, + { + "X": 75.3, + "Y": 15.8 + }, + { + "X": 51.1, + "Y": 27.1 + }, + { + "X": 84.6, + "Y": 96.8 + }, + { + "X": 14.5, + "Y": 26.2 + }, + { + "X": 66.5, + "Y": 13.3 + }, + { + "X": 86.5, + "Y": 8.7 + }, + { + "X": 62.3, + "Y": 89.5 + }, + { + "X": 73.9, + "Y": 56.6 + }, + { + "X": 76.9, + "Y": 40.6 + }, + { + "X": 75.4, + "Y": 25.6 + }, + { + "X": 94.4, + "Y": 71.9 + }, + { + "X": 19, + "Y": 7.7 + }, + { + "X": 31.3, + "Y": 76.5 + }, + { + "X": 9.1, + "Y": 15.4 + }, + { + "X": 54.4, + "Y": 14.6 + }, + { + "X": 16.2, + "Y": 97.3 + }, + { + "X": 33.6, + "Y": 23.6 + }, + { + "X": 58.3, + "Y": 54.1 + }, + { + "X": 1.2, + "Y": 36.7 + }, + { + "X": 55, + "Y": 81.8 + }, + { + "X": 67.3, + "Y": 24.4 + }, + { + "X": 37.9, + "Y": 3.3 + }, + { + "X": 79.6, + "Y": 76.4 + }, + { + "X": 25, + "Y": 55 + }, + { + "X": 35.8, + "Y": 18.9 + }, + { + "X": 15.2, + "Y": 28.5 + }, + { + "X": 40.1, + "Y": 100 + }, + { + "X": 96.2, + "Y": 14.8 + }, + { + "X": 69.1, + "Y": 45.7 + }, + { + "X": 35.8, + "Y": 23.1 + }, + { + "X": 79.9, + "Y": 57.1 + }, + { + "X": 46.8, + "Y": 17.6 + }, + { + "X": 57.8, + "Y": 40.3 + }, + { + "X": 53.7, + "Y": 56.5 + }, + { + "X": 53.5, + "Y": 30.1 + }, + { + "X": 16, + "Y": 49.4 + }, + { + "X": 99.9, + "Y": 34.5 + }, + { + "X": 0.8, + "Y": 4.3 + }, + { + "X": 50.6, + "Y": 91.3 + }, + { + "X": 47.5, + "Y": 80.3 + }, + { + "X": 94.7, + "Y": 10.7 + }, + { + "X": 25.1, + "Y": 79.9 + }, + { + "X": 91.7, + "Y": 57.1 + }, + { + "X": 32.9, + "Y": 75.3 + }, + { + "X": 80.9, + "Y": 84.3 + }, + { + "X": 78.5, + "Y": 76.8 + }, + { + "X": 66.6, + "Y": 7 + }, + { + "X": 42.7, + "Y": 1.5 + }, + { + "X": 19.9, + "Y": 65 + }, + { + "X": 80.2, + "Y": 87.4 + }, + { + "X": 67.6, + "Y": 70.7 + }, + { + "X": 35.7, + "Y": 80.4 + }, + { + "X": 63.7, + "Y": 49.1 + }, + { + "X": 56.3, + "Y": 65.4 + }, + { + "X": 66.1, + "Y": 77.7 + }, + { + "X": 68.7, + "Y": 61.9 + }, + { + "X": 33.8, + "Y": 93.1 + }, + { + "X": 53, + "Y": 96.4 + }, + { + "X": 62.6, + "Y": 67.2 + }, + { + "X": 8, + "Y": 34.6 + }, + { + "X": 34.4, + "Y": 94.9 + }, + { + "X": 49.3, + "Y": 69.5 + }, + { + "X": 55.5, + "Y": 45.9 + }, + { + "X": 5.7, + "Y": 88.1 + }, + { + "X": 7.1, + "Y": 22 + }, + { + "X": 54.6, + "Y": 99.1 + }, + { + "X": 90.3, + "Y": 56.3 + }, + { + "X": 87.4, + "Y": 22 + }, + { + "X": 69.3, + "Y": 84.6 + }, + { + "X": 90, + "Y": 86.4 + }, + { + "X": 11.4, + "Y": 79.3 + }, + { + "X": 64.1, + "Y": 87.6 + }, + { + "X": 87.5, + "Y": 60 + }, + { + "X": 85.4, + "Y": 33.1 + }, + { + "X": 9.5, + "Y": 37.8 + }, + { + "X": 34.2, + "Y": 16 + }, + { + "X": 88.6, + "Y": 19.7 + }, + { + "X": 25.5, + "Y": 30.7 + }, + { + "X": 70.1, + "Y": 18.7 + }, + { + "X": 7.6, + "Y": 89.8 + }, + { + "X": 67.9, + "Y": 96.2 + }, + { + "X": 16, + "Y": 40.5 + }, + { + "X": 48.2, + "Y": 31.8 + }, + { + "X": 6.7, + "Y": 32.7 + }, + { + "X": 73.4, + "Y": 58.3 + }, + { + "X": 61.3, + "Y": 47.5 + }, + { + "X": 93.3, + "Y": 55.8 + }, + { + "X": 69.5, + "Y": 20.7 + }, + { + "X": 38.6, + "Y": 56.3 + }, + { + "X": 5.9, + "Y": 75.9 + }, + { + "X": 56.4, + "Y": 15.5 + }, + { + "X": 67.5, + "Y": 94.7 + }, + { + "X": 58.1, + "Y": 17 + }, + { + "X": 56.8, + "Y": 48.1 + }, + { + "X": 31.1, + "Y": 0.2 + }, + { + "X": 26.2, + "Y": 21.9 + }, + { + "X": 22.7, + "Y": 35.5 + }, + { + "X": 99.1, + "Y": 24.8 + }, + { + "X": 45.6, + "Y": 20.6 + }, + { + "X": 33.8, + "Y": 48.9 + }, + { + "X": 5.4, + "Y": 81.4 + }, + { + "X": 64, + "Y": 95.7 + }, + { + "X": 24.3, + "Y": 54.4 + }, + { + "X": 97.8, + "Y": 78.3 + }, + { + "X": 61.6, + "Y": 20.1 + }, + { + "X": 65.8, + "Y": 9.2 + }, + { + "X": 39.9, + "Y": 42.8 + }, + { + "X": 51.5, + "Y": 82.4 + }, + { + "X": 26.1, + "Y": 76.4 + }, + { + "X": 75.6, + "Y": 4.7 + }, + { + "X": 10.5, + "Y": 7.4 + }, + { + "X": 84.4, + "Y": 95.5 + }, + { + "X": 84.9, + "Y": 12.1 + }, + { + "X": 93, + "Y": 76.9 + }, + { + "X": 77.8, + "Y": 6.8 + }, + { + "X": 10.5, + "Y": 74.7 + }, + { + "X": 47.8, + "Y": 74.3 + }, + { + "X": 11.8, + "Y": 39.4 + }, + { + "X": 82.2, + "Y": 88.2 + }, + { + "X": 18, + "Y": 31 + }, + { + "X": 2.6, + "Y": 73.3 + }, + { + "X": 38.8, + "Y": 89.1 + }, + { + "X": 1, + "Y": 98.3 + }, + { + "X": 88.2, + "Y": 84 + }, + { + "X": 53, + "Y": 94.2 + }, + { + "X": 93.8, + "Y": 29.7 + }, + { + "X": 58.3, + "Y": 7.4 + }, + { + "X": 28.5, + "Y": 84.9 + }, + { + "X": 62.7, + "Y": 9.1 + }, + { + "X": 61.4, + "Y": 45.1 + }, + { + "X": 66.2, + "Y": 67.4 + }, + { + "X": 7, + "Y": 85.3 + }, + { + "X": 23.7, + "Y": 37.2 + }, + { + "X": 13.2, + "Y": 66.9 + }, + { + "X": 94.7, + "Y": 39.1 + }, + { + "X": 89.1, + "Y": 75.9 + }, + { + "X": 36, + "Y": 98.2 + }, + { + "X": 25.6, + "Y": 26.1 + }, + { + "X": 69.2, + "Y": 37.5 + }, + { + "X": 20.6, + "Y": 86.9 + }, + { + "X": 6.8, + "Y": 5.7 + }, + { + "X": 76.9, + "Y": 16 + }, + { + "X": 42, + "Y": 82.9 + }, + { + "X": 88.4, + "Y": 84.2 + }, + { + "X": 90.7, + "Y": 82.6 + }, + { + "X": 92.8, + "Y": 97.4 + }, + { + "X": 75.2, + "Y": 57.9 + }, + { + "X": 31.2, + "Y": 65.7 + }, + { + "X": 18.5, + "Y": 0.2 + }, + { + "X": 95, + "Y": 48 + }, + { + "X": 30.4, + "Y": 63.9 + }, + { + "X": 26.1, + "Y": 14.1 + }, + { + "X": 10.1, + "Y": 71.8 + }, + { + "X": 22.9, + "Y": 42.4 + }, + { + "X": 96.7, + "Y": 85 + }, + { + "X": 88.8, + "Y": 30.2 + }, + { + "X": 96.4, + "Y": 96.2 + }, + { + "X": 13.9, + "Y": 53.5 + }, + { + "X": 35.8, + "Y": 77.4 + }, + { + "X": 76.8, + "Y": 72.6 + }, + { + "X": 11.2, + "Y": 60 + }, + { + "X": 7.2, + "Y": 65.3 + }, + { + "X": 7.8, + "Y": 56 + }, + { + "X": 63.3, + "Y": 38.6 + }, + { + "X": 75.3, + "Y": 18.1 + }, + { + "X": 11, + "Y": 0.9 + }, + { + "X": 77.6, + "Y": 33.7 + }, + { + "X": 99, + "Y": 86.7 + }, + { + "X": 43.4, + "Y": 67.5 + }, + { + "X": 96.8, + "Y": 29.4 + }, + { + "X": 19.2, + "Y": 24.4 + }, + { + "X": 87.9, + "Y": 23.9 + }, + { + "X": 25.6, + "Y": 53.4 + }, + { + "X": 77.1, + "Y": 7.4 + }, + { + "X": 90.5, + "Y": 82.3 + }, + { + "X": 3.1, + "Y": 65.7 + }, + { + "X": 5.2, + "Y": 88.1 + }, + { + "X": 90.5, + "Y": 67.4 + }, + { + "X": 9.5, + "Y": 92.9 + }, + { + "X": 2.1, + "Y": 48.9 + }, + { + "X": 1.8, + "Y": 91.4 + }, + { + "X": 40.7, + "Y": 84.7 + }, + { + "X": 75.5, + "Y": 72.7 + }, + { + "X": 34.4, + "Y": 31.8 + }, + { + "X": 86.5, + "Y": 3.6 + }, + { + "X": 8.3, + "Y": 25.7 + }, + { + "X": 49.6, + "Y": 98 + }, + { + "X": 76.9, + "Y": 9.6 + }, + { + "X": 60.9, + "Y": 41.2 + }, + { + "X": 66.1, + "Y": 91.3 + }, + { + "X": 8, + "Y": 68.4 + }, + { + "X": 89.7, + "Y": 91 + }, + { + "X": 91.8, + "Y": 25.8 + }, + { + "X": 21.8, + "Y": 86.9 + }, + { + "X": 43.4, + "Y": 48.6 + }, + { + "X": 28.4, + "Y": 70.2 + }, + { + "X": 61.7, + "Y": 89.1 + }, + { + "X": 6.8, + "Y": 37.4 + }, + { + "X": 10.2, + "Y": 22 + }, + { + "X": 41.9, + "Y": 16.4 + }, + { + "X": 48.3, + "Y": 52.5 + }, + { + "X": 35.9, + "Y": 76.5 + }, + { + "X": 46.8, + "Y": 87.6 + }, + { + "X": 27, + "Y": 32.3 + }, + { + "X": 75.9, + "Y": 28.1 + }, + { + "X": 28.1, + "Y": 92.1 + }, + { + "X": 78.8, + "Y": 88.1 + }, + { + "X": 94.9, + "Y": 16.1 + }, + { + "X": 5, + "Y": 40.7 + }, + { + "X": 22.2, + "Y": 24.6 + }, + { + "X": 6, + "Y": 73.8 + }, + { + "X": 91.6, + "Y": 15.2 + }, + { + "X": 71.7, + "Y": 57.8 + }, + { + "X": 8.2, + "Y": 40.8 + }, + { + "X": 83.1, + "Y": 74 + }, + { + "X": 47, + "Y": 69.7 + }, + { + "X": 44.4, + "Y": 66.8 + }, + { + "X": 25.1, + "Y": 65.1 + }, + { + "X": 21.9, + "Y": 18.1 + }, + { + "X": 1.6, + "Y": 27.5 + }, + { + "X": 99.3, + "Y": 64.5 + }, + { + "X": 46.9, + "Y": 11.7 + }, + { + "X": 26.3, + "Y": 17.9 + }, + { + "X": 73.4, + "Y": 10.3 + }, + { + "X": 91.7, + "Y": 97.3 + }, + { + "X": 30.8, + "Y": 52.1 + }, + { + "X": 22.9, + "Y": 49.6 + }, + { + "X": 53.1, + "Y": 93.1 + }, + { + "X": 9.2, + "Y": 19.4 + }, + { + "X": 64.2, + "Y": 43.2 + }, + { + "X": 77.8, + "Y": 5.6 + }, + { + "X": 31.3, + "Y": 85.7 + }, + { + "X": 45.9, + "Y": 30 + }, + { + "X": 88.3, + "Y": 91.1 + }, + { + "X": 82.2, + "Y": 68.2 + }, + { + "X": 86.7, + "Y": 14.5 + }, + { + "X": 82.3, + "Y": 90.8 + }, + { + "X": 46.4, + "Y": 13.7 + }, + { + "X": 70.7, + "Y": 61.6 + }, + { + "X": 70.3, + "Y": 68.2 + }, + { + "X": 88.9, + "Y": 30.1 + }, + { + "X": 85.5, + "Y": 7.5 + }, + { + "X": 36.7, + "Y": 51.6 + }, + { + "X": 98, + "Y": 90.6 + }, + { + "X": 46.1, + "Y": 92.5 + }, + { + "X": 63, + "Y": 98 + }, + { + "X": 57.4, + "Y": 41.7 + }, + { + "X": 88.5, + "Y": 79.3 + }, + { + "X": 29.4, + "Y": 30.8 + }, + { + "X": 61.7, + "Y": 14.6 + }, + { + "X": 81.1, + "Y": 72 + }, + { + "X": 37.5, + "Y": 98 + }, + { + "X": 71.7, + "Y": 45.5 + }, + { + "X": 45.6, + "Y": 97.3 + }, + { + "X": 6.2, + "Y": 76.9 + }, + { + "X": 44.3, + "Y": 8.3 + }, + { + "X": 55.8, + "Y": 63.6 + }, + { + "X": 83, + "Y": 36.2 + }, + { + "X": 37.6, + "Y": 27.3 + }, + { + "X": 66, + "Y": 58.1 + }, + { + "X": 64.2, + "Y": 66.7 + }, + { + "X": 6.6, + "Y": 1.2 + }, + { + "X": 17.2, + "Y": 13.9 + }, + { + "X": 38.1, + "Y": 65.3 + }, + { + "X": 92.1, + "Y": 74.3 + }, + { + "X": 2.8, + "Y": 91.7 + }, + { + "X": 48.9, + "Y": 0.2 + }, + { + "X": 63.9, + "Y": 85.7 + }, + { + "X": 61.7, + "Y": 52 + }, + { + "X": 4, + "Y": 30.1 + }, + { + "X": 40.4, + "Y": 24.4 + }, + { + "X": 74.7, + "Y": 87.6 + }, + { + "X": 21.8, + "Y": 64.6 + }, + { + "X": 48.6, + "Y": 92.4 + }, + { + "X": 1.6, + "Y": 81.7 + }, + { + "X": 65.4, + "Y": 3.7 + }, + { + "X": 0.3, + "Y": 42.6 + }, + { + "X": 87.4, + "Y": 21.9 + }, + { + "X": 76.9, + "Y": 45.5 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/11-card182.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/11-card182.flint.json new file mode 100644 index 00000000..539c4519 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/11-card182.flint.json @@ -0,0 +1,1023 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Y", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 52.7, + "Y": 60.1, + "Segment": "Electronics" + }, + { + "X": 72.4, + "Y": 66, + "Segment": "Clothing" + }, + { + "X": 90.5, + "Y": 76.8, + "Segment": "Food" + }, + { + "X": 26.8, + "Y": 70.6, + "Segment": "Books" + }, + { + "X": 7.3, + "Y": 26.6, + "Segment": "Sports" + }, + { + "X": 87, + "Y": 57.4, + "Segment": "Home" + }, + { + "X": 24.6, + "Y": 4.1, + "Segment": "Garden" + }, + { + "X": 65.2, + "Y": 40.1, + "Segment": "Auto" + }, + { + "X": 36.6, + "Y": 58, + "Segment": "Health" + }, + { + "X": 8.8, + "Y": 58.4, + "Segment": "Beauty" + }, + { + "X": 72.5, + "Y": 17.8, + "Segment": "Toys" + }, + { + "X": 16.4, + "Y": 83.9, + "Segment": "Music" + }, + { + "X": 43, + "Y": 76.9, + "Segment": "Movies" + }, + { + "X": 57.7, + "Y": 4, + "Segment": "Software" + }, + { + "X": 8.4, + "Y": 65.8, + "Segment": "Games" + }, + { + "X": 24.5, + "Y": 84.7, + "Segment": "Office" + }, + { + "X": 32.7, + "Y": 60.9, + "Segment": "Pet" + }, + { + "X": 68.2, + "Y": 7.5, + "Segment": "Baby" + }, + { + "X": 73, + "Y": 53.9, + "Segment": "Tools" + }, + { + "X": 84.2, + "Y": 36.5, + "Segment": "Crafts" + }, + { + "X": 80.6, + "Y": 74.7, + "Segment": "Electronics" + }, + { + "X": 60.1, + "Y": 94.8, + "Segment": "Clothing" + }, + { + "X": 18, + "Y": 82.7, + "Segment": "Food" + }, + { + "X": 9.5, + "Y": 61.8, + "Segment": "Books" + }, + { + "X": 49.9, + "Y": 50.3, + "Segment": "Sports" + }, + { + "X": 50.4, + "Y": 92.9, + "Segment": "Home" + }, + { + "X": 53.3, + "Y": 88.7, + "Segment": "Garden" + }, + { + "X": 95.6, + "Y": 57.4, + "Segment": "Auto" + }, + { + "X": 20.6, + "Y": 6.9, + "Segment": "Health" + }, + { + "X": 56.5, + "Y": 25.8, + "Segment": "Beauty" + }, + { + "X": 59, + "Y": 76.7, + "Segment": "Toys" + }, + { + "X": 56.5, + "Y": 31.7, + "Segment": "Music" + }, + { + "X": 50.7, + "Y": 33.3, + "Segment": "Movies" + }, + { + "X": 44.8, + "Y": 25.8, + "Segment": "Software" + }, + { + "X": 43.4, + "Y": 89.4, + "Segment": "Games" + }, + { + "X": 34.1, + "Y": 3.6, + "Segment": "Office" + }, + { + "X": 47.2, + "Y": 4.2, + "Segment": "Pet" + }, + { + "X": 17.6, + "Y": 26.9, + "Segment": "Baby" + }, + { + "X": 46.7, + "Y": 63.6, + "Segment": "Tools" + }, + { + "X": 46.9, + "Y": 79, + "Segment": "Crafts" + }, + { + "X": 94.7, + "Y": 96.1, + "Segment": "Electronics" + }, + { + "X": 59.1, + "Y": 87.1, + "Segment": "Clothing" + }, + { + "X": 13.2, + "Y": 56.2, + "Segment": "Food" + }, + { + "X": 14.9, + "Y": 2.1, + "Segment": "Books" + }, + { + "X": 9.6, + "Y": 94.5, + "Segment": "Sports" + }, + { + "X": 52.4, + "Y": 10.3, + "Segment": "Home" + }, + { + "X": 76.9, + "Y": 99.6, + "Segment": "Garden" + }, + { + "X": 24.5, + "Y": 4.9, + "Segment": "Auto" + }, + { + "X": 10, + "Y": 20, + "Segment": "Health" + }, + { + "X": 4.9, + "Y": 85.9, + "Segment": "Beauty" + }, + { + "X": 24.5, + "Y": 95.5, + "Segment": "Toys" + }, + { + "X": 18.2, + "Y": 64.8, + "Segment": "Music" + }, + { + "X": 36.9, + "Y": 42.8, + "Segment": "Movies" + }, + { + "X": 10.5, + "Y": 12.1, + "Segment": "Software" + }, + { + "X": 15.8, + "Y": 61.5, + "Segment": "Games" + }, + { + "X": 22.5, + "Y": 60, + "Segment": "Office" + }, + { + "X": 46, + "Y": 73.6, + "Segment": "Pet" + }, + { + "X": 33.9, + "Y": 60.3, + "Segment": "Baby" + }, + { + "X": 29.5, + "Y": 89.5, + "Segment": "Tools" + }, + { + "X": 30.2, + "Y": 16.8, + "Segment": "Crafts" + }, + { + "X": 18.4, + "Y": 85.6, + "Segment": "Electronics" + }, + { + "X": 53.7, + "Y": 78.2, + "Segment": "Clothing" + }, + { + "X": 87.5, + "Y": 29.2, + "Segment": "Food" + }, + { + "X": 31.6, + "Y": 3.4, + "Segment": "Books" + }, + { + "X": 2.7, + "Y": 75.3, + "Segment": "Sports" + }, + { + "X": 75.4, + "Y": 21.6, + "Segment": "Home" + }, + { + "X": 21.5, + "Y": 47.1, + "Segment": "Garden" + }, + { + "X": 86, + "Y": 4.2, + "Segment": "Auto" + }, + { + "X": 70, + "Y": 24.2, + "Segment": "Health" + }, + { + "X": 54, + "Y": 71.1, + "Segment": "Beauty" + }, + { + "X": 55.6, + "Y": 33.8, + "Segment": "Toys" + }, + { + "X": 64.3, + "Y": 28.7, + "Segment": "Music" + }, + { + "X": 29.9, + "Y": 74.1, + "Segment": "Movies" + }, + { + "X": 46.2, + "Y": 82.4, + "Segment": "Software" + }, + { + "X": 88.4, + "Y": 91.6, + "Segment": "Games" + }, + { + "X": 98.5, + "Y": 66.6, + "Segment": "Office" + }, + { + "X": 53.7, + "Y": 84.3, + "Segment": "Pet" + }, + { + "X": 45.1, + "Y": 30, + "Segment": "Baby" + }, + { + "X": 62.4, + "Y": 71.6, + "Segment": "Tools" + }, + { + "X": 48.4, + "Y": 10.1, + "Segment": "Crafts" + }, + { + "X": 92.1, + "Y": 65.5, + "Segment": "Electronics" + }, + { + "X": 93.2, + "Y": 91.3, + "Segment": "Clothing" + }, + { + "X": 3.4, + "Y": 45.9, + "Segment": "Food" + }, + { + "X": 31.6, + "Y": 9, + "Segment": "Books" + }, + { + "X": 8.2, + "Y": 93.1, + "Segment": "Sports" + }, + { + "X": 85.2, + "Y": 67.3, + "Segment": "Home" + }, + { + "X": 83.2, + "Y": 86.1, + "Segment": "Garden" + }, + { + "X": 87.6, + "Y": 27.6, + "Segment": "Auto" + }, + { + "X": 44.9, + "Y": 94.9, + "Segment": "Health" + }, + { + "X": 51.2, + "Y": 86.7, + "Segment": "Beauty" + }, + { + "X": 91.6, + "Y": 12.1, + "Segment": "Toys" + }, + { + "X": 48.2, + "Y": 82.1, + "Segment": "Music" + }, + { + "X": 46.9, + "Y": 79.2, + "Segment": "Movies" + }, + { + "X": 74, + "Y": 56.5, + "Segment": "Software" + }, + { + "X": 36.5, + "Y": 71.7, + "Segment": "Games" + }, + { + "X": 72.1, + "Y": 88.6, + "Segment": "Office" + }, + { + "X": 62.5, + "Y": 13.6, + "Segment": "Pet" + }, + { + "X": 30.9, + "Y": 55.7, + "Segment": "Baby" + }, + { + "X": 48.6, + "Y": 67.2, + "Segment": "Tools" + }, + { + "X": 74.9, + "Y": 25, + "Segment": "Crafts" + }, + { + "X": 93.7, + "Y": 92.2, + "Segment": "Electronics" + }, + { + "X": 27.1, + "Y": 91.8, + "Segment": "Clothing" + }, + { + "X": 79.5, + "Y": 76.9, + "Segment": "Food" + }, + { + "X": 52.3, + "Y": 50.7, + "Segment": "Books" + }, + { + "X": 83.1, + "Y": 19, + "Segment": "Sports" + }, + { + "X": 66.7, + "Y": 81.7, + "Segment": "Home" + }, + { + "X": 17.7, + "Y": 48.7, + "Segment": "Garden" + }, + { + "X": 59.5, + "Y": 66.9, + "Segment": "Auto" + }, + { + "X": 45.5, + "Y": 66.8, + "Segment": "Health" + }, + { + "X": 94.1, + "Y": 88.9, + "Segment": "Beauty" + }, + { + "X": 57.8, + "Y": 23.7, + "Segment": "Toys" + }, + { + "X": 47.6, + "Y": 6.9, + "Segment": "Music" + }, + { + "X": 49.8, + "Y": 68.7, + "Segment": "Movies" + }, + { + "X": 38.4, + "Y": 17.6, + "Segment": "Software" + }, + { + "X": 81.8, + "Y": 33.5, + "Segment": "Games" + }, + { + "X": 18.4, + "Y": 45.5, + "Segment": "Office" + }, + { + "X": 82.6, + "Y": 11.8, + "Segment": "Pet" + }, + { + "X": 45.6, + "Y": 9.6, + "Segment": "Baby" + }, + { + "X": 21.3, + "Y": 53, + "Segment": "Tools" + }, + { + "X": 77.5, + "Y": 22.4, + "Segment": "Crafts" + }, + { + "X": 44.4, + "Y": 12.6, + "Segment": "Electronics" + }, + { + "X": 97.1, + "Y": 53.3, + "Segment": "Clothing" + }, + { + "X": 7.1, + "Y": 82.1, + "Segment": "Food" + }, + { + "X": 53.8, + "Y": 12, + "Segment": "Books" + }, + { + "X": 48, + "Y": 9.2, + "Segment": "Sports" + }, + { + "X": 6, + "Y": 75.6, + "Segment": "Home" + }, + { + "X": 77.3, + "Y": 98.9, + "Segment": "Garden" + }, + { + "X": 93.2, + "Y": 55.9, + "Segment": "Auto" + }, + { + "X": 41.5, + "Y": 9.7, + "Segment": "Health" + }, + { + "X": 19.6, + "Y": 45.5, + "Segment": "Beauty" + }, + { + "X": 15.6, + "Y": 22.3, + "Segment": "Toys" + }, + { + "X": 70.3, + "Y": 87, + "Segment": "Music" + }, + { + "X": 78.1, + "Y": 54.5, + "Segment": "Movies" + }, + { + "X": 8.7, + "Y": 45.3, + "Segment": "Software" + }, + { + "X": 68.6, + "Y": 50.8, + "Segment": "Games" + }, + { + "X": 28, + "Y": 97.7, + "Segment": "Office" + }, + { + "X": 62.3, + "Y": 75.2, + "Segment": "Pet" + }, + { + "X": 5.2, + "Y": 46.7, + "Segment": "Baby" + }, + { + "X": 74.3, + "Y": 52.7, + "Segment": "Tools" + }, + { + "X": 77.4, + "Y": 84.7, + "Segment": "Crafts" + }, + { + "X": 41, + "Y": 67.6, + "Segment": "Electronics" + }, + { + "X": 59.1, + "Y": 62.1, + "Segment": "Clothing" + }, + { + "X": 52.8, + "Y": 89.3, + "Segment": "Food" + }, + { + "X": 82.8, + "Y": 98.6, + "Segment": "Books" + }, + { + "X": 16.3, + "Y": 61.6, + "Segment": "Sports" + }, + { + "X": 23.5, + "Y": 26.6, + "Segment": "Home" + }, + { + "X": 33.4, + "Y": 88.1, + "Segment": "Garden" + }, + { + "X": 6.3, + "Y": 0.1, + "Segment": "Auto" + }, + { + "X": 47.9, + "Y": 77, + "Segment": "Health" + }, + { + "X": 17.9, + "Y": 49.1, + "Segment": "Beauty" + }, + { + "X": 82.5, + "Y": 80.8, + "Segment": "Toys" + }, + { + "X": 95.5, + "Y": 44.6, + "Segment": "Music" + }, + { + "X": 93.5, + "Y": 94.6, + "Segment": "Movies" + }, + { + "X": 57.5, + "Y": 91, + "Segment": "Software" + }, + { + "X": 16.5, + "Y": 82, + "Segment": "Games" + }, + { + "X": 85.1, + "Y": 51.9, + "Segment": "Office" + }, + { + "X": 49, + "Y": 42.4, + "Segment": "Pet" + }, + { + "X": 72.4, + "Y": 98.2, + "Segment": "Baby" + }, + { + "X": 32.7, + "Y": 22, + "Segment": "Tools" + }, + { + "X": 10.3, + "Y": 23.6, + "Segment": "Crafts" + }, + { + "X": 46.6, + "Y": 36.8, + "Segment": "Electronics" + }, + { + "X": 20, + "Y": 89.6, + "Segment": "Clothing" + }, + { + "X": 95.6, + "Y": 83.6, + "Segment": "Food" + }, + { + "X": 45, + "Y": 67.8, + "Segment": "Books" + }, + { + "X": 27.9, + "Y": 13.5, + "Segment": "Sports" + }, + { + "X": 37.2, + "Y": 91.5, + "Segment": "Home" + }, + { + "X": 12, + "Y": 89.5, + "Segment": "Garden" + }, + { + "X": 87.7, + "Y": 12, + "Segment": "Auto" + }, + { + "X": 88.5, + "Y": 72.4, + "Segment": "Health" + }, + { + "X": 83.2, + "Y": 93.4, + "Segment": "Beauty" + }, + { + "X": 75.9, + "Y": 37, + "Segment": "Toys" + }, + { + "X": 21.1, + "Y": 50.9, + "Segment": "Music" + }, + { + "X": 64.9, + "Y": 19.9, + "Segment": "Movies" + }, + { + "X": 86, + "Y": 38.7, + "Segment": "Software" + }, + { + "X": 91.4, + "Y": 27.8, + "Segment": "Games" + }, + { + "X": 52.9, + "Y": 85.5, + "Segment": "Office" + }, + { + "X": 67.2, + "Y": 57.2, + "Segment": "Pet" + }, + { + "X": 2, + "Y": 66.9, + "Segment": "Baby" + }, + { + "X": 2.3, + "Y": 18.7, + "Segment": "Tools" + }, + { + "X": 80.7, + "Y": 73.5, + "Segment": "Crafts" + }, + { + "X": 99, + "Y": 67.1, + "Segment": "Electronics" + }, + { + "X": 9.6, + "Y": 35.9, + "Segment": "Clothing" + }, + { + "X": 46.5, + "Y": 48.4, + "Segment": "Food" + }, + { + "X": 31.5, + "Y": 95.5, + "Segment": "Books" + }, + { + "X": 16.6, + "Y": 59, + "Segment": "Sports" + }, + { + "X": 81.1, + "Y": 29.1, + "Segment": "Home" + }, + { + "X": 1.4, + "Y": 59.3, + "Segment": "Garden" + }, + { + "X": 2.2, + "Y": 11.7, + "Segment": "Auto" + }, + { + "X": 35.2, + "Y": 15.4, + "Segment": "Health" + }, + { + "X": 60.9, + "Y": 10.8, + "Segment": "Beauty" + }, + { + "X": 80.2, + "Y": 40.8, + "Segment": "Toys" + }, + { + "X": 2, + "Y": 85.1, + "Segment": "Music" + }, + { + "X": 31.6, + "Y": 26.4, + "Segment": "Movies" + }, + { + "X": 64.2, + "Y": 65.7, + "Segment": "Software" + }, + { + "X": 19, + "Y": 51.9, + "Segment": "Games" + }, + { + "X": 51, + "Y": 27.5, + "Segment": "Office" + }, + { + "X": 5.7, + "Y": 10.3, + "Segment": "Pet" + }, + { + "X": 48.2, + "Y": 42.3, + "Segment": "Baby" + }, + { + "X": 35.4, + "Y": 25.8, + "Segment": "Tools" + }, + { + "X": 83.6, + "Y": 6, + "Segment": "Crafts" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/12-card96.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/12-card96.flint.json new file mode 100644 index 00000000..0cd56cb6 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/12-card96.flint.json @@ -0,0 +1,523 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Y", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 68.8, + "Y": 7.6, + "Segment": "James Walker" + }, + { + "X": 53.3, + "Y": 78.7, + "Segment": "Paul Wilson" + }, + { + "X": 73.8, + "Y": 84.1, + "Segment": "Jessica Martin" + }, + { + "X": 77.4, + "Y": 71.9, + "Segment": "Christopher Moore" + }, + { + "X": 11.6, + "Y": 45.9, + "Segment": "Betty Wilson" + }, + { + "X": 81.3, + "Y": 14.2, + "Segment": "Steven Lewis" + }, + { + "X": 24.9, + "Y": 46.6, + "Segment": "Karen Lopez" + }, + { + "X": 96.8, + "Y": 13.4, + "Segment": "Sandra Wright" + }, + { + "X": 74.6, + "Y": 40.1, + "Segment": "Daniel King" + }, + { + "X": 15, + "Y": 58.7, + "Segment": "Mark Taylor" + }, + { + "X": 47.1, + "Y": 37.9, + "Segment": "Sandra Thomas" + }, + { + "X": 82.3, + "Y": 34.1, + "Segment": "Karen Rodriguez" + }, + { + "X": 22.5, + "Y": 67.5, + "Segment": "Patricia Jackson" + }, + { + "X": 39.1, + "Y": 98.2, + "Segment": "Donna Hill" + }, + { + "X": 91.6, + "Y": 27.6, + "Segment": "Donna White" + }, + { + "X": 56.2, + "Y": 20.6, + "Segment": "Michael Brown" + }, + { + "X": 48.6, + "Y": 99.3, + "Segment": "Elizabeth Robinson" + }, + { + "X": 19, + "Y": 20.1, + "Segment": "Mary Jones" + }, + { + "X": 66.7, + "Y": 55.8, + "Segment": "Richard Rodriguez" + }, + { + "X": 81.5, + "Y": 32.4, + "Segment": "Christopher Clark" + }, + { + "X": 71.9, + "Y": 29.2, + "Segment": "Christopher Lopez" + }, + { + "X": 21.4, + "Y": 13.5, + "Segment": "Susan Ramirez" + }, + { + "X": 1.5, + "Y": 34.9, + "Segment": "Steven Wilson" + }, + { + "X": 3.5, + "Y": 97.8, + "Segment": "Paul Anderson" + }, + { + "X": 21.1, + "Y": 63, + "Segment": "Joseph Rodriguez" + }, + { + "X": 0.9, + "Y": 5.3, + "Segment": "Elizabeth Wright" + }, + { + "X": 69, + "Y": 64.3, + "Segment": "Kimberly Jackson" + }, + { + "X": 22.8, + "Y": 75.6, + "Segment": "Betty Hernandez" + }, + { + "X": 65.6, + "Y": 48.9, + "Segment": "David King" + }, + { + "X": 61.9, + "Y": 78.3, + "Segment": "Matthew Lopez" + }, + { + "X": 97.9, + "Y": 33.2, + "Segment": "Susan Hernandez" + }, + { + "X": 53.8, + "Y": 84.1, + "Segment": "Jennifer Lee" + }, + { + "X": 58.4, + "Y": 52.5, + "Segment": "Richard Flores" + }, + { + "X": 25.3, + "Y": 59.1, + "Segment": "John Anderson" + }, + { + "X": 70.7, + "Y": 16, + "Segment": "Kimberly Wright" + }, + { + "X": 28.6, + "Y": 73.7, + "Segment": "Joseph Williams" + }, + { + "X": 38.3, + "Y": 2.8, + "Segment": "Lisa Torres" + }, + { + "X": 25.6, + "Y": 17.4, + "Segment": "Andrew Rodriguez" + }, + { + "X": 9.4, + "Y": 8.3, + "Segment": "Karen Johnson" + }, + { + "X": 27.4, + "Y": 25.4, + "Segment": "Steven Jones" + }, + { + "X": 31.6, + "Y": 77.2, + "Segment": "Joshua Ramirez" + }, + { + "X": 66.3, + "Y": 7.6, + "Segment": "Emily Martinez" + }, + { + "X": 5.8, + "Y": 81.7, + "Segment": "Robert Walker" + }, + { + "X": 21.2, + "Y": 17.9, + "Segment": "Robert Lewis" + }, + { + "X": 52.7, + "Y": 97.3, + "Segment": "Sandra Lopez" + }, + { + "X": 44.3, + "Y": 82.1, + "Segment": "Nancy Miller" + }, + { + "X": 18.1, + "Y": 57.5, + "Segment": "Christopher Sanchez" + }, + { + "X": 38.5, + "Y": 99.1, + "Segment": "Daniel Flores" + }, + { + "X": 35.8, + "Y": 76.5, + "Segment": "Mary Walker" + }, + { + "X": 96.4, + "Y": 74.4, + "Segment": "Anthony Ramirez" + }, + { + "X": 87.3, + "Y": 22.1, + "Segment": "James Walker" + }, + { + "X": 6.8, + "Y": 2.2, + "Segment": "Paul Wilson" + }, + { + "X": 8.2, + "Y": 56.2, + "Segment": "Jessica Martin" + }, + { + "X": 95.8, + "Y": 73, + "Segment": "Christopher Moore" + }, + { + "X": 34.2, + "Y": 10.5, + "Segment": "Betty Wilson" + }, + { + "X": 68.1, + "Y": 76.5, + "Segment": "Steven Lewis" + }, + { + "X": 80.4, + "Y": 21, + "Segment": "Karen Lopez" + }, + { + "X": 71.5, + "Y": 44.6, + "Segment": "Sandra Wright" + }, + { + "X": 78.7, + "Y": 78.4, + "Segment": "Daniel King" + }, + { + "X": 1.5, + "Y": 3.8, + "Segment": "Mark Taylor" + }, + { + "X": 28.1, + "Y": 53.6, + "Segment": "Sandra Thomas" + }, + { + "X": 63.3, + "Y": 87.6, + "Segment": "Karen Rodriguez" + }, + { + "X": 95, + "Y": 30.9, + "Segment": "Patricia Jackson" + }, + { + "X": 53.7, + "Y": 48.2, + "Segment": "Donna Hill" + }, + { + "X": 74.6, + "Y": 62.4, + "Segment": "Donna White" + }, + { + "X": 93.2, + "Y": 25.7, + "Segment": "Michael Brown" + }, + { + "X": 20.7, + "Y": 78.1, + "Segment": "Elizabeth Robinson" + }, + { + "X": 30.4, + "Y": 17.6, + "Segment": "Mary Jones" + }, + { + "X": 3.2, + "Y": 10.2, + "Segment": "Richard Rodriguez" + }, + { + "X": 16.9, + "Y": 21.3, + "Segment": "Christopher Clark" + }, + { + "X": 5.9, + "Y": 65.8, + "Segment": "Christopher Lopez" + }, + { + "X": 63.2, + "Y": 76.9, + "Segment": "Susan Ramirez" + }, + { + "X": 70.7, + "Y": 29.1, + "Segment": "Steven Wilson" + }, + { + "X": 82.9, + "Y": 88.3, + "Segment": "Paul Anderson" + }, + { + "X": 93.7, + "Y": 77.9, + "Segment": "Joseph Rodriguez" + }, + { + "X": 85.7, + "Y": 78.4, + "Segment": "Elizabeth Wright" + }, + { + "X": 48.4, + "Y": 61.3, + "Segment": "Kimberly Jackson" + }, + { + "X": 22.6, + "Y": 39.4, + "Segment": "Betty Hernandez" + }, + { + "X": 8.1, + "Y": 30.3, + "Segment": "David King" + }, + { + "X": 41.8, + "Y": 96.9, + "Segment": "Matthew Lopez" + }, + { + "X": 51.5, + "Y": 35.3, + "Segment": "Susan Hernandez" + }, + { + "X": 11.4, + "Y": 16.8, + "Segment": "Jennifer Lee" + }, + { + "X": 30.9, + "Y": 9.7, + "Segment": "Richard Flores" + }, + { + "X": 60.1, + "Y": 96.1, + "Segment": "John Anderson" + }, + { + "X": 64.4, + "Y": 89.7, + "Segment": "Kimberly Wright" + }, + { + "X": 9.7, + "Y": 57.9, + "Segment": "Joseph Williams" + }, + { + "X": 69.1, + "Y": 57.7, + "Segment": "Lisa Torres" + }, + { + "X": 67.2, + "Y": 15.6, + "Segment": "Andrew Rodriguez" + }, + { + "X": 10.5, + "Y": 70, + "Segment": "Karen Johnson" + }, + { + "X": 16.7, + "Y": 36.7, + "Segment": "Steven Jones" + }, + { + "X": 50.4, + "Y": 3.7, + "Segment": "Joshua Ramirez" + }, + { + "X": 47.4, + "Y": 51.8, + "Segment": "Emily Martinez" + }, + { + "X": 8.7, + "Y": 34.4, + "Segment": "Robert Walker" + }, + { + "X": 93.4, + "Y": 9.8, + "Segment": "Robert Lewis" + }, + { + "X": 14.9, + "Y": 17.5, + "Segment": "Sandra Lopez" + }, + { + "X": 98.5, + "Y": 92.2, + "Segment": "Nancy Miller" + }, + { + "X": 34.7, + "Y": 51.7, + "Segment": "Christopher Sanchez" + }, + { + "X": 76.5, + "Y": 35.8, + "Segment": "Daniel Flores" + }, + { + "X": 37.4, + "Y": 46.1, + "Segment": "Mary Walker" + }, + { + "X": 34.2, + "Y": 2.6, + "Segment": "Anthony Ramirez" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/13-card10.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/13-card10.flint.json new file mode 100644 index 00000000..c4102d5e --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/13-card10.flint.json @@ -0,0 +1,73 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity", + "Size": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Y", + "size": "Size" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 56.8, + "Y": 95, + "Size": 63.2 + }, + { + "X": 44.9, + "Y": 16, + "Size": 16.7 + }, + { + "X": 54, + "Y": 7.1, + "Size": 87.9 + }, + { + "X": 95.8, + "Y": 49.8, + "Size": 90.1 + }, + { + "X": 84.8, + "Y": 34.6, + "Size": 35.8 + }, + { + "X": 65.1, + "Y": 45.9, + "Size": 57.5 + }, + { + "X": 34.1, + "Y": 80.2, + "Size": 83.3 + }, + { + "X": 58.2, + "Y": 2.3, + "Size": 21.3 + }, + { + "X": 48.2, + "Y": 10.5, + "Size": 44.6 + }, + { + "X": 94, + "Y": 96.6, + "Size": 82.9 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/14-card187.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/14-card187.flint.json new file mode 100644 index 00000000..ace73d8a --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/14-card187.flint.json @@ -0,0 +1,1023 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity", + "Size": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Y", + "size": "Size" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 7.2, + "Y": 56.4, + "Size": 55.2 + }, + { + "X": 8, + "Y": 89.5, + "Size": 1.3 + }, + { + "X": 73.7, + "Y": 64.9, + "Size": 82.1 + }, + { + "X": 88.4, + "Y": 28, + "Size": 94.7 + }, + { + "X": 35.1, + "Y": 19.8, + "Size": 19 + }, + { + "X": 10.7, + "Y": 52.1, + "Size": 68.3 + }, + { + "X": 37.4, + "Y": 54.4, + "Size": 83.4 + }, + { + "X": 23.7, + "Y": 40.3, + "Size": 76.1 + }, + { + "X": 4.8, + "Y": 74.6, + "Size": 41.1 + }, + { + "X": 5.1, + "Y": 66.4, + "Size": 3.3 + }, + { + "X": 59.8, + "Y": 85.2, + "Size": 52.4 + }, + { + "X": 90.7, + "Y": 31.5, + "Size": 5.4 + }, + { + "X": 38.5, + "Y": 40.6, + "Size": 46.5 + }, + { + "X": 29.3, + "Y": 47.4, + "Size": 5.5 + }, + { + "X": 37.4, + "Y": 23.2, + "Size": 65.9 + }, + { + "X": 50.7, + "Y": 52, + "Size": 59.5 + }, + { + "X": 20.5, + "Y": 97.7, + "Size": 87.4 + }, + { + "X": 44.3, + "Y": 33.1, + "Size": 17.2 + }, + { + "X": 7.7, + "Y": 65.9, + "Size": 69.3 + }, + { + "X": 81.5, + "Y": 77.7, + "Size": 16 + }, + { + "X": 71.5, + "Y": 49.9, + "Size": 94.9 + }, + { + "X": 89.4, + "Y": 22.5, + "Size": 40.2 + }, + { + "X": 59.3, + "Y": 17.4, + "Size": 71 + }, + { + "X": 67.6, + "Y": 2.7, + "Size": 72.6 + }, + { + "X": 83.4, + "Y": 24.3, + "Size": 43.7 + }, + { + "X": 44.9, + "Y": 4, + "Size": 88.3 + }, + { + "X": 58.7, + "Y": 39.7, + "Size": 39.6 + }, + { + "X": 50, + "Y": 95.5, + "Size": 40.6 + }, + { + "X": 7.4, + "Y": 94.3, + "Size": 78.6 + }, + { + "X": 34.2, + "Y": 33.3, + "Size": 25 + }, + { + "X": 62.1, + "Y": 39.7, + "Size": 56.7 + }, + { + "X": 23.3, + "Y": 68.5, + "Size": 46.5 + }, + { + "X": 25.5, + "Y": 67.1, + "Size": 45.3 + }, + { + "X": 84.7, + "Y": 33, + "Size": 53.3 + }, + { + "X": 56.8, + "Y": 32.7, + "Size": 13.3 + }, + { + "X": 84.5, + "Y": 59.1, + "Size": 9.8 + }, + { + "X": 58, + "Y": 99.5, + "Size": 95.2 + }, + { + "X": 5, + "Y": 98.2, + "Size": 45.1 + }, + { + "X": 89.5, + "Y": 48.6, + "Size": 47 + }, + { + "X": 44.7, + "Y": 85.8, + "Size": 24.3 + }, + { + "X": 39.4, + "Y": 85.3, + "Size": 33.9 + }, + { + "X": 70.4, + "Y": 70, + "Size": 76.6 + }, + { + "X": 51.5, + "Y": 83.5, + "Size": 71.2 + }, + { + "X": 19.2, + "Y": 62, + "Size": 88.4 + }, + { + "X": 61.7, + "Y": 62.5, + "Size": 86.4 + }, + { + "X": 75.9, + "Y": 21.8, + "Size": 27.5 + }, + { + "X": 37.2, + "Y": 77, + "Size": 95.2 + }, + { + "X": 56.5, + "Y": 28.1, + "Size": 53.8 + }, + { + "X": 63.8, + "Y": 99.6, + "Size": 5.3 + }, + { + "X": 72.5, + "Y": 24.1, + "Size": 42.5 + }, + { + "X": 14.1, + "Y": 84, + "Size": 6.9 + }, + { + "X": 17.2, + "Y": 12.4, + "Size": 98.9 + }, + { + "X": 56.8, + "Y": 32.3, + "Size": 24.1 + }, + { + "X": 65.8, + "Y": 38.4, + "Size": 18.6 + }, + { + "X": 11.5, + "Y": 96.6, + "Size": 69.3 + }, + { + "X": 2.8, + "Y": 19.2, + "Size": 65.4 + }, + { + "X": 37.8, + "Y": 96, + "Size": 16.2 + }, + { + "X": 51.1, + "Y": 8.5, + "Size": 32.9 + }, + { + "X": 96.5, + "Y": 52.3, + "Size": 0 + }, + { + "X": 42.3, + "Y": 84.4, + "Size": 85.9 + }, + { + "X": 3.9, + "Y": 47, + "Size": 22.2 + }, + { + "X": 35.9, + "Y": 75.2, + "Size": 72.2 + }, + { + "X": 56, + "Y": 96.6, + "Size": 20.2 + }, + { + "X": 72.7, + "Y": 49.7, + "Size": 95 + }, + { + "X": 12.4, + "Y": 41.7, + "Size": 64.5 + }, + { + "X": 12.2, + "Y": 2.4, + "Size": 3.3 + }, + { + "X": 97.2, + "Y": 32.8, + "Size": 4.6 + }, + { + "X": 91.1, + "Y": 85.3, + "Size": 14.2 + }, + { + "X": 60.9, + "Y": 86.9, + "Size": 26.7 + }, + { + "X": 63.8, + "Y": 74.7, + "Size": 83.4 + }, + { + "X": 66.5, + "Y": 14.9, + "Size": 22.9 + }, + { + "X": 95.2, + "Y": 89.9, + "Size": 76.1 + }, + { + "X": 88, + "Y": 52, + "Size": 25.9 + }, + { + "X": 97.1, + "Y": 55.7, + "Size": 2.6 + }, + { + "X": 57.2, + "Y": 62.4, + "Size": 0.3 + }, + { + "X": 58.3, + "Y": 77.9, + "Size": 5.7 + }, + { + "X": 6.2, + "Y": 69.7, + "Size": 15.1 + }, + { + "X": 32.2, + "Y": 87.7, + "Size": 27.2 + }, + { + "X": 24.6, + "Y": 77.7, + "Size": 5.1 + }, + { + "X": 50.4, + "Y": 12.3, + "Size": 43.6 + }, + { + "X": 10.5, + "Y": 76.3, + "Size": 91.1 + }, + { + "X": 10.1, + "Y": 87.7, + "Size": 86.1 + }, + { + "X": 43.7, + "Y": 61.6, + "Size": 70.3 + }, + { + "X": 33.4, + "Y": 75.5, + "Size": 79.9 + }, + { + "X": 48.7, + "Y": 70.3, + "Size": 6.4 + }, + { + "X": 30.8, + "Y": 64, + "Size": 60.3 + }, + { + "X": 49.3, + "Y": 66.3, + "Size": 89 + }, + { + "X": 60.3, + "Y": 72.2, + "Size": 75.7 + }, + { + "X": 4.2, + "Y": 61.9, + "Size": 36.4 + }, + { + "X": 55.2, + "Y": 39.5, + "Size": 96.9 + }, + { + "X": 65.9, + "Y": 2.3, + "Size": 17.1 + }, + { + "X": 27.2, + "Y": 42.1, + "Size": 19.5 + }, + { + "X": 9.8, + "Y": 41.6, + "Size": 43.7 + }, + { + "X": 64.6, + "Y": 25.9, + "Size": 15.2 + }, + { + "X": 86, + "Y": 20.1, + "Size": 39.5 + }, + { + "X": 39.7, + "Y": 3.6, + "Size": 4.4 + }, + { + "X": 8.8, + "Y": 17.1, + "Size": 6.9 + }, + { + "X": 82.7, + "Y": 37.1, + "Size": 93.5 + }, + { + "X": 94.4, + "Y": 76.8, + "Size": 22.8 + }, + { + "X": 37.1, + "Y": 4.1, + "Size": 23 + }, + { + "X": 66.6, + "Y": 19, + "Size": 96.3 + }, + { + "X": 53.5, + "Y": 7.1, + "Size": 68.5 + }, + { + "X": 10.4, + "Y": 54.7, + "Size": 27 + }, + { + "X": 16, + "Y": 17.5, + "Size": 95.1 + }, + { + "X": 75, + "Y": 64.4, + "Size": 57.2 + }, + { + "X": 69.4, + "Y": 77.5, + "Size": 6.1 + }, + { + "X": 20.9, + "Y": 10.3, + "Size": 15.2 + }, + { + "X": 84.2, + "Y": 31.4, + "Size": 72.7 + }, + { + "X": 61.9, + "Y": 74.3, + "Size": 97.5 + }, + { + "X": 78.1, + "Y": 84.1, + "Size": 56.2 + }, + { + "X": 18.1, + "Y": 59.2, + "Size": 72.2 + }, + { + "X": 63, + "Y": 35.5, + "Size": 71.3 + }, + { + "X": 31, + "Y": 26.5, + "Size": 38.6 + }, + { + "X": 68.2, + "Y": 33.3, + "Size": 29.1 + }, + { + "X": 58.1, + "Y": 86.6, + "Size": 47 + }, + { + "X": 4.9, + "Y": 23.3, + "Size": 46.1 + }, + { + "X": 94.8, + "Y": 11.1, + "Size": 83.6 + }, + { + "X": 71.6, + "Y": 8.3, + "Size": 87.5 + }, + { + "X": 33, + "Y": 58, + "Size": 82.2 + }, + { + "X": 26.9, + "Y": 34.5, + "Size": 65.1 + }, + { + "X": 65.1, + "Y": 7.1, + "Size": 5.5 + }, + { + "X": 98.6, + "Y": 2.1, + "Size": 98 + }, + { + "X": 65.8, + "Y": 84.8, + "Size": 97.5 + }, + { + "X": 72.2, + "Y": 50.7, + "Size": 48.4 + }, + { + "X": 67.5, + "Y": 21.7, + "Size": 54.2 + }, + { + "X": 40.9, + "Y": 37.8, + "Size": 94.1 + }, + { + "X": 49.2, + "Y": 25.3, + "Size": 49.1 + }, + { + "X": 75.6, + "Y": 63.1, + "Size": 23.3 + }, + { + "X": 78, + "Y": 89.1, + "Size": 2.5 + }, + { + "X": 56.2, + "Y": 86.9, + "Size": 72.8 + }, + { + "X": 36.1, + "Y": 14, + "Size": 69.7 + }, + { + "X": 69.4, + "Y": 93.6, + "Size": 22.3 + }, + { + "X": 11, + "Y": 25.8, + "Size": 68.2 + }, + { + "X": 77, + "Y": 44.8, + "Size": 5.1 + }, + { + "X": 20.4, + "Y": 15.9, + "Size": 42.4 + }, + { + "X": 76.4, + "Y": 47.9, + "Size": 32.2 + }, + { + "X": 83.7, + "Y": 47.4, + "Size": 33.2 + }, + { + "X": 75.4, + "Y": 19.5, + "Size": 33.1 + }, + { + "X": 3.2, + "Y": 80.4, + "Size": 82.2 + }, + { + "X": 81.6, + "Y": 78.1, + "Size": 52.1 + }, + { + "X": 81.4, + "Y": 80.8, + "Size": 36.2 + }, + { + "X": 77.5, + "Y": 87.9, + "Size": 70.7 + }, + { + "X": 64.2, + "Y": 28.9, + "Size": 76.9 + }, + { + "X": 43.9, + "Y": 82.4, + "Size": 85.2 + }, + { + "X": 39.4, + "Y": 98, + "Size": 96.6 + }, + { + "X": 16.2, + "Y": 36.8, + "Size": 90.1 + }, + { + "X": 95.6, + "Y": 44.5, + "Size": 17.4 + }, + { + "X": 87.1, + "Y": 78.2, + "Size": 98.6 + }, + { + "X": 40.1, + "Y": 67.2, + "Size": 23.1 + }, + { + "X": 94.1, + "Y": 98.7, + "Size": 53.4 + }, + { + "X": 25, + "Y": 68.3, + "Size": 96.9 + }, + { + "X": 27.3, + "Y": 98.7, + "Size": 1.1 + }, + { + "X": 96.3, + "Y": 10.5, + "Size": 38.8 + }, + { + "X": 62.5, + "Y": 67.8, + "Size": 74.6 + }, + { + "X": 84.1, + "Y": 78.1, + "Size": 70.3 + }, + { + "X": 6.4, + "Y": 29.4, + "Size": 32.5 + }, + { + "X": 9.2, + "Y": 57.2, + "Size": 38 + }, + { + "X": 5.1, + "Y": 56.7, + "Size": 36.5 + }, + { + "X": 83, + "Y": 92, + "Size": 74.9 + }, + { + "X": 1.8, + "Y": 78, + "Size": 93 + }, + { + "X": 17.9, + "Y": 55.3, + "Size": 32.8 + }, + { + "X": 86.8, + "Y": 95.7, + "Size": 83.4 + }, + { + "X": 71.9, + "Y": 36.9, + "Size": 62.2 + }, + { + "X": 10.5, + "Y": 11, + "Size": 61.9 + }, + { + "X": 87.2, + "Y": 31.5, + "Size": 13.2 + }, + { + "X": 49.4, + "Y": 27.2, + "Size": 74.4 + }, + { + "X": 85.6, + "Y": 41.2, + "Size": 17.9 + }, + { + "X": 27.2, + "Y": 11.1, + "Size": 69.2 + }, + { + "X": 69.8, + "Y": 97.5, + "Size": 49.1 + }, + { + "X": 50.2, + "Y": 12, + "Size": 68.5 + }, + { + "X": 18.1, + "Y": 70.3, + "Size": 58.9 + }, + { + "X": 2.5, + "Y": 60.9, + "Size": 43.5 + }, + { + "X": 68.5, + "Y": 15.7, + "Size": 64.9 + }, + { + "X": 16.9, + "Y": 47.4, + "Size": 37.5 + }, + { + "X": 94.7, + "Y": 2.2, + "Size": 6.8 + }, + { + "X": 32.8, + "Y": 29.4, + "Size": 71.1 + }, + { + "X": 38.2, + "Y": 67, + "Size": 49 + }, + { + "X": 95.8, + "Y": 40.7, + "Size": 45.1 + }, + { + "X": 18.1, + "Y": 58.5, + "Size": 82.5 + }, + { + "X": 91.4, + "Y": 34.4, + "Size": 17.9 + }, + { + "X": 80.3, + "Y": 19.2, + "Size": 47.4 + }, + { + "X": 5.2, + "Y": 42.4, + "Size": 73.1 + }, + { + "X": 36.8, + "Y": 86.3, + "Size": 92.7 + }, + { + "X": 45.2, + "Y": 64.7, + "Size": 56.9 + }, + { + "X": 17.9, + "Y": 45, + "Size": 9.3 + }, + { + "X": 45.9, + "Y": 46.2, + "Size": 87.6 + }, + { + "X": 46.4, + "Y": 62.1, + "Size": 3.9 + }, + { + "X": 11.4, + "Y": 11.3, + "Size": 80.3 + }, + { + "X": 18.7, + "Y": 58.5, + "Size": 47 + }, + { + "X": 49.9, + "Y": 21.3, + "Size": 84.4 + }, + { + "X": 1.9, + "Y": 65.6, + "Size": 11.8 + }, + { + "X": 27.9, + "Y": 52.4, + "Size": 48.6 + }, + { + "X": 43.5, + "Y": 36.7, + "Size": 95.7 + }, + { + "X": 30.8, + "Y": 53, + "Size": 50.5 + }, + { + "X": 84.6, + "Y": 69.5, + "Size": 50.3 + }, + { + "X": 71.1, + "Y": 59.6, + "Size": 77.1 + }, + { + "X": 24.3, + "Y": 62.5, + "Size": 32 + }, + { + "X": 65.3, + "Y": 91.9, + "Size": 43.9 + }, + { + "X": 12.6, + "Y": 52, + "Size": 64 + }, + { + "X": 15.7, + "Y": 6.6, + "Size": 96 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/15-card5.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/15-card5.flint.json new file mode 100644 index 00000000..c9a43959 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/15-card5.flint.json @@ -0,0 +1,148 @@ +{ + "semantic_types": { + "Category": "Category", + "Y": "Quantity", + "ColorVal": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "Category", + "y": "Y", + "color": "ColorVal" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Electronics", + "Y": 53.3, + "ColorVal": 47.7 + }, + { + "Category": "Clothing", + "Y": 86.4, + "ColorVal": 91.1 + }, + { + "Category": "Food", + "Y": 12.6, + "ColorVal": 86.8 + }, + { + "Category": "Books", + "Y": 26, + "ColorVal": 46 + }, + { + "Category": "Sports", + "Y": 18.8, + "ColorVal": 26.4 + }, + { + "Category": "Electronics", + "Y": 89.5, + "ColorVal": 57.3 + }, + { + "Category": "Clothing", + "Y": 69.2, + "ColorVal": 97.1 + }, + { + "Category": "Food", + "Y": 30.8, + "ColorVal": 36.6 + }, + { + "Category": "Books", + "Y": 63.9, + "ColorVal": 30.1 + }, + { + "Category": "Sports", + "Y": 0.3, + "ColorVal": 95.1 + }, + { + "Category": "Electronics", + "Y": 23.7, + "ColorVal": 46.1 + }, + { + "Category": "Clothing", + "Y": 1.6, + "ColorVal": 88.8 + }, + { + "Category": "Food", + "Y": 44.3, + "ColorVal": 49.1 + }, + { + "Category": "Books", + "Y": 26.6, + "ColorVal": 83.6 + }, + { + "Category": "Sports", + "Y": 18.4, + "ColorVal": 14.6 + }, + { + "Category": "Electronics", + "Y": 11.2, + "ColorVal": 86.5 + }, + { + "Category": "Clothing", + "Y": 81.8, + "ColorVal": 65.6 + }, + { + "Category": "Food", + "Y": 38.9, + "ColorVal": 32.5 + }, + { + "Category": "Books", + "Y": 26.8, + "ColorVal": 70.9 + }, + { + "Category": "Sports", + "Y": 2.7, + "ColorVal": 39.2 + }, + { + "Category": "Electronics", + "Y": 38.5, + "ColorVal": 49.5 + }, + { + "Category": "Clothing", + "Y": 62.6, + "ColorVal": 51 + }, + { + "Category": "Food", + "Y": 60.9, + "ColorVal": 36 + }, + { + "Category": "Books", + "Y": 55.6, + "ColorVal": 3.2 + }, + { + "Category": "Sports", + "Y": 92.3, + "ColorVal": 76.8 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/16-card5.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/16-card5.flint.json new file mode 100644 index 00000000..5bef9c8d --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/16-card5.flint.json @@ -0,0 +1,148 @@ +{ + "semantic_types": { + "Category": "Category", + "Y": "Quantity", + "Size": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "Category", + "y": "Y", + "size": "Size" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Electronics", + "Y": 20.4, + "Size": 11.2 + }, + { + "Category": "Clothing", + "Y": 83, + "Size": 73.6 + }, + { + "Category": "Food", + "Y": 67.3, + "Size": 23.2 + }, + { + "Category": "Books", + "Y": 80.9, + "Size": 90.9 + }, + { + "Category": "Sports", + "Y": 55.3, + "Size": 44.5 + }, + { + "Category": "Electronics", + "Y": 70.5, + "Size": 33.9 + }, + { + "Category": "Clothing", + "Y": 7.4, + "Size": 19 + }, + { + "Category": "Food", + "Y": 75.2, + "Size": 34.1 + }, + { + "Category": "Books", + "Y": 34.8, + "Size": 75.5 + }, + { + "Category": "Sports", + "Y": 4.9, + "Size": 59.1 + }, + { + "Category": "Electronics", + "Y": 77.9, + "Size": 17.9 + }, + { + "Category": "Clothing", + "Y": 23.3, + "Size": 16.2 + }, + { + "Category": "Food", + "Y": 72.8, + "Size": 67.3 + }, + { + "Category": "Books", + "Y": 58.3, + "Size": 61.7 + }, + { + "Category": "Sports", + "Y": 61, + "Size": 84.5 + }, + { + "Category": "Electronics", + "Y": 21.8, + "Size": 81.1 + }, + { + "Category": "Clothing", + "Y": 27.9, + "Size": 99.3 + }, + { + "Category": "Food", + "Y": 38.3, + "Size": 5.2 + }, + { + "Category": "Books", + "Y": 95.7, + "Size": 86.8 + }, + { + "Category": "Sports", + "Y": 6, + "Size": 55.7 + }, + { + "Category": "Electronics", + "Y": 18.4, + "Size": 4.9 + }, + { + "Category": "Clothing", + "Y": 38.1, + "Size": 51.6 + }, + { + "Category": "Food", + "Y": 19.9, + "Size": 31.1 + }, + { + "Category": "Books", + "Y": 49.3, + "Size": 54.9 + }, + { + "Category": "Sports", + "Y": 71.3, + "Size": 78.1 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/17-card2.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/17-card2.flint.json new file mode 100644 index 00000000..1343e4ca --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/17-card2.flint.json @@ -0,0 +1,141 @@ +{ + "semantic_types": { + "Category": "Category", + "Y": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "Category", + "y": "Y" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Electronics", + "Y": 22.5 + }, + { + "Category": "Clothing", + "Y": 84.4 + }, + { + "Category": "Electronics", + "Y": 34.8 + }, + { + "Category": "Clothing", + "Y": 96.6 + }, + { + "Category": "Electronics", + "Y": 71.5 + }, + { + "Category": "Clothing", + "Y": 15.6 + }, + { + "Category": "Electronics", + "Y": 76.2 + }, + { + "Category": "Clothing", + "Y": 5.1 + }, + { + "Category": "Electronics", + "Y": 37.5 + }, + { + "Category": "Clothing", + "Y": 29.1 + }, + { + "Category": "Electronics", + "Y": 69.1 + }, + { + "Category": "Clothing", + "Y": 61.4 + }, + { + "Category": "Electronics", + "Y": 72.9 + }, + { + "Category": "Clothing", + "Y": 8.4 + }, + { + "Category": "Electronics", + "Y": 38.2 + }, + { + "Category": "Clothing", + "Y": 88.3 + }, + { + "Category": "Electronics", + "Y": 31.9 + }, + { + "Category": "Clothing", + "Y": 26.9 + }, + { + "Category": "Electronics", + "Y": 42.2 + }, + { + "Category": "Clothing", + "Y": 38.4 + }, + { + "Category": "Electronics", + "Y": 63.1 + }, + { + "Category": "Clothing", + "Y": 55 + }, + { + "Category": "Electronics", + "Y": 30.8 + }, + { + "Category": "Clothing", + "Y": 25.7 + }, + { + "Category": "Electronics", + "Y": 3.1 + }, + { + "Category": "Clothing", + "Y": 11.6 + }, + { + "Category": "Electronics", + "Y": 11.1 + }, + { + "Category": "Clothing", + "Y": 93.9 + }, + { + "Category": "Electronics", + "Y": 34.1 + }, + { + "Category": "Clothing", + "Y": 16.6 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/18-card60.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/18-card60.flint.json new file mode 100644 index 00000000..c00c3545 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/18-card60.flint.json @@ -0,0 +1,261 @@ +{ + "semantic_types": { + "Category": "Category", + "Y": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "Category", + "y": "Y" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "James Walker", + "Y": 66.2 + }, + { + "Category": "Paul Wilson", + "Y": 49.3 + }, + { + "Category": "Jessica Martin", + "Y": 28.5 + }, + { + "Category": "Christopher Moore", + "Y": 14.6 + }, + { + "Category": "Betty Wilson", + "Y": 7.2 + }, + { + "Category": "Steven Lewis", + "Y": 13.8 + }, + { + "Category": "Karen Lopez", + "Y": 41.6 + }, + { + "Category": "Sandra Wright", + "Y": 5.7 + }, + { + "Category": "Daniel King", + "Y": 1.8 + }, + { + "Category": "Mark Taylor", + "Y": 47.2 + }, + { + "Category": "Sandra Thomas", + "Y": 9.7 + }, + { + "Category": "Karen Rodriguez", + "Y": 52.1 + }, + { + "Category": "Patricia Jackson", + "Y": 6.5 + }, + { + "Category": "Donna Hill", + "Y": 44.4 + }, + { + "Category": "Donna White", + "Y": 25.8 + }, + { + "Category": "Michael Brown", + "Y": 15.9 + }, + { + "Category": "Elizabeth Robinson", + "Y": 42.9 + }, + { + "Category": "Mary Jones", + "Y": 97.9 + }, + { + "Category": "Richard Rodriguez", + "Y": 7 + }, + { + "Category": "Christopher Clark", + "Y": 63.1 + }, + { + "Category": "Christopher Lopez", + "Y": 33.8 + }, + { + "Category": "Susan Ramirez", + "Y": 43.1 + }, + { + "Category": "Steven Wilson", + "Y": 84.9 + }, + { + "Category": "Paul Anderson", + "Y": 24 + }, + { + "Category": "Joseph Rodriguez", + "Y": 11.9 + }, + { + "Category": "Elizabeth Wright", + "Y": 52.7 + }, + { + "Category": "Kimberly Jackson", + "Y": 75.2 + }, + { + "Category": "Betty Hernandez", + "Y": 77.4 + }, + { + "Category": "David King", + "Y": 22.3 + }, + { + "Category": "Matthew Lopez", + "Y": 60.1 + }, + { + "Category": "Susan Hernandez", + "Y": 37.8 + }, + { + "Category": "Jennifer Lee", + "Y": 15 + }, + { + "Category": "Richard Flores", + "Y": 48.9 + }, + { + "Category": "John Anderson", + "Y": 41.7 + }, + { + "Category": "Kimberly Wright", + "Y": 98.3 + }, + { + "Category": "Joseph Williams", + "Y": 72.2 + }, + { + "Category": "Lisa Torres", + "Y": 84.5 + }, + { + "Category": "Andrew Rodriguez", + "Y": 74.5 + }, + { + "Category": "Karen Johnson", + "Y": 61.1 + }, + { + "Category": "Steven Jones", + "Y": 87.5 + }, + { + "Category": "Joshua Ramirez", + "Y": 36.7 + }, + { + "Category": "Emily Martinez", + "Y": 15.9 + }, + { + "Category": "Robert Walker", + "Y": 4.8 + }, + { + "Category": "Robert Lewis", + "Y": 77.9 + }, + { + "Category": "Sandra Lopez", + "Y": 44.7 + }, + { + "Category": "Nancy Miller", + "Y": 57.8 + }, + { + "Category": "Christopher Sanchez", + "Y": 27.8 + }, + { + "Category": "Daniel Flores", + "Y": 39.7 + }, + { + "Category": "Mary Walker", + "Y": 84.4 + }, + { + "Category": "Anthony Ramirez", + "Y": 34.1 + }, + { + "Category": "Anthony Hill", + "Y": 32.8 + }, + { + "Category": "Matthew Miller", + "Y": 61.3 + }, + { + "Category": "Andrew King", + "Y": 25.1 + }, + { + "Category": "William Perez", + "Y": 86.2 + }, + { + "Category": "William Martinez", + "Y": 79.4 + }, + { + "Category": "Margaret Garcia", + "Y": 14.3 + }, + { + "Category": "Barbara Anderson", + "Y": 38.2 + }, + { + "Category": "Thomas Smith", + "Y": 76.2 + }, + { + "Category": "Kimberly Thomas", + "Y": 0.2 + }, + { + "Category": "Karen Garcia", + "Y": 65.1 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/19-card24.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/19-card24.flint.json new file mode 100644 index 00000000..a85cf9f4 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/19-card24.flint.json @@ -0,0 +1,148 @@ +{ + "semantic_types": { + "X": "Quantity", + "Group": "Category", + "ColorVal": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Group", + "color": "ColorVal" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 65.4, + "Group": "Electronics", + "ColorVal": 92.7 + }, + { + "X": 41.2, + "Group": "Clothing", + "ColorVal": 65.7 + }, + { + "X": 65.6, + "Group": "Food", + "ColorVal": 66.2 + }, + { + "X": 1.3, + "Group": "Books", + "ColorVal": 80.2 + }, + { + "X": 19.4, + "Group": "Sports", + "ColorVal": 91.7 + }, + { + "X": 55.6, + "Group": "Electronics", + "ColorVal": 64.7 + }, + { + "X": 72.6, + "Group": "Clothing", + "ColorVal": 66.4 + }, + { + "X": 25.5, + "Group": "Food", + "ColorVal": 51.3 + }, + { + "X": 15.8, + "Group": "Books", + "ColorVal": 39.9 + }, + { + "X": 2.4, + "Group": "Sports", + "ColorVal": 85.4 + }, + { + "X": 65.8, + "Group": "Electronics", + "ColorVal": 55.2 + }, + { + "X": 92.4, + "Group": "Clothing", + "ColorVal": 6 + }, + { + "X": 40, + "Group": "Food", + "ColorVal": 29.5 + }, + { + "X": 13.6, + "Group": "Books", + "ColorVal": 83.9 + }, + { + "X": 87.1, + "Group": "Sports", + "ColorVal": 36.7 + }, + { + "X": 47, + "Group": "Electronics", + "ColorVal": 52.7 + }, + { + "X": 76.5, + "Group": "Clothing", + "ColorVal": 38.9 + }, + { + "X": 75.2, + "Group": "Food", + "ColorVal": 30.6 + }, + { + "X": 8.2, + "Group": "Books", + "ColorVal": 38 + }, + { + "X": 46.5, + "Group": "Sports", + "ColorVal": 48.7 + }, + { + "X": 78.7, + "Group": "Electronics", + "ColorVal": 70 + }, + { + "X": 79.9, + "Group": "Clothing", + "ColorVal": 75.3 + }, + { + "X": 25.2, + "Group": "Food", + "ColorVal": 64.7 + }, + { + "X": 25.2, + "Group": "Books", + "ColorVal": 64.9 + }, + { + "X": 0.1, + "Group": "Sports", + "ColorVal": 86.6 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/20-card23.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/20-card23.flint.json new file mode 100644 index 00000000..6005dc74 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/20-card23.flint.json @@ -0,0 +1,148 @@ +{ + "semantic_types": { + "X": "Quantity", + "Group": "Category", + "Size": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Group", + "size": "Size" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 25.4, + "Group": "Electronics", + "Size": 20.9 + }, + { + "X": 0.4, + "Group": "Clothing", + "Size": 91 + }, + { + "X": 10.4, + "Group": "Food", + "Size": 8.3 + }, + { + "X": 81.2, + "Group": "Books", + "Size": 39.2 + }, + { + "X": 59.1, + "Group": "Sports", + "Size": 52.4 + }, + { + "X": 99.3, + "Group": "Electronics", + "Size": 16.7 + }, + { + "X": 92.7, + "Group": "Clothing", + "Size": 49.9 + }, + { + "X": 17.2, + "Group": "Food", + "Size": 34 + }, + { + "X": 99.3, + "Group": "Books", + "Size": 92.6 + }, + { + "X": 89.8, + "Group": "Sports", + "Size": 55.5 + }, + { + "X": 41.9, + "Group": "Electronics", + "Size": 73.8 + }, + { + "X": 97.9, + "Group": "Clothing", + "Size": 13.7 + }, + { + "X": 71.6, + "Group": "Food", + "Size": 62.1 + }, + { + "X": 13.8, + "Group": "Books", + "Size": 21.3 + }, + { + "X": 50.5, + "Group": "Sports", + "Size": 66.6 + }, + { + "X": 86.2, + "Group": "Electronics", + "Size": 41.2 + }, + { + "X": 19.9, + "Group": "Clothing", + "Size": 54.3 + }, + { + "X": 24.1, + "Group": "Food", + "Size": 19.6 + }, + { + "X": 40.9, + "Group": "Books", + "Size": 61.4 + }, + { + "X": 0.4, + "Group": "Sports", + "Size": 7.6 + }, + { + "X": 5.4, + "Group": "Electronics", + "Size": 25.4 + }, + { + "X": 4.7, + "Group": "Clothing", + "Size": 52.8 + }, + { + "X": 56.7, + "Group": "Food", + "Size": 72.3 + }, + { + "X": 76.2, + "Group": "Books", + "Size": 28.8 + }, + { + "X": 21.1, + "Group": "Sports", + "Size": 63.5 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/21-card59.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/21-card59.flint.json new file mode 100644 index 00000000..3257df90 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/21-card59.flint.json @@ -0,0 +1,261 @@ +{ + "semantic_types": { + "X": "Quantity", + "Group": "Category" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Group" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 95.1, + "Group": "James Walker" + }, + { + "X": 67.9, + "Group": "Paul Wilson" + }, + { + "X": 28.4, + "Group": "Jessica Martin" + }, + { + "X": 42.2, + "Group": "Christopher Moore" + }, + { + "X": 50.4, + "Group": "Betty Wilson" + }, + { + "X": 97.7, + "Group": "Steven Lewis" + }, + { + "X": 35.8, + "Group": "Karen Lopez" + }, + { + "X": 25.8, + "Group": "Sandra Wright" + }, + { + "X": 46.5, + "Group": "Daniel King" + }, + { + "X": 89.6, + "Group": "Mark Taylor" + }, + { + "X": 82.7, + "Group": "Sandra Thomas" + }, + { + "X": 99.5, + "Group": "Karen Rodriguez" + }, + { + "X": 54.1, + "Group": "Patricia Jackson" + }, + { + "X": 77.1, + "Group": "Donna Hill" + }, + { + "X": 97.7, + "Group": "Donna White" + }, + { + "X": 24, + "Group": "Michael Brown" + }, + { + "X": 27.4, + "Group": "Elizabeth Robinson" + }, + { + "X": 43.3, + "Group": "Mary Jones" + }, + { + "X": 58.5, + "Group": "Richard Rodriguez" + }, + { + "X": 11.1, + "Group": "Christopher Clark" + }, + { + "X": 18.3, + "Group": "Christopher Lopez" + }, + { + "X": 65.6, + "Group": "Susan Ramirez" + }, + { + "X": 24.3, + "Group": "Steven Wilson" + }, + { + "X": 13.9, + "Group": "Paul Anderson" + }, + { + "X": 31.7, + "Group": "Joseph Rodriguez" + }, + { + "X": 8.9, + "Group": "Elizabeth Wright" + }, + { + "X": 88.6, + "Group": "Kimberly Jackson" + }, + { + "X": 33.6, + "Group": "Betty Hernandez" + }, + { + "X": 46.4, + "Group": "David King" + }, + { + "X": 6.7, + "Group": "Matthew Lopez" + }, + { + "X": 1.1, + "Group": "Susan Hernandez" + }, + { + "X": 51.1, + "Group": "Jennifer Lee" + }, + { + "X": 41, + "Group": "Richard Flores" + }, + { + "X": 38.5, + "Group": "John Anderson" + }, + { + "X": 15.9, + "Group": "Kimberly Wright" + }, + { + "X": 71.2, + "Group": "Joseph Williams" + }, + { + "X": 74.3, + "Group": "Lisa Torres" + }, + { + "X": 55.1, + "Group": "Andrew Rodriguez" + }, + { + "X": 6.9, + "Group": "Karen Johnson" + }, + { + "X": 32.9, + "Group": "Steven Jones" + }, + { + "X": 28.1, + "Group": "Joshua Ramirez" + }, + { + "X": 3.8, + "Group": "Emily Martinez" + }, + { + "X": 25.1, + "Group": "Robert Walker" + }, + { + "X": 31, + "Group": "Robert Lewis" + }, + { + "X": 29.8, + "Group": "Sandra Lopez" + }, + { + "X": 92, + "Group": "Nancy Miller" + }, + { + "X": 10.6, + "Group": "Christopher Sanchez" + }, + { + "X": 87.9, + "Group": "Daniel Flores" + }, + { + "X": 80.4, + "Group": "Mary Walker" + }, + { + "X": 22.1, + "Group": "Anthony Ramirez" + }, + { + "X": 24.8, + "Group": "Anthony Hill" + }, + { + "X": 92.2, + "Group": "Matthew Miller" + }, + { + "X": 9.2, + "Group": "Andrew King" + }, + { + "X": 41.4, + "Group": "William Perez" + }, + { + "X": 10.3, + "Group": "William Martinez" + }, + { + "X": 37.4, + "Group": "Margaret Garcia" + }, + { + "X": 74.4, + "Group": "Barbara Anderson" + }, + { + "X": 94.8, + "Group": "Thomas Smith" + }, + { + "X": 47.2, + "Group": "Kimberly Thomas" + }, + { + "X": 37.6, + "Group": "Karen Garcia" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/22-card5.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/22-card5.flint.json new file mode 100644 index 00000000..001853dc --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/22-card5.flint.json @@ -0,0 +1,123 @@ +{ + "semantic_types": { + "Category": "Category", + "Group": "Category", + "Size": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "Category", + "y": "Group", + "size": "Size" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Electronics", + "Group": "China", + "Size": 681 + }, + { + "Category": "Electronics", + "Group": "Japan", + "Size": 802 + }, + { + "Category": "Electronics", + "Group": "Germany", + "Size": 852 + }, + { + "Category": "Electronics", + "Group": "UK", + "Size": 860 + }, + { + "Category": "Clothing", + "Group": "USA", + "Size": 510 + }, + { + "Category": "Clothing", + "Group": "China", + "Size": 508 + }, + { + "Category": "Clothing", + "Group": "Japan", + "Size": 778 + }, + { + "Category": "Clothing", + "Group": "Germany", + "Size": 908 + }, + { + "Category": "Clothing", + "Group": "UK", + "Size": 189 + }, + { + "Category": "Clothing", + "Group": "France", + "Size": 744 + }, + { + "Category": "Food", + "Group": "Japan", + "Size": 728 + }, + { + "Category": "Food", + "Group": "Germany", + "Size": 472 + }, + { + "Category": "Food", + "Group": "UK", + "Size": 343 + }, + { + "Category": "Books", + "Group": "USA", + "Size": 296 + }, + { + "Category": "Books", + "Group": "Germany", + "Size": 324 + }, + { + "Category": "Books", + "Group": "UK", + "Size": 510 + }, + { + "Category": "Books", + "Group": "France", + "Size": 898 + }, + { + "Category": "Sports", + "Group": "China", + "Size": 238 + }, + { + "Category": "Sports", + "Group": "Japan", + "Size": 160 + }, + { + "Category": "Sports", + "Group": "France", + "Size": 996 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/23-card4.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/23-card4.flint.json new file mode 100644 index 00000000..ffc4e3e8 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/23-card4.flint.json @@ -0,0 +1,78 @@ +{ + "semantic_types": { + "Category": "Category", + "Group": "Category", + "ColorVal": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "Category", + "y": "Group", + "color": "ColorVal" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Electronics", + "Group": "USA", + "ColorVal": 948 + }, + { + "Category": "Electronics", + "Group": "Japan", + "ColorVal": 109 + }, + { + "Category": "Clothing", + "Group": "China", + "ColorVal": 459 + }, + { + "Category": "Clothing", + "Group": "Japan", + "ColorVal": 385 + }, + { + "Category": "Clothing", + "Group": "Germany", + "ColorVal": 901 + }, + { + "Category": "Books", + "Group": "USA", + "ColorVal": 974 + }, + { + "Category": "Books", + "Group": "China", + "ColorVal": 678 + }, + { + "Category": "Books", + "Group": "Japan", + "ColorVal": 193 + }, + { + "Category": "Books", + "Group": "Germany", + "ColorVal": 992 + }, + { + "Category": "Sports", + "Group": "USA", + "ColorVal": 892 + }, + { + "Category": "Sports", + "Group": "Germany", + "ColorVal": 776 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/24-card15.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/24-card15.flint.json new file mode 100644 index 00000000..f36b61a9 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/24-card15.flint.json @@ -0,0 +1,688 @@ +{ + "semantic_types": { + "Category": "Category", + "Group": "Category", + "Size": "Quantity" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "Category", + "y": "Group", + "size": "Size" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Electronics", + "Group": "USA", + "Size": 877 + }, + { + "Category": "Electronics", + "Group": "Japan", + "Size": 702 + }, + { + "Category": "Electronics", + "Group": "Germany", + "Size": 376 + }, + { + "Category": "Electronics", + "Group": "UK", + "Size": 465 + }, + { + "Category": "Electronics", + "Group": "France", + "Size": 239 + }, + { + "Category": "Electronics", + "Group": "Brazil", + "Size": 372 + }, + { + "Category": "Electronics", + "Group": "Australia", + "Size": 565 + }, + { + "Category": "Electronics", + "Group": "Mexico", + "Size": 587 + }, + { + "Category": "Clothing", + "Group": "USA", + "Size": 325 + }, + { + "Category": "Clothing", + "Group": "China", + "Size": 251 + }, + { + "Category": "Clothing", + "Group": "Japan", + "Size": 529 + }, + { + "Category": "Clothing", + "Group": "France", + "Size": 558 + }, + { + "Category": "Clothing", + "Group": "India", + "Size": 681 + }, + { + "Category": "Clothing", + "Group": "Brazil", + "Size": 327 + }, + { + "Category": "Clothing", + "Group": "Canada", + "Size": 484 + }, + { + "Category": "Clothing", + "Group": "Australia", + "Size": 815 + }, + { + "Category": "Clothing", + "Group": "South Korea", + "Size": 856 + }, + { + "Category": "Clothing", + "Group": "Mexico", + "Size": 152 + }, + { + "Category": "Food", + "Group": "USA", + "Size": 188 + }, + { + "Category": "Food", + "Group": "Japan", + "Size": 970 + }, + { + "Category": "Food", + "Group": "Australia", + "Size": 457 + }, + { + "Category": "Food", + "Group": "South Korea", + "Size": 263 + }, + { + "Category": "Food", + "Group": "Mexico", + "Size": 634 + }, + { + "Category": "Books", + "Group": "USA", + "Size": 760 + }, + { + "Category": "Books", + "Group": "China", + "Size": 207 + }, + { + "Category": "Books", + "Group": "Japan", + "Size": 691 + }, + { + "Category": "Books", + "Group": "Germany", + "Size": 515 + }, + { + "Category": "Books", + "Group": "UK", + "Size": 668 + }, + { + "Category": "Books", + "Group": "France", + "Size": 401 + }, + { + "Category": "Books", + "Group": "Brazil", + "Size": 506 + }, + { + "Category": "Books", + "Group": "Canada", + "Size": 682 + }, + { + "Category": "Books", + "Group": "Australia", + "Size": 220 + }, + { + "Category": "Books", + "Group": "South Korea", + "Size": 118 + }, + { + "Category": "Books", + "Group": "Mexico", + "Size": 205 + }, + { + "Category": "Sports", + "Group": "USA", + "Size": 788 + }, + { + "Category": "Sports", + "Group": "China", + "Size": 694 + }, + { + "Category": "Sports", + "Group": "Japan", + "Size": 323 + }, + { + "Category": "Sports", + "Group": "Germany", + "Size": 442 + }, + { + "Category": "Sports", + "Group": "UK", + "Size": 181 + }, + { + "Category": "Sports", + "Group": "India", + "Size": 301 + }, + { + "Category": "Sports", + "Group": "Brazil", + "Size": 960 + }, + { + "Category": "Sports", + "Group": "Canada", + "Size": 613 + }, + { + "Category": "Sports", + "Group": "Australia", + "Size": 949 + }, + { + "Category": "Sports", + "Group": "South Korea", + "Size": 940 + }, + { + "Category": "Sports", + "Group": "Mexico", + "Size": 549 + }, + { + "Category": "Home", + "Group": "China", + "Size": 311 + }, + { + "Category": "Home", + "Group": "UK", + "Size": 523 + }, + { + "Category": "Home", + "Group": "France", + "Size": 482 + }, + { + "Category": "Home", + "Group": "Canada", + "Size": 501 + }, + { + "Category": "Home", + "Group": "Australia", + "Size": 501 + }, + { + "Category": "Home", + "Group": "South Korea", + "Size": 535 + }, + { + "Category": "Home", + "Group": "Mexico", + "Size": 804 + }, + { + "Category": "Garden", + "Group": "China", + "Size": 142 + }, + { + "Category": "Garden", + "Group": "Japan", + "Size": 250 + }, + { + "Category": "Garden", + "Group": "Germany", + "Size": 392 + }, + { + "Category": "Garden", + "Group": "UK", + "Size": 158 + }, + { + "Category": "Garden", + "Group": "Canada", + "Size": 343 + }, + { + "Category": "Garden", + "Group": "Australia", + "Size": 193 + }, + { + "Category": "Garden", + "Group": "South Korea", + "Size": 815 + }, + { + "Category": "Garden", + "Group": "Mexico", + "Size": 324 + }, + { + "Category": "Auto", + "Group": "USA", + "Size": 167 + }, + { + "Category": "Auto", + "Group": "China", + "Size": 355 + }, + { + "Category": "Auto", + "Group": "Germany", + "Size": 742 + }, + { + "Category": "Auto", + "Group": "UK", + "Size": 163 + }, + { + "Category": "Auto", + "Group": "France", + "Size": 524 + }, + { + "Category": "Auto", + "Group": "India", + "Size": 912 + }, + { + "Category": "Auto", + "Group": "Brazil", + "Size": 376 + }, + { + "Category": "Auto", + "Group": "Canada", + "Size": 984 + }, + { + "Category": "Auto", + "Group": "South Korea", + "Size": 668 + }, + { + "Category": "Health", + "Group": "China", + "Size": 192 + }, + { + "Category": "Health", + "Group": "Germany", + "Size": 465 + }, + { + "Category": "Health", + "Group": "UK", + "Size": 639 + }, + { + "Category": "Health", + "Group": "France", + "Size": 797 + }, + { + "Category": "Health", + "Group": "Brazil", + "Size": 230 + }, + { + "Category": "Health", + "Group": "Canada", + "Size": 696 + }, + { + "Category": "Health", + "Group": "Australia", + "Size": 314 + }, + { + "Category": "Health", + "Group": "Mexico", + "Size": 770 + }, + { + "Category": "Beauty", + "Group": "USA", + "Size": 326 + }, + { + "Category": "Beauty", + "Group": "Japan", + "Size": 393 + }, + { + "Category": "Beauty", + "Group": "UK", + "Size": 739 + }, + { + "Category": "Beauty", + "Group": "France", + "Size": 109 + }, + { + "Category": "Beauty", + "Group": "Brazil", + "Size": 600 + }, + { + "Category": "Beauty", + "Group": "Canada", + "Size": 640 + }, + { + "Category": "Beauty", + "Group": "Australia", + "Size": 170 + }, + { + "Category": "Beauty", + "Group": "South Korea", + "Size": 912 + }, + { + "Category": "Beauty", + "Group": "Mexico", + "Size": 341 + }, + { + "Category": "Toys", + "Group": "USA", + "Size": 886 + }, + { + "Category": "Toys", + "Group": "China", + "Size": 683 + }, + { + "Category": "Toys", + "Group": "UK", + "Size": 513 + }, + { + "Category": "Toys", + "Group": "India", + "Size": 319 + }, + { + "Category": "Toys", + "Group": "Brazil", + "Size": 396 + }, + { + "Category": "Toys", + "Group": "Canada", + "Size": 722 + }, + { + "Category": "Toys", + "Group": "Australia", + "Size": 910 + }, + { + "Category": "Music", + "Group": "USA", + "Size": 820 + }, + { + "Category": "Music", + "Group": "China", + "Size": 674 + }, + { + "Category": "Music", + "Group": "Japan", + "Size": 568 + }, + { + "Category": "Music", + "Group": "Germany", + "Size": 990 + }, + { + "Category": "Music", + "Group": "UK", + "Size": 885 + }, + { + "Category": "Music", + "Group": "India", + "Size": 625 + }, + { + "Category": "Music", + "Group": "Brazil", + "Size": 682 + }, + { + "Category": "Music", + "Group": "Canada", + "Size": 185 + }, + { + "Category": "Music", + "Group": "Australia", + "Size": 109 + }, + { + "Category": "Music", + "Group": "Mexico", + "Size": 663 + }, + { + "Category": "Movies", + "Group": "USA", + "Size": 420 + }, + { + "Category": "Movies", + "Group": "China", + "Size": 203 + }, + { + "Category": "Movies", + "Group": "Japan", + "Size": 735 + }, + { + "Category": "Movies", + "Group": "Germany", + "Size": 508 + }, + { + "Category": "Movies", + "Group": "UK", + "Size": 385 + }, + { + "Category": "Movies", + "Group": "France", + "Size": 160 + }, + { + "Category": "Movies", + "Group": "India", + "Size": 340 + }, + { + "Category": "Movies", + "Group": "Brazil", + "Size": 706 + }, + { + "Category": "Movies", + "Group": "Canada", + "Size": 520 + }, + { + "Category": "Movies", + "Group": "Australia", + "Size": 817 + }, + { + "Category": "Movies", + "Group": "South Korea", + "Size": 527 + }, + { + "Category": "Movies", + "Group": "Mexico", + "Size": 433 + }, + { + "Category": "Software", + "Group": "USA", + "Size": 376 + }, + { + "Category": "Software", + "Group": "Germany", + "Size": 375 + }, + { + "Category": "Software", + "Group": "UK", + "Size": 998 + }, + { + "Category": "Software", + "Group": "France", + "Size": 662 + }, + { + "Category": "Software", + "Group": "India", + "Size": 974 + }, + { + "Category": "Software", + "Group": "Brazil", + "Size": 245 + }, + { + "Category": "Software", + "Group": "Canada", + "Size": 564 + }, + { + "Category": "Software", + "Group": "Australia", + "Size": 761 + }, + { + "Category": "Software", + "Group": "South Korea", + "Size": 518 + }, + { + "Category": "Games", + "Group": "China", + "Size": 922 + }, + { + "Category": "Games", + "Group": "Japan", + "Size": 637 + }, + { + "Category": "Games", + "Group": "Germany", + "Size": 619 + }, + { + "Category": "Games", + "Group": "UK", + "Size": 335 + }, + { + "Category": "Games", + "Group": "France", + "Size": 311 + }, + { + "Category": "Games", + "Group": "India", + "Size": 501 + }, + { + "Category": "Games", + "Group": "Brazil", + "Size": 364 + }, + { + "Category": "Games", + "Group": "Australia", + "Size": 280 + }, + { + "Category": "Games", + "Group": "South Korea", + "Size": 289 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/scatter-plot/25-card40.flint.json b/test-harness/excel/evaluations/inputs/scatter-plot/25-card40.flint.json new file mode 100644 index 00000000..0e40a8ea --- /dev/null +++ b/test-harness/excel/evaluations/inputs/scatter-plot/25-card40.flint.json @@ -0,0 +1,223 @@ +{ + "semantic_types": { + "X": "Quantity", + "Y": "Quantity", + "Group": "Category" + }, + "chart_spec": { + "chartType": "Scatter Plot", + "encodings": { + "x": "X", + "y": "Y", + "shape": "Group" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 77.2, + "Y": 46.1, + "Group": "Electronics" + }, + { + "X": 71, + "Y": 32.1, + "Group": "Clothing" + }, + { + "X": 92.6, + "Y": 10.1, + "Group": "Food" + }, + { + "X": 0.5, + "Y": 1.9, + "Group": "Books" + }, + { + "X": 66.1, + "Y": 66.1, + "Group": "Electronics" + }, + { + "X": 6.4, + "Y": 60, + "Group": "Clothing" + }, + { + "X": 15.8, + "Y": 69.4, + "Group": "Food" + }, + { + "X": 2.1, + "Y": 21.6, + "Group": "Books" + }, + { + "X": 66.5, + "Y": 60.8, + "Group": "Electronics" + }, + { + "X": 61.3, + "Y": 61.1, + "Group": "Clothing" + }, + { + "X": 1.9, + "Y": 3, + "Group": "Food" + }, + { + "X": 54.3, + "Y": 65.6, + "Group": "Books" + }, + { + "X": 48, + "Y": 82.6, + "Group": "Electronics" + }, + { + "X": 45.7, + "Y": 7.7, + "Group": "Clothing" + }, + { + "X": 8, + "Y": 95, + "Group": "Food" + }, + { + "X": 35.3, + "Y": 90.8, + "Group": "Books" + }, + { + "X": 40.1, + "Y": 16.6, + "Group": "Electronics" + }, + { + "X": 78.6, + "Y": 59.4, + "Group": "Clothing" + }, + { + "X": 58.1, + "Y": 91, + "Group": "Food" + }, + { + "X": 74.3, + "Y": 19.9, + "Group": "Books" + }, + { + "X": 81, + "Y": 33.7, + "Group": "Electronics" + }, + { + "X": 91.1, + "Y": 32.1, + "Group": "Clothing" + }, + { + "X": 53.7, + "Y": 93.8, + "Group": "Food" + }, + { + "X": 98.2, + "Y": 10.6, + "Group": "Books" + }, + { + "X": 96.2, + "Y": 25.6, + "Group": "Electronics" + }, + { + "X": 94.2, + "Y": 37.3, + "Group": "Clothing" + }, + { + "X": 66.2, + "Y": 85.8, + "Group": "Food" + }, + { + "X": 33.9, + "Y": 33.4, + "Group": "Books" + }, + { + "X": 97.3, + "Y": 93.5, + "Group": "Electronics" + }, + { + "X": 89.1, + "Y": 26.5, + "Group": "Clothing" + }, + { + "X": 94.7, + "Y": 53.5, + "Group": "Food" + }, + { + "X": 10.8, + "Y": 44.1, + "Group": "Books" + }, + { + "X": 16.4, + "Y": 49.8, + "Group": "Electronics" + }, + { + "X": 73.6, + "Y": 66.3, + "Group": "Clothing" + }, + { + "X": 17.6, + "Y": 5.7, + "Group": "Food" + }, + { + "X": 12.2, + "Y": 52, + "Group": "Books" + }, + { + "X": 92.7, + "Y": 39.5, + "Group": "Electronics" + }, + { + "X": 61.5, + "Y": 70, + "Group": "Clothing" + }, + { + "X": 60.8, + "Y": 59.7, + "Group": "Food" + }, + { + "X": 23.7, + "Y": 10.9, + "Group": "Books" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/stacked-bar-chart/00-card4.flint.json b/test-harness/excel/evaluations/inputs/stacked-bar-chart/00-card4.flint.json new file mode 100644 index 00000000..a89a6522 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/stacked-bar-chart/00-card4.flint.json @@ -0,0 +1,83 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Stacked Bar Chart", + "encodings": { + "x": "Category", + "y": "Value", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Value": 12, + "Segment": "USA" + }, + { + "Category": "Laptop", + "Value": 314, + "Segment": "China" + }, + { + "Category": "Laptop", + "Value": 130, + "Segment": "Japan" + }, + { + "Category": "Phone", + "Value": 733, + "Segment": "USA" + }, + { + "Category": "Phone", + "Value": 558, + "Segment": "China" + }, + { + "Category": "Phone", + "Value": 794, + "Segment": "Japan" + }, + { + "Category": "Tablet", + "Value": 415, + "Segment": "USA" + }, + { + "Category": "Tablet", + "Value": 775, + "Segment": "China" + }, + { + "Category": "Tablet", + "Value": 861, + "Segment": "Japan" + }, + { + "Category": "Desktop", + "Value": 939, + "Segment": "USA" + }, + { + "Category": "Desktop", + "Value": 703, + "Segment": "China" + }, + { + "Category": "Desktop", + "Value": 884, + "Segment": "Japan" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/stacked-bar-chart/01-card15.flint.json b/test-harness/excel/evaluations/inputs/stacked-bar-chart/01-card15.flint.json new file mode 100644 index 00000000..2fce7d56 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/stacked-bar-chart/01-card15.flint.json @@ -0,0 +1,398 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Stacked Bar Chart", + "encodings": { + "x": "Category", + "y": "Value", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Value": 201, + "Segment": "USA" + }, + { + "Category": "Laptop", + "Value": 915, + "Segment": "China" + }, + { + "Category": "Laptop", + "Value": 695, + "Segment": "Japan" + }, + { + "Category": "Laptop", + "Value": 941, + "Segment": "Germany" + }, + { + "Category": "Laptop", + "Value": 238, + "Segment": "UK" + }, + { + "Category": "Phone", + "Value": 544, + "Segment": "USA" + }, + { + "Category": "Phone", + "Value": 686, + "Segment": "China" + }, + { + "Category": "Phone", + "Value": 375, + "Segment": "Japan" + }, + { + "Category": "Phone", + "Value": 502, + "Segment": "Germany" + }, + { + "Category": "Phone", + "Value": 361, + "Segment": "UK" + }, + { + "Category": "Tablet", + "Value": 797, + "Segment": "USA" + }, + { + "Category": "Tablet", + "Value": 96, + "Segment": "China" + }, + { + "Category": "Tablet", + "Value": 241, + "Segment": "Japan" + }, + { + "Category": "Tablet", + "Value": 392, + "Segment": "Germany" + }, + { + "Category": "Tablet", + "Value": 399, + "Segment": "UK" + }, + { + "Category": "Desktop", + "Value": 786, + "Segment": "USA" + }, + { + "Category": "Desktop", + "Value": 208, + "Segment": "China" + }, + { + "Category": "Desktop", + "Value": 246, + "Segment": "Japan" + }, + { + "Category": "Desktop", + "Value": 74, + "Segment": "Germany" + }, + { + "Category": "Desktop", + "Value": 445, + "Segment": "UK" + }, + { + "Category": "Monitor", + "Value": 496, + "Segment": "USA" + }, + { + "Category": "Monitor", + "Value": 498, + "Segment": "China" + }, + { + "Category": "Monitor", + "Value": 224, + "Segment": "Japan" + }, + { + "Category": "Monitor", + "Value": 650, + "Segment": "Germany" + }, + { + "Category": "Monitor", + "Value": 532, + "Segment": "UK" + }, + { + "Category": "Keyboard", + "Value": 289, + "Segment": "USA" + }, + { + "Category": "Keyboard", + "Value": 215, + "Segment": "China" + }, + { + "Category": "Keyboard", + "Value": 77, + "Segment": "Japan" + }, + { + "Category": "Keyboard", + "Value": 414, + "Segment": "Germany" + }, + { + "Category": "Keyboard", + "Value": 515, + "Segment": "UK" + }, + { + "Category": "Mouse", + "Value": 537, + "Segment": "USA" + }, + { + "Category": "Mouse", + "Value": 674, + "Segment": "China" + }, + { + "Category": "Mouse", + "Value": 311, + "Segment": "Japan" + }, + { + "Category": "Mouse", + "Value": 542, + "Segment": "Germany" + }, + { + "Category": "Mouse", + "Value": 334, + "Segment": "UK" + }, + { + "Category": "Headphones", + "Value": 942, + "Segment": "USA" + }, + { + "Category": "Headphones", + "Value": 547, + "Segment": "China" + }, + { + "Category": "Headphones", + "Value": 289, + "Segment": "Japan" + }, + { + "Category": "Headphones", + "Value": 306, + "Segment": "Germany" + }, + { + "Category": "Headphones", + "Value": 551, + "Segment": "UK" + }, + { + "Category": "Speaker", + "Value": 559, + "Segment": "USA" + }, + { + "Category": "Speaker", + "Value": 982, + "Segment": "China" + }, + { + "Category": "Speaker", + "Value": 854, + "Segment": "Japan" + }, + { + "Category": "Speaker", + "Value": 308, + "Segment": "Germany" + }, + { + "Category": "Speaker", + "Value": 310, + "Segment": "UK" + }, + { + "Category": "Camera", + "Value": 536, + "Segment": "USA" + }, + { + "Category": "Camera", + "Value": 843, + "Segment": "China" + }, + { + "Category": "Camera", + "Value": 122, + "Segment": "Japan" + }, + { + "Category": "Camera", + "Value": 931, + "Segment": "Germany" + }, + { + "Category": "Camera", + "Value": 906, + "Segment": "UK" + }, + { + "Category": "TV", + "Value": 266, + "Segment": "USA" + }, + { + "Category": "TV", + "Value": 809, + "Segment": "China" + }, + { + "Category": "TV", + "Value": 335, + "Segment": "Japan" + }, + { + "Category": "TV", + "Value": 797, + "Segment": "Germany" + }, + { + "Category": "TV", + "Value": 237, + "Segment": "UK" + }, + { + "Category": "Router", + "Value": 155, + "Segment": "USA" + }, + { + "Category": "Router", + "Value": 557, + "Segment": "China" + }, + { + "Category": "Router", + "Value": 752, + "Segment": "Japan" + }, + { + "Category": "Router", + "Value": 150, + "Segment": "Germany" + }, + { + "Category": "Router", + "Value": 830, + "Segment": "UK" + }, + { + "Category": "Printer", + "Value": 422, + "Segment": "USA" + }, + { + "Category": "Printer", + "Value": 766, + "Segment": "China" + }, + { + "Category": "Printer", + "Value": 950, + "Segment": "Japan" + }, + { + "Category": "Printer", + "Value": 890, + "Segment": "Germany" + }, + { + "Category": "Printer", + "Value": 204, + "Segment": "UK" + }, + { + "Category": "Scanner", + "Value": 27, + "Segment": "USA" + }, + { + "Category": "Scanner", + "Value": 310, + "Segment": "China" + }, + { + "Category": "Scanner", + "Value": 51, + "Segment": "Japan" + }, + { + "Category": "Scanner", + "Value": 568, + "Segment": "Germany" + }, + { + "Category": "Scanner", + "Value": 82, + "Segment": "UK" + }, + { + "Category": "SSD", + "Value": 182, + "Segment": "USA" + }, + { + "Category": "SSD", + "Value": 694, + "Segment": "China" + }, + { + "Category": "SSD", + "Value": 653, + "Segment": "Japan" + }, + { + "Category": "SSD", + "Value": 910, + "Segment": "Germany" + }, + { + "Category": "SSD", + "Value": 252, + "Segment": "UK" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/stacked-bar-chart/02-card80.flint.json b/test-harness/excel/evaluations/inputs/stacked-bar-chart/02-card80.flint.json new file mode 100644 index 00000000..dc732429 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/stacked-bar-chart/02-card80.flint.json @@ -0,0 +1,1223 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Stacked Bar Chart", + "encodings": { + "x": "Category", + "y": "Value", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "James Walker", + "Value": 92, + "Segment": "USA" + }, + { + "Category": "James Walker", + "Value": 893, + "Segment": "China" + }, + { + "Category": "James Walker", + "Value": 717, + "Segment": "Japan" + }, + { + "Category": "Paul Wilson", + "Value": 643, + "Segment": "USA" + }, + { + "Category": "Paul Wilson", + "Value": 272, + "Segment": "China" + }, + { + "Category": "Paul Wilson", + "Value": 211, + "Segment": "Japan" + }, + { + "Category": "Jessica Martin", + "Value": 658, + "Segment": "USA" + }, + { + "Category": "Jessica Martin", + "Value": 230, + "Segment": "China" + }, + { + "Category": "Jessica Martin", + "Value": 204, + "Segment": "Japan" + }, + { + "Category": "Christopher Moore", + "Value": 422, + "Segment": "USA" + }, + { + "Category": "Christopher Moore", + "Value": 309, + "Segment": "China" + }, + { + "Category": "Christopher Moore", + "Value": 865, + "Segment": "Japan" + }, + { + "Category": "Betty Wilson", + "Value": 88, + "Segment": "USA" + }, + { + "Category": "Betty Wilson", + "Value": 466, + "Segment": "China" + }, + { + "Category": "Betty Wilson", + "Value": 588, + "Segment": "Japan" + }, + { + "Category": "Steven Lewis", + "Value": 448, + "Segment": "USA" + }, + { + "Category": "Steven Lewis", + "Value": 669, + "Segment": "China" + }, + { + "Category": "Steven Lewis", + "Value": 747, + "Segment": "Japan" + }, + { + "Category": "Karen Lopez", + "Value": 338, + "Segment": "USA" + }, + { + "Category": "Karen Lopez", + "Value": 486, + "Segment": "China" + }, + { + "Category": "Karen Lopez", + "Value": 615, + "Segment": "Japan" + }, + { + "Category": "Sandra Wright", + "Value": 891, + "Segment": "USA" + }, + { + "Category": "Sandra Wright", + "Value": 699, + "Segment": "China" + }, + { + "Category": "Sandra Wright", + "Value": 81, + "Segment": "Japan" + }, + { + "Category": "Daniel King", + "Value": 662, + "Segment": "USA" + }, + { + "Category": "Daniel King", + "Value": 918, + "Segment": "China" + }, + { + "Category": "Daniel King", + "Value": 156, + "Segment": "Japan" + }, + { + "Category": "Mark Taylor", + "Value": 970, + "Segment": "USA" + }, + { + "Category": "Mark Taylor", + "Value": 414, + "Segment": "China" + }, + { + "Category": "Mark Taylor", + "Value": 954, + "Segment": "Japan" + }, + { + "Category": "Sandra Thomas", + "Value": 555, + "Segment": "USA" + }, + { + "Category": "Sandra Thomas", + "Value": 943, + "Segment": "China" + }, + { + "Category": "Sandra Thomas", + "Value": 95, + "Segment": "Japan" + }, + { + "Category": "Karen Rodriguez", + "Value": 206, + "Segment": "USA" + }, + { + "Category": "Karen Rodriguez", + "Value": 918, + "Segment": "China" + }, + { + "Category": "Karen Rodriguez", + "Value": 604, + "Segment": "Japan" + }, + { + "Category": "Patricia Jackson", + "Value": 860, + "Segment": "USA" + }, + { + "Category": "Patricia Jackson", + "Value": 382, + "Segment": "China" + }, + { + "Category": "Patricia Jackson", + "Value": 964, + "Segment": "Japan" + }, + { + "Category": "Donna Hill", + "Value": 584, + "Segment": "USA" + }, + { + "Category": "Donna Hill", + "Value": 982, + "Segment": "China" + }, + { + "Category": "Donna Hill", + "Value": 187, + "Segment": "Japan" + }, + { + "Category": "Donna White", + "Value": 513, + "Segment": "USA" + }, + { + "Category": "Donna White", + "Value": 404, + "Segment": "China" + }, + { + "Category": "Donna White", + "Value": 418, + "Segment": "Japan" + }, + { + "Category": "Michael Brown", + "Value": 76, + "Segment": "USA" + }, + { + "Category": "Michael Brown", + "Value": 277, + "Segment": "China" + }, + { + "Category": "Michael Brown", + "Value": 171, + "Segment": "Japan" + }, + { + "Category": "Elizabeth Robinson", + "Value": 550, + "Segment": "USA" + }, + { + "Category": "Elizabeth Robinson", + "Value": 949, + "Segment": "China" + }, + { + "Category": "Elizabeth Robinson", + "Value": 512, + "Segment": "Japan" + }, + { + "Category": "Mary Jones", + "Value": 443, + "Segment": "USA" + }, + { + "Category": "Mary Jones", + "Value": 124, + "Segment": "China" + }, + { + "Category": "Mary Jones", + "Value": 32, + "Segment": "Japan" + }, + { + "Category": "Richard Rodriguez", + "Value": 91, + "Segment": "USA" + }, + { + "Category": "Richard Rodriguez", + "Value": 237, + "Segment": "China" + }, + { + "Category": "Richard Rodriguez", + "Value": 634, + "Segment": "Japan" + }, + { + "Category": "Christopher Clark", + "Value": 664, + "Segment": "USA" + }, + { + "Category": "Christopher Clark", + "Value": 756, + "Segment": "China" + }, + { + "Category": "Christopher Clark", + "Value": 370, + "Segment": "Japan" + }, + { + "Category": "Christopher Lopez", + "Value": 980, + "Segment": "USA" + }, + { + "Category": "Christopher Lopez", + "Value": 431, + "Segment": "China" + }, + { + "Category": "Christopher Lopez", + "Value": 706, + "Segment": "Japan" + }, + { + "Category": "Susan Ramirez", + "Value": 808, + "Segment": "USA" + }, + { + "Category": "Susan Ramirez", + "Value": 227, + "Segment": "China" + }, + { + "Category": "Susan Ramirez", + "Value": 214, + "Segment": "Japan" + }, + { + "Category": "Steven Wilson", + "Value": 952, + "Segment": "USA" + }, + { + "Category": "Steven Wilson", + "Value": 851, + "Segment": "China" + }, + { + "Category": "Steven Wilson", + "Value": 855, + "Segment": "Japan" + }, + { + "Category": "Paul Anderson", + "Value": 349, + "Segment": "USA" + }, + { + "Category": "Paul Anderson", + "Value": 258, + "Segment": "China" + }, + { + "Category": "Paul Anderson", + "Value": 334, + "Segment": "Japan" + }, + { + "Category": "Joseph Rodriguez", + "Value": 618, + "Segment": "USA" + }, + { + "Category": "Joseph Rodriguez", + "Value": 573, + "Segment": "China" + }, + { + "Category": "Joseph Rodriguez", + "Value": 293, + "Segment": "Japan" + }, + { + "Category": "Elizabeth Wright", + "Value": 864, + "Segment": "USA" + }, + { + "Category": "Elizabeth Wright", + "Value": 654, + "Segment": "China" + }, + { + "Category": "Elizabeth Wright", + "Value": 678, + "Segment": "Japan" + }, + { + "Category": "Kimberly Jackson", + "Value": 341, + "Segment": "USA" + }, + { + "Category": "Kimberly Jackson", + "Value": 306, + "Segment": "China" + }, + { + "Category": "Kimberly Jackson", + "Value": 410, + "Segment": "Japan" + }, + { + "Category": "Betty Hernandez", + "Value": 502, + "Segment": "USA" + }, + { + "Category": "Betty Hernandez", + "Value": 72, + "Segment": "China" + }, + { + "Category": "Betty Hernandez", + "Value": 245, + "Segment": "Japan" + }, + { + "Category": "David King", + "Value": 138, + "Segment": "USA" + }, + { + "Category": "David King", + "Value": 440, + "Segment": "China" + }, + { + "Category": "David King", + "Value": 445, + "Segment": "Japan" + }, + { + "Category": "Matthew Lopez", + "Value": 221, + "Segment": "USA" + }, + { + "Category": "Matthew Lopez", + "Value": 77, + "Segment": "China" + }, + { + "Category": "Matthew Lopez", + "Value": 615, + "Segment": "Japan" + }, + { + "Category": "Susan Hernandez", + "Value": 32, + "Segment": "USA" + }, + { + "Category": "Susan Hernandez", + "Value": 634, + "Segment": "China" + }, + { + "Category": "Susan Hernandez", + "Value": 71, + "Segment": "Japan" + }, + { + "Category": "Jennifer Lee", + "Value": 906, + "Segment": "USA" + }, + { + "Category": "Jennifer Lee", + "Value": 465, + "Segment": "China" + }, + { + "Category": "Jennifer Lee", + "Value": 791, + "Segment": "Japan" + }, + { + "Category": "Richard Flores", + "Value": 342, + "Segment": "USA" + }, + { + "Category": "Richard Flores", + "Value": 336, + "Segment": "China" + }, + { + "Category": "Richard Flores", + "Value": 59, + "Segment": "Japan" + }, + { + "Category": "John Anderson", + "Value": 919, + "Segment": "USA" + }, + { + "Category": "John Anderson", + "Value": 787, + "Segment": "China" + }, + { + "Category": "John Anderson", + "Value": 35, + "Segment": "Japan" + }, + { + "Category": "Kimberly Wright", + "Value": 180, + "Segment": "USA" + }, + { + "Category": "Kimberly Wright", + "Value": 260, + "Segment": "China" + }, + { + "Category": "Kimberly Wright", + "Value": 199, + "Segment": "Japan" + }, + { + "Category": "Joseph Williams", + "Value": 88, + "Segment": "USA" + }, + { + "Category": "Joseph Williams", + "Value": 517, + "Segment": "China" + }, + { + "Category": "Joseph Williams", + "Value": 177, + "Segment": "Japan" + }, + { + "Category": "Lisa Torres", + "Value": 455, + "Segment": "USA" + }, + { + "Category": "Lisa Torres", + "Value": 281, + "Segment": "China" + }, + { + "Category": "Lisa Torres", + "Value": 552, + "Segment": "Japan" + }, + { + "Category": "Andrew Rodriguez", + "Value": 867, + "Segment": "USA" + }, + { + "Category": "Andrew Rodriguez", + "Value": 940, + "Segment": "China" + }, + { + "Category": "Andrew Rodriguez", + "Value": 798, + "Segment": "Japan" + }, + { + "Category": "Karen Johnson", + "Value": 447, + "Segment": "USA" + }, + { + "Category": "Karen Johnson", + "Value": 435, + "Segment": "China" + }, + { + "Category": "Karen Johnson", + "Value": 884, + "Segment": "Japan" + }, + { + "Category": "Steven Jones", + "Value": 261, + "Segment": "USA" + }, + { + "Category": "Steven Jones", + "Value": 865, + "Segment": "China" + }, + { + "Category": "Steven Jones", + "Value": 490, + "Segment": "Japan" + }, + { + "Category": "Joshua Ramirez", + "Value": 888, + "Segment": "USA" + }, + { + "Category": "Joshua Ramirez", + "Value": 690, + "Segment": "China" + }, + { + "Category": "Joshua Ramirez", + "Value": 808, + "Segment": "Japan" + }, + { + "Category": "Emily Martinez", + "Value": 350, + "Segment": "USA" + }, + { + "Category": "Emily Martinez", + "Value": 320, + "Segment": "China" + }, + { + "Category": "Emily Martinez", + "Value": 18, + "Segment": "Japan" + }, + { + "Category": "Robert Walker", + "Value": 950, + "Segment": "USA" + }, + { + "Category": "Robert Walker", + "Value": 854, + "Segment": "China" + }, + { + "Category": "Robert Walker", + "Value": 137, + "Segment": "Japan" + }, + { + "Category": "Robert Lewis", + "Value": 153, + "Segment": "USA" + }, + { + "Category": "Robert Lewis", + "Value": 314, + "Segment": "China" + }, + { + "Category": "Robert Lewis", + "Value": 350, + "Segment": "Japan" + }, + { + "Category": "Sandra Lopez", + "Value": 820, + "Segment": "USA" + }, + { + "Category": "Sandra Lopez", + "Value": 214, + "Segment": "China" + }, + { + "Category": "Sandra Lopez", + "Value": 998, + "Segment": "Japan" + }, + { + "Category": "Nancy Miller", + "Value": 668, + "Segment": "USA" + }, + { + "Category": "Nancy Miller", + "Value": 48, + "Segment": "China" + }, + { + "Category": "Nancy Miller", + "Value": 688, + "Segment": "Japan" + }, + { + "Category": "Christopher Sanchez", + "Value": 791, + "Segment": "USA" + }, + { + "Category": "Christopher Sanchez", + "Value": 540, + "Segment": "China" + }, + { + "Category": "Christopher Sanchez", + "Value": 416, + "Segment": "Japan" + }, + { + "Category": "Daniel Flores", + "Value": 912, + "Segment": "USA" + }, + { + "Category": "Daniel Flores", + "Value": 334, + "Segment": "China" + }, + { + "Category": "Daniel Flores", + "Value": 185, + "Segment": "Japan" + }, + { + "Category": "Mary Walker", + "Value": 14, + "Segment": "USA" + }, + { + "Category": "Mary Walker", + "Value": 792, + "Segment": "China" + }, + { + "Category": "Mary Walker", + "Value": 841, + "Segment": "Japan" + }, + { + "Category": "Anthony Ramirez", + "Value": 79, + "Segment": "USA" + }, + { + "Category": "Anthony Ramirez", + "Value": 874, + "Segment": "China" + }, + { + "Category": "Anthony Ramirez", + "Value": 115, + "Segment": "Japan" + }, + { + "Category": "Anthony Hill", + "Value": 213, + "Segment": "USA" + }, + { + "Category": "Anthony Hill", + "Value": 155, + "Segment": "China" + }, + { + "Category": "Anthony Hill", + "Value": 933, + "Segment": "Japan" + }, + { + "Category": "Matthew Miller", + "Value": 308, + "Segment": "USA" + }, + { + "Category": "Matthew Miller", + "Value": 946, + "Segment": "China" + }, + { + "Category": "Matthew Miller", + "Value": 511, + "Segment": "Japan" + }, + { + "Category": "Andrew King", + "Value": 337, + "Segment": "USA" + }, + { + "Category": "Andrew King", + "Value": 41, + "Segment": "China" + }, + { + "Category": "Andrew King", + "Value": 311, + "Segment": "Japan" + }, + { + "Category": "William Perez", + "Value": 825, + "Segment": "USA" + }, + { + "Category": "William Perez", + "Value": 724, + "Segment": "China" + }, + { + "Category": "William Perez", + "Value": 107, + "Segment": "Japan" + }, + { + "Category": "William Martinez", + "Value": 277, + "Segment": "USA" + }, + { + "Category": "William Martinez", + "Value": 128, + "Segment": "China" + }, + { + "Category": "William Martinez", + "Value": 184, + "Segment": "Japan" + }, + { + "Category": "Margaret Garcia", + "Value": 674, + "Segment": "USA" + }, + { + "Category": "Margaret Garcia", + "Value": 472, + "Segment": "China" + }, + { + "Category": "Margaret Garcia", + "Value": 837, + "Segment": "Japan" + }, + { + "Category": "Barbara Anderson", + "Value": 549, + "Segment": "USA" + }, + { + "Category": "Barbara Anderson", + "Value": 504, + "Segment": "China" + }, + { + "Category": "Barbara Anderson", + "Value": 121, + "Segment": "Japan" + }, + { + "Category": "Thomas Smith", + "Value": 62, + "Segment": "USA" + }, + { + "Category": "Thomas Smith", + "Value": 291, + "Segment": "China" + }, + { + "Category": "Thomas Smith", + "Value": 786, + "Segment": "Japan" + }, + { + "Category": "Kimberly Thomas", + "Value": 744, + "Segment": "USA" + }, + { + "Category": "Kimberly Thomas", + "Value": 911, + "Segment": "China" + }, + { + "Category": "Kimberly Thomas", + "Value": 354, + "Segment": "Japan" + }, + { + "Category": "Karen Garcia", + "Value": 803, + "Segment": "USA" + }, + { + "Category": "Karen Garcia", + "Value": 915, + "Segment": "China" + }, + { + "Category": "Karen Garcia", + "Value": 773, + "Segment": "Japan" + }, + { + "Category": "Sarah Torres", + "Value": 712, + "Segment": "USA" + }, + { + "Category": "Sarah Torres", + "Value": 220, + "Segment": "China" + }, + { + "Category": "Sarah Torres", + "Value": 767, + "Segment": "Japan" + }, + { + "Category": "Emily Hill", + "Value": 438, + "Segment": "USA" + }, + { + "Category": "Emily Hill", + "Value": 514, + "Segment": "China" + }, + { + "Category": "Emily Hill", + "Value": 971, + "Segment": "Japan" + }, + { + "Category": "Sarah Walker", + "Value": 845, + "Segment": "USA" + }, + { + "Category": "Sarah Walker", + "Value": 439, + "Segment": "China" + }, + { + "Category": "Sarah Walker", + "Value": 809, + "Segment": "Japan" + }, + { + "Category": "Michael Clark", + "Value": 379, + "Segment": "USA" + }, + { + "Category": "Michael Clark", + "Value": 775, + "Segment": "China" + }, + { + "Category": "Michael Clark", + "Value": 497, + "Segment": "Japan" + }, + { + "Category": "Joshua Wright", + "Value": 437, + "Segment": "USA" + }, + { + "Category": "Joshua Wright", + "Value": 796, + "Segment": "China" + }, + { + "Category": "Joshua Wright", + "Value": 271, + "Segment": "Japan" + }, + { + "Category": "Andrew Walker", + "Value": 371, + "Segment": "USA" + }, + { + "Category": "Andrew Walker", + "Value": 651, + "Segment": "China" + }, + { + "Category": "Andrew Walker", + "Value": 813, + "Segment": "Japan" + }, + { + "Category": "Nancy Young", + "Value": 946, + "Segment": "USA" + }, + { + "Category": "Nancy Young", + "Value": 298, + "Segment": "China" + }, + { + "Category": "Nancy Young", + "Value": 632, + "Segment": "Japan" + }, + { + "Category": "John Lewis", + "Value": 210, + "Segment": "USA" + }, + { + "Category": "John Lewis", + "Value": 382, + "Segment": "China" + }, + { + "Category": "John Lewis", + "Value": 674, + "Segment": "Japan" + }, + { + "Category": "John Brown", + "Value": 551, + "Segment": "USA" + }, + { + "Category": "John Brown", + "Value": 592, + "Segment": "China" + }, + { + "Category": "John Brown", + "Value": 439, + "Segment": "Japan" + }, + { + "Category": "Anthony Thomas", + "Value": 723, + "Segment": "USA" + }, + { + "Category": "Anthony Thomas", + "Value": 334, + "Segment": "China" + }, + { + "Category": "Anthony Thomas", + "Value": 883, + "Segment": "Japan" + }, + { + "Category": "Joshua Moore", + "Value": 944, + "Segment": "USA" + }, + { + "Category": "Joshua Moore", + "Value": 209, + "Segment": "China" + }, + { + "Category": "Joshua Moore", + "Value": 954, + "Segment": "Japan" + }, + { + "Category": "John Hernandez", + "Value": 256, + "Segment": "USA" + }, + { + "Category": "John Hernandez", + "Value": 592, + "Segment": "China" + }, + { + "Category": "John Hernandez", + "Value": 905, + "Segment": "Japan" + }, + { + "Category": "James Perez", + "Value": 689, + "Segment": "USA" + }, + { + "Category": "James Perez", + "Value": 295, + "Segment": "China" + }, + { + "Category": "James Perez", + "Value": 647, + "Segment": "Japan" + }, + { + "Category": "James Scott", + "Value": 408, + "Segment": "USA" + }, + { + "Category": "James Scott", + "Value": 758, + "Segment": "China" + }, + { + "Category": "James Scott", + "Value": 967, + "Segment": "Japan" + }, + { + "Category": "Matthew Sanchez", + "Value": 493, + "Segment": "USA" + }, + { + "Category": "Matthew Sanchez", + "Value": 519, + "Segment": "China" + }, + { + "Category": "Matthew Sanchez", + "Value": 232, + "Segment": "Japan" + }, + { + "Category": "Joseph Sanchez", + "Value": 784, + "Segment": "USA" + }, + { + "Category": "Joseph Sanchez", + "Value": 602, + "Segment": "China" + }, + { + "Category": "Joseph Sanchez", + "Value": 934, + "Segment": "Japan" + }, + { + "Category": "Paul Perez", + "Value": 602, + "Segment": "USA" + }, + { + "Category": "Paul Perez", + "Value": 613, + "Segment": "China" + }, + { + "Category": "Paul Perez", + "Value": 344, + "Segment": "Japan" + }, + { + "Category": "Joshua Rodriguez", + "Value": 74, + "Segment": "USA" + }, + { + "Category": "Joshua Rodriguez", + "Value": 55, + "Segment": "China" + }, + { + "Category": "Joshua Rodriguez", + "Value": 657, + "Segment": "Japan" + }, + { + "Category": "Anthony Sanchez", + "Value": 373, + "Segment": "USA" + }, + { + "Category": "Anthony Sanchez", + "Value": 801, + "Segment": "China" + }, + { + "Category": "Anthony Sanchez", + "Value": 209, + "Segment": "Japan" + }, + { + "Category": "Linda King", + "Value": 76, + "Segment": "USA" + }, + { + "Category": "Linda King", + "Value": 713, + "Segment": "China" + }, + { + "Category": "Linda King", + "Value": 156, + "Segment": "Japan" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/stacked-bar-chart/03-card6.flint.json b/test-harness/excel/evaluations/inputs/stacked-bar-chart/03-card6.flint.json new file mode 100644 index 00000000..43493965 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/stacked-bar-chart/03-card6.flint.json @@ -0,0 +1,143 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity", + "ColorVal": "Rank" + }, + "chart_spec": { + "chartType": "Stacked Bar Chart", + "encodings": { + "x": "Category", + "y": "Value", + "color": "ColorVal" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Value": 628, + "ColorVal": 1 + }, + { + "Category": "Laptop", + "Value": 621, + "ColorVal": 2 + }, + { + "Category": "Laptop", + "Value": 178, + "ColorVal": 3 + }, + { + "Category": "Laptop", + "Value": 771, + "ColorVal": 4 + }, + { + "Category": "Phone", + "Value": 55, + "ColorVal": 1 + }, + { + "Category": "Phone", + "Value": 607, + "ColorVal": 2 + }, + { + "Category": "Phone", + "Value": 379, + "ColorVal": 3 + }, + { + "Category": "Phone", + "Value": 187, + "ColorVal": 4 + }, + { + "Category": "Tablet", + "Value": 571, + "ColorVal": 1 + }, + { + "Category": "Tablet", + "Value": 860, + "ColorVal": 2 + }, + { + "Category": "Tablet", + "Value": 656, + "ColorVal": 3 + }, + { + "Category": "Tablet", + "Value": 949, + "ColorVal": 4 + }, + { + "Category": "Desktop", + "Value": 787, + "ColorVal": 1 + }, + { + "Category": "Desktop", + "Value": 363, + "ColorVal": 2 + }, + { + "Category": "Desktop", + "Value": 255, + "ColorVal": 3 + }, + { + "Category": "Desktop", + "Value": 789, + "ColorVal": 4 + }, + { + "Category": "Monitor", + "Value": 724, + "ColorVal": 1 + }, + { + "Category": "Monitor", + "Value": 162, + "ColorVal": 2 + }, + { + "Category": "Monitor", + "Value": 951, + "ColorVal": 3 + }, + { + "Category": "Monitor", + "Value": 148, + "ColorVal": 4 + }, + { + "Category": "Keyboard", + "Value": 42, + "ColorVal": 1 + }, + { + "Category": "Keyboard", + "Value": 319, + "ColorVal": 2 + }, + { + "Category": "Keyboard", + "Value": 96, + "ColorVal": 3 + }, + { + "Category": "Keyboard", + "Value": 435, + "ColorVal": 4 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/stacked-bar-chart/04-card5.flint.json b/test-harness/excel/evaluations/inputs/stacked-bar-chart/04-card5.flint.json new file mode 100644 index 00000000..f54c635d --- /dev/null +++ b/test-harness/excel/evaluations/inputs/stacked-bar-chart/04-card5.flint.json @@ -0,0 +1,773 @@ +{ + "semantic_types": { + "Category": "Category", + "Value": "Quantity", + "ColorVal": "Rank" + }, + "chart_spec": { + "chartType": "Stacked Bar Chart", + "encodings": { + "x": "Category", + "y": "Value", + "color": "ColorVal" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Value": 278, + "ColorVal": 1 + }, + { + "Category": "Laptop", + "Value": 373, + "ColorVal": 2 + }, + { + "Category": "Laptop", + "Value": 137, + "ColorVal": 3 + }, + { + "Category": "Laptop", + "Value": 308, + "ColorVal": 4 + }, + { + "Category": "Laptop", + "Value": 88, + "ColorVal": 5 + }, + { + "Category": "Laptop", + "Value": 29, + "ColorVal": 6 + }, + { + "Category": "Laptop", + "Value": 766, + "ColorVal": 7 + }, + { + "Category": "Laptop", + "Value": 349, + "ColorVal": 8 + }, + { + "Category": "Laptop", + "Value": 566, + "ColorVal": 9 + }, + { + "Category": "Laptop", + "Value": 849, + "ColorVal": 10 + }, + { + "Category": "Laptop", + "Value": 990, + "ColorVal": 11 + }, + { + "Category": "Laptop", + "Value": 844, + "ColorVal": 12 + }, + { + "Category": "Laptop", + "Value": 600, + "ColorVal": 13 + }, + { + "Category": "Laptop", + "Value": 235, + "ColorVal": 14 + }, + { + "Category": "Laptop", + "Value": 574, + "ColorVal": 15 + }, + { + "Category": "Laptop", + "Value": 329, + "ColorVal": 16 + }, + { + "Category": "Laptop", + "Value": 27, + "ColorVal": 17 + }, + { + "Category": "Laptop", + "Value": 353, + "ColorVal": 18 + }, + { + "Category": "Laptop", + "Value": 797, + "ColorVal": 19 + }, + { + "Category": "Laptop", + "Value": 807, + "ColorVal": 20 + }, + { + "Category": "Laptop", + "Value": 159, + "ColorVal": 21 + }, + { + "Category": "Laptop", + "Value": 426, + "ColorVal": 22 + }, + { + "Category": "Laptop", + "Value": 423, + "ColorVal": 23 + }, + { + "Category": "Laptop", + "Value": 158, + "ColorVal": 24 + }, + { + "Category": "Laptop", + "Value": 396, + "ColorVal": 25 + }, + { + "Category": "Laptop", + "Value": 570, + "ColorVal": 26 + }, + { + "Category": "Laptop", + "Value": 334, + "ColorVal": 27 + }, + { + "Category": "Laptop", + "Value": 489, + "ColorVal": 28 + }, + { + "Category": "Laptop", + "Value": 349, + "ColorVal": 29 + }, + { + "Category": "Laptop", + "Value": 314, + "ColorVal": 30 + }, + { + "Category": "Phone", + "Value": 144, + "ColorVal": 1 + }, + { + "Category": "Phone", + "Value": 903, + "ColorVal": 2 + }, + { + "Category": "Phone", + "Value": 775, + "ColorVal": 3 + }, + { + "Category": "Phone", + "Value": 243, + "ColorVal": 4 + }, + { + "Category": "Phone", + "Value": 852, + "ColorVal": 5 + }, + { + "Category": "Phone", + "Value": 147, + "ColorVal": 6 + }, + { + "Category": "Phone", + "Value": 984, + "ColorVal": 7 + }, + { + "Category": "Phone", + "Value": 620, + "ColorVal": 8 + }, + { + "Category": "Phone", + "Value": 664, + "ColorVal": 9 + }, + { + "Category": "Phone", + "Value": 602, + "ColorVal": 10 + }, + { + "Category": "Phone", + "Value": 342, + "ColorVal": 11 + }, + { + "Category": "Phone", + "Value": 292, + "ColorVal": 12 + }, + { + "Category": "Phone", + "Value": 276, + "ColorVal": 13 + }, + { + "Category": "Phone", + "Value": 958, + "ColorVal": 14 + }, + { + "Category": "Phone", + "Value": 699, + "ColorVal": 15 + }, + { + "Category": "Phone", + "Value": 376, + "ColorVal": 16 + }, + { + "Category": "Phone", + "Value": 806, + "ColorVal": 17 + }, + { + "Category": "Phone", + "Value": 947, + "ColorVal": 18 + }, + { + "Category": "Phone", + "Value": 174, + "ColorVal": 19 + }, + { + "Category": "Phone", + "Value": 162, + "ColorVal": 20 + }, + { + "Category": "Phone", + "Value": 379, + "ColorVal": 21 + }, + { + "Category": "Phone", + "Value": 813, + "ColorVal": 22 + }, + { + "Category": "Phone", + "Value": 865, + "ColorVal": 23 + }, + { + "Category": "Phone", + "Value": 735, + "ColorVal": 24 + }, + { + "Category": "Phone", + "Value": 67, + "ColorVal": 25 + }, + { + "Category": "Phone", + "Value": 195, + "ColorVal": 26 + }, + { + "Category": "Phone", + "Value": 388, + "ColorVal": 27 + }, + { + "Category": "Phone", + "Value": 228, + "ColorVal": 28 + }, + { + "Category": "Phone", + "Value": 43, + "ColorVal": 29 + }, + { + "Category": "Phone", + "Value": 871, + "ColorVal": 30 + }, + { + "Category": "Tablet", + "Value": 762, + "ColorVal": 1 + }, + { + "Category": "Tablet", + "Value": 200, + "ColorVal": 2 + }, + { + "Category": "Tablet", + "Value": 184, + "ColorVal": 3 + }, + { + "Category": "Tablet", + "Value": 146, + "ColorVal": 4 + }, + { + "Category": "Tablet", + "Value": 65, + "ColorVal": 5 + }, + { + "Category": "Tablet", + "Value": 136, + "ColorVal": 6 + }, + { + "Category": "Tablet", + "Value": 64, + "ColorVal": 7 + }, + { + "Category": "Tablet", + "Value": 755, + "ColorVal": 8 + }, + { + "Category": "Tablet", + "Value": 410, + "ColorVal": 9 + }, + { + "Category": "Tablet", + "Value": 129, + "ColorVal": 10 + }, + { + "Category": "Tablet", + "Value": 565, + "ColorVal": 11 + }, + { + "Category": "Tablet", + "Value": 438, + "ColorVal": 12 + }, + { + "Category": "Tablet", + "Value": 998, + "ColorVal": 13 + }, + { + "Category": "Tablet", + "Value": 305, + "ColorVal": 14 + }, + { + "Category": "Tablet", + "Value": 72, + "ColorVal": 15 + }, + { + "Category": "Tablet", + "Value": 197, + "ColorVal": 16 + }, + { + "Category": "Tablet", + "Value": 739, + "ColorVal": 17 + }, + { + "Category": "Tablet", + "Value": 136, + "ColorVal": 18 + }, + { + "Category": "Tablet", + "Value": 560, + "ColorVal": 19 + }, + { + "Category": "Tablet", + "Value": 241, + "ColorVal": 20 + }, + { + "Category": "Tablet", + "Value": 243, + "ColorVal": 21 + }, + { + "Category": "Tablet", + "Value": 500, + "ColorVal": 22 + }, + { + "Category": "Tablet", + "Value": 383, + "ColorVal": 23 + }, + { + "Category": "Tablet", + "Value": 484, + "ColorVal": 24 + }, + { + "Category": "Tablet", + "Value": 338, + "ColorVal": 25 + }, + { + "Category": "Tablet", + "Value": 246, + "ColorVal": 26 + }, + { + "Category": "Tablet", + "Value": 872, + "ColorVal": 27 + }, + { + "Category": "Tablet", + "Value": 515, + "ColorVal": 28 + }, + { + "Category": "Tablet", + "Value": 931, + "ColorVal": 29 + }, + { + "Category": "Tablet", + "Value": 242, + "ColorVal": 30 + }, + { + "Category": "Desktop", + "Value": 794, + "ColorVal": 1 + }, + { + "Category": "Desktop", + "Value": 868, + "ColorVal": 2 + }, + { + "Category": "Desktop", + "Value": 261, + "ColorVal": 3 + }, + { + "Category": "Desktop", + "Value": 126, + "ColorVal": 4 + }, + { + "Category": "Desktop", + "Value": 506, + "ColorVal": 5 + }, + { + "Category": "Desktop", + "Value": 674, + "ColorVal": 6 + }, + { + "Category": "Desktop", + "Value": 659, + "ColorVal": 7 + }, + { + "Category": "Desktop", + "Value": 271, + "ColorVal": 8 + }, + { + "Category": "Desktop", + "Value": 827, + "ColorVal": 9 + }, + { + "Category": "Desktop", + "Value": 527, + "ColorVal": 10 + }, + { + "Category": "Desktop", + "Value": 195, + "ColorVal": 11 + }, + { + "Category": "Desktop", + "Value": 577, + "ColorVal": 12 + }, + { + "Category": "Desktop", + "Value": 808, + "ColorVal": 13 + }, + { + "Category": "Desktop", + "Value": 391, + "ColorVal": 14 + }, + { + "Category": "Desktop", + "Value": 624, + "ColorVal": 15 + }, + { + "Category": "Desktop", + "Value": 852, + "ColorVal": 16 + }, + { + "Category": "Desktop", + "Value": 805, + "ColorVal": 17 + }, + { + "Category": "Desktop", + "Value": 312, + "ColorVal": 18 + }, + { + "Category": "Desktop", + "Value": 869, + "ColorVal": 19 + }, + { + "Category": "Desktop", + "Value": 614, + "ColorVal": 20 + }, + { + "Category": "Desktop", + "Value": 587, + "ColorVal": 21 + }, + { + "Category": "Desktop", + "Value": 918, + "ColorVal": 22 + }, + { + "Category": "Desktop", + "Value": 132, + "ColorVal": 23 + }, + { + "Category": "Desktop", + "Value": 972, + "ColorVal": 24 + }, + { + "Category": "Desktop", + "Value": 377, + "ColorVal": 25 + }, + { + "Category": "Desktop", + "Value": 727, + "ColorVal": 26 + }, + { + "Category": "Desktop", + "Value": 110, + "ColorVal": 27 + }, + { + "Category": "Desktop", + "Value": 321, + "ColorVal": 28 + }, + { + "Category": "Desktop", + "Value": 913, + "ColorVal": 29 + }, + { + "Category": "Desktop", + "Value": 738, + "ColorVal": 30 + }, + { + "Category": "Monitor", + "Value": 401, + "ColorVal": 1 + }, + { + "Category": "Monitor", + "Value": 224, + "ColorVal": 2 + }, + { + "Category": "Monitor", + "Value": 203, + "ColorVal": 3 + }, + { + "Category": "Monitor", + "Value": 873, + "ColorVal": 4 + }, + { + "Category": "Monitor", + "Value": 388, + "ColorVal": 5 + }, + { + "Category": "Monitor", + "Value": 506, + "ColorVal": 6 + }, + { + "Category": "Monitor", + "Value": 488, + "ColorVal": 7 + }, + { + "Category": "Monitor", + "Value": 71, + "ColorVal": 8 + }, + { + "Category": "Monitor", + "Value": 249, + "ColorVal": 9 + }, + { + "Category": "Monitor", + "Value": 730, + "ColorVal": 10 + }, + { + "Category": "Monitor", + "Value": 673, + "ColorVal": 11 + }, + { + "Category": "Monitor", + "Value": 928, + "ColorVal": 12 + }, + { + "Category": "Monitor", + "Value": 80, + "ColorVal": 13 + }, + { + "Category": "Monitor", + "Value": 850, + "ColorVal": 14 + }, + { + "Category": "Monitor", + "Value": 889, + "ColorVal": 15 + }, + { + "Category": "Monitor", + "Value": 808, + "ColorVal": 16 + }, + { + "Category": "Monitor", + "Value": 41, + "ColorVal": 17 + }, + { + "Category": "Monitor", + "Value": 932, + "ColorVal": 18 + }, + { + "Category": "Monitor", + "Value": 825, + "ColorVal": 19 + }, + { + "Category": "Monitor", + "Value": 991, + "ColorVal": 20 + }, + { + "Category": "Monitor", + "Value": 852, + "ColorVal": 21 + }, + { + "Category": "Monitor", + "Value": 387, + "ColorVal": 22 + }, + { + "Category": "Monitor", + "Value": 340, + "ColorVal": 23 + }, + { + "Category": "Monitor", + "Value": 360, + "ColorVal": 24 + }, + { + "Category": "Monitor", + "Value": 281, + "ColorVal": 25 + }, + { + "Category": "Monitor", + "Value": 123, + "ColorVal": 26 + }, + { + "Category": "Monitor", + "Value": 340, + "ColorVal": 27 + }, + { + "Category": "Monitor", + "Value": 525, + "ColorVal": 28 + }, + { + "Category": "Monitor", + "Value": 529, + "ColorVal": 29 + }, + { + "Category": "Monitor", + "Value": 329, + "ColorVal": 30 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/stacked-bar-chart/05-card10.flint.json b/test-harness/excel/evaluations/inputs/stacked-bar-chart/05-card10.flint.json new file mode 100644 index 00000000..41ae8c30 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/stacked-bar-chart/05-card10.flint.json @@ -0,0 +1,173 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Stacked Bar Chart", + "encodings": { + "x": "Date", + "y": "Value", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 300, + "Segment": "Laptop" + }, + { + "Date": "2020-01-01", + "Value": 961, + "Segment": "Phone" + }, + { + "Date": "2020-01-01", + "Value": 741, + "Segment": "Tablet" + }, + { + "Date": "2020-04-19", + "Value": 606, + "Segment": "Laptop" + }, + { + "Date": "2020-04-19", + "Value": 194, + "Segment": "Phone" + }, + { + "Date": "2020-04-19", + "Value": 823, + "Segment": "Tablet" + }, + { + "Date": "2020-08-07", + "Value": 952, + "Segment": "Laptop" + }, + { + "Date": "2020-08-07", + "Value": 532, + "Segment": "Phone" + }, + { + "Date": "2020-08-07", + "Value": 405, + "Segment": "Tablet" + }, + { + "Date": "2020-11-24", + "Value": 989, + "Segment": "Laptop" + }, + { + "Date": "2020-11-24", + "Value": 833, + "Segment": "Phone" + }, + { + "Date": "2020-11-24", + "Value": 838, + "Segment": "Tablet" + }, + { + "Date": "2021-03-14", + "Value": 217, + "Segment": "Laptop" + }, + { + "Date": "2021-03-14", + "Value": 807, + "Segment": "Phone" + }, + { + "Date": "2021-03-14", + "Value": 593, + "Segment": "Tablet" + }, + { + "Date": "2021-07-01", + "Value": 712, + "Segment": "Laptop" + }, + { + "Date": "2021-07-01", + "Value": 381, + "Segment": "Phone" + }, + { + "Date": "2021-07-01", + "Value": 323, + "Segment": "Tablet" + }, + { + "Date": "2021-10-19", + "Value": 741, + "Segment": "Laptop" + }, + { + "Date": "2021-10-19", + "Value": 333, + "Segment": "Phone" + }, + { + "Date": "2021-10-19", + "Value": 837, + "Segment": "Tablet" + }, + { + "Date": "2022-02-05", + "Value": 395, + "Segment": "Laptop" + }, + { + "Date": "2022-02-05", + "Value": 81, + "Segment": "Phone" + }, + { + "Date": "2022-02-05", + "Value": 562, + "Segment": "Tablet" + }, + { + "Date": "2022-05-26", + "Value": 442, + "Segment": "Laptop" + }, + { + "Date": "2022-05-26", + "Value": 553, + "Segment": "Phone" + }, + { + "Date": "2022-05-26", + "Value": 813, + "Segment": "Tablet" + }, + { + "Date": "2022-09-12", + "Value": 194, + "Segment": "Laptop" + }, + { + "Date": "2022-09-12", + "Value": 658, + "Segment": "Phone" + }, + { + "Date": "2022-09-12", + "Value": 78, + "Segment": "Tablet" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/stacked-bar-chart/06-card20.flint.json b/test-harness/excel/evaluations/inputs/stacked-bar-chart/06-card20.flint.json new file mode 100644 index 00000000..b2d887f9 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/stacked-bar-chart/06-card20.flint.json @@ -0,0 +1,423 @@ +{ + "semantic_types": { + "Date": "Date", + "Value": "Quantity", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Stacked Bar Chart", + "encodings": { + "x": "Date", + "y": "Value", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Date": "2020-01-01", + "Value": 283, + "Segment": "Laptop" + }, + { + "Date": "2020-01-01", + "Value": 509, + "Segment": "Phone" + }, + { + "Date": "2020-01-01", + "Value": 946, + "Segment": "Tablet" + }, + { + "Date": "2020-01-01", + "Value": 971, + "Segment": "Desktop" + }, + { + "Date": "2020-02-24", + "Value": 992, + "Segment": "Laptop" + }, + { + "Date": "2020-02-24", + "Value": 76, + "Segment": "Phone" + }, + { + "Date": "2020-02-24", + "Value": 772, + "Segment": "Tablet" + }, + { + "Date": "2020-02-24", + "Value": 275, + "Segment": "Desktop" + }, + { + "Date": "2020-04-19", + "Value": 26, + "Segment": "Laptop" + }, + { + "Date": "2020-04-19", + "Value": 546, + "Segment": "Phone" + }, + { + "Date": "2020-04-19", + "Value": 47, + "Segment": "Tablet" + }, + { + "Date": "2020-04-19", + "Value": 322, + "Segment": "Desktop" + }, + { + "Date": "2020-06-13", + "Value": 715, + "Segment": "Laptop" + }, + { + "Date": "2020-06-13", + "Value": 780, + "Segment": "Phone" + }, + { + "Date": "2020-06-13", + "Value": 451, + "Segment": "Tablet" + }, + { + "Date": "2020-06-13", + "Value": 712, + "Segment": "Desktop" + }, + { + "Date": "2020-08-07", + "Value": 362, + "Segment": "Laptop" + }, + { + "Date": "2020-08-07", + "Value": 383, + "Segment": "Phone" + }, + { + "Date": "2020-08-07", + "Value": 653, + "Segment": "Tablet" + }, + { + "Date": "2020-08-07", + "Value": 326, + "Segment": "Desktop" + }, + { + "Date": "2020-09-30", + "Value": 959, + "Segment": "Laptop" + }, + { + "Date": "2020-09-30", + "Value": 814, + "Segment": "Phone" + }, + { + "Date": "2020-09-30", + "Value": 58, + "Segment": "Tablet" + }, + { + "Date": "2020-09-30", + "Value": 129, + "Segment": "Desktop" + }, + { + "Date": "2020-11-24", + "Value": 423, + "Segment": "Laptop" + }, + { + "Date": "2020-11-24", + "Value": 902, + "Segment": "Phone" + }, + { + "Date": "2020-11-24", + "Value": 24, + "Segment": "Tablet" + }, + { + "Date": "2020-11-24", + "Value": 345, + "Segment": "Desktop" + }, + { + "Date": "2021-01-18", + "Value": 97, + "Segment": "Laptop" + }, + { + "Date": "2021-01-18", + "Value": 621, + "Segment": "Phone" + }, + { + "Date": "2021-01-18", + "Value": 323, + "Segment": "Tablet" + }, + { + "Date": "2021-01-18", + "Value": 481, + "Segment": "Desktop" + }, + { + "Date": "2021-03-14", + "Value": 954, + "Segment": "Laptop" + }, + { + "Date": "2021-03-14", + "Value": 994, + "Segment": "Phone" + }, + { + "Date": "2021-03-14", + "Value": 284, + "Segment": "Tablet" + }, + { + "Date": "2021-03-14", + "Value": 410, + "Segment": "Desktop" + }, + { + "Date": "2021-05-07", + "Value": 493, + "Segment": "Laptop" + }, + { + "Date": "2021-05-07", + "Value": 766, + "Segment": "Phone" + }, + { + "Date": "2021-05-07", + "Value": 731, + "Segment": "Tablet" + }, + { + "Date": "2021-05-07", + "Value": 753, + "Segment": "Desktop" + }, + { + "Date": "2021-07-01", + "Value": 320, + "Segment": "Laptop" + }, + { + "Date": "2021-07-01", + "Value": 735, + "Segment": "Phone" + }, + { + "Date": "2021-07-01", + "Value": 569, + "Segment": "Tablet" + }, + { + "Date": "2021-07-01", + "Value": 209, + "Segment": "Desktop" + }, + { + "Date": "2021-08-25", + "Value": 953, + "Segment": "Laptop" + }, + { + "Date": "2021-08-25", + "Value": 578, + "Segment": "Phone" + }, + { + "Date": "2021-08-25", + "Value": 80, + "Segment": "Tablet" + }, + { + "Date": "2021-08-25", + "Value": 276, + "Segment": "Desktop" + }, + { + "Date": "2021-10-19", + "Value": 649, + "Segment": "Laptop" + }, + { + "Date": "2021-10-19", + "Value": 232, + "Segment": "Phone" + }, + { + "Date": "2021-10-19", + "Value": 938, + "Segment": "Tablet" + }, + { + "Date": "2021-10-19", + "Value": 48, + "Segment": "Desktop" + }, + { + "Date": "2021-12-12", + "Value": 371, + "Segment": "Laptop" + }, + { + "Date": "2021-12-12", + "Value": 698, + "Segment": "Phone" + }, + { + "Date": "2021-12-12", + "Value": 810, + "Segment": "Tablet" + }, + { + "Date": "2021-12-12", + "Value": 179, + "Segment": "Desktop" + }, + { + "Date": "2022-02-05", + "Value": 217, + "Segment": "Laptop" + }, + { + "Date": "2022-02-05", + "Value": 239, + "Segment": "Phone" + }, + { + "Date": "2022-02-05", + "Value": 208, + "Segment": "Tablet" + }, + { + "Date": "2022-02-05", + "Value": 763, + "Segment": "Desktop" + }, + { + "Date": "2022-04-01", + "Value": 503, + "Segment": "Laptop" + }, + { + "Date": "2022-04-01", + "Value": 499, + "Segment": "Phone" + }, + { + "Date": "2022-04-01", + "Value": 932, + "Segment": "Tablet" + }, + { + "Date": "2022-04-01", + "Value": 176, + "Segment": "Desktop" + }, + { + "Date": "2022-05-26", + "Value": 869, + "Segment": "Laptop" + }, + { + "Date": "2022-05-26", + "Value": 296, + "Segment": "Phone" + }, + { + "Date": "2022-05-26", + "Value": 888, + "Segment": "Tablet" + }, + { + "Date": "2022-05-26", + "Value": 423, + "Segment": "Desktop" + }, + { + "Date": "2022-07-19", + "Value": 359, + "Segment": "Laptop" + }, + { + "Date": "2022-07-19", + "Value": 77, + "Segment": "Phone" + }, + { + "Date": "2022-07-19", + "Value": 291, + "Segment": "Tablet" + }, + { + "Date": "2022-07-19", + "Value": 666, + "Segment": "Desktop" + }, + { + "Date": "2022-09-12", + "Value": 419, + "Segment": "Laptop" + }, + { + "Date": "2022-09-12", + "Value": 353, + "Segment": "Phone" + }, + { + "Date": "2022-09-12", + "Value": 862, + "Segment": "Tablet" + }, + { + "Date": "2022-09-12", + "Value": 832, + "Segment": "Desktop" + }, + { + "Date": "2022-11-06", + "Value": 112, + "Segment": "Laptop" + }, + { + "Date": "2022-11-06", + "Value": 913, + "Segment": "Phone" + }, + { + "Date": "2022-11-06", + "Value": 801, + "Segment": "Tablet" + }, + { + "Date": "2022-11-06", + "Value": 939, + "Segment": "Desktop" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/stacked-bar-chart/07-card10.flint.json b/test-harness/excel/evaluations/inputs/stacked-bar-chart/07-card10.flint.json new file mode 100644 index 00000000..87e89390 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/stacked-bar-chart/07-card10.flint.json @@ -0,0 +1,173 @@ +{ + "semantic_types": { + "X": "Quantity", + "Value": "Quantity", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Stacked Bar Chart", + "encodings": { + "x": "X", + "y": "Value", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "X": 1, + "Value": 299, + "Segment": "Laptop" + }, + { + "X": 1, + "Value": 927, + "Segment": "Phone" + }, + { + "X": 1, + "Value": 362, + "Segment": "Tablet" + }, + { + "X": 2, + "Value": 321, + "Segment": "Laptop" + }, + { + "X": 2, + "Value": 677, + "Segment": "Phone" + }, + { + "X": 2, + "Value": 138, + "Segment": "Tablet" + }, + { + "X": 3, + "Value": 526, + "Segment": "Laptop" + }, + { + "X": 3, + "Value": 227, + "Segment": "Phone" + }, + { + "X": 3, + "Value": 901, + "Segment": "Tablet" + }, + { + "X": 4, + "Value": 245, + "Segment": "Laptop" + }, + { + "X": 4, + "Value": 453, + "Segment": "Phone" + }, + { + "X": 4, + "Value": 905, + "Segment": "Tablet" + }, + { + "X": 5, + "Value": 850, + "Segment": "Laptop" + }, + { + "X": 5, + "Value": 757, + "Segment": "Phone" + }, + { + "X": 5, + "Value": 334, + "Segment": "Tablet" + }, + { + "X": 6, + "Value": 638, + "Segment": "Laptop" + }, + { + "X": 6, + "Value": 324, + "Segment": "Phone" + }, + { + "X": 6, + "Value": 582, + "Segment": "Tablet" + }, + { + "X": 7, + "Value": 917, + "Segment": "Laptop" + }, + { + "X": 7, + "Value": 421, + "Segment": "Phone" + }, + { + "X": 7, + "Value": 313, + "Segment": "Tablet" + }, + { + "X": 8, + "Value": 132, + "Segment": "Laptop" + }, + { + "X": 8, + "Value": 719, + "Segment": "Phone" + }, + { + "X": 8, + "Value": 470, + "Segment": "Tablet" + }, + { + "X": 9, + "Value": 388, + "Segment": "Laptop" + }, + { + "X": 9, + "Value": 115, + "Segment": "Phone" + }, + { + "X": 9, + "Value": 508, + "Segment": "Tablet" + }, + { + "X": 10, + "Value": 328, + "Segment": "Laptop" + }, + { + "X": 10, + "Value": 681, + "Segment": "Phone" + }, + { + "X": 10, + "Value": 525, + "Segment": "Tablet" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/stacked-bar-chart/08-card23.flint.json b/test-harness/excel/evaluations/inputs/stacked-bar-chart/08-card23.flint.json new file mode 100644 index 00000000..15ddd710 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/stacked-bar-chart/08-card23.flint.json @@ -0,0 +1,143 @@ +{ + "semantic_types": { + "X": "Quantity", + "Group": "Category", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Stacked Bar Chart", + "encodings": { + "x": "X", + "y": "Group", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Group": "Laptop", + "X": 906, + "Segment": "USA" + }, + { + "Group": "Laptop", + "X": 619, + "Segment": "China" + }, + { + "Group": "Laptop", + "X": 389, + "Segment": "Japan" + }, + { + "Group": "Phone", + "X": 163, + "Segment": "USA" + }, + { + "Group": "Phone", + "X": 91, + "Segment": "China" + }, + { + "Group": "Phone", + "X": 314, + "Segment": "Japan" + }, + { + "Group": "Tablet", + "X": 566, + "Segment": "USA" + }, + { + "Group": "Tablet", + "X": 845, + "Segment": "China" + }, + { + "Group": "Tablet", + "X": 60, + "Segment": "Japan" + }, + { + "Group": "Desktop", + "X": 274, + "Segment": "USA" + }, + { + "Group": "Desktop", + "X": 92, + "Segment": "China" + }, + { + "Group": "Desktop", + "X": 223, + "Segment": "Japan" + }, + { + "Group": "Monitor", + "X": 725, + "Segment": "USA" + }, + { + "Group": "Monitor", + "X": 14, + "Segment": "China" + }, + { + "Group": "Monitor", + "X": 315, + "Segment": "Japan" + }, + { + "Group": "Keyboard", + "X": 757, + "Segment": "USA" + }, + { + "Group": "Keyboard", + "X": 486, + "Segment": "China" + }, + { + "Group": "Keyboard", + "X": 304, + "Segment": "Japan" + }, + { + "Group": "Mouse", + "X": 381, + "Segment": "USA" + }, + { + "Group": "Mouse", + "X": 388, + "Segment": "China" + }, + { + "Group": "Mouse", + "X": 906, + "Segment": "Japan" + }, + { + "Group": "Headphones", + "X": 441, + "Segment": "USA" + }, + { + "Group": "Headphones", + "X": 695, + "Segment": "China" + }, + { + "Group": "Headphones", + "X": 564, + "Segment": "Japan" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/stacked-bar-chart/09-card43.flint.json b/test-harness/excel/evaluations/inputs/stacked-bar-chart/09-card43.flint.json new file mode 100644 index 00000000..71a562a5 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/stacked-bar-chart/09-card43.flint.json @@ -0,0 +1,248 @@ +{ + "semantic_types": { + "X": "Quantity", + "EndDate": "Date", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Stacked Bar Chart", + "encodings": { + "x": "X", + "y": "EndDate", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "EndDate": "2020-01-01", + "X": 403, + "Segment": "Laptop" + }, + { + "EndDate": "2020-01-01", + "X": 206, + "Segment": "Phone" + }, + { + "EndDate": "2020-01-01", + "X": 183, + "Segment": "Tablet" + }, + { + "EndDate": "2020-03-14", + "X": 265, + "Segment": "Laptop" + }, + { + "EndDate": "2020-03-14", + "X": 151, + "Segment": "Phone" + }, + { + "EndDate": "2020-03-14", + "X": 231, + "Segment": "Tablet" + }, + { + "EndDate": "2020-05-26", + "X": 338, + "Segment": "Laptop" + }, + { + "EndDate": "2020-05-26", + "X": 33, + "Segment": "Phone" + }, + { + "EndDate": "2020-05-26", + "X": 211, + "Segment": "Tablet" + }, + { + "EndDate": "2020-08-07", + "X": 468, + "Segment": "Laptop" + }, + { + "EndDate": "2020-08-07", + "X": 275, + "Segment": "Phone" + }, + { + "EndDate": "2020-08-07", + "X": 233, + "Segment": "Tablet" + }, + { + "EndDate": "2020-10-19", + "X": 474, + "Segment": "Laptop" + }, + { + "EndDate": "2020-10-19", + "X": 742, + "Segment": "Phone" + }, + { + "EndDate": "2020-10-19", + "X": 470, + "Segment": "Tablet" + }, + { + "EndDate": "2020-12-31", + "X": 962, + "Segment": "Laptop" + }, + { + "EndDate": "2020-12-31", + "X": 110, + "Segment": "Phone" + }, + { + "EndDate": "2020-12-31", + "X": 940, + "Segment": "Tablet" + }, + { + "EndDate": "2021-03-14", + "X": 98, + "Segment": "Laptop" + }, + { + "EndDate": "2021-03-14", + "X": 202, + "Segment": "Phone" + }, + { + "EndDate": "2021-03-14", + "X": 259, + "Segment": "Tablet" + }, + { + "EndDate": "2021-05-26", + "X": 849, + "Segment": "Laptop" + }, + { + "EndDate": "2021-05-26", + "X": 334, + "Segment": "Phone" + }, + { + "EndDate": "2021-05-26", + "X": 770, + "Segment": "Tablet" + }, + { + "EndDate": "2021-08-07", + "X": 869, + "Segment": "Laptop" + }, + { + "EndDate": "2021-08-07", + "X": 172, + "Segment": "Phone" + }, + { + "EndDate": "2021-08-07", + "X": 291, + "Segment": "Tablet" + }, + { + "EndDate": "2021-10-19", + "X": 231, + "Segment": "Laptop" + }, + { + "EndDate": "2021-10-19", + "X": 873, + "Segment": "Phone" + }, + { + "EndDate": "2021-10-19", + "X": 654, + "Segment": "Tablet" + }, + { + "EndDate": "2021-12-31", + "X": 293, + "Segment": "Laptop" + }, + { + "EndDate": "2021-12-31", + "X": 715, + "Segment": "Phone" + }, + { + "EndDate": "2021-12-31", + "X": 416, + "Segment": "Tablet" + }, + { + "EndDate": "2022-03-14", + "X": 492, + "Segment": "Laptop" + }, + { + "EndDate": "2022-03-14", + "X": 750, + "Segment": "Phone" + }, + { + "EndDate": "2022-03-14", + "X": 156, + "Segment": "Tablet" + }, + { + "EndDate": "2022-05-26", + "X": 597, + "Segment": "Laptop" + }, + { + "EndDate": "2022-05-26", + "X": 35, + "Segment": "Phone" + }, + { + "EndDate": "2022-05-26", + "X": 323, + "Segment": "Tablet" + }, + { + "EndDate": "2022-08-07", + "X": 780, + "Segment": "Laptop" + }, + { + "EndDate": "2022-08-07", + "X": 270, + "Segment": "Phone" + }, + { + "EndDate": "2022-08-07", + "X": 251, + "Segment": "Tablet" + }, + { + "EndDate": "2022-10-19", + "X": 460, + "Segment": "Laptop" + }, + { + "EndDate": "2022-10-19", + "X": 280, + "Segment": "Phone" + }, + { + "EndDate": "2022-10-19", + "X": 338, + "Segment": "Tablet" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/stacked-bar-chart/10-card5.flint.json b/test-harness/excel/evaluations/inputs/stacked-bar-chart/10-card5.flint.json new file mode 100644 index 00000000..95e39781 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/stacked-bar-chart/10-card5.flint.json @@ -0,0 +1,93 @@ +{ + "semantic_types": { + "Category": "Category", + "Group": "Category", + "Segment": "Category" + }, + "chart_spec": { + "chartType": "Stacked Bar Chart", + "encodings": { + "x": "Category", + "y": "Group", + "color": "Segment" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Laptop", + "Group": "USA", + "Segment": "Sales" + }, + { + "Category": "Laptop", + "Group": "UK", + "Segment": "Sales" + }, + { + "Category": "Phone", + "Group": "USA", + "Segment": "Sales" + }, + { + "Category": "Phone", + "Group": "Germany", + "Segment": "Sales" + }, + { + "Category": "Phone", + "Group": "UK", + "Segment": "Engineering" + }, + { + "Category": "Tablet", + "Group": "USA", + "Segment": "Sales" + }, + { + "Category": "Tablet", + "Group": "China", + "Segment": "Marketing" + }, + { + "Category": "Tablet", + "Group": "Germany", + "Segment": "Engineering" + }, + { + "Category": "Desktop", + "Group": "China", + "Segment": "Engineering" + }, + { + "Category": "Desktop", + "Group": "Japan", + "Segment": "Engineering" + }, + { + "Category": "Desktop", + "Group": "Germany", + "Segment": "Sales" + }, + { + "Category": "Desktop", + "Group": "UK", + "Segment": "Engineering" + }, + { + "Category": "Monitor", + "Group": "Japan", + "Segment": "Engineering" + }, + { + "Category": "Monitor", + "Group": "Germany", + "Segment": "Marketing" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/sunburst-chart/00-card0.flint.json b/test-harness/excel/evaluations/inputs/sunburst-chart/00-card0.flint.json new file mode 100644 index 00000000..e6485227 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/sunburst-chart/00-card0.flint.json @@ -0,0 +1,45 @@ +{ + "semantic_types": { + "Category": "Category", + "Amount": "Quantity" + }, + "chart_spec": { + "chartType": "Sunburst Chart", + "encodings": { + "color": "Category", + "size": "Amount" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Housing", + "Amount": 228 + }, + { + "Category": "Food", + "Amount": 1736 + }, + { + "Category": "Transport", + "Amount": 379 + }, + { + "Category": "Entertainment", + "Amount": 1340 + }, + { + "Category": "Savings", + "Amount": 2162 + }, + { + "Category": "Healthcare", + "Amount": 453 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/sunburst-chart/01-card0.flint.json b/test-harness/excel/evaluations/inputs/sunburst-chart/01-card0.flint.json new file mode 100644 index 00000000..bb63ebc1 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/sunburst-chart/01-card0.flint.json @@ -0,0 +1,73 @@ +{ + "semantic_types": { + "Department": "Category", + "Team": "Category", + "Headcount": "Quantity" + }, + "chart_spec": { + "chartType": "Sunburst Chart", + "encodings": { + "color": "Department", + "group": "Team", + "size": "Headcount" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Department": "Engineering", + "Team": "Frontend", + "Headcount": 39 + }, + { + "Department": "Engineering", + "Team": "Backend", + "Headcount": 53 + }, + { + "Department": "Engineering", + "Team": "Infra", + "Headcount": 42 + }, + { + "Department": "Engineering", + "Team": "QA", + "Headcount": 27 + }, + { + "Department": "Product", + "Team": "Design", + "Headcount": 20 + }, + { + "Department": "Product", + "Team": "PM", + "Headcount": 52 + }, + { + "Department": "Product", + "Team": "Research", + "Headcount": 42 + }, + { + "Department": "Operations", + "Team": "HR", + "Headcount": 16 + }, + { + "Department": "Operations", + "Team": "Finance", + "Headcount": 17 + }, + { + "Department": "Operations", + "Team": "Legal", + "Headcount": 28 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/sunburst-chart/02-card0.flint.json b/test-harness/excel/evaluations/inputs/sunburst-chart/02-card0.flint.json new file mode 100644 index 00000000..35a388d3 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/sunburst-chart/02-card0.flint.json @@ -0,0 +1,103 @@ +{ + "semantic_types": { + "Continent": "Category", + "Country": "Country", + "Population": "Quantity" + }, + "chart_spec": { + "chartType": "Sunburst Chart", + "encodings": { + "color": "Continent", + "group": "Country", + "size": "Population" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Continent": "North America", + "Country": "USA", + "Population": 106 + }, + { + "Continent": "North America", + "Country": "Canada", + "Population": 1209 + }, + { + "Continent": "North America", + "Country": "Mexico", + "Population": 217 + }, + { + "Continent": "Europe", + "Country": "UK", + "Population": 452 + }, + { + "Continent": "Europe", + "Country": "France", + "Population": 675 + }, + { + "Continent": "Europe", + "Country": "Germany", + "Population": 277 + }, + { + "Continent": "Europe", + "Country": "Spain", + "Population": 231 + }, + { + "Continent": "Europe", + "Country": "Italy", + "Population": 1110 + }, + { + "Continent": "Asia", + "Country": "China", + "Population": 151 + }, + { + "Continent": "Asia", + "Country": "Japan", + "Population": 671 + }, + { + "Continent": "Asia", + "Country": "India", + "Population": 762 + }, + { + "Continent": "Asia", + "Country": "Korea", + "Population": 86 + }, + { + "Continent": "Asia", + "Country": "Thailand", + "Population": 1128 + }, + { + "Continent": "South America", + "Country": "Brazil", + "Population": 210 + }, + { + "Continent": "South America", + "Country": "Argentina", + "Population": 818 + }, + { + "Continent": "South America", + "Country": "Chile", + "Population": 1349 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/treemap/00-card0.flint.json b/test-harness/excel/evaluations/inputs/treemap/00-card0.flint.json new file mode 100644 index 00000000..23cb1729 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/treemap/00-card0.flint.json @@ -0,0 +1,45 @@ +{ + "semantic_types": { + "Sector": "Category", + "MarketCap": "Quantity" + }, + "chart_spec": { + "chartType": "Treemap", + "encodings": { + "color": "Sector", + "size": "MarketCap" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Sector": "Technology", + "MarketCap": 560 + }, + { + "Sector": "Healthcare", + "MarketCap": 3264 + }, + { + "Sector": "Finance", + "MarketCap": 2881 + }, + { + "Sector": "Energy", + "MarketCap": 3674 + }, + { + "Sector": "Consumer", + "MarketCap": 3669 + }, + { + "Sector": "Industrials", + "MarketCap": 1538 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/treemap/01-card0.flint.json b/test-harness/excel/evaluations/inputs/treemap/01-card0.flint.json new file mode 100644 index 00000000..5fad82a9 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/treemap/01-card0.flint.json @@ -0,0 +1,83 @@ +{ + "semantic_types": { + "Region": "Category", + "Country": "Country", + "Revenue": "Amount" + }, + "chart_spec": { + "chartType": "Treemap", + "encodings": { + "color": "Region", + "detail": "Country", + "size": "Revenue" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Region": "Americas", + "Country": "USA", + "Revenue": 2052 + }, + { + "Region": "Americas", + "Country": "Canada", + "Revenue": 240 + }, + { + "Region": "Americas", + "Country": "Brazil", + "Revenue": 1708 + }, + { + "Region": "Americas", + "Country": "Mexico", + "Revenue": 2056 + }, + { + "Region": "Europe", + "Country": "UK", + "Revenue": 2007 + }, + { + "Region": "Europe", + "Country": "Germany", + "Revenue": 116 + }, + { + "Region": "Europe", + "Country": "France", + "Revenue": 1382 + }, + { + "Region": "Europe", + "Country": "Italy", + "Revenue": 1645 + }, + { + "Region": "Asia", + "Country": "China", + "Revenue": 1870 + }, + { + "Region": "Asia", + "Country": "Japan", + "Revenue": 1081 + }, + { + "Region": "Asia", + "Country": "India", + "Revenue": 2008 + }, + { + "Region": "Asia", + "Country": "Korea", + "Revenue": 274 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/treemap/02-card0.flint.json b/test-harness/excel/evaluations/inputs/treemap/02-card0.flint.json new file mode 100644 index 00000000..56db1fa9 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/treemap/02-card0.flint.json @@ -0,0 +1,81 @@ +{ + "semantic_types": { + "Item": "Category", + "Size": "Quantity" + }, + "chart_spec": { + "chartType": "Treemap", + "encodings": { + "color": "Item", + "size": "Size" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Item": "Electronics", + "Size": 453 + }, + { + "Item": "Clothing", + "Size": 366 + }, + { + "Item": "Food", + "Size": 413 + }, + { + "Item": "Books", + "Size": 307 + }, + { + "Item": "Sports", + "Size": 180 + }, + { + "Item": "Home", + "Size": 421 + }, + { + "Item": "Garden", + "Size": 292 + }, + { + "Item": "Auto", + "Size": 439 + }, + { + "Item": "Health", + "Size": 220 + }, + { + "Item": "Beauty", + "Size": 381 + }, + { + "Item": "Toys", + "Size": 149 + }, + { + "Item": "Music", + "Size": 62 + }, + { + "Item": "Movies", + "Size": 323 + }, + { + "Item": "Software", + "Size": 418 + }, + { + "Item": "Games", + "Size": 135 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/waterfall-chart/00-card6.flint.json b/test-harness/excel/evaluations/inputs/waterfall-chart/00-card6.flint.json new file mode 100644 index 00000000..5039168c --- /dev/null +++ b/test-harness/excel/evaluations/inputs/waterfall-chart/00-card6.flint.json @@ -0,0 +1,45 @@ +{ + "semantic_types": { + "Category": "Category", + "Amount": "Quantity" + }, + "chart_spec": { + "chartType": "Waterfall Chart", + "encodings": { + "x": "Category", + "y": "Amount" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Category": "Revenue", + "Amount": 1000 + }, + { + "Category": "COGS", + "Amount": -400 + }, + { + "Category": "Gross Profit", + "Amount": -150 + }, + { + "Category": "Operating Exp", + "Amount": -200 + }, + { + "Category": "Tax", + "Amount": -80 + }, + { + "Category": "Net Income", + "Amount": 170 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/waterfall-chart/01-card7.flint.json b/test-harness/excel/evaluations/inputs/waterfall-chart/01-card7.flint.json new file mode 100644 index 00000000..e09f3162 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/waterfall-chart/01-card7.flint.json @@ -0,0 +1,58 @@ +{ + "semantic_types": { + "Step": "Category", + "Value": "Quantity", + "Type": "Category" + }, + "chart_spec": { + "chartType": "Waterfall Chart", + "encodings": { + "x": "Step", + "y": "Value", + "color": "Type" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Step": "Starting Balance", + "Value": 5000, + "Type": "start" + }, + { + "Step": "Sales", + "Value": 2200, + "Type": "delta" + }, + { + "Step": "Returns", + "Value": -350, + "Type": "delta" + }, + { + "Step": "Payroll", + "Value": -1800, + "Type": "delta" + }, + { + "Step": "Rent", + "Value": -600, + "Type": "delta" + }, + { + "Step": "Marketing", + "Value": -400, + "Type": "delta" + }, + { + "Step": "Ending Balance", + "Value": 4050, + "Type": "end" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/waterfall-chart/02-card7.flint.json b/test-harness/excel/evaluations/inputs/waterfall-chart/02-card7.flint.json new file mode 100644 index 00000000..4d3d8122 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/waterfall-chart/02-card7.flint.json @@ -0,0 +1,49 @@ +{ + "semantic_types": { + "Department": "Category", + "Variance": "Quantity" + }, + "chart_spec": { + "chartType": "Waterfall Chart", + "encodings": { + "x": "Department", + "y": "Variance" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Department": "Engineering", + "Variance": 120 + }, + { + "Department": "Sales", + "Variance": -45 + }, + { + "Department": "Marketing", + "Variance": -80 + }, + { + "Department": "Operations", + "Variance": 35 + }, + { + "Department": "HR", + "Variance": -20 + }, + { + "Department": "Finance", + "Variance": 15 + }, + { + "Department": "Support", + "Variance": -30 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/waterfall-chart/03-card14.flint.json b/test-harness/excel/evaluations/inputs/waterfall-chart/03-card14.flint.json new file mode 100644 index 00000000..0e5e8802 --- /dev/null +++ b/test-harness/excel/evaluations/inputs/waterfall-chart/03-card14.flint.json @@ -0,0 +1,93 @@ +{ + "semantic_types": { + "Month": "Category", + "Amount": "Quantity", + "Type": "Category" + }, + "chart_spec": { + "chartType": "Waterfall Chart", + "encodings": { + "x": "Month", + "y": "Amount", + "color": "Type" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Month": "Opening", + "Amount": 10000, + "Type": "start" + }, + { + "Month": "Jan", + "Amount": 500, + "Type": "delta" + }, + { + "Month": "Feb", + "Amount": 200, + "Type": "delta" + }, + { + "Month": "Mar", + "Amount": -150, + "Type": "delta" + }, + { + "Month": "Apr", + "Amount": 300, + "Type": "delta" + }, + { + "Month": "May", + "Amount": -100, + "Type": "delta" + }, + { + "Month": "Jun", + "Amount": -250, + "Type": "delta" + }, + { + "Month": "Jul", + "Amount": 400, + "Type": "delta" + }, + { + "Month": "Aug", + "Amount": 150, + "Type": "delta" + }, + { + "Month": "Sep", + "Amount": -300, + "Type": "delta" + }, + { + "Month": "Oct", + "Amount": 200, + "Type": "delta" + }, + { + "Month": "Nov", + "Amount": -50, + "Type": "delta" + }, + { + "Month": "Dec", + "Amount": 100, + "Type": "delta" + }, + { + "Month": "Closing", + "Amount": 11000, + "Type": "end" + } + ] + } +} diff --git a/test-harness/excel/evaluations/inputs/waterfall-chart/04-card4.flint.json b/test-harness/excel/evaluations/inputs/waterfall-chart/04-card4.flint.json new file mode 100644 index 00000000..cc157a7c --- /dev/null +++ b/test-harness/excel/evaluations/inputs/waterfall-chart/04-card4.flint.json @@ -0,0 +1,37 @@ +{ + "semantic_types": { + "Quarter": "Category", + "Change": "Quantity" + }, + "chart_spec": { + "chartType": "Waterfall Chart", + "encodings": { + "x": "Quarter", + "y": "Change" + }, + "baseSize": { + "width": 560, + "height": 360 + } + }, + "data": { + "values": [ + { + "Quarter": "Q1", + "Change": 300 + }, + { + "Quarter": "Q2", + "Change": 150 + }, + { + "Quarter": "Q3", + "Change": -100 + }, + { + "Quarter": "Q4", + "Change": 200 + } + ] + } +} diff --git a/test-harness/excel/evaluations/inspection-list.md b/test-harness/excel/evaluations/inspection-list.md new file mode 100644 index 00000000..3decc3f5 --- /dev/null +++ b/test-harness/excel/evaluations/inspection-list.md @@ -0,0 +1,332 @@ +# Excel backend inspection list + +This is the case-by-case visual audit for the native Excel backend. Each row compares the Office.js PNG with Flint's canonical rendering: Vega-Lite where available, otherwise the chart's ECharts implementation. + +Status: + +- `PENDING`: not yet visually inspected. +- `PASS`: rendered and visually acceptable in Excel's native design language. +- `FIXED`: a mismatch was repaired and the output passed a second visual inspection. +- `FAIL`: defect reproduced; repair is in progress. +- `SKIP`: unsupported by native Office.js charts, or still unresolved after 10 focused repair attempts; the blocker is recorded. + +A transport success alone is not a pass. Inspection covers field roles, orientation, grouping/stacking, aggregation, category order, labels, axes, legend, cardinality, and whether the Excel-native construction preserves the same reading as the Vega-Lite reference. + +## Progress + +| Chart type | Cases | Inspected | Passed/fixed | Failed | Skipped | +| --- | ---: | ---: | ---: | ---: | ---: | +| Bar Chart | 19 | 19 | 16 | 0 | 3 | +| Grouped Bar Chart | 15 | 15 | 12 | 0 | 3 | +| Stacked Bar Chart | 11 | 11 | 9 | 0 | 2 | +| Line Chart | 18 | 18 | 13 | 0 | 5 | +| Area Chart | 12 | 12 | 12 | 0 | 0 | +| Scatter Plot | 26 | 26 | 12 | 0 | 14 | +| Pie Chart | 4 | 4 | 4 | 0 | 0 | +| Donut Chart | 4 | 4 | 4 | 0 | 0 | +| Histogram | 3 | 3 | 3 | 0 | 0 | +| Boxplot | 10 | 10 | 3 | 0 | 7 | +| Heatmap | 9 | 9 | 0 | 0 | 9 | +| Radar Chart | 6 | 6 | 6 | 0 | 0 | +| Waterfall Chart | 5 | 5 | 2 | 0 | 3 | +| Funnel Chart | 3 | 3 | 3 | 0 | 0 | +| Treemap | 3 | 3 | 3 | 0 | 0 | +| Sunburst Chart | 3 | 3 | 3 | 0 | 0 | +| Connected Scatter Plot | 8 | 8 | 7 | 0 | 1 | +| **Total** | **159** | **159** | **112** | **0** | **47** | + +## Candlestick Chart (dedicated audit) + +These cases were rendered after the main catalog audit and do not change the +progress totals above. Both use native `StockOHLC` through `sheet.charts.add`. +Configured VLM review was skipped because no workspace `.env` provided a VLM +endpoint and credential; the generated side-by-side images were inspected +directly. + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| basic-30-day | FIXED | 2 | Native `A1:E31` Date/Open/High/Low/Close range preserves all bodies, wicks, chronology, and the price trajectory. Excel serial dates render as a true date axis. A focused Low-to-High value scale removed native zero anchoring. | +| advanced-90-day-dense | FIXED | 3 | Native `A1:E91` preserves all 90 OHLC rows and the canonical trend. UTC fixture generation removed a DST duplicate; native tick spacing keeps the dense date axis readable, and the focused price scale prevents vertical compression. | + +Artifacts and the reproducible runner are under +`test-harness/excel/evaluations/out/candlestick-audit` and +`test-harness/excel/evaluations/candlestick-audit.mjs`. + +## Bar Chart + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card5 | PASS | 1 | Five-category vertical bar preserves category order and values. | +| 01-card20 | PASS | 1 | Twenty nominal categories remain readable in the expanded native layout. | +| 02-card20 | PASS | 1 | Alternate 20-category value sequence preserves all bars and labels. | +| 03-card100 | PASS | 1 | Dense 100-category column chart preserves cardinality and value pattern with native sparse labeling. | +| 04-card5 | PASS | 1 | Three-series stacked columns preserve category totals and segment composition. | +| 05-card5 | PASS | 1 | Twenty-series stack preserves every segment and exposes a complete wrapped legend. | +| 06-card10 | PASS | 1 | Horizontal bars retain source category order, values, and zero baseline. | +| 07-card96 | FIXED | 4 | Reused Flint overflow ranking, retained its kept-value order, and emitted a density-aware 5 pt category-axis font; all 81 retained labels are visible. | +| 08-card29 | PASS | 1 | Horizontal three-segment stacks preserve category totals and composition. | +| 09-card24 | PASS | 1 | Temporal bars retain chronological order and all 24 values. | +| 10-card100 | PASS | 1 | Dense temporal bars preserve chronological progression and value pattern. | +| 11-card24 | PASS | 1 | Temporal three-series stacks preserve dates, totals, and segment identities. | +| 12-card18 | PASS | 1 | Horizontal temporal bars preserve the continuous-time ordering in native category form. | +| 13-card53 | PASS | 1 | Horizontal temporal stacks preserve date order, totals, and three segment identities. | +| 14-card20 | PASS | 1 | Quantitative X treated as ordered categories preserves all 20 positions and values. | +| 15-card30 | PASS | 1 | Transposed quantitative categories preserve the 30-position sequence and values. | +| 16-card5 | SKIP | 1 | No quantitative measure axis; the former occupancy matrix required a worksheet heatmap rather than a native chart. | +| 17-card25 | SKIP | 1 | No quantitative measure axis; the former date/group occupancy matrix required worksheet rendering. | +| 18-card5 | SKIP | 1 | No quantitative measure axis; native Excel bars cannot encode category-by-end-date occupancy. | + +## Grouped Bar Chart + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card4 | PASS | 1 | Three native semantic series preserve all category/group/value tuples. | +| 01-card8 | PASS | 1 | Group-equals-category degenerates cleanly to one value per category. | +| 02-card90 | PASS | 1 | Dense three-series grouping preserves the retained categories, values, and complete legend. | +| 03-card6 | PASS | 1 | Ordered groups retain five light-to-dark native series and all values. | +| 04-card12 | FIXED | 3 | Temporal categories remain chronological; a balanced native gap clearly separates adjacent three-bar groups without isolating them. | +| 05-card5 | FIXED | 3 | Quantitative categories remain ordered; four bars stay adjacent within each group while a moderate gap separates groups. | +| 06-card24 | PASS | 1 | Horizontal grouped bars preserve category order, four series, and values. | +| 07-card30 | PASS | 1 | Horizontal temporal grouping preserves chronology, series identities, and values. | +| 08-card8 | SKIP | 0 | Continuous grouping is not a native clustered-bar series role. | +| 09-card5 | SKIP | 0 | Continuous grouping is not a native clustered-bar series role. | +| 10-card5 | SKIP | 0 | No quantitative measure axis for a native clustered bar chart. | +| 11-card5 | PASS | 1 | Group-equals-category degenerates to one semantic-colored bar per category; order and values match the reference. | +| 12-card6 | FIXED | 5 | Native clustered chart preserves all 14 region/channel values as four semantic series with null gaps and a complete Excel legend. | +| 13-card6 | FIXED | 3 | Native semantic series with null gaps preserve sparse channel identities, order, and values. | +| 14-card6 | FIXED | 3 | Alternate sparse ordering preserves all semantic series and values with the complete native legend. | + +## Stacked Bar Chart + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card4 | PASS | 1 | Three native series preserve segment values and category totals. | +| 01-card15 | PASS | 1 | Five-series stacks preserve all segment identities, values, and totals. | +| 02-card80 | PASS | 1 | Dense three-series stacks retain the kept categories and complete legend. | +| 03-card6 | PASS | 1 | Ordered stack groups preserve sequential colors, values, and totals. | +| 04-card5 | SKIP | 0 | Continuous color cannot be represented as native stacked-bar series. | +| 05-card10 | PASS | 1 | Temporal stacks remain chronological with three semantic series. | +| 06-card20 | PASS | 1 | Dense temporal four-series stacks preserve chronology and totals. | +| 07-card10 | PASS | 1 | Quantitative category stacks preserve ordered positions and three series. | +| 08-card23 | PASS | 1 | Horizontal three-series stacks preserve category order and totals. | +| 09-card43 | PASS | 1 | Horizontal temporal stacks preserve chronological order and segment composition. | +| 10-card5 | SKIP | 0 | No quantitative measure axis for a native stacked bar chart. | + +## Line Chart + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card30 | PASS | 1 | Native temporal line preserves the trajectory and chronological order. | +| 01-card50 | PASS | 1 | Four temporal series preserve their trajectories, identities, and legend. | +| 02-card100 | PASS | 1 | Eight temporal series preserve all trajectories and legend identities. | +| 03-card200 | PASS | 1 | Dense twenty-series temporal chart remains semantically complete in native Excel. | +| 04-card60 | PASS | 1 | Three temporal series preserve values, chronology, and identities. | +| 05-card30 | SKIP | 3 | Continuous color required a worksheet overlay; native Excel line series cannot encode it. | +| 06-card5 | PASS | 1 | Five ordinal stages preserve order and values in a native line. | +| 07-card12 | PASS | 1 | Four ordinal-stage series preserve trajectories and legend identities. | +| 08-card30 | PASS | 1 | Dense ordinal stages preserve order and the full trajectory. | +| 09-card5 | SKIP | 2 | Continuous color required worksheet markers; native Excel line series cannot encode it. | +| 10-card5 | SKIP | 2 | Categorical Y requires worksheet band geometry; native Excel line charts require quantitative Y. | +| 11-card12 | SKIP | 2 | Categorical Y cannot be represented by a native Excel line value axis. | +| 12-card30 | SKIP | 2 | Quantitative X with ordinal Y cannot be represented by a native Excel XY line chart. | +| 13-card30 | PASS | 1 | Native XY line preserves quantitative-X spacing, values, and trajectory. | +| 14-card50 | PASS | 1 | Three native XY series preserve quantitative-X trajectories and identities. | +| 15-card200 | PASS | 1 | Dense native XY series preserves all points and trajectory. | +| 16-card16 | PASS | 1 | Actual-to-forecast handoff remains continuous with solid and dashed native series. | +| 17-card13 | PASS | 1 | Three product trajectories preserve distinct actual/forecast dash handoffs. | + +## Area Chart + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card30 | PASS | 1 | Native temporal area preserves the trajectory, chronology, and zero baseline. | +| 01-card24 | PASS | 1 | Four stacked temporal areas preserve series composition and totals. | +| 02-card60 | PASS | 1 | Eight stacked temporal areas preserve composition, chronology, and legend identities. | +| 03-card120 | PASS | 1 | Dense fifteen-series area preserves all stacked contributions and total progression. | +| 04-card40 | PASS | 1 | Three stacked temporal series preserve shape, composition, and totals. | +| 05-card60 | PASS | 1 | Alternate three-series temporal stack preserves all trajectories and totals. | +| 06-card5 | PASS | 1 | Five ordinal stages preserve order and area values. | +| 07-card12 | PASS | 1 | Four ordinal-stage areas preserve stack composition and totals. | +| 08-card30 | PASS | 1 | Dense ordinal stages preserve order and full area trajectory. | +| 09-card30 | FIXED | 2 | Resampled quantitative X onto a uniform native-Area grid and reduced the category axis to exact domain quartiles. | +| 10-card50 | FIXED | 3 | Uniform numeric resampling preserves three stacked series while replacing dense inferred labels with `0, 25, 50, 75, 100`. | +| 11-card200 | FIXED | 2 | Dense 200-point Area now preserves continuous-X spacing and readable quartile labels through bounded interpolation. | + +## Scatter Plot + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card20 | PASS | 1 | Native Scatter preserves all quantitative X/Y positions. | +| 01-card20 | PASS | 1 | Three discrete segment series preserve positions and identities. | +| 02-card20 | SKIP | 1 | Quantitative color was dropped by the native chart; Office.js Scatter has no continuous color scale. | +| 03-card30 | SKIP | 1 | Temporal color became one series per timestamp; Office.js Scatter has no continuous color scale. | +| 04-card47 | PASS | 4 | Native Bubble preserves all positions and quantitative size ordering. | +| 05-card20 | PASS | 4 | Native Bubble preserves positions and four ordinal size levels. | +| 06-card15 | FIXED | 4 | Native Bubble preserves all 15 X/Y positions, three segment series, and quantitative size ordering without worksheet shapes. | +| 07-card30 | SKIP | 1 | Native Bubble preserves size but cannot also encode the continuous color scale. | +| 08-card20 | PASS | 5 | Twenty discrete Bubble series preserve positions, relative sizes, identities, and native legend entries. | +| 09-card91 | PASS | 1 | Native Scatter preserves the full 91-point distribution. | +| 10-card395 | PASS | 1 | Dense native Scatter preserves the full distribution without visible loss. | +| 11-card182 | PASS | 1 | Twenty discrete series preserve positions, colors, and legend identities. | +| 12-card96 | PASS | 1 | High-cardinality discrete series preserve positions and identity assignment in the expanded native legend. | +| 13-card10 | FIXED | 5 | Current native rerender applies focused X `20–100` and Y `0–100` bounds, removing the stale automatic `-20–120` margins while preserving positions and size ordering. | +| 14-card187 | FIXED | 5 | Current native rerender applies focused `0–100` bounds on both axes and preserves all positions and relative bubble sizes without worksheet shapes. | +| 15-card5 | SKIP | 0 | Native Excel Scatter requires quantitative X and Y axes. | +| 16-card5 | SKIP | 0 | Native Excel Scatter requires quantitative X and Y axes. | +| 17-card2 | SKIP | 0 | Native Excel Scatter requires quantitative X and Y axes. | +| 18-card60 | SKIP | 0 | Native Excel Scatter requires quantitative X and Y axes. | +| 19-card24 | SKIP | 0 | Native Excel Scatter requires quantitative X and Y axes. | +| 20-card23 | SKIP | 3 | Categorical Y required worksheet geometry; native Excel Bubble requires quantitative X and Y. | +| 21-card59 | SKIP | 0 | Native Excel Scatter requires quantitative X and Y axes. | +| 22-card5 | SKIP | 0 | Native Excel Scatter requires quantitative X and Y axes. | +| 23-card4 | SKIP | 0 | Native Excel Scatter requires quantitative X and Y axes. | +| 24-card15 | SKIP | 0 | Native Excel Scatter requires quantitative X and Y axes. | +| 25-card40 | SKIP | 0 | Office.js native charts do not expose Flint's shape encoding. | + +## Pie Chart + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card0 | PASS | 1 | Native Pie preserves all four category proportions and identities. | +| 01-card0 | PASS | 1 | Ten-category Pie preserves proportions and legend identities. | +| 02-card0 | PASS | 1 | Twenty-category Pie remains complete with readable native legend entries. | +| 03-card0 | PASS | 1 | Dominant and tiny slices preserve their strong proportional contrast. | + +## Donut Chart + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card0 | PASS | 1 | Native Doughnut preserves all four category proportions, identities, and the annular reading. | +| 01-card0 | PASS | 1 | Ten-category Doughnut preserves proportions and complete native legend identities. | +| 02-card0 | PASS | 1 | Twenty-category Doughnut remains complete with readable native legend entries. | +| 03-card0 | PASS | 1 | Dominant and tiny slices preserve their strong proportional contrast in the native ring. | + +## Histogram + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card49 | PASS | 1 | Native columns preserve all bin boundaries and record counts. | +| 01-card42 | PASS | 1 | Stacked native columns preserve gender contributions and total counts per bin. | +| 02-card997 | PASS | 1 | Dense histogram preserves all ten bins and their count distribution. | + +## Boxplot + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card5 | PASS | 1 | Five native boxes preserve all 150 raw observations, category order, medians, inclusive quartiles, and whiskers. | +| 01-card5 | PASS | 1 | Quantitative rank values are retained as five category labels with their complete score distributions. | +| 02-card12 | PASS | 1 | Twelve native boxes preserve all 600 salary observations and remain readable at the expanded width. | +| 03-card4 | SKIP | 1 | Flattened pair labels emit all eight boxes and separator gaps, but lose subgroup legend/color identity and native hierarchy; indexed point fills leave boxes uniform. | +| 04-card6 | SKIP | 1 | Four-subgroup distributions have the same native pooling/inversion blocker; multi-level headers become concatenated series names, not grouped category labels. | +| 05-card8 | SKIP | 1 | Five-subgroup distributions have the same native blocker; no one-chart range preserves both category boundaries and subgroup identity. | +| 06-card6 | SKIP | 1 | Redundant color still cannot be mapped to reliable native per-category coloring without changing the BoxWhisker range reading. | +| 07-card6 | SKIP | 1 | Nested color groups remain rejected: pair-per-column ranges create series of single-value ticks instead of one distribution per occupied pair. | +| 08-card6 | SKIP | 1 | Sparse 6x5: flattened labels emit exactly fourteen occupied boxes with gaps but no subgroup identity/hierarchy; point fills have no visible effect and full null padding exposes thirty identities. | +| 09-card6 | SKIP | 1 | Alternate nested groups share the proven native limitation and remain rejected rather than flattened or pooled. | + +The seven production gallery cases remain skipped, so the 159-case audit totals +are unchanged. + +## Heatmap + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card5 | SKIP | 2 | Office.js has no native Heatmap chart type; worksheet conditional formatting is outside the backend contract. | +| 01-card10 | SKIP | 1 | Office.js has no native Heatmap chart type. | +| 02-card50 | SKIP | 1 | Office.js has no native Heatmap chart type. | +| 03-card12 | SKIP | 1 | Office.js has no native Heatmap chart type. | +| 04-card80 | SKIP | 2 | Office.js has no native Heatmap chart type. | +| 05-card5 | SKIP | 1 | Office.js has no native Heatmap chart type. | +| 06-card60 | SKIP | 2 | Office.js has no native Heatmap chart type. | +| 07-card80 | SKIP | 1 | Office.js has no native Heatmap chart type. | +| 08-card5 | SKIP | 1 | Office.js has no native Heatmap chart type. | + +## Radar Chart + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card5 | FIXED | 2 | Replaced opaque `RadarFilled` with native `RadarMarkers`; the single-series profile and vertices remain clear. | +| 01-card6 | FIXED | 2 | Native outline series preserve both team profiles without the later series hiding the earlier polygon. | +| 02-card5 | PASS | 1 | Three native marker series preserve all product profiles, intersections, and legend identities. | +| 04-card5 | FIXED | 2 | Native outline series preserve both product profiles and keep all long metric labels visible. | +| 05-card8 | FIXED | 2 | Eight-axis outlines preserve both contrasting KPI profiles without solid-fill occlusion. | +| 06-card12 | FIXED | 2 | Twelve-axis outlines keep all three dense series distinguishable and retain complete labels and legend identities. | + +## Waterfall Chart + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card6 | SKIP | 1 | The income-statement sequence requires a final total; Office.js does not expose Waterfall total-point semantics. | +| 01-card7 | SKIP | 1 | Explicit start/delta/end roles require a non-initial total point, which Office.js cannot mark. | +| 02-card7 | PASS | 1 | Native Waterfall preserves department order, positive and negative variances, cumulative levels, value labels, and connector lines. | +| 03-card14 | SKIP | 1 | The opening-to-closing monthly flow requires a closing total point, which Office.js cannot mark. | +| 04-card4 | PASS | 1 | Native Waterfall preserves quarterly order, signed changes, cumulative levels, value labels, and connector lines. | + +## Funnel Chart + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card5 | PASS | 1 | Native Funnel preserves the descending sales-pipeline stage order, values, labels, and relative widths. | +| 01-card5 | PASS | 1 | Pre-sorted ascending values produce the intended inverted recruitment funnel with all stages and values preserved. | +| 02-card8 | PASS | 1 | Eight native stages remain legible and preserve the full marketing sequence and relative widths. | + +Funnel now explicitly emits centered white 11-point value labels over a single +Office blue series fill. The existing real-Excel cases already demonstrate that +this placement remains readable on both wide and narrow stages; a refreshed +render is pending taskpane availability to verify the explicit font properties. + +## Pyramid Chart (audit pending) + +The compiler emits Flint's two-group population pyramid as a native 2D +`BarStacked` chart with one mirrored series, one positive series, symmetric +numeric bounds, absolute-value tick labels, and stable blue/red group colors. +Seven valid gallery fixtures and one intentional negative-value rejection case +are generated under `evaluations/inputs/pyramid-chart`. Compiler, type, build, and +Office.js generator tests pass. Real-Excel visual qualification remains pending +because the macOS add-in taskpane did not resume polling during this audit run. + +## Treemap + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card0 | PASS | 1 | Flat native Treemap preserves all sector labels and market-cap area relationships with Excel-native packing. | +| 01-card0 | FIXED | 2 | Hierarchy columns now count as category levels rather than series; Region parents, Country leaves, and revenue areas all render natively. | +| 02-card0 | PASS | 1 | Fifteen native leaves preserve labels and relative areas without crowding failures. | + +## Sunburst Chart + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card0 | PASS | 1 | Flat native Sunburst preserves every budget category and proportional allocation. | +| 01-card0 | PASS | 1 | Department parents and Team leaves occupy the correct two native rings with preserved values and labels. | +| 02-card0 | PASS | 1 | Four continent parents and sixteen country leaves retain hierarchy, values, and readable ring geometry. | + +## Connected Scatter Plot + +| Case | Status | Attempts | Finding / fix | +| --- | --- | ---: | --- | +| 00-card9 | PASS | 1 | Native XY lines preserve the ten-year non-monotonic unemployment/inflation trajectory in explicit Year order. | +| 01-card21 | PASS | 1 | Three native color series preserve country identities, all points, and independent ordered trajectories. | +| 02-card12 | PASS | 1 | ISO-date ordering preserves the complete monthly price/volume trajectory instead of sorting by X. | +| 03-card12 | PASS | 1 | The defining self-crossing figure-eight follows Step order and retains its central crossing. | +| 04-card15 | PASS | 1 | Two experiment series preserve numeric Step order, values, markers, and legend identities. | +| 05-card4 | PASS | 1 | The minimal four-point trajectory preserves its explicit non-monotonic sequence. | +| 06-card35 | PASS | 1 | The dense 35-point spiral preserves every marker and the complete inward path. | +| 07-card24 | SKIP | 0 | Native Excel can render multiple color series, but Flint's unlegended detail trajectory role is intentionally rejected rather than promoted to a visible legend. | + +## Audit notes + +- Excel-native styling is allowed to differ from Vega-Lite palettes, but semantic roles and the visual reading must agree. +- Every successful output must be created by `sheet.charts.add(...)` and captured by `chart.getImage()`; ranges, shapes, and composite images are not backend output. +- Native Bubble charts replace the former worksheet point composites. The current Scatter rerender confirms explicit focused axis bounds are applied in real Excel. +- Native BoxWhisker consumes Flint's raw category/value observations and computes inclusive quartiles in Excel. Color-grouped subgroup boxes remain explicitly unsupported pending a faithful native range mapping. +- Native Waterfall is supported for delta sequences and an initial total. Office.js does not expose Excel's “Set as Total” point command, so later/final totals are rejected. +- Native Doughnut preserves part-to-whole semantics and applies Flint's inner radius through `ChartSeries.doughnutHoleSize`. +- Native Radar normalizes each metric by its Flint-compatible nice maximum because Excel exposes one shared radial scale. The category labels retain those maxima so the resulting polygon preserves Flint's per-metric geometry without hiding the original scale. Excel's UI and OOXML can store transparent series fills, but the direct Office.js `ChartFill` API exposes only solid-color operations. Flint therefore renders filled Radar requests as `RadarMarkers` to prevent series occlusion. A proof workbook with DrawingML `` confirmed the native capability; importing generated OOXML worksheets is deferred because it would be a separate rendering path from the current `charts.add()` architecture. +- Native Funnel, Treemap, and Sunburst use Flint's ECharts implementations as audit references because those chart identities have no Vega-Lite template. Native geometry, packing, and palette may differ while order, hierarchy, labels, and value/area readings must agree. +- Native Connected Scatter sorts each trajectory by its explicit order field before binding `XYScatterLines`; sorting by X would corrupt loops and backtracking paths. Discrete color is supported as native series, while unlegended detail remains an explicit gap. +- Native Pareto is not supported. The first bounded `Pareto` probe caused Excel for Mac to exit before Office.js returned a PNG or catchable error. Its executable probe and renderer aliases were removed; the server and taskpane retain only a pre-render quarantine for stale or external jobs. +- Bullet remains deferred after a bounded Office.js probe: a faithful target tick needs a mixed bar/scatter chart with secondary-axis alignment and custom marker geometry, which is not a modest extension of the current one-family native renderer. +- Dynamic-layout audit: six real Excel charts confirm that the host applies Flint's optimized dimensions within a 320×220 to 1600×900 render envelope. All tested rows survive; Bar sizing changes regime between 24 and 80 categories rather than growing monotonically, while the tested Line date/series matrix grows steadily. +- Facet audit: production `assembleExcel` rejects `column` and `row` centrally. An experimental 20-chart Office.js composition successfully reproduced column, row, 2×2, and wrapped 5×2 grids after imposing shared global numeric scales. Faceting therefore remains a future worksheet-level multi-chart artifact, not one native chart. +- Any row still failing after 10 focused repair attempts becomes `SKIP` with its blocker recorded here. diff --git a/test-harness/excel/evaluations/layout-facet-audit.mjs b/test-harness/excel/evaluations/layout-facet-audit.mjs new file mode 100644 index 00000000..5cda460b --- /dev/null +++ b/test-harness/excel/evaluations/layout-facet-audit.mjs @@ -0,0 +1,337 @@ +#!/usr/bin/env node +// @ts-nocheck + +import { execFileSync } from 'node:child_process'; +import { mkdirSync, rmSync, writeFileSync } from 'node:fs'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { renderChart } from 'flint-chart-mcp/render'; +import { assembleExcel } from 'flint-chart/excel'; +import { renderExcelArtifact } from './render-client.mjs'; + +const here = dirname(fileURLToPath(import.meta.url)); +const outDir = join(here, 'out', 'layout-facet-audit'); +const tempDir = join(outDir, 'temp'); +const scale = 3; +const clamp = (value, minimum, maximum) => Math.max(minimum, Math.min(maximum, Math.round(value))); + +rmSync(outDir, { recursive: true, force: true }); +mkdirSync(tempDir, { recursive: true }); + +function runMagick(args) { + execFileSync('magick', args, { stdio: 'pipe' }); +} + +function barInput(count) { + return { + data: { + values: Array.from({ length: count }, (_value, index) => ({ + Category: `Category ${index + 1}`, + Value: 40 + ((index * 37) % 180), + })), + }, + semantic_types: { Category: 'Category', Value: 'Quantity' }, + chart_spec: { + chartType: 'Bar Chart', + encodings: { x: 'Category', y: 'Value' }, + baseSize: { width: 400, height: 300 }, + }, + }; +} + +function lineInput(dateCount, seriesCount) { + const values = []; + for (let seriesIndex = 0; seriesIndex < seriesCount; seriesIndex += 1) { + for (let dateIndex = 0; dateIndex < dateCount; dateIndex += 1) { + const date = new Date(Date.UTC(2020, 0, 1 + dateIndex)); + values.push({ + Date: date.toISOString().slice(0, 10), + Series: `Series ${seriesIndex + 1}`, + Value: Math.round(100 + seriesIndex * 18 + dateIndex * 1.7 + Math.sin((dateIndex + seriesIndex) / 4) * 24), + }); + } + } + return { + data: { values }, + semantic_types: { Date: 'Date', Series: 'Category', Value: 'Quantity' }, + chart_spec: { + chartType: 'Line Chart', + encodings: { x: 'Date', y: 'Value', color: 'Series' }, + baseSize: { width: 400, height: 300 }, + }, + }; +} + +const dynamicCases = [ + { name: 'bar-04', label: 'Bar · 4 categories', family: 'bar', input: barInput(4) }, + { name: 'bar-24', label: 'Bar · 24 categories', family: 'bar', input: barInput(24) }, + { name: 'bar-80', label: 'Bar · 80 categories', family: 'bar', input: barInput(80) }, + { name: 'line-12x1', label: 'Line · 12 dates × 1 series', family: 'line', input: lineInput(12, 1) }, + { name: 'line-60x8', label: 'Line · 60 dates × 8 series', family: 'line', input: lineInput(60, 8) }, + { name: 'line-120x20', label: 'Line · 120 dates × 20 series', family: 'line', input: lineInput(120, 20) }, +]; + +async function runDynamicAudit() { + const results = []; + for (const item of dynamicCases) { + const reference = await renderChart(item.input, 'vegalite', { format: 'png', scale }); + const spec = assembleExcel(item.input); + const authoredSize = { width: spec.width, height: spec.height }; + spec.width = clamp(reference.width, 320, 1600); + spec.height = clamp(reference.height, 220, 900); + const excel = await renderExcelArtifact(spec, { scale }); + const referencePath = join(outDir, `${item.name}.reference.png`); + const excelPath = join(outDir, `${item.name}.excel.png`); + writeFileSync(referencePath, reference.buffer); + writeFileSync(excelPath, excel); + results.push({ + name: item.name, + label: item.label, + family: item.family, + authoredSize, + optimizedSize: { width: reference.width, height: reference.height }, + appliedExcelSize: { width: spec.width, height: spec.height }, + excelType: spec.chartType, + retainedRows: spec.data.length - 1, + }); + console.log(` ✓ ${item.label}: ${reference.width}×${reference.height} → Excel ${spec.width}×${spec.height}`); + } + + const barCases = results.filter((result) => result.family === 'bar'); + if (barCases[1].optimizedSize.width <= barCases[0].optimizedSize.width) { + throw new Error('bar layout did not stretch for the moderate-cardinality case'); + } + if (barCases.some((result, index) => result.retainedRows !== [4, 24, 80][index])) { + throw new Error('bar layout dropped data while changing cardinality regimes'); + } + for (const result of results) { + if (result.appliedExcelSize.width < 320 || result.appliedExcelSize.width > 1600 + || result.appliedExcelSize.height < 220 || result.appliedExcelSize.height > 900) { + throw new Error(`${result.name} escaped the Excel audit size bounds`); + } + } + const lineCases = results.filter((result) => result.family === 'line'); + for (let index = 1; index < lineCases.length; index += 1) { + const previous = lineCases[index - 1].optimizedSize; + const current = lineCases[index].optimizedSize; + if (current.width * current.height < previous.width * previous.height) { + throw new Error(`line optimized area decreased from ${lineCases[index - 1].name} to ${lineCases[index].name}`); + } + } + + for (let page = 0; page < 2; page += 1) { + const pageCases = results.slice(page * 3, page * 3 + 3); + const rows = []; + const header = join(tempDir, `dynamic-header-${page}.png`); + runMagick(['-size', '2000x100', '-background', 'white', '-fill', 'black', '-font', 'Helvetica-Bold', '-pointsize', '26', '-gravity', 'center', `label:Dynamic layout audit · page ${page + 1}`, header]); + rows.push(header); + for (const result of pageCases) { + const label = join(tempDir, `dynamic-${result.name}-label.png`); + const reference = join(tempDir, `dynamic-${result.name}-reference.png`); + const excel = join(tempDir, `dynamic-${result.name}-excel.png`); + const row = join(tempDir, `dynamic-${result.name}-row.png`); + const sizeLabel = `${result.label}\nFlint ${result.optimizedSize.width}×${result.optimizedSize.height}\nExcel ${result.appliedExcelSize.width}×${result.appliedExcelSize.height}`; + runMagick(['-size', '300x600', '-background', 'white', '-fill', 'black', '-font', 'Helvetica', '-pointsize', '20', '-gravity', 'center', `label:${sizeLabel}`, label]); + runMagick([join(outDir, `${result.name}.reference.png`), '-resize', '850x580', '-background', 'white', '-gravity', 'center', '-extent', '850x600', reference]); + runMagick([join(outDir, `${result.name}.excel.png`), '-resize', '850x580', '-background', 'white', '-gravity', 'center', '-extent', '850x600', excel]); + runMagick([label, reference, excel, '+append', row]); + rows.push(row); + } + runMagick([...rows, '-append', join(outDir, `dynamic-layout-${page + 1}.png`)]); + } + return results; +} + +function facetInput(name) { + if (name === 'column-bar') { + const values = []; + for (const region of ['North', 'Central', 'South']) { + for (const category of ['Consumer', 'Corporate', 'Home Office', 'Reseller']) { + values.push({ Region: region, Category: category, Value: 60 + ((values.length * 47) % 320) }); + } + } + return { + data: { values }, + semantic_types: { Region: 'Category', Category: 'Category', Value: 'Amount' }, + chart_spec: { chartType: 'Bar Chart', encodings: { x: 'Category', y: 'Value', column: 'Region' }, baseSize: { width: 400, height: 300 } }, + }; + } + if (name === 'row-scatter') { + const values = []; + for (const group of ['Group A', 'Group B', 'Group C']) { + for (let index = 0; index < 18; index += 1) { + values.push({ Group: group, X: 20 + index * 4 + group.length, Y: 30 + ((index * 17 + group.charCodeAt(6)) % 70) }); + } + } + return { + data: { values }, + semantic_types: { Group: 'Category', X: 'Quantity', Y: 'Quantity' }, + chart_spec: { chartType: 'Scatter Plot', encodings: { x: 'X', y: 'Y', row: 'Group' }, baseSize: { width: 400, height: 300 } }, + }; + } + if (name === 'grid-bar') { + const values = []; + for (const region of ['North', 'South']) { + for (const channel of ['Online', 'Retail']) { + for (const category of ['A', 'B', 'C', 'D']) { + values.push({ Region: region, Channel: channel, Category: category, Value: 50 + ((values.length * 31) % 240) }); + } + } + } + return { + data: { values }, + semantic_types: { Region: 'Category', Channel: 'Category', Category: 'Category', Value: 'Amount' }, + chart_spec: { chartType: 'Bar Chart', encodings: { x: 'Category', y: 'Value', column: 'Region', row: 'Channel' }, baseSize: { width: 400, height: 300 } }, + }; + } + + const values = []; + for (const region of ['North', 'South', 'East', 'West', 'Central', 'Pacific', 'Mountain', 'Atlantic', 'Gulf', 'Midwest']) { + for (let month = 0; month < 12; month += 1) { + values.push({ Region: region, Month: `M${month + 1}`, Value: 80 + ((month * 23 + region.length * 17) % 170) }); + } + } + return { + data: { values }, + semantic_types: { Region: 'Category', Month: 'Month', Value: 'Quantity' }, + chart_spec: { chartType: 'Line Chart', encodings: { x: 'Month', y: 'Value', column: 'Region' }, baseSize: { width: 400, height: 300 } }, + options: { minSubplotSize: 180 }, + }; +} + +const facetCases = [ + { name: 'column-bar', label: 'Column facet · 3 bar panels' }, + { name: 'row-scatter', label: 'Row facet · 3 scatter panels' }, + { name: 'grid-bar', label: 'Column × row facet · 2×2 bar panels' }, + { name: 'wrapped-line', label: 'Wrapped column facet · 10 line panels' }, +]; + +function distinct(values, field) { + return [...new Set(values.map((row) => String(row[field])))]; +} + +function sharedNumericAxis(values, zero = false) { + const finite = values.map(Number).filter(Number.isFinite); + if (finite.length === 0) return {}; + const minimum = zero ? 0 : Math.min(...finite); + const maximum = Math.max(...finite); + const span = Math.max(1, maximum - minimum); + const rough = span / 5; + const power = 10 ** Math.floor(Math.log10(rough)); + const fraction = rough / power; + const step = (fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10) * power; + const lower = zero ? 0 : Math.floor(minimum / step) * step; + const upperTick = Math.ceil(maximum / step) * step; + return { + minimumScale: lower, + maximumScale: Math.abs(upperTick - maximum) < 1e-9 ? maximum + step * 0.25 : upperTick, + majorUnit: step, + }; +} + +async function runFacetAudit() { + const results = []; + for (const item of facetCases) { + const input = facetInput(item.name); + const reference = await renderChart(input, 'vegalite', { format: 'png', scale }); + const referencePath = join(outDir, `${item.name}.reference.png`); + writeFileSync(referencePath, reference.buffer); + + let rejection; + try { + assembleExcel(input); + throw new Error('faceted input unexpectedly assembled as one native chart'); + } catch (error) { + rejection = String(error.message || error); + if (!rejection.includes('does not support faceting')) throw error; + } + + const columnField = typeof input.chart_spec.encodings.column === 'string' ? input.chart_spec.encodings.column : input.chart_spec.encodings.column?.field; + const rowField = typeof input.chart_spec.encodings.row === 'string' ? input.chart_spec.encodings.row : input.chart_spec.encodings.row?.field; + const xField = typeof input.chart_spec.encodings.x === 'string' ? input.chart_spec.encodings.x : input.chart_spec.encodings.x?.field; + const yField = typeof input.chart_spec.encodings.y === 'string' ? input.chart_spec.encodings.y : input.chart_spec.encodings.y?.field; + const sharedCategoryAxis = input.chart_spec.chartType === 'Scatter Plot' + ? sharedNumericAxis(input.data.values.map((row) => row[xField])) + : undefined; + const sharedValueAxis = sharedNumericAxis( + input.data.values.map((row) => row[yField]), + input.chart_spec.chartType === 'Bar Chart', + ); + const columns = columnField ? distinct(input.data.values, columnField) : [null]; + const rows = rowField ? distinct(input.data.values, rowField) : [null]; + const panels = []; + for (const rowValue of rows) { + for (const columnValue of columns) { + const panelRows = input.data.values.filter((record) => + (!columnField || String(record[columnField]) === columnValue) + && (!rowField || String(record[rowField]) === rowValue), + ); + const encodings = { ...input.chart_spec.encodings }; + delete encodings.column; + delete encodings.row; + const child = { + ...input, + data: { values: panelRows }, + chart_spec: { ...input.chart_spec, encodings, baseSize: { width: 300, height: 220 } }, + }; + const childReference = await renderChart(child, 'vegalite', { format: 'png', scale: 1 }); + const spec = assembleExcel(child); + if (sharedCategoryAxis) spec.categoryAxis = { ...spec.categoryAxis, ...sharedCategoryAxis }; + spec.valueAxis = { ...spec.valueAxis, ...sharedValueAxis }; + spec.width = clamp(childReference.width, 280, 420); + spec.height = clamp(childReference.height, 200, 300); + const facetLabel = [rowValue, columnValue].filter(Boolean).join(' · '); + spec.title = `${facetLabel} — ${spec.title}`; + const path = join(tempDir, `${item.name}-panel-${panels.length}.png`); + writeFileSync(path, await renderExcelArtifact(spec, { scale })); + panels.push(path); + } + } + + const gridColumns = item.name === 'row-scatter' ? 1 : item.name === 'wrapped-line' ? 5 : columns.length; + const gridRows = Math.ceil(panels.length / gridColumns); + const compositionPath = join(outDir, `${item.name}.excel-composition.png`); + runMagick(['montage', ...panels, '-tile', `${gridColumns}x${gridRows}`, '-geometry', '900x650+16+16', '-background', 'white', compositionPath]); + results.push({ + name: item.name, + label: item.label, + referenceSize: { width: reference.width, height: reference.height }, + panelCount: panels.length, + grid: `${gridColumns}x${gridRows}`, + productionResult: 'rejected', + rejection, + sharedCategoryAxis, + sharedValueAxis, + }); + console.log(` ✓ ${item.label}: production rejected; experimental ${gridColumns}×${gridRows} composition rendered`); + } + + for (let page = 0; page < 2; page += 1) { + const pageCases = results.slice(page * 2, page * 2 + 2); + const rows = []; + const header = join(tempDir, `facet-header-${page}.png`); + runMagick(['-size', '2000x100', '-background', 'white', '-fill', 'black', '-font', 'Helvetica-Bold', '-pointsize', '26', '-gravity', 'center', `label:Facet audit · canonical Flint vs experimental native-chart composition · page ${page + 1}`, header]); + rows.push(header); + for (const result of pageCases) { + const label = join(tempDir, `facet-${result.name}-label.png`); + const reference = join(tempDir, `facet-${result.name}-reference.png`); + const excel = join(tempDir, `facet-${result.name}-excel.png`); + const row = join(tempDir, `facet-${result.name}-row.png`); + runMagick(['-size', '300x700', '-background', 'white', '-fill', 'black', '-font', 'Helvetica', '-pointsize', '19', '-gravity', 'center', `label:${result.label}\n${result.panelCount} native charts · ${result.grid}\nProduction: explicit rejection`, label]); + runMagick([join(outDir, `${result.name}.reference.png`), '-resize', '850x680', '-background', 'white', '-gravity', 'center', '-extent', '850x700', reference]); + runMagick([join(outDir, `${result.name}.excel-composition.png`), '-resize', '850x680', '-background', 'white', '-gravity', 'center', '-extent', '850x700', excel]); + runMagick([label, reference, excel, '+append', row]); + rows.push(row); + } + runMagick([...rows, '-append', join(outDir, `facet-layout-${page + 1}.png`)]); + } + return results; +} + +console.log('Dynamic layout audit'); +const dynamic = await runDynamicAudit(); +console.log('Facet audit'); +const facets = await runFacetAudit(); +writeFileSync(join(outDir, 'summary.json'), JSON.stringify({ dynamic, facets }, null, 2) + '\n'); +rmSync(tempDir, { recursive: true, force: true }); +console.log(`\nWrote ${dynamic.length} dynamic cases and ${facets.length} facet cases to ${outDir}`); \ No newline at end of file diff --git a/test-harness/excel/evaluations/make-audit-sheets.mjs b/test-harness/excel/evaluations/make-audit-sheets.mjs new file mode 100644 index 00000000..fc89004f --- /dev/null +++ b/test-harness/excel/evaluations/make-audit-sheets.mjs @@ -0,0 +1,185 @@ +import fs from 'fs'; +import path, { dirname } from 'path'; +import { execFileSync } from 'child_process'; +import { fileURLToPath } from 'url'; + +/** @typedef {{ type: string, name: string, ok: boolean, skipped?: boolean, referenceBackend?: string }} GalleryResult */ + +const here = dirname(fileURLToPath(import.meta.url)); +const summaryPath = path.join(here, 'out', 'gallery', 'summary.json'); +const outDir = path.join(here, 'out', 'audit-sheets'); +const familyFilter = process.argv[2]; + +if (!familyFilter) fs.rmSync(outDir, { recursive: true, force: true }); +fs.mkdirSync(outDir, { recursive: true }); + +const summary = /** @type {GalleryResult[]} */ (JSON.parse(fs.readFileSync(summaryPath, 'utf8'))); +const allOkEntries = summary.filter(e => e.ok === true && !e.skipped); +const okEntries = familyFilter + ? allOkEntries.filter(e => e.type === familyFilter) + : allOkEntries; +if (familyFilter && okEntries.length === 0) { + throw new Error(`No successful gallery entries for family "${familyFilter}".`); +} + +console.log(`Total OK entries loaded from summary: ${okEntries.length}`); + +// Group by family (type) +/** @type {Record} */ +const groups = {}; +for (const entry of okEntries) { + if (!groups[entry.type]) { + groups[entry.type] = []; + } + groups[entry.type].push(entry); +} + +// Print and track verification +let totalPairsProcessed = 0; +const allSeenCases = new Set(); +/** @type {Array<{ name: string, cases: string[] }>} */ +const allSheets = []; + +// Helper function to run magick with arguments array +/** @param {string[]} args */ +function runMagick(args) { + try { + execFileSync('magick', args, { stdio: 'pipe' }); + } catch (error) { + const err = /** @type {Error & { stderr?: Buffer }} */ (error); + console.error(`Error running magick with args: ${args.join(' ')}`); + console.error(err.stderr ? err.stderr.toString() : err.message); + throw err; + } +} + +// Ensure temp directory exists +const tempDir = path.join(here, 'out', 'temp-sheets'); +fs.rmSync(tempDir, { recursive: true, force: true }); +fs.mkdirSync(tempDir, { recursive: true }); + +// Process each family +for (const [family, cases] of Object.entries(groups)) { + console.log(`\nFamily: ${family} (${cases.length} cases)`); + + // Sort cases to have standard ordering + cases.sort((a, b) => a.name.localeCompare(b.name)); + + // Chunk cases into groups of at most 4 + const chunkSize = 4; + const chunks = []; + for (let i = 0; i < cases.length; i += chunkSize) { + chunks.push(cases.slice(i, i + chunkSize)); + } + + for (let chunkIdx = 0; chunkIdx < chunks.length; chunkIdx++) { + const chunk = chunks[chunkIdx]; + const sheetNum = String(chunkIdx + 1).padStart(2, '0'); + const sheetName = `${family}-${sheetNum}.png`; + const sheetPath = path.join(outDir, sheetName); + allSheets.push({ name: sheetName, cases: chunk.map(c => c.name) }); + + console.log(` Generating sheet ${sheetName} with ${chunk.length} cases:`); + const rowPaths = []; + + // Generate Column Headers + const col0HeaderPath = path.join(tempDir, `header_col0.png`); + const col1HeaderPath = path.join(tempDir, `header_col1.png`); + const col2HeaderPath = path.join(tempDir, `header_col2.png`); + const headerRowPath = path.join(tempDir, `header_row.png`); + + runMagick(['-size', '200x100', '-background', 'white', '-fill', 'black', '-font', 'Helvetica-Bold', '-pointsize', '24', '-gravity', 'center', 'label:Case', col0HeaderPath]); + const referenceLabel = cases[0]?.referenceBackend === 'echarts' ? 'ECharts' : 'Vega-Lite'; + runMagick(['-size', '900x100', '-background', 'white', '-fill', 'black', '-font', 'Helvetica-Bold', '-pointsize', '28', '-gravity', 'center', `label:${referenceLabel}`, col1HeaderPath]); + runMagick(['-size', '900x100', '-background', 'white', '-fill', 'black', '-font', 'Helvetica-Bold', '-pointsize', '28', '-gravity', 'center', 'label:Excel', col2HeaderPath]); + + runMagick([col0HeaderPath, col1HeaderPath, col2HeaderPath, '+append', headerRowPath]); + rowPaths.push(headerRowPath); + + for (let i = 0; i < chunk.length; i++) { + const entry = chunk[i]; + const caseName = entry.name; + + if (allSeenCases.has(`${family}/${caseName}`)) { + console.error(`Duplicate case detected: ${family}/${caseName}`); + process.exit(1); + } + allSeenCases.add(`${family}/${caseName}`); + totalPairsProcessed++; + + console.log(` - ${caseName}`); + + const vlSrc = path.join(here, 'out', 'gallery', family, `${caseName}.vl.png`); + const excelSrc = path.join(here, 'out', 'gallery', family, `${caseName}.excel.png`); + + const labelDest = path.join(tempDir, `label_${i}.png`); + const vlDest = path.join(tempDir, `vl_${i}.png`); + const excelDest = path.join(tempDir, `excel_${i}.png`); + const rowDest = path.join(tempDir, `row_${i}.png`); + + // 1. Create label + runMagick(['-size', '200x600', '-background', 'white', '-fill', 'black', '-font', 'Helvetica-Bold', '-pointsize', '18', '-gravity', 'center', `label:${caseName}`, labelDest]); + + // 2. Normalize Vega-Lite + runMagick([vlSrc, '-resize', '900x600', '-background', 'white', '-gravity', 'center', '-extent', '900x600', vlDest]); + + // 3. Normalize Excel + runMagick([excelSrc, '-resize', '900x600', '-background', 'white', '-gravity', 'center', '-extent', '900x600', excelDest]); + + // 4. Combine into single row + runMagick([labelDest, vlDest, excelDest, '+append', rowDest]); + rowPaths.push(rowDest); + } + + // Combine header and rows vertically + runMagick([...rowPaths, '-append', sheetPath]); + } +} + +// Clean up temp dir +try { + fs.rmSync(tempDir, { recursive: true, force: true }); +} catch (e) { + // Ignore cleanup errors +} + +console.log('\n--- VERIFICATION REPORT ---'); +console.log(`Total sheets generated: ${allSheets.length}`); +console.log(`Total cases processed and verified: ${totalPairsProcessed}`); +if (totalPairsProcessed === okEntries.length) { + console.log(`SUCCESS: Exactly ${okEntries.length} supported case pairs were included!`); +} else { + console.error(`ERROR: Found ${totalPairsProcessed} cases instead of ${okEntries.length}.`); + process.exit(1); +} + +// Double check to make sure no omissions or duplicates relative to summary ok:true cases +const okCaseKeys = new Set(okEntries.map(e => `${e.type}/${e.name}`)); +let mismatchFound = false; + +for (const key of okCaseKeys) { + if (!allSeenCases.has(key)) { + console.error(`MISSING: ${key} was not included in any sheet.`); + mismatchFound = true; + } +} + +for (const key of allSeenCases) { + if (!okCaseKeys.has(key)) { + console.error(`EXTRA: ${key} was included but not marked as OK in summary.`); + mismatchFound = true; + } +} + +if (!mismatchFound) { + console.log('SUCCESS: Perfect 1-to-1 matching with ok=true entries in summary.json with zero duplicates/omissions!'); +} else { + console.error('ERROR: Mismatch found in included cases.'); + process.exit(1); +} + +// Print full detailed list of sheets and cases for easy auditing +console.log('\n--- FULL SHEETS AND CASES LIST ---'); +for (const s of allSheets) { + console.log(`Sheet: ${s.name} (${s.cases.length} cases): [${s.cases.join(', ')}]`); +} diff --git a/test-harness/excel/evaluations/render-client.mjs b/test-harness/excel/evaluations/render-client.mjs new file mode 100644 index 00000000..30e45dcd --- /dev/null +++ b/test-harness/excel/evaluations/render-client.mjs @@ -0,0 +1,80 @@ +// @ts-check + +process.env.NODE_TLS_REJECT_UNAUTHORIZED = process.env.NODE_TLS_REJECT_UNAUTHORIZED ?? '0'; + +const DEFAULT_SERVER = 'https://localhost:3000'; + +/** @param {number} milliseconds */ +function wait(milliseconds) { + return new Promise((resolve) => setTimeout(resolve, milliseconds)); +} + +/** + * Render one versioned Excel artifact through the running Office add-in worker. + * + * @param {unknown} artifact + * @param {{ server?: string, scale?: number, timeoutMs?: number, retries?: number, inspectNativeChart?: boolean }} [options] + * @returns {Promise} + */ +export async function renderExcelArtifact(artifact, options = {}) { + const server = options.server ?? DEFAULT_SERVER; + const timeoutMs = options.timeoutMs ?? 60_000; + const retries = options.retries ?? 3; + let enqueue; + + for (let attempt = 1; attempt <= retries; attempt += 1) { + try { + enqueue = await fetch(`${server}/enqueue`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + artifact, + renderOptions: { + scale: options.scale ?? 3, + inspectNativeChart: options.inspectNativeChart ?? false, + }, + }), + }); + break; + } catch (error) { + if (attempt === retries) throw error; + await wait(500 * attempt); + } + } + + if (!enqueue) throw new Error(`Excel worker is unreachable at ${server}.`); + if (!enqueue.ok) { + const message = await enqueue.text(); + throw new Error(`Excel worker rejected the artifact (${enqueue.status}): ${message}`); + } + const payload = /** @type {{ id?: unknown }} */ (await enqueue.json()); + if (!Number.isInteger(payload.id)) throw new Error('Excel worker returned an invalid job id.'); + const id = /** @type {number} */ (payload.id); + const deadline = Date.now() + timeoutMs; + + while (Date.now() < deadline) { + let response; + try { + response = await fetch(`${server}/result?id=${id}`); + } catch (error) { + if (Date.now() + 500 >= deadline) throw error; + await wait(300); + continue; + } + if (response.status === 200) { + const result = /** @type {{ pngBase64?: unknown, error?: unknown }} */ (await response.json()); + if (result.error) throw new Error(String(result.error)); + if (typeof result.pngBase64 !== 'string' || result.pngBase64.length === 0) { + throw new Error('Excel worker returned no PNG payload.'); + } + return Buffer.from(result.pngBase64, 'base64'); + } + if (response.status !== 204) { + throw new Error(`Excel worker result polling failed with HTTP ${response.status}.`); + } + await wait(300); + } + + await fetch(`${server}/cancel?id=${id}`, { method: 'POST' }).catch(() => {}); + throw new Error('Timed out waiting for the Excel Office.js worker.'); +} diff --git a/test-harness/excel/evaluations/update-examples.mjs b/test-harness/excel/evaluations/update-examples.mjs new file mode 100644 index 00000000..c645f647 --- /dev/null +++ b/test-harness/excel/evaluations/update-examples.mjs @@ -0,0 +1,30 @@ +// @ts-check + +import { copyFileSync, existsSync, mkdirSync } from 'node:fs'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const here = dirname(fileURLToPath(import.meta.url)); +const examplesDir = join(here, 'examples'); + +const snapshots = [ + ['out/gallery/waterfall-chart/02-card7.excel.png', 'waterfall.png'], + ['out/gallery/pyramid-chart/00-card18.excel.png', 'pyramid.png'], + ['out/gallery/grouped-bar-chart/00-card4.excel.png', 'grouped-bar.png'], + ['out/gallery/line-chart/14-card50.excel.png', 'multi-series-line.png'], + ['out/gallery/area-chart/01-card24.excel.png', 'stacked-area.png'], + ['out/gallery/radar-chart/05-card8.excel.png', 'radar.png'], + ['out/gallery/treemap/01-card0.excel.png', 'treemap.png'], + ['out/gallery/sunburst-chart/02-card0.excel.png', 'sunburst.png'], + ['out/candlestick-audit/advanced-90-day-dense.excel.png', 'candlestick.png'], +]; + +mkdirSync(examplesDir, { recursive: true }); +for (const [sourceRelative, destinationName] of snapshots) { + const source = join(here, sourceRelative); + if (!existsSync(source)) { + throw new Error(`Missing evaluation output: ${sourceRelative}`); + } + copyFileSync(source, join(examplesDir, destinationName)); + console.log(`updated examples/${destinationName}`); +} diff --git a/test-harness/excel/office-runner/officejs/icon-16.png b/test-harness/excel/office-runner/officejs/icon-16.png new file mode 100644 index 00000000..8665db76 Binary files /dev/null and b/test-harness/excel/office-runner/officejs/icon-16.png differ diff --git a/test-harness/excel/office-runner/officejs/icon-32.png b/test-harness/excel/office-runner/officejs/icon-32.png new file mode 100644 index 00000000..776dfe27 Binary files /dev/null and b/test-harness/excel/office-runner/officejs/icon-32.png differ diff --git a/test-harness/excel/office-runner/officejs/icon-80.png b/test-harness/excel/office-runner/officejs/icon-80.png new file mode 100644 index 00000000..c38979c4 Binary files /dev/null and b/test-harness/excel/office-runner/officejs/icon-80.png differ diff --git a/test-harness/excel/office-runner/officejs/icon.svg b/test-harness/excel/office-runner/officejs/icon.svg new file mode 100644 index 00000000..49fe1007 --- /dev/null +++ b/test-harness/excel/office-runner/officejs/icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test-harness/excel/office-runner/officejs/manifest.xml b/test-harness/excel/office-runner/officejs/manifest.xml new file mode 100644 index 00000000..c933cb0e --- /dev/null +++ b/test-harness/excel/office-runner/officejs/manifest.xml @@ -0,0 +1,93 @@ + + + + 2e3cb77a-afbe-499c-9c60-9b0dca994868 + 1.0.0.0 + Flint + en-US + + + + + + + https://localhost:3000 + + + + + + + + + + + + + ReadWriteDocument + + + + + + + +