Как работать с Performance Analyzer в Power BI
Что это за инструмент и как с его помощью интерпретировать информацию и находить слабые места в отчётах. Рассказывает Антон Рыбин.
vlada_maestro / shutterstock
Антон Рыбин
эксперт
об авторе
Руководитель отдела маркетинга интерактивного агентства «Космос-Веб». Аналитик-визуализатор. Любит маму, гардемаринов и BI-системы, сторонник автоматизации процессов. Адепт систематизации и структуризации — иногда пугает неокрепшие души словами Agile и Scrum.
Power BI Performance Analyzer был представлен в майском обновлении программы Power BI Desktop. С его помощью можно собирать информацию об эффективности DAX-запросов. Управлять ими вы также можете с помощью DAX Studio, но Performance Analyzer, встроенный в Power BI, гораздо проще. Кроме того, он позволяет нам получить информацию о других активностях внутри наших отчётов: например, можно узнать время отрисовки наших визуалов.
Чтобы включить этот инструмент, просто поставьте галочку Performance Analyzer на панели управления.
Больше информации об интерфейсе Performance Analyzer содержится в официальной документации Microsoft. А в этой статье я помогу вам сфокусироваться на данных, которые мы получаем, а также правильно их интерпретировать.
Давайте начнём со времени отрисовки наших визуалов. Нам для этого потребуется произвести несколько нехитрых действий.
- Откройте ваш файл с данными.
- Включите Performance Analyzer, отметив чекбокс на Панели инструментов.
- Нажмите Start Recording на появившейся панели Performance Analyzer.
Performance Analyzer отображает в миллисекундах время, которое было затрачено на отрисовку каждого визуального элемента на странице. Мы видим, что на отрисовку элемента Расход у нас было потрачено около 2 секунд. Кстати говоря, время может варьироваться в зависимости от железа, из которого собрана ваша рабочая станция.
Кликните на кнопку Refresh visuals на панели Performance Analyzer и пролистните страницу вниз, чтобы просмотреть результат второго обновления данных. Сейчас пересчёт показателя Расход происходит быстрее, чем в прошлый раз.
Теперь у нас есть две группы записей отрисовки одного и того же отчета. Первый из них относится к группе Changed the model (Изменение модели), для которого отрисовка визуалов занимает от 200 до 1700 мс. При этом если выбрать любой из пунктов отчёта, то мы увидим, что большую часть времени занимает пункт под названием Other (Остальное).
Длительность отрисовки каждого из визуалов соответствует затраченному времени. Оно разбито на 3 категории:
- DAX query (DAX-запрос). В этой категории каждый визуал генерирует один или несколько запросов вида EVALUATE, отправляемых к нашей базе данных. Это время, прошедшее от момента отправки запроса до получения первой строки данных в Power BI. Сами графики не генерируют никаких DAX-запросов.
- Visual display (Отрисовка). Это время, затраченное для отрисовки наших визуалов. Оно относится к клиентской стороне.
- Other (Остальное). Это время ожидания (пока завершатся остальные операции), то есть просто время синхронизации различных визуалов на одной странице, и оно никак не может быть «бутылочным горлышком» в анализе производительности.
Если сравнить длительность отрисовки первого визуала и второго, то увидим, что последний выполняется гораздо быстрее. Это происходит из-за секции Other. Причина в том, что для выполнения запросов и отрисовки визуала с нуля требуется резервирование памяти. Невозможно ускорить этот процесс, если только не уменьшить количество визуалов или размер модели данных. По этой причине, когда мы анализируем наши отчёты, необходимо сконцентрироваться именно на повторных запросах, которые выполняются при нажатии кнопки Refresh visuals, так как именно они отображают наиболее достоверную информацию.
Если длительность Visual display (Отрисовки) слишком велика, то можно улучшить этот показатель за счёт уменьшения данных, которые включены в визуал (например, можно уменьшить количество точек на карте или диаграмме), либо вовсе заменить этот визуал другим.
Зачастую отрисовка сторонних визуалов занимает больше времени, чем нативные визуалы, которые есть по умолчанию в Power BI. Отрисовка любого из них занимает ресурсы процессора и памяти. Страница может загружаться очень медленно, если на ней размещено несколько визуалов, так как прорисовка каждого из них — это отдельный процесс. Например, отрисовка обычного фильтра, состоящего из текста, занимает около 240 миллисекунд, а для отрисовки графика потребуется почти в 5 раз больше времени (см. скриншот).
Медленный DAX-запрос имеет большое время ожидания. Среди причин:
- большое количество данных;
- медленная работа хранилища базы данных, особенно в режиме Direct query (Прямой запрос).
Приведу пример. При внедрении BI-системы внутри агентства мы столкнулись со следующей ситуацией: база данных SQL Server примерно на 150 млн строк была размещена на HDD-диске, время полной отрисовки 1 основного отчёта составляло примерно 2–2,5 минуты. Перенос базы данных на более скоростной SSD-диск дал выигрыш в скорости примерно в 1 минуту. В итоге пришлось создать OLAP-куб, и время генерации отчёта стало составлять от 2 до 10 секунд, в зависимости от применённого фильтра.
Кстати говоря, можно скопировать запрос в буфер обмена, нажав кнопку Copy query, и вставить в редактор для дальнейшего анализа — к примеру, в DAX Studio. Ускорить запрос можно с помощью оптимизации кода.
По итогу Duration (Длительность), отображаемую в пункте Other, можно проигнорировать. Проблема в том, что пункт Other вложен в отчёт по каждому визуалу и общая длительность по визуалу считается вместе с Other, в результате чего сложно найти самый медленный запрос. Пока что вынести пункт Other отдельно нельзя. Остаётся только надеяться, что в дальнейших версиях разработчики Power BI реализуют такую возможность, чтобы можно было быстрее найти проблемные места в наших отчётах.