Страницы: 1
RSS
Power Query Замена значения по нескольким условиям
 
Добрый день!

Задача заменить значение в столбце если оно удовлетворяет 2м условиям сразу, если не выполняются условия - то вывести нынешнее значение.
(МОжно конечно и создать условный столбец, а потом удалить старый столбец и переименовать новый в имя старого, но хочется решение поэлегантней в 1 строку)

Мною была найдено решение схожей задачи на этом форуме:
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Сложено со столбцом" = Table.TransformColumns(Источник, {{"Столбец1", each try if _ > 0 then null else _ otherwise _ }})
in
    #"Сложено со столбцом"
В моем случае мне надо чтобы значения в столбце "Вид затрат" заменились на "Условия соблюдены" если [Вид затрат]="Не определено" И [УПС]="7501" иначе  вывести предыдущее значение из [Вид затрат]

Мною была написана такая строка, но что-то она не работает и оставляет всё без изменений... (Первый раз столкнулся с" _ " как с переменной, наверное с ней запутался где-то?)
Код
= Table.TransformColumns(#"Переименованные столбцы", {{"Вид затрат", each try if _ = "Не определено" and [УПС] = "7501" then "Условия соблюдены" else _ otherwise _ }})


Решено этой строкой
Код
= Table.TransformColumnTypes(Table.ReplaceValue(#"Переименованные столбцы", each [Название Вид затрат], each if [УПС] = "7501" and [Название Вид затрат] = "Не определено" then "Условия выполнены" else [Название Вид затрат],Replacer.ReplaceValue,{"Название Вид затрат"}), {{"УПС", type text}, {"Название Вид затрат", type text}})
Изменено: Кирилл Беляев - 13.04.2021 12:44:06
 
Файл примера бы глянуть....
 
Код
= Table.TransformColumns(#"Переименованные столбцы", {{"Вид затрат", each try if _ = "Не определено" and #"Переименованные столбцы"[УПС] = "7501" then "Условия соблюдены" else _ otherwise _ }})

ну и столбец [УПС] гляньте. Если там числовой тип, то просто 7501, если же текст, то "7501"
 
Кирилл Беляев, Table.TransformColumns работает только со значениями столбца изолированно от других столбцов. Если нужно работать со строкой и в качестве условия использовать значения из других полей одной строки таблиц, то использовать надо Table.ReplaceValue
Вот горшок пустой, он предмет простой...
 
PooHkrd, а у меня работает... Только другие столбцы нужно добавлять с указанием названия шага, т.е. не просто типа "столбец" или [столбец], а Источник[Столбец]
 
ArgentumTiger_7, повторяю
Цитата
PooHkrd написал:
Если нужно работать со строкой и в качестве условия использовать значения из других полей одной строки
Чувствуете разницу между обработкой полей одной записи и возможностью передачи в списка значений какого-то столбца в итератор от Table.TransformColumns. И что это даст? как вы будете сопоставлять какую по счету строку таблицы изменяет эта функция и какой элемент списка из переданного её столбца ставить в соответствие?
Вот горшок пустой, он предмет простой...
 
точно! Признаю свою ошибку)

а что касается условия задачи, то будет нечто вроде такого
 
ArgentumTiger_7, если брать ваш пример то лучше все таки так, чтобы не было путаницы, а то вы столбец Вид затрат аж во все три аргумента напихали. Передали аккуратно аргументы, сделали собственную функцию риплейсер, и вперед:
Код
Table.ReplaceValue(тип, each [УПС], 0,(a,b,c)=> if b = 250 and a = "не определено" then "условия соблюдены" else a,{"Вид затрат"})
Вот горшок пустой, он предмет простой...
 
ArgentumTiger_7, Благодарю
PooHkrd, благодарю, но не смог пока допетрить синтаксис вашего варианта =)

для ленивых рабочий вариант
Код
= Table.TransformColumnTypes(Table.ReplaceValue(#"Переименованные столбцы", each [Название Вид затрат], each if [УПС] = "7501" and [Название Вид затрат] = "Не определено" then "Условия выполнены" else [Название Вид затрат],Replacer.ReplaceValue,{"Название Вид затрат"}), {{"УПС", type text}, {"Название Вид затрат", type text}})
Изменено: Кирилл Беляев - 13.04.2021 12:39:33
Страницы: 1
Наверх