Excel Power Query - Как добавить столбцы внутри одной таблицы в Power Query? - PullRequest
0 голосов
/ 25 февраля 2020

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

Я работал над запросом, и он возвращает мне значения в следующем формате:

Date | Time  | Value | Time | Value...

   A   |    B   |    C    |     D  |    E...

Но мне нужно преобразовать его так:

Date | Time | Value

   A   |    B   |    C    

   A   |    D  |    E

Спасибо за помощь!

1 Ответ

0 голосов
/ 25 февраля 2020

Без использования пользовательского кода:

Загрузка данных в Powerquery с использованием данных ... Из таблицы / диапазона ...

Щелкните правой кнопкой мыши по столбцу Дата, выберите unpivot другие столбцы

Добавить столбец ... индексный столбец ... использовать имя столбца по умолчанию Индекс

Добавить столбец ... Пользовательский столбец ... с формулой = Number.Mod ([Index], 2) и имя по умолчанию Custom

Преобразует столбец индекса в чередующиеся 0/1 с

(при условии, что ваш второй столбец называется Value.1) Добавить столбец ... Custom Column ... with формула = # «Добавлен пользовательский» {[Индекс] +1} [Значение.1] и имя по умолчанию Пользовательский.1

Это поместит значение из строки ниже текущего в текущая строка

Удалите чередующуюся строку, щелкнув стрелку рядом со столбцом «Пользовательский» и удалив [x] рядом со столбцами 1

. Щелкните, выберите «Атрибут», «Индекс» и «Пользовательский», щелкните правой кнопкой мыши пункт «Удалить столбцы» *. 1023 *

Загрузка и закрытие

Предполагая, что ваши данные загружены как диапазон Table1, вы можете использовать этот код, вставленный в в начало ... Дополнительно ...

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Source, {"Date"}, "Attribute", "Value.1"),
#"Added Index" = Table.AddIndexColumn(#"Unpivoted Other Columns", "Index", 0, 1),
#"Added Custom" = Table.AddColumn(#"Added Index", "Custom", each Number.Mod([Index],2)),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Custom.1", each #"Added Custom"{[Index]+1}[Value.1]),
#"Filtered Rows" = Table.SelectRows(#"Added Custom1", each ([Custom] = 0)),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Attribute", "Index", "Custom"})
in #"Removed Columns"

Если вы хотите использовать какой-то пользовательский код, это создает две таблицы: одну таблицу с нечетными столбцами и одну с четными столбцами, отменяет поворот каждой из них, добавляет индекс для обоих, а затем объединяет их обратно на этот индекс. Работает для любого количества столбцов, может быть быстрее, чем выше для больших наборов данных.

Предполагая, что ваши данные загружены как диапазон Table1, вы можете использовать этот код, вставленный в Home ... Advanced ...

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
OddUnpivot= Table.AddIndexColumn(Table.UnpivotOtherColumns(Table.RemoveColumns(Source,List.RemoveFirstN(List.Alternate(Table.ColumnNames(Source),1,1,1),1)), {"date"}, "Attribute", "Value"), "Index", 0, 1),
EvenUnpivot= Table.AddIndexColumn(Table.UnpivotOtherColumns(Table.RemoveColumns(Source,List.Alternate(Table.ColumnNames(Source),1,1)), {"date"}, "Attribute", "Value"), "Index", 0, 1),
#"Merged Queries" = Table.NestedJoin(OddUnpivot,{"Index"},EvenUnpivot,{"Index"},"Table2",JoinKind.LeftOuter),
#"Expanded Table" = Table.ExpandTableColumn(#"Merged Queries", "Table2", {"Value"}, {"Value.1"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Table",{"Attribute", "Index"})
in #"Removed Columns"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...