บทช่วยสอน: สร้างการกําหนดเส้นทางใบสั่งงานแบบเรียลไทม์ด้วย Fabric Maps

Microsoft Fabric Maps ให้การแสดงภาพและการวิเคราะห์เชิงพื้นที่เพื่อมอบข้อมูลเชิงลึกที่นําไปใช้ได้จริงจากข้อมูลเชิงพื้นที่แบบเรียลไทม์และในอดีต

ในบทช่วยสอนนี้ ผู้มอบหมายงานภาคสนามสาธารณูปโภคไฟฟ้าใช้ Microsoft Fabric Maps เพื่อสร้างและจัดการใบสั่งงานซ่อมแซมเมื่อมีการรายงานการหยุดทํางานหรือข้อบกพร่องของสินทรัพย์ สถานการณ์นี้มุ่งเน้นไปที่การค้นหาลูกค้าที่ได้รับผลกระทบ การแสดงภาพใบสั่งงานที่ใช้งานอยู่แบบเรียลไทม์ และส่งทีมงานอย่างมีประสิทธิภาพเพื่อการกู้คืนบริการ

บทช่วยสอนนี้สาธิตวิธีการแมปตําแหน่งที่ตั้งของลูกค้า ใบสั่งงานสดปรากฏบนแผนที่ และคํานวณเส้นทางที่เหมาะสมที่สุดโดยใช้ API เส้นทางเส้นทาง แผนที่ Azure บทช่วยสอนจบลงด้วยเส้นทางที่ปรับให้เหมาะสมที่แสดงบนแผนที่

Fabric Maps ทํางานภายใน Fabric Real-Time Intelligence โดยนําเข้าการวัดและส่งข้อมูลทางไกลแบบสตรีมมิ่งโดยใช้ Eventstream และ Eventhouse สําหรับการตรวจสอบแบบเรียลไทม์ ความสมบูรณ์ของใบสั่งงานและผลลัพธ์การดําเนินงานจะถูกเก็บไว้ใน OneLake ซึ่งสามารถใช้สําหรับการปรับกระบวนการผลิตให้เหมาะสมและการวิเคราะห์ที่แสดงบนแผนที่

ในบทช่วยสอนนี้ คุณจะ:

  • สร้างเลคเฮาส์และอัปโหลดข้อมูลใบสั่งงานตัวอย่าง
  • ตั้งค่าสตรีมเหตุการณ์เพื่อเขียนข้อมูลใบสั่งงานไปยังบ้านเหตุการณ์
  • สร้างฟังก์ชัน Kusto เพื่อแยกพิกัดลูกค้าจากข้อมูลใบสั่งงานที่นําเข้า
  • สร้างแผนที่และเพิ่มฟังก์ชันเป็นเลเยอร์แผนที่
  • คํานวณเส้นทางที่เหมาะสมที่สุดโดยใช้ API เส้นทางเส้นทาง แผนที่ Azure
  • เพิ่มเส้นทางที่ปรับให้เหมาะสมลงในแผนที่เป็นเลเยอร์
  • กําหนดการตั้งค่าแผนที่และเลเยอร์

ข้อกําหนดเบื้องต้น

ก่อนเริ่มบทเรียนนี้ ให้ทบทวน บทเรียนReal-Time Intelligence เพื่อทําความคุ้นเคยกับแนวคิดหลักและกระบวนการทํางาน

สร้างเลคเฮาส์และอัปโหลดข้อมูลใบสั่งงานตัวอย่าง

ในการจําลองแหล่งที่มาของการสตรีมแบบเรียลไทม์ สมุดบันทึกในขั้นตอนต่อไปนี้จะใช้ข้อมูลตัวอย่างที่อัปโหลดไปยังเลคเฮาส์ ในการผลิต ข้อมูลนี้จะถูกสตรีมแทนที่จะเป็นแบบคงที่

สร้างไฟล์ข้อมูลใบสั่งงาน

ไฟล์ข้อมูลใบสั่งงานประกอบด้วยเรกคอร์ดใบสั่งงานตัวอย่างที่ใช้ในบทช่วยสอนนี้เพื่อจําลองแหล่งที่มาของการสตรีมแบบเรียลไทม์ หลังจากสร้างไฟล์แล้ว ให้นําเข้าไฟล์ไปยังบ้านพักริมทะเลสาบในขั้นตอนถัดไป

คัดลอกและวางเนื้อหาต่อไปนี้ลงในไฟล์ข้อความ แล้วบันทึกเป็นไฟล์WorkorderLocations.csv คุณใช้ไฟล์นี้ในขั้นตอนถัดไป

WorkorderID,Latitude,Longitude
100,48.22610712,16.32977412
101,48.23519063,16.37364699
102,48.19785896,16.38669028
103,48.18125837,16.37068261
107,48.15151126,16.41766590
108,48.20290349,16.32492121
104,48.23400591,16.4563533
105,48.18145603,16.40506946
106,48.16366378,16.36001083

สร้างเลคเฮาส์และนําเข้าไฟล์ข้อมูลใบสั่งงาน

สร้างบ้านทะเลสาบใหม่สําหรับข้อมูลคําสั่งงานที่เข้ามาและนําเข้าไฟล์ตําแหน่งคําสั่งงาน

  1. จากพื้นที่ทํางานของคุณ เลือก รายการ ใหม่ พิมพ์ lakehouse ในช่องค้นหา แล้วเลือกเพื่อสร้าง lakehouse ใหม่
  2. ป้อนชื่อ WorkorderLocationsLakehouse แล้วเลือก สร้าง
  3. ในบ้านพักทะเลสาบใหม่ ให้เลือก อัปโหลดไฟล์ และอัปโหลดไฟล์ WorkorderLocations.csv
  4. ในเลคเฮาส์ใหม่ ให้เลือกบานหน้าต่าง Explorer ทางด้านซ้ายของหน้าจอ
  5. ในส่วน ไฟล์ ของ Explorer ให้เลือก WorkorderLocations.csv เพื่อดูไฟล์ที่คุณอัปโหลด
  6. ในการตั้งค่ามุมมอง ให้เลือก แถวแรกเป็นส่วนหัว
  7. (ไม่บังคับ) ในรายการดรอปดาวน์มุมมอง ให้เลือก มุมมองตาราง

ภาพหน้าจอของไฟล์ WorkorderLocations.csv หลังจากนําเข้าไปยังเลคเฮาส์

สร้างสตรีมเหตุการณ์และเขียนข้อมูลไปยังบ้านเหตุการณ์

ในส่วนนี้ คุณออกแบบโฟลว์ eventstream โดยใช้จุดสิ้นสุดแบบกําหนดเอง และส่งข้อมูลโดยใช้สมุดบันทึกเพื่อจําลองการสตรีมแบบเรียลไทม์

Microsoft Fabric Eventstream เป็นบริการสตรีมข้อมูลแบบเรียลไทม์ที่ช่วยให้คุณสามารถนําเข้า ประมวลผล และส่งต่อข้อมูลเหตุการณ์ภายในระบบนิเวศของ Microsoft Fabric ได้ มอบประสบการณ์แบบไม่ใช้โค้ดสําหรับการสร้างเวิร์กโฟลว์ที่ขับเคลื่อนด้วยเหตุการณ์ ช่วยให้สามารถรวมข้อมูลแบบเรียลไทม์จากแหล่งต่างๆ ได้อย่างราบรื่นและกําหนดเส้นทางไปยังปลายทางหลายแห่ง สําหรับข้อมูลเพิ่มเติมเกี่ยวกับแหล่งข้อมูลที่รองรับหรือวิธีเชื่อมต่อกับปลายทางที่กําหนดเอง โปรดดูภาพรวมของ Microsoft Fabric eventstreams

โดยการนําข้อมูล eventstream เข้าสู่ eventhouse คุณจะทําให้เหตุการณ์สตรีมมิ่งพร้อมใช้งานสําหรับ Kusto ซึ่งคุณสามารถแปลงและวิเคราะห์แบบเรียลไทม์โดยใช้ตารางหรือฟังก์ชัน สําหรับข้อมูลเพิ่มเติม ให้ดู ภาพรวมอีเวนต์เฮ้าส์

