Подскажите, как правильно предать имя колонки (ИмяКолонкиИсточника) в функцию в строке 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
Михаил Л, и тогда еще модификация функции: 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