Страницы: 1
RSS
PQ. Text.Split() без добавления нового столбца., Необходимо применить функцию к текущему полю, а не создавать новый.
 
Здравствуйте!

Прошу помочь с решением задачи.
Дана таблица, где в некоторых полях ячейка содержит 2 записи: 25.11.2018; 26.11.2018
Я применяю Text.Split([Поле 2], ";")) чтобы создать список значений.

Код
    #"Добавлен пользовательский объект" = 
        Table.AddColumn(
            #"Измененный тип", 
            "Поле 2. Список",
            each Text.Split([Поле 2], ";"))


Результат работы функции меня устраивает. Но мне не нравится сценарий, где я каждый раз создают новое поле. Если у меня 20 полей, то я создам 20 новых полей с помощью Text.Split([Поле 2], ";")) и удалю старые 20.

Хотелось бы просто заменить текущее поле. Или ещё лучше - одним шагом обработать несколько полей.

Прошу подсказать как это сделать. Прикладываю файл примера с подготовленным запросом.
Благодарю!
Изменено: ivanka - 13.04.2021 15:41:59
 
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Вывод = Table.TransformColumns(
        Источник, 
        List.Transform( 
            Table.ColumnNames(Источник), 
            each {_,(t)=>Text.Split(Text.From(t),"; "), type list}) )
in
    Вывод
Изменено: PooHkrd - 13.04.2021 16:00:35
Вот горшок пустой, он предмет простой...
 
PooHkrd, благодарю! Сейчас попробую.
PooHkrd, я заметил, что при моём подходе, если в ячейке ничего нет (null), то в новом столбце появляется ошибка. Можно Вас попросить подсказать как установить "обработку" данного сценария?  
 
PooHkrd, в Вашем решении, вся таблица превращается в список в вложенными списками, т.к. в Table.ColumnNames(Источник) передаётся вся таблица. Каким образом можно передать только некоторые столбцы?

Я выполнил следующее, но получаю ошибку:
Код
Table.ColumnNames({"Поле 2"})

 
что-то подобное делал сегодня )
и добавил в изящную конструкцию Винни-Пуха свое - пролетарское ))
 
ivanka, можете показать в файле ожидаемый результат?
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
buchlotnik написал:
можете показать в файле ожидаемый результат?
Да, конечно.
На текущий момент я хотел бы извлекать все записи из ячеек таблицы во вложенный список.
Далее, я планирую действовать так: Power Query: Split Multiple Columns into Rows All At Once - YouTube

Просто хочется делать чище.
Изменено: ivanka - 13.04.2021 16:18:31
 
Цитата
ArgentumTiger_7 написал: что-то подобное делал сегодня )
Да, это оно! Спасибо!

Меня смущают шаги:
Код
Вывод = Table.TransformColumns(
        Источник, 
        List.Transform( 
            Table.ColumnNames(Источник), 
            each {_,(t)=>try Text.Split(t,";") otherwise {t}, type list}) ),
    итог = Table.SelectColumns(Table.AddColumn(Вывод, "данные", each Table.FromColumns({[Поле 1], [Поле 2], [Поле 3], [Поле 4]})), "данные"),

 

Table.ColumnNames(Источник) - мне не хотелось бы передавать всю таблицу. У меня может быть 10 полей которые не нуждаются в "извлечении". На следующем шаге мне придётся прописать эти 10 полей с теми, что мне нужны:
Код
Table.FromColumns({[Поле 1], [Поле 2], [Поле 3], [Поле 4]})), "данные")

Т.о., хотелось бы передавать в Table.ColumnNames() только необходимые поля или список полей как тут: ссылка

Изменено: ivanka - 13.04.2021 16:30:28
 
Цитата
ivanka написал:  Каким образом можно передать только некоторые столбцы?
надо записать так
Код
{"Поле 1", "Поле 2"}
 
Цитата
ArgentumTiger_7 написал:
надо записать так
Отлично! То, что нужно!
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Вывод = Table.TransformColumns(
        Источник, 
        List.Transform( 
            {"Поле 2", "Поле 3", "Поле 4"}, 
            each {_,(t)=>Text.Split(Text.From(t),"; "), type list}) )
in
    Вывод


Изменено: ivanka - 13.04.2021 16:30:12
 
del
Изменено: buchlotnik - 23.08.2021 15:36:30
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
buchlotnik написал:
гм, а что мешает всё в одном шаге сделать?
Шикарно!!!)  
 
del
Изменено: buchlotnik - 23.08.2021 15:36:15
Соблюдение правил форума не освобождает от модераторского произвола
 
buchlotnik, прекрасно!

Надеюсь, что и я лет через ..дцать также научусь)


А вообще есть книга на русском, которая детально разбирает такую глубинную структуру языка с функциями? (...) =>?

А то большинство из них обычно уровня: ткните мышкой сюда, а потом туда.
 
Цитата
ArgentumTiger_7 написал:
есть книга на русском,
нету, форум есть.
а вообще кодить без инглиша, на котором написана спецификация будет сложновато...
Изменено: buchlotnik - 14.04.2021 07:22:42
Соблюдение правил форума не освобождает от модераторского произвола
Страницы: 1
Наверх