สร้างสตรีมเหตุการณ์และบ้านเหตุการณ์

  1. จากพื้นที่ทํางานของคุณ ให้เลือก รายการใหม่ และป้อน eventstream ในกล่องค้นหา

  2. เลือก Eventstream

  3. ในกล่องโต้ตอบ New Eventstream ให้ป้อนชื่อ: "WorkordersEventstream" แล้วเลือก สร้าง

  4. ในหน้าจอออกแบบโฟลว์เพื่อนําเข้า แปลง และกําหนดเส้นทางเหตุการณ์สตรีม ให้เลือก ใช้จุดสิ้นสุดที่กําหนดเอง

    สกรีนช็อตของหน้าจอ ออกแบบโฟลว์เพื่อนําเข้า แปลง และกําหนดเส้นทางเหตุการณ์การสตรีมใน Fabric ซึ่งแสดงตัวเลือกในการใช้ตําแหน่งข้อมูลแบบกําหนดเอง

  5. ในกล่องโต้ตอบเพิ่มแหล่งที่มาปลายทางแบบกําหนดเอง ให้เลือก เพิ่ม

    สกรีนช็อตของกล่องโต้ตอบ เพิ่มแหล่งที่มา สําหรับตําแหน่งข้อมูลแบบกําหนดเองใน Microsoft Fabric ที่แสดงการนําทางเบรดครัมบ์ที่มีลูกศรปลายทางแบบกําหนดเอง WorkordersEventstream ที่ด้านบน กล่องโต้ตอบประกอบด้วยฟิลด์ชื่อแหล่งที่มาที่มีเครื่องหมายดอกจันสีแดงทําเครื่องหมายว่าจําเป็นซึ่งมีข้อความ CustomEndpoint-Source ปุ่มเพิ่มสีนกเป็ดน้ําจะถูกไฮไลต์ที่มุมล่างขวาของกล่องโต้ตอบซึ่งระบุว่าควรเลือกโดยไม่จําเป็นต้องดําเนินการใดๆ เพิ่มเติม

    สตรีมเหตุการณ์ถูกสร้างขึ้นแล้ว จากนั้นเพิ่ม Eventhouse เป็นปลายทาง

  6. ในโหนด WorkordersEventstream ของตัวออกแบบ eventstream ให้เลือก Eventhouse จากรายการดรอปดาวน์ แปลงเหตุการณ์หรือเพิ่มปลายทาง

    สกรีนช็อตของตัวออกแบบสตรีมเหตุการณ์ Microsoft Fabric ที่แสดงไดอะแกรมโฟลว์ที่มี CustomEndpoint-Source เชื่อมต่อกับโหนด WorkordersEventstream เมนูแบบเลื่อนลงถูกขยายจากไทล์ Transform events หรือ add destination ทางด้านขวา โดยแสดงส่วน Destinations ที่ด้านล่างซึ่งแสดงตัวเลือกต่างๆ รวมถึง Eventhouse ซึ่งไฮไลต์ด้วยสี่เหลี่ยมผืนผ้าสีแดงที่ระบุว่าควรเลือก

  7. บานหน้าต่าง การกําหนดค่าปลายทางของบ้านเหตุการณ์ จะปรากฏทางด้านขวาของหน้าจอ กรอกรายละเอียดที่ร้องขอดังนี้ จากนั้นเลือก บันทึก:

    1. โหมดการนําเข้าข้อมูล: ตั้งค่าเป็น การประมวลผลเหตุการณ์ก่อนการนําเข้า
    2. ชื่อปลายทาง: ตั้งค่าเป็น WorkordersEventhouse
    3. พื้นที่ทํางาน: ดรอปดาวน์ที่แสดงชื่อพื้นที่ทํางานของคุณ
    4. Eventhouse: เลือก สร้างใหม่ และสร้าง Eventhouse ชื่อ WorkordersEventhouse
    5. ฐานข้อมูล KQL: เลือก WorkordersEventhouse
    6. ตารางปลายทาง KQL: เลือกลิงก์ สร้างใหม่ และสร้างตารางใหม่ที่ชื่อ ใบสั่งงาน
    7. รูปแบบข้อมูลอินพุต: เลือก Json
    8. เปิดใช้งานการนําเข้าหลังจากเพิ่มแหล่งข้อมูล: เลือกช่องทําเครื่องหมาย

    สกรีนช็อตที่แสดงบานหน้าต่างการกําหนดค่าปลายทางของ Eventhouse ที่แสดงโหมดการนําเข้าข้อมูลที่มีการประมวลผลเหตุการณ์ก่อนการเลือก, ชื่อปลายทางที่ตั้งค่าเป็น WorkordersEventhouse, ดรอปดาวน์พื้นที่ทํางานที่แสดงพื้นที่ทํางานของฉัน, ดรอปดาวน์ Eventhouse ที่แสดง WorkordersEventhouse พร้อมสร้างลิงก์ใหม่, ดรอปดาวน์ฐานข้อมูล KQL ที่แสดง WorkordersEventhouse, ดรอปดาวน์ตารางปลายทาง KQL ที่แสดง New WorkordersEventhouse พร้อมสร้างลิงก์ใหม่, เปิดใช้งานการนําเข้าหลังจากเพิ่มแหล่งข้อมูลในช่องทําเครื่องหมาย ทําเครื่องหมายและปุ่มบันทึกสีเขียวที่ด้านล่าง

  8. เมื่อเพิ่มบ้านเหตุการณ์เป็นปลายทางแล้ว ให้เลือก เผยแพร่ เพื่อเผยแพร่สตรีมเหตุการณ์ใหม่ของคุณ

    สกรีนช็อตที่แสดงตัวออกแบบ Eventstream ที่แสดงโฟลว์ที่มีแหล่งข้อมูล CustomEndpoint-Workorders เชื่อมต่อกับโหนดสตรีมใบสั่งงาน ซึ่งเชื่อมต่อกับปลายทาง WorkordersEventhouse ปุ่ม เผยแพร่ จะถูกไฮไลต์ที่มุมขวาบนของแถบเครื่องมือ แบนเนอร์โหมดแก้ไขจะระบุว่าการเปลี่ยนแปลงจะใช้งานได้เมื่อเผยแพร่แล้ว

รับคีย์การรับรองความถูกต้องของคีย์ SAS ที่จําเป็น

คุณต้องมี ชื่อฮับเหตุการณ์ และ ค่าคีย์หลักของสตริงการเชื่อมต่อ จากส่วน การรับรองความถูกต้องของคีย์ SAS ในโค้ดสมุดบันทึกของคุณ

  1. เลือกไทล์แหล่งที่มาปลายทางแบบกําหนดเองที่คุณเพิ่งเพิ่ม

  2. ในบานหน้าต่าง รายละเอียด ให้เลือก การรับรองความถูกต้องด้วยคีย์ SAS

  3. คัดลอกค่าสองค่าต่อไปนี้และบันทึกไว้เพื่อใช้ในโค้ดสมุดบันทึกของคุณ

    • ชื่อฮับเหตุการณ์: ใช้สําหรับตัวแปร EVENT_HUB_NAME
    • คีย์หลักสตริงการเชื่อมต่อ: ใช้สําหรับตัวแปร CONNECTION_STR

    สกรีนช็อตที่แสดงตัวออกแบบ Eventstream พร้อมตัวเลือก การรับรองความถูกต้องของคีย์ SAS ที่เลือกในบานหน้าต่างรายละเอียด โดยเน้นฟิลด์ ชื่อฮับเหตุการณ์ และ ฟิลด์คีย์หลักของสตริงการเชื่อมต่อ ที่ใช้ในโค้ดสมุดบันทึกของขั้นตอนต่อมาในบทช่วยสอนนี้

จําลองการนําเข้าแบบเรียลไทม์โดยใช้โน้ตบุ๊ก

ในส่วนนี้ คุณจะสร้างสมุดบันทึกที่เชื่อมต่อกับเลคเฮาส์ที่คุณสร้างไว้ก่อนหน้านี้ จากนั้นใช้โค้ดที่ให้มาเพื่ออ่านข้อมูล CSV และส่งเหตุการณ์ไปยังสตรีมเหตุการณ์ กระบวนการนี้จําลองการรับข้อมูลแบบเรียลไทม์ สําหรับการสาธิต คุณสามารถรันสมุดบันทึกด้วยตนเองหรือกําหนดเวลาให้ทํางานเป็นระยะ ๆ

สร้างสมุดบันทึกในพื้นที่ทํางาน Fabric ของคุณ

สร้างสมุดบันทึกด้วยโค้ดเพื่อนําเข้าไฟล์ตําแหน่งที่ตั้งของใบสั่งงานจากเลคเฮาส์ของคุณไปยังสตรีมเหตุการณ์ที่คุณสร้างขึ้นในส่วนก่อนหน้า สิ่งนี้จําลองแหล่งสตรีมแบบเรียลไทม์ ซึ่งในสภาพแวดล้อมการผลิตจะสตรีมข้อมูลแทนที่จะใช้ข้อมูลคงที่

  1. จากพื้นที่ทํางานของคุณ ให้เลือก รายการใหม่ และใส่ สมุดบันทึก ในกล่องค้นหา

  2. เลือก สมุดบันทึก

    สกรีนช็อตของกล่องโต้ตอบรายการใหม่ของ Microsoft Fabric พร้อมกล่องค้นหาที่มีสมุดบันทึกข้อความ ผลการค้นหาจะแสดงไทล์สมุดบันทึกที่มีไอคอนเอกสาร ซึ่งแสดงคําอธิบาย สร้างสมุดบันทึกเพื่อสํารวจข้อมูลและสร้างแบบจําลองการเรียนรู้ของเครื่อง ตัวเลือกสมุดบันทึกจะถูกไฮไลต์เพื่อระบุว่าสามารถเลือกเพื่อสร้างรายการสมุดบันทึกใหม่ได้

  3. ในกล่องโต้ตอบ สมุดบันทึกใหม่ ให้ป้อน WorkorderLocations ในฟิลด์ ชื่อ จากนั้นเลือก สร้าง

  4. เมื่อต้องการเชื่อมต่อสมุดบันทึกของคุณกับเลคเฮาส์ ให้เลือก จากแค็ตตาล็อก OneLake จากรายการดรอปดาวน์ เพิ่มรายการข้อมูล

    สกรีนช็อตของบานหน้าต่าง Microsoft Fabric Explorer ที่แสดงแท็บ รายการข้อมูล ที่เลือกไว้ พร้อมข้อความ ไม่มีการเพิ่มแหล่งข้อมูล และไอคอนโฟลเดอร์ว่างเปล่า ด้านล่างข้อความคือปุ่มดรอปดาวน์ เพิ่มรายการข้อมูลที่ขยายเพื่อแสดงตัวเลือกเมนูสามตัวเลือก: จากแค็ตตาล็อก OneLake ที่มีไอคอนฐานข้อมูล จากฮับ Real-Time ที่มีไอคอนสายฟ้า และ New lakehouse ที่มีเครื่องหมายบวก ตัวเลือกแค็ตตาล็อก จาก OneLake ถูกเน้นด้วยเส้นขอบสีเข้มที่ระบุการเลือก

  5. เลือก WorkorderLocationsLakehouse จากแค็ตตาล็อก OneLake และเลือกปุ่ม เชื่อมต่อ บ้านริมทะเลสาบหลังนี้คือบ้านที่คุณสร้างไว้ก่อนหน้านี้

  6. หลังจากสร้างสมุดบันทึกและเชื่อมต่อกับบ้านพักริมทะเลสาบของคุณแล้ว ให้วางโค้ดต่อไปนี้ลงในเซลล์แรกและรันเพื่อทําการติดตั้ง Azure Event Hubs SDK:

    # Install Azure Event Hubs SDK (only needed once per environment)
    %pip install azure-eventhub
    
  7. เลือก + รหัส เพื่อสร้างเซลล์ใหม่ในสมุดบันทึก

    ภาพหน้าจออินเทอร์เฟซโน้ตบุ๊ก Microsoft Fabric ที่แสดงเซลล์โค้ดที่มีโค้ด Python สองบรรทัด บรรทัดที่ 1 มีความคิดเห็นว่า ติดตั้ง Azure Event Hubs SDK จําเป็นเพียงครั้งเดียวต่อสภาพแวดล้อม บรรทัดที่ 2 แสดงคําสั่ง pip install เปอร์เซ็นต์ pip install azure-eventhub ใต้เซลล์โค้ด จะมีคําอธิบายเครื่องมือแสดง Add code cell โดยชี้ไปที่ปุ่มโค้ดบวกที่เน้นด้วยสี่เหลี่ยมสีแดง ปุ่ม Markdown บวกจะปรากฏทางขวา มุมขวาบนแสดง PySpark Python เป็นเคอร์เนลที่เลือก

  8. เลือกเซลล์ใหม่และป้อนรหัสต่อไปนี้ลงไป:

    from azure.eventhub import EventHubProducerClient, EventData
    import pandas as pd
    import json
    import time
    
    # Replace with your actual connection string and Event Hub name
    CONNECTION_STR = "" # Connection string-primary key
    EVENT_HUB_NAME = "" # Event hub name
    producer = EventHubProducerClient.from_connection_string(conn_str=CONNECTION_STR, eventhub_name=EVENT_HUB_NAME)
    
    df = spark.read.csv("Files/WorkorderLocations.csv", header=True, inferSchema=True)
    pdf = df.toPandas()
    total_records = len(pdf)
    
    for index, row in pdf.iterrows():
        # Convert row to dictionary
        row_dict = row.to_dict()
    
        # Truncate coordinates to 5 decimal digits
        if 'lat' in row_dict:
            row_dict['Latitude'] = round(float(row_dict['Latitude']), 5)
        if 'lon' in row_dict:
            row_dict['Longitude'] = round(float(row_dict['Longitude']), 5)
    
        # Serialize to JSON
        payload = json.dumps(row_dict)
    
        # Send to Event Hub
        event_data = EventData(payload)
        with producer:
            producer.send_batch([event_data])
    
        # Wait 100ms
        time.sleep(0.1)
    
  9. เพิ่มค่าของตัวแปร CONNECTION_STR และ EVENT_HUB_NAME ที่คุณได้รับในส่วนก่อนหน้า ชื่อว่า รับคีย์การตรวจสอบสิทธิ์ที่จําเป็นของ SAS key

  10. เรียกใช้โค้ดสมุดบันทึก ซึ่งจะสร้างตารางใบสั่งงานในฐานข้อมูล KQL ในงาน WorkordersEventhouse

สกรีนช็อตของอินเทอร์เฟซ Microsoft Fabric Eventhouse ที่แสดงตาราง ใบสั่งงาน พร้อมแท็บ แสดงตัวอย่างข้อมูล ที่เลือกไว้ แผงการนําทางด้านซ้ายแสดงแผนผังฐานข้อมูล KQL ที่มี WorkordersEventhouse ขยาย ซึ่งประกอบด้วยตารางที่เลือกตาราง ใบสั่งงาน

สร้างฟังก์ชัน Kusto และเพิ่มเป็นเลเยอร์แผนที่

ในส่วนนี้ คุณสร้างฟังก์ชัน Kusto ที่ดึงข้อมูลตําแหน่งที่ตั้งของใบสั่งงานปัจจุบันจากตาราง ใบสั่งงาน ในบ้านเหตุการณ์ของคุณ แล้วใช้ฟังก์ชันนั้นเป็นแหล่งข้อมูลสําหรับแผนที่ Fabric Maps ฟังก์ชันนี้ช่วยให้แผนที่สามารถแสดงใบสั่งงานที่ใช้งานอยู่เป็นเลเยอร์ โดยให้มุมมองภาพของงานที่ต้องวางแผนและมอบหมายให้กับคณะทํางานภาคสนาม

สร้างฟังก์ชัน Kusto

จากบ้านกิจกรรมของคุณ (ฐานข้อมูล KQL):

  1. เปิด ฐานข้อมูล KQL ที่เชื่อมโยงกับอีเวนต์เฮาส์ของคุณ

  2. เลือก ที่ Functions จากนั้นเลือก ที่ New function.

    ภาพหน้าจอแสดงส่วนฟังก์ชันของอินเทอร์เฟซฐานข้อมูล WorkordersEventhouse ที่แสดงสถานะว่างเปล่าพร้อมไอคอนวงกลมขนาดใหญ่ที่มีสี่เหลี่ยมซ้อนกัน หัวข้อหลักเขียนว่า ไม่มีฟังก์ชันที่มีข้อความสนับสนุน ระบุว่าเมื่อคุณสร้างฟังก์ชัน ฟังก์ชันเหล่านั้นจะปรากฏที่นี่ ปุ่มสีเขียวเด่นชัดที่มีป้ายกํากับ + ฟังก์ชันใหม่ตั้งอยู่ตรงกลางด้านล่างของแผง เชิญชวนผู้ใช้ให้สร้างฟังก์ชันแรกของตนเอง แถบด้านซ้ายแสดงโครงสร้างนําทางฐานข้อมูลที่เลือกโฟลเดอร์ Functions และเน้นด้วยขอบสีแดง

    ขั้นตอนนี้จะสร้างคําสั่งค้นหาที่เมื่อรันจะสร้างฟังก์ชันใหม่ชื่อ WorkordersFunction

  3. ใส่คิวรีต่อไปนี้:

    .create-or-alter function WorkordersFunction()
    {
        Workorders
        | project Latitude, Longitude, WorkorderID
    }
    
  4. เรียกใช้คิวรี

    ภาพหน้าจอของอินเทอร์เฟซ Microsoft Fabric Eventhouse ที่แสดงส่วน ฟังก์ชัน ที่มีการสร้างฟังก์ชัน Kusto ใหม่ชื่อ WorkordersFunction แถบด้านข้างด้านซ้ายแสดงแผนผังการนําทางโดยเลือกโฟลเดอร์ฟังก์ชัน แผงตัวแก้ไขหลักแสดงโค้ดคิวรี KQL: .create-or-alter function WorkordersFunction() { Workorders | project Latitude, Longitude, WorkorderID } ปุ่มเรียกใช้จะปรากฏในแถบเครื่องมือที่ด้านบน พร้อมที่จะดําเนินการคิวรีการสร้างฟังก์ชัน ขั้นตอนนี้สร้างแหล่งข้อมูลที่นํากลับมาใช้ใหม่ได้ซึ่งแยกพิกัดของลูกค้าจากข้อมูลใบสั่งงานเพื่อใช้ในการแสดงภาพแผนที่

    1 & 2 - แบบสอบถาม KQL ที่ใช้ในการสร้างฟังก์ชัน WorkordersFunction

    3 - ฟังก์ชัน WorkordersFunction ที่สร้างขึ้นใหม่

  5. ในโฟลเดอร์ Functions ให้เลือก WorkordersFunction จากนั้นเลือก Preview results เพื่อยืนยันว่าส่งคืนระเบียนคําสั่งงานที่มีฟิลด์ตําแหน่งที่ถูกต้อง

    สกรีนช็อตของอินเทอร์เฟซ Microsoft Fabric Eventhouse ที่แสดงฟังก์ชัน WorkordersFunction Kusto พร้อมผลลัพธ์ที่แสดงในตารางแสดงตัวอย่าง แถบด้านข้างด้านซ้ายจะแสดงแผนผังการนําทางฐานข้อมูลโดยเลือกโฟลเดอร์ Functions ซึ่งแสดง WorkordersFunction ที่สร้างขึ้นใหม่ แผงหลักประกอบด้วยรหัสคิวรี KQL ฟังก์ชัน .create-or-alter WorkordersFunction() { Workorders | project Latitude, Longitude, WorkorderID } ด้านล่างเครื่องมือแก้ไขคิวรี ส่วนผลลัพธ์แสดงตัวอย่างจะแสดงตารางข้อมูลที่มีคอลัมน์สําหรับละติจูด ลองจิจูด และ WorkorderID ซึ่งประกอบด้วยระเบียนใบสั่งงานเก้ารายการที่มีค่าพิกัดในภูมิภาคเวียนนา ออสเตรีย (ละติจูดประมาณ 48 องศาเหนือและลองจิจูด 16 องศาตะวันออก) การมีเรกคอร์ดตําแหน่งที่ตั้งที่ถูกต้องหลายเรกคอร์ดแสดงให้เห็นว่าฟังก์ชันสามารถแยกพิกัดของลูกค้าจากตารางใบสั่งงานเพื่อวัตถุประสงค์ในการแสดงภาพแผนที่ได้สําเร็จ

ฟังก์ชันนี้ทําหน้าที่เป็นแหล่งข้อมูลที่นํากลับมาใช้ใหม่ได้สําหรับชั้นข้อมูลแผนที่ Fabric Maps ซึ่งจะแสดงให้เห็นในส่วนถัดไป

สร้างแผนที่และเพิ่มฟังก์ชันเป็นเลเยอร์

ในส่วนนี้ คุณจะสร้างแผนที่ Fabric Maps และใช้ฟังก์ชัน KQL ที่สร้างไว้ก่อนหน้านี้เป็นเลเยอร์ข้อมูล แผนที่ได้รับการกําหนดค่าด้วยช่วงเวลาการรีเฟรชเพื่อให้ข้อมูลใบสั่งงานสตรีมมิ่งอัปเดตโดยอัตโนมัติ โดยให้มุมมองเชิงพื้นที่แบบเกือบเรียลไทม์ของใบสั่งงานที่ใช้งานอยู่ จากนั้นคุณเปลี่ยนชื่อเลเยอร์และปรับการตั้งค่าเพื่อควบคุมวิธีแสดงข้อมูลบนแผนที่ บริบทเชิงพื้นที่แบบสดนี้ช่วยให้ผู้มอบหมายงานตรวจสอบกิจกรรมภาคสนาม ประเมินความต้องการในพื้นที่ให้บริการ และตัดสินใจกําหนดเส้นทางและการมอบหมายงานอย่างมีข้อมูลมากขึ้น

สร้างแผนที่ใหม่

  1. จากพื้นที่ทํางานของคุณ ให้เลือก รายการใหม่
  2. ในบานหน้าต่างรายการใหม่ ให้พิมพ์แผนที่ในช่องค้นหา แล้วเลือก แผนที่
  3. ในกล่องโต้ตอบ แผนที่ใหม่ ให้ป้อน WorkordersMap ในฟิลด์ ชื่อ แล้วเลือก สร้าง

เพิ่มอีเวนต์เฮาส์ลงในแผนที่

  1. ในบานหน้าต่าง Explorer ให้เลือก รายการ Fabric จากนั้นเลือกปุ่ม เพิ่ม

  2. เลือกฐานข้อมูล KQL จากเมนูที่ปรากฏขึ้นเมื่อเลือกปุ่มเพิ่ม

    สกรีนช็อตที่แสดงอินเทอร์เฟซ Microsoft Fabric Maps ที่มีบานหน้าต่าง Explorer ทางด้านซ้ายพร้อมแท็บ รายการ Fabric และแหล่งข้อมูลภายนอก แท็บ รายการผ้า ถูกเลือกโดยมีปุ่มเพิ่มด้านล่าง โดยมีเมนูแบบเลื่อนลงด้านล่าง ซึ่งปรากฏขึ้นหลังจากเลือกปุ่มเพิ่ม มีฐานข้อมูล KQL ที่เลือกไว้ พื้นที่หลักจะแสดงแผนที่โลกเริ่มต้นในพื้นที่แผนที่

  3. จากแค็ตตาล็อก OneLake ให้เลือก eventhouse WorkordersEventhouse ที่คุณสร้างไว้ก่อนหน้านี้ จากนั้นเลือก เพิ่ม

เคล็ดลับ

หากคุณได้รับข้อผิดพลาด เช่น ฐานข้อมูล KQL มีป้ายกํากับที่ได้รับการป้องกันซึ่งจํากัดการเข้าถึง กรุณาติดต่อเจ้าของฐานข้อมูลของคุณเพื่อขอความช่วยเหลือ ตรวจสอบป้ายความไวในฐานข้อมูล KQL ของคุณ เพราะอาจจํากัดการเข้าถึง สําหรับข้อมูลเพิ่มเติม โปรดดู ใช้ป้ายชื่อระดับความลับกับสินค้า Fabric

แสดงฟังก์ชันบนแผนที่

  1. ในบานหน้าต่าง Explorer ในแผนที่ใหม่ของคุณ ให้เลือก eventhouse WorkordersEventhouse ที่คุณเพิ่มในขั้นตอนก่อนหน้า

  2. ไปที่ฟังก์ชัน KQL WorkordersFunction แล้วเลือกวงรี (...) เพื่อเปิดเมนู

  3. เลือก แสดงบนแผนที่ จากเมนูป๊อปอัป

    ภาพหน้าจอของแผง Microsoft Fabric Maps Explorer ที่แสดงโครงสร้างแผนผังลําดับชั้นพร้อมส่วนฐานข้อมูล KQL ที่ขยาย แผนผังแสดง WorkordersEventhouse ที่มีตาราง Workorders-Event และฟังก์ชัน WorkordersFunction เมนูจุดไข่ปลาจะเปิดอยู่ถัดจาก WorkordersFunction ที่แสดงตัวเลือก รวมถึง แสดงบนแผนที่ที่เน้นด้วยเส้นขอบสี่เหลี่ยมผืนผ้าสีแดง

  4. กล่องโต้ตอบ ดูข้อมูลบ้านเหตุการณ์บนแผนที่ จะปรากฏขึ้นพร้อมกับเลือกข้อมูลตัวอย่าง ไม่จําเป็นต้องเปลี่ยนแปลง ตรวจสอบให้แน่ใจว่าถูกต้อง จากนั้นเลือก ถัดไป

    สกรีนช็อตของกล่องโต้ตอบ ดูข้อมูล Eventhouse บนแผนที่ใน Microsoft Fabric ที่แสดงสามขั้นตอนทางด้านซ้าย: แสดงตัวอย่างข้อมูลด้วยเครื่องหมายถูกสีเขียว ตั้งค่าเรขาคณิต และช่วงเวลาการรีเฟรชข้อมูล และ ตรวจทานและเพิ่มลงในแผนที่ แผงหลักแสดง แสดงภาพข้อมูลเชิงพื้นที่เมื่อเวลาผ่านไปบนแผนที่พร้อมดรอปดาวน์เพื่อเลือกคิวรี KQL เพื่อแสดงภาพตั้งค่าเป็น WorkordersFunction ด้านล่างนี้คือตารางแสดงตัวอย่างผลลัพธ์แบบสอบถามที่มีคอลัมน์สําหรับ ละติจูด ลองจิจูด และ WorkorderID ที่แสดงเรกคอร์ดใบสั่งงานเก้ารายการพร้อมพิกัดในพื้นที่เวียนนา ออสเตรีย ปุ่มย้อนกลับและถัดไปจะปรากฏที่ด้านขวาล่าง

  5. ในขั้นตอน ตั้งค่ารูปทรงเรขาคณิตและช่วงเวลาการรีเฟรชข้อมูล ให้ตั้งค่าฟิลด์ดังนี้ จากนั้นเลือก ถัดไป:

    • ชื่อชั้นข้อมูล: WorkordersFunction

    • ตําแหน่งคอลัมน์เรขาคณิต: ข้อมูลละติจูดและลองจิจูดอยู่ในคอลัมน์แยกกัน

    • คอลัมน์ละติจูด: ละติจูด

    • คอลัมน์ลองจิจูด: ลองจิจูด

    • ช่วงเวลาการรีเฟรชข้อมูล: 5 นาที

      สกรีนช็อตของกล่องโต้ตอบ Microsoft Fabric ที่ชื่อว่า ดูข้อมูล Eventhouse บนแผนที่ที่แสดงขั้นตอนการกําหนดค่า ตั้งค่ารูปทรงเรขาคณิตและช่วงเวลาการรีเฟรชข้อมูล แถบด้านข้างด้านซ้ายแสดงขั้นตอนเวิร์กโฟลว์สามขั้นตอนพร้อมเครื่องหมายถูกที่ระบุว่า แสดงตัวอย่างข้อมูลเสร็จสมบูรณ์ และ ตั้งค่ารูปทรงเรขาคณิตและช่วงเวลาการรีเฟรชข้อมูลทํางานอยู่ในขณะนี้ แผงหลักประกอบด้วยส่วนชั้นข้อมูลที่มีช่องชื่อที่มี WorkordersFunction ตามด้วยส่วนคอลัมน์ข้อมูลเรขาคณิตที่มีเมนูแบบเลื่อนลง 3 รายการ ได้แก่ ตําแหน่งคอลัมน์เรขาคณิตที่ตั้งค่าเป็นข้อมูลละติจูดและลองจิจูดที่อยู่บนคอลัมน์ที่แยกจากกัน คอลัมน์ละติจูดที่ตั้งค่าเป็นละติจูด และคอลัมน์ลองจิจูดที่ตั้งค่าเป็นลองจิจูด ด้านล่างนี้คือส่วน การรีเฟรชข้อมูล พร้อมดรอปดาวน์ ช่วงเวลาการรีเฟรชข้อมูล ตั้งค่าเป็น 5 นาที ปุ่มย้อนกลับและถัดไปจะปรากฏที่มุมล่างขวา

  6. ในขั้นตอน ตรวจสอบและเพิ่มลงในแผนที่ ให้ตรวจสอบการตั้งค่าและเลือก เพิ่มลงในแผนที่

    สกรีนช็อตของกล่องโต้ตอบ Microsoft Fabric View Eventhouse data on map ที่แสดงขั้นตอนการตรวจสอบขั้นสุดท้ายและเพิ่มไปยังแผนที่ของเวิร์กโฟลว์การกําหนดค่า แถบด้านข้างด้านซ้ายแสดงขั้นตอนเวิร์กโฟลว์สามขั้นตอนตามลําดับ: แสดงตัวอย่างข้อมูลและตั้งค่ารูปทรงเรขาคณิตและช่วงเวลาการรีเฟรชข้อมูลที่เสร็จสมบูรณ์ด้วยเครื่องหมายถูกสีเขียว และ ตรวจสอบและเพิ่มลงในแผนที่ที่ใช้งานอยู่ในปัจจุบันด้วยตัวบ่งชี้จุดสีน้ําเงิน แผงหลักแสดงข้อมูลสรุปของการตั้งค่าการกําหนดค่า: ส่วนแหล่งข้อมูลแสดงฐานข้อมูล KQL เป็น WorkordersEventhouse และ queryset เป็น WorkordersFunction ส่วนชั้นข้อมูลจะแสดงชื่อเลเยอร์ WorkordersFunction ที่ทําเครื่องหมายว่าจําเป็นด้วยเครื่องหมายดอกจันสีแดง ส่วนคอลัมน์ข้อมูลเรขาคณิตแสดงช่องที่จําเป็นสามช่องที่มีเครื่องหมายดอกจันสีแดง: ตําแหน่งคอลัมน์เรขาคณิตที่ตั้งค่าเป็นข้อมูลละติจูดและลองจิจูดที่อยู่บนคอลัมน์ที่แยกจากกัน คอลัมน์ละติจูดตั้งค่าเป็นละติจูด และคอลัมน์ลองจิจูดตั้งค่าเป็นลองจิจูด ส่วน การรีเฟรชข้อมูล บ่งชี้ว่าช่วงเวลาการรีเฟรชถูกตั้งค่าเป็น 5 นาที และยังทําเครื่องหมายว่าจําเป็น ส่วนท้ายของกล่องโต้ตอบประกอบด้วยปุ่มย้อนกลับและเพิ่มลงในแผนที่ที่ด้านล่างขวา โดยมีปุ่มเพิ่มในแผนที่ถูกไฮไลต์พร้อมที่จะเสร็จสิ้นการเพิ่มเลเยอร์ข้อมูลของบ้านเหตุการณ์ลงในแผนที่

ผลลัพธ์ของฟังก์ชันจะปรากฏในแผนที่ที่อัปเดตแล้ว

สกรีนช็อตที่แสดงอินเทอร์เฟซ Microsoft Fabric Maps ที่แสดงแผนที่ของกรุงเวียนนา ออสเตรีย พร้อมเครื่องหมายวงกลมสีแดงที่ระบุตําแหน่งของใบสั่งงาน บานหน้าต่าง Explorer ทางด้านซ้ายแสดงแผนผังฐานข้อมูล KQL ที่มีรายการ WorkordersEventhouse และ WorkordersFunction แผงเลเยอร์ข้อมูลที่ด้านซ้ายบนของแผนที่จะแสดงเลเยอร์ WorkordersFunction พร้อมการสลับการมองเห็นและเมนูตัวเลือก

สร้างเส้นทางหลายจุดแวะที่ได้รับการปรับแต่งด้วย แผนที่ Azure Route Directions API

