Импорт данных из OneDrive и SharePoint в Power Query / BI

Если вы или ваша компания храните данные в облаке OneDrive или на корпоративном портале SharePoint, то напрямую подключиться к ним с помощью Power Query в Excel или из Power BI может оказаться непростой, как это ни странно, задачей.

Когда я в своё время столкнулся с подобным вопросом, то с удивлением обнаружил, что не существует "законных" способов для её решения. В списке доступных источников данных в Excel и даже в Power BI (где набор коннекторов традиционно шире) почему-то отсутствует возможность подключения к файлам и папкам OneDrive.

Так что все предлагаемые ниже варианты - в той или иной степени "костыли", требующие небольшой, но ручной "доводки напильником". Но у этих костылей есть большой плюс - они работают :)

А в чём проблема?

Короткая вводная для тех, кто последние 20 лет провел в коме не в теме.

OneDrive - это облачное хранилище данных от Microsoft, доступное в нескольких вариантах:

  • OneDrive Personal - для простых (некорпоративных) пользователей. Дают 5Гб бесплатно + дополнительное место за небольшую месячную плату.
  • OneDrive for Business - вариант для корпоративных пользователей и подписчиков Office 365 с гораздо большим доступным объемом (от 1Тб и больше) и дополнительными фишками вроде хранения версий и т.п.

Частным случаем OneDrive for Business является хранение данных на корпоративном портале SharePoint - в таком сценарии OneDrive выступает, по сути, одной из библиотек SharePoint'а.

Доступ к файлам возможен либо через веб-интерфейс (сайт https://onedrive.live.com либо корпоративный сайт SharePoint) либо путем синхронизации выбранных папок с вашим ПК:

Синхронизированные папки OneDrive Personal и OneDrive for Business

Обычно эти папки хранятся в профиле пользователя на диске С - путь к ним выглядит примерно как C:\Users\ИмяПользователя\OneDrive). За актуальностью файлов и синхронизацией всех изменений следит специальная программа - Агент OneDrive (синее или серое облачко в правом нижнем углу экрана):

Агент OneDrive синхронизирует изменения

А теперь главное.

Если нам нужно загрузить данные из OneDrive в Excel (через Power Query) или в Power BI, то мы, конечно, можем указать в качестве источника локальные синхронизируемые файлы и папки обычным образом через Получить данные - Из файла - Из книги / Из папки (Get Data - From file - From workbook / Folder), но это не будет прямой ссылкой на облако OneDrive.

То есть в будущем, при изменении, например, файлов в облаке другими пользователями, нам потребуется сначала выполнить синхронизацию (это бывает долго и не всегда удобно) и только потом обновлять наш запрос Power Query или модель в Power BI.

Естественно, возникает вопрос: как импортировать данные из OneDrive / SharePoint напрямую, чтобы загрузка данных происходила непосредственно из облака?

Вариант 1. Подключение к книге из OneDrive for Business или SharePoint

  1. Открываем книгу в нашем Excel - локальную копию из синхронизированной папки OneDrive как обычный файл. Или открываем на сайт сначала в Excel Online, а потом жмем на кнопку Открыть в Excel (Open in Excel).
  2. Идем в Файл - Сведения (File - Info)
  3. Копируем облачный путь к книге кнопкой Копировать путь (Copy Path) в заголовке:

    Копируем путь к файлу в облаке

  4. В другом файле Excel или в Power BI, куда нужно залить данные, выбираем команды Получить данные - Из интернета (Get Data - From web) и вставляем в поле адреса скопированный путь.
  5. Удаляем в конце пути ?web=1 и жмем на ОК:

    Подправляем строку подключения

  6. В появившемся окне выбираем способ авторизации Учетная запись в организации (Organization Account) и жмём на кнопку Вход (Log in):

    Подключение

    Вводим наш рабочий логин-пароль или выбираем корпоративную учетную запись из появившегося списка. Если все сделаете правильно, то надпись Вход должна поменяться на Войти от имени другого пользователя (Log in with other user account).
  7. Жмем на кнопку Подключение (Connect).
Дальше всё как при обычном импорте книги - выбираем нужные листы, умные таблицы для импорта и т.д.

Вариант 2. Подключение к файлу из OneDrive Personal

Для подключения к книге в личном (некорпоративном) облаке OneDrive подход будет уже другим:

  1. Открываем на сайте OneDrive содержимое нужной папки и находим импортируемый файл.
  2. Щёлкаем по нему правой кнопкой мыши и выбираем команду Внедрение (Embed) или выделяем файл и выбираем аналогичную команду в верхнем меню:

    Находим ссылку на внедрение

  3. В появившейся справа панели жмем кнопку Создать и копируем сформированный код:

    Код для внедрения
  4.  Вставляем скопированный код в Блокнот и "дорабатываем напильником":
    • Убираем всё, кроме ссылки в кавычках
    • Удаляем блок cid=XXXXXXXXXXXX&
    • Заменяем слово embed на download
    В итоге из исходного кода должно получиться такое:

    Правим ссылку на OneDrive

  5. Дальше всё, как и в предыдущем способе. В другом файле Excel или в Power BI, куда нужно залить данные, выбираем команды Получить данные - Из интернета (Get Data - From web), вставляем в поле адреса отредактированный путь и жмём ОК.

  6. При появлении окна авторизации выбираем вариант Windows и, при необходимости, вводим логин-пароль от OneDrive.

Вариант 3. Импорт содержимого целой папки из OneDrive for Business

Если нужно залить в Power Query или Power BI содержимое не одного файла, а сразу целой папки (например, с отчетами), то подход будет чуть попроще:

  1. В Проводнике щёлкаем правой кнопкой мыши по интересущей нас локальной синхронизированной папке в OneDrive и выбираем Просмотреть на сайте (View online).
  2. В адресной строке браузера копируем начальную часть адреса - до слова /_layouts:

    Копируем ссылку из браузера

  3. В книге Excel, куда нужно загрузить данные или в отчёте Power BI Desktop выбираем команды Получить данные - Из файла - Из папки SharePoint (Get Data - From file - From SharePoint folder):

    Импорт в Power Query из папки SharePoint

    Затем вставляем скопированный фрагмент пути в поле адреса и жмем ОК:

    Импорт из папки SharePoint

    Если появляется окно авторизации, то выбираем тип Учетная запись Microsoft (Microsoft Account), жмём на кнопку Вход (Log in), а потом, после успешного входа, на кнопку Подключение (Connect):

    Авторизация при входе в папку SharePoint через Power Query

  4. После этого происходит запрос и загрузка всех файлов из SharePoint и появляется окно предварительного просмотра, где можно смело жать на Преобразовать данные (Transform Data).
  5. Дальнейшее редактирование списка всех файлов и их объединение происходит уже в Power Query или в Power BI стандартным образом. Чтобы сузить круг поиска только до нужной нам папки, можно воспользоваться фильтрацией по столбцу Folder Path (1) и затем развернуть всё содержимое обнаруженных файлов с помощью кнопки в столбце Content (2):

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

Ссылки по теме

 


25.06.2020 17:39:07
Отличная и актуальная тема. Спасибо.
А есть способ подключения к файлу access, лежащему на SharePoint, а не к его локальной копии?
День добрый !
Большое спасибо за статью .
Николай, здравствуйте!
Простотрел много информации в интернете, но пока не нашёл решения
Как получать данные power query с эксель файлов, если на файлах установлен  Restrict. Компания запустила data protection, теперь файлы за пределами организации невозможно посмотреть. При попытке подключится выдаёт ошибку, хотя у меня есть полномочия редактировать файл. Если файл открыт, по power query забирает данные, но вариант открывать больше 10 файлов в папке не очень автоматизирует процесс. Если есть возможность, можете посоветовать куда копать. Заранее благодарен  
15.01.2021 15:31:46
У меня та же история - стоит блок на доступ извне.
Есть решение?
Может существуют какие-нибудь внутрисерверные ссылки на файлы?
пока решение не нашел, кроме как ставить на всех файла тип Public
30.12.2020 15:18:20
А я просто указываю адрес папки One Drive
C:\Users\Den\Desktop\OneDrive\

и все отлично работает и обновляется.

Хотя через sharepoint тоже работает
15.01.2021 15:32:40
Ссылка на локальный файл не сработает у другого пользователя.
09.01.2021 16:19:55
СПАСИБО!:D
я замучился внедрять с шарика. пробовал через ODATA.
а нужно было только чуть удалить
и почему это не написано в справках у майков...

Крайне полезная статья!
27.01.2021 10:57:51
Это конечно супер и спасибо за полезную инфу. Но у многих только 2016 офис, а не 2019. И тогда можете подсказать как получить множество файлов из папки в облаке SharePoint в офисе 2016 ? Спасибо.
25.06.2021 12:51:12
Самый простой способ это загрузить 2019
17.02.2021 09:25:30
Спасибо за данный способ. Такой вопрос: Импорт содержимого целой папки из OneDrive for Personal возможен? Можете описать этот способ если он возможен?
17.02.2021 19:18:17
Важный момент, который может смутить новичка. Если вы создали через проводник папку  в бизнес среде One Drive, данные из которой хотите видеть в свое модели данных, убедитесь, что у вас прошла синхронизация, иначе вы не увидите в меню нажимая правой клавишей мыши пункта "просмотреть в интернете"
24.12.2021 12:43:48
Я смотрю тут спрашивают. Сочинил функцию для динамической выборки файлов из OneDrive Personal. Пользуйтесь на здоровье.
03.03.2022 09:17:39
Добрый день !
Корпоративная подписка 365, но отсутствует выбор в меню "Из папки SharePoint". Что не так делаю ?

03.09.2022 11:27:57
Коннектор доступен в версии Pro. Здесь описано, как подключиться в отсутствие коннектора.
14.09.2022 21:39:26
Спасибо большое.
Когда работал в OneDrive для бизнеса, пользовался первым вариантом.
Но после того, как Microsoft отключил нашей компании Office365, пришлось перейти в OneDrive Personal.
Сейчас опробовал второй вариант, он тоже работает :like:.

Для удобства сделал формулу, которая сама выполнит все шаги и на выходе у вас будет готовая формула для вставки в PQ.

1. Вставляем ссылку в A1

2. в B1 вставляем формулу
=ПСТР(K1;ПОИСК("""";A1;1)+1;ПОИСК("rive.live.com";A1;1))&"download?"&ПСТР(A1;ПОИСК("&";A1;1)+1;ДЛСТР(A1)-ПОИСК("width";A1;1)-6)
16.12.2022 14:52:59
Добрый день!
Очень классный и полезный урок, спасибо!!!
Но так как урок от 2020 года, подскажите пожалуйста что-то улучшилось в плане OnDrive Personal???
Мне нужно подключить папку с файлами расположенную на OnDrive Personal в PowerBI.
Можете пожалуйста подсказать или посоветовать в каком направлении искать, может что-то есть очевидное уже, а я пытаюсь в дебри лезть?)))
Заранее спасибо!
07.02.2023 15:14:28
Добрый день.
Подскажите, пожалуйста, по
Вариант 3. Импорт содержимого целой папки из OneDrive for Business

Есть пользователь, из расшаренной папки которого нужно загружать данные.
При подключении к его папке описанным Вами способом через Получить данные - Из файла - Из папки SharePoint с копированием адреса до слова layouts и последующим нажатием кнопки "Подключение" не отображаются находящиеся в папке файлы.

Отображается только одна строчка


и все, других файлов нет.

Если далее нажать кнопку преобразовать, то также отображается одна строчка но если в адресной строке удалить api [apiversion = 15 или изменить на apiversion =14,то список файлов начинаети отображаться  но в дальнейшем при объединении файлов появляется ошибка [DataSource.Error] SharePoint: Ошибка запроса: Удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера. (An error occurred while processing this request.)

В чем может быть причина такого поведения? такая проблема наблюдается при подключении к папкам двух пользователей, у остальных все отображается корректно.
Оба используют one drive business


заранее признателен за ответы и комментари
29.02.2024 17:08:44
Подскажите как решить проблему с доступом к файлу для PQ на MacOS. Есть два файла один файл с данными, другой файл куда надо эти данные загрузить через запрос, путь к этому файлу определяется динамически с помощью функции, то есть перенося эти два файла в другую папку не нужно переписывать пути. Главное, чтобы они лежали в одной и той же папке! НО когда эти два файла оказываются в любой папке на onedrive то PQ пишет не может получить доступ к этому файлу! Он его видет, но onedrive почему-то блокирует доступ! Может кто знает как решить эту проблему?
Наверх