在本文中,您將瞭解如何使用 Microsoft Fabric 中的 SemPy Python 程式庫來讀取語意模型中的資料、中繼資料,以及評估量值。 您也會學習撰寫語意模型可以使用的資料。
必要條件
取得 Microsoft Fabric 訂用帳戶。 或註冊免費的 Microsoft Fabric 試用版。
登入 Microsoft Fabric。
使用首頁左下方的體驗切換器,切換至 Fabric。
- 移至 Microsoft Fabric 中的資料科學體驗。
- 建立 新的筆記本 ,將程式碼複製並貼到儲存格中。
- 若是 Spark 3.4 和更高版本,使用 Fabric 時,預設執行階段可使用語意連結功能,而且不需要安裝。 如果使用的是 Spark 3.3 或以下版本,或者想要更新為最新版本的語意連結,可以執行命令:
python %pip install -U semantic-link - 將 Lakehouse 新增至您的筆記本
- 從 fabric-samples 存放庫的 datasets 資料夾下載 Customer Profitability Sample.pbix 語意模型,並將其儲存在本機。
將語意模型上傳至您的工作區
本文使用 客戶獲利率範例.pbix 語意模型。 語意模型參考了一家製造行銷材料的公司。 它包括不同業務單位的產品、客戶和收入資料。
- 在 Fabric Data Science 中開啟 您的工作區 。
- 選取 [從此電腦匯入>報表]、[編頁報表] 或 [活頁簿>],然後選取 [客戶獲利能力範例.pbix] 語意模型。
上傳完成後,您的工作區會包含三個新的成品:Power BI 報表、儀錶板,以及名為 Customer Profitability Sample 的語意模型。 本文中的步驟依賴此語意模型。
使用 Python 從語意模型讀取資料
SemPy Python API 可以從位於 Microsoft Fabric 工作區的語意模型擷取數據和元數據。 API 也可以對其執行查詢。
您的筆記本、Power BI 資料集語意模型和 Lakehouse 可位於相同的工作區或不同的工作區。 根據預設,SemPy 會嘗試從以下存取語意模型:
- 如果您已將湖宅連結至筆記本,那麼這就是湖宅的工作區。
- 如果未連接資料湖倉,則為筆記本的工作區。
如果您的語意模型不在上述任一工作區,則必須在呼叫 SemPy 方法時,指定語意模型的工作區。
若要從語意模型讀取資料,請遵循下列步驟:
列出工作區中可用的語意模型。
import sempy.fabric as fabric df_datasets = fabric.list_datasets() df_datasets列出 Customer Profitability Sample 語意模型中可用的資料表。
df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True) df_tables列出 Customer Profitability Sample 語意模型中定義的措施。
提示
在下列程式代碼範例中,我們指定了 SemPy 用於存取語意模型的工作區。 您可以將
<Your Workspace>取代為您上傳語意模型的工作區名稱 (來自 將語意模型上傳至您的工作區區段)。df_measures = fabric.list_measures("Customer Profitability Sample", workspace="<Your Workspace>") df_measures在這裡,我們判斷 Customer 數據表是感興趣的數據表。
從 Customer Profitability Sample 語意模型讀取客戶資料表。
df_table = fabric.read_table("Customer Profitability Sample", "Customer") df_table評估每個客戶狀態和日期的總營收量值。
df_measure = fabric.evaluate_measure( "Customer Profitability Sample", "Total Revenue", ["'Customer'[State]", "Calendar[Date]"]) df_measure注意
- 根據預設, 不會 使用 XMLA 擷取資料,因此不需要啟用 XMLA 唯讀。
- 資料不受 Power BI 後端限制的限制。
- 可擷取的資料數量受以下限制:- 裝載語意模型之容量 SKU 的 每個查詢記憶體上限 。 - 執行筆記本環境的 Spark driver 節點(請造訪 節點大小 以取得詳細資訊)。
- 所有請求都以 互動式請求計費。
- 函
evaluate_dax式不會自動重新整理語意模型。 如需詳細資訊,請瀏覽 此頁面 。
若要將篩選新增至量值計算,請指定特定數據行的允許值清單。
filters = { "State[Region]": ["East", "Central"], "State[State]": ["FLORIDA", "NEW YORK"] } df_measure = fabric.evaluate_measure( "Customer Profitability Sample", "Total Revenue", ["Customer[State]", "Calendar[Date]"], filters=filters) df_measure使用 DAX 查詢評估每個客戶狀態和日期的總收入量值。
df_dax = fabric.evaluate_dax( "Customer Profitability Sample", """ EVALUATE SUMMARIZECOLUMNS( 'State'[Region], 'Calendar'[Date].[Year], 'Calendar'[Date].[Month], "Total Revenue", CALCULATE([Total Revenue])) """)注意
- 使用 XMLA 擷取數據,因此至少需要啟用 XMLA 只讀
- 可擷取的數據量受限於 Microsoft azure Analysis Services 和 Spark 驅動程式節點中的可用記憶體數量(如需詳細資訊,請造訪 節點大小 )
- 所有要求都會使用低優先順序將 Analysis Services 效能的影響降到最低,並以互動式要求的形式計費
使用
%%daxcell magic 來評估相同的 DAX 查詢,而不需要匯入程式庫。 執行此儲存格以載入%%daxcell magic:%load_ext sempy工作區參數是選擇性的。 它會遵循與函式工作區參數
evaluate_dax相同的規則。Python 魔法命令也支援使用
{variable_name}語法來存取 Python 變數。 若要在 DAX 查詢中使用大括弧,請使用另一個大括弧來跳脫它(例如:EVALUATE {{1}})。%%dax "Customer Profitability Sample" -w "<Your Workspace>" EVALUATE SUMMARIZECOLUMNS( 'State'[Region], 'Calendar'[Date].[Year], 'Calendar'[Date].[Month], "Total Revenue", CALCULATE([Total Revenue]))產生的 FabricDataFrame 可透過
_變數取得。 該變數會擷取最後一個執行之單元格的輸出。df_dax = _ df_dax.head()您可以將量值新增至從外部來源擷取的數據。 此方法結合了三項工作:
- 它會將欄位名稱解析為 Power BI 維度
- 它會依欄位定義群組
- 它會篩選度量,並忽略指定語意模型中無法解析的任何欄位名稱(如需詳細資訊,請造訪支援的資源 DAX 語法)。
from sempy.fabric import FabricDataFrame df = FabricDataFrame({ "Sales Agent": ["Agent 1", "Agent 1", "Agent 2"], "Customer[Country/Region]": ["US", "GB", "US"], "Industry[Industry]": ["Services", "CPG", "Manufacturing"], } ) joined_df = df.add_measure("Total Revenue", dataset="Customer Profitability Sample") joined_df
特殊參數
SemPy read_table 和 evaluate_measure 方法有可用來操作輸出的更多參數。 這些參數包括:
-
pandas_convert_dtypes:如果設定為True,pandas 會將產生的 DataFrame 資料行轉換成最佳 dtype。 在 convert_dtypes中了解更多信息。 如果關閉此參數,則相關資料表的資料行之間可能會發生類型不相容問題。 Power BI 模型可能無法偵測到這些問題,因為 DAX 隱含類型轉換。
SemPy read_table 也會使用 Power BI 提供的模型資訊。
-
multiindex_hierarchies:如果設定為True,則會將 Power BI 階層 轉換成 pandas MultiIndex 結構。
寫入語意模型可取用的資料
新增至 Lakehouse 的 Spark 資料表會自動新增至對應的預設語意模型。 本文示範如何將資料寫入附加的 Lakehouse。
FabricDataFrame 接受與 Pandas 資料框相同的輸入資料。
from sempy.fabric import FabricDataFrame
df_forecast = FabricDataFrame({'ForecastedRevenue': [1, 2, 3]})
df_forecast.to_lakehouse_table("ForecastTable")
使用 Power BI,ForecastTable 資料表可以新增至包含 Lakehouse 語意模型的複合語意模型。