Ссылка кодировок ISO 3166-1 для стран: https://en.wikipedia.org/wiki/ISO_3166-1#Current_codes
Материалы для практической работы: AdventureWorks2019
Подключение Power BI к базе данных SQL Server
Выбор источника и режима подключения
В примере Power BI подключается к базе данных SQL Server. Указывается сервер localhost и база AdventureWorks 2017. Доступны два режима: импорт (Import) и прямой запрос (DirectQuery).
- Импорт (Import) — данные физически загружаются в Power BI. Это удобно для небольших объемов, но при больших данных файл проекта сильно растет, а публикация в облако становится неудобной.
- Прямой запрос (DirectQuery) — отчет при открытии запрашивает данные с сервера, кеширует их в оперативной памяти и обновляет по мере необходимости. Импорта данных в файл не происходит. Такой режим требует, чтобы сервер базы данных был доступен из той среды, где используется отчет. Например, локальный сервер может быть не виден из публичного облака.
В примере выбран импорт, чтобы не тратить время на кеширование запросов. Подключение выполняется с Windows-учетной записью. Система сообщает, что передача данных поддерживает шифрование.
Подготовка таблиц
Для анализа выбраны таблицы:
- Person;
- SalesTerritory;
- SalesOrderHeader.
Продавцы. В таблице Person оставляем только тип SP — продавец. Затем удаляем лишние столбцы и оставляем:
- BusinessEntityID;
- FirstName;
- LastName.
Таблицу переименовываем в SalesPerson. Важно: после удаления столбца PersonType примененный фильтр сохраняется.
Территории. В SalesTerritory оставляем:
- TerritoryID;
- Name;
- CountryRegionCode;
- Group.
Поле CountryRegionCode переименовываем в CountryCode, а Group — в Group.
Заказы. В SalesOrderHeader оставляем:
- OrderID;
- OrderDate;
- SalesPersonID;
- TerritoryID;
- SubTotal.
Поле OrderDate преобразуем из типа «дата и время» в «дата», чтобы убрать нулевое время. Для анализа продавцов берем именно SubTotal: налоги и стоимость доставки зависят от территории, а не от продавца. Строки без продавца удаляем, потому что анализ ведется в разрезе сотрудников.
Ежегодные продажи
Чтобы получить ежегодные продажи, создаем дубликат таблицы заказов и называем его Annual Sales. В новой таблице:
- извлекаем год из OrderDate;
- переводим год в текстовый тип, чтобы годы не суммировались;
- группируем данные по году;
- суммируем SubTotal.
В результате получаем суммы продаж по годам: 2011, 2012, 2013 и 2014.
Связи и коды стран
Таблица заказов автоматически связывается с SalesTerritory по TerritoryID. Таблицы SalesPerson и заказы автоматически не связываются, потому что ключи названы по-разному: BusinessEntityID и SalesPersonID. Связь создается вручную.
Для названий стран подключаемся к веб-таблице с кодами государств. Оставляем поля:
- CountryName;
- CountryCode.
Затем выполняем объединение (Merge) таблицы SalesTerritory с таблицей кодов по CountryCode. Используется левое соединение (left join). В SalesTerritory добавляется CountryName.
Вычисляемые поля и меры
В SalesPerson создаем вычисляемый столбец FullName:
LastName & ", " & FirstName.
В таблице заказов создаем меры:
- Total Sales — сумма SubTotal;
- Average Sales — среднее по SubTotal;
- Count — количество заказов по SalesOrderID.
Мера — это вычисление по всей таблице, которое возвращает одно число. В интерфейсе она обозначается значком калькулятора.
Отчеты
- Отчет по продавцам. Берем FullName, добавляем Total Sales, Count, Average Sales. Фильтр по выбранному продавцу автоматически применяется к мерам через связь SalesPerson — заказы. Числовые поля форматируем в доллары.
- Отчет по странам. Берем CountryName и Average Sales. Показывается распределение рынка в процентах и абсолютных значениях. Фильтр по стране проходит через SalesTerritory к заказам.
- Карта. Размер пузырька зависит от Total Sales, CountryName выводится в легенду. Отображаются только страны, где были продажи.
- Годовой график. Используется таблица Annual Sales, по оси — год, по значениям — продажи.
При выборе страны, продавца или года остальные визуальные элементы автоматически фильтруются. Например, выбор продавца показывает, в каких странах он продавал; выбор страны оставляет только тех продавцов, которые работали с этой страной.
Итоговая оценка инструмента
Power BI позволяет быстро подключаться к базе данных, готовить данные, создавать связи, меры и интерактивные отчеты. Инструмент мощный и при этом достаточно простой. Отдельные нюансы возможны при распознавании текста на карте, но это сложная задача. Рассмотрены два базовых источника: веб-страница и база данных.
Краткие итоги
Практическая ценность материала раскрывается через последовательность решений: сначала выбирается режим подключения, затем формируется компактная модель данных, после чего создаются связи, вычисления и визуальные отчеты. Выбор между импортом и прямым запросом — это не техническая мелочь, а архитектурное решение, влияющее на размер файла, скорость обновления, доступность сервера и сценарии публикации. Подготовка таблиц снижает избыточность и оставляет только поля, необходимые для анализа.
Фильтрация и удаление столбцов в редакторе запросов формируют основу для корректной модели. Создание отдельной таблицы ежегодных продаж показывает, как агрегация на уровне года упрощает анализ динамики. Связи между таблицами обеспечивают автоматическое распространение фильтров, а ручное сопоставление ключей устраняет ограничения автоматического определения. Вычисляемые столбцы обогащают данные, а меры позволяют получать динамические показатели, зависящие от контекста. В отчетах это проявляется в том, что выбор продавца, страны или года мгновенно перестраивает все визуальные элементы. Карта, таблица и диаграмма работают как единая интерактивная система. Практическое применение связано с построением управленческой отчетности: анализ продаж по сотрудникам, территориям и годам, выявление географии и вклада продавцов. Такой подход ускоряет подготовку отчетов и делает анализ прозрачным. Важно, что модель остается простой для понимания, а вычисления не дублируют данные без необходимости.
Ограничения прямого запроса и распознавания текста показывают, что выбор инструмента зависит от инфраструктуры. В итоге формируется навык проектирования отчетности от источника данных до интерактивного анализа.
В примере Power BI подключается к базе данных SQL Server. Указывается сервер localhost и база AdventureWorks 2017. Есть два режима: импорт (Import) и прямой запрос (DirectQuery). Импорт физически загружает данные в файл Power BI, что может быть неудобно при больших объемах и публикации в облако. Прямой запрос оставляет данные на сервере: отчет запрашивает их, кеширует в оперативной памяти и обновляет. Но сервер должен быть доступен из среды отчета; локальная база может быть не видна из публичного облака. В примере выбран импорт, чтобы не тратить время на кеширование. Подключение идет через Windows-учетную запись, передача данных поддерживает шифрование.
Выбираются таблицы Person, SalesTerritory, SalesOrderHeader.
В Person оставляем только PersonType = SP, то есть продавцов. Удаляем лишние столбцы, оставляем BusinessEntityID, FirstName, LastName. Таблицу переименовываем в SalesPerson. Фильтр сохраняется даже после удаления PersonType.
В SalesTerritory оставляем TerritoryID, Name, CountryRegionCode, Group. CountryRegionCode переименовываем в CountryCode.
В SalesOrderHeader оставляем OrderID, OrderDate, SalesPersonID, TerritoryID, SubTotal. OrderDate переводим из «дата и время» в «дата», убирая нулевое время. Для анализа продавцов берем SubTotal: налоги и доставка зависят от территории, а не от продавца. Строки без продавца удаляем.
Для ежегодных продаж создаем дубликат таблицы заказов — Annual Sales. Из OrderDate извлекаем год, переводим его в текст, чтобы годы не суммировались, группируем по году и суммируем SubTotal. Получаем продажи по годам.
Связи: заказы автоматически связываются с SalesTerritory по TerritoryID. SalesPerson и заказы не связываются автоматически, потому что ключи называются BusinessEntityID и SalesPersonID. Связь создается вручную.
Для стран подключаемся к веб-таблице с кодами государств. Оставляем CountryName и CountryCode. Объединяем SalesTerritory с этой таблицей по CountryCode левым соединением. В SalesTerritory появляется CountryName.
Вычисляемые поля и меры:
- В SalesPerson создаем FullName: LastName & ", " & FirstName.
- В заказах создаем меры:
- Total Sales — сумма SubTotal;
- Average Sales — среднее по SubTotal;
- Count — количество заказов по SalesOrderID.
Мера — это вычисление по всей таблице, дающее одно число. Она обозначается калькулятором.
Отчеты:
- Таблица по продавцам: FullName, Total Sales, Count, Average Sales. Фильтр по продавцу автоматически применяется к мерам через связь.
- Отчет по странам: CountryName, Average Sales. Показывает распределение рынка в процентах и абсолютных значениях. Фильтр проходит через SalesTerritory к заказам.
- Карта: размер пузырька зависит от Total Sales, CountryName выводится в легенду. Видны только страны с продажами.
- Годовой график: из Annual Sales по годам и продажам.
Перекрестная фильтрация: выбор продавца, страны или года автоматически перестраивает остальные визуальные элементы. Например, выбор страны оставляет продавцов, работавших в ней.
Power BI позволяет быстро подключаться к базе, готовить данные, создавать связи, меры и интерактивные отчеты. Инструмент мощный и простой. Отдельные нюансы возможны при распознавании текста на карте. Рассмотрены два базовых источника: веб-страница и база данных.
1. Импорт загружает данные в файл Power BI, а прямой запрос оставляет данные на сервере.
2. Прямой запрос требует доступности сервера из среды использования отчета.
3. Для больших объемов импорт может быть неудобен из-за размера файла.
4. Фильтр в редакторе запросов сохраняется даже после удаления столбца.
5. Для анализа продавцов берется SubTotal, так как налоги и доставка зависят от территории.
6. Строки без продавца удаляются, если анализ идет по продавцам.
7. Ежегодные продажи создаются группировкой по году с суммированием SubTotal.
8. Год переводится в текст, чтобы избежать нежелательного суммирования.
9. Связи таблиц обеспечивают автоматическую фильтрацию мер и визуальных элементов.
10. Мера отличается от вычисляемого столбца и обозначается калькулятором.
11. Названия стран подключаются через веб-таблицу и объединение по CountryCode.
12. Перекрестная фильтрация делает отчеты интерактивными и взаимосвязанными.
1. Чем импорт отличается от прямого запроса в Power BI?
2. Какие условия необходимы для использования прямого запроса?
3. Зачем в таблице Person фильтровать PersonType = SP?
4. Почему фильтр сохраняется после удаления столбца PersonType?
5. Почему для анализа продавцов выбран SubTotal, а не итог с налогами и доставкой?
6. Как создать таблицу ежегодных продаж?
7. Зачем год из OrderDate переводится в текстовый тип?
8. Как связать SalesPerson и заказы, если ключи названы по-разному?
9. Как получить CountryName из веб-таблицы?
10. Чем мера отличается от вычисляемого столбца?
11. Как контекст фильтра влияет на меры в отчете?
12. Как работает перекрестная фильтрация между картой, таблицей и графиком?