อ่านจากแบบจําลองความหมายและเขียนข้อมูลที่สามารถใช้โดย Power BI โดยใช้ python
ในบทความนี้ คุณจะได้เรียนรู้วิธีการอ่านข้อมูลและเมตาดาต้า และประเมินหน่วยวัดในแบบจําลองความหมายโดยใช้ไลบรารี SemPy python ใน Microsoft Fabric คุณยังได้เรียนรู้วิธีการเขียนข้อมูลที่แบบจําลองความหมายสามารถใช้ได้
ข้อกำหนดเบื้องต้น
รับการสมัครใช้งาน Microsoft Fabric หรือลงทะเบียนเพื่อทดลองใช้งาน Microsoft Fabric ฟรี
ลงชื่อเข้าใช้ Microsoft Fabric
ใช้ตัวสลับประสบการณ์ทางด้านซ้ายของโฮมเพจของคุณเพื่อสลับไปยังประสบการณ์วิทยาศาสตร์ข้อมูล Synapse
- เยี่ยมชมประสบการณ์ด้านวิทยาศาสตร์ข้อมูลใน Microsoft Fabric
- สร้าง สมุดบันทึกใหม่ เพื่อคัดลอก/วางรหัสลงในเซลล์
- สําหรับ Spark 3.4 และสูงกว่า ลิงก์ความหมายจะพร้อมใช้งานในรันไทม์เริ่มต้นเมื่อใช้ Fabric และไม่จําเป็นต้องติดตั้ง ถ้าคุณกําลังใช้ Spark 3.3 หรือต่ํากว่า หรือถ้าคุณต้องการอัปเดตเป็นลิงก์ความหมายเวอร์ชันล่าสุด คุณสามารถเรียกใช้คําสั่งได้:
python %pip install -U semantic-link
- เพิ่มเลคเฮาส์ลงในสมุดบันทึกของคุณ
- ดาวน์โหลด แบบจําลองความหมาย Customer Profitability Sample.pbix จากโฟลเดอร์ชุดข้อมูลของที่เก็บตัวอย่างสิ่งทอ และบันทึกแบบจําลองความหมายภายในเครื่อง
อัปโหลดแบบจําลองความหมายลงในพื้นที่ทํางานของคุณ
บทความนี้ใช้แบบจําลองความหมาย Customer Profitability Sample.pbix แบบจําลองความหมายนี้อ้างอิงถึงเอกสารการตลาดการผลิตของบริษัท ซึ่งประกอบด้วยข้อมูลผลิตภัณฑ์ ลูกค้า และรายได้ที่สอดคล้องกันสําหรับหน่วยธุรกิจต่าง ๆ
- เปิดพื้นที่ทํางานของคุณใน Fabric Data Science
- เลือก อัปโหลด>เรียกดู และเลือกแบบจําลองความหมาย ตัวอย่างความสามารถในการทํากําไรสําหรับลูกค้า.pbix
เมื่อการอัปโหลดเสร็จสมบูรณ์ พื้นที่ทํางานของคุณมีอาร์ทิแฟกต์ใหม่สามรายการ: รายงาน Power BI แดชบอร์ด และแบบจําลองความหมายที่ชื่อว่า ตัวอย่างความสามารถในการทํากําไรลูกค้า ขั้นตอนในบทความนี้ขึ้นอยู่กับแบบจําลองความหมายนั้น
ใช้ Python เพื่ออ่านข้อมูลจากแบบจําลองความหมาย
SemPy Python API สามารถดึงข้อมูลและเมตาดาต้าจากแบบจําลองความหมายที่ตั้งอยู่ในพื้นที่ทํางานของ Microsoft Fabric API ยังสามารถดําเนินการคิวรีได้
สมุดบันทึก แบบจําลองความหมายของชุดข้อมูล Power BI และ เลคเฮ้าส์ ของคุณสามารถอยู่ในพื้นที่ทํางานเดียวกันหรือในพื้นที่ทํางานที่แตกต่างกันได้ ตามค่าเริ่มต้น SemPy พยายามเข้าถึงแบบจําลองความหมายของคุณจาก:
- พื้นที่ทํางานของเลคเฮ้าส์หากคุณแนบเลคเฮาส์เข้ากับโน้ตบุ๊คของคุณ
- พื้นที่ทํางานของสมุดบันทึกของคุณ ถ้าไม่มีเลคเฮาส์ติดอยู่
หากแบบจําลองความหมายของคุณไม่อยู่ในพื้นที่ทํางานเหล่านี้ คุณต้องระบุพื้นที่ทํางานของแบบจําลองความหมายของคุณเมื่อคุณเรียกใช้เมธอด SemPy
ในการอ่านข้อมูลจากแบบจําลองความหมาย:
ระบุรายการแบบจําลองความหมายที่มีอยู่ในพื้นที่ทํางานของคุณ
import sempy.fabric as fabric df_datasets = fabric.list_datasets() df_datasets
ระบุรายการตารางที่พร้อมใช้งานใน แบบจําลองความหมายตัวอย่าง ความสามารถในการทํากําไรลูกค้า
df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True) df_tables
ระบุรายการหน่วยวัดที่กําหนดใน แบบจําลองความหมายตัวอย่าง ความสามารถในการทํากําไรลูกค้า
เคล็ดลับ
ในตัวอย่างโค้ดต่อไปนี้ เราได้ระบุพื้นที่ทํางานสําหรับ SemPy เพื่อใช้สําหรับการเข้าถึงแบบจําลองความหมาย คุณสามารถแทนที่
Your Workspace
ด้วยชื่อของพื้นที่ทํางานที่คุณอัปโหลดแบบจําลองแสดงความหมาย (จาก อัปโหลดแบบจําลองแสดงความหมายลงในส่วนพื้นที่ทํางาน ของคุณ)df_measures = fabric.list_measures("Customer Profitability Sample", workspace="Your Workspace") df_measures
ที่นี่ เรากําหนดว่า ตารางลูกค้า เป็นตารางที่สนใจ
อ่านตารางลูกค้าจากแบบจําลองความหมายตัวอย่างความสามารถในการทํากําไรสําหรับลูกค้า
df_table = fabric.read_table("Customer Profitability Sample", "Customer") df_table
หมายเหตุ
- ข้อมูลจะถูกเรียกใช้โดยใช้ XMLA ซึ่งจําเป็นต้องมีการเปิดใช้งาน XMLA แบบอ่านอย่างเดียวเป็นอย่างน้อย
- จํานวนข้อมูลที่เรียกได้ถูกจํากัดโดย - หน่วยความจําสูงสุดต่อคิวรี ของความจุ SKU ที่โฮสต์แบบจําลองความหมาย - โหนดโปรแกรมควบคุม Spark (เยี่ยมชม ขนาด โหนดสําหรับข้อมูลเพิ่มเติม) ที่เรียกใช้สมุดบันทึก
- คําขอทั้งหมดใช้ลําดับความสําคัญต่ําเพื่อลดผลกระทบต่อประสิทธิภาพการทํางานของ Microsoft Azure Analysis Services และจะถูกเรียกเก็บเงินเป็น คําขอแบบโต้ตอบ
ประเมินหน่วยวัดรายได้รวมสําหรับรัฐและวันที่ของลูกค้าแต่ละราย
df_measure = fabric.evaluate_measure( "Customer Profitability Sample", "Total Revenue", ["'Customer'[State]", "Calendar[Date]"]) df_measure
หมายเหตุ
- ตามค่าเริ่มต้น ข้อมูลจะไม่ถูกเรียกใช้โดยใช้ XMLA ดังนั้นจึงไม่จําเป็นต้องเปิดใช้งาน XMLA แบบอ่านอย่างเดียว
- ข้อมูล ไม่ อยู่ภายใต้ ข้อจํากัด Backend ของ Power BI
- จํานวนข้อมูลที่เรียกได้ถูกจํากัดโดย - หน่วยความจําสูงสุดต่อคิวรี ของความจุ SKU ที่โฮสต์แบบจําลองความหมาย - โหนดโปรแกรมควบคุม Spark (เยี่ยมชม ขนาด โหนดสําหรับข้อมูลเพิ่มเติม) ที่ใช้งานสมุดบันทึก
- คําขอทั้งหมดจะถูกเรียกเก็บเงินเป็น คําขอแบบโต้ตอบ
หากต้องการเพิ่มตัวกรองลงในการคํานวณหน่วยวัด ให้ระบุรายการของค่าที่อนุญาตสําหรับคอลัมน์เฉพาะ
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 และจะถูกเรียกเก็บเงินเป็นคําขอแบบโต้ตอบ
ใช้เวทมนตร์ของ
%%dax
เซลล์เพื่อประเมินคิวรี DAX เดียวกันโดยไม่จําเป็นต้องนําเข้าไลบรารี เรียกใช้เซลล์นี้เพื่อโหลด%%dax
เวทมนตร์ของเซลล์:%load_ext sempy
พารามิเตอร์พื้นที่ทํางานเป็นทางเลือก ซึ่งจะเป็นไปตามกฎเดียวกับพารามิเตอร์พื้นที่ทํางานของ
evaluate_dax
ฟังก์ชันเวทมนตร์ของเซลล์ยังสนับสนุนการเข้าถึงตัวแปร Python ด้วย
{variable_name}
ไวยากรณ์ เมื่อต้องการใช้วงเล็บปีกกาในคิวรี 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
วิธีการ มีพารามิเตอร์เพิ่มเติมที่มีประโยชน์สําหรับการจัดการเอาต์พุต พารามิเตอร์เหล่านี้รวมถึง:
fully_qualified_columns
: สําหรับค่า "True" วิธีการจะส่งกลับชื่อคอลัมน์ในแบบฟอร์มTableName[ColumnName]
num_rows
: จํานวนแถวที่จะแสดงผลในผลลัพธ์pandas_convert_dtypes
: สําหรับค่า "จริง" pandas แปลงคอลัมน์ DataFrame ผลลัพธ์เป็น convert_dtypes dtypeที่ดีที่สุดที่เป็นไปได้ ถ้าพารามิเตอร์นี้ถูกปิด พิมพ์ปัญหาความไม่เข้ากันระหว่างคอลัมน์ของตารางที่เกี่ยวข้องอาจส่งผล; แบบจําลอง Power BI อาจไม่ตรวจพบปัญหาเหล่านั้นเนื่องจากการแปลงประเภทโดยนัยของ DAX
SemPy read_table
ยังใช้ข้อมูลแบบจําลองที่ Power BI ให้ไว้
multiindex_hierarchies
: ถ้า "True" จะแปลง ลําดับชั้น Power BI เป็นโครงสร้าง Pandas MultiIndex
เขียนข้อมูลที่สามารถใช้งานโดยแบบจําลองความหมาย
ตาราง Spark ที่เพิ่มไปยังเลคเฮ้าส์จะถูกเพิ่มโดยอัตโนมัติไปยังแบบจําลองความหมายเริ่มต้นที่สอดคล้องกัน ตัวอย่างนี้สาธิตวิธีการเขียนข้อมูลไปยังเลคเฮ้าส์ที่แนบมา FabricDataFrame ยอมรับข้อมูลป้อนเข้าเดียวกันเป็นกรอบข้อมูล Pandas
from sempy.fabric import FabricDataFrame
df_forecast = FabricDataFrame({'ForecastedRevenue': [1, 2, 3]})
df_forecast.to_lakehouse_table("ForecastTable")
ด้วย Power BI ตาราง ForecastTable สามารถเพิ่มลงในแบบจําลองความหมายแบบรวมด้วยแบบจําลองความหมายของ Lakehouse ได้