Как устранить ошибку Power BI - ключ не соответствует ни одной строке в таблице - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь загрузить (объединить) несколько файлов Excel в Power BI (версия за октябрь 2019 г.). Каждый файл имеет только 1 лист. Каждый лист имеет 1 диапазон, и каждый диапазон имеет одинаковую схему для всех файлов. (Однако имена листов отличаются.) Пример имени листа: «200704».

Вот мои шаги:

  1. Получить данные \ Папка \ Соединить
  2. укажите путь к папке
  3. Объединить и загрузить
  4. выбрать один из файлов в качестве моего образца файла;нажмите на имя файла как мой Parameter1;нажмите OK

После того, как я нажму OK, курсор немного повернется, а затем остановится. Ничего не произошло. Итак, я иду в Edit Queries \ Edit Queries. В моем запросе данных есть предупреждающий символ:

Произошла ошибка в запросе «Файл преобразования». Expression.Error: ключ не соответствует ни одной строке таблицы.

Подробности: Ключ = Элемент = 200704 Вид = Таблица листов = [Таблица]

Как устранить эту ошибку?

Еслиэто помогает, Power BI генерирует для меня 5 запросов, и структура:

  • Преобразование файла из данных [2]
  • Вспомогательные запросы [3]
  • Параметр1(Образец файла)
  • Образец файла
  • Файл преобразования
  • Файл примера преобразования
  • Другие запросы [1]
  • data

Интересно, что если это помогает диагностировать проблему, если я устанавливаю файл примера = Первый файл или если я вручную устанавливаю файл примера в свой первый файл, в диалоговом окне выдается следующая ошибка, но это не такпоказать, что запрос является ошибкой, когда я пытаюсь просмотреть / изменить запрос.

Не удалось сохранить изменения на сервере. Возвращенная ошибка: 'Ошибка OLE DB или ODBC: [Expression.Error] Ключ не соответствует ни одной строке в таблице ..'.

И, конечно, когда я пытаюсь загрузитьэтот файл (или любой файл в папке, в этом отношении) по отдельности (через соединение Excel), он успешно загружается. Итак, что-то не так с кодом М в моем подключении к папке.

1 Ответ

0 голосов
/ 17 октября 2019

Я выяснил причину своей проблемы и решение. Проблема в том, что на строку в моем шаблонном запросе ссылались неправильно (т. Е. Неправильный первичный ключ между запросом шаблона и обычным запросом, и в нем жестко заданы названия листов). Чтобы это исправить, мне пришлось удалить все другие столбцы в таблице запросов шаблона, кроме столбца данных, как описано здесь . (Странно, что ни одна документация MS по объединению нескольких файлов Excel не обсуждает этот очень важный шаг.)

Для сравнения, вот мой прежний (неправильный) M-код:

Файл примера преобразования:

let
    Source = Excel.Workbook(Parameter1, null, true),
    #"Sample_Sheet" = Source{[Item="sample",Kind="Sheet"]}[Data],
    #"Promoted Headers" = Table.PromoteHeaders(#"Sample_Sheet", [PromoteAllScalars=true])
in
    #"Promoted Headers"

test:

let
    Source = Folder.Files("C:\some folder path"),
    #"Filtered Hidden Files1" = Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true),
    #"Invoke Custom Function1" = Table.AddColumn(#"Filtered Hidden Files1", "Transform File", each #"Transform File"([Content])),
    #"Renamed Columns1" = Table.RenameColumns(#"Invoke Custom Function1", {"Name", "Source.Name"}),
    #"Removed Other Columns1" = Table.SelectColumns(#"Renamed Columns1", {"Source.Name", "Transform File"}),
    #"Expanded Table Column1" = Table.ExpandTableColumn(#"Removed Other Columns1", "Transform File", Table.ColumnNames(#"Transform File"(#"Sample File"))),
    #"Changed Type" = Table.TransformColumnTypes(#"Expanded Table Column1",{{"Source.Name", type text}, {"ID", type text}, {"Name", type text}})
in
    #"Changed Type"

А вот мой новый (правильный) код:

Файл примера преобразования:

let
    Source = Excel.Workbook(Parameter1, null, true),
    #"Removed Columns" = Table.RemoveColumns(Source,{"Name", "Item", "Kind", "Hidden"}),
    Data = #"Removed Columns"{0}[Data],
    #"Promoted Headers" = Table.PromoteHeaders(Data, [PromoteAllScalars=true]),
    #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"ID", type text}, {"Name", type text}})
in
    #"Changed Type"

test:

let
    Source = Folder.Files("C:\some folder path"),
    #"Filtered Hidden Files1" = Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true),
    #"Invoke Custom Function1" = Table.AddColumn(#"Filtered Hidden Files1", "Transform File", each #"Transform File"([Content])),
    #"Renamed Columns1" = Table.RenameColumns(#"Invoke Custom Function1", {"Name", "Source.Name"}),
    #"Removed Other Columns1" = Table.SelectColumns(#"Renamed Columns1", {"Source.Name", "Transform File"}),
    #"Expanded Table Column1" = Table.ExpandTableColumn(#"Removed Other Columns1", "Transform File", Table.ColumnNames(#"Transform File"(#"Sample File")))
in
    #"Expanded Table Column1"

Обратите внимание на шаг «Удаленные столбцы» в запросе нового шаблона. Это «секретный соус» для ключевой проблемы. Также обратите внимание, что я сохранил все шаги по умолчанию после моего шага «Данные» (т. Е. «Повышенные заголовки» и «измененный тип») в моем шаблонном запросе. Это потому, что все мои листы имеют одинаковую схему. Если бы это было не так, то мне нужно было бы переместить эти шаги в обычный запрос.

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