การทำงานกับ SharePoint เป็นแหล่งข้อมูลใน Power Apps นั้นถือเป็นทักษะพื้นฐานที่ผู้สร้างแอปพลิเคชันส่วนใหญ่ต้องเจอ ซึ่งมักจะราบรื่นดีเมื่อทำงานกับชุดข้อมูลขนาดเล็ก ประมาณ 100-1,000 รายการ แต่เกมจะเปลี่ยนไปสำหรับชุดข้อมูลขนาดใหญ่ เช่น 5,000 รายการหรือแม้แต่ 100,000 รายการ ซึ่งจะท้าทายและน่าสนใจมากขึ้น
Quick Suggest
หากสนใจเรียนรู้เพิ่มเติม ขอแนะนำบทความ
ในบล็อกนี้ ผมจะใช้ชุดข้อมูลจริงจากโปรเจกต์ล่าสุด (ข้อมูลที่ละเอียดอ่อนจะถูกปกปิดและแทนที่ด้วยข้อมูลตัวอย่าง)
ชุดข้อมูลนี้มีทั้งหมด 131,716 รายการ
ปัญหาคืออะไร ?
ปัญหาที่พบคือเรื่องของ “ความเร็ว”
ตามที่คุณอาจสังเกตเห็นแล้วว่า การแสดงผลข้อมูลจากรายการ SharePoint ขนาดใหญ่ใน Power Apps นั้นค่อนข้างช้า และจะช้าลงมากขึ้นเรื่อย ๆ ตามขนาดของชุดข้อมูลหรือจำนวนคอลัมน์ที่มากขึ้น
ทำไมถึงช้าล่ะ ?
แต่ทำไมถึงช้าล่ะ? คำตอบคือเปิด Monitor ดูสิ จะเห็นว่า Power Apps ไม่สามารถรับข้อมูลทั้งหมดได้ในการร้องขอครั้งเดียว แต่ต้องรันฟังก์ชัน getMoreRows ไปเรื่อย ๆ จนกว่าจะได้ข้อมูลที่ตรงตามเงื่อนไขการกรองหมด นั่นหมายความว่าถ้าขนาดชุดข้อมูลของคุณมีเพิ่มมากขึ้น ก็จะใช้เวลานานขึ้นนั่นเอง
แค่นี้ก็เข้าใจปัญหาพื้นฐานแล้วนะครับ เราจะมาวิเคราะห์และหาวิธีแก้ไขอย่างละเอียดต่อไป
Solution ที่ 1 : Indexed column
เหตุผลที่ Power Apps ไม่สามารถดึงข้อมูลทั้งหมดได้ในการร้องขอเพียงครั้งเดียวนั้น เป็นเพราะข้อจำกัดของ SharePoint REST API เมื่อคุณใช้ฟังก์ชัน Filter() ใน Power Apps จะส่งคำร้องขอการกรองข้อมูลไปยัง SharePoint REST API แต่การกรองด้วยคอลัมน์ไม่ใช่ Indexed Column นั้นไม่สนับสนุนสำหรับรายการที่มีรายการมากกว่า 5,000 รายการ
ดังนั้น Power Apps จึงต้องดึงรายการทั้งหมดในรายการแล้วจึงนำมากรองเองด้วย Power Apps ซึ่งก็ทำให้ใช้เวลานาน
เราสามารถช่วย SharePoint ได้โดยการสร้าง Indexed Column ที่เราต้องการกรอง ตามขั้นตอนดังนี้:
ไปที่ การตั้งค่ารายการ (List settings)
เลื่อนลงไปและคลิกที่ Indexed columns
สร้าง Index
รอให้ SharePoint สร้าง Indexed Column ของคุณ (อาจใช้เวลาสักพักขึ้นอยู่กับข้อมูลของคุณ)
เมื่อสร้าง Indexed Column ใน SharePoint แล้ว การดำเนินการกรองสามารถทำได้รวดเร็วขึ้น เนื่องจากการกรองสามารถให้ผลลัพธ์ได้อย่างรวดเร็วเกือบทันที ใช้การร้องขอเพียงครั้งเดียวในการดึงข้อมูลที่ผ่านการกรอง ไม่ต้องวนดึงครั้งแล้วครั้งเล่า ซึ่งช่วยเพิ่มประสิทธิภาพการทำงานได้เป็นอย่างมาก
Solution ที่ 2 : Rearrange filter criteria
มีบางสถานการณ์ที่แม้จะมีการสร้าง Indexed Column เพื่อให้การกรองข้อมูลเร็วขึ้น แต่ก็ยังไม่เพียงพอ
ตัวอย่างเช่น คุณกำลังพยายามกรองข้อมูลด้วยเงื่อนไข 2 ประการ ได้แก่
- รายการที่เป็นของบริษัท “GRBK”
- มี ReceiptId เป็น “RCP-8754”
แม้ว่าทั้งสองคอลัมน์ที่ใช้ในการกรองข้อมูลจะมีการสร้างอินเด็กซ์ไว้แล้ว แต่การกรองข้อมูลก็ยังอาจใช้เวลานาน เนื่องจาก Power Apps จำเป็นต้องประมวลผลเงื่อนไขการกรองแบบลำดับ
ตัวอย่างเช่น หาก Power Apps กรองรายการที่มี CompanyCodeTxt = “GRBK” ก่อน และการกรองครั้งแรกนี้ได้ผลลัพธ์มากกว่า 5,000 รายการ มันจะไม่สามารถประมวลผลรายการเหล่านั้นได้ทั้งหมดในคำขอเดียว ดังนั้นจึงจำเป็นต้องใช้วิธีการทำงานแบบค่อยเป็นค่อยไป เช่น getMoreRows เพื่อเรียกและประมวลผลข้อมูลที่ผ่านการกรองแบบแบทช์
วิธีแก้ปัญหาง่าย ๆ คือ
จัดเรียงลำดับเงื่อนไขการกรองใหม่ โดยให้เงื่อนไขที่เจาะจงมากที่สุดอยู่ก่อน ซึ่งจะทำให้คุณได้ผลลัพธ์ที่รวดเร็วทันทีเมื่อกรองด้วย ReceiptId เพราะเป็นเงื่อนไขที่เจาะจงมากกว่าการกรองด้วยบริษัท (Company)
โดยสรุป ให้จัดลำดับเงื่อนไขการกรองใหม่ดังนี้:
- ReceiptId เป็น “RCP-8754”
- รายการที่เป็นของบริษัท “GRBK”
การจัดลำดับเช่นนี้จะช่วยให้การกรองข้อมูลมีประสิทธิภาพและรวดเร็วขึ้น
สรุป
แม้ว่า SharePoint อาจไม่ใช่แหล่งข้อมูลที่ดีที่สุดสำหรับการจัดการชุดข้อมูลขนาดใหญ่ แต่ก็มีการปรับปรุงประสิทธิภาพหลายวิธีที่คุณสามารถนำมาใช้เพื่อให้ได้ประสิทธิภาพที่ดีขึ้น การใช้ Indexed Column และการปรับปรุงเงื่อนไขการกรองสามารถเพิ่มประสิทธิภาพของโซลูชัน Power Apps ของคุณได้
แหล่งที่มา : PAWIT.PW
ก้าวเข้าสู่ Digital Business
ดูผลิตภัณฑ์ที่เกี่ยวข้องได้ที่นี่