Чтобы загрузить ваши существующие данные в PQ, это должна быть таблица. Чтобы упростить это, я бы преобразовал его в таблицу и снял флажок «У моей таблицы есть заголовки». Затем поместите несколько меток в строки идентификаторов, чтобы мы могли легко их преобразовать. Выглядело это так после того, как я это сделал.
Затем загрузите вашу таблицу в PQ с опцией «Из таблицы». Вероятно, он попытается установить типы и продвигать заголовки по умолчанию, что не помогает, поэтому удалите эти шаги. Это должно выглядеть так.
Чтобы иметь возможность отобразить несколько заголовков строк, нам нужно выполнить некоторые сводные преобразования. Сделайте ссылку на таблицу, которую мы только что импортировали.
Оставьте первые 3 строки, выберите первый столбец и «Отключите другие столбцы». Затем снова выберите первый столбец и «Сводные столбцы». Выберите столбец «Значение» в качестве «Столбца значений» и в разделе «Дополнительные параметры» выберите «Не объединять».
После этой оси у вас будет таблица, которая отображает все ваши столбцы в строки их заголовков. Я преобразовал столбец с числами в текст, так как позже мы добавим его как текст. Таблица результатов выглядит следующим образом:
Полный код этого запроса:
let
Source = Table1,
#"Kept First Rows" = Table.FirstN(Source,3),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Kept First Rows", {"Column1"}, "Attribute", "Value"),
#"Pivoted Column" = Table.Pivot(#"Unpivoted Other Columns", List.Distinct(#"Unpivoted Other Columns"[Column1]), "Column1", "Value"),
#"Changed Type" = Table.TransformColumnTypes(#"Pivoted Column",{{"Region", type text}})
in
#"Changed Type"
Затем вернитесь и сделайте еще одну ссылку на вашу импортированную таблицу. На этот раз удалите верхние 3 строки, выберите первый столбец и снимите флажок Другие столбцы. Вы получите список ваших дат со всеми остальными столбцами данных, не развернутыми рядом с ними. Теперь вы можете объединять запросы, сопоставляя столбцы атрибутов из этой таблицы и таблицы, в которой вы отобразили строки заголовка.
Разверните объединенные данные, и теперь у вас есть строки заголовков, сопоставленные с каждой строкой данных в вашей таблице. Вы можете добавить пользовательский столбец, который создает необходимый столбец уникального идентификатора, а затем удалить и переместить столбцы, чтобы получить нужные данные результата. Пользовательский код столбца выглядел для меня так:
[Country Code]&"_"&DateTime.ToText([Column1], "MM/dd/yyyy")&"_"&[Region]
И это была таблица результатов:
Полный код М для этой части:
let
Source = Table1,
#"Removed Top Rows" = Table.Skip(Source,3),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Removed Top Rows", {"Column1"}, "Attribute", "Value"),
#"Merged Queries" = Table.NestedJoin(#"Unpivoted Other Columns",{"Attribute"},RowIDs,{"Attribute"},"RowIDs",JoinKind.LeftOuter),
#"Expanded RowIDs" = Table.ExpandTableColumn(#"Merged Queries", "RowIDs", {"Country Code", "Country", "Region"}, {"Country Code", "Country", "Region"}),
#"Added Custom" = Table.AddColumn(#"Expanded RowIDs", "ID", each [Country Code]&"_"&DateTime.ToText([Column1], "MM/dd/yyyy")&"_"&[Region]),
#"Removed Other Columns" = Table.SelectColumns(#"Added Custom",{"Value", "ID"}),
#"Reordered Columns" = Table.ReorderColumns(#"Removed Other Columns",{"ID", "Value"})
in
#"Reordered Columns"