Страницы: 1
RSS
PowerQuery Инкремент на группу по условию
 
Добрый день

Ребята, совсем не давно начал изучение PowerQuery, прошу помочь в решении задачи.
Пример на картинке.
Суть: есть столбец "Год" с годом и нулями, нужно сделать столбец в котором будет выводиться инкремент до определенного условия, т.е. когда видит год то значение инкремента сбрасывается.
 
С помощью локальной группировки
Шлюхогон42
 
Дмитрий спасибо!
Но уточнение
Необходимо прикрутить данную группировку к уже примененным шагам преобразования таблицы. Так как столбец "Год" появляется в процессе преобразования первоначального набора данных.
 
Цитата
написал:
Необходимо прикрутить данную группировку к уже примененным шагам преобразования таблицы.
Приложите пример с уже применёнными шагами преобразования таблицы
Шлюхогон42
 
Цитата
Дмитрий Никитин написал:
Приложите пример с уже применёнными шагами преобразования таблицы

Ок
 
Файл
Изменено: web-master - 08.07.2026 07:40:06
 
Лучше приложите пример выгрузки и итоговую таблицу, которую хотите получить (не ту, которую потом еще придется дорабатывать). Это часто бывает важным и в конечном итоге все к этому приходит.
 
sotnikov, после решения указанной выше проблемы я уже без проблем доработаю таблицу до нужного формата.
Полученные индексы помогут сослаться на нужные строки для получения из них значений для преобразования массива в построчный массив, так как сейчас нужные данные находятся в разных строках.

Но если нужно пример выгрузки прикладываю.
Получить из нее нужно массив как в примере на картинке.
Изменено: web-master - 08.07.2026 08:24:47
 
Хорошо, пробуйте доработать.
pq
 
sotnikov, спасибо, работает, но пока только на предварительном просмотре.
В сам excel почему то долго крутит запрос к файлу, и так не обновляет и ошибок не выводит.
Я думаю от количества строк в файле выгрузке не должно зависеть, около 120 тыс.строк.
Пока таких 2 файла, на одном также не обновляет.
 
web-master, не пойму зачем эти индексы. И картинка, которая "что надо получить", на этот вопрос не отвечает. У Вас данные идут блоками по 2-3 строки. Вы эти доп строки с субконто как-то хотите приложить к первой строке блока? Но как? Может их "склеить" надо (отдельно субконто Дт, отдельно Кт или как-то еще). В файле я сократил данные до 2х таких блоков для примера. Вы можете на основе этих данных составить таблицу "что надо"? Тогда всем понятно станет что требуется. Может и индекс не понадобится.
Пришелец-прораб.
 
AlienSx, добавил в файл пример как в итоге должно получиться.
Индекс нужен для того чтобы понимать из скольких строк состоит блок данных 2, 3 или их может быть и больше.
Затем при помощи этого индекса и добавления условного столбца я выделю нужные данные в отдельный столбец. Например если блок состоит из 2 строк то берем данные из 1 и 2 строки, если 3 строки то берем из 1 и 3.
Затем при помощи "Заполнения Вверх" заполню весь столбец данными, т.е. получится что все будет собрано по строке 1, и затем строки 2 и 3 можно убрать, в итоге из например 2 блоков данных по 2-3 строки получим всего 2 строки как во вложенном примере.

Можно было бы обойтись без этого индекса если бы например в блоке данных на строках 2 или 3 была какая то ячейка (флаг) на которую можно было сослаться как на условие, но в выгрузке с этими счетами ее нет. приходиться придумывать свои костыли.
Изменено: web-master - 08.07.2026 13:27:16
 
Цитата
web-master написал:
Например если блок состоит из 2 строк то берем данные из 1 и 2 строки, если 3 строки то берем из 1 и 3.
если обобщить, то нужно брать первую и последнюю строку из Субконто Дт и только первую из Субконто Кт. Верно?
Пришелец-прораб.
 
AlienSx, в данной реализации да.
Но я хотел сделать сразу универсальное решение на будущее если блоки данных будут больше по количеству строк.
Потому что может возникнуть необходимость брать данные из середины блока если они там будут.
Изменено: web-master - 08.07.2026 13:54:17
 
Здравствуйте!

web-master, Вы просите пронумеровать строки от 1 до n внутри блока. Но цифра сама по себе ничего не значит для данных. Почему вы берете строку №3? Потому что она последняя? А если блок вырастет до 5 строк, а нужные данные окажутся на строке №4? Какой ее признак скажет системе: "возьми меня"? Без этого признака любой написанный код сломается при первом же изменении структуры файла.

Если бы вам пришлось объяснить стажеру ручками перенести эти данные в другую таблицу, какую инструкцию Вы бы ему написали? Вот эта инструкция нам и необходима. А сейчас Ваши пояснения для нас выглядят так: "Бери то, не знаю, что, когда увидишь там, не знаю где"? После этого как Вы думаете какой результат вы получите от стажера.

Сначала необходимо превратить Ваше «ХОЧУ» в понятный алгоритм, тогда и получите от экспертов универсальный рабочий код. Ведь именно этого они хотят от Вас, а не делать для Вас частичное решение, которое Вы даже не знаете как использовать. Написание кода под гипотетические будущие блоки — это пустая трата времени, код опирается на логику, которой у вашей задачи еще нет.

Сделайте следующее: соберите один файл, где будут представлены все проблемные кейсы, которые придут вам в голову в ближайшие полгода (блоки по 2, 3, 4 и 5 строк). Вручную напишите конечный результат для каждой строки. И когда Вы будете собирать коечный результат, то спросите себя «почему я выбираю эту строку, по каким критериям я ее выбрал?» Вот эти критерии и есть путь к решению…

Изменено: Ma_Ri - 08.07.2026 16:44:05
Ma_Ri ≠ Мария
 
web-master, добавить к замечанию Ma_Ri нечего. Затея с индексом выглядит крайне странной. Пока могу только предложить альтернативный вариант создания этого индекса. Может быть и "взлетит" на Ваших данных.
вариант кода
Пришелец-прораб.
 
AlienSx, Спасибо огромное, работает и выгружает. Теперь через дополнительные шаги преобразую массив как нужно.
Насчет странной идеи, согласен может и странное, но пока ничего более элегантного не придумал, так как пользуюсь PowerQuery пару дней. Но тем не менее после того как это все собиралось/копировалось руками и преобразовывалось через формулы, даже данная идея уже выглядит как "запустить ракету в космос" )))
Страницы: 1
Читают тему
Наверх