Один из подходов с использованием Power Query может заключаться в реализации некоторых шагов, таких как:
- Получите имена 5 самых правых столбцов таблицы (которые должны дать вам список из 5 строк, все из которых конец в
" Value"
). - Для каждого имени столбца обрежьте
" Value"
с конца (который должен дать вам список из 5 различных строк, все из которых должны быть именами столбцов в вашей таблице). - Для каждого обрезанного имени столбца найдите значение в первой строке этого столбца (которое должно дать вам список из 5 различных строк, которые будут именами новых столбцов).
Код ниже в основном пытается сделать выше.
let
someTable = Table.FromRows({
{2018, 2019, 2020, 2021, 2022, 123, 355, 744, 234, 685},
{2018, 2019, 2020, 2021, 2022, 59, 1129, 254, 774, 490}
}, type table [
PFY2 = Int64.Type,
PFY = Int64.Type,
CFY = Int64.Type,
NFY = Int64.Type,
NFY2 = Int64.Type,
PFY2 Value = Int64.Type,
PFY Value = Int64.Type,
CFY Value = Int64.Type,
NFY Value = Int64.Type,
NFY2 Value = Int64.Type
]),
oldNames = List.LastN(Table.ColumnNames(someTable), 5),
columnsContainingNewNames = List.Transform(oldNames, each Text.BeforeDelimiter(_, " Value", {0, RelativePosition.FromEnd})),
newNames = List.Transform(columnsContainingNewNames, each Text.From(Table.Column(someTable, _){0})),
renamed = Table.RenameColumns(someTable, List.Zip({oldNames, newNames}))
in
renamed
Некоторые проблемы:
Для простоты я жестко закодировал 5, но если ваша таблица может измениться (так, чтобы столбцы, которые нужно переименовать, не всегда могут быть последними 5), тогда более динамичный подход c может выглядеть примерно так: oldNames = List.Select(Table.ColumnNames(someTable), each Text.EndsWith(_, " Value"))
. При этом будут выбраны все имена столбцов, заканчивающиеся на " Value"
, включая имена, которые вы, возможно, не захотите переименовывать, но это всего лишь пример, и вы можете настроить функцию предиката при необходимости.
Если ваша таблица пуста, то, я думаю, вы получите ошибку при поиске значения в первой строке (поскольку в таких обстоятельствах не будет первой строки).