Skip to content

Commit

Permalink
Allow multiple time shifts (apache#5067)
Browse files Browse the repository at this point in the history
* Allow multiple time shifts

* Handle old form data
  • Loading branch information
betodealmeida authored and mistercrunch committed Jun 1, 2018
1 parent 2e87aa8 commit fb28e51
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 11 deletions.
17 changes: 13 additions & 4 deletions superset/assets/src/explore/controls.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -1575,11 +1575,20 @@ export const controls = {
},

time_compare: {
type: 'TextControl',
type: 'SelectControl',
multi: true,
freeForm: true,
label: t('Time Shift'),
default: null,
description: t('Overlay a timeseries from a ' +
'relative time period. Expects relative time delta ' +
default: [],
choices: formatSelectOptions([
'1 day',
'1 week',
'28 days',
'30 days',
'1 year',
]),
description: t('Overlay one or more timeseries from a ' +
'relative time period. Expects relative time deltas ' +
'in natural language (example: 24 hours, 7 days, ' +
'56 weeks, 365 days)'),
},
Expand Down
2 changes: 1 addition & 1 deletion superset/assets/src/explore/visTypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ export const sections = {
'of query results'),
controlSetRows: [
['rolling_type', 'rolling_periods', 'min_periods'],
['time_compare', null],
['time_compare'],
['num_period_compare', 'period_ratio_type'],
['resample_how', 'resample_rule', 'resample_fillmethod'],
],
Expand Down
18 changes: 12 additions & 6 deletions superset/viz.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ def __init__(self, datasource, form_data, force=False):
self._some_from_cache = False
self._any_cache_key = None
self._any_cached_dttm = None
self._extra_chart_data = None
self._extra_chart_data = []

self.process_metrics()

Expand Down Expand Up @@ -1202,10 +1202,15 @@ def process_data(self, df, aggregate=False):

def run_extra_queries(self):
fd = self.form_data
time_compare = fd.get('time_compare')
if time_compare:

time_compare = fd.get('time_compare') or []
# backwards compatibility
if not isinstance(time_compare, list):
time_compare = [time_compare]

for option in time_compare:
query_object = self.query_obj()
delta = utils.parse_human_timedelta(time_compare)
delta = utils.parse_human_timedelta(option)
query_object['inner_from_dttm'] = query_object['from_dttm']
query_object['inner_to_dttm'] = query_object['to_dttm']

Expand All @@ -1218,10 +1223,11 @@ def run_extra_queries(self):

df2 = self.get_df_payload(query_object).get('df')
if df2 is not None:
label = '{} offset'. format(option)
df2[DTTM_ALIAS] += delta
df2 = self.process_data(df2)
self._extra_chart_data = self.to_series(
df2, classed='superset', title_suffix='---')
self._extra_chart_data.extend(self.to_series(
df2, classed='superset', title_suffix=label))

def get_data(self, df):
df = self.process_data(df)
Expand Down

0 comments on commit fb28e51

Please sign in to comment.