Применение параметров RelativePath и Query Options вместе с функцией Web.Contents()
в коде Power Query и Power BI
Текст представляет собой адаптированный перевод статьи Криса Вебба,
оригинал — Using The RelativePath And Query Options With Web.Contents() In Power Query And Power BI M Code.
Крис Вебб (Chris Webb) — независимый эксперт, консультант по технологиям Analysis Services, MDX, Power Pivot, DAX, Power Query и Power BI. Его блог — это кладезь информации на тему перечисленных технологий. Вот уже более 10 лет он пишет про BI-решения от Microsoft. Количество его статей перевалило за 1000! Также Крис выступает на большом количестве различных конференций вроде SQLBits, PASS Summit, PASS BA Conference, SQL Saturdays и участвует в различных сообществах.
Крис любезно разрешил нам переводить его статьи на русский язык. И это одна из них.

Применение параметров RelativePath и Query Options вместе с функцией Web.Contents() в коде Power Query и Power BI

Функция Web.Contents() — это ключ для получения данных с веб-страниц и от веб-сервисов. Она имеет множество параметров, облегчающих построение URL-адреса и вызов веб-служб, но они плохо документированы.

Рассмотрим следующий адрес:

https://data.gov.uk/api/3/action/package_search?q=cows

По нему вызываются api служба метаданных для адреса https://data.gov.uk/. Который является порталом открытых данных правительства Великобритании. Ответ приходит как документ JSON, представляющий набор данных, где встречается слово cows (коровы). Это легко проделать при помощи функции Web.Contents(), например, так:
Web.Contents(
 "https://data.gov.uk/api/3/action/package_search?q=cows"
)
Однако вместо записи длинного адреса, что само по себе может потребовать нескольких шагов, можно применить параметры RelativePath (относительный путь) и Query (запрос) функции Web.Contents(). Они передаются вторым параметром как поля записи. RelativePath добавляет текст к первому параметру, а Query позволяет настроить параметры запроса. Для нашего примера, базовый адрес будет https://data.gov.uk/api, а параметры можно настроить так:
Web.Contents(
 "https://data.gov.uk/api", 
 [
  RelativePath="3/action/package_search", 
  Query=[q="cows"]
 ]
)
RelativePath просто добавляет текст 3/action/package_search к базовому адресу. Второй параметр – единственное поле q, равное cows.

Для задания мультизапроса добавим поля к записи:
Web.Contents(
    "https://data.gov.uk/api", 
    [
        RelativePath="3/action/package_search", 
        Query=
        [
            q="cows", 
            rows="20"
        ]
    ]
)
Этот запрос возвращает 20 строк, а не 10 по умолчанию:

https://data.gov.uk/api/3/action/package_search?q=cows&rows=20

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

Примечание: на момент написания статьи выявлен баг, а именно двойное добавление значения RelativePath при повторном использовании функции Web.Page(). Есть надежда, что это скоро исправят.