diff --git a/superset-frontend/packages/superset-ui-core/src/query/constants.ts b/superset-frontend/packages/superset-ui-core/src/query/constants.ts index 7976e87a4a2..0c2df20d3ab 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/constants.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/constants.ts @@ -48,6 +48,7 @@ export const EXTRA_FORM_DATA_OVERRIDE_REGULAR_MAPPINGS: Record< time_column: 'time_column', time_grain: 'time_grain', time_range: 'time_range', + time_compare: 'time_compare', }; export const EXTRA_FORM_DATA_OVERRIDE_REGULAR_KEYS = Object.keys( diff --git a/superset-frontend/packages/superset-ui-core/src/query/extractExtras.ts b/superset-frontend/packages/superset-ui-core/src/query/extractExtras.ts index 39a4b4b2d80..ea7d7de0c4b 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/extractExtras.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/extractExtras.ts @@ -31,6 +31,7 @@ type ExtraFilterQueryField = { granularity_sqla?: string; time_grain_sqla?: TimeGranularity; granularity?: string; + time_compare?: string; }; type ExtractedExtra = ExtraFilterQueryField & { @@ -57,6 +58,7 @@ export default function extractExtras(formData: QueryFormData): ExtractedExtra { __time_col: 'granularity_sqla', __time_grain: 'time_grain_sqla', __granularity: 'granularity', + __time_compare: 'time_compare', }; (formData.extra_filters || []).forEach(filter => { diff --git a/superset-frontend/packages/superset-ui-core/src/query/types/Query.ts b/superset-frontend/packages/superset-ui-core/src/query/types/Query.ts index 49fc4b4363c..5929fcec15f 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/types/Query.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/types/Query.ts @@ -71,6 +71,8 @@ export type QueryObjectExtras = Partial<{ where?: string; /** Instant Time Comparison */ instant_time_comparison_range?: string; + + time_compare?: string; }>; export type ResidualQueryObjectData = { diff --git a/superset-frontend/packages/superset-ui-core/src/query/types/QueryFormData.ts b/superset-frontend/packages/superset-ui-core/src/query/types/QueryFormData.ts index ddc467b2c46..dee8bc0736f 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/types/QueryFormData.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/types/QueryFormData.ts @@ -122,7 +122,7 @@ export type ExtraFormDataAppend = { * filter clauses can't be overridden */ export type ExtraFormDataOverrideExtras = Pick< QueryObjectExtras, - 'relative_start' | 'relative_end' | 'time_grain_sqla' + 'relative_start' | 'relative_end' | 'time_grain_sqla' | 'time_compare' >; /** These parameters override those already present in the form data/query object */ @@ -131,7 +131,7 @@ export type ExtraFormDataOverrideRegular = Partial< > & Partial> & Partial> & - Partial>; + Partial>; /** These parameters override those already present in the form data/query object */ export type ExtraFormDataOverride = ExtraFormDataOverrideRegular & diff --git a/superset-frontend/packages/superset-ui-core/src/query/types/Time.ts b/superset-frontend/packages/superset-ui-core/src/query/types/Time.ts index 56156166feb..6b0c4b79864 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/types/Time.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/types/Time.ts @@ -30,7 +30,8 @@ export type TimeColumnConfigKey = | '__time_col' | '__time_grain' | '__time_range' - | '__granularity'; + | '__granularity' + | '__time_compare'; export type AppliedTimeExtras = Partial< Record diff --git a/superset-frontend/plugins/plugin-chart-table/src/buildQuery.ts b/superset-frontend/plugins/plugin-chart-table/src/buildQuery.ts index e269dbb3706..d5147b20061 100644 --- a/superset-frontend/plugins/plugin-chart-table/src/buildQuery.ts +++ b/superset-frontend/plugins/plugin-chart-table/src/buildQuery.ts @@ -116,6 +116,13 @@ const buildQuery: BuildQuery = ( } } + if ( + extra_form_data?.time_compare && + !timeOffsets.includes(extra_form_data.time_compare) + ) { + timeOffsets = [extra_form_data.time_compare]; + } + let temporalColumnAdded = false; let temporalColumn = null;