diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberWithTrendline/buildQuery.test.ts b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberWithTrendline/buildQuery.test.ts index 0ce7743b362..fa11762d036 100644 --- a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberWithTrendline/buildQuery.test.ts +++ b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberWithTrendline/buildQuery.test.ts @@ -64,8 +64,8 @@ describe('BigNumberWithTrendline buildQuery', () => { expect(queryContext.queries.length).toBe(1); expect(queryContext.queries[0].post_processing).toEqual([ { operation: 'pivot' }, - { operation: 'rolling' }, { operation: 'resample' }, + { operation: 'rolling' }, { operation: 'flatten' }, ]); }); @@ -79,8 +79,8 @@ describe('BigNumberWithTrendline buildQuery', () => { expect(queryContext.queries.length).toBe(1); expect(queryContext.queries[0].post_processing).toEqual([ { operation: 'pivot' }, - { operation: 'rolling' }, { operation: 'resample' }, + { operation: 'rolling' }, { operation: 'flatten' }, ]); }); diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberWithTrendline/buildQuery.ts b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberWithTrendline/buildQuery.ts index 56a132dd4a1..e5c7f822705 100644 --- a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberWithTrendline/buildQuery.ts +++ b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberWithTrendline/buildQuery.ts @@ -47,8 +47,8 @@ export default function buildQuery(formData: QueryFormData) { ...(timeColumn.length ? {} : { is_timeseries: true }), post_processing: [ pivotOperator(formData, baseQueryObject), - rollingWindowOperator(formData, baseQueryObject), resampleOperator(formData, baseQueryObject), + rollingWindowOperator(formData, baseQueryObject), flattenOperator(formData, baseQueryObject), ].filter(Boolean), }, diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/buildQuery.ts b/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/buildQuery.ts index 2173dd99085..625b932b19d 100644 --- a/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/buildQuery.ts +++ b/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/buildQuery.ts @@ -75,9 +75,9 @@ export default function buildQuery(formData: QueryFormData) { time_offsets: isTimeComparison(fd, queryObject) ? fd.time_compare : [], post_processing: [ pivotOperatorInRuntime, + resampleOperator(fd, queryObject), rollingWindowOperator(fd, queryObject), timeCompareOperator(fd, queryObject), - resampleOperator(fd, queryObject), renameOperator(fd, queryObject), flattenOperator(fd, queryObject), ], diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/buildQuery.ts b/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/buildQuery.ts index 781d5678e22..32cbdcbde86 100644 --- a/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/buildQuery.ts +++ b/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/buildQuery.ts @@ -94,13 +94,15 @@ export default function buildQuery(formData: QueryFormData) { time_offsets, /* Note that: 1. The resample, rolling, cum, timeCompare operators should be after pivot. - 2. the flatOperator makes multiIndex Dataframe into flat Dataframe + 2. Resample must come before rolling so that imputed values are + included in the rolling window calculation. + 3. the flatOperator makes multiIndex Dataframe into flat Dataframe */ post_processing: [ pivotOperatorInRuntime, + resampleOperator(formData, baseQueryObject), rollingWindowOperator(formData, baseQueryObject), timeCompareOperator(formData, baseQueryObject), - resampleOperator(formData, baseQueryObject), renameOperator(formData, baseQueryObject), contributionOperator(formData, baseQueryObject, time_offsets), sortOperator(formData, baseQueryObject), diff --git a/superset-frontend/plugins/plugin-chart-echarts/test/MixedTimeseries/transformProps.test.ts b/superset-frontend/plugins/plugin-chart-echarts/test/MixedTimeseries/transformProps.test.ts index 57b91f8330a..f17924ec66e 100644 --- a/superset-frontend/plugins/plugin-chart-echarts/test/MixedTimeseries/transformProps.test.ts +++ b/superset-frontend/plugins/plugin-chart-echarts/test/MixedTimeseries/transformProps.test.ts @@ -431,5 +431,5 @@ test('should add a formula annotation when X-axis column has dataset-level label expect(formulaSeries).toBeDefined(); expect(formulaSeries?.data).toBeDefined(); expect(Array.isArray(formulaSeries?.data)).toBe(true); - expect((formulaSeries?.data as unknown[])?.length).toBeGreaterThan(0); + expect((formulaSeries!.data as unknown[]).length).toBeGreaterThan(0); }); diff --git a/superset-frontend/plugins/plugin-chart-echarts/test/Timeseries/transformProps.test.ts b/superset-frontend/plugins/plugin-chart-echarts/test/Timeseries/transformProps.test.ts index 3fd8f814806..9020c811871 100644 --- a/superset-frontend/plugins/plugin-chart-echarts/test/Timeseries/transformProps.test.ts +++ b/superset-frontend/plugins/plugin-chart-echarts/test/Timeseries/transformProps.test.ts @@ -306,8 +306,8 @@ describe('EchartsTimeseries transformProps', () => { expect(formulaSeries).toBeDefined(); expect(formulaSeries?.data).toBeDefined(); expect(Array.isArray(formulaSeries?.data)).toBe(true); - expect((formulaSeries?.data as unknown[])?.length).toBeGreaterThan(0); - const firstDataPoint = (formulaSeries?.data as [number, number][])?.[0]; + expect((formulaSeries!.data as unknown[]).length).toBeGreaterThan(0); + const firstDataPoint = (formulaSeries!.data as [number, number][])[0]; expect(firstDataPoint).toBeDefined(); expect(firstDataPoint[1]).toBe(firstDataPoint[0] * 2); }); @@ -386,7 +386,7 @@ describe('EchartsTimeseries transformProps', () => { result.echartOptions.series as SeriesOption[] | undefined )?.find((s: SeriesOption) => s.name === 'My Formula'); expect(formulaSeries).toBeDefined(); - const firstDataPoint = (formulaSeries?.data as [number, number][])?.[0]; + const firstDataPoint = (formulaSeries!.data as [number, number][])[0]; expect(firstDataPoint).toBeDefined(); expect(firstDataPoint[0]).toBe(firstDataPoint[1] * 2); });