Использование таблицы 10.5 Я пытаюсь создать таблицу / график, который отображает итоги новых («Постоянный старт») продаж за скользящее 52-недельное окно. Изображение диаграммы ниже показывает сумму продаж по неделям от новых (постоянных клиентов) в пределах 52-недельного окна, охватывающего неделю ISO 201733–201832; строка показывает промежуточный итог продаж.
![Running Total of New Sales](https://i.stack.imgur.com/9eCxQ.png)
На следующем рисунке показаны данные за последние несколько недель для графика.
![Underlying chart data](https://i.stack.imgur.com/1jxkk.png)
«Новые продажи» определяются как клиенты с начальной неделей в течение 52 недель после отчетной недели / недели ISO (в примере, где 201832 - неделя отчета, включаются клиенты с начальной неделей между 201733 и 201832). Промежуточный итог продаж между этими же неделями берется, при этом значение процентов представляет собой текущее итоговое значение за последнюю неделю (в примере 5 046 546).
Мне нужно отобразить соответствующее 52-недельное итоговое значение для каждой отчетной недели (таким образом, значения будут составлять около 5 миллионов в неделю), и столбцы будут относительно плоскими (с учетом роста продаж и т. Д.). Моя конкретная проблема заключается в том, что я не могу понять, как определить окно (т. Е. Только новые учетные записи) при выполнении расчета окна / перемещения.
Надеюсь, мое описание достаточно ясно, чтобы проиллюстрировать мою цель.
Заранее спасибо.
РЕДАКТИРОВАТЬ / ОБНОВИТЬ (для дальнейшего уточнения вопроса):
В следующем примере таблицы показаны продажи, совершенные в период между 201824 и 201827 гг. Со счетов, открытых за тот же период. В течение недели 201824 продажи имели только счета, открытые в 201824 году (значение 1). На неделе 201825 г. теперь есть две недели счетов: открытые на неделе 201824 и открытые на неделе 201825, в результате продажи составили 2 и 1 соответственно. Каждая последующая неделя имеет дополнительные счета на одну неделю, что способствует общему объему продаж 20.
+--------+--------+--------+--------+
| 201824 | 201825 | 201826 | 201827 |
+--------+--------+--------+--------+
| | | | 1 |
| | | 1 | 2 |
| | 1 | 2 | 3 |
| 1 | 2 | 3 | 4 |
+--------+--------+--------+--------+
Для продолжения примера в следующей таблице приведены аналогичные данные, но с периодом времени, перемещенным на 1 неделю:
+--------+--------+--------+--------+
| 201825 | 201826 | 201827 | 201828 |
+--------+--------+--------+--------+
| | | | 2 |
| | | 2 | 3 |
| | 2 | 3 | 4 |
| 2 | 3 | 4 | 5 |
+--------+--------+--------+--------+
Сумма продаж в этой таблице составляет 30: счета, открытые на неделе 201825, дают 14 (2 + 3 + 4 + 5), счета, открытые на второй неделе, дают 9 (2 + 3 + 4) и так далее.
Эти две таблицы описывают методологию, которую я ищу, и результаты, которые я ищу, будут примерно такими:
+--------+--------+
| 201827 | 201828 |
+--------+--------+
| 20 | 30 |
+--------+--------+
Если бы я делал что-то подобное в SQL, следующий результат дал бы мне нужный результат:
;with d AS
(
select s.ISOWk, a.OSW as StartWeek, sum(s.Sales) as Sales
from accs a
join sales s
on a.ID = s.ID
where s.ISOWk >= 201701
and a.OSW >= 201701
group by s.ISOWk, a.OSW
)
select c.ISOWk, sum(case when d.ISOWk between FYS and c.ISOWk and StartWeek between FYS and c.ISOWk then Vol else 0 end) as Rolling_ss_vol
from d
cross join (select distinct ISOWk, FYS from tblCalendar c where ISOWk between 201801 and 201835) c
group by c.ISOWk
order by ISOWk
Где FYS (начало года) связано с неделей ISO и указывает, когда начался текущий период продаж (т. Е. За 52 недели).