Отмените сведение столбцов с несколькими соответствующими строками с заголовками. Язык PowerQuery M | Несколько разворотов одновременно

У меня есть таблица, в строках которой есть несколько заголовков, которые я хочу сохранить при развороте таблицы, но я не смог найти способ развернуть ее по мере необходимости. Ниже вы найдете пример исходной таблицы.

Фактические данные Фактические данные План План 20 финансовый год 20 финансовый год 21 финансовый год 21 финансовый год Страна Владелец 01.01.2020 01.01.2020 01.01.2020 01.01.2020 Франция Ричард 100 150 80 160 Франция Мартин 120 140 130 140 Франция Пьер 50 100 50 80

Ниже показано, чего я хочу достичь (отменить поворот 4 столбцов, но сохранить заголовки в строках как новые столбцы).

Страна Владелец Версия Год Дата Ценить Франция Ричард Фактические данные 20 финансовый год 01.01.2020 100 Франция Ричард Фактические данные 21 финансовый год 01.01.2020 150 Франция Ричард План 20 финансовый год 01.01.2020 80 Франция Ричард План 21 финансовый год 01.01.2020 160 Франция Мартин Фактические данные 20 финансовый год 01.01.2020 120 Франция Мартин Фактические данные 21 финансовый год 01.01.2020 140 Франция Мартин План 20 финансовый год 01.01.2020 130 Франция Мартин План 21 финансовый год 01.01.2020 140 Франция Пьер Фактические данные 20 финансовый год 01.01.2020 50 Франция Пьер Фактические данные 21 финансовый год 01.01.2020 100 Франция Пьер План 20 финансовый год 01.01.2020 50 Франция Пьер План 21 финансовый год 01.01.2020 80

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

Заранее спасибо и, пожалуйста, дайте мне знать, если какая-либо другая информация актуальна.

[Обновлено: дата в таблице фактических показателей должна быть 20 и 21 финансовый год, и год также должен измениться, то же самое и для плана, должно быть 20 и 21 финансовый год, и год также должен измениться. Я не буду менять сейчас, так как это изменит ответы, которые решили мою проблему с преобразованием умноженных заголовков в строках в столбцы]

Ваше здоровье

Я думаю, что в вашей таблице образцов есть ошибка. В первой таблице не должен быть один и тот же финансовый год для обоих столбцов «Фактические данные», не так ли?

teylyn 05.05.2024 22:35

@teylyn, вы абсолютно правы, это должно было быть в следующем году, и план должен был быть на 20 финансовый год, а затем на 21 финансовый год.

Martim On Fire 06.05.2024 01:13
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
2
88
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
let Source = Excel.CurrentWorkbook(){[Name = "Table3"]}[Content],
NewNames=List.Transform(List.Zip({
        Record.FieldValues(Source{0}),
        Record.FieldValues(Source{1}),
        List.Transform(Record.FieldValues(Source{2}), each Text.From(_)
        )}), each Text.Combine(_,":")),
Rename=Table.RenameColumns(Table.Skip(Source,3),List.Zip({Table.ColumnNames(Source),NewNames})),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Rename, {"Country", "Owner"}, "Attribute", "Value"),
#"Split Column by Delimiter" = Table.SplitColumn(#"Unpivoted Other Columns", "Attribute", Splitter.SplitTextByDelimiter(":", QuoteStyle.Csv), {"Version", "Year", "Date"}),
Touchup=Table.TransformColumns(#"Split Column by Delimiter",{{"Version", each Text.Combine(List.RemoveItems(Text.ToList(_),{"0".."9"}))}}),
Touchup2=Table.TransformColumns(Touchup,{{"Date", each Date.From(Number.From(_))}}),
#"Changed Type" = Table.TransformColumnTypes(Touchup2,{{"Date", type date}})
in #"Changed Type"

Вот один из способов сделать это в POWER QUERY


  • Сначала преобразуйте исходные данные как Structured References или Tables, но обратите внимание, что при нажатии CTRL+T, чтобы преобразовать то же самое, не выбирайте My Table As Headers.
  • Теперь откройте пустой запрос --> Data Tab --> Get Data --> From Other Sources --> Blank Query.
  • Вышеупомянутое открывает окно Power Query, теперь на вкладке Home в том же окне нажмите Advanced Editor и вставьте следующий код, не забудьте изменить имя таблицы в соответствии с вашими предпочтениями.

let
    Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
    First3Rows = Table.FirstN(Source,3),
    Rows2Columns = Table.Transpose(First3Rows),
    Merged = Table.CombineColumns(Rows2Columns,{"Column1", "Column2","Column3"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"Merged"),
    Columns2Rows = Table.Transpose(Merged),
    Combined = Table.Combine({Columns2Rows,Table.RemoveFirstN(Source,3)}),
    PromotedHeaders = Table.PromoteHeaders(Combined, [PromoteAllScalars=true]),
    UnpivotedOtherColumns = Table.UnpivotOtherColumns(PromotedHeaders, {"  Country", "  Owner"}, "Attribute", "Value"),
    SplitColumnbyDelimiter = Table.SplitColumn(UnpivotedOtherColumns, "Attribute", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Version", "Year", "Date"}),
    #"Extracted Text Before Delimiter" = Table.TransformColumns(SplitColumnbyDelimiter, {{"Date", each Text.BeforeDelimiter(_, "_"), type text}}),
    #"Changed Type" = Table.TransformColumnTypes(#"Extracted Text Before Delimiter",{{"  Country", type text}, {"  Owner", type text}, {"Version", type text}, {"Year", type text}, {"Date", type date}, {"Value", Int64.Type}})
in
    #"Changed Type"

Я думаю, что в вашей таблице образцов есть ошибка. В синей таблице не должен быть один и тот же финансовый год для обоих столбцов «Фактические данные», не так ли?

teylyn 05.05.2024 22:33

@teylyn, мадам, я скопировал образец из ОП. Я не проверял. Я был занят попытками решить эту проблему. ОП должен это уточнить, но ты прав

Mayukh Bhattacharya 05.05.2024 22:34

Извините, я не увидел, что это был ваш ответ. Я только что увидел, как мой экран мигнул, и текст появился в формате Excel. Я думал, что это вопрос. Я тоже добавил комментарий к вопросу.

teylyn 05.05.2024 22:37

Большое спасибо за объясненные шаги, это сработало хорошо, мне просто нужно было изменить тип даты на текст перед объединением трех шагов столбца, потому что я получал ошибку. Добавив, что все работает отлично! Ниже вы найдете шаг, который я добавил между третьим шагом (Rows2Columns) и 4-м (объединение). #"Измененный тип1" = Table.TransformColumnTypes(Rows2Columns,{{"Столбец3", введите текст}}),

Martim On Fire 06.05.2024 01:20

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

Martim On Fire 06.05.2024 01:25

@MartimOnFire не знаю, почему мне не нужно менять тип данных, он мне подходит.

Mayukh Bhattacharya 06.05.2024 01:25

Я понял, почему возникла ошибка, а я нет, потому что я скопировал данные из вашего сообщения в текстовом формате, и PQ прочитал их как общие.

Mayukh Bhattacharya 06.05.2024 01:31

О, великолепно, это имеет смысл @MayukhBhattacharya 😉 спасибо огромное за помощь и вклад

Martim On Fire 06.05.2024 17:54

Другие вопросы по теме