Задача заменить значение в столбце если оно удовлетворяет 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}})
Кирилл Беляев, Table.TransformColumns работает только со значениями столбца изолированно от других столбцов. Если нужно работать со строкой и в качестве условия использовать значения из других полей одной строки таблиц, то использовать надо Table.ReplaceValue
PooHkrd, а у меня работает... Только другие столбцы нужно добавлять с указанием названия шага, т.е. не просто типа "столбец" или [столбец], а Источник[Столбец]
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}})