Partilhar via


Tutorial: Descobrir relações em um modelo semântico, usando link semântico

Este tutorial ilustra como interagir com o Power BI a partir de um bloco de anotações Jupyter e detetar 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 oferecem 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.
    • 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 obter uma avaliação gratuita do Microsoft Fabric.

  • Entre na Microsoft Fabric.

  • Use o seletor de experiência no lado esquerdo da sua página inicial para alternar para a experiência Synapse Data Science.

    Captura de tela do menu do seletor de experiências, mostrando onde selecionar Ciência de Dados.

  • Selecione Workspaces no painel de navegação esquerdo para localizar e selecionar seu espaço de trabalho. Este espaço de trabalho torna-se o seu espaço de trabalho atual.

  • Baixe o Customer Profitability Sample.pbix e Customer Profitability Sample (auto).pbix modelos semânticos do repositório GitHub de amostras de malha e carregue-os para seu espaço de trabalho.

Acompanhe no caderno

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 preferir copiar e colar o código desta página, pode criar um novo bloco de notas.

Certifique-se de anexar um lakehouse ao bloco de notas antes de começar a executar o código.

Configurar o portátil

Nesta seção, você configura um ambiente de notebook com os módulos e dados necessários.

  1. Instale SemPy do PyPI usando a capacidade de instalação em linha %pip no notebook:

    %pip install semantic-link
    
  2. 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
    
  3. Importe pandas para impor uma opção de configuração que ajude na formatação de saída:

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

Explora 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 espaço de trabalho atual:

    fabric.list_datasets()
    

Para o restante deste bloco de anotações, você usa duas versões do modelo semântico Customer Profitability Sample:

  • Exemplo de rentabilidade do cliente: o modelo semântico que vem de exemplos do Power BI com relações de tabela predefinidas
  • Exemplo de Rentabilidade do Cliente (auto): os mesmos dados, mas as relações são limitadas àqueles que o Power BI detetaria automaticamente.

Extraia um modelo semântico de exemplo com o seu modelo semântico predefinido

  1. Carregue relacionamentos que são predefinidos e armazenados dentro do modelo semântico Customer Profitability Sample, usando a função do SemPy list_relationships. Esta função lista a partir do modelo de objeto tabular:

    dataset = "Customer Profitability Sample"
    relationships = fabric.list_relationships(dataset)
    relationships
    
  2. Visualize o relationships DataFrame como um gráfico, usando a função plot_relationship_metadata do SemPy:

    plot_relationship_metadata(relationships)
    

    Captura de tela mostrando um gráfico das relações entre tabelas no modelo semântico.

Este gráfico 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 relacionamentos complementares

Se você começasse com relacionamentos que o Power BI detetasse automaticamente, teria um conjunto menor.

  1. Visualize as relações que o Power BI detetou automaticamente no modelo semântico:

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

    Captura de ecrã a mostrar as relações que o Power BI detetou automaticamente no modelo semântico.

    A deteção automática do Power BI não conseguiu identificar muitos relacionamentos. Além disso, duas das relações detetadas automaticamente são semanticamente incorretas:

    • Executive[ID] ->Industry[ID]
    • BU[Executive_id] ->Industry[ID]
  2. Imprima as relações como uma tabela:

    autodetected
    

    Relações incorretas com a tabela Industry aparecem em linhas com índice 3 e 4. Use essas informações para remover essas linhas.

  3. Descarte as relações identificadas incorretamente.

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

    Agora você tem relacionamentos corretos, mas incompletos.

  4. Visualize essas relações incompletas, usando plot_relationship_metadata:

    plot_relationship_metadata(autodetected)
    

    Captura de tela que mostra uma visualização de relacionamentos depois de remover os incorretos.

  5. Carregue todas as tabelas do modelo semântico, usando as funções list_tables e read_table do SemPy:

    tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']}
    
    tables.keys()
    
  6. Encontre relações entre tabelas, usando find_relationshipse revise 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
    )
    
  7. Visualize relacionamentos recém-descobertos:

    plot_relationship_metadata(suggested_relationships_all)
    

    Captura de tela que mostra a visualização de relacionamentos recém-descobertos.

    SemPy foi capaz de detetar todos os relacionamentos.

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

  1. 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()
    
  2. Verifique se há sobreposição de valores de chave primária e estrangeira usando a função list_relationship_violations. Fornecer a saída da função list_relationships como entrada para list_relationship_violations:

    list_relationship_violations(tables, fabric.list_relationships(dataset))
    

    As violações de relacionamento fornecem alguns insights interessantes. Por exemplo, um em cada sete valores em Fact[Product Key] não está presente em Product[Product Key], e essa chave ausente é 50.

A análise exploratória de dados é um processo empolgante, assim como a limpeza de dados. Há sempre algo que os dados estão escondendo, dependendo de como você olha para eles, 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.

Confira outros tutoriais para link semântico / SemPy: