教學課程:使用語意連結來探索語意模型中的關聯性
本教學課程會說明如何在 SemPy 庫的協助下從 Jupyter Notebook 與 Power BI 互動,並偵測資料表之間的關聯性。
在本教學課程中,您會了解如何:
- 使用語意連結的 Python 庫 (SemPy) 探索語意模型 (Power BI 資料集) 中的關聯性。
- 使用支援與 Power BI 整合並協助自動化資料品質分析的 SemPy 元件。 這些元件包括:
- FabricDataFrame - 使用其他語意資訊增強的 Pandas 類似結構。
- 將語意模型從 Fabric 工作區提取至筆記本的函數。
- 可自動評估有關功能相依性的假設,並在語意模型中識別關聯性衝突的函數。
必要條件
取得 Microsoft Fabric 訂用帳戶。 或註冊免費的 Microsoft Fabric 試用版。
登入 Microsoft Fabric。
使用首頁左側的體驗切換器,切換至 Synapse 資料科學體驗。
從左側瀏覽窗格中選取 [工作區],以尋找並選取您的工作區。 此工作區會成為您目前的工作區。
從 fabric-samples GitHub 存放庫下載 Customer Profitability Sample.pbix 和 Customer Profitability Sample (auto).pbix 語意模型,並將其上傳至您的工作區。
在筆記本中跟著做
本教學課程隨附 powerbi_relationships_tutorial.ipynb 筆記本。
若要開啟本教學課程隨附的筆記本,請遵循為資料科學教學課程準備系統中的指示,將筆記本匯入您的工作區。
如果您想要複製並貼上此頁面中的程式碼,則可以建立新的筆記本。
開始執行程式碼之前,請務必將 Lakehouse 連結至筆記本。
設定筆記本
在本章節中,您會使用必要的模組和資料來設定筆記本環境。
使用筆記本內的
%pip
內嵌安裝功能從 PyPI 安裝SemPy
:%pip install semantic-link
執行您稍後會需要的必要 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
匯入 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 可自動偵測的資料。
使用其預先定義的語意模型擷取範例語意模型
使用 SemPy 的
list_relationships
函數,載入預先定義並儲存在客戶獲利率範例語意模型中的關聯性。 此函數會從表格式物件模型列出:dataset = "Customer Profitability Sample" relationships = fabric.list_relationships(dataset) relationships
使用 SemPy 的
plot_relationship_metadata
函數,將relationships
DataFrame 視覺化為關係圖:plot_relationship_metadata(relationships)
此關係圖顯示此語意模型中資料表之間關聯性的「基礎真相」,因為它會反映主題專家在 Power BI 中定義這些關聯性的方式。
補充關聯性探索
如果您從 Power BI 自動偵測到的關聯性開始,就會有一個較小的集合。
將 Power BI 在語意模型中自動偵測到的關聯性視覺化:
dataset = "Customer Profitability Sample (auto)" autodetected = fabric.list_relationships(dataset) plot_relationship_metadata(autodetected)
Power BI 的自動偵測遺漏了許多關聯性。 此外,兩個自動偵測到的關聯性在語意上不正確:
Executive[ID]
->Industry[ID]
BU[Executive_id]
->Industry[ID]
將關聯性列印為資料表:
autodetected
Industry
資料表的關聯性不正確會出現在索引 3 和 4 的資料列中。 使用此資訊來移除這些資料列。捨棄未能正確識別的關聯性。
autodetected.drop(index=[3,4], inplace=True) autodetected
現在您有正確但不完整的關聯性。
使用
plot_relationship_metadata
將這些不完整的關聯性視覺化:plot_relationship_metadata(autodetected)
使用 SemPy 的
list_tables
和read_table
函數,從語意模型載入所有資料表:tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']} tables.keys()
使用
find_relationships
尋找資料表之間的關聯性,並檢閱記錄輸出,以取得此函數運作方式的一些深入解析:suggested_relationships_all = find_relationships( tables, name_similarity_threshold=0.7, coverage_threshold=0.7, verbose=2 )
將新探索到的關聯性視覺化:
plot_relationship_metadata(suggested_relationships_all)
SemPy 可以偵測所有關聯性。
使用
exclude
參數,將搜尋限制為先前未識別的其他關聯性:additional_relationships = find_relationships( tables, exclude=autodetected, name_similarity_threshold=0.7, coverage_threshold=0.7 ) additional_relationships
驗證關聯性
首先,從客戶獲利率範例語意模型載入資料:
dataset = "Customer Profitability Sample" tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']} tables.keys()
使用
list_relationship_violations
函數檢查主要和外部索引鍵值的重疊。 提供list_relationships
函數的輸出做為list_relationship_violations
的輸入:list_relationship_violations(tables, fabric.list_relationships(dataset))
關聯性衝突提供一些有趣的深入解析。 例如,在
Product[Product Key]
中,Fact[Product Key]
的七個值中有一個不存在,而這個遺漏的索引鍵是50
。
探勘資料分析是一項令人興奮的程序,資料清理也是如此。 資料總會隱藏一些東西,取決於您查看資料的方式、您想要詢問的內容等等。 語意連結為您提供可用來取得更多資料的新工具。
相關內容
查看語意連結/SemPy 的其他教學課程: