Condividi tramite


Esercitazione: Individuare le relazioni in un modello semantico usando il collegamento semantico

Questa esercitazione illustra come interagire con Power BI da un Jupyter Notebook e rilevare le relazioni tra tabelle con l'aiuto della libreria SemPy.

In questa esercitazione apprenderai a:

  • Individuare le relazioni in un modello semantico (set di dati di Power BI), usando la libreria Python (SemPy) del collegamento semantico.
  • Usare i componenti di SemPy che supportano l'integrazione con Power BI e consentono di automatizzare l'analisi della qualità dei dati. Questi componenti includono:
    • FabricDataFrame: una struttura simile a pandas migliorata con informazioni semantiche aggiuntive.
    • Funzioni per il pull di modelli semantici da un'area di lavoro Fabric nel tuo notebook.
    • Funzioni che automatizzano la valutazione delle ipotesi sulle dipendenze funzionali e che identificano le violazioni delle relazioni nei modelli semantici.

Prerequisiti

  • Selezionare Aree di lavoro nel riquadro di spostamento sinistro per trovare e selezionare l'area di lavoro. Questa area di lavoro diventa l'area di lavoro corrente.

  • Scaricare i modelli semantici Customer Profitability Sample.pbix e Customer Profitability Sample (auto).pbix dal repository di modelli fabric GitHub e caricarli nell'area di lavoro.

Seguire la procedura nel notebook

Il notebook powerbi_relationships_tutorial.ipynb accompagna questa esercitazione.

Configurare il notebook

In questa sezione viene configurato un ambiente notebook con i moduli e i dati necessari.

  1. Installare SemPy da PyPI usando la funzionalità di installazione in linea %pip all'interno del notebook:

    %pip install semantic-link
    
  2. Eseguire le importazioni necessarie dei moduli di SemPy che serviranno in un secondo momento:

    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. Importare i pandas per applicare un'opzione di configurazione utile per la formattazione dell'output:

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

Esplorare i modelli semantici

Questa esercitazione usa un modello semantico di esempio standard Customer Profitability Sample.pbix. Per una descrizione del modello semantico, vedere Esempio di redditività dei clienti per Power BI.

  • Usare la funzione list_datasets di SemPy per esplorare i modelli semantici nell'area di lavoro corrente:

    fabric.list_datasets()
    

Per il resto di questo notebook si usano due versioni del modello semantico Customer Profitability Sample:

  • Customer Profitability Sample: modello semantico ottenuto da esempi di Power BI con relazioni di tabella predefinite
  • Customer Profitability Sample (auto): gli stessi dati, ma le relazioni sono limitate a quelle che Power BI avrebbe individuato automaticamente.

Estrarre un modello semantico di esempio con il modello semantico predefinito

  1. Caricare le relazioni predefinite e archiviate all'interno del modello semantico Customer Profitability Sample , usando la funzione list_relationships di SemPy. Questa funzione elenca dal modello a oggetti tabulare:

    dataset = "Customer Profitability Sample"
    relationships = fabric.list_relationships(dataset)
    relationships
    
  2. Visualizzare il relationships DataFrame come grafico usando la funzione plot_relationship_metadata di SemPy:

    plot_relationship_metadata(relationships)
    

    Screenshot di un tracciato delle relazioni tra tabelle nel modello semantico.

Questo grafico mostra la "verità di base" per le relazioni tra tabelle in questo modello semantico, come riflette il modo in cui sono state definite in Power BI da un esperto di dominio.

Integrare l'individuazione delle relazioni

Se si è iniziato con le relazioni rilevate automaticamente da Power BI, si avrà un set più piccolo.

  1. Visualizzare le relazioni rilevate automaticamente da Power BI nel modello semantico:

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

    Screenshot che mostra le relazioni rilevate automaticamente da Power BI nel modello semantico.

    L'autodetezione di Power BI ha perso molte relazioni. Inoltre, due delle relazioni rilevate automaticamente non sono semanticamente corrette:

    • Executive[ID] ->Industry[ID]
    • BU[Executive_id] ->Industry[ID]
  2. Stampare le relazioni come tabella:

    autodetected
    

    Le relazioni non corrette per la tabella Industry vengono visualizzate nelle righe con indice 3 e 4. Usare queste informazioni per rimuovere queste righe.

  3. Eliminare le relazioni identificate in modo non corretto.

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

    Ora si dispone di relazioni corrette, ma incomplete.

  4. Visualizzare queste relazioni incomplete usando plot_relationship_metadata:

    plot_relationship_metadata(autodetected)
    

    Screenshot che mostra una visualizzazione delle relazioni dopo la rimozione di quelle non corrette.

  5. Caricare tutte le tabelle dal modello semantico usando le funzioni list_tables e read_table di SemPy:

    tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']}
    
    tables.keys()
    
  6. Trovare relazioni tra tabelle, usando find_relationships ed esaminare l'output del log per ottenere informazioni dettagliate sul funzionamento di questa funzione:

    suggested_relationships_all = find_relationships(
        tables,
        name_similarity_threshold=0.7,
        coverage_threshold=0.7,
        verbose=2
    )
    
  7. Visualizzare le relazioni appena individuate:

    plot_relationship_metadata(suggested_relationships_all)
    

    Screenshot che mostra la visualizzazione delle relazioni appena individuate.

    SemPy è stato in grado di rilevare tutte le relazioni.

  8. Usare il parametro exclude per limitare la ricerca alle relazioni aggiuntive non identificate in precedenza:

    additional_relationships = find_relationships(
        tables,
        exclude=autodetected,
        name_similarity_threshold=0.7,
        coverage_threshold=0.7
    )
    
    additional_relationships
    

Convalidare le relazioni

  1. Prima di tutto, caricare i dati dal modello semantico 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. Verificare la sovrapposizione dei valori di chiave primaria ed esterna usando la funzione list_relationship_violations. Fornire l'output della funzione list_relationships come input a list_relationship_violations:

    list_relationship_violations(tables, fabric.list_relationships(dataset))
    

    Le violazioni delle relazioni forniscono alcune informazioni interessanti. Ad esempio, uno su sette valori in Fact[Product Key] non è presente in Product[Product Key] e questa chiave mancante è 50.

L'analisi esplorativa dei dati è un processo interessante e lo è anche la pulizia dei dati. C'è sempre qualcosa che i dati nascondono, a seconda di come si esaminano, cosa si vuole chiedere e così via. Il collegamento semantico offre nuovi strumenti che è possibile usare per ottenere di più con i dati.

Vedere altre esercitazioni per il collegamento semantico/SemPy: