Я пытаюсь реализовать это около месяца. Просто используя некоторые примеры данных из других вопросов о переполнении стека.
FinancialYearStart MonthOfFinancialYear SalesTotal
2015 1 10
2015 2 10
2015 5 10
2015 6 50
2016 1 10
2016 3 20
2016 2 30
2017 6 70
2017 7 80
Как мы можем использовать это, чтобы вычислить итоги продаж с начала года за каждый месяц.
FinancialYearStart MonthOfFinancialYear SalesTotal YTDTotal
2015 1 10 10
2015 2 10 20
2015 5 10 30
2015 6 50 50
2016 1 10 60
2016 3 20 80
2016 2 30 110
2017 6 70 70
2017 7 80 150
, чтобы быть более точным, как можномы рассчитываем эти метрики, используя группу или используя функции управления окнами.
Например:
Year Month Customer TotalMonthlySales
2015 1 Dog 10
2015 2 Dog 10
2015 3 Cat 20
2015 4 Dog 30
2015 5 Cat 10
2015 7 Cat 20
2015 7 Dog 10
2016 1 Dog 40
2016 2 Dog 20
2016 3 Cat 70
2016 4 Dog 30
2016 5 Cat 10
2016 6 Cat 20
2016 7 Dog 10
даст:
Year Month Customer TotalMonthlySales YTDSales
2015 1 Dog 10 10
2015 2 Dog 10 20
2015 3 Cat 20 20
2015 4 Dog 30 50
2015 5 Cat 10 30
2015 7 Cat 20 40
2015 7 Dog 10 60
2016 1 Dog 40 40
2016 2 Dog 20 60
2016 3 Cat 70 70
2016 4 Dog 30 90
2016 5 Cat 10 80
2016 6 Cat 20 100
2016 7 Dog 10 100
Теперь я использую скользящее окнофункции для расчета последних 4 недель 13 недель, используя следующий подход.
w = (Window().partitionBy(col("number"),col("id")).orderBy(F.col("timestampGMT").cast('long')).rangeBetween(-days(27), 0))
df1 = df.withColumn('lw_4weeksCY_SALES_DOLLARS', F.sum("CY_SALES_DOLLARS").over(w)).withColumn('lw_4weeksCY_SALES_UNITS', F.sum("CY_SALES_UNITS")