ในส่วนนี้ คุณสร้างสมุดบันทึกใหม่ที่ดึงพิกัดใบสั่งงานจากฐานข้อมูล KQL และเรียก แผนที่ Azure Route Directions REST API คุณเปิดใช้งานความสามารถในการปรับแต่งหลายจุดของบริการเพื่อกําหนดลําดับที่มีประสิทธิภาพที่สุดในการเยี่ยมชมแต่ละสถานที่และส่งคืนรูปทรงเส้นทางตามลําดับที่ได้รับการปรับแต่งนั้น คุณสามารถใช้ผลลัพธ์นี้ในภายหลังเพื่อแสดงเส้นทางช่างเทคนิคที่แนะนําบนแผนที่

เมื่อต้องการทําส่วนนี้ให้เสร็จสมบูรณ์ คุณต้องมีบัญชี Azure ที่มีบัญชี แผนที่ Azure และคีย์การสมัครใช้งาน หากคุณไม่มีบัญชี Azure ให้สร้างบัญชีฟรี สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการสร้างบัญชี แผนที่ Azure โปรดดู สร้างบัญชี แผนที่ Azure สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการรับคีย์การสมัครใช้งาน แผนที่ Azure โปรดดู รับคีย์การสมัครใช้งานสําหรับบัญชีของคุณ ในการเริ่มต้นใช้งานด่วนของ แผนที่ Azure

สร้างสมุดบันทึกในพื้นที่ทํางาน Fabric ของคุณที่ดึงข้อมูลเส้นทางที่เหมาะสมที่สุด

  1. จากภายในพื้นที่ทํางานของคุณ ให้เปิด WorkordersEventhouse ของบ้านเหตุการณ์ที่คุณสร้างไว้ก่อนหน้านี้

  2. ในแผงการนําทางด้านซ้ายภายใต้ฐานข้อมูล KQL ให้เลือก WorkordersEventhouse

  3. แถบเมนูด้านบนจะแสดงตัวเลือกสําหรับสมุดบันทึก เลือกเพื่อสร้างสมุดบันทึกใหม่

    สกรีนช็อตของอินเทอร์เฟซ Microsoft Fabric Eventhouse ที่แสดงฐานข้อมูล WorkordersEventhouse ที่เลือกในแผงการนําทางด้านซ้ายภายใต้ฐานข้อมูล KQL แถบเมนูด้านบนแสดงตัวเลือกต่างๆ รวมถึงสมุดบันทึก ซึ่งไฮไลต์ด้วยกล่องสีแดงที่ระบุว่าเป็นรายการที่จะเลือก แผงหลักแสดงตัวติดตามกิจกรรมข้อมูลพร้อมสถิติการนําเข้าและการค้นหา

  4. ในสมุดบันทึกใหม่ ให้บันทึกค่าสําหรับตัวแปร kustoUri คุณใช้ค่านี้ในรหัสสมุดบันทึกใหม่ที่คุณสร้างในขั้นตอนที่ 6

  5. เชื่อมต่อสมุดบันทึกของคุณกับ WorkorderLocationsLakehouse โดยเลือก จากแค็ตตาล็อก OneLake จากรายการดรอปดาวน์ เพิ่มรายการข้อมูล

    สกรีนช็อตของอินเทอร์เฟซสมุดบันทึก Microsoft Fabric ที่แสดงเซลล์โค้ดที่มีโค้ด PySpark Python แผงด้านซ้ายแสดง ไม่มีแหล่งข้อมูลที่เพิ่มด้วยปุ่ม เพิ่มรายการข้อมูล ที่เน้นด้วยกล่องสีแดง พื้นที่รหัสหลักแสดงตัวอย่างการสืบค้นสําหรับการอ่านข้อมูลจาก Kusto ด้วยตัวแปร kustoQuery ที่ตั้งค่าเป็น Workorders, kustoUri ที่มี Fabric Microsoft URL และฐานข้อมูลที่ตั้งค่าเป็น WorkordersEventhouse kustoUri จะถูกเน้นด้วยกล่องสีแดงเพื่อระบุว่าค่านั้นจําเป็นต้องคัดลอกและใช้ในรหัสสมุดบันทึกที่ให้ไว้ในบทช่วยสอนนี้

    Note

    เมื่อคุณสร้าง Lakehouse ใน Microsoft Fabric ตําแหน่งข้อมูลการวิเคราะห์ SQL ที่มีชื่อเดียวกันจะถูกสร้างขึ้นโดยอัตโนมัติ

    ทั้งสองรายการจะปรากฏในพื้นที่ทํางาน แต่มีจุดประสงค์ที่แตกต่างกัน:

    • เล คเฮาส์ ใช้สําหรับสมุดบันทึก การประมวลผล Spark และการนําเข้าข้อมูล
    • จุดสิ้นสุดการวิเคราะห์ SQL เป็นพื้นผิวการสืบค้น T-SQL แบบอ่านอย่างเดียวเหนือข้อมูล Lakehouse

    เมื่อแนบหรือสร้างสมุดบันทึก ให้แน่ใจว่าคุณเลือก Lakehouse ไม่ใช่ SQL analytics endpoint ถ้า WorkorderLocationsLakehouse ปรากฏสองครั้งในแค็ตตาล็อก OneLake ให้กรองตาม Lakehouse

  6. เมื่อสมุดบันทึกใหม่ของคุณถูกสร้างและเชื่อมต่อกับบ้านริมทะเลสาบแล้ว ให้ป้อนรหัสต่อไปนี้ลงในเซลล์ที่สองของสมุดบันทึก แทนที่รหัสเริ่มต้น จากนั้นเพิ่มค่าตัวแปรที่คุณบันทึกไว้ในขั้นตอนก่อนหน้า:

    import os, json, requests
    from pyspark.sql import types as T
    from pyspark.sql.functions import col
    
    # ---- Configuration ----
    AZMAPS_SUBSCRIPTION_KEY = os.environ.get(
        'AZMAPS_SUBSCRIPTION_KEY',
        '<Your Azure Maps subscription key>'
    )
    API_VERSION = '2025-01-01'
    BASE_URL    = 'https://atlas.microsoft.com'
    
    # KQL query that invokes the stored function
    kustoQuery = """WorkordersFunction()"""
    # Your Kusto URI
    kustoUri = "" 
    # Your KQL database name
    database = "WorkordersEventhouse" 
    
    # The access credentials.
    accessToken = mssparkutils.credentials.getToken(kustoUri)
    kustoDf  = spark.read\
        .format("com.microsoft.kusto.spark.synapse.datasource")\
        .option("accessToken", accessToken)\
        .option("kustoCluster", kustoUri)\
        .option("kustoDatabase", database)\
        .option("kustoQuery", kustoQuery).load()
    
    # Write transformed response to a new file so the raw output is preserved
    OUTPUT_GEOJSON_PATH_TRANSFORMED = (
        'Files/OptimizedRoute.geojson' # GeoJSON output file 
    )
    
    # ---- Read Stores from KQL database table ----
    stores_df  = spark.read\
        .format("com.microsoft.kusto.spark.synapse.datasource")\
        .option("accessToken", accessToken)\
        .option("kustoCluster", kustoUri)\
        .option("kustoDatabase", database)\
        .option("kustoQuery", kustoQuery).load()\
        .select(
                    col("WorkorderID").alias("workorder_id"),
                    col("Latitude").alias("lat"),
                    col("Longitude").alias("lon")
                )
    
    # Ordered waypoints: origin first, then the rest by workorder_id
    # (API will re-order when optimizeWaypointOrder=True)
    stores_pd = stores_df.orderBy('workorder_id').toPandas()
    waypoints_lonlat = [[float(r['lon']), float(r['lat'])] for _, r in stores_pd.iterrows()]
    
    # ---- Build Directions request body (GeoJSON) ----
    features = []
    for idx, (lon, lat) in enumerate(waypoints_lonlat):
        features.append({
            "type": "Feature",
            "geometry": {"type": "Point", "coordinates": [lon, lat]},
            "properties": {"pointIndex": idx, "pointType": "waypoint"}
        })
    
    dir_body = {
        "type": "FeatureCollection",
        "features": features,
        "optimizeRoute": "fastestWithTraffic",
        "routeOutputOptions": ["routePath"],  # ensures route path geometry in response
        "travelMode": "truck",
        "optimizeWaypointOrder": True
    }
    
    # ---- Call Azure Maps Directions (POST) ----
    url     = f"{BASE_URL}/route/directions"
    params  = {"api-version": API_VERSION}
    headers = {
        "Accept": "application/geo+json",
        "Content-Type": "application/geo+json",
        "subscription-key": AZMAPS_SUBSCRIPTION_KEY
    }
    
    resp = requests.post(url, params=params, data=json.dumps(dir_body), headers=headers)
    resp.raise_for_status()
    resp_json = resp.json()  # exact payload as returned by the API
    
    # ---- Transform: move order.optimizedIndex -> properties.optimizedIndex for all Waypoint features to add as a data label in the map----
    for feat in resp_json.get("features", []):
        props = feat.get("properties") or {}
        if props.get("type") == "Waypoint":
            order = props.get("order") or {}
            opt_idx = order.pop("optimizedIndex", None)
            if opt_idx is not None:
                props["optimizedIndex"] = opt_idx + 1
            # reassign possibly-updated order (still contains inputIndex if present)
            props["order"] = order
            feat["properties"] = props
    
    # ---- Write transformed GeoJSON ----
    from notebookutils import mssparkutils
    mssparkutils.fs.put(OUTPUT_GEOJSON_PATH_TRANSFORMED, json.dumps(resp_json), True)
    
    print(f"Transformed Directions GeoJSON (waypoints carry properties.optimizedIndex) written to {OUTPUT_GEOJSON_PATH_TRANSFORMED}")
    
  7. ป้อนคีย์การสมัครใช้งาน แผนที่ Azure ของคุณในโค้ดสมุดบันทึกสําหรับตัวแปร AZMAPS_SUBSCRIPTION_KEY โดยแทนที่ "<คีย์>การสมัครใช้งาน แผนที่ Azure ของคุณ" ด้วยคีย์การสมัครใช้งาน แผนที่ Azure ของคุณ

    สําคัญ

    ตัวอย่างนี้ฮาร์ดโค้ดคีย์การสมัครใช้งาน แผนที่ Azure เพื่อความเรียบง่าย อย่าฮาร์ดโค้ดข้อมูลลับในสภาพแวดล้อมการผลิต จัดเก็บและจัดการข้อมูลลับอย่างปลอดภัยโดยใช้ Azure Key Vault และอ้างอิงข้อมูลลับเหล่านั้นในขณะรันไทม์ สําหรับข้อมูลเพิ่มเติม ให้ดูที่ แนวทางปฏิบัติที่ดีที่สุดสําหรับการปกป้องข้อมูลลับ

  8. เลือกปุ่ม บันทึกเป็น ในเมนู และบันทึกสมุดบันทึกเป็น OptimizeRoute

  9. เรียกใช้สมุดบันทึกเพื่อสร้างไฟล์ OptimizedRoute.geojson ในไดเรกทอรี ไฟล์ ของเลคเฮาส์ของคุณ

    ภาพหน้าจอของอินเทอร์เฟซ Microsoft Fabric ที่แสดงเซลล์โค้ดสมุดบันทึกทางด้านขวาพร้อมโค้ด Python ที่ดึงข้อมูลเส้นทางและเขียนไฟล์ GeoJSON บานหน้าต่าง Explorer ทางด้านซ้ายแสดง OneLake ที่มี WorkorderLocation ที่ขยายออกโดยแสดงโฟลเดอร์ตารางและไฟล์ โฟลเดอร์ไฟล์ประกอบด้วย WorkorderLocations.csv และ OptimizedRoute.geojson ที่ไฮไลต์ด้วยกล่องสีแดงที่ระบุไฟล์เอาต์พุตที่สร้างขึ้นใหม่ แผงไฟล์ตรงกลางแสดงทั้งสองไฟล์ที่มี OptimizedRoute.geojson ถูกเน้นด้วย เอาต์พุตโน้ตบุ๊กที่ด้านล่างจะแสดงข้อความแสดงความสําเร็จที่ระบุว่าทิศทางที่แปลงแล้วจุดอ้างอิง GeoJSON มีคุณสมบัติ

