บทช่วยสอน: ตรวจสอบข้อมูลโดยใช้ SemPy และความคาดหวังที่ยิ่งใหญ่ (GX)
ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีการใช้ SemPy ร่วมกับ ความคาดหวัง (GX) ที่ยอดเยี่ยมเพื่อดําเนินการตรวจสอบความถูกต้องของข้อมูลในแบบจําลองความหมายของ Power BI
บทช่วยสอนนี้จะแสดงวิธีการ:
- ตรวจสอบข้อจํากัดบนชุดข้อมูลในพื้นที่ทํางาน Fabric ของคุณด้วยแหล่งข้อมูล Fabric ของ Great Expectation (สร้างขึ้นบนลิงก์ความหมาย)
- กําหนดค่าบริบทข้อมูล GX สินทรัพย์ข้อมูล และความคาดหวัง
- ดูผลลัพธ์การตรวจสอบความถูกต้องด้วยจุดตรวจสอบ GX
- ใช้ลิงก์เชิงความหมายเพื่อวิเคราะห์ข้อมูลดิบ
ข้อกำหนดเบื้องต้น
รับการสมัครใช้งาน Microsoft Fabric หรือลงทะเบียนเพื่อทดลองใช้งาน Microsoft Fabric ฟรี
ลงชื่อเข้าใช้ Microsoft Fabric
ใช้ตัวสลับประสบการณ์ทางด้านซ้ายของโฮมเพจของคุณเพื่อสลับไปยังประสบการณ์วิทยาศาสตร์ข้อมูล Synapse
- เลือก พื้นที่ทํางาน จากบานหน้าต่างนําทางด้านซ้ายเพื่อค้นหาและเลือกพื้นที่ทํางานของคุณ พื้นที่ทํางานนี้จะกลายเป็นพื้นที่ทํางานปัจจุบันของคุณ
- ดาวน์โหลดไฟล์ Retail Analysis Sample PBIX.pbix
- ในพื้นที่ทํางานของคุณ ใช้ปุ่ม อัปโหลด เพื่ออัปโหลดไฟล์ PBIX.pbix ตัวอย่างการวิเคราะห์ด้านการขายปลีกไปยังพื้นที่ทํางาน
ติดตามพร้อมกับในสมุดบันทึก
great_expectations_tutorial.ipynb คือสมุดบันทึกที่มาพร้อมกับบทช่วยสอนนี้
เมื่อต้องการเปิดสมุดบันทึกที่มาพร้อมกับบทช่วยสอนนี้ ให้ทําตามคําแนะนําใน เตรียมระบบของคุณสําหรับบทช่วยสอนวิทยาศาสตร์ข้อมูล เพื่อนําเข้าสมุดบันทึกไปยังพื้นที่ทํางานของคุณ
ถ้าคุณต้องการคัดลอกและวางรหัสจากหน้านี้แทน คุณสามารถสร้าง สมุดบันทึกใหม่ได้
ตรวจสอบให้แน่ใจว่าแนบ lakehouse เข้ากับสมุดบันทึก ก่อนที่คุณจะเริ่มเรียกใช้รหัส
ตั้งค่าสมุดบันทึก
ในส่วนนี้ คุณตั้งค่าสภาพแวดล้อมของสมุดบันทึกด้วยโมดูลและข้อมูลที่จําเป็น
- ติดตั้ง
SemPy
และไลบรารีที่เกี่ยวข้องGreat Expectations
จาก PyPI โดยใช้%pip
ความสามารถในการติดตั้งภายในสมุดบันทึก
# install libraries
%pip install semantic-link great-expectations great_expectations_experimental great_expectations_zipcode_expectations
# load %%dax cell magic
%load_ext sempy
- ทําการนําเข้าโมดูลที่จําเป็นซึ่งคุณจะต้องใช้ในภายหลัง:
import great_expectations as gx
from great_expectations.expectations.expectation import ExpectationConfiguration
from great_expectations_zipcode_expectations.expectations import expect_column_values_to_be_valid_zip5
ตั้งค่าบริบทข้อมูล GX และแหล่งข้อมูล
เพื่อเริ่มต้นใช้งานด้วยความคาดหวังที่ยิ่งใหญ่ ก่อนอื่นคุณต้องตั้งค่าบริบทข้อมูล GX บริบททําหน้าที่เป็นจุดเริ่มต้นสําหรับการดําเนินการ GX และเก็บการกําหนดค่าที่เกี่ยวข้องทั้งหมดไว้
context = gx.get_context()
ตอนนี้คุณสามารถเพิ่มชุดข้อมูล Fabric ของคุณในบริบท นี้เป็นแหล่งข้อมูล เพื่อเริ่มโต้ตอบกับข้อมูลได้ บทช่วยสอนนี้ใช้ไฟล์ .pbix ตัวอย่างการวิเคราะห์การค้าปลีกของแบบจําลองความหมายมาตรฐาน
ds = context.sources.add_fabric_powerbi("Retail Analysis Data Source", dataset="Retail Analysis Sample PBIX")
ระบุแอสเซทข้อมูล
กําหนด แอสเซท ข้อมูลเพื่อระบุชุดย่อยของข้อมูลที่คุณต้องการใช้งาน แอสเซทสามารถเป็นแบบง่าย เหมือนตารางเต็มรูปแบบ หรือซับซ้อนเหมือนคิวรีนิพจน์การวิเคราะห์ข้อมูลแบบกําหนดเอง (DAX)
ที่นี่ คุณจะเพิ่มหลายแอสเซท:
- ตาราง Power BI
- หน่วยวัด Power BI
- คิวรี DAX แบบกําหนดเอง
- คิวรีมุมมอง การจัดการแบบไดนามิก (DMV)
ตาราง Power BI
เพิ่มตาราง Power BI เป็นแอสเซทข้อมูล
ds.add_powerbi_table_asset("Store Asset", table="Store")
หน่วยวัด Power BI
หากชุดข้อมูลของคุณประกอบด้วยหน่วยวัดที่กําหนดไว้ล่วงหน้า คุณสามารถเพิ่มหน่วยวัดเป็นสินทรัพย์โดยทําตาม API ที่คล้ายกับของ SemPy evaluate_measure
ds.add_powerbi_measure_asset(
"Total Units Asset",
measure="TotalUnits",
groupby_columns=["Time[FiscalYear]", "Time[FiscalMonth]"]
)
DAX
ถ้าคุณต้องการกําหนดหน่วยวัดของคุณเองหรือมีการควบคุมแถวที่เฉพาะเจาะจงมากขึ้น คุณสามารถเพิ่มแอสเซท DAX ด้วยคิวรี DAX แบบกําหนดเอง ที่นี่ เรากําหนด Total Units Ratio
หน่วยวัดโดยการหารหน่วยวัดสองรายการที่มีอยู่
ds.add_powerbi_dax_asset(
"Total Units YoY Asset",
dax_string=
"""
EVALUATE SUMMARIZECOLUMNS(
'Time'[FiscalYear],
'Time'[FiscalMonth],
"Total Units Ratio", DIVIDE([Total Units This Year], [Total Units Last Year])
)
"""
)
คิวรี DMV
ในบางกรณี อาจเป็นประโยชน์ที่จะใช้ การคํานวณมุมมอง การจัดการแบบไดนามิก (DMV) ซึ่งเป็นส่วนหนึ่งของกระบวนการตรวจสอบข้อมูล ตัวอย่างเช่น คุณสามารถติดตามจํานวนการละเมิด Referential Integrity ภายในชุดข้อมูลของคุณได้ สําหรับข้อมูลเพิ่มเติม โปรดดู ที่ การล้างข้อมูล = รายงานที่รวดเร็วกว่า
ds.add_powerbi_dax_asset(
"Referential Integrity Violation",
dax_string=
"""
SELECT
[Database_name],
[Dimension_Name],
[RIVIOLATION_COUNT]
FROM $SYSTEM.DISCOVER_STORAGE_TABLES
"""
)
ความคาดหวัง
เมื่อต้องการเพิ่มข้อจํากัดเฉพาะลงในแอสเซท ก่อนอื่นคุณต้องกําหนดค่า ชุดความคาดหวัง หลังจากเพิ่มความคาดหวังแต่ละรายการไปยังแต่ละชุดคุณสามารถอัปเดตบริบทข้อมูลตั้งค่าในเริ่มต้นด้วยชุดใหม่ สําหรับรายการทั้งหมดของความคาดหวังที่พร้อมใช้งาน โปรดดูแกลเลอรีความคาดหวังของ GX
เริ่มต้นด้วยการเพิ่ม "ชุดร้านค้าปลีก" ด้วยความคาดหวังสองประการ:
- รหัสไปรษณีย์ที่ถูกต้อง
- ตารางที่มีจํานวนแถวระหว่าง 80 ถึง 200
suite_store = context.add_expectation_suite("Retail Store Suite")
suite_store.add_expectation(ExpectationConfiguration("expect_column_values_to_be_valid_zip5", { "column": "PostalCode" }))
suite_store.add_expectation(ExpectationConfiguration("expect_table_row_count_to_be_between", { "min_value": 80, "max_value": 200 }))
context.add_or_update_expectation_suite(expectation_suite=suite_store)
TotalUnits
วัด
เพิ่ม "ชุดหน่วยวัดการค้าปลีก" ด้วยความคาดหวังหนึ่งรายการ:
- ค่าของคอลัมน์ควรมากกว่า 50,000
suite_measure = context.add_expectation_suite("Retail Measure Suite")
suite_measure.add_expectation(ExpectationConfiguration(
"expect_column_values_to_be_between",
{
"column": "TotalUnits",
"min_value": 50000
}
))
context.add_or_update_expectation_suite(expectation_suite=suite_measure)
Total Units Ratio
Dax
เพิ่ม "ชุด DAX ด้านการขายปลีก" ด้วยความคาดหวังหนึ่งอย่าง:
- ค่าคอลัมน์สําหรับอัตราส่วนของผลรวมหน่วยควรอยู่ระหว่าง 0.8 และ 1.5
suite_dax = context.add_expectation_suite("Retail DAX Suite")
suite_dax.add_expectation(ExpectationConfiguration(
"expect_column_values_to_be_between",
{
"column": "[Total Units Ratio]",
"min_value": 0.8,
"max_value": 1.5
}
))
context.add_or_update_expectation_suite(expectation_suite=suite_dax)
การละเมิด Referential Integrity (DMV)
เพิ่ม "Retail DMV Suite" ด้วยความคาดหวังหนึ่งข้อ:
- RIVIOLATION_COUNT ควรเป็น 0
suite_dmv = context.add_expectation_suite("Retail DMV Suite")
# There should be no RI violations
suite_dmv.add_expectation(ExpectationConfiguration(
"expect_column_values_to_be_in_set",
{
"column": "RIVIOLATION_COUNT",
"value_set": [0]
}
))
context.add_or_update_expectation_suite(expectation_suite=suite_dmv)
การตรวจสอบความถูกต้อง
เมื่อต้องการเรียกใช้ความคาดหวังที่ระบุกับข้อมูล ก่อนอื่นให้สร้าง จุด ตรวจสอบและเพิ่มลงในบริบท สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการกําหนดค่า Checkpoint ดู เวิร์กโฟลว์การตรวจสอบข้อมูล
checkpoint_config = {
"name": f"Retail Analysis Checkpoint",
"validations": [
{
"expectation_suite_name": "Retail Store Suite",
"batch_request": {
"datasource_name": "Retail Analysis Data Source",
"data_asset_name": "Store Asset",
},
},
{
"expectation_suite_name": "Retail Measure Suite",
"batch_request": {
"datasource_name": "Retail Analysis Data Source",
"data_asset_name": "Total Units Asset",
},
},
{
"expectation_suite_name": "Retail DAX Suite",
"batch_request": {
"datasource_name": "Retail Analysis Data Source",
"data_asset_name": "Total Units YoY Asset",
},
},
{
"expectation_suite_name": "Retail DMV Suite",
"batch_request": {
"datasource_name": "Retail Analysis Data Source",
"data_asset_name": "Referential Integrity Violation",
},
},
],
}
checkpoint = context.add_checkpoint(
**checkpoint_config
)
ตอนนี้เรียกใช้จุดตรวจสอบและแยกผลลัพธ์เป็น DataFrame ของ pandas สําหรับการจัดรูปแบบอย่างง่าย
result = checkpoint.run()
ประมวลผลและพิมพ์ผลลัพธ์ของคุณ
import pandas as pd
data = []
for run_result in result.run_results:
for validation_result in result.run_results[run_result]["validation_result"]["results"]:
row = {
"Batch ID": run_result.batch_identifier,
"type": validation_result.expectation_config.expectation_type,
"success": validation_result.success
}
row.update(dict(validation_result.result))
data.append(row)
result_df = pd.DataFrame.from_records(data)
result_df[["Batch ID", "type", "success", "element_count", "unexpected_count", "partial_unexpected_list"]]
จากผลลัพธ์เหล่านี้ คุณจะเห็นว่าความคาดหวังทั้งหมดของคุณผ่านการตรวจสอบความถูกต้อง ยกเว้น "สินทรัพย์ YoY ของหน่วยรวม" ที่คุณกําหนดผ่านคิวรี DAX แบบกําหนดเอง
การวิเคราะห์
การใช้ลิงก์เชิงความหมายคุณสามารถดึงข้อมูลต้นทางเพื่อทําความเข้าใจว่าปีใดอยู่นอกช่วง ลิงก์เชิงความหมายให้เวทมนตร์แบบอินไลน์สําหรับการดําเนินการคิวรี DAX ใช้ลิงก์เชิงความหมายเพื่อดําเนินการคิวรีเดียวกันกับที่คุณส่งผ่านไปยังแอสเซทข้อมูล GX และแสดงภาพค่าที่เป็นผลลัพธ์
%%dax "Retail Analysis Sample PBIX"
EVALUATE SUMMARIZECOLUMNS(
'Time'[FiscalYear],
'Time'[FiscalMonth],
"Total Units Ratio", DIVIDE([Total Units This Year], [Total Units Last Year])
)
บันทึกผลลัพธ์เหล่านี้ใน DataFrame
df = _
ลงจุดผลลัพธ์
import matplotlib.pyplot as plt
df["Total Units % Change YoY"] = (df["[Total Units Ratio]"] - 1)
df.set_index(["Time[FiscalYear]", "Time[FiscalMonth]"]).plot.bar(y="Total Units % Change YoY")
plt.axhline(0)
plt.axhline(-0.2, color="red", linestyle="dotted")
plt.axhline( 0.5, color="red", linestyle="dotted")
None
จากพล็อต คุณจะเห็นว่าเดือนเมษายนและกรกฎาคมอยู่นอกช่วงเวลาเล็กน้อย และสามารถดําเนินการเพิ่มเติมเพื่อตรวจสอบได้
การจัดเก็บการกําหนดค่า GX
เมื่อข้อมูลในชุดข้อมูลของคุณเปลี่ยนแปลงเมื่อเวลาผ่านไป คุณอาจต้องการรีรันการตรวจสอบ GX ที่คุณเพิ่งดําเนินการ ในปัจจุบัน บริบทข้อมูล (ประกอบด้วยแอสเซทข้อมูลที่เชื่อมต่อ ชุดความคาดหวัง และ จุดตรวจสอบ) ถ่ายทอดสดแบบพิเศษ แต่สามารถแปลงเป็นบริบทไฟล์สําหรับการใช้งานในอนาคตได้ อีกวิธีหนึ่งคือ คุณสามารถสร้างอินสแตนซ์บริบทของไฟล์ (ดู สร้างอินสแตนซ์ของบริบทข้อมูล)
context = context.convert_to_file_context()
หลังจากที่คุณบันทึกบริบท ให้ gx
คัดลอกไดเรกทอรีไปยังเลคเฮ้าส์ของคุณ
สำคัญ
เซลล์นี้สมมุติว่าคุณ เพิ่มเลคเฮาส์ ลงในสมุดบันทึก ถ้าไม่มีเลคเฮาส์ที่แนบมา คุณจะไม่เห็นข้อผิดพลาด แต่คุณจะไม่สามารถรับบริบทได้ในภายหลัง ถ้าคุณเพิ่มเลคเฮ้าส์ในตอนนี้ เคอร์เนลจะรีสตาร์ต ดังนั้นคุณจะต้องเรียกใช้สมุดบันทึกทั้งหมดอีกครั้งเพื่อย้อนกลับไปยังจุดนี้
# copy GX directory to attached lakehouse
!cp -r gx/ /lakehouse/default/Files/gx
ตอนนี้บริบทในอนาคตสามารถสร้างขึ้นด้วย context = gx.get_context(project_root_dir="<your path here>")
เพื่อใช้การกําหนดค่าทั้งหมดจากบทช่วยสอนนี้
ตัวอย่างเช่น ในสมุดบันทึกใหม่ ให้แนบ lakehouse เดียวกันและใช้ context = gx.get_context(project_root_dir="/lakehouse/default/Files/gx")
เพื่อเรียกใช้บริบท
เนื้อหาที่เกี่ยวข้อง
ดูบทช่วยสอนอื่น ๆ สําหรับลิงก์ความหมาย / SemPy:
- บทช่วยสอน: ล้างข้อมูลด้วยการขึ้นต่อกันที่ใช้งานได้
- บทช่วยสอน: วิเคราะห์การขึ้นต่อกันของฟังก์ชันในแบบจําลองความหมายตัวอย่าง
- บทช่วยสอน: แยกและคํานวณหน่วยวัด Power BI จากสมุดบันทึก Jupyter
- บทช่วยสอน: ค้นหาความสัมพันธ์ในแบบจําลองความหมายโดยใช้ลิงก์ความหมาย
- บทช่วยสอน: ค้นหาความสัมพันธ์ใน ชุดข้อมูล Synthea โดยใช้ลิงก์แสดงความหมาย