Compartilhar via


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

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

Configurar o notebook

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

  1. Instale SemPy do PyPI usando o recurso de instalação %pip em linha dentro do 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 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

  1. 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
    
  2. Visualize o DataFrame relationships como um grafo 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 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.

  1. 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)
    

    Captura de tela mostrando as relações detectadas automaticamente pelo Power BI no modelo semântico.

    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]
  2. 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.

  3. Descarte as relações identificadas incorretamente.

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

    Agora você tem relações corretas, mas incompletas.

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

    plot_relationship_metadata(autodetected)
    

    Captura de tela que mostra uma visualização de relações depois de remover as incorretas.

  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 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
    )
    
  7. Visualizar relações recém-descobertas:

    plot_relationship_metadata(suggested_relationships_all)
    

    Captura de tela que mostra a visualização de relações recém-descobertas.

    SemPy foi capaz de detectar todas as relações.

  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. Forneça 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 das relações fornecem alguns insights interessantes. Por exemplo, um em cada sete valores no Fact[Product Key] não está presente no Product[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.

Confira outros tutoriais para link semântico/SemPy: