Как переименовать заголовки, используя цикл в Power BI?

У меня есть ситуация, когда мне нужно переименовать заголовки на основе таблицы со старым именем (HeadersTranslated[HeaderList]), новым именем (HeadersTranslated[HeaderEnglish]) и номером индекса (HeadersTranslated[Indeks]).

Поэтому я пытаюсь перебрать номера индексов и сделать переименование для каждого.

Однако я не могу заставить его работать более чем на 1 столбец за раз (заменяя StartTheLoop(HeadersTranslated[Indeks]) с StartTheLoop(0) например, ниже:

let
   Source = Data_Cyrillic,
   #"Promoted Headers" = Table.PromoteHeaders(Source,[PromoteAllScalars=true]),
   #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Column1", type number}, ... , {"Column52", type number}}),

   StartTheLoop = (MyCounter)=>

   let     
       #"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{HeadersTranslated[HeaderList]{MyCounter}, HeadersTranslated[HeaderEnglish]{MyCounter}}})
   in
       #"Renamed Columns"
in
   StartTheLoop(HeadersTranslated[Indeks])

2 ответа

Это не использует цикл или индекс, но я считаю, что это решает вашу реальную проблему.

Если я начну с этой таблицы как столбцы, которые я хочу переименовать, я назову это Table1:

И это как моя таблица со списком новых имен столбцов, которые я хочу использовать - я назову эту таблицу NewColumnNames:

Затем, работая в Таблице 1, я могу дважды щелкнуть заголовок первого столбца и переименовать его как угодно - я наберу Test:

Затем в строке формул замените эту выделенную часть, представляющую собой список имени столбца, который я заменяю ("Column1"), и имени, которое я заменяю на ("Test")...

...с List.Zip({Table.ColumnNames(Source),NewColumnNames[NewColumnNames]}), Это изменение заменяет все исходные имена столбцов именами столбцов из списка NewColumnNames (столбец) в таблице NewColumnNames.

List.Zip Функция молнии, как молния (не как файловый компрессор). Он сплетает списки вместе, как зубы на молнии. В этом случае он принимает имя первого столбца, "Column1" (которое он извлекает из списка, полученного функцией Table.ColumnNames(Source)), затем первое NewColumnName, "New Column1" (которое оно извлекает из столбца таблицы NewColumnNames[NewColumnNames]) и помещает их в новый список. Затем он перемещается на имя второго столбца, затем на второе имя NewColumnName и т. Д., Чтобы создать список списков. Список, который он создает, в основном: {{"Column1", "New Column1"}, {"Column2", "New Column2"}, {"Column3", "New Column3"}, {"Column4", "New Column4"}},

В более общем смысле, если вы хотите иметь Table1 с заменами заголовков столбцов для Table2, вы можете использовать этот код. В этой версии порядок строк между заголовками столбцов таблиц Table1 и Table2 не должен совпадать, а также не требуется соответствующего соответствия для каждой строки в Table1, так что вы можете предварительно заполнить замены заголовков столбцов, которые еще могут не потребоваться.

let
//Table1 is two column table with columns titles Old and New
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
ReplacementTable = Table.TransformColumnTypes(Source,{{"Old", type text}, {"New", type text}}),
//Table2 is any table where column titles will be replaced using Table1
Source2 = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
DemoteHeaders = Table.DemoteHeaders(Source2),
HeaderTransposed =Table.FromList(Table.ColumnNames(Source2)),
#"Merged Queries" = Table.NestedJoin(HeaderTransposed,{"Column1"},ReplacementTable ,{"Old"},"Headers",JoinKind.LeftOuter),
#"Expanded Headers" = Table.ExpandTableColumn(#"Merged Queries", "Headers", {"New"}, {"Headers.New"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Headers",{"Column1"}),
HeaderTransposed2 = Table.Transpose(#"Removed Columns"),
CombinedTables = Table.Combine({HeaderTransposed2,DemoteHeaders}),
PromoteHeaders = Table.PromoteHeaders(CombinedTables),
RemoveFirstRowFormerHeaders = Table.Skip(PromoteHeaders,1)
in RemoveFirstRowFormerHeaders
Другие вопросы по тегам