Compartir vía


Lectura de modelos semánticos y escritura de datos consumibles por Power BI con python

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

Requisitos previos

  • Vaya a la experiencia de Ciencia de datos en Microsoft Fabric.
  • Cree un nuevo cuaderno, para copiar/pegar código en las 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 una instancia de Lakehouse al cuaderno
  • Descargue el modelo semántico Customer Profitability Sample.pbix desde la carpeta datasets del repositorio fabric-samples, y guarde el modelo semántico 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. Este modelo semántico hace referencia a materiales de marketing de la empresa. Contiene datos de productos, clientes y ingresos correspondientes para varias unidades de negocio.

  1. Abra el área de trabajo de Ciencia de datos de Fabric
  2. Seleccione Cargar > Examinar y seleccione el modelo semántico Customer Profitability Sample.pbix.

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

Una vez finalizada la carga, el área de trabajo tiene 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 ese modelo semántico.

Captura de pantalla que muestra los elementos del archivo de Power BI cargados 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 de conjunto de datos de Power BI y el almacén de lago 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:

  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. Esto 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 ejecute el cuaderno
    • Todas las solicitudes utilizan una 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 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 utilizando XMLA y, por lo tanto, no es necesario activar XMLA de solo lectura.
    • Además, los datos no están sujetos a las limitaciones del backend 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
  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. También puede evaluar la medida Ingresos totales por estado y fecha del cliente mediante 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 instrucción mágica de celdas también admite el acceso de variables de Python con la {variable_name} sintaxis. 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
    • Define agrupar por columnas
    • Filtra la medida Any column names that can't be resolved within the given semantic model are ignored (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:

  • fully_qualified_columns: para un valor "True", los métodos devuelven nombres de columna en el formulario TableName[ColumnName]
  • num_rows: número total de filas que figura en el resultado
  • pandas_convert_dtypes: para un valor "True", pandas convierte las columnas DataFrame resultantes en el mejor dtypeconvert_dtypes posible. Si este parámetro está desactivado, pueden producirse problemas de incompatibilidad entre columnas de tablas relacionadas; Es posible que el modelo de Power BI no detecte esos 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 un almacén de lago se agregan automáticamente al modelo semántico predeterminado correspondiente. En este ejemplo se muestra cómo escribir datos en el almacén de lago asociado. 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")

Mediante Power BI, la tabla ForecastTable se puede agregar a un modelo semántico compuesto mediante el modelo semántico del almacén de lago.