Поделиться через


Чтение из семантических моделей и запись данных, потребляемых Power BI с помощью Python

В этой статье вы узнаете, как считывать данные и метаданные и оценивать меры в семантических моделях с помощью библиотеки Python SemPy в Microsoft Fabric. Вы также узнаете, как записывать данные, которые могут использовать семантические модели.

Необходимые компоненты

  • Получение подписки Microsoft Fabric. Или зарегистрируйте бесплатную пробную версию Microsoft Fabric.

  • Войдите в Microsoft Fabric.

  • Используйте переключатель интерфейса в левой части домашней страницы, чтобы перейти на интерфейс Synapse Обработка и анализ данных.

    Снимок экрана: меню переключателя интерфейса, в котором показано, где выбрать Обработка и анализ данных.

Отправка семантической модели в рабочую область

В этой статье мы используем семантическую модель семантики PBIX для клиентов. Эта семантическая модель ссылается на маркетинговые материалы компании и содержит данные о продуктах, клиентах и соответствующих доходах для различных бизнес-единиц.

  1. Откройте рабочую область в Обработка и анализ данных Fabric.
  2. Выберите "Отправить > обзор" и выберите модель семантики sample.pbix .

Снимок экрана: интерфейс для отправки семантической модели в рабочую область.

После отправки рабочая область будет иметь три новых артефакта: отчет Power BI, панель мониторинга и семантическая модель с именем "Прибыльность клиента". Эта семантическая модель будет использоваться для действий, описанных в этой статье.

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

Использование Python для чтения данных из семантических моделей

API Python SemPy может извлекать данные и метаданные из семантических моделей, расположенных в рабочей области Microsoft Fabric, и выполнять запросы на них.

Записная книжка, семантическая модель набора данных Power BI и Lakehouse могут находиться в одной рабочей области или в разных рабочих областях. По умолчанию SemPy пытается получить доступ к семантической модели из:

  • Рабочая область lakehouse, если вы прикрепили lakehouse к записной книжке.
  • Рабочая область записной книжки, если не подключена к Lakehouse.

Если семантическая модель не находится в любой из этих рабочих областей, необходимо указать рабочую область семантической модели при вызове метода SemPy.

Для чтения данных из семантических моделей:

  1. Список доступных семантических моделей в рабочей области.

    import sempy.fabric as fabric
    
    df_datasets = fabric.list_datasets()
    df_datasets
    
  2. Список таблиц, доступных в модели семантики семантики рентабельности клиента.

    df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True)
    df_tables
    
  3. Перечислить меры, определенные в модели семантики рентабельности клиента.

    Совет

    В следующем коде мы указали рабочую область для SemPy, используемую для доступа к семантической модели. Вы можете заменить Your Workspace имя рабочей области, в которой вы отправили семантику (из раздела "Отправка семантической модели" в раздел рабочей области ).

    df_measures = fabric.list_measures("Customer Profitability Sample", workspace="Your Workspace")
    df_measures
    

    Теперь мы определили, что таблица Customer является таблицей интересов.

  4. Считывает таблицу Customer из семантической модели семантики рентабельности клиента.

    df_table = fabric.read_table("Customer Profitability Sample", "Customer")
    df_table
    

    Примечание.

    • Данные извлекаются с помощью XMLA и поэтому требует включения только для чтения XMLA.
    • Объем данных, которые можно получить, ограничен максимальным объемом памяти для каждого запроса SKU емкости, в котором размещена семантическая модель, и узлом драйвера Spark (см . размеры узлов), на котором выполняется записная книжка.
    • Все запросы используют низкий приоритет для минимизации влияния на производительность служб Microsoft Azure Analysis Services и выставляются в виде интерактивных запросов.
  5. Оцените общую меру дохода на состояние и дату клиента.

    df_measure = fabric.evaluate_measure(
        "Customer Profitability Sample",
        "Total Revenue",
        ["'Customer'[State]", "Calendar[Date]"])
    df_measure
    

    Примечание.

    • По умолчанию данные не извлекаются с помощью XMLA и поэтому не требуют включения только для чтения XMLA.
    • Кроме того, данные не подлежат ограничениям серверной части Power BI.
    • Объем данных, которые можно получить, ограничен максимальным объемом памяти для каждого запроса SKU емкости, в котором размещена семантическая модель, и узлом драйвера Spark (см . размеры узлов), на котором выполняется записная книжка.
    • Все запросы выставляются как интерактивные запросы.
  6. Фильтры можно добавить в вычисление меры, указав список значений, которые могут находиться в определенном столбце.

    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
    
  7. Вы также можете оценить общую меру дохода на состояние и дату клиента с помощью запроса 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 и выставляются в виде интерактивных запросов.
  8. Вы можете оценить один и тот же запрос 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()
    
  9. Кроме того, можно добавить меры к данным, полученным из внешних источников. Этот подход объединяет три задачи: он разрешает имена столбцов в измерения 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.