Excel Power Query — Удалите столбец, если он существует, в противном случае не пытайтесь

#powerquery

Вопрос:

У меня есть вычисляемый столбец Custom = Column1 Column2 — Column3 После вычисления мне нужно удалить все столбцы, кроме пользовательских, Проблема иногда в том, что один из столбцов [Column4] не существует в наборе данных, я могу правильно рассчитать пользовательский с помощью «попробуйте иначе», как в:

  #"Added Custom" = Table.AddColumn(#"Previous Step", "Custom", each [Column2] [Column3]- (try [Column4] otherwise 0)),
    #"Removed Columns7" = Table.RemoveColumns(#"Added Custom",{"Column2", "Column3", "Column4"}), 
 

Это работает нормально, однако второй шаг завершается неудачей, если [столбец 4] не существует.

Поэтому мне нужен способ проверить, существует ли [Column4], и удалить его, если он существует, в противном случае не пытайтесь.

Комментарии:

1. Извините, заголовок должен был быть «Удалить столбец, если он существует, в противном случае не пытайтесь».

2. Работало ли для вас какое-либо из этих решений?

Ответ №1:

как насчет

 #"Added Custom" = Table.AddColumn(#"Previous Step", "Custom", each [Column2] [Column3]- (try [Column4] otherwise 0)),
#"Removed Columns" = try Table.RemoveColumns(#"Added Custom,{"Column4"}) otherwise #"Added Custom"
 

Ответ №2:

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

Кроме того, вы можете пересечь все столбцы таблицы со своим списком.

 Table.RemoveColumns(
    #"Added Custom",
    List.Intersect(
        {
            Table.ColumnNames(#"Added Custom"),
            {"Column2", "Column3", "Column4"}
        }
    )
)
 

Ответ №3:

Другой способ:

 add = Table.AddColumn(Source, "Custom", each List.Sum({[Column2],[Column3],-[Column4]?})),
del = Table.RemoveColumns(add,{"Column2", "Column3", "Column4"}, 1)
 

Ответ №4:

Если вы хотите сохранить только один столбец Custom , просто используйте таблицу.Выберите цвета.

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

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

   #"Removed Columns"= Table.RemoveColumns(#"Previous Step", 
      List.Select(Table.ColumnNames(#"Previous Step"), each Text.StartsWith(_,"Column")))