การพับคิวรี FHIR
Power Query Folding คือกลไกที่ใช้โดยตัวเชื่อมต่อ Power Query เพื่อเปลี่ยนการแปลงข้อมูลเป็นคิวรีที่ถูกส่งไปยังแหล่งข้อมูล กลไกการพับนี้ช่วยให้ Power Query สามารถโหลดการเลือกข้อมูลออกได้มากที่สุดเท่าที่เป็นไปได้ไปยังแหล่งข้อมูลแทนที่จะดึงข้อมูลที่ไม่จําเป็นจํานวนมากเพื่อละทิ้งในไคลเอ็นต์เท่านั้น ตัวเชื่อมต่อ Power Query สําหรับ FHIR มีความสามารถในการพับคิวรี แต่เนื่องจากลักษณะของ การค้นหา FHIR ต้องให้ความสนใจเป็นพิเศษกับนิพจน์ Power Query เพื่อให้แน่ใจว่าการพับคิวรีจะดําเนินการเมื่อเป็นไปได้ บทความนี้อธิบายพื้นฐานของการพับ Power Query FHIR และให้คําแนะนําและตัวอย่าง
FHIR และการพับคิวรี
สมมติว่าคุณกําลังสร้างคิวรีเพื่อดึงทรัพยากร "ผู้ป่วย" จากเซิร์ฟเวอร์ FHIR และคุณสนใจผู้ป่วยที่เกิดขึ้นก่อนปี 1980 คิวรีดังกล่าวอาจมีลักษณะดังนี้:
let
Source = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null),
Patient1 = Source{[Name="Patient"]}[Data],
#"Filtered Rows" = Table.SelectRows(Patient1, each [birthDate] < #date(1980, 1, 1))
in
#"Filtered Rows"
แทนที่จะเรียกทรัพยากรผู้ป่วยทั้งหมดจากเซิร์ฟเวอร์ FHIR และกรองในไคลเอ็นต์ (Power BI) จะมีประสิทธิภาพมากกว่าในการส่งคิวรีด้วยพารามิเตอร์การค้นหาไปยังเซิร์ฟเวอร์ FHIR:
GET https://myfhirserver.azurehealthcareapis.com/Patient?birthdate=lt1980-01-01
ด้วยแบบสอบถามดังกล่าว ลูกค้าจะได้รับเฉพาะผู้ป่วยที่สนใจและไม่จําเป็นต้องละทิ้งข้อมูลในไคลเอ็นต์
ในตัวอย่างของวันเกิด การพับคิวรีนั้นตรงไปตรงมา แต่โดยทั่วไปแล้วเป็นเรื่องท้าทายใน FHIR เนื่องจากชื่อพารามิเตอร์การค้นหาไม่สอดคล้องกับชื่อเขตข้อมูลและเขตข้อมูลหลายมักจะนําไปสู่พารามิเตอร์การค้นหาเดียว
ตัวอย่างเช่น มาพิจารณาทรัพยากร Observation
และ category
เขตข้อมูล เขตข้อมูล Observation.category
อยู่ใน CodeableConcept
FHIR ซึ่งมี coding
เขตข้อมูล ซึ่งมี system
เขตข้อมูล และ code
(ในเขตข้อมูลอื่น ๆ) สมมติว่าคุณสนใจสัญญาณชีพเท่านั้น คุณจะสนใจข้อสังเกตที่ Observation.category.coding.code = "vital-signs"
แต่การค้นหา FHIR จะมีลักษณะเหมือนhttps://myfhirserver.azurehealthcareapis.com/Observation?category=vital-signs
เพื่อให้สามารถทําการพับคิวรีได้ในกรณีที่ซับซ้อนมากขึ้น ตัวเชื่อมต่อ Power Query สําหรับ FHIR จะตรงกับนิพจน์ Power Query ที่มีรายการรูปแบบนิพจน์และแปลเป็นพารามิเตอร์การค้นหาที่เหมาะสม รูปแบบนิพจน์จะถูกสร้างขึ้นจากข้อกําหนด FHIR
การจับคู่กับรูปแบบนิพจน์จะทํางานได้ดีที่สุดเมื่อนิพจน์การเลือกใดๆ (การกรอง) ดําเนินการโดยเร็วที่สุดเท่าที่เป็นไปได้ในขั้นตอนการแปลงข้อมูลก่อนการจัดรูปร่างข้อมูลอื่น ๆ
หมายเหตุ
เพื่อให้กลไกจัดการ Power Query มีโอกาสดีที่สุดที่จะทําการพับคิวรี คุณควรทํานิพจน์การเลือกข้อมูลทั้งหมดก่อนการจัดรูปร่างข้อมูลใด ๆ
ตัวอย่างการพับคิวรี
เพื่อแสดงให้เห็นถึงการพับคิวรีที่มีประสิทธิภาพ เราจะแนะนําตัวอย่างของการรับสัญญาณชีพทั้งหมดจากทรัพยากรการสังเกตการณ์ วิธีง่ายๆ ในการทําเช่นนี้คือการขยาย Observation.category
เขตข้อมูลก่อน จากนั้นจึงขยาย Observation.category.coding
และกรอง คิวรีจะมีลักษณะดังนี้:
// Inefficient Power Query
let
Source = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null),
Observation = Source{[Name="Observation"]}[Data],
ExpandCategory = Table.ExpandTableColumn(Observation, "category", {"coding"}, {"category.coding"}),
ExpandCoding = Table.ExpandTableColumn(ExpandCategory, "category.coding", {"system", "code"}, {"category.coding.system", "category.coding.code"}),
FilteredRows = Table.SelectRows(ExpandCoding, each ([category.coding.code] = "vital-signs"))
in
FilteredRows
น่าเสียดายที่กลไก Power Query ไม่จดจําว่าเป็นรูปแบบการเลือกที่แมปกับ category
พารามิเตอร์การค้นหาแต่ถ้าคุณปรับโครงสร้างคิวรีใหม่เป็น:
// Efficient Power Query allowing folding
let
Source = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null),
Observation = Source{[Name="Observation"]}[Data],
FilteredObservations = Table.SelectRows(Observation, each Table.MatchesAnyRows([category], each Table.MatchesAnyRows([coding], each [code] = "vital-signs"))),
ExpandCategory = Table.ExpandTableColumn(FilteredObservations, "category", {"coding"}, {"category.coding"}),
ExpandCoding = Table.ExpandTableColumn(ExpandCategory, "category.coding", {"system", "code"}, {"category.coding.system", "category.coding.code"})
in
ExpandCoding
คิวรีค้นหา /Observation?category=vital-signs
จะถูกส่งไปยังเซิร์ฟเวอร์ FHIR ซึ่งจะลดจํานวนข้อมูลที่ไคลเอ็นต์ได้รับจากเซิร์ฟเวอร์
ในขณะที่นิพจน์ Power Query แรกและที่สองส่งผลในชุดข้อมูลเดียวกัน โดยทั่วไปแล้วจะส่งผลให้ประสิทธิภาพการทํางานของคิวรีดีขึ้น สิ่งสําคัญคือต้องทราบว่าคิวรีรุ่นที่สองมีประสิทธิภาพมากกว่าไม่สามารถรับได้อย่างหมดจดผ่านการจัดรูปร่างข้อมูลด้วยส่วนติดต่อผู้ใช้แบบกราฟิก (GUI) จําเป็นต้องเขียนคิวรีในตัวแก้ไขขั้นสูงของ Power Query
การสํารวจข้อมูลเริ่มต้นสามารถทําได้ด้วยตัวแก้ไขคิวรี GUI แต่เราขอแนะนําให้คุณปรับโครงสร้างคิวรีใหม่โดยคํานึงถึงการพับคิวรี โดยเฉพาะ คิวรีแบบใช้เลือก (การกรอง) ควรดําเนินการโดยเร็วที่สุดเท่าที่เป็นไปได้
ค้นหารูปแบบการพับ
ตัวเชื่อมต่อ Power Query สําหรับ FHIR จะสามารถทําการพับคิวรีได้ก็ต่อเมื่อนิพจน์ Power Query แมปกับพารามิเตอร์การค้นหาที่รู้จักตามที่กําหนดโดยข้อกําหนด FHIR หากคุณสงสัยว่าสามารถทําการพับคิวรีได้หรือไม่ เราขอแนะนําให้คุณศึกษา ข้อกําหนด FHIR แต่ละทรัพยากรจะแสดงชุดพารามิเตอร์การค้นหาไว้ด้านล่างของหน้าข้อมูลจําเพาะ คุณยังสามารถดูหน้า รูปแบบ คิวรีแบบพับได้สําหรับตัวอย่างของวิธีการเขียนนิพจน์ Power Query แบบพับได้สําหรับ FHIR
การดีบักการพับคิวรี
ถ้าคุณกําลังพยายามตรวจสอบว่านิพจน์ Power Query ที่กําหนดถูกพับหรือไม่และนิพจน์การค้นหา FHIR ที่เกิดขึ้นคืออะไร คุณสามารถเริ่มต้น Fiddler ขณะจัดรูปร่างคิวรีใน Power BI Desktop ได้
สรุป
การพับคิวรีให้นิพจน์ Power Query ที่มีประสิทธิภาพมากขึ้น Power Query ที่สร้างขึ้นอย่างเหมาะสมช่วยให้สามารถทําการพับคิวรีได้ และดังนั้นจึงโหลดภาระการกรองข้อมูลจํานวนมากไปยังแหล่งข้อมูล
ขั้นตอนถัดไป
ในบทความนี้ คุณได้เรียนรู้วิธีการใช้การพับคิวรีในตัวเชื่อมต่อ Power Query สําหรับ FHIR ถัดไป สํารวจรายการของรูปแบบการพับ Power Query FHIR
คำติชม
https://aka.ms/ContentUserFeedback
เร็วๆ นี้: ตลอดปี 2024 เราจะขจัดปัญหา GitHub เพื่อเป็นกลไกคำติชมสำหรับเนื้อหา และแทนที่ด้วยระบบคำติชมใหม่ สำหรับข้อมูลเพิ่มเติม ให้ดู:ส่งและดูข้อคิดเห็นสำหรับ