Добрый день!!! Сразу скажу в PQ новичок, текст будет немного сумбурный Суть проблемы: необходимо объединить 2 списка из 2-х столбцов. Теперь подробнее, но в картинках: С начало приведу пример с того, что примерно нужно получить (не нужные для примера столбцы убрал)
ПК+, начало и ПК+, коней - это начало и конец участка производства работ т.е если 1 участок заканчивается на ПК10+00, а второй начинается на ПК10+00 то их можно объединить в один участок Группируем участки с учетом "стороны" и "вида работ", получаем:
Группируем по виду работ, получаем:
Примерно такой конечный вид должен быть. Теперь перейдем к QP: Исходные данные:
Преобразуем к такому виду:
А вот и суть проблемы: как собрать два столбца со списками в кучу???? Хотел сделать отдельной функцией, что то типа: Дано: List1, List2. if (List2 = 0) then List1[0] /*т.к если лист2 пуст то значит работы ведутся точечно на одном месте*/ else цикл пока N < List.NonNullCount(List2) /* не знаю как прописать цикл */ List1[N]&" - "&List2[N] &", " после цикла убрать два последних символа ", " по итогу в ячейке должно стать: ПК15+05 - ПК16+00, ПК20+00 - ПК30+00, ПК50+00 - ПК60+00 Заранее спасибо!!!
Для модераторов, предлагаю тему: Power Query. Объединение текстовых списков в единую строку. AlexandrZh, соблюдайте правила, и добавьте к вашему запросу такой шаг
Код
= Table.CombineColumns(#"Добавлен пользовательский объект2",{"ПК_нач", "ПК_кон"}, (x)=> Text.Combine( List.Transform( List.Zip( x ), each Text.Combine(_, " - ") ), ", "), "Сведено")
Спасибо большое, все замечательно работает. Позволю себе немного порассуждать для лучшего понимания, возможно с ошибками, прошу поправить. функция Table.CombineColumns() принимает 4 аргумента, 1 - таблица, 2 - столбцы для объединения, ({"ПК_нач", "ПК_кон"}) 3 - функцию описывающею каким именно образом будут объединены столбы, (x) 4 - имя нового столбца. ("Сведено")
функция (х), где "х" это наши столбцы со списками, функция делает следующее: /* ВОТ тут сложно, пока писал раз 10 перечитал руководство, вроде дошло */ подставляем в функцию List.Zip( x ) наши списки со списками из столбцов на выходе получаем простые списки (в один уровень), затем передаем полученные списки в List.Transform(List.Zip( x ), each Text.Combine(_, " - ") ) и на выходе получаем новый список значений, которые объедены между собой через each Text.Combine(_, " - ") далее комбинирует текст использую функцию Text.Combine(текст, разделитель) /* тут все понятно */ в качестве текста подставляем список List.Transform()
как то так...было тяжело понять как функция List.Zip( x ) перебирает списки, не сразу понял (((( еще раз спасибо !!!!