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

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

En este tutorial, aprenderá a:

  • Detección de relaciones en un modelo semántico (conjunto de datos de Power BI) mediante la biblioteca de Python de vínculo semántico (SemPy).
  • Use componentes de SemPy que admitan la integración con Power BI y ayuden a automatizar el análisis de calidad de los datos. Estos componentes incluyen:
    • FabricDataFrame: una estructura similar a Pandas mejorada con información semántica adicional.
    • Funciones para extraer modelos semánticos de un área de trabajo de Fabric en el cuaderno.
    • Funciones que automatizan la evaluación de hipótesis sobre dependencias funcionales y que identifican infracciones de relaciones en los modelos semánticos.

Requisitos previos

  • Seleccione Áreas de trabajo en el panel de navegación izquierdo para buscar y seleccionar el área de trabajo. Esta área de trabajo se convertirá en el área de trabajo actual.

  • Descargue los modelos semánticos Customer Profitability Sample.pbix y Customer Profitability Sample (auto).pbix del repositorio fabric-samples GitHub y cárguelos en su área de trabajo.

Seguimiento en el cuaderno

El cuaderno powerbi_relationships_tutorial.ipynb acompaña a este tutorial.

Para abrir el cuaderno complementario para este tutorial, siga las instrucciones en Preparación del sistema para los tutoriales de ciencia de datos para importar el cuaderno en el área de trabajo.

Si prefiere copiar y pegar el código de esta página, puede crear un cuaderno nuevo.

Asegúrese de adjuntar una instancia de LakeHouse al cuaderno antes de empezar a ejecutar código.

Configuración del cuaderno

En esta sección, configurará un entorno de cuaderno con los módulos y los datos necesarios.

  1. Instale SemPy desde PyPI mediante la funcionalidad de instalación en línea %pip en el cuaderno:

    %pip install semantic-link
    
  2. Realice las importaciones necesarias de módulos SemPy que necesitará 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 Pandas para aplicar una opción de configuración que ayude con el formato de salida:

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

Exploración de los modelos semánticos

En este tutorial se usa un modelo semántico de ejemplo estándar Customer Profitability Sample.pbix. Para obtener una descripción del modelo semántico, consulte Ejemplo de rentabilidad del cliente para Power BI.

  • Use la función list_datasets de SemPy para explorar modelos semánticos en su área de trabajo actual:

    fabric.list_datasets()
    

En el resto de este cuaderno se usan dos versiones del modelo semántico de Customer Profitability Sample:

  • Customer Profitability Sample: el modelo semántico tal y como se obtiene de las muestras de Power BI con relaciones de tablas predefinidas
  • Customer Profitability Sample (auto): los mismos datos, pero las relaciones se limitan a las que Power BI detectaría automáticamente.

Extracción de un modelo semántico de ejemplo con su modelo semántico predefinido

  1. Cargue las relaciones predefinidas y almacenadas dentro del modelo semántico Customer Profitability Sample, usando la función list_relationships de SemPy. Esta función se muestra en el modelo de objetos tabulares:

    dataset = "Customer Profitability Sample"
    relationships = fabric.list_relationships(dataset)
    relationships
    
  2. Visualice el relationships DataFrame como un gráfico, usando la función plot_relationship_metadata de SemPy:

    plot_relationship_metadata(relationships)
    

    Captura de pantalla en la que se muestra un trazado de las relaciones entre tablas en el modelo semántico.

En este gráfico se muestra la "verdad básica" de las relaciones entre tablas de este modelo semántico, ya que refleja cómo se definieron en Power BI por un experto en la materia.

Complementar la detección de relaciones

Si comenzó con relaciones que Power BI detectó automáticamente, tendría 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 en la que se muestran las relaciones que Power BI detectó automáticamente en el modelo semántico.

    La detección automática de Power BI pasó por alto 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
    

    En las filas con índice 3 y 4 aparecen relaciones incorrectas con la tabla Industry. Use esta información para quitar estas filas.

  3. Descarte las relaciones identificadas incorrectamente.

    autodetected.drop(index=[3,4], inplace=True)
    autodetected
    

    Ahora tiene relaciones correctas, pero incompletas.

  4. Visualice estas relaciones incompletas mediante plot_relationship_metadata:

    plot_relationship_metadata(autodetected)
    

    Captura de pantalla en la que se muestra una visualización de las relaciones después de eliminar las incorrectas.

  5. Cargue todas las tablas del modelo semántico mediante las funciones list_tables y read_table de SemPy:

    tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']}
    
    tables.keys()
    
  6. Encuentre las relaciones entre las tablas, usando find_relationships, y revise la salida del registro para hacerse una idea de cómo funciona esta función:

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

    plot_relationship_metadata(suggested_relationships_all)
    

    Captura de pantalla en la que se muestra la visualización de las relaciones recién detectadas.

    SemPy pudo detectar todas las relaciones.

  8. 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 las relaciones

  1. En primer lugar, cargue los datos del modelo semántico Customer Profitability Sample:

    dataset = "Customer Profitability Sample"
    tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']}
    
    tables.keys()
    
  2. Compruebe si hay superposición de valores de clave principal y externa mediante la función list_relationship_violations. Proporcione la salida de la función list_relationships como entrada a list_relationship_violations:

    list_relationship_violations(tables, fabric.list_relationships(dataset))
    

    Las infracciones de relación proporcionan información interesante. Por ejemplo, uno de los siete valores de Fact[Product Key] no está presente en Product[Product Key] y esta clave que falta es 50.

El análisis exploratorio de datos es un proceso apasionante, al igual que la limpieza de datos. Siempre hay algo que los datos ocultan, dependiendo de cómo se miren, de lo que se quiera preguntar, etc. El vínculo semántico proporciona nuevas herramientas que puede usar para lograr más con los datos.

Consulte otros tutoriales para el vínculo semántico/SemPy: