共用方式為


教學課程:使用語意連結來探索語意模型中的關聯性

本教學課程會說明如何在 SemPy 庫的協助下從 Jupyter Notebook 與 Power BI 互動,並偵測資料表之間的關聯性。

在本教學課程中,您會了解如何:

  • 使用語意連結的 Python 庫 (SemPy) 探索語意模型 (Power BI 資料集) 中的關聯性。
  • 使用支援與 Power BI 整合並協助自動化資料品質分析的 SemPy 元件。 這些元件包括:
    • FabricDataFrame - 使用其他語意資訊增強的 Pandas 類似結構。
    • 將語意模型從 Fabric 工作區提取至筆記本的函數。
    • 可自動評估有關功能相依性的假設,並在語意模型中識別關聯性衝突的函數。

必要條件

在筆記本中跟著做

本教學課程隨附 powerbi_relationships_tutorial.ipynb 筆記本。

若要開啟本教學課程隨附的筆記本,請遵循為資料科學教學課程準備系統中的指示,將筆記本匯入您的工作區。

如果您想要複製並貼上此頁面中的程式碼,則可以建立新的筆記本

開始執行程式碼之前,請務必將 Lakehouse 連結至筆記本

設定筆記本

在本章節中,您會使用必要的模組和資料來設定筆記本環境。

  1. 使用筆記本內的 %pip 內嵌安裝功能從 PyPI 安裝 SemPy

    %pip install semantic-link
    
  2. 執行您稍後會需要的必要 SemPy 模組匯入:

    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. 匯入 Pandas 以強制執行可協助輸出格式化的組態選項:

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

探索語意模型

本教學課程使用標準範例語意模型 Customer Profitability Sample.pbix。 如需語意模型的描述,請參閱 Power BI 的客戶獲利率範例

  • 使用 SemPy 的 list_datasets 函數來探索您目前工作區中的語意模型:

    fabric.list_datasets()
    

對於此筆記本的其餘部分,您會使用兩個版本的客戶獲利率範例語意模型:

  • 客戶獲利率範例:語意模型來自具有預先定義資料表關聯性的 Power BI 範例
  • 客戶獲利率範例 (auto):相同的資料,但關聯性僅限於 Power BI 可自動偵測的資料。

使用其預先定義的語意模型擷取範例語意模型

  1. 使用 SemPy 的 list_relationships 函數,載入預先定義並儲存在客戶獲利率範例語意模型中的關聯性。 此函數會從表格式物件模型列出:

    dataset = "Customer Profitability Sample"
    relationships = fabric.list_relationships(dataset)
    relationships
    
  2. 使用 SemPy 的 plot_relationship_metadata 函數,將 relationships DataFrame 視覺化為關係圖:

    plot_relationship_metadata(relationships)
    

    顯示語意模型中資料表之間關聯性之繪圖的螢幕擷取畫面。

此關係圖顯示此語意模型中資料表之間關聯性的「基礎真相」,因為它會反映主題專家在 Power BI 中定義這些關聯性的方式。

補充關聯性探索

如果您從 Power BI 自動偵測到的關聯性開始,就會有一個較小的集合。

  1. 將 Power BI 在語意模型中自動偵測到的關聯性視覺化:

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

    顯示 Power BI 在語意模型中自動偵測到的關聯性的螢幕擷取畫面。

    Power BI 的自動偵測遺漏了許多關聯性。 此外,兩個自動偵測到的關聯性在語意上不正確:

    • Executive[ID] ->Industry[ID]
    • BU[Executive_id] ->Industry[ID]
  2. 將關聯性列印為資料表:

    autodetected
    

    Industry 資料表的關聯性不正確會出現在索引 3 和 4 的資料列中。 使用此資訊來移除這些資料列。

  3. 捨棄未能正確識別的關聯性。

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

    現在您有正確但不完整的關聯性。

  4. 使用 plot_relationship_metadata 將這些不完整的關聯性視覺化:

    plot_relationship_metadata(autodetected)
    

    顯示移除不正確關聯性之後的視覺效果的螢幕擷取畫面。

  5. 使用 SemPy 的 list_tablesread_table 函數,從語意模型載入所有資料表:

    tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']}
    
    tables.keys()
    
  6. 使用 find_relationships 尋找資料表之間的關聯性,並檢閱記錄輸出,以取得此函數運作方式的一些深入解析:

    suggested_relationships_all = find_relationships(
        tables,
        name_similarity_threshold=0.7,
        coverage_threshold=0.7,
        verbose=2
    )
    
  7. 將新探索到的關聯性視覺化:

    plot_relationship_metadata(suggested_relationships_all)
    

    顯示新探索到的關聯性視覺效果的螢幕擷取畫面。

    SemPy 可以偵測所有關聯性。

  8. 使用 exclude 參數,將搜尋限制為先前未識別的其他關聯性:

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

驗證關聯性

  1. 首先,從客戶獲利率範例語意模型載入資料:

    dataset = "Customer Profitability Sample"
    tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']}
    
    tables.keys()
    
  2. 使用 list_relationship_violations 函數檢查主要和外部索引鍵值的重疊。 提供 list_relationships 函數的輸出做為 list_relationship_violations 的輸入:

    list_relationship_violations(tables, fabric.list_relationships(dataset))
    

    關聯性衝突提供一些有趣的深入解析。 例如,在 Product[Product Key] 中,Fact[Product Key] 的七個值中有一個不存在,而這個遺漏的索引鍵是 50

探勘資料分析是一項令人興奮的程序,資料清理也是如此。 資料總會隱藏一些東西,取決於您查看資料的方式、您想要詢問的內容等等。 語意連結為您提供可用來取得更多資料的新工具。

查看語意連結/SemPy 的其他教學課程: