Пользовательский столбец с происхождением таблицы
У меня есть силовой запрос с 14 таблицами из 14 листов. Столбцы в каждой таблице различны. У некоторых есть столбцы, уникальные для листа. Все они имеют около 10 столбцов, но порядок меняется.
Как я могу добавить пользовательский столбец для отображения источника листа или источника таблицы?
(Я стратегически назвал таблицы / листы для каждой таблицы на листе следующим образом Table Name = Sheet Name
). Я новичок в power-query, и под новым, я имею в виду, я построил свой первый сегодня.
Я попробовал пользовательский столбец с формулой: Table.AddColumn(#"Changed Type", "Custom", each Source{[Item="Report",Kind="Sheet"]}[Name])
который не работает, как показано ниже.
1 ответ
Все таблицы, которые вы хотите связать вместе в своем запросе, не обязательно должны иметь одинаковую структуру (имена столбцов). Вот решение для этого случая.
Вы должны написать собственный М-код. Используйте в качестве первого шага функцию Excel.CurrentWorkbook.
Вот M-код, который вы можете поместить в свой редактор (имя запроса в моем примере "OutputTable" -> заменяется приведенным ниже кодом!):
let
Source = Excel.CurrentWorkbook(),
// Filter out the table (= your Query Name) which will result as output
#"Filtered Rows" = Table.SelectRows(Source, each ([Name] <> "OutputTable")),
// Bring the table name as 1st column
#"Reordered Columns" = Table.ReorderColumns(#"Filtered Rows",{"Name", "Content"}),
// Rename the "Name" column to prevent conflict with next steps
#"Renamed Columns" = Table.RenameColumns(#"Reordered Columns",{{"Name", "TableName"}}),
// Find out all column names present in Content tables
#"all table column name" = List.Accumulate(#"Renamed Columns"[Content], {}, (state, current) => List.Union({state, Table.ColumnNames(current)})),
// Dynamically expand all columns
#"Expanded {0}" = Table.ExpandTableColumn(#"Renamed Columns", "Content", #"all table column name")
in
#"Expanded {0}"
Шаг #"имя столбца всей таблицы" вдохновлен этим ответом на Stackoverflow.