Power BI: скорость и мощность с агрегацией
Power BI - это не только решение для небольших, но и для больших наборов данных. Если объем данных огромен, вы можете переключиться на него в режиме DirectQuery. Поскольку DirectQuery не сохраняет копию этих данных в памяти машины, на которой запущена модель Power BI, Power BI отправит запросы обратно в источник данных для каждой страницы, отображаемой в отчете.
Однако режим DirectQuery работает медленно. Рассмотрим страницу с тремя, четырьмя или пятью изображениями. Эта страница отправит пять запросов в источник данных с каждым изменением в контексте фильтрации, например, сменой слайсера, нажатием на диаграмму столбца, чтобы выделить ее часть или обновить страницу. Процесс отправки запросов к источнику данных для каждого взаимодействия делает режим DirectQuery очень медленным. Из-за этого DirectQuery является последним рекомендуемым способом подключения в Power BI. Мы писали о сравнении режимов подключения в Power BI, предлагая всегда использовать DirectQuery в качестве последней надежды, когда другие методы не могут быть использованы.
Недавно в Power BI объявлен новый режим соединения, называемый Composite mode. Мы уже писали об этом, вы можете прочитать о нем здесь. Композитный режим позволяет части модели использовать DirectQuery (для больших таблиц) и часть модели для использования данных импорта (для небольших таблиц). Таким образом, вы можете повысить производительность при работе с меньшими таблицами, поскольку они запрашивают структуру данных в памяти.
Однако таблицы (таблицы), которые являются частью соединения DirectQuery, все еще медленны. Композитный режим имеет фантастическую функцию Aggregations. Агрегации - это решение для ускорения таблиц источников DirectQuery в рамках модели Composite. С помощью агрегаций вы можете создавать уровни предварительно агрегированных значений, которые могут быть сохранены в памяти, и, следовательно, будут работать быстрее.
Как работает агрегация?
Представьте таблицу фактов с 250 миллионами строк. Такая таблица фактов достаточно велика, чтобы считаться хорошим кандидатом на подключение DirectQuery. Вы не хотите загружать такую большую таблицу в память, и, скорее всего, размер файла Power BI превышает ограничение 1 ГБ. Теперь подумайте о своем решении для отчетности на секунду. Вы всегда запрашиваете эту таблицу фактов на самом высоком или минимальном уровне детализации? То есть, вы всегда смотрите на каждую транзакцию в этой таблице, когда вы сообщаете об этом?
Ответ: Нет. В большинстве случаев вы запрашиваете данные другими полями или столбцами. В качестве примера; вы запрашиваете значение Sales в таблице фактов по году. В некоторые другие моменты вы запрашиваете значения таблицы фактов по категории образования Клиента. В некоторые другие моменты вы запрашиваете значения в таблице фактов по каждому продукту. Когда вы смотрите на реальные сценарии, большую часть времени вы запрашиваете таблицу фактов посредством агрегаций таблиц измерений.
Визуальная надстройка запрашивает SalesAmount из таблицы фактов CalendarYear из DimDate:
Агрегированная таблица
Итак, если мы запрашиваем только CalendarYear, тогда мы можем создать агрегированную таблицу. Агрегированная таблица может предварительно рассчитать сумму SalesAmount для каждого CalendarYear. В приведенном выше случае у нас просто будет таблица с пятью строками. Один ряд за каждый год; с 2010 по 2014 год. Такая агрегированная таблица настолько мала (только пять строк), которую можно легко импортировать в память, и всякий раз, когда мы запрашиваем эту таблицу, мы получаем супербыстрый результат.
К настоящему моменту вы можете сказать: “Я бы также запросил его в Quarter.” Фактически, вы можете захотеть развернуть месяц, неделю или даже каждый день. Это абсолютно нормально. Учитывая 365 дней в году, у вас будет таблица с 5×365 строками, это будет таблица, включающая максимум 1827 строк (у вас может быть один или два високосных года в этот период). Размер агрегированной таблицы по-прежнему очень крошечный (всего менее 2000 строк) по сравнению с таблицей фактов с 250 миллионами строк. Вы можете импортировать свою сводную таблицу в память. Такая таблица будет охватывать весь анализ данных, который вы хотите, каждый день.
Слои агрегации
Возможно, вам придется создавать другие агрегации и в других измерениях. Обычно, поскольку размеры намного меньше, чем таблица фактов, ваши агрегированные таблицы всегда будут меньше, чем таблица фактов. Эти агрегированные таблицы являются вашими уровнями агрегации в модели.
Золотое правило для составной модели в Power BI; НЕ используйте таблицу нижнего уровня, если на ней есть агрегация, которую можно использовать для этого запроса.
Если вы запрашиваете даже таблицу DirectQuery с 250 миллионами строк, но вы только запрашиваете ее по дате, тогда Power BI действует по-разному. Power BI не отправит запрос в источник данных таблицы фактов. Вместо этого он будет запрашивать агрегированную таблицу в памяти, и вы получите быстрый ответ. Power BI только переключается на таблицу внизу, если агрегированные таблицы не могут ответить на вопрос.
Выполнение этого действия
Общий процесс для агрегации - это:
- Создание таблицы агрегации
- Создание связей, необходимых для таблицы агрегации и таблицы DirectQuery
- Настройка режима хранения агрегированных и размерных таблиц
- Настройка агрегации
Позже мы напишем о каждом разделе отдельно в деталях. Следующим в этой серии будет создание таблицы агрегации.
Нечестно говорить об агрегированиях и не упоминает Кристиана Уэйда, менеджера программ команды Power BI, который является ответственным лицом за эту потрясающую работу. У Кристиана есть отличная демонстрация анализа триллионов рядов данных (четверть данных петабайта) в Power BI с использованием агрегатов в мгновенное время отклика и скорость щелчка щелчком мыши, перетаскивание, droppy. Смотрите его замечательные презентации на Саммите Microsoft Business Applications 2018 здесь:
Подведем итоги
Агрегация - это несущая кардинальные перемены функция производительности и скорости решений Power BI для огромных таблиц источников данных. С помощью агрегаций вы можете иметь слои предварительных вычислений, скоторые хранятся в памяти, и готовы ответить запросы от пользователей мгновенно. Источник данных DirectQuery будет использоваться только для большинства запросов транзакций Atom. Следите за новостями в блоге о том, как создать агрегированную таблицу. Оставайтесь с нами для остальной части серии блога в ближайшее время об Aggergations.