Сегментирование клиентов
let
sales = Excel.CurrentWorkbook(){[Name="sales"]}[Content],
rank = Excel.CurrentWorkbook(){[Name="rank"]}[Content],
func = (sales_tbl, rank_tbl) =>
[sales_amount = Table.AddColumn(
sales_tbl, "sales_amount",
(x) => if x[Статус покупки] = "Проведена" then x[Стоимость] else 0
),
gr = Table.Group(
sales_amount, "Покупатель",
{{"all", (x) => x},
{"Стоимость", (x) => List.Sum(x[sales_amount])}}
),
combine_rank = gr & rank_tbl,
sorted = Table.Sort(combine_rank,{{"Стоимость", Order.Descending}, {"Покупатель", Order.Ascending}}),
fill = Table.FillUp(Table.FillDown(sorted, {"Результат"}), {"Результат"}),
filter = Table.SelectRows(fill, (x) => x[Покупатель] <> null)[[all], [Результат]],
expand = Table.Sort(Table.ExpandTableColumn(filter, "all", Table.ColumnNames(sales_tbl)), "Дата")][expand],
result = func(sales, rank)
in
result
rank = Excel.CurrentWorkbook(){[Name="rank"]}[Content],
func = (sales_tbl, rank_tbl) =>
[sales_amount = Table.AddColumn(
sales_tbl, "sales_amount",
(x) => if x[Статус покупки] = "Проведена" then x[Стоимость] else 0
),
gr = Table.Group(
sales_amount, "Покупатель",
{{"all", (x) => x},
{"Стоимость", (x) => List.Sum(x[sales_amount])}}
),
combine_rank = gr & rank_tbl,
sorted = Table.Sort(combine_rank,{{"Стоимость", Order.Descending}, {"Покупатель", Order.Ascending}}),
fill = Table.FillUp(Table.FillDown(sorted, {"Результат"}), {"Результат"}),
filter = Table.SelectRows(fill, (x) => x[Покупатель] <> null)[[all], [Результат]],
expand = Table.Sort(Table.ExpandTableColumn(filter, "all", Table.ColumnNames(sales_tbl)), "Дата")][expand],
result = func(sales, rank)
in
result
Пример: тут
Источник: здесь
Комментариев нет:
Отправить комментарий