/* This macro calculates the aggregation of a metric over a partition of a column, ordered by another column, with a window of x and y preceeding rows. It's designed to be placed within a SELECT statement. If include_all_history is True, then X is ignored. */ {% macro calculate_aggregation_between_preceeding_x_and_y( metric, aggregation="sum", partition_by="id_deal", order_by="date", x=12, y=1, include_all_history=False ) %} {{ aggregation }} ({{ metric }}) over ( partition by {{ partition_by }} order by {{ order_by }} rows between {% if include_all_history %} unbounded preceding {% else %} {{ x }} preceding {% endif %} and {{ y }} preceding ) as {{ aggregation }}_{{ metric }} {% endmacro %}