Другими словами, с помощью API мы можем из Power BI “стучаться” в сторонние сервисы (если у них такой способ взаимодействия предусмотрен) и с помощью определённым образом сформулированных запросов брать нужные данные и загружать их в Power BI.
Часто для подключения к сервису по API сначала нужно внутри самого сервиса произвести некоторые настройки - например, сгенерировать ключ доступа (access token). Иногда нужно ещё посмотреть внутри самого сервиса некоторые другие данные для подключения.
Разберём пример получения данных через API с портала открытых данных РФ https://data.gov.ru/.
Этап 1. Настраиваем доступ в аккаунте на портале открытых данных.
- Для начала нужно зарегистрироваться на портале и войти в аккаунт.


2. На главной странице сверху выбираем “Сервисы” → “Разработчикам”

3. На странице “Разработчикам” (https://data.gov.ru/razrabotchikam) выбираем кнопку “API”:

4. Читаем “Правила и рекомендации” и переходим к получению ключа (access_token) к API по кнопке:

5. Проходим тест, выбираем “Сгенерировать ключ”, получаем сгенерированный ключ:

Сгенерированный ключ появится также в вашем личном кабинете.
6. Полученный ключ (access_token) необходим для использования API. Ключ необходимо прописывать в конце запроса в следующем виде: /?access_token=ваш ключ. Например, для получения списка датасетов полный запрос будет выглядеть следующим образом: http://data.gov.ru/api/dataset/?access_token=ваш ключ
Этап 2. Создаём запрос.
В качестве набора открытых данных рассмотрим Производственный календарь, сам набор можно найти по ссылке: https://data.gov.ru/opendata/7708660670-proizvcalendar. Загрузка этого производственного календаря из .csv есть в этой (ссылка) и в этой (ссылка) статьях.
Для понимания написанного кода рекомендуем изучить краткое руководство по работе с API, назначение и структуру запросов (https://data.gov.ru/pravila-i-rekomendacii).
Нам нужно получить содержимое файла версии набора открытых данных. Структура запроса выглядит следующим образом:
/api/<format>/dataset/<dataset>/version/<version>/content
Подразумевается, что в начале запроса необходимо подставить адрес ресурса:
Получится вот такая ссылка:
https://data.gov.ru/api/<format>/dataset/<dataset>/version/<version>/content
А вместе с приписанным токеном вот так:
https://data.gov.ru/api/<format>/dataset/<dataset>/version/<version>/content/?access_token=<ваш ключ>
Кроме того все части запроса в угловых скобках - переменные, зависящие от того, что и как мы собираемся выгружать:
<ваш ключ> – токен, который мы сгенерировали на первом этапе.
<dataset> – уникальное название набора данных, представленное в формате “0000000000-namedataset”.
<version> – версия определенного набора данных, содержащая дату последней версии. Обычно представлена в формате “00000000T0000”.
<format> – формат вывода результатов запроса. API предлагает несколько форматов вывода результатов запроса. На данный момент поддерживаются следующие форматы:
- JSON – в строке запроса используется название в нижнем регистре «json» (им и воспользуемся)
- XML – в строке запроса используется название в нижнем регистре «xml»
Откроем паспорт набора на портале https://data.gov.ru/opendata/7708660670-proizvcalendar и найдём там version и format:


Вставив все элементы в запрос, получим следующее:
https://data.gov.ru/api/json/dataset/7708660670-proizvcalendar/version/20191112T1252/content/?access_token=d8...5d
Этап 3. А теперь – самое интересное. Посмотрим, как это работает – загрузим данные в Power BI через API.
- Создаём запрос к Интернет-ресурсу:

2. В появившемся диалоге вставляем сформированный запрос в поле URL:

3. Получаем результат выполнения запроса:

Готово! Перед нами Производственный календарь, полученный через API.
Как обрабатывать эту нестандартную таблицу, мы описали тут и тут
Ряд действий по обработке данных Power Query включил в перечень шагов автоматически. Если мы откроем расширенный редактор, то увидим там вот такой код:
let
Источник = Json.Document(Web.Contents("http://data.gov.ru/api/json/dataset/7708660670-proizvcalendar/version/20191112T1252/content/?access_token=d8...5d")),
#"Преобразовано в таблицу" = Table.FromList(Источник, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Развернутый элемент Column1" = Table.ExpandRecordColumn(#"Преобразовано в таблицу", "Column1", {"Год/Месяц", "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь", "Всего рабочих дней", "Всего праздничных и выходных дней", "Количество рабочих часов при 40-часовой рабочей неделе", "Количество рабочих часов при 36-часовой рабочей неделе", "Количество рабочих часов при 24-часовой рабочей неделе"}, {"Год/Месяц", "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь", "Всего рабочих дней", "Всего праздничных и выходных дней", "Количество рабочих часов при 40-часовой рабочей неделе", "Количество рабочих часов при 36-часовой рабочей неделе", "Количество рабочих часов при 24-часовой рабочей неделе"}),
#"Измененный тип" = Table.TransformColumnTypes(#"Развернутый элемент Column1",{{"Год/Месяц", Int64.Type}, {"Январь", type text}, {"Февраль", type text}, {"Март", type text}, {"Апрель", type text}, {"Май", type text}, {"Июнь", type text}, {"Июль", type text}, {"Август", type text}, {"Сентябрь", type text}, {"Октябрь", type text}, {"Ноябрь", type text}, {"Декабрь", type text}, {"Всего рабочих дней", Int64.Type}, {"Всего праздничных и выходных дней", Int64.Type}, {"Количество рабочих часов при 40-часовой рабочей неделе", Int64.Type}, {"Количество рабочих часов при 36-часовой рабочей неделе", type text}, {"Количество рабочих часов при 24-часовой рабочей неделе", type text}})
in
#"Измененный тип"
Интересно рассмотреть детальнее, что делает автоматически добавленный код? Или у вас есть ещё вопросы по работе с API? Оставляйте вопросы в комментариях к статье и следите за нашим блогом! ;)