https://www.youtube.com/watch?v=sjXBbdj-Hr8
Список дат при помощи Power Query.xlsx (72,7 КиБ, 1 046 скачиваний)
Представим ситуацию, что у нас есть таблица следующего вида:

В ней перечислены клиенты, которые подписались на наш продукт(условно клиент А и клиент В). В качестве дат указаны дата начала подписки и дата окончания. И нам необходимо построить что-то вроде диаграммы Ганта, на которой будет видно в хронологическом порядке активность клиентов

Т.е. по сути нам нужно создать даты из двух таким образом, чтобы на каждый день подписки была одна дата. Например, для клиента "А" с подпиской на журнал "За рулем" у нас должно получиться 115 строк дат, т.к. подписка длилась 115 дней(от 05.10.2020 до 27.01.2021). Проблема в том, что встроенных средств создания списка дат между двумя заданными датами в Power Query нет. Поэтому придется что-то изобретать.
Загружаем данные нашей таблицы в редактор Power Query: выделяем таблицу -вкладка Данные
После того как загрузили таблицу в Power Query следует убедиться, что тип данных в столбцах "Дата подписки" и "Дата отказа" именно дата, а не дата и время или тем более не тип любой или текст. Для этого на каждом столбце щелкаем левой кнопкой мыши по значку слева от заголовка и выбираем «Дата»

Или выделяем сразу оба столбца с датами -вкладка Главная
Далее, чтобы получить список дат для каждого клиента от одной даты до другой, необходимо использоваться функцию List. Идем на вкладку Добавление столбца
List.Dates([Дата подписки], Duration.Days(Duration.From([Дата отказа]-[Дата подписки])) +1, #duration(1, 0, 0, 0)) |

Будет добавлен новый столбец, в котором для каждого товара каждого клиента будет создан список дат использования продукта. Остается лишь щелкнуть левой кнопкой мыши на значке разнонаправленных стрелок в заголовке созданного столбца и выбрать Развернуть в новые строки

Полученный столбец со всеми датами преобразуем в тип Дата(вкладка Главная
Если в дальнейшем мы планируем работать с результатом запроса в Excel через выгрузку в сводную таблицу(Главная
Но если мы хотим развернуть эти даты в столбцы непосредственно через PowerQuery, то для начала необходимо отсортировать столбец с датами по возрастанию: жмем на значок стрелки в правом верхнем углу столбца и из раскрывающегося списка выбираем Сортировка по возрастанию

После чего используем столбец сведения: выделяем созданный столбец дат -вкладка Преобразование

После этого можно удалить лишние столбцы (например, столбец «Дата отказа») и останется выгрузить данные на лист: Главная
В загруженном листе нам останется сделать форматирование, чтобы отметить только те ячейки, в которых у клиентов были активные подписки. Выделяем ячейки со значениями 0 и 1(те, что под датами) -Главная
А чтобы нам единички и нули не портили картину, мы опять выделим все ячейки с нулями и единичками -Правая кнопка мыши -Формат ячеек
Теперь нули и единички видны не будут, а формат будет работать. В итоге добьемся нужного результата.
Но что делать, когда надо отследить подписку не по дням, а по месяцам? Самый большой тип длительности, который поддерживает функция duration – это дни. Поэтому придется хитрить. Здесь функция
Добавляем новый столбец(вкладка Добавление столбца
let
start = [Дата продажи],
end = [Дата отказа]
in
List.Generate(
()=>[day=start],
each [day]<=end,
each [day=Date.AddMonths([day], 1)],
each [day]
) |
А дальше все так же: щелкнуть левой кнопкой мыши на значке разнонаправленных стрелок -Развернуть в новые строки
Чуть подробнее про то, что мы записали в нашем созданном столбце:
Т.е. функция берет дату начала как точку отсчета(
На самом деле, для того, чтобы это использовать не надо особо вдумываться в процесс. Копи-паст никто не отменял 😊 Самое главное, на что здесь стоит обратить внимание, это функция
Date.AddDays – добавляет дниDate.AddWeeks – добавляет неделиDate.AddMonths – добавляет месяцы(что мы и делали)Date.AddQuarters – добавляет кварталыDate.AddYears – добавляет годы
ВАЖНО: Что надо помнить, если используем создание списка не под дням, а, например, по месяцам. Даты для месяцев у нас могут быть разные (например, в примере выше дата начала для клиента «А» 10.09.2020, а дата окончания - 07.02.2021). Это может привести к тому, что в каких-то строках могут пропасть последние месяцы. Решается это довольно просто: сразу после того, как загрузили данные и изменили тип столбцов на тип Дата(второй шаг запроса - перед добавлением пользовательского столбца), необходимо щелкнуть правой кнопкой мыши по столбцу дат -выбрать пункт Преобразование(Transform) -Месяц(Month) -Начало месяца(Start of Month) . Это заставит нашу функцию вычислять интервалы по месяцам корректно. Точно такой же алгоритм и для других периодов: лет, недель, кварталов.
Список дат при помощи Power Query.xlsx (72,7 КиБ, 1 046 скачиваний)
Так же см.:
Получить данные из файлов XML при помощи Power Query
Как перейти к определенной строке таблицы в Power Query
Относительный путь к данным PowerQuery
Курс валют при помощи Power Query
![]()
