После добавления выгрузки в Power Query появился новый столбец: проверяем схему

Вчера две месячные выгрузки объединялись нормально. Сегодня к ним добавили третью, и в Power Query появился новый столбец Revenue, а Amount в новых строках стал пустым. Обновление прошло без ошибки, но итог продаж уменьшился. Причина в том, что добавление таблиц сопоставляет имена столбцов. Переименованная сумма воспринимается как новое поле, а отсутствующее значение старого поля заполняется null. Значит, перед добавлением нужно проверить договор о структуре источника.

Понять, что именно делает добавление

Table.Combine без явно заданного набора столбцов собирает объединённую схему входных таблиц. Если первая содержит ID и Amount, а вторая ID и Revenue, результат содержит все три имени. Это удобно для действительно новых необязательных свойств, но опасно для переименования обязательной суммы. Null в Amount нельзя отличить от настоящего пропуска по одной итоговой таблице: происхождение поля уже потеряно.

Начните с обязательных столбцов, без которых смысл отчёта нарушен. Для примера это ID и Amount. Перед объединением проверьте каждую таблицу отдельно. Если сначала объединить, а потом проверить наличие Amount, проверка пройдёт за счёт старых файлов, хотя новый уже повреждён. Имя источника в диагностике поможет сразу найти файл, который нужно исправить или преобразовать по новому правилу.

Остановить несовместимый источник до расчёта

Пример ниже можно вставить в пустой запрос Power Query. First соответствует согласованной схеме, NewExport использует новое имя Revenue. Функция Normalize проверяет отсутствующие обязательные столбцы, выбирает нужные поля и приводит типы. При текущем входе ожидается ошибка со словами NewExport и Amount. Это полезный результат: отчёт не обновится до частичной выручки без объяснения.

let
    First = #table({"ID","Amount"}, {{1,100},{2,200}}),
    NewExport = #table({"ID","Revenue"}, {{3,300}}),
    Required = {"ID","Amount"},
    Normalize = (t as table, sourceName as text) as table =>
        let
            Missing = List.Difference(Required, Table.ColumnNames(t)),
            Checked = if List.IsEmpty(Missing) then t
                else error Error.Record("Schema", "Missing required columns",
                    [Source=sourceName, Columns=Missing]),
            Selected = Table.SelectColumns(Checked, Required),
            Typed = Table.TransformColumnTypes(Selected,
                {{"ID", Int64.Type},{"Amount", type number}}, "ru-RU")
        in Typed,
    Result = Table.Combine({Normalize(First,"First"), Normalize(NewExport,"NewExport")})
in
    Result

Разрешить изменение осознанно

Если поставщик подтвердил, что Revenue полностью заменяет Amount по смыслу и единицам, переименуйте поле у конкретной версии источника до Normalize. Затем проверьте суммы и типы. Не следует автоматически заменять все похожие имена: Revenue может означать сумму с налогом, а Amount — без него. Сопоставление названий ещё не гарантирует сопоставимость данных.

После согласованного переименования ожидаются три строки с суммой Amount 600. Для необязательного столбца, например комментария, можно отдельно разрешить отсутствие и заполнение null. Политики должны различаться: обязательная сумма вызывает ошибку, необязательное описание может отсутствовать. Если новые дополнительные поля не нужны отчёту, их можно отбросить выбором Required, но полезно записать их появление в журнал изменений схемы.

Проверить не только имена

Даже неизменный Amount может внезапно стать текстом, содержать валютный знак или другую десятичную запись. Поэтому типизация идёт после проверки имён, а ошибки преобразования разбираются отдельно с сохранением исходной строки. Пустая таблица также должна иметь ожидаемые заголовки: отсутствие продаж за месяц и отсутствие структуры файла — разные ситуации. Количество строк и контрольная сумма по каждому источнику помогут различить их.

Для рабочего процесса сохраняйте имя файла и дату загрузки до итоговой группировки. При изменении схемы сначала обновите правило для новой версии, затем проверьте исторический файл и новый на одном наборе требований. Так добавление месячной выгрузки останется предсказуемой операцией: либо источник совместим и попадает в расчёт, либо отчёт показывает точную причину остановки до того, как неверная сумма окажется на дашборде.

Продолжить работу с данными

Чтобы довести такую проверку до регулярного отчёта, курс «Продвинутый Excel: Power Query, Power Pivot и автоматизация отчётов» разбирает загрузку и очистку данных, модель и обновление отчётности. На практикумах продаж и план-факта вы сможете связать контроль источников с проверкой сумм, которые получает пользователь сводной. Откройте программу платного курса «Продвинутый Excel: Power Query, Power Pivot и автоматизация отчётов».

Продолжить на практике