การพับคิวรี 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