Страницы: 1
RSS
Power Query замена значений в выбранных колонках на отрицательные при соблюдения условий в строке
 
Добрый день!
Существует проблема с отчетом.
Выгружен отчет где все цифры имеют положительные значения.
В столбце "J"  установлен статус это "Продажа" или "Возврат". Соответственно значения в строках "Продажа" должны иметь исходные значения, а вот в строках "Возврат" необходимо произвести умножения на значения "-1".

При в начальном параметре замена значений или стандартные операции нет возможности добавить условия по строке.
Заменить значения нужно  только в некоторых колонках (в предоставленном примере выделенные зеленой заливкой)
Может у кого есть идеи как это можно сделать.
Заранее спасибо за помощь  
 
Код
  columns = {"Кол-во", "Цена розничная"}, // перечисляете все нужные столбцы
    replace = Table.ReplaceValue(
        Source, 
        null,
        (x) => if x[Тип документа] = "возврат" then -1 else 1,
        (v, o, n) => v * n,
        columns
    )
Пришелец-прораб.
 
Цитата
написал:
Код  columns = {"Кол-во", "Цена розничная"}, // перечисляете все нужные столбцы
   replace = Table.ReplaceValue(
       Source,
       null,
       (x) => if x[Тип документа] = "возврат" then -1 else 1,
       (v, o, n) => v * n,
       columns
   )

Формула заработала, однако есть маленький вопрос КАК !!!




1)




Почитал спецификацию

Table.ReplaceValue(
  table as table,
  oldValue as any,
  newValue as any,
  replacer as function,
  columnsToSearch as list, ) as table
oldValueThe value you want to search for and replace. You can specify a constant, a column reference, or conditional logic.
В нашем случае oldValue почему установлено значение null???



2)
       (x) => if x[Тип документа] = "возврат" then -1 else 1,
       (v, o, n) => v * n,


Как я понимаю в выражении (x) => if x[Тип документа] = "возврат" then -1 else 1 происходит возврат значения 1 или -1.
но вот я искреннее не понимаю как происходит вызов функции (v, o, n) => v * n. И что за параметр "o" в формуле.




Но при этом все работает.
В любом случае спасибо, просто хотелось бы разобраться мне лучше , чтобы не беспокоить гуру форума в дальнейшем с простецкими вопросами.
 
Цитата
asdewq1 написал:
вопрос КАК
отвечает Александр Друзь Максим Зеленский: Table.ReplaceValue. Replacer - функция с 3мя аргументами. Назовем их v - Value, o - Old, n - New. Хотите - называйте их как угодно, хоть x, y и z. Лично мне нравится именно v, о и n (с отсылкой к их связи с другими аргументами). "Value" - это значение в одной из columnsToSearch в текущей строке. "Old" - значение, которое возвращает oldValue as any, а "New" - newValue as any соответственно. Если в качестве oldValue или newValue использовать функцию (тип any позволяет), то это должна быть функция одного единственно аргумента, через который передается текущая строка таблицы в виде записи. Вы можете "обыгрывать" это как угодно. В вашем конкретном случае надо оценить значение в одном из столбцов и если там "возврат", то умножить содержимое нужных столбцов на минус один. Получить значение множителя (1 или -1) можно либо в oldValue, либо в newValue, либо вообще сделать это в replacer, передав туда значение поля текущей строки через "o" или "n" - это не важно. От этого зависит только какой по счету аргумент replacer вы будете использовать. Я решил посчитать множитель в newValue. Значит, oldValue мне не нужен. Там можно и null написать, можно вообще что угодно там написать - в работе этот аргумент участия не принимает.
Изменено: AlienSx - 01.07.2024 14:04:55
Пришелец-прораб.
 
Цитата
написал:
отвечает Александр Друзь  Максим Зеленский
Мне всегда больше нравился Максим Поташев или Федор Двинятин. Но в данном вопросе Максим Зеленским топ.

Спасибо. Тему можно закрывать.
Страницы: 1
Наверх