Compartir a través de


Leer desde modelos semánticos y escribir datos consumibles por Power BI usando Python

En este artículo, aprenderá a leer datos, metadatos y evaluar medidas en modelos semánticos mediante la biblioteca de Python de SemPy en Microsoft Fabric. También aprenderá a escribir datos que pueden ser consumidos por los modelos semánticos.

Requisitos previos

  • Vaya a la experiencia de ciencia de datos en Microsoft Fabric.
  • Cree un cuaderno para copiar y pegar código en celdas.
  • Para Spark 3.4 y versiones posteriores, el vínculo semántico está disponible en el entorno de ejecución predeterminado al usar Fabric y no es necesario instalarlo. Si usa Spark 3.3 o inferior, o si desea actualizar a la versión más reciente del vínculo semántico, puede ejecutar el comando: python %pip install -U semantic-link
  • Agregue un Lakehouse al cuaderno
  • Descargue el modelo semántico Customer Profitability Sample.pbix de la carpeta datasets del repositorio fabric-samples y guárdelo localmente.

Carga del modelo semántico en el área de trabajo

En este artículo, se usa el modelo semántico Customer Profitability Sample.pbix. El modelo semántico hace referencia a una empresa que fabrica materiales de marketing. Incluye datos de productos, clientes e ingresos para diferentes unidades de negocio.

  1. Abra su área de trabajo en Fabric Data Science.
  2. Seleccione Importar > informe, informe paginado o libro > desde este equipo, y seleccione el modelo semántico Customer Profitability Sample.pbix.

Captura de pantalla de la interfaz para cargar un modelo semántico en el área de trabajo.

Una vez completada la carga, el área de trabajo incluye tres artefactos nuevos: un informe de Power BI, un panel y un modelo semántico denominado Ejemplo de rentabilidad del cliente. Los pasos de este artículo se basan en este modelo semántico.

Captura de pantalla de los elementos del archivo de Power BI cargado en el área de trabajo.

Uso de Python para leer datos de modelos semánticos

La API de Python de SemPy puede recuperar datos y metadatos de modelos semánticos ubicados en un área de trabajo de Microsoft Fabric. La API también puede ejecutar consultas en ellas.

El cuaderno, el modelo semántico del conjunto de datos de Power BI y el Lakehouse se pueden ubicar en la misma área de trabajo o en áreas de trabajo diferentes. De forma predeterminada, SemPy intenta acceder al modelo semántico desde:

  • El área de trabajo del almacén de lago, si ha asociado un almacén de lago al cuaderno.
  • El área de trabajo del cuaderno, si no hay ningún almacén de lago asociado.

Si el modelo semántico no se encuentra en ninguna de estas áreas de trabajo, debe especificar el área de trabajo del modelo semántico al llamar a un método de SemPy.

Para leer datos de modelos semánticos, siga estos pasos:

  1. Enumere los modelos semánticos disponibles en el área de trabajo.

    import sempy.fabric as fabric
    
    df_datasets = fabric.list_datasets()
    df_datasets
    
  2. Enumere las tablas disponibles en el ejemplo de rentabilidad del cliente del modelo semántico.

    df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True)
    df_tables
    
  3. Enumere las medidas definidas en el ejemplo de rentabilidad del cliente del modelo semántico.

    Sugerencia

    En el código siguiente, hemos especificado el área de trabajo para que SemPy la use para acceder al modelo semántico. Puede reemplazar <Your Workspace> por el nombre del área de trabajo donde cargó el modelo semántico (desde la sección Cargar el modelo semántico en el área de trabajo).

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

    Ahora hemos determinado que la tabla Customer es la tabla objeto de interés.

  4. Lea la tabla Customer del ejemplo de rentabilidad del cliente del modelo semántico.

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

    Nota:

    • Los datos se recuperan mediante XMLA, lo que requiere que se habilite al menos XMLA de solo lectura .
    • La cantidad de datos recuperables está limitada por: : la memoria máxima por consulta de la SKU de capacidad que hospeda el modelo semántico. - El nodo del controlador de Spark (visite tamaños de nodo para obtener más información) que ejecuta el cuaderno.
    • Todas las solicitudes usan prioridad baja para minimizar el impacto en el rendimiento de Microsoft Azure Analysis Services y se facturan como solicitudes interactivas.
  5. Evalúe la medida de Ingresos Totales para el estado y la fecha de cada cliente.

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

    Nota:

    • De forma predeterminada, los datos no se recuperan mediante XMLA, por lo que no es necesario habilitar XMLA de solo lectura.
    • Los datos no están sujetos a limitaciones de back-end de Power BI.
    • La cantidad de datos recuperables está limitada por: : la memoria máxima por consulta de la SKU de capacidad que hospeda el modelo semántico. - El nodo del controlador de Spark (visite tamaños de nodo para obtener más información) que ejecuta el cuaderno.
    • Todas las solicitudes se facturan como solicitudes interactivas.
    • La evaluate_dax función no actualiza automáticamente el modelo semántico. Visite esta página para obtener más detalles.
  6. Para agregar filtros al cálculo de medida, especifique una lista de valores permitidos para una columna determinada.

    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. Evalúe la medida Ingresos totales por estado y fecha del cliente con una consulta DAX.

    df_dax = fabric.evaluate_dax(
        "Customer Profitability Sample",
        """
        EVALUATE SUMMARIZECOLUMNS(
            'State'[Region],
            'Calendar'[Date].[Year],
            'Calendar'[Date].[Month],
            "Total Revenue",
            CALCULATE([Total Revenue]))
        """)
    

    Nota:

    • Los datos se recuperan utilizando XMLA y, por lo tanto, requieren que al menos XMLA de solo lectura esté habilitado
    • La cantidad de datos recuperables está limitada por la memoria disponible en Microsoft Azure Analysis Services y el nodo del controlador de Spark (visite tamaños de nodo para obtener más información)
    • Todas las solicitudes utilizan una prioridad baja para minimizar el impacto en el rendimiento de Analysis Services y se facturan como solicitudes interactivas
  8. Use la %%dax magia de celda para evaluar la misma consulta DAX, sin necesidad de importar la biblioteca. Ejecute esta celda para cargar %%dax la magia de la celda:

    %load_ext sempy
    

    El parámetro del área de trabajo es opcional. Sigue las mismas reglas que el parámetro área de trabajo de la evaluate_dax función.

    La magia de celdas también admite el acceso a variables de Python mediante la sintaxis {variable_name}. Para usar una llave en la consulta DAX, utilice otra llave (por ejemplo, EVALUATE {{1}}) como carácter de escape.

    %%dax "Customer Profitability Sample" -w "<Your Workspace>"
    EVALUATE SUMMARIZECOLUMNS(
        'State'[Region],
        'Calendar'[Date].[Year],
        'Calendar'[Date].[Month],
        "Total Revenue",
        CALCULATE([Total Revenue]))
    

    FabricDataFrame resultante está disponible a través de la _ variable. Esa variable captura la salida de la última celda ejecutada.

    df_dax = _
    
    df_dax.head()
    
  9. Como alternativa, puede agregar medidas a los datos recuperados de orígenes externos. Este enfoque combina tres tareas:

    • Resuelve los nombres de columna en dimensiones de Power BI
    • Esto define el agrupamiento por columnas.
    • Filtra la medida. Cualquier nombre de columna que no pueda resolverse dentro del modelo semántico dado será ignorado (visite el recurso de sintaxis DAX compatible para obtener más información).
    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
    

Parámetros especiales

Los métodos read_table y evaluate_measure de SemPy tienen más parámetros que son útiles para manipular la salida. Estos parámetros son:

  • pandas_convert_dtypes: si se establece en True, pandas convierte las columnas del DataFrame resultante en el mejor dtype posible. Obtenga más información en convert_dtypes. Si este parámetro está desactivado, es posible que se produzcan problemas de incompatibilidad entre columnas de tablas relacionadas. Es posible que el modelo de Power BI no detecte estos problemas debido a la conversión implícita de tipos DAX.

SemPy read_table también usa la información del modelo que proporciona Power BI.

Escritura de datos consumibles por modelos semánticos

Las tablas de Spark agregadas a una arquitectura de datos Lakehouse se agregan automáticamente al modelo semántico predeterminado correspondiente. En este artículo se muestra cómo escribir datos en la instancia adjunta de Lakehouse. FabricDataFrame acepta los mismos datos de entrada que los dataframes de Pandas.

from sempy.fabric import FabricDataFrame

df_forecast = FabricDataFrame({'ForecastedRevenue': [1, 2, 3]})

df_forecast.to_lakehouse_table("ForecastTable")

Con Power BI, la tabla ForecastTable se puede agregar a un modelo semántico compuesto que incluye el modelo semántico de Lakehouse.