Power Query - преобразование данных из одного столбца во всю таблицу - PullRequest
0 голосов
/ 08 октября 2018

У меня есть требование, где у меня есть такая таблица -

Фактическая таблица с 2 столбцами

Column1                                              Column2
ColAValue $$ ColBValue $$                            New Row
ColCValue                                            Above Row
ColCValue2                                           Above Row
$$ ColDValue                                         Above Row
ColAValue $$ ColBValue $$ ColCValue $$ ColDValue     New Row
ColAValue $$ ColBValue $$ ColCValue                  New Row
$$ ColDValue                                         Above Row

Я знаю по требованию, у меня будет 4 столбца в моем наборе данных, оставляя столбец 2 .

Мне нужна моя преобразованная таблица как новая таблица с использованием редактора запросов.

Это мой ожидаемый результат,

OutTable с 4 столбцами

Expected Output

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

Как я могу преобразовать свою таблицу ввода в эту таблицу вывода в редакторе запросов?

Окончательный вывод Тип данных не имеет значения.

Первоначальный шаг - перенести значения строки из вышеприведенной строки в новую строку с разделителем и получить его как одну строку.

1 Ответ

0 голосов
/ 09 октября 2018

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

Сначала создайте столбец индекса (на вкладке «Добавить столбец»).

СейчасВы можете создать свой пользовательский столбец группировки, взяв максимальный индекс, как описано выше.Формула может выглядеть примерно так:

List.Max(
    Table.SelectRows(#"Prev Step Name",
        (here) => [Index] >= here[Index] and here[Column2] = "New Row"
    )[Index]
)

Ваша таблица должна выглядеть следующим образом:

Group Custom Column

Теперь мы используем группуПо (на вкладке «Главная») группировка по столбцу Group и агрегирование по Column1.

Group By

Но мы собираемся изменитьагрегирование от List.Max до Text.Combine, поэтому код для этого шага будет

= Table.Group(#"Added Custom", {"Group"},
      {{"Concat", each Text.Combine([Column1]," "), type text}})

Теперь таблица должна выглядеть следующим образом:

Concatenated

Отсюда вы можете выполнить Разделение столбца по разделителю (на вкладке «Главная»), используя " && " в качестве разделителя.

Измените любые имена столбцов по своему желанию и удалите столбец Group, если нетбольше, чем нужно, и результатом должен быть ваш требуемый вывод.

Desired Output


М-код для всего запроса:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45Wcs7PcQxLzClNVVBRUQBynGAcJR0lv9RyhaD8cqVYHbA6Z7AUUNwxKb8sFVPGCEMKYqQLTn3YbVaAm6iAZgCagwhpR9OB2zWxAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}}),
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 1, 1),
    #"Reordered Columns" = Table.ReorderColumns(#"Added Index",{"Index", "Column1", "Column2"}),
    #"Added Custom" = Table.AddColumn(#"Reordered Columns", "Group", each List.Max(Table.SelectRows(#"Reordered Columns", (here) => [Index] >= here[Index] and here[Column2] = "New Row")[Index]), Int64.Type),
    #"Grouped Rows" = Table.Group(#"Added Custom", {"Group"}, {{"Concat", each Text.Combine([Column1]," "), type text}}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Grouped Rows", "Concat", Splitter.SplitTextByDelimiter(" $$ ", QuoteStyle.Csv), {"COL1", "COL2", "COL3", "COL4"}),
    #"Removed Columns" = Table.RemoveColumns(#"Split Column by Delimiter",{"Group"})
in
    #"Removed Columns"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...