Power-Query / Power-Bi: как изменить типы столбцов, только если они существуют? - PullRequest
0 голосов
/ 16 июня 2020

Я загружаю огромную таблицу Excel в power-query (используя import .csv). Этот импорт автоматически определяет типы столбцов и меняет их соответственно:

Table.TransformColumnTypes(#"Höher gestufte Header",{{"ID", Int64.Type}, {"Country", type text}, {"Customer", type text}, {"Release Name", type text}, {"Hardware Systems", type text}, {"Service By", type text}, {"Hwirelease Tags", type text}, {"Country Tags", type text}, {"Created", type datetime}, {"Last Change", type datetime}, {"Scope", type text}, {"PPM PID", Int64.Type}, {"Salesforce IDs", type text}})

Проблема:

Проблема начинается, когда я знаю, что изменить исходный код в другой .csv из более ранней даты, в которой некоторые из упомянутых ранее столбцов не существовали (например, PPM PID). Я получаю сообщение об ошибке, и мне нужно вручную удалить команду, которая пытается изменить соответствующий столбец.

Вопрос:

Есть ли какой-нибудь простой обходной путь, чтобы Power-Query пытался изменить только тип столбца если столбец существует? Или мой полный подход плох, когда имена столбцов со временем меняют свои имена?

1 Ответ

1 голос
/ 17 июня 2020

Одним из способов сделать это может быть:

  1. Создание структуры пар (например, списка или записи), где каждая пара представляет имя столбца и соответствующий ему тип. Включите все возможные столбцы (те, которые существуют, и те, которые нет).
  2. Отфильтруйте коллекцию, чтобы сохранить только столбцы, которые присутствуют в вашей таблице, а затем передайте отфильтрованную коллекцию в Table.TransformColumnTypes.

Для примера:

let
    #"Höher gestufte Header" = Table.FromColumns({
        {1, 6, 45, 67},
        {"US", "JA", "CA", "GB"}
    }, {"ID", "Country"}),
    typeTransformations = {{"ID", Int64.Type}, {"Country", type text}, {"Customer", type text}, {"Release Name", type text}, {"Hardware Systems", type text}, {"Service By", type text}, {"Hwirelease Tags", type text}, {"Country Tags", type text}, {"Created", type datetime}, {"Last Change", type datetime}, {"Scope", type text}, {"PPM PID", Int64.Type}, {"Salesforce IDs", type text}},
    changeTypes = Table.TransformColumnTypes(#"Höher gestufte Header", List.Select(typeTransformations, each Table.HasColumns(#"Höher gestufte Header", _{0})))
in
    changeTypes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...