Страницы: 1
RSS
Как в PQ передать имя столбца в функцию
 
Подскажите, как правильно предать имя колонки (ИмяКолонкиИсточника) в функцию в строке Corrected?
Один из вариантов, который нашел, является использование Record.Field, но как его правильно применить к ситуации, не пока не понимаю
Код
(ИмяКолонкиИсточника as text, ИмяНовойКолонки as text)=>
let
    Источник = Excel.CurrentWorkbook(){[Name="База"]}[Content],
    Dict = Excel.CurrentWorkbook(){[Name="СписокЗамены"]}[Content],

    Lookup = List.Buffer(List.Zip(Table.ToColumns(Dict))),

    Corrected = List.ReplaceMatchingItems(Источник[ИмяКолонкиИсточника], Lookup),

    Result = Table.FromColumns(Table.ToColumns(Источник) & {Corrected}, 
                               Table.ColumnNames(Источник) & {ИмяНовойКолонки})
in
    Result
Изменено: Александр Медведев - 09.05.2022 20:26:42
Если не можешь победить беспорядок, то надо возглавить его.
 
Цитата
Александр Медведев написал:
Источник[ИмяКолонкиИсточника]
заменить на
Код
Table.ToColumns(Table.SelectColumns(Источник,{ИмяКолонкиИсточника})){0}
У меня так
 
Все получилось. Благодарю Михаил за помощь!
Если не можешь победить беспорядок, то надо возглавить его.
 
Александр Медведев, можно просто Table.Column
 
surkenny, есть такое)
Код
Corrected = List.ReplaceMatchingItems(Table.Column(Источник,ИмяКолонкиИсточника), Lookup),
 
Михаил Л, и тогда еще модификация функции:
1. Можем менять в списке столбцов.
2. Список новых столбцов можно не указывать, добавятся столбцы с префиксом "new_".
3. Можно задать операцию "transform", тогда замена выполнится в текущих столбцах, а не будут создаваться новые.
4. Можно указать имя таблицы замен.
Код
( table as table, columnNames as list, optional newColumnNames as list, optional operation as text, optional dictTableName as text ) =>
  let
    Dict = Excel.CurrentWorkbook(){[ Name = dictTableName ?? "Справочник" ]}[Content],
    Lookup = List.Buffer ( List.Zip ( Table.ToColumns ( Dict ) ) ),
    NewNames = newColumnNames ?? List.Transform ( columnNames, ( x ) => "new_" & x ),
    Corrected = List.Accumulate ( columnNames, {}, ( s, c ) => s & { List.ReplaceMatchingItems ( Table.Column ( table, c ), Lookup ) } ),
    ResultAdd = Table.FromColumns ( Table.ToColumns ( table ) & Corrected, Table.ColumnNames ( table ) & NewNames ),
    ResultTransform = Table.TransformColumns (
      table,
      List.Transform ( columnNames, ( x ) => { x, ( y ) => List.ReplaceMatchingItems ( { y }, Lookup ){0} } )
    ),
    Result = if operation = "transform" then ResultTransform else ResultAdd
  in
    Result
Страницы: 1
Наверх