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
Obtenga una suscripción a Microsoft Fabric. También puede registrarse para obtener una evaluación gratuita de Microsoft Fabric.
Inicie sesión en Microsoft Fabric.
Cambie a la experiencia de ciencia de datos de Synapse mediante el conmutador de experiencia en el lado izquierdo de la página principal.
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.
Instale
SemPy
desde PyPI mediante la funcionalidad de instalación en línea%pip
en el cuaderno:%pip install semantic-link
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
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
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
Visualice el
relationships
DataFrame como un gráfico, usando la funciónplot_relationship_metadata
de SemPy:plot_relationship_metadata(relationships)
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.
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)
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]
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.Descarte las relaciones identificadas incorrectamente.
autodetected.drop(index=[3,4], inplace=True) autodetected
Ahora tiene relaciones correctas, pero incompletas.
Visualice estas relaciones incompletas mediante
plot_relationship_metadata
:plot_relationship_metadata(autodetected)
Cargue todas las tablas del modelo semántico mediante las funciones
list_tables
yread_table
de SemPy:tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']} tables.keys()
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 )
Visualizar las relaciones recién detectadas:
plot_relationship_metadata(suggested_relationships_all)
SemPy pudo detectar todas las relaciones.
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
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()
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ónlist_relationships
como entrada alist_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 enProduct[Product Key]
y esta clave que falta es50
.
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.
Contenido relacionado
Consulte otros tutoriales para el vínculo semántico/SemPy:
- Tutorial: Limpieza de datos con dependencias funcionales
- Tutorial: Análisis de dependencias funcionales en un modelo semántico de ejemplo
- Tutorial: Extracción y cálculo de medidas de Power BI de un cuaderno de Jupyter
- Tutorial: Detección de relaciones en el conjunto de datos de Synthea con el vínculo semántico
- Tutorial: Validación de datos mediante SemPy y Grandes Expectativas (GX) (versión preliminar)