Вычислить сумму путем группировки дат по неделям в Power BI

У меня есть столбец «Дата», и его тип данных имеет формат даты. К каждой дате привязан еще один столбец «Сумма». Как я могу создать новые столбцы, представляющие сумму общей суммы, собранной каждую «неделю» на основе каждого дня столбца «Дата»? «Неделя» должна быть получена из столбца «Дата», сгруппировав первые 7 дат в неделю 1, следующие 7 дат - в неделю 2 и так далее. В основном мне нужно отображать недельное сравнение на диаграмме для разных категорий в разные годы, для которых мне нужно подготовить свои данные.

Ниже я привожу образец набора данных, чтобы лучше понять:

| Categ | Date       | Amount |
|-------|------------|--------|
| abc   | 11/29/2019 | $1     |
| abc   | 11/30/2019 | $2     |
| abc   | 12/1/2019  | $3     |
| abc   | 12/2/2019  | $3.5   |
| abc   | 12/3/2019  | $0     |
| abc   | 12/4/2019  | $6     |
| abc   | 12/5/2019  | $4     |
| abc   | 12/6/2019  | $6.5   |
| abc   | 12/7/2019  | $4.5   |
| xyz   | 11/29/2019 | $3     |
| xyz   | 11/30/2019 | $2     |
| xyz   | 12/01/2019 | $4.5   |
| xyz   | 12/02/2019 | $8     |
| xyz   | 12/03/2019 | $2     |
| xyz   | 12/04/2019 | $4     |
| xyz   | 12/05/2019 | $2.5   |
| xyz   | 12/06/2019 | $9     |
| xyz   | 12/07/2019 | $6     |
| abc   | 11/29/2020 | $0.5   |
| abc   | 11/30/2020 | $3.5   |
| abc   | 12/01/2020 | $2     |
| abc   | 12/02/2020 | $6     |
| abc   | 12/03/2020 | $7     |
| abc   | 12/04/2020 | $5     |
| abc   | 12/05/2020 | $3     |
| abc   | 12/06/2020 | $4     |
| abc   | 12/07/2020 | $2     |

Я ожидаю, что моя финальная таблица будет выглядеть как таблица 1 или таблица 2, представленная ниже:

ТАБЛИЦА 1:

| Categ | Year | Week1 | Week2 |
|-------|------|-------|-------|
| abc   | 2019 | $19.5 | $30.5 |
| abc   | 2020 | $27   | $6    |
| xyz   | 2019 | $26   | $15   |

ТАБЛИЦА 2:

| Categ | Week 1 - 2019 | Week 2 - 2019 | Week 1 - 2020 | Week 2 - 2020 |
|-------|---------------|---------------|---------------|---------------|
| abc   | $19.5         | $30.5         | $27           | $6            |
| xyz   | $26           | $15           | -             | -             |

person hk2    schedule 12.12.2020    source источник
comment
Вы можете просто создать 2 настраиваемых столбца - Год и Неделя для вашей цели. Отдых с использованием визуального элемента Matrix даст ожидаемый результат.   -  person mkRabbani    schedule 14.12.2020


Ответы (1)


Во-первых, ваш образец, кажется, имеет подробные данные, которые добавляют к 104,5, а сводка добавляет к 124,0, так что что-то там не так.

Кроме того, это вопрос математики дат. Найдите год, используя настраиваемый столбец с формулой

= Date.Year([Date])

Найдите самую низкую дату и год, используя

MinDate= Table.Min(#"PreviousStepName", "Date")[Date],
MinYear= Table.Min(#"PreviousStepName", "Year")[Year],

Нужные номера недель: (дата) - (MinimumDate) - (year-MinimumYear) * 365 - (year-MinimumYear) или в коде, формула ниже в настраиваемом столбце

=  Number.From([Date]) - Number.From(MinDate) -([Year]-MinYear)*365 -([Year]-MinYear)

эта математика дает вам этот крайний правый столбец

введите описание изображения здесь

Затем integer. Разделите результаты этого столбца на 7 и добавьте 1. Это даст вам это

введите описание изображения здесь

удалить лишние столбцы, развернуть и готово. Пример кода для желаемого результата №1 ниже

введите описание изображения здесь

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}}),
#"Added Custom1" = Table.AddColumn(#"Changed Type", "Year", each Date.Year([Date])),
MinDate = Table.Min(#"Added Custom1", "Date")[Date],
MinYear = Table.Min(#"Added Custom1", "Year")[Year],
#"Added Custom2" = Table.AddColumn(#"Added Custom1", "Week", each Number.From([Date]) - Number.From(MinDate) -([Year]-MinYear)*365 -([Year]-MinYear) ),
#"Integer-Divided Column" = Table.TransformColumns(#"Added Custom2", {{"Week", each 1+Number.IntegerDivide(_, 7), Int64.Type}}),
#"Removed Columns" = Table.RemoveColumns(#"Integer-Divided Column",{"Date"}),
#"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Removed Columns", {{"Week", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Removed Columns", {{"Week", type text}}, "en-US")[Week]), "Week", "Amount", List.Sum)
in #"Pivoted Column"
person horseyride    schedule 13.12.2020