Настройка REST API выполнения запросов DAX

API выполнения запросов DAX позволяет выполнять DAX-запросы против семантических моделей Power BI и получать результаты программным образом в формате Apache Arrow IPC, столбчатом двоичном формате, разработанном для высокопроизводительной аналитики. Возвращая результаты запроса непосредственно в формате со стрелками, API устраняет затраты на сериализацию и предоставляет приложению доступ к строго типизированным, готовым к анализу данным.

Диаграмма, показывающая архитектуру REST API для выполнения запросов DAX. Клиентские приложения (Python, C#, PowerShell) отправляют POST-запросы и получают IPC-потоки Arrow от службы Power BI. Конвейер обработки потоков Arrow показывает шесть этапов на стороне клиента: получение, десериализация, проверка, материализация, преобразование и использование.

Почему Arrow?

Существующий эндпоинт Execute Queries возвращает результаты в формате JSON. Новая конечная точка "Выполнение запросов DAX" возвращает результаты исключительно в формате Apache Arrow IPC, двоичном формате столбца, предназначенном для высокопроизводительной аналитики. В следующей таблице сравниваются два формата ответа:

JSON (API выполнения запросов) Стрелка (API выполнения запросов DAX)
Формат Json с ориентацией на строки IPC со стрелкой столбца
Размер полезных данных Больше (затраты на кодировку строк) Меньше (двоичный, сжатый)
Точность типов Потеря (все является строкой или числом) Без потери (собственная дата, десятичная, int64)
Десериализация Синтаксический анализ + тип coerce Чтение без копирования в DataFrame
лучше всего подходит для Небольшие запросы, простые интеграции Большие результирующие наборы, конвейеры аналитики

Tip

Используйте API выполнения запросов DAX для любого клиентского приложения, которое может использовать двоичные потоки IPC со стрелками. Это включает Python (pyarrow), C# (Apache.Arrow), Java, Rust, Go и другие языки с поддержкой библиотеки со стрелками. Для платформ low-code/no-code, потоков Power Automate или других решений, которые способны обрабатывать JSON, продолжайте использовать раннюю версию Execute Queries API. Хотя API выполнения запросов не имеет расширенных параметров, доступных в запросах DAX (например queryTimeout , и resultsetRowcountLimit), он остается подходящим выбором, если требуется вывод JSON.

Формат IPC Apache Arrow

Apache Arrow определяет формат памяти столбцов, независимо от языка, который широко используется в экосистеме данных, что делает его одним из наиболее широко поддерживаемых представлений данных. Формат потоковой передачи Arrow IPC (межпроцессовое взаимодействие) оборачивает пакеты записей столбцов метаданными схемы, что позволяет:

  • Нулевое копирование при чтении — клиенты могут отображать ответ непосредственно в память без анализа или перекачивания данных между буферами.
  • поддержка многоязычности — собственные библиотеки существуют для Python (pyarrow), C# (Apache.Arrow), Java, Rust, Go, JavaScript и других языков, поэтому вы можете использовать результаты практически на любом языке.
  • Эффективное сжатие — технология LZ4 уменьшает размер полезных данных.
  • Проектирование по принципу схемы первым — каждый поток Arrow начинается с сообщения схемы, которое объявляет имена столбцов, типы и метаданные, поэтому клиенты знают точную структуру данных перед чтением строк.

Сопоставление типов DAX с Arrow

API для выполнения DAX-запросов сопоставляет типы данных DAX с Arrow типами следующим образом:

Тип DAX Тип стрелки Примечания
Целое число int64 Прямое 64-битное целое число
Decimal double Двойная точность с плавающей запятой
Валюта (фиксированное десятичное значение) decimal128(19, 4) Точность до четырех десятичных знаков без потерь
Double double Двойная точность с плавающей запятой
DateTime date64 Миллисекунды с начала эпохи Unix
Булев bool
String utf8 Словарь закодирован по умолчанию для повышения эффективности
Binary binary
Variant dense_union Объединение int64, currency, bool, date64, float64, utf8

Когда следует использовать конечную точку со стрелкой

Используйте конечную точку со стрелкой, когда вы:

  • Извлеките более нескольких сотен строк из семантической модели.
  • Передайте результаты в pandas, polars, Spark или другие фреймворки обработки столбцов.
  • Создайте службу среднего уровня, которая будет проксировать запросы DAX для конечных потребителей.
  • Требуются точные числовые типы данных или типы данных дат без необходимости вручного приведения типов.

Для простых, небольших запросов или быстрых временных поисков, где предпочтителен JSON, старый API Execute Queries остается простым выбором.

Рекомендации и ограничения

Перед внедрением API выполнения запросов DAX ознакомьтесь со следующими различиями и ограничениями по сравнению со старым API выполнения запросов:

API выполнения запросов Выполнение API запросов DAX
Конечная точка executeQueries executeDaxQueries
Требование емкости Работает на Pro, PPU и Premium/Fabric Только объём Premium или Fabric
Параметры клиента REST API выполнения запросов набора данныхразделе "Параметры разработчика") Dataset Execute Queries REST API (в разделе Developer settings) и разрешить конечные точки XMLA и анализ в Excel с локальными семантическими моделями (в разделе Параметры интеграции) необходимы. Разрешить учётным записям служб использовать API Power BI (в разделе Настройки разработчика) требуется только при аутентификации с помощью учётной записи службы.
Входные данные запроса queries[] массив (один запрос на вызов) Одна query строка (несколько EVALUATE инструкций разрешено)
Форматы ответов Только JSON Только Arrow IPC
Дополнительные параметры Limited queryTimeout, resultsetRowcountLimit, , schemaOnly, executionMetricsmemoryLimit
Стриминг Не транслируется Сквозная потоковая передача (передача с разбивкой на блоки)
Ограничения размера результата Жесткое ограничение в 100 000 строк и 1000 000 значений для каждого запроса Нет фиксированного ограничения на строки или значения (используйте resultsetRowcountLimit, если требуется ограничение)
Разбиение на страницы Не поддерживаются Не поддерживается — использование TOPN или resultsetRowcountLimit для больших результатов
Требуется библиотека Arrow Нет (только JSON) Да— для десериализации ответа требуется библиотека со стрелками (например pyarrow , или Apache.Arrow)