Power Query: добавьте несколько настраиваемых столбцов с помощью List.Accumulate - PullRequest
1 голос
/ 05 августа 2020

В Excel Power Query я пытаюсь добавить несколько настраиваемых столбцов с List.Accumulate и хочу заполнить каждый столбец значениями из значения current.

Вот мой пример кода:

let
    Query1 = let
    Source = Excel.CurrentWorkbook(),
    #"Expanded Content" = Table.ExpandTableColumn(Source, "Content", {"Region", "Industry", "Product type", "Series", "2000", "2001", "2002", "2003", "2004", "2005"}, {"Region", "Industry", "Product type", "Series", "2000", "2001", "2002", "2003", "2004", "2005"})
in
    #"Expanded Content",
    #"Changed Type" = Table.TransformColumnTypes(Query1,{{"2000", type number}, {"2001", type number}, {"2002", type number}, {"2003", type number}, {"2004", type number}, {"2005", type number}}),
    #"Added Custom" = List.Accumulate({2000..2005}, #"Changed Type", (state, current) => Table.AddColumn(state, "P_" & Number.ToText(current), each [current]))
in
    #"Added Custom"

Все работает нормально, и я получаю 6 новых столбцов с именами P_2000, P_2001, et c. В качестве примера я хотел заполнить каждый новый столбец соответствующими данными из «старых столбцов». Поэтому в столбце «P_2000» я хотел бы иметь те же числа, что и в существующем столбце «2000».

Ошибка появляется с each [current], потому что он не распознает имя столбца. Есть ли обходной путь? Я попытался преобразовать "текущее" значение в текст, но у меня это тоже не сработало.

Рад любым идеям!

1 Ответ

0 голосов
/ 09 августа 2020

Не проверено, но я думаю, вы захотите изменить эту строку:

#"Added Custom" = List.Accumulate({2000..2005}, #"Changed Type", (state, current) => Table.AddColumn(state, "P_" & Number.ToText(current), each [current]))

на:

#"Added Custom" = List.Accumulate({2000..2005}, #"Changed Type", (state, current) => Table.AddColumn(state, "P_" & Number.ToText(current), each Record.Field(_, current)))

При обработке записей и доступе к полю я верю, что бы вы ни поместили между [ и ] трактуется буквально. Вкратце и неформально разница заключается в следующем:

  • [current] = получить поле с буквальным названием «текущее»
  • Record.Field(_, [current]) = получить поле с любым именем current значение

Не имеет отношения, но поскольку добавляемые столбцы идентичны копируемым столбцам, может иметь смысл использовать Table.DuplicateColumn ( подробности ) вместо Table.AddColumn ( подробности ) внутри вашего кода List.Accumulate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...