Udostępnij za pośrednictwem


Samouczek: odnajdywanie relacji w modelu semantycznym przy użyciu linku semantycznego

W tym samouczku przedstawiono sposób interakcji z usługą Power BI z notesu Jupyter i wykrywania relacji między tabelami za pomocą biblioteki SemPy.

Z tego samouczka dowiesz się, jak wykonywać następujące działania:

  • Discover relationships in a semantic model (Power BI dataset), using semantic link's Python library (SemPy).
  • Użyj składników biblioteki SemPy, które obsługują integrację z usługą Power BI i pomagają zautomatyzować analizę jakości danych. Te składniki obejmują:
    • FabricDataFrame — struktura podobna do struktury pandas, rozszerzona o dodatkowe informacje semantyczne.
    • Funkcje służące do ściągania modeli semantycznych z obszaru roboczego usługi Fabric do notesu.
    • Funkcje automatyzujące ocenę hipotez dotyczących zależności funkcjonalnych i identyfikujące naruszenia relacji w modelach semantycznych.

Warunki wstępne

  • Wybierz pozycję Obszary robocze w okienku nawigacji po lewej stronie, aby znaleźć i wybrać obszar roboczy. Ten obszar roboczy staje się twoim aktualnym obszarem roboczym.

  • Download the Customer Profitability Sample.pbix and Customer Profitability Sample (auto).pbix semantic models from the fabric-samples GitHub repository and upload them to your workspace.

Follow along in the notebook

The powerbi_relationships_tutorial.ipynb notebook accompanies this tutorial.

Set up the notebook

W tej sekcji skonfigurujesz środowisko notesu z niezbędnymi modułami i danymi.

  1. Install SemPy from PyPI using the %pip in-line installation capability within the notebook:

    %pip install semantic-link
    
  2. Wykonaj niezbędne importy modułów SemPy, które będą potrzebne później:

    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. Zaimportuj bibliotekę pandas do wymuszania opcji konfiguracji, która ułatwia formatowanie danych wyjściowych:

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

Eksplorowanie modeli semantycznych

This tutorial uses a standard sample semantic model Customer Profitability Sample.pbix. Aby zapoznać się z opisem modelu semantycznego, zobacz Przykład Customer Profitability dla usługi Power BI.

  • Użyj funkcji list_datasets SemPy, aby eksplorować modele semantyczne w bieżącym obszarze roboczym:

    fabric.list_datasets()
    

For the rest of this notebook you use two versions of the Customer Profitability Sample semantic model:

  • Customer Profitability Sample: the semantic model as it comes from Power BI samples with predefined table relationships
  • Przykład Rentowności Klienta (automatyczny): te same dane, ale relacje są ograniczone do tych, które Power BI wykrywa za pomocą autodetekcji.

Wyodrębnij model semantyczny przykładowy wraz z jego wstępnie zdefiniowanym modelem semantycznym

  1. Załaduj relacje, które są wstępnie zdefiniowane i przechowywane w modelu semantycznym Customer Profitability Sample przy użyciu funkcji list_relationships SemPy. Ta funkcja wyświetla listę z tabelarycznego modelu obiektów:

    dataset = "Customer Profitability Sample"
    relationships = fabric.list_relationships(dataset)
    relationships
    
  2. Wizualizowanie ramki danych relationships jako grafu przy użyciu funkcji plot_relationship_metadata SemPy:

    plot_relationship_metadata(relationships)
    

    Zrzut ekranu przedstawiający wykres relacji między tabelami w modelu semantycznym.

Ten wykres przedstawia "podstawy prawdy" dla relacji między tabelami w tym modelu semantycznym, ponieważ odzwierciedla sposób ich definiowania w usłudze Power BI przez eksperta w tej dziedzinie.

Odkrywanie relacji komplementarnych

Jeśli zaczniesz od relacji automatycznie wykrywanych przez usługę Power BI, masz mniejszy zestaw.

  1. Wizualizuj relacje automatycznie wykrywane przez usługę Power BI w modelu semantycznym:

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

    Zrzut ekranu przedstawiający relacje, które usługa Power BI wykryła automatycznie w modelu semantycznym.

    Power BI's autodetection missed many relationships. Co więcej, dwie relacje automatycznie wykrywane są semantycznie niepoprawne:

    • Executive[ID] —>Industry[ID]
    • BU[Executive_id] —>Industry[ID]
  2. Wydrukuj relacje jako tabelę:

    autodetected
    

    Niepoprawne relacje z tabelą Industry są wyświetlane w wierszach z indeksem 3 i 4. Użyj tych informacji, aby usunąć te wiersze.

  3. Odrzuć nieprawidłowo zidentyfikowane relacje.

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

    Teraz masz poprawne, ale niekompletne relacje.

  4. Zwizualizuj te niekompletne relacje przy użyciu plot_relationship_metadata:

    plot_relationship_metadata(autodetected)
    

    Zrzut ekranu przedstawiający wizualizację relacji po usunięciu nieprawidłowych.

  5. Załaduj wszystkie tabele z modelu semantycznego przy użyciu funkcji list_tables i read_table SemPy:

    tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']}
    
    tables.keys()
    
  6. Znajdź relacje między tabelami przy użyciu find_relationshipsi przejrzyj dane wyjściowe dziennika, aby uzyskać szczegółowe informacje na temat działania tej funkcji:

    suggested_relationships_all = find_relationships(
        tables,
        name_similarity_threshold=0.7,
        coverage_threshold=0.7,
        verbose=2
    )
    
  7. Wizualizowanie nowo odnalezionych relacji:

    plot_relationship_metadata(suggested_relationships_all)
    

    Zrzut ekranu przedstawiający wizualizację nowo odnalezionych relacji.

    Oprogramowanie SemPy było w stanie wykryć wszystkie relacje.

  8. Użyj parametru exclude, aby ograniczyć wyszukiwanie do dodatkowych relacji, które nie zostały wcześniej zidentyfikowane:

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

Weryfikowanie relacji

  1. Najpierw załaduj dane z modelu semantycznego 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. Sprawdź nakładanie się wartości klucza podstawowego i obcego przy użyciu funkcji list_relationship_violations. Podaj dane wyjściowe funkcji list_relationships jako dane wejściowe do list_relationship_violations:

    list_relationship_violations(tables, fabric.list_relationships(dataset))
    

    Naruszenia związków dostarczają kilku interesujących wniosków. Na przykład jedna z siedmiu wartości w Fact[Product Key] jest nieobecna w Product[Product Key], a brakujący klucz to 50.

Eksploracyjna analiza danych to ekscytujący proces, a także czyszczenie danych. Zawsze jest coś, co ukrywa dane, w zależności od tego, jak patrzysz na to, co chcesz zapytać itd. Link semantyczny dostarcza nowe narzędzia, które można użyć, aby osiągnąć więcej dzięki swoim danym.

Zapoznaj się z innymi samouczkami dotyczącymi linku semantycznego /SemPy: