Share via


Relaties ontdekken in een semantisch model met behulp van een semantische koppeling

In deze zelfstudie ziet u hoe u een Jupyter-notebook gebruikt om te communiceren met Power BI en relaties tussen tabellen met de SemPy-bibliotheek te detecteren.

In deze zelfstudie leert u het volgende:

  • Ontdek relaties in een semantisch model (Power BI-gegevensset) met behulp van de Python-bibliotheek (SemPy) van semantic Link.
  • Gebruik SemPy-onderdelen die integreren met Power BI en gegevenskwaliteitsanalyse automatiseren. Deze onderdelen zijn onder andere:
    • FabricDataFrame - een pandas-achtige structuur verbeterd met semantische informatie
    • Functies die semantische modellen uit een Fabric-werkruimte naar uw notebook halen
    • Functies waarmee functionele afhankelijkheden worden getest en relatieschendingen in uw semantische modellen worden geïdentificeerd

Voorwaarden

  • Ga naar Werkruimten in het navigatiedeelvenster en selecteer vervolgens uw werkruimte om deze in te stellen als de huidige werkruimte.

  • Download het klantwinstgevendheidsvoorbeeld.pbix en klantwinstgevendheidsvoorbeeld (auto).pbix-semantische modellen uit de GitHub-opslagplaats voor fabric-samples en upload deze vervolgens naar uw werkruimte.

Volg mee in het notitieblok

Gebruik het notebook powerbi_relationships_tutorial.ipynb om mee te doen.

Het notebook instellen

Stel een notebookomgeving in met de modules en gegevens die u nodig hebt.

  1. Installeer het semantic-link pakket vanuit PyPI met behulp van de %pip inline-opdracht in het notebook.

    %pip install semantic-link
    
  2. Importeer de sempy modules die u later gaat gebruiken.

    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. Importeer de pandas bibliotheek en stel een weergaveoptie in voor uitvoeropmaak.

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

## Explore semantic models

This tutorial uses the Customer Profitability Sample semantic model [_Customer Profitability Sample.pbix_](https://github.com/microsoft/fabric-samples/blob/main/docs-samples/data-science/datasets/Customer%20Profitability%20Sample.pbix). Learn about the semantic model in [Customer Profitability sample for Power BI](/power-bi/create-reports/sample-customer-profitability).

- Use SemPy's `list_datasets` function to explore semantic models in your current workspace:

  ```python
  fabric.list_datasets()

Gebruik voor de rest van dit notebook twee versies van het semantische model Klantwinstgevendheidsvoorbeeld:

  • Voorbeeld van klantwinstgevendheid: het semantische model zoals opgegeven in de Power BI-voorbeelden, met vooraf gedefinieerde tabelrelaties
  • Voorbeeld van klantwinstgevendheid (automatisch): dezelfde gegevens, maar relaties zijn beperkt tot relaties die automatisch door Power BI worden gedefinieerd

Vooraf gedefinieerde relaties extraheren uit het semantische voorbeeldmodel

  1. Laad de vooraf gedefinieerde relaties in het semantische model klantwinstgevendheidsvoorbeeld met behulp van de functie van list_relationships SemPy. De functie bevat relaties uit het tabellaire objectmodel (TOM).

    dataset = "Customer Profitability Sample"
    relationships = fabric.list_relationships(dataset)
    relationships
    
  2. Visualiseer het relationships DataFrame als een grafiek met behulp van de functie van plot_relationship_metadata SemPy.

    plot_relationship_metadata(relationships)
    

    Schermopname van de relatiegrafiek tussen tabellen in het semantische model.

    In deze grafiek ziet u de relaties tussen tabellen in dit semantische model, zoals gedefinieerd in Power BI door een expert op het gebied van onderwerp.

Aanvullende relaties ontdekken

Als u begint met relaties die automatisch door Power BI worden gedefinieerd, hebt u een kleinere set.

  1. Visualiseer de relaties die automatisch door Power BI zijn gedetecteerd in het semantische model:

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

    Schermopname van relaties die door Power BI automatisch zijn gedetecteerd in het semantische model.

    De automatische verwijdering van Power BI mist veel relaties. Bovendien zijn twee van de automatisch gedetecteerde relaties semantisch onjuist:

    • Executive[ID] ->Industry[ID]
    • BU[Executive_id] ->Industry[ID]
  2. De relaties afdrukken als een tabel:

    autodetected
    

    Rijen 3 en 4 geven onjuiste relaties met de Industry tabel weer. Verwijder deze rijen.

  3. Negeer de onjuist geïdentificeerde relaties.

    # Remove rows 3 and 4 which point incorrectly to Industry[ID]
    autodetected = autodetected[~autodetected.index.isin([3, 4])]
    

    Nu hebt u de juiste maar onvolledige relaties. Visualiseer deze onvolledige relaties met behulp van plot_relationship_metadata:

    plot_relationship_metadata(autodetected)
    

    Schermopname van een visualisatie van relaties na het verwijderen van onjuiste relaties.

  4. Laad alle tabellen uit het semantische model met behulp van SemPy's list_tables en read_table functies en zoek vervolgens relaties tussen tabellen met behulp van find_relationships. Bekijk de logboekuitvoer om inzicht te krijgen in de werking van deze functie:

    suggested_relationships_all = find_relationships(
        tables,
        name_similarity_threshold=0.7,
        coverage_threshold=0.7,
        verbose=2
    )
    
  5. Nieuw gedetecteerde relaties visualiseren:

    plot_relationship_metadata(suggested_relationships_all)
    

    Schermopname van een visualisatie van nieuw gedetecteerde relaties.

    SemPy detecteert alle relaties.

  6. Gebruik de parameter exclude om de zoekopdracht te beperken tot aanvullende relaties die niet eerder zijn geïdentificeerd:

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

Relaties valideren

  1. Laad eerst gegevens uit het semantische model klantwinstgevendheidsvoorbeeld .

    dataset = "Customer Profitability Sample"
    tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']}
    
    tables.keys()
    
  2. Controleer of de primaire en refererende sleutel overlappen met de list_relationship_violations functie. Geef de uitvoer van de list_relationships functie door aan list_relationship_violations.

    list_relationship_violations(tables, fabric.list_relationships(dataset))
    

    De resultaten geven nuttige inzichten weer. Een van de zeven waarden in Fact[Product Key] is bijvoorbeeld niet aanwezig en Product[Product Key]de ontbrekende sleutel is 50.

    Verkennende gegevensanalyse en gegevens opschonen zijn iteratief. Wat u leert, is afhankelijk van uw vragen en hoe u de gegevens verkent. Semantische koppeling voegt hulpprogramma's toe waarmee u meer kunt doen met uw gegevens.

Bekijk andere zelfstudies voor semantische koppeling en SemPy:

\n\n