Чтение из семантических моделей и запись данных, потребляемых Power BI с помощью Python
В этой статье вы узнаете, как считывать данные и метаданные и оценивать меры в семантических моделях с помощью библиотеки Python SemPy в Microsoft Fabric. Вы также узнаете, как записывать данные, которые могут использовать семантические модели.
Необходимые компоненты
Получение подписки Microsoft Fabric. Или зарегистрируйте бесплатную пробную версию Microsoft Fabric.
Войдите в Microsoft Fabric.
Используйте переключатель интерфейса в левой нижней части домашней страницы, чтобы перейти на Fabric.
- Посетите Обработка и анализ данных интерфейс в Microsoft Fabric.
- Создание записной книжки для копирования и вставки кода в ячейки
- Для Spark 3.4 и более поздних версий семантическая ссылка доступна в среде выполнения по умолчанию при использовании Fabric и не требуется устанавливать ее. Если вы используете Spark 3.3 или ниже или хотите обновить до последней версии семантической ссылки, можно выполнить следующую команду:
python %pip install -U semantic-link
- Добавление Lakehouse в записную книжку
- Скачайте семантику sample.pbix в папке наборов данных репозитория примеров структуры и сохраните семантику модели локально.
Отправка семантической модели в рабочую область
В этой статье используется семантическая модель семантики sample.pbix customer Profitability Sample.pbix . Эта семантическая модель ссылается на маркетинговые материалы компании. Он содержит данные о продуктах, клиентах и соответствующих доходах для различных бизнес-единиц.
- Откройте рабочую область в Fabric Обработка и анализ данных
- Выберите "Отправить > обзор" и выберите модель семантики "Прибыльность клиента" sample.pbix .
После завершения отправки в рабочей области есть три новых артефакта: отчет Power BI, панель мониторинга и семантическая модель с именем "Прибыльность клиента". Действия, описанные в этой статье, основаны на этой семантической модели.
Использование Python для чтения данных из семантических моделей
API Python SemPy может извлекать данные и метаданные из семантических моделей, расположенных в рабочей области Microsoft Fabric. API также может выполнять запросы на них.
Записная книжка, семантическая модель набора данных 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 pandas приведет результирующий столбцы DataFrame к максимально возможному convert_dtypes dtype. Если этот параметр отключен, проблемы несовместимости типов между столбцами связанных таблиц могут привести; Модель 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.