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:

  • 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 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.

Prerrequisitos

  • Seleccione Áreas de trabajo en el panel de navegación izquierdo para buscar y seleccionar el área de trabajo. Este área de trabajo se convierte en tu á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.

Configuración del cuaderno

En esta sección, configurará un entorno de cuaderno con los módulos y 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 los 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 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 el á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:

  • ejemplo de rentabilidad del cliente: el modelo semántico tal como procede de 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 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 del Ejemplo de Rentabilidad del Cliente , usando la función de SemPy list_relationships. 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 gráfico mediante la función plot_relationship_metadata de SemPy:

    plot_relationship_metadata(relationships)
    

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

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

Descubrimiento de relaciones complementarias

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 que muestra 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
    

    Las relaciones incorrectas con la tabla Industry aparecen en filas con el índice 3 y 4. 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 que muestra una visualización de las relaciones después de quitar 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. Busque relaciones entre tablas, use find_relationshipsy 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
    )
    
  7. Visualizar las relaciones recién detectadas:

    plot_relationship_metadata(suggested_relationships_all)
    

    Captura de pantalla que 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 para list_relationship_violations:

    list_relationship_violations(tables, fabric.list_relationships(dataset))
    

    Las violaciones en las relaciones 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 de datos exploratorios es un proceso emocionante, y lo mismo ocurre con la limpieza de datos. Siempre hay algo que los datos ocultan, dependiendo de cómo lo mires, de lo que quieras 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: