diff --git a/caravel/forms.py b/caravel/forms.py index c06565d23ae7..5de93cf830a8 100755 --- a/caravel/forms.py +++ b/caravel/forms.py @@ -817,6 +817,18 @@ def __init__(self, viz): "[integer] Number of period to compare against, " "this is relative to the granularity selected") }), + 'period_ratio_type': (SelectField, { + "label": _("Period Ratio Type"), + "default": 'growth', + "choices": ( + ('factor', _('factor')), + ('growth', _('growth')), + ('value', _('value')), + ), + "description": _( + "`factor` means (new/previous), `growth` is " + "((new/previous) - 1), `value` is (new-previous)") + }), 'time_compare': (TextField, { "label": _("Time Shift"), "default": "", diff --git a/caravel/viz.py b/caravel/viz.py index 11179712a6ad..5413abb859bf 100755 --- a/caravel/viz.py +++ b/caravel/viz.py @@ -997,7 +997,7 @@ class NVD3TimeSeriesViz(NVD3Viz): 'fields': ( ('rolling_type', 'rolling_periods'), 'time_compare', - 'num_period_compare', + ('num_period_compare', 'period_ratio_type'), None, ('resample_how', 'resample_rule',), 'resample_fillmethod' ), @@ -1038,7 +1038,14 @@ def get_df(self, query_obj=None): num_period_compare = form_data.get("num_period_compare") if num_period_compare: num_period_compare = int(num_period_compare) - df = (df / df.shift(num_period_compare)) - 1 + prt = form_data.get('period_ratio_type') + if prt and prt == 'growth': + df = (df / df.shift(num_period_compare)) - 1 + elif prt and prt == 'value': + df = df - df.shift(num_period_compare) + else: + df = df / df.shift(num_period_compare) + df = df[num_period_compare:] rolling_periods = form_data.get("rolling_periods")