Tutorial: Descobrir relações em um modelo semântico usando o link semântico
Este tutorial ilustra como interagir com o Power BI de um jupyter notebook e detectar relações entre tabelas com a ajuda da biblioteca SemPy.
Neste tutorial, você aprenderá a:
- Descubra relações em um modelo semântico (conjunto de dados do Power BI), usando a biblioteca Python do link semântico (semPy).
- Use componentes do SemPy que dão suporte à integração com o Power BI e ajudam a automatizar a análise de qualidade de dados. Esses componentes incluem:
- FabricDataFrame - uma estrutura semelhante a pandas aprimorada com informações semânticas adicionais.
- Funções para extrair modelos semânticos de um espaço de trabalho do Fabric para o seu caderno de anotações.
- Funções que automatizam a avaliação de hipóteses sobre dependências funcionais e que identificam violações de relações em seus modelos semânticos.
Pré-requisitos
Obtenha uma assinatura do Microsoft Fabric. Ou inscreva-se para uma avaliação gratuita do Microsoft Fabric.
Entre no Microsoft Fabric.
Use o botão de alternância de experiência no canto inferior esquerdo da página inicial para mudar para o Fabric.
Selecione Workspaces no painel de navegação esquerdo para localizar e selecionar seu workspace. Este espaço de trabalho torna-se o seu espaço de trabalho atual.
Baixe os modelos semânticos Customer Profitability Sample.pbix e Customer Profitability Sample (auto).pbix do repositório fabric-samples do GitHub e carregue-os em seu workspace.
Acompanhar no notebook
O notebook powerbi_relationships_tutorial.ipynb acompanha este tutorial.
Para abrir o bloco de anotações que acompanha este tutorial, siga as instruções em Preparar seu sistema para tutoriais de ciência de dados para importar o bloco de anotações para seu espaço de trabalho.
Se você prefere copiar e colar o código desta página, pode criar um notebook.
Certifique-se de anexar um lakehouse ao notebook antes de começar a executar o código.
Configurar o notebook
Nesta seção, você configurará um ambiente de notebook com os módulos e dados necessários.
Instale
SemPy
do PyPI usando o recurso de instalação%pip
em linha dentro do notebook:%pip install semantic-link
Execute as importações necessárias de módulos SemPy que você precisará mais tarde:
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 impor uma opção de configuração que ajuda na formatação de saída:
import pandas as pd pd.set_option('display.max_colwidth', None)
Explorar modelos semânticos
Este tutorial usa um modelo semântico de exemplo padrão Customer Profitability Sample.pbix. Para obter uma descrição do modelo semântico, consulte exemplo de Rentabilidade do Cliente para o Power BI.
Use a função
list_datasets
do SemPy para explorar modelos semânticos em seu workspace atual:fabric.list_datasets()
Para o restante deste notebook, você usará duas versões do modelo semântico Customer Profitability Sample:
- exemplo de rentabilidade do cliente: o modelo semântico, pois vem de exemplos do Power BI com relações de tabela predefinidas
- Exemplo de Rentabilidade do Cliente (automático): trata-se dos mesmos dados, mas as relações são limitadas somente às que o Power BI autodetectaria.
Extrair um modelo semântico de exemplo com o modelo semântico predefinido
Carregue as relações predefinidas e armazenadas no modelo semântico Customer Profitability Sample usando a função
list_relationships
do SemPy. Esta função lista o conteúdo do Modelo de Objeto Tabular:dataset = "Customer Profitability Sample" relationships = fabric.list_relationships(dataset) relationships
Visualize o DataFrame
relationships
como um grafo usando a funçãoplot_relationship_metadata
do SemPy:plot_relationship_metadata(relationships)
Este grafo mostra a "verdade básica" para as relações entre tabelas neste modelo semântico, pois reflete como elas foram definidas no Power BI por um especialista no assunto.
Descoberta de relações complementares
Se você começasse com os relacionamentos que o Power BI autodetectou, você teria um conjunto menor.
Visualize as relações detectadas automaticamente pelo Power BI no modelo semântico:
dataset = "Customer Profitability Sample (auto)" autodetected = fabric.list_relationships(dataset) plot_relationship_metadata(autodetected)
A detecção automática do Power BI perdeu muitas relações. Além disso, duas das relações detectadas automaticamente estão semanticamente incorretas:
Executive[ID]
->Industry[ID]
BU[Executive_id]
->Industry[ID]
Imprima as relações como uma tabela:
autodetected
As relações incorretas com a tabela
Industry
aparecem em linhas com o índice 3 e 4. Use essas informações para remover essas linhas.Descarte as relações identificadas incorretamente.
autodetected.drop(index=[3,4], inplace=True) autodetected
Agora você tem relações corretas, mas incompletas.
Visualize essas relações incompletas usando
plot_relationship_metadata
:plot_relationship_metadata(autodetected)
Carregue todas as tabelas do modelo semântico usando as funções
list_tables
eread_table
do SemPy:tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']} tables.keys()
Encontre relações entre tabelas, usando
find_relationships
e examine a saída de log para obter algumas informações sobre como essa função funciona:suggested_relationships_all = find_relationships( tables, name_similarity_threshold=0.7, coverage_threshold=0.7, verbose=2 )
Visualizar relações recém-descobertas:
plot_relationship_metadata(suggested_relationships_all)
SemPy foi capaz de detectar todas as relações.
Use o parâmetro
exclude
para limitar a pesquisa a relações adicionais que não foram identificadas anteriormente:additional_relationships = find_relationships( tables, exclude=autodetected, name_similarity_threshold=0.7, coverage_threshold=0.7 ) additional_relationships
Validar as relações
Primeiro, carregue os dados do 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()
Verifique se há sobreposição de valores de chave primária e estrangeira usando a função
list_relationship_violations
. Forneça a saída da funçãolist_relationships
como entrada paralist_relationship_violations
:list_relationship_violations(tables, fabric.list_relationships(dataset))
As violações das relações fornecem alguns insights interessantes. Por exemplo, um em cada sete valores no
Fact[Product Key]
não está presente noProduct[Product Key]
e essa chave ausente é50
.
A análise de dados exploratórios é um processo interessante, assim como a limpeza de dados. Há sempre algo que os dados estão ocultando, dependendo de como você olha para ele, o que você quer perguntar e assim por diante. O link semântico fornece novas ferramentas que você pode usar para obter mais com seus dados.
Conteúdo relacionado
Confira outros tutoriais para link semântico/SemPy:
- Tutorial: Limpar dados com dependências funcionais
- Tutorial: Analisar dependências funcionais em um modelo semântico de exemplo
- Tutorial: Extrair e calcular medidas do Power BI de um Jupyter Notebook
- Tutorial: descobrir relações no conjunto de dados do Synthea usando o link semântico
- Tutorial : validar dados usando SemPy e grandes expectativas (GX)