Skip to main content

10 шагов по оптимизации вашей модели Power BI

Хорошая модель данных или семантическая модель имеет ключевое значение для эффективной работы отчета Power BI. Вот 10 шагов, которые вы можете предпринять для оптимизации вашей модели, и мы рассмотрим их всего за 10 минут.

  1. Удалите неиспользуемые столбцы и таблицы. Используйте внешние инструменты, такие как Bravo или PowerBI Helper, чтобы определить неиспользуемые элементы и освободить пространство в модели.
  2. Агрегируйте данные до необходимого уровня детализации для визуализаций. Это позволит уменьшить количество строк в таблице и оптимизировать модель.
  3. Отключите автоматическое создание дат и времени. Эта функция создает скрытые таблицы дат для каждого поля с типом данных “Дата” или “Дата и время”. Создайте собственную настраиваемую таблицу дат, которая предоставит больше гибкости в описательной информации о датах.
  4. Используйте схему “Звезда” вместо “Снежинка” или плоских таблиц. Плоские таблицы сложны для навигации и содержат много повторяющихся данных, что увеличивает размер модели и файла. Схема “Звезда” с отдельными таблицами фактов и измерений упрощает навигацию и оптимизирует модель.
  5. Удалите однозначные отношения, которые замедляют работу модели. Вместо этого объедините информацию из двух таблиц в одну, используя функцию “Merge Queries” в Power Query.
  6. Избегайте использования двусторонних и много-много отношений, которые могут замедлить работу модели и привести к неоднозначности в отчетах. Используйте односторонние фильтры, чтобы контролировать поток фильтров между таблицами.
  7. Уменьшите количество уникальных значений в столбцах, чтобы улучшить сжатие и оптимизировать модель. Например, разделите столбец “Дата и время” на отдельные столбцы “Дата” и “Время”, чтобы уменьшить количество уникальных значений.
  8. Убедитесь, что каждое поле имеет правильный тип данных. Некоторые типы данных занимают больше места, чем другие. Например, тип данных “Текст” занимает больше места, чем тип данных “Целое число”.
  9. Используйте рассчитанные столбцы и таблицы с осторожностью. Рассчитанные столбцы занимают место в модели, в то время как меры не занимают места, но могут потребовать больше времени для вычислений. Оцените компромисс между временем вычислений и пространством в модели.
  10. Выберите между режимом импорта и прямым запросом для таблиц. Режим импорта загружает данные в Power BI, в то время как прямой запрос оставляет данные на источнике. Прямой запрос подходит для очень больших наборов данных или когда требуется самая актуальная информация. Однако он может быть медленнее, чем режим импорта.

Следуйте этим шагам, чтобы оптимизировать вашу модель Power BI и улучшить ее производительность.

DAX to SQL

Несколько примеров реальных мер DAX и их аналогов на SQL:

  1. Общая сумма продаж
  • DAX: Total Sales = SUM(Sales[SalesAmount])
  • SQL: SELECT SUM(SalesAmount) AS TotalSales FROM Sales
  1. Количество уникальных клиентов
  • DAX: Unique Customers = DISTINCTCOUNT(Sales[CustomerID])
  • SQL: SELECT COUNT(DISTINCT CustomerID) AS UniqueCustomers FROM Sales
  1. Средняя сумма заказа
  • DAX: Average Order Amount = AVERAGE(Sales[OrderAmount])
  • SQL: SELECT AVG(OrderAmount) AS AverageOrderAmount FROM Sales
  1. Максимальная цена продукта
  • DAX: Max Product Price = MAX(Products[Price])
  • SQL: SELECT MAX(Price) AS MaxProductPrice FROM Products
  1. Общее количество продуктов в категории
  • DAX: Products in Category = COUNTROWS(FILTER(Products, Products[Category] = "Category Name"))
  • SQL: SELECT COUNT(*) AS ProductsInCategory FROM Products WHERE Category = 'Category Name'
  1. Сумма продаж за предыдущий год
  • DAX: Previous Year Sales = CALCULATE(SUM(Sales[SalesAmount]), PREVIOUSYEAR(Calendar[Date]))
  • SQL: SELECT SUM(SalesAmount) AS PreviousYearSales FROM Sales WHERE YEAR(SalesDate) = YEAR(GETDATE()) - 1
  1. Доля продаж продукта в общей сумме продаж
  • DAX: Product Sales Share = DIVIDE(SUM(Sales[SalesAmount]), CALCULATE(SUM(Sales[SalesAmount]), ALL(Products)))
  • SQL: SELECT SUM(SalesAmount) / (SELECT SUM(SalesAmount) FROM Sales) AS ProductSalesShare FROM Sales WHERE ProductID = 'Product ID'
  1. Совокупный доход по месяцам
  • DAX: Cumulative Revenue = CALCULATE(SUM(Sales[Revenue]), FILTER(ALL(Calendar), Calendar[Date] <= MAX(Calendar[Date])))
  • SQL: SELECT SUM(Revenue) AS CumulativeRevenue FROM Sales WHERE YEAR(SalesDate) = YEAR(GETDATE()) AND MONTH(SalesDate) <= MONTH(GETDATE())
  1. Рейтинг продуктов по количеству продаж
  • DAX: Product Sales Rank = RANKX(ALL(Products), SUM(Sales[SalesQuantity]))
  • SQL: SELECT ProductID, RANK() OVER (ORDER BY SUM(SalesQuantity) DESC) AS ProductSalesRank FROM Sales GROUP BY ProductID
  1. Скользящее среднее продаж за 3 месяца
    • DAX: 3-Month Moving Average = AVERAGEX(DATESBETWEEN(Calendar[Date], LASTDATE(Calendar[Date]), -2), SUM(Sales[SalesAmount]))
    • SQL: SELECT AVG(SalesAmount) AS 3MonthMovingAverage FROM Sales WHERE SalesDate BETWEEN DATEADD(MONTH, -2, GETDATE()) AND GETDATE()

Эти примеры демонстрируют различные сценарии использования мер DAX и их аналогов на SQL. Они охватывают агрегацию данных, фильтрацию, вычисления с использованием временных периодов, ранжирование и скользящие средние значения. Конечно, это лишь некоторые примеры, и возможности мер DAX и SQL гораздо шире и могут быть адаптированы к конкретным потребностям и структуре данных вашего проекта.