Поделиться через


Работа с ошибками в Power Query

В Power Query можно столкнуться с двумя типами ошибок:

  • Ошибки на уровне шага
  • Ошибки на уровне ячеек

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

Ошибка уровня шага

Ошибка на уровне шага предотвращает загрузку запроса и отображает компоненты ошибок на желтой панели.

Снимок экрана ошибки на уровне шага процесса, где столбец не найден.

  • Причина ошибки: первый раздел перед двоеточием. В предыдущем примере причина ошибки — Expression.Error.
  • Сообщение об ошибке: раздел непосредственно после причины. В предыдущем примере сообщение об ошибке — столбец 'Column' таблицы не найден.
  • Сведения об ошибке: раздел непосредственно после строки Details. В предыдущем примере сведения об ошибке — Column.

Power Query Online отображает немного разные сведения. Сведения об ошибке по-прежнему являются столбцами, но сообщение об ошибке в сети также содержит причину ошибки (Expression.Error) и код ошибки (10224).

Снимок экрана ошибки уровня шага в онлайн-системе, когда не найден столбец.

Распространенные ошибки уровня шага

Во всех случаях рекомендуется внимательно изучить причину ошибки, сообщение об ошибке и подробные сведения об ошибке, чтобы понять, что вызывает ошибку. Чтобы просмотреть дополнительные сведения об ошибке, нажмите кнопку "Показать сведения ", если она доступна.

Снимок экрана с сообщением об ошибке и выделенной кнопкой

Не удается найти источник — DataSource.NotFound

Эта ошибка обычно возникает, когда источник данных недоступен пользователем, у пользователя нет правильных учетных данных для доступа к источнику данных или источник был перемещен в другое место.

Пример. У вас есть запрос из текстовой плитки, которая была размещена на диске D и создана пользователем A. Пользователь A предоставляет общий доступ к запросу с пользователем B, у которого нет доступа к диску D. Когда этот пользователь пытается выполнить запрос, он получает DataSource.NotFound , так как в их среде нет диска D.

Снимок экрана ошибки источника данных: не удалось найти файл, так как в текущей среде нет диска D.

Возможные решения. Вы можете изменить путь к файлу текстового файла на путь, к которому у обоих пользователей есть доступ. Как пользователь B, вы можете изменить путь к файлу, чтобы он указывал на локальную копию того же текстового файла.

Столбец таблицы не найден

Эта ошибка обычно активируется, когда шаг делает прямую ссылку на имя столбца, которое не существует в запросе.

Пример: У вас есть запрос из текстового файла, в котором одно из имен столбцов было Столбец. В запросе есть шаг, который переименовывает этот столбец на date. Но в исходном текстовом файле произошло изменение, и он больше не имеет заголовка столбца с именем Столбца , так как он был изменен вручную на Date. Power Query не может найти заголовок столбца с именем Column, поэтому он не может переименовать столбцы. Отображается ошибка, показанная на следующем рисунке.

Снимок экрана: ошибка выражения, из-за которой столбец таблицы не найден, так как имя столбца было изменено вручную.

Возможные решения: существует несколько решений для этого случая, но все они зависят от того, что вы хотите сделать. В этом примере, так как правильный заголовок столбца Date уже поставляется из текстового файла, можно просто удалить шаг, который переименовывает столбец. Это изменение позволяет выполнять запрос без этой ошибки.

Другие распространенные ошибки, связанные с конкретным этапом

При объединении или слиянии данных между несколькими источниками данных может возникнуть ошибка Formula.Firewall , например одна, показанная на следующем рисунке.

Снимок экрана: ошибка брандмауэра формулы, указывающая, что запрос ссылается на другие запросы или шаги, поэтому он не может напрямую получить доступ к источнику данных.

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

Ошибка уровня ячейки

Ошибка уровня ячейки не предотвращает загрузку запроса, но значения ошибок отображаются как Error в ячейке. При выборе пустого пространства в ячейке отображается область ошибок под областью предварительного просмотра данных.

Снимок экрана: отображение сообщения об ошибке путем выбора пробелов в ячейке таблицы, содержащей ошибку.

Замечание

Средства профилирования данных помогают более легко выявлять ошибки на уровне ячеек с помощью функции качества столбца. Дополнительные сведения см. в средствах профилирования данных.

Обработка ошибок на уровне ячейки

При возникновении ошибок на уровне ячеек Power Query предоставляет набор функций для их обработки путем удаления, замены или сохранения ошибок.

В следующих разделах приведенные примеры используют тот же пример запроса, что и начальная точка. В этом запросе у вас есть столбец Sales с одной ячейкой, в которой ошибка вызвана преобразованием. Значение внутри этой ячейки было NA, но при преобразовании этого столбца в целое число Power Query не удалось преобразовать NA в число, поэтому отображается следующая ошибка.

Снимок экрана, отображающий ошибку формата данных, содержащую ошибку преобразования в тип данных в области ошибок.

Удаление ошибок

Чтобы удалить строки с ошибками в Power Query, сначала выберите столбец, содержащий ошибки. На вкладке "Главная" в группе "Уменьшить строки " выберите "Удалить строки". В раскрывающемся меню выберите "Удалить ошибки".

Снимок экрана: кнопка удаления ошибок на вкладке

Результат этой операции дает следующую таблицу.

Снимок экрана: таблица, которая ранее содержала пять строк, теперь содержит строку, содержащую удаленную ошибку, оставив четыре строки в таблице.

Замена ошибок

Если вместо удаления строк с ошибками необходимо заменить ошибки фиксированным значением, это также можно сделать. Чтобы заменить строки с ошибками, сначала выберите столбец, содержащий ошибки. На вкладке "Преобразование" в группе "Любой столбец " выберите "Заменить значения". В раскрывающемся меню выберите "Заменить ошибки".

Снимок экрана: кнопка

В диалоговом окне "Замена ошибок " введите значение 10, так как вы хотите заменить все ошибки значением 10 .

Снимок экрана: диалоговое окно 'Замена ошибок' со значением, установленным на 10.

Результат этой операции дает следующую таблицу.

Снимок экрана: таблица, в которой третья строка содержала ошибку в столбце Sales теперь заменена значением 10.

Сохранение ошибок

Power Query может служить хорошим средством аудита для идентификации строк с ошибками, даже если не исправлять ошибки. В этой ситуации может быть полезно сохранить ошибки . Чтобы сохранить строки с ошибками, сначала выберите столбец, содержащий ошибки. На вкладке "Главная" в группе "Уменьшить строки " выберите "Сохранить строки". В раскрывающемся меню выберите "Сохранить ошибки".

Снимок экрана: кнопка

Результат этой операции дает следующую таблицу.

Снимок экрана: окончательная таблица, которая сохраняет только строки, содержащие ошибки.

Распространенные ошибки на уровне ячеек

Как и в случае с любой ошибкой на уровне шага, мы рекомендуем внимательно изучить причины ошибок, сообщения об ошибках и сведения об ошибке, предоставленные на уровне ячейки, чтобы понять, что вызывает ошибки. В следующих разделах рассматриваются некоторые из наиболее частых ошибок на уровне ячеек в Power Query.

Ошибки преобразования типов данных

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

Пример. У вас есть запрос, содержащий столбец с именем Sales. Одна ячейка в этом столбце имеет значение NA в качестве значения ячейки, а остальные имеют целые числа в качестве значений. Вы решили преобразовать тип данных столбца из текста в целое число, но ячейка со значением NA приводит к ошибке.

Снимок экрана, показывающий детали ошибки

Возможные решения. После идентификации строки с ошибкой можно изменить источник данных, чтобы отразить правильное значение, а не NA, или применить операцию "Заменить ошибку", чтобы указать значение для любых значений NA , вызывающих ошибку.

Ошибки операций

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

Пример: Вы хотите создать настраиваемый столбец для вашего запроса, создав текстовую строку, содержащую фразу "Total Sales: ", которая будет объединена со значением из столбца Sales. Ошибка возникает, так как операция объединения поддерживает только текстовые столбцы, а не числовые.

Снимок экрана: ошибка выражения в области ошибок, вызванная попыткой применить оператор And к тексту и числу из столбца Sales.

Возможные решения. Перед созданием этого настраиваемого столбца измените тип данных столбца Sales на текст.

Снимок экрана: таблица с столбцом продаж, преобразованным из числа в текстовый тип, и новый столбец, содержащий оба выражения.

Вложенные значения, отображаемые как ошибки

При работе с данными, содержащими вложенные структурированные значения (например, таблицы, списки или записи), иногда возникает следующая ошибка:

Снимок экрана ошибки для вложенных значений, вызванной срабатыванием брандмауэра формулы.

Expression.Error: We cannot return a value of type {value} in this context

Details: In the past we would have returned a text value of {value}, but we now return this error. Please see https://go.microsoft.com/fwlink/?linkid=2099726 for more information.

Эти ошибки обычно возникают по двум причинам:

  • Когда брандмауэр конфиденциальности данных буферизирует источник данных, вложенные нескаларные значения автоматически преобразуются в ошибки.
  • Если столбец, определенный типом данных Any, содержит нескалярные значения, такие значения фиксируются как ошибки в процессе загрузки (например, в книге Excel или модели данных в Power BI Desktop).

Возможные решения:

  • Удалите столбец, содержащий ошибку, или задайте тип данных, отличный от Any для такого столбца.
  • Измените уровни конфиденциальности задействованных источников данных на такие, которые позволяют объединять их без буферизации.
  • Уплощайте таблицы перед слиянием, чтобы исключить столбцы, содержащие вложенные структурированные значения (такие как таблица, запись или список).