Захват запросов Power BI с использованием DAX Studio
В этой статье описывается использование DAX Studio для захвата запросов DAX, генерируемых Power BI. Анализ запросов DAX может быть полезен для лучшего понимания проблем производительности и улучшения написания запросов DAX.
Подготовка отчета Power BI
Каждая страница отчета Power BI обычно создает один или несколько запросов DAX для заполнения своих визуальных эффектов. Когда вы переключаетесь на другую страницу, новые запросы могут быть отправлены в движок. Более того, изменение выбора среза также генерирует новые запросы. Тем не менее, Power BI также использует систему кэширования, чтобы не отправлять один и тот же запрос DAX несколько раз. Поэтому полезно убедиться, что кеш пуст, чтобы захватить все запросы, сгенерированные для одной страницы отчета.
Для примера рассмотрим следующий отчет, состоящий из одной страницы.
Когда открывается отчет , запросы DAX немедленно генерируются и отправляются в движок. Времени для открытия DAX Studio и активации трассировки для захвата всех запросов DAX недостаточно: некоторые из этих запросов уже будут выполнены.
Чтобы избежать этой проблемы и убедиться, что все запросы могут быть захвачены в DAX Studio, файл Power BI должен содержать пустую страницу. Таким образом, вы должны создать новую пустую страницу и сохранить файл PBIX, чтобы убедиться, что это текущая активная страница отчета.
Таким образом, в следующий раз, когда вы откроете файл PBIX, будет отображаться пустая страница, и никакие запросы не будут отправлены в движок, пока вы не нажмете на другую страницу.
Как только файл будет готов, закройте Power BI Desktop. Затем снова запустите Power BI Desktop и откройте файл, подготовленный на предыдущем шаге. В отчете должна появиться пустая страница. Следующим шагом будет подключение DAX Studio к Power BI .
Подключение DAX Studio к Power BI для захвата запросов
Не закрывая Power BI Desktop с выбранной пустой страницей, откройте DAX Studio и выберите открытую PBI / SSDT Model.
Выберите все запросы, нажав кнопку All Queries в разделе ленты Traces.
Убедитесь, что в части окна Output отображается сообщение “Query Trace Started”
Перейдите на панель резуьтатов All Queries. В это время должен быть пустой список. Как вы можете заметить - кнопка Start недоступна, что указывает на то, что протокол уже запущен.
DAX Studio теперь готова захватить все запросы DAX, созданные отчетами Power BI.
Захват запросов DAX с активной страницы вашего отчета
Удерживая DAX Studio открытой, переключитесь в окно Power BI Desktop и выберите страницу отчета, в котором отображаются данные.
Этот простой отчет генерирует много запросов, которые фиксируются и отображаются на панели All Queries в DAX Studio.
Столбец Duration (длительность) измеряет время, затрачиваемое на разрешение каждого запроса, в миллисекундах. Если существует значительное расхождение между суммой всех длительностей запросов DAX и количеством времени, необходимого для обновления визуальных образов в отчете, это может быть связано с количеством и сложностью визуальных эффектов, включенных в одну страницу.
Если для запроса требуется большое количество времени, можно просмотреть полный запрос DAX с помощью двойного щелчка по этой конкретной строке. Весь синтаксис DAX копируется в редактор DAX Studio. Вы можете снова запустить запрос с помощью кнопки Run. При работе над оптимизацией производительности лучше очистить кеш до запуска запроса.
Захват запросов DAX, создаваемых взаимодействием со срезами
Может быть полезно захватить запросы, сгенерированные взаимодействием с одним или несколькими срезами. Вы можете обратить внимание на время запуска (StartTime) последнего запроса, захваченного DAX Studio, или вы можете очистить список запросов, нажав кнопку Clear All.
В Power BI Desktop щелкните по элемент “Europe” в ссрезе Continent. DAX Studio отображает новые запросы, созданные при взаимодействии со срезом.
В этом случае самый медленный запрос вызван проблемой в измерении Customers, которая является единственной мерой, используемой в запросе, выделенной желтым на предыдущем снимке экрана. Это первоначальное определение Customers:
CUSTOMERS :=
CALCULATE
(
DISTINCTCOUNT
(
SALES[CUSTOMERKEY]
)
,
FILTER
(
SALES, SALES[QUANTITY] > 0
)
)
Заменив измерение в модели Power BI более оптимизированной версией, решается основная проблема производительности модели DAX. Вот наше предложение:
CUSTOMERS :=
CALCULATE
(
DISTINCTCOUNT
(
SALES[CUSTOMERKEY]
)
,
SALES[QUANTITY] > 0
)
Повторяя этот цикл с самого начала, можно продолжить это улучшение производительности запросов DAX, установив одно измерение. Имейте в виду, что порядок запросов для одного и того же отчета может отличаться от одного исполнения к другому, особенно если изменяется длительность . В следующем примере мы видим, что для того же запроса, который использовался для работы более чем за 2 секунды, значение Duration теперь составляет 20 миллисекунд.
Время, необходимое для обновления страницы Power BI, рассмотренной до настоящего времени, в настоящее время в основном зависит от количества визуальных изображений, отображаемых на той же странице. Каждый из этих видеороликов генерирует DAX-запрос, и нет запросов, для запуска которых требуется более 20 миллисекунд. Дальнейшие улучшения в измерениях DAX больше невозможны - единственная возможная оптимизация - уменьшить количество визуальных эффектов на странице DAX, тем самым создавая меньшее количество запросов DAX.
Вывод
При решении проблем производительности в Power BI полезно понять, вызвана ли проблема кодом DAX в модели данных, а также количеством и (или) сложностью визуальных элементов, включенных в страницу отчета. Методика, описанная в этой статье, помогает понять это поведение и помогает определить приоритеты в оптимизации отчетов или оптимизации DAX.
Здесь вы можеет загрузить файлы, используемые в этой статье: Download