เพิ่มเลคเฮาส์ลงในแผนที่

  1. ในบานหน้าต่าง Explorer ให้เลือก รายการ Fabric จากนั้นเลือกปุ่ม เพิ่ม
  2. เลือก เลคเฮาส์ จากเมนูที่ปรากฏขึ้นเมื่อเลือกปุ่ม เพิ่ม
  3. จากแค็ตตาล็อก OneLake ให้เลือก WorkorderLocationsLakehouse เลคเฮาส์ที่คุณสร้างไว้ก่อนหน้านี้ จากนั้นเลือก เพิ่ม

แสดงเส้นทางที่ปรับให้เหมาะสมที่สุดบนแผนที่

  1. ในบานหน้าต่าง Explorer ในแผนที่ใหม่ของคุณ ให้เลือก WorkorderLocationsLakehouse เลคเฮาส์ที่คุณเพิ่มในขั้นตอนก่อนหน้า

  2. ไปที่ OptimizedRoute.geojson ในไดเร็กทอรี ไฟล์ ของเลคเฮาส์ของคุณ แล้วเลือกวงรี (...) เพื่อแสดงเมนูป๊อปอัป

  3. เลือก แสดงบนแผนที่ จากเมนูป๊อปอัป

    สกรีนช็อตของแผง Microsoft Fabric Maps Explorer ที่แสดงแท็บ Lakehouse ที่เลือกโดยขยาย WorkorderLocationsLakehouse โฟลเดอร์ไฟล์ประกอบด้วยไฟล์ OptimizedRoute.geojson และไฟล์ WorkorderLocations.csv เมนูบริบทจะเปิดขึ้นถัดจาก OptimizedRoute.geojson ซึ่งแสดงตัวเลือกต่างๆ รวมถึง แสดงบนแผนที่ ไฮไลต์ด้วยสี่เหลี่ยมผืนผ้าสีแดง แผงเลเยอร์ข้อมูลจะแสดง WorkordersFunction เป็นเลเยอร์ที่มีอยู่พร้อมการสลับการมองเห็น

  4. ในแผงชั้นข้อมูล ให้ปิดการมองเห็นสําหรับเลเยอร์ WorkordersFunction

เมื่อเสร็จแล้ว เลเยอร์แผนที่ใหม่จะปรากฏในแผนที่ Fabric Maps ของคุณ

ภาพหน้าจอของ Microsoft Fabric Maps ที่แสดงแผนที่ถนนของกรุงเวียนนา ประเทศออสเตรีย พร้อมเส้นทางที่ปรับให้เหมาะสมซึ่งแสดงเป็นเส้นสีน้ําเงินที่เชื่อมต่อจุดอ้างอิงที่มีหมายเลขเก้าจุด บานหน้าต่าง Explorer ทางด้านซ้ายแสดงแท็บ Lakehouse ที่ขยายด้วย WorkorderLocationsLakehouse ที่มีโฟลเดอร์ Files ที่มีไฟล์ OptimizedRoute.geojson และ WorkorderLocations.csv แผงเลเยอร์ข้อมูลจะแสดงสองเลเยอร์: WorkordersFunction ที่มีการปิดการมองเห็น และ OptimizedRoute ที่แสดงเส้นทางเส้นทางที่เชื่อมต่อพร้อมจุดแวะพักที่มีหมายเลขตั้งแต่ 1 ถึง 9 ซึ่งระบุลําดับการเยี่ยมชมที่ปรับให้เหมาะสมที่สุด

การตั้งค่าเลเยอร์แผนที่

Fabric Maps มีการตั้งค่าเลเยอร์หลากหลายที่ช่วยให้คุณควบคุมวิธีการนําเสนอข้อมูลบนแผนที่ ในส่วนนี้ คุณปรับแต่งเลเยอร์ที่สร้างขึ้นจากกระบวนการเพิ่มประสิทธิภาพกระบวนการผลิตโดยการเปลี่ยนชื่อเลเยอร์ การตั้งค่าเหล่านี้ช่วยปรับปรุงความสามารถในการอ่านและทําให้ง่ายต่อการตีความข้อมูลใบสั่งงานได้อย่างรวดเร็ว

เปลี่ยนชื่อเลเยอร์

  1. ในบานหน้าต่าง ชั้นข้อมูล ให้เปิดเมนูตัวเลือก OptimizedRoute โดยเลือกวงรี (...)

  2. เลือก เปลี่ยนชื่อ

    ภาพหน้าจอของแผงเลเยอร์ข้อมูล Microsoft Fabric Maps ที่แสดงสองเลเยอร์: WorkordersFunction และ OptimizedRoute เลเยอร์ OptimizedRoute มีเมนูตัวเลือกที่ขยายด้วยสี่เหลี่ยมผืนผ้าสีแดงที่เน้นตัวเลือกเปลี่ยนชื่อ ตัวเลือกเมนูอื่นๆ ที่มองเห็นได้ ได้แก่ ซูมให้พอดี ทําซ้ํา และลบ แผงปรากฏบนพื้นหลังแผนที่ถนนที่แสดงพื้นที่เวียนนา ออสเตรีย

นําป้ายกํากับที่ระดับแผนที่ออก

เมื่อคุณสลับหรือปิด ป้ายชื่อ ที่ระดับแผนที่ จะมีผลกับป้ายข้อความบนแผนที่ฐาน ป้ายกํากับเหล่านี้มาจากรูปแบบแผนที่พื้นฐานและรวมถึง:

  • ชื่อเมืองและเมือง
  • ชื่อประเทศและภูมิภาค
  • ชื่อถนนและทางหลวง
  • ชื่อคุณลักษณะของน้ํา (แม่น้ํา ทะเลสาบ มหาสมุทร)
  • ชื่อสถานที่ทางการปกครองหรือทางภูมิศาสตร์อื่นๆ

เมื่อไม่แสดง ป้ายกํากับ แผนที่ฐานจะปรากฏ "สะอาด" และน้อยที่สุด โดยไม่มีข้อความชื่อสถานที่ที่แสดงบนแผนที่ฐาน

วิธีปิดป้ายกํากับแผนที่ฐาน

  1. เปิดแผนที่ของคุณใน Fabric Maps

  2. เลือก การตั้งค่าแผนที่ จากแถบเมนู

  3. ค้นหาช่องทําเครื่องหมาย ป้ายกํากับ และยกเลิกการเลือก

    ภาพหน้าจอที่แสดงอินเทอร์เฟซ Microsoft Fabric Maps ที่แสดงแผนที่ถนนของเวียนนา ออสเตรีย พร้อมเส้นเส้นทางสีม่วงที่เชื่อมต่อจุดอ้างอิงหลายจุด ด้านซ้ายแสดงบานหน้าต่าง Explorer ที่มีแผงเลเยอร์ข้อมูลแสดงรายการเลเยอร์ WorkordersFunction และ Optimized Route แถบเครื่องมือด้านบนจะไฮไลต์ปุ่มการตั้งค่าแผนที่ที่ไฮไลต์ด้วยสี่เหลี่ยมผืนผ้าสีแดง ด้านขวาจะแสดงแผงการตั้งค่าแผนที่ฐานโดยไม่ได้เลือกช่องทําเครื่องหมายป้ายกํากับและไฮไลต์ด้วยสี่เหลี่ยมผืนผ้าสีแดง

สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าแผนที่ใน Fabric Maps ดูที่ กําหนดค่าการตั้งค่าฐาน

เพิ่มป้ายกํากับข้อมูลลงในเลเยอร์

ป้ายชื่อข้อมูลคือคําอธิบายประกอบที่ขับเคลื่อนด้วยข้อมูลที่มาจากฟิลด์อย่างน้อยหนึ่งฟิลด์ในชุดข้อมูลของเลเยอร์ ลิงก์เหล่านี้เชื่อมโยงโดยตรงกับคุณลักษณะแผนที่ระดับเลเยอร์ เช่น จุดบนแผนที่ที่แสดงตําแหน่งของใบสั่งงาน สําหรับข้อมูลเพิ่มเติมเกี่ยวกับป้ายกํากับข้อมูล Fabric Maps โปรดดูที่ การตั้งค่าป้ายกํากับข้อมูล

  1. เลือก เส้นทางที่ปรับแต่งแล้ว ในบานหน้าต่างชั้นข้อมูล บานหน้าต่างการตั้งค่า เส้นทางที่ปรับแต่งแล้ว จะปรากฏทางด้านขวาของหน้าจอ

  2. ในบานหน้าต่างการตั้งค่าเส้นทางที่ปรับแต่งแล้ว ให้เลือก > การตั้งค่าป้ายกํากับข้อมูล

  3. เลือกการสลับ เปิดใช้งานป้ายชื่อข้อมูล เพื่อเปิดป้ายชื่อข้อมูล ซึ่งจะแสดงการตั้งค่าป้ายชื่อข้อมูลเพิ่มเติม

  4. เปลี่ยนการตั้งค่าป้ายชื่อข้อมูลต่อไปนี้:

    • ป้ายชื่อข้อมูล: optimizedIndex
    • สีข้อความ: ขาว
    • ตั้งค่าแถบเลื่อนขนาดข้อความเป็น 20
    • สีจังหวะข้อความ: สีดํา
    • แถบเลื่อนความกว้างของเส้นขีดข้อความตั้งค่าเป็น 2

    สกรีนช็อตของ Microsoft Fabric Maps ที่แสดงแผงการตั้งค่าป้ายชื่อข้อมูลที่ขยายทางด้านขวาโดยเปิดเปิดใช้งานป้ายชื่อข้อมูล, ดรอปดาวน์ป้ายชื่อข้อมูลตั้งค่าเป็น optimizedIndex, สีข้อความที่แสดงตัวเลือกสีขาว, แถบเลื่อนขนาดข้อความตั้งค่าเป็น 20, สีเส้นข้อความแสดงสีดํา และแถบเลื่อนความกว้างของเส้นข้อความตั้งค่าเป็น 2 พื้นที่แผนที่หลักแสดงแผนที่ถนนของกรุงเวียนนา ออสเตรีย พร้อมเส้นทางสีม่วงที่เชื่อมต่อจุดอ้างอิงที่มีหมายเลข 1 ถึง 9 ซึ่งระบุลําดับการเยี่ยมชมที่เหมาะสมที่สุด แผงเลเยอร์ข้อมูลทางด้านซ้ายแสดง WorkordersFunction ที่มีการมองเห็นที่ซ่อนอยู่และเส้นทางที่ปรับให้เหมาะสมเป็นเลเยอร์ที่ใช้งานอยู่

Summary

บทเรียนนี้แสดงวิธีสร้างสถานการณ์การกําหนดเส้นทางคําสั่งงานแบบเรียลไทม์ตั้งแต่ต้นจนจบโดยใช้ Microsoft Fabric Real-Time Intelligence และแผนที่ Fabric คุณสามารถนําเข้า แปลง และสืบค้นข้อมูลคําสั่งงานแบบสตรีมโดยใช้ KQL จากนั้นแสดงข้อมูลบนแผนที่เพื่อสร้างมุมมองที่เปลี่ยนแปลงได้และอัปเดตอย่างต่อเนื่องของตําแหน่งคําสั่งงาน ด้วยการผสานรวมตรรกะการกําหนดเส้นทางและการคํานวณเส้นทางที่เหมาะสมที่สุด โซลูชันนี้แสดงให้เห็นว่าการวิเคราะห์เชิงพื้นที่แบบเรียลไทม์สามารถช่วยให้ผู้มอบหมายงานและทีมปฏิบัติการภาคสนามตัดสินใจได้เร็วขึ้นและมีข้อมูลที่ดีขึ้นได้อย่างไร

คุณสามารถขยายรูปแบบนี้ไปยังสถานการณ์ที่อิงกับสถานที่อื่น ๆ เช่น การติดตามกองยานพาหนะ การตรวจสอบทรัพย์สิน และการตอบสนองต่อเหตุการณ์ ด้วยการรวมข้อมูลที่ขับเคลื่อนด้วยเหตุการณ์ การวิเคราะห์ตาม KQL และการแสดงภาพตามแผนที่ Microsoft Fabric ช่วยให้สามารถเปลี่ยนจากข้อมูลการสตรีมดิบไปเป็นข้อมูลเชิงลึกทางภูมิศาสตร์ที่นําไปใช้ได้จริงในแบบเรียลไทม์

ขั้นตอนถัดไป

สําหรับข้อมูลเพิ่มเติมเกี่ยวกับบทความ Fabric Maps ที่ครอบคลุมในบทเรียนนี้ โปรดดูที่: