Compartir vía


Detección de relaciones en un modelo semántico mediante el vínculo semántico

En este tutorial se muestra cómo usar un cuaderno de Jupyter Notebook para interactuar con Power BI y detectar relaciones entre tablas con la biblioteca SemPy.

En este tutorial, aprenderá a:

  • Detectar relaciones en un modelo semántico (conjunto de datos de Power BI) mediante la biblioteca de Python del vínculo semántico (SemPy).
  • Use componentes de SemPy que se integren con Power BI y automaticen el análisis de calidad de los datos. Estos componentes incluyen:
    • FabricDataFrame - una estructura similar a Pandas mejorada con información semántica
    • Funciones que extraen modelos semánticos de un área de trabajo de Fabric en el cuaderno
    • Funciones que prueban dependencias funcionales e identifican infracciones de relación en los modelos semánticos

Prerrequisitos

  • Vaya a Áreas de trabajo en el panel de navegación y, a continuación, seleccione el área de trabajo para establecerla como área de trabajo actual.

  • Descargue el ejemplo de rentabilidad del cliente.pbix y el ejemplo de rentabilidad del cliente (auto).pbix modelos semánticos del repositorio de GitHub fabric-samples y, a continuación, cárguelos en el área de trabajo.

Seguimiento en el cuaderno

Use el cuaderno powerbi_relationships_tutorial.ipynb para continuar.

Configuración del cuaderno

Configure un entorno de cuaderno con los módulos y los datos que necesita.

  1. Instale el semantic-link paquete desde PyPI mediante el %pip comando insertado en el cuaderno.

    %pip install semantic-link
    
  2. Importe los sempy módulos que usará más adelante.

    import sempy.fabric as fabric
    
    from sempy.relationships import plot_relationship_metadata
    from sempy.relationships import find_relationships
    from sempy.fabric import list_relationship_violations
    
  3. Importe la pandas biblioteca y establezca una opción de visualización para el formato de salida.

    import pandas as pd
    pd.set_option('display.max_colwidth', None)
    

## Explore semantic models

This tutorial uses the Customer Profitability Sample semantic model [_Customer Profitability Sample.pbix_](https://github.com/microsoft/fabric-samples/blob/main/docs-samples/data-science/datasets/Customer%20Profitability%20Sample.pbix). Learn about the semantic model in [Customer Profitability sample for Power BI](/power-bi/create-reports/sample-customer-profitability).

- Use SemPy's `list_datasets` function to explore semantic models in your current workspace:

  ```python
  fabric.list_datasets()

Para el resto de este cuaderno, use dos versiones del modelo semántico de ejemplo de rentabilidad del cliente:

  • Ejemplo de rentabilidad del cliente: el modelo semántico tal como se proporciona en los ejemplos de Power BI, con relaciones de tabla predefinidas
  • Ejemplo de rentabilidad del cliente (automático): los mismos datos, pero las relaciones se limitan a las que Detecta automáticamente Power BI.

Extracción de relaciones predefinidas del modelo semántico de ejemplo

  1. Cargue las relaciones predefinidas en el modelo semántico de ejemplo de rentabilidad del cliente mediante la función de list_relationships SemPy. La función enumera las relaciones del modelo de objetos tabulares (TOM).

    dataset = "Customer Profitability Sample"
    relationships = fabric.list_relationships(dataset)
    relationships
    
  2. Visualice el relationships DataFrame como un grafo mediante la función de plot_relationship_metadata SemPy.

    plot_relationship_metadata(relationships)
    

    Captura de pantalla del gráfico de relaciones entre tablas del modelo semántico.

    En este gráfico se muestran las relaciones entre las tablas de este modelo semántico, tal como se define en Power BI por un experto en la materia.

Detección de relaciones adicionales

Si comienza con las relaciones que detecta automáticamente Power BI, tiene un conjunto más pequeño.

  1. Visualice las relaciones que Power BI detectó automáticamente en el modelo semántico:

    dataset = "Customer Profitability Sample (auto)"
    autodetected = fabric.list_relationships(dataset)
    plot_relationship_metadata(autodetected)
    

    Captura de pantalla de las relaciones que Power BI detectó automáticamente en el modelo semántico.

    La detección automática de Power BI pierde muchas relaciones. Además, dos de las relaciones detectadas automáticamente son semánticamente incorrectas:

    • Executive[ID] ->Industry[ID]
    • BU[Executive_id] ->Industry[ID]
  2. Imprima las relaciones como una tabla:

    autodetected
    

    Las filas 3 y 4 muestran relaciones incorrectas con la Industry tabla. Quite estas filas.

  3. Descarte las relaciones identificadas incorrectamente.

    # Remove rows 3 and 4 which point incorrectly to Industry[ID]
    autodetected = autodetected[~autodetected.index.isin([3, 4])]
    

    Ahora tiene relaciones correctas pero incompletas. Visualice estas relaciones incompletas mediante plot_relationship_metadata:

    plot_relationship_metadata(autodetected)
    

    Captura de pantalla de una visualización de las relaciones después de quitar las incorrectas.

  4. Cargue todas las tablas del modelo semántico, mediante las funciones y list_tables de read_table SemPy y, a continuación, busque relaciones entre tablas mediante find_relationships. Revise la salida del registro para obtener información sobre cómo funciona esta función:

    suggested_relationships_all = find_relationships(
        tables,
        name_similarity_threshold=0.7,
        coverage_threshold=0.7,
        verbose=2
    )
    
  5. Visualizar las relaciones recién detectadas:

    plot_relationship_metadata(suggested_relationships_all)
    

    Captura de pantalla de una visualización de las relaciones recién detectadas.

    SemPy detecta todas las relaciones.

  6. Use el parámetro exclude para limitar la búsqueda a relaciones adicionales que no se han identificado anteriormente:

    additional_relationships = find_relationships(
        tables,
        exclude=autodetected,
        name_similarity_threshold=0.7,
        coverage_threshold=0.7
    )
    
    additional_relationships
    

Validar relaciones

  1. En primer lugar, cargue los datos del modelo semántico de ejemplo de rentabilidad del cliente .

    dataset = "Customer Profitability Sample"
    tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']}
    
    tables.keys()
    
  2. Compruebe que la clave principal y externa se superpongan con la list_relationship_violations función . Pase la salida de la list_relationships función a list_relationship_violations.

    list_relationship_violations(tables, fabric.list_relationships(dataset))
    

    Los resultados revelan información útil. Por ejemplo, uno de los siete valores de no Fact[Product Key] está presente en Product[Product Key]y la clave que falta es 50.

    El análisis exploratorio de datos y la limpieza de datos son iterativos. Lo que aprende depende de sus preguntas y de cómo explore los datos. El vínculo semántico agrega herramientas que le ayudan a hacer más con los datos.

Explore otros tutoriales para el vínculo semántico y SemPy:

\n\n