Страницы: 1
RSS
Объединение текстовых списков в единую строку.
 
Добрый день!!! Сразу скажу в 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
Заранее спасибо!!!
Изменено: AlexandrZh - 21.02.2020 17:12:45
Excel 2019
 
Цитата
AlexandrZh написал:
Сразу скажу
Э, нет. Сначала, будьте любезны, прочтите Правила
 
Для модераторов, предлагаю тему:
Power Query. Объединение текстовых списков в единую строку.
AlexandrZh, соблюдайте правила, и добавьте к вашему запросу такой шаг
Код
= Table.CombineColumns(#"Добавлен пользовательский объект2",{"ПК_нач", "ПК_кон"}, (x)=> Text.Combine( List.Transform( List.Zip( x ), each Text.Combine(_, " - ") ), ", "), "Сведено")
Изменено: PooHkrd - 21.02.2020 17:22:54
Вот горшок пустой, он предмет простой...
 
Спасибо большое, все замечательно работает.
Позволю себе немного порассуждать для лучшего понимания, возможно с ошибками, прошу поправить.
функция 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 ) перебирает списки, не сразу понял ((((
еще раз спасибо !!!!
Изменено: AlexandrZh - 22.02.2020 21:36:47
Excel 2019
Страницы: 1
Наверх