SlideShare a Scribd company logo
1 of 19
How to optimize Tabular model in PowerPivot or in
Analysis Services Tabular
Anastasiya Kaminskaya
Analyst at Preply.com
О чем пойдет речь?
● Рассмотрим базовую архитектуру SSAS Tabular model (In-memory)
● Поговорим про основные проблемы построения моделей
● Разберем 8 полезных советов по оптимизации моделей
● Рассмотрим результаты оптимизации на примере.
- Колоночная структура (columnar structure)
- Сжатие данных
- Все данные “копируются” в табличную модель
- Все DAX функции доступны (в отличии от Direct Query mode)
SSAS Tabular model (In-memory Mode)
In-memory columnstore technology
Совет 1: Определяемся с гранулярностью данных
Гранулярность = уровень детализации данных
Отвечаем на вопросы насколько детализированные данные нам нужны для модели:
● Нужен ли нам срез по определенному покупателю или достаточно по категории
покупателей
● Нужен ли нам срез по каждому наименованию товаров или только по
подкатегориям, или вообще категориям товаров
● Нужно ли нам знать точное время, или достаточно только дня, недели, месяца и
т.д
Совет 1: Определяемся с гранулярностью данных
Преимущества высокой гранулярности данных:
● Более детализированные данные -> возможность извлечь более
глубокие инсайты из данных
● С высокой гранулярности проще перейти к более низкой
Недостатки высокой гранулярности данных:
● Модель занимает больше памяти
● Время на обработку запросов увеличивается
● Низкий порог сжатия данных
Совет 2: Определяемся с полнотой данных
● Убираем невостребованные столбцы (который нам не понадобятся в
вычислениях) в PowerQuery или в SQL
● Отфильтровываем лишние строки. (Например, данные о
пользователях, не совершивших покупку)
Совет 3: Уменьшаем количество уникальных значений в столбце
● Убираем колонки с id юзеров и транзакций (по максимуму насколько это
возможно)
● Убираем итоговые колонки с счетными метриками. Взамен используем DAX
формулы для их расчета.
● Дату и время разносим в разные колонки
Совет 3: Уменьшаем количество уникальных значений в столбце
● Разбиваем столбцы с большими числами на несколько. Например, если нам
необходимо хранить id транзакции, то разбиваем его на 2 диапазона:
количество тысяч и остаток.
Совет 4: Используем сортировку в столбце
Стараемся выбрать сортировку в столбце таким
образом, чтобы одинаковые значения были как
можно ближе друг к другу.
Таким образом уменьшаем таблицу с индексами
для нашего словаря.
Совет 5: Денормализация данных
Стараемся избегать связей между
большими таблицами. Например:
● Данные о заявках и покупках в
одну фактическую таблицу.
● Данные о заявках и регистрации
пользователей.
● И т.д
Совет 5: Денормализация данных
Используем VertiPaq Analyzer для поиска наиболее тяжелых связей.
Совет 5: Денормализация данных
Преимущества денормализации данных:
● Чем меньше “тяжелых” связей между таблицами, тем выше скорость
обработки запросов
Недостатки денормализации данных:
● Теряем правильную удобную структуру данных
● Можно столкнуться с перебором по денормализации
● Тяжело перейти к другой гранулярности
Совет 6: Стремимся к Star schema
Может быть несколько фактических таблиц, связанных между собой таблицами
параметров.
Совет 7: DAX. Используем Related и Lookup как можно реже
Для больших таблиц использование связей между таблицами и создание
вычислительных колонок значительно утяжеляет модель данных.
Если модель построена правильно, то потребность в данных формулах
возникает намного реже.
Совет 8: Упрощаем DAX метрики и замеряем скорость расчета
Основные подходы:
● Для более сложных метрик создаем внутри метрик переменные
(если есть возможность)
● Тестируем разное написание формул используя DAX Studio
Замеряем performance
Размер модели уменьшился в 2 раза.
Время, затраченное на выполнение запросов, в среднем уменьшилось в 2,5 раза
Загрузка CPU уменьшилось в 4,5 раза.
Спасибо за внимание!
Вопросы? :)
fb: anastasiya.kaminskaya

More Related Content

More from Olga Zinkevych

Evolution of words through time a malenko dataconf 21 04_18
Evolution of words through time a malenko dataconf 21 04_18Evolution of words through time a malenko dataconf 21 04_18
Evolution of words through time a malenko dataconf 21 04_18Olga Zinkevych
 
What it takes to build a model for detecting patients that defaults from medi...
What it takes to build a model for detecting patients that defaults from medi...What it takes to build a model for detecting patients that defaults from medi...
What it takes to build a model for detecting patients that defaults from medi...Olga Zinkevych
 
Variational autoencoders for speech processing d.bielievtsov dataconf 21 04 18
Variational autoencoders for speech processing d.bielievtsov dataconf 21 04 18Variational autoencoders for speech processing d.bielievtsov dataconf 21 04 18
Variational autoencoders for speech processing d.bielievtsov dataconf 21 04 18Olga Zinkevych
 
Dataservices based on mesos and kafka kostiantyn bokhan dataconf 21 04 18
Dataservices based on mesos and kafka kostiantyn bokhan dataconf 21 04 18Dataservices based on mesos and kafka kostiantyn bokhan dataconf 21 04 18
Dataservices based on mesos and kafka kostiantyn bokhan dataconf 21 04 18Olga Zinkevych
 
Azure data catalog your data your way eugene polonichko dataconf 21 04 18
Azure data catalog your data your way eugene polonichko dataconf 21 04 18Azure data catalog your data your way eugene polonichko dataconf 21 04 18
Azure data catalog your data your way eugene polonichko dataconf 21 04 18Olga Zinkevych
 
Aibdconference chat bot for every product Maksym Volchenko
Aibdconference chat bot for every product Maksym VolchenkoAibdconference chat bot for every product Maksym Volchenko
Aibdconference chat bot for every product Maksym VolchenkoOlga Zinkevych
 
Ai big dataconference_semantic image segmentatation using word embeddings_ole...
Ai big dataconference_semantic image segmentatation using word embeddings_ole...Ai big dataconference_semantic image segmentatation using word embeddings_ole...
Ai big dataconference_semantic image segmentatation using word embeddings_ole...Olga Zinkevych
 
Ai big dataconference_jeffrey ricker_kappa_architecture
Ai big dataconference_jeffrey ricker_kappa_architectureAi big dataconference_jeffrey ricker_kappa_architecture
Ai big dataconference_jeffrey ricker_kappa_architectureOlga Zinkevych
 

More from Olga Zinkevych (8)

Evolution of words through time a malenko dataconf 21 04_18
Evolution of words through time a malenko dataconf 21 04_18Evolution of words through time a malenko dataconf 21 04_18
Evolution of words through time a malenko dataconf 21 04_18
 
What it takes to build a model for detecting patients that defaults from medi...
What it takes to build a model for detecting patients that defaults from medi...What it takes to build a model for detecting patients that defaults from medi...
What it takes to build a model for detecting patients that defaults from medi...
 
Variational autoencoders for speech processing d.bielievtsov dataconf 21 04 18
Variational autoencoders for speech processing d.bielievtsov dataconf 21 04 18Variational autoencoders for speech processing d.bielievtsov dataconf 21 04 18
Variational autoencoders for speech processing d.bielievtsov dataconf 21 04 18
 
Dataservices based on mesos and kafka kostiantyn bokhan dataconf 21 04 18
Dataservices based on mesos and kafka kostiantyn bokhan dataconf 21 04 18Dataservices based on mesos and kafka kostiantyn bokhan dataconf 21 04 18
Dataservices based on mesos and kafka kostiantyn bokhan dataconf 21 04 18
 
Azure data catalog your data your way eugene polonichko dataconf 21 04 18
Azure data catalog your data your way eugene polonichko dataconf 21 04 18Azure data catalog your data your way eugene polonichko dataconf 21 04 18
Azure data catalog your data your way eugene polonichko dataconf 21 04 18
 
Aibdconference chat bot for every product Maksym Volchenko
Aibdconference chat bot for every product Maksym VolchenkoAibdconference chat bot for every product Maksym Volchenko
Aibdconference chat bot for every product Maksym Volchenko
 
Ai big dataconference_semantic image segmentatation using word embeddings_ole...
Ai big dataconference_semantic image segmentatation using word embeddings_ole...Ai big dataconference_semantic image segmentatation using word embeddings_ole...
Ai big dataconference_semantic image segmentatation using word embeddings_ole...
 
Ai big dataconference_jeffrey ricker_kappa_architecture
Ai big dataconference_jeffrey ricker_kappa_architectureAi big dataconference_jeffrey ricker_kappa_architecture
Ai big dataconference_jeffrey ricker_kappa_architecture
 

Ai big dataconference_anastasiya kaminskaya_how to optimize tabular model in powerpivot

  • 1. How to optimize Tabular model in PowerPivot or in Analysis Services Tabular Anastasiya Kaminskaya Analyst at Preply.com
  • 2. О чем пойдет речь? ● Рассмотрим базовую архитектуру SSAS Tabular model (In-memory) ● Поговорим про основные проблемы построения моделей ● Разберем 8 полезных советов по оптимизации моделей ● Рассмотрим результаты оптимизации на примере.
  • 3.
  • 4. - Колоночная структура (columnar structure) - Сжатие данных - Все данные “копируются” в табличную модель - Все DAX функции доступны (в отличии от Direct Query mode) SSAS Tabular model (In-memory Mode)
  • 6. Совет 1: Определяемся с гранулярностью данных Гранулярность = уровень детализации данных Отвечаем на вопросы насколько детализированные данные нам нужны для модели: ● Нужен ли нам срез по определенному покупателю или достаточно по категории покупателей ● Нужен ли нам срез по каждому наименованию товаров или только по подкатегориям, или вообще категориям товаров ● Нужно ли нам знать точное время, или достаточно только дня, недели, месяца и т.д
  • 7. Совет 1: Определяемся с гранулярностью данных Преимущества высокой гранулярности данных: ● Более детализированные данные -> возможность извлечь более глубокие инсайты из данных ● С высокой гранулярности проще перейти к более низкой Недостатки высокой гранулярности данных: ● Модель занимает больше памяти ● Время на обработку запросов увеличивается ● Низкий порог сжатия данных
  • 8. Совет 2: Определяемся с полнотой данных ● Убираем невостребованные столбцы (который нам не понадобятся в вычислениях) в PowerQuery или в SQL ● Отфильтровываем лишние строки. (Например, данные о пользователях, не совершивших покупку)
  • 9. Совет 3: Уменьшаем количество уникальных значений в столбце ● Убираем колонки с id юзеров и транзакций (по максимуму насколько это возможно) ● Убираем итоговые колонки с счетными метриками. Взамен используем DAX формулы для их расчета. ● Дату и время разносим в разные колонки
  • 10. Совет 3: Уменьшаем количество уникальных значений в столбце ● Разбиваем столбцы с большими числами на несколько. Например, если нам необходимо хранить id транзакции, то разбиваем его на 2 диапазона: количество тысяч и остаток.
  • 11. Совет 4: Используем сортировку в столбце Стараемся выбрать сортировку в столбце таким образом, чтобы одинаковые значения были как можно ближе друг к другу. Таким образом уменьшаем таблицу с индексами для нашего словаря.
  • 12. Совет 5: Денормализация данных Стараемся избегать связей между большими таблицами. Например: ● Данные о заявках и покупках в одну фактическую таблицу. ● Данные о заявках и регистрации пользователей. ● И т.д
  • 13. Совет 5: Денормализация данных Используем VertiPaq Analyzer для поиска наиболее тяжелых связей.
  • 14. Совет 5: Денормализация данных Преимущества денормализации данных: ● Чем меньше “тяжелых” связей между таблицами, тем выше скорость обработки запросов Недостатки денормализации данных: ● Теряем правильную удобную структуру данных ● Можно столкнуться с перебором по денормализации ● Тяжело перейти к другой гранулярности
  • 15. Совет 6: Стремимся к Star schema Может быть несколько фактических таблиц, связанных между собой таблицами параметров.
  • 16. Совет 7: DAX. Используем Related и Lookup как можно реже Для больших таблиц использование связей между таблицами и создание вычислительных колонок значительно утяжеляет модель данных. Если модель построена правильно, то потребность в данных формулах возникает намного реже.
  • 17. Совет 8: Упрощаем DAX метрики и замеряем скорость расчета Основные подходы: ● Для более сложных метрик создаем внутри метрик переменные (если есть возможность) ● Тестируем разное написание формул используя DAX Studio
  • 18. Замеряем performance Размер модели уменьшился в 2 раза. Время, затраченное на выполнение запросов, в среднем уменьшилось в 2,5 раза Загрузка CPU уменьшилось в 4,5 раза.

Editor's Notes

  1. Самая главная ошибка при построении модели - это просто перенести все таблицы из БД SQL или других источников в PowerBI или PowerPivot без каких либо изменений
  2. SQL Server Analysis Services (SSAS)
  3. Добавить пример
  4. Разделить на 2 слайда
  5. Разделить на 2 слайда