Чтение из семантических моделей и запись данных, потребляемых Power BI с помощью Python
В этой статье вы узнаете, как считывать данные и метаданные и оценивать меры в семантических моделях с помощью библиотеки Python SemPy в Microsoft Fabric. Вы также узнаете, как записывать данные, которые могут использовать семантические модели.
Необходимые компоненты
Получение подписки Microsoft Fabric. Или зарегистрируйте бесплатную пробную версию Microsoft Fabric.
Войдите в Microsoft Fabric.
Используйте переключатель интерфейса в левой части домашней страницы, чтобы перейти на интерфейс Synapse Обработка и анализ данных.
- Перейдите к интерфейсу Обработка и анализ данных в Microsoft Fabric.
- Создайте записную книжку для копирования и вставки кода в ячейки.
- Для Spark 3.4 и более поздних версий семантическая ссылка доступна в среде выполнения по умолчанию при использовании Fabric и не требуется устанавливать ее. Если вы используете Spark 3.3 или ниже или хотите обновить до последней версии семантической ссылки, можно выполнить следующую команду:
python %pip install -U semantic-link
- Добавьте Lakehouse в записную книжку.
- Скачайте семантику sample.pbix в папке наборов данных репозитория примеров структуры и сохраните семантику модели локально.
Отправка семантической модели в рабочую область
В этой статье мы используем семантическую модель семантики PBIX для клиентов. Эта семантическая модель ссылается на маркетинговые материалы компании и содержит данные о продуктах, клиентах и соответствующих доходах для различных бизнес-единиц.
- Откройте рабочую область в Обработка и анализ данных Fabric.
- Выберите "Отправить > обзор" и выберите модель семантики sample.pbix .
После отправки рабочая область будет иметь три новых артефакта: отчет Power BI, панель мониторинга и семантическая модель с именем "Прибыльность клиента". Эта семантическая модель будет использоваться для действий, описанных в этой статье.
Использование Python для чтения данных из семантических моделей
API Python SemPy может извлекать данные и метаданные из семантических моделей, расположенных в рабочей области Microsoft Fabric, и выполнять запросы на них.
Записная книжка, семантическая модель набора данных Power BI и Lakehouse могут находиться в одной рабочей области или в разных рабочих областях. По умолчанию SemPy пытается получить доступ к семантической модели из:
- Рабочая область lakehouse, если вы прикрепили lakehouse к записной книжке.
- Рабочая область записной книжки, если не подключена к Lakehouse.
Если семантическая модель не находится в любой из этих рабочих областей, необходимо указать рабочую область семантической модели при вызове метода SemPy.
Для чтения данных из семантических моделей:
Список доступных семантических моделей в рабочей области.
import sempy.fabric as fabric df_datasets = fabric.list_datasets() df_datasets
Список таблиц, доступных в модели семантики семантики рентабельности клиента.
df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True) df_tables
Перечислить меры, определенные в модели семантики рентабельности клиента.
Совет
В следующем коде мы указали рабочую область для SemPy, используемую для доступа к семантической модели. Вы можете заменить
Your Workspace
имя рабочей области, в которой вы отправили семантику (из раздела "Отправка семантической модели" в раздел рабочей области ).df_measures = fabric.list_measures("Customer Profitability Sample", workspace="Your Workspace") df_measures
Теперь мы определили, что таблица Customer является таблицей интересов.
Считывает таблицу Customer из семантической модели семантики рентабельности клиента.
df_table = fabric.read_table("Customer Profitability Sample", "Customer") df_table
Примечание.
- Данные извлекаются с помощью XMLA и поэтому требует включения только для чтения XMLA.
- Объем данных, которые можно получить, ограничен максимальным объемом памяти для каждого запроса SKU емкости, в котором размещена семантическая модель, и узлом драйвера Spark (см . размеры узлов), на котором выполняется записная книжка.
- Все запросы используют низкий приоритет для минимизации влияния на производительность служб Microsoft Azure Analysis Services и выставляются в виде интерактивных запросов.
Оцените общую меру дохода на состояние и дату клиента.
df_measure = fabric.evaluate_measure( "Customer Profitability Sample", "Total Revenue", ["'Customer'[State]", "Calendar[Date]"]) df_measure
Примечание.
- По умолчанию данные не извлекаются с помощью XMLA и поэтому не требуют включения только для чтения XMLA.
- Кроме того, данные не подлежат ограничениям серверной части Power BI.
- Объем данных, которые можно получить, ограничен максимальным объемом памяти для каждого запроса SKU емкости, в котором размещена семантическая модель, и узлом драйвера Spark (см . размеры узлов), на котором выполняется записная книжка.
- Все запросы выставляются как интерактивные запросы.
Фильтры можно добавить в вычисление меры, указав список значений, которые могут находиться в определенном столбце.
filters = { "State[Region]": ["East", "Central"], "State[State]": ["FLORIDA", "NEW YORK"] } df_measure = fabric.evaluate_measure( "Customer Profitability Sample", "Total Revenue", ["Customer[State]", "Calendar[Date]"], filters=filters) df_measure
Вы также можете оценить общую меру дохода на состояние и дату клиента с помощью запроса DAX.
df_dax = fabric.evaluate_dax( "Customer Profitability Sample", """ EVALUATE SUMMARIZECOLUMNS( 'State'[Region], 'Calendar'[Date].[Year], 'Calendar'[Date].[Month], "Total Revenue", CALCULATE([Total Revenue])) """)
Примечание.
- Данные извлекаются с помощью XMLA и поэтому требует включения только для чтения XMLA.
- Объем извлекаемых данных ограничен доступной памятью в Службах Microsoft Azure Analysis Services и узлом драйвера Spark (см. размеры узлов).
- Все запросы используют низкий приоритет для минимизации влияния на производительность служб Analysis Services и выставляются в виде интерактивных запросов.
Вы можете оценить один и тот же запрос DAX без необходимости импортировать библиотеку с помощью магии ячейки
%%dax
. Давайте запустите ячейку ниже, чтобы загрузить%%dax
магию ячейки.%load_ext sempy
Параметр рабочей области является необязательным и соответствует тем же правилам, что и параметр
evaluate_dax
рабочей области функции. Магия ячейки также поддерживает доступ к переменным Python с помощью синтаксиса{variable_name}
. Чтобы использовать фигурную скобку в запросе DAX, побежите ее с помощью другой фигурной скобки (например,EVALUATE {{1}}
).%%dax "Customer Profitability Sample" -w "Your Workspace" EVALUATE SUMMARIZECOLUMNS( 'State'[Region], 'Calendar'[Date].[Year], 'Calendar'[Date].[Month], "Total Revenue", CALCULATE([Total Revenue]))
Результирующий объект FabricDataFrame доступен через
_
переменную, которая фиксирует выходные данные последней выполненной ячейки.df_dax = _ df_dax.head()
Кроме того, можно добавить меры к данным, полученным из внешних источников. Этот подход объединяет три задачи: он разрешает имена столбцов в измерения Power BI, определяет группу по столбцам и фильтрует меру. Все имена столбцов, которые не могут быть разрешены в данной семантической модели, игнорируются (см. поддерживаемый синтаксис DAX).
from sempy.fabric import FabricDataFrame df = FabricDataFrame({ "Sales Agent": ["Agent 1", "Agent 1", "Agent 2"], "Customer[Country/Region]": ["US", "GB", "US"], "Industry[Industry]": ["Services", "CPG", "Manufacturing"], } ) joined_df = df.add_measure("Total Revenue", dataset="Customer Profitability Sample") joined_df
Специальные параметры
SemPy read_table
и evaluate_measure
методы имеют больше параметров, которые полезны для управления выходными данными. Это следующие параметры.
fully_qualified_columns
: если значение равно True, методы возвращают имена столбцов в формеTableName[ColumnName]
.num_rows
: число строк для вывода в результате.pandas_convert_dtypes
: если значение равно True, то столбцы результирующего кадра данных приводятся к лучшему dtype, используя pandas convert_dtypes. Если этот параметр отключен, проблемы несовместимости типов могут привести к столбцам связанных таблиц, которые, возможно, не были обнаружены в модели Power BI из-за неявного преобразования типов DAX.
SemPy read_table
также использует сведения о модели, предоставляемые Power BI.
multiindex_hierarchies
: Значение True преобразует иерархии Power BI в структуру Pandas MultiIndex.
Запись данных, потребляемых семантической моделью
Таблицы Spark, добавленные в Lakehouse, автоматически добавляются в соответствующую семантику по умолчанию. В этом примере показано, как записывать данные в присоединенный Lakehouse. FabricDataFrame принимает те же входные данные, что и кадры данных Pandas.
from sempy.fabric import FabricDataFrame
df_forecast = FabricDataFrame({'ForecastedRevenue': [1, 2, 3]})
df_forecast.to_lakehouse_table("ForecastTable")
С помощью Power BI таблицу ForecastTable можно добавить в составную семантику модели с помощью семантической модели Lakehouse.