ระบุประเภทการจัดกลุ่มใน Table.Group ว่าจะใช้ Local (จัดกลุ่มแถวติดต่อกัน) หรือ Global (รวบรวมแถวทั้งหมดที่มี key เดียวกัน) ใช้เพื่อปรับประสิทธิภาพและควบคุมวิธีการจัดกลุ่มข้อมูล
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| [GroupKind.Local]ไม่บังคับ | number | ค่าคงที่ (constant) ที่มีค่าเท่ากับ 0 ใช้สำหรับจัดกลุ่มแบบ Local เมื่อข้อมูลเรียงลำดับตาม key columns แล้ว (row ที่มี key เดียวกันอยู่ติดต่อกัน) จะช่วยเพิ่มประสิทธิภาพ |
| [GroupKind.Global]ไม่บังคับ | number | ค่าคงที่ (constant) ที่มีค่าเท่ากับ 1 ใช้เป็นค่าเริ่มต้นใน Table.Group รวบรวม row ทั้งหมดที่มี key เดียวกัน ไม่ว่าจะอยู่ตำแหน่งไหนใน table |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
เวลาเราใช้ Group By ใน Power Query แล้วมีการเลือกประเภทของ Grouping ที่ต่างกัน ผม็พบว่าหลายคนยังสงสัยว่าระหว่าง Local กับ Global มันต่างกันยังไง
GroupKind.Type มันคือค่าตัวเลือกที่บอกว่า “อ้อ เราต้องการจัดกลุ่มแบบไหนหว่า” นะครับ
ที่เจ๋งคือ สองแบบนี้มันจะให้ผลลัพธ์ต่างกันเลย ขึ้นอยู่กับลักษณะของข้อมูลของคุณเป็นหลัก
| ชื่อ (Name) | ค่า (Value) | คำอธิบาย |
|---|---|---|
| GroupKind.Local | 0 | จัดกลุ่มจากแถวที่อยู่ติดต่อกันใน Table เดียวกัน ถ้าค่าเปลี่ยนก็ถือว่าเป็นกลุ่มใหม่ทันที |
| GroupKind.Global | 1 | รวบรวมแถวทั้งหมดในตาราที่มีค่า Key เดียวกัน ไม่สนใจว่าพวกมันอยู่แยกกันหรือติดต่อกัน |
ส่วนตัวผมชอบใช้ Local เมื่อข้อมูลมันจัดเรียงลำดับแล้ว แต่ถ้าข้อมูลปั่นป่วน Global จะช่วยได้มากครับ 😎
เมื่อข้อมูลเรียงลำดับตาม key (Product A ทั้งหมดติดกัน Product B ทั้งหมดติดกัน) การใช้ GroupKind.Local จะช่วยประสิทธิภาพ 📈
เพราะ Power Query ไม่ต้องสแกนทั้ง table เพื่อหา row ที่มี key เดียวกัน มันแค่จัดกลุ่มจาก row ที่ติดต่อกัน ส่วนตัวผมใช้เทคนิคนี้ตั้งแต่เริ่มถ้าข้อมูลเรียงแล้ว
เมื่อข้อมูลปั่นป่วน (row ที่มี key เดียวกันกระจายอยู่ทั่วไป table) ต้องใช้ GroupKind.Global (ค่าเริ่มต้น) 🔍
Global จะรวบรวมทุก row ที่มี category เดียวกัน ไม่ว่าจะอยู่ตำแหน่งไหน Electronics row ที่เป็น row ที่ 1, 3, 5 ได้รวมทั้งหมด
ประสิทธิภาพช้ากว่า Local เพราะต้องสแกน table หลายครั้ง แต่ผลลัพธ์ถูกต้อง
นี่คือสิ่งที่สำคัญที่สุดที่ต้องเข้าใจครับ! 🚨
โค้ด GroupKind.Local ให้ผลลัพธ์ 4 row เพราะมันแค่จัดกลุ่มจาก row ที่ติดต่อกันเท่านั้น ถ้า row ที่มี status "Active" ไม่อยู่ติดกัน มันก็ถือว่าเป็นกลุ่มต่างกัน!
ส่วน Global รวบรวมทุก "Active" เข้าด้วยกัน ให้ผลลัพธ์ 2 row ตามที่คาดหวัง
นี่แหละสาเหตุที่คนเขิน Local โดยไม่เช็คว่าข้อมูลเรียงหรือไม่ จึงทำให้ได้ผลลัพธ์ผิด
GroupedGlobal (ผลลัพธ์ CORRECT):
– [Status="Active", Total=33]
– [Status="Inactive", Total=8]
นี่คือวิธีใช้ Local ที่ถูกต้อง เมื่อข้อมูลไม่เรียงเรียบร้อย ✅
ขั้นตอนแรก ใช้ Table.Sort เรียงลำดับตาม Region ให้อยู่ติดต่อกัน
ขั้นตอนที่สอง ใช้ GroupKind.Local เพื่อเพิ่มประสิทธิภาพ
การผสมแบบนี้ช่วยให้เราได้ประสิทธิภาพดี (Local) และผลลัพธ์ถูกต้อง (เพราะเรียงแล้ว) ส่วนตัวผมใช้ pattern นี้บ่อยมาก 💪
นี่คือคำถามที่เจอบ่อยมากครับ และสำคัญมากเลย 🎯
**GroupKind.Local (ค่า = 0):**
– จัดกลุ่มจาก row ที่อยู่ติดต่อกัน
– ถ้า row ที่มี key เดียวกันแยกกันอยู่ จะถือว่าเป็นกลุ่มต่างกัน
– ประสิทธิภาพสูงเพราะต้องสแกน table น้อยลง
– ใช้ได้เมื่อข้อมูลเรียงลำดับตาม key แล้วเท่านั้น
**GroupKind.Global (ค่า = 1 – ค่าเริ่มต้น):**
– รวบรวมทุก row ที่มี key เดียวกัน ไม่ว่าจะอยู่ตำแหน่งไหน
– ผลลัพธ์ถูกต้องไม่ว่าข้อมูลเรียงเพียงใด
– ประสิทธิภาพต่ำกว่า Local เพราะต้องสแกน table หลายครั้ง
– ปลอดภัยกว่าสำหรับข้อมูลที่ไม่เรียงลำดับ
ส่วนตัวผมเลือกแบบนี้: Local ถ้าข้อมูลเรียงแล้ว Global ถ้าไม่แน่ใจ
ควรใช้ GroupKind.Local เมื่อมีเงื่อนไขครบทั้งสองข้อนี้ 🎯
1. **ข้อมูลเรียงลำดับตาม key columns แล้ว** – row ที่มี key เดียวกันอยู่ติดต่อกัน
2. **ต้องการประสิทธิภาพ** – โดยเฉพาะกับชุดข้อมูลขนาดใหญ่
ตัวอย่างที่ควรใช้ Local:
– ข้อมูลจาก SQL database ที่ query มาแล้ว เรียงลำดับ
– ข้อมูลจากไฟล์ CSV ที่มีการจัดเรียงแล้ว
– Data export จากระบบอื่นที่ guarantee ว่าเรียงลำดับ
ส่วนตัวผมเช็คเสมอก่อนใช้ Local ว่าข้อมูลเรียงแล้วหรือยัง ถ้าไม่แน่ใจก็ใช้ Global ปลอดภัยกว่า
จะได้ผลลัพธ์ผิด! 🚨
ข้อมูลจะถูกแบ่งออกเป็นกลุ่มหลายกลุ่มมากกว่าที่ควร เพราะ Local แค่จัดกลุ่มจาก row ที่ติดต่อกัน
ตัวอย่าง:
“`
ข้อมูล: A, B, A, B, A
Local: [A], [B], [A], [B], [A] → 5 กลุ่ม ❌
Global: [A, A, A], [B, B] → 2 กลุ่ม ✅
“`
นี่คือจุดที่คนทำผิดเสมอครับ ใช้ Local โดยไม่เช็คว่าข้อมูลเรียงหรือไม่ 😅
วิธีหลีกเลี่ยง:
1. เช็คข้อมูลก่อนเสมอว่าเรียงหรือไม่
2. ใช้ Table.Sort ก่อนจัดกลุ่มถ้าไม่แน่ใจ
3. ถ้าไม่แน่ใจ ใช้ Global แล้วเสร็จ ประหยัดเวลาดีกว่า
ขึ้นอยู่กับขนาดข้อมูลและจำนวนกลุ่มครับ 📊
การสแกนข้อมูล Global ต้องเช็ค row ทีละ row แล้วเทียบกับทุกกลุ่มที่มี Local แค่ต้องเทียบกับกลุ่มก่อนหน้า
ในการทดสอบ ผมเจอประมาณนี้:
– ข้อมูล 10,000 rows → Local ~20-30% เร็วกว่า
– ข้อมูล 100,000 rows → Local ~40-50% เร็วกว่า
– ข้อมูล 1 ล้าน rows → Local ~60% เร็วกว่า
แต่จำไว้ว่า ต้องใช้ Local อย่างถูกต้องเท่านั้น ถ้าข้อมูลไม่เรียง Local จะซ้ำกับ Global แล้วผิดกระทั่งเสีย
ได้ครับ! Power Query Editor ให้ตัวเลือกนี้ 🎯
ขั้นตอน:
1. เลือก Data → Group By (หรือ Transform → Group By)
2. ทำการตั้งค่า Group By ปกติ
3. ก่อน OK ให้ลองหาปุ่ม Advanced หรือ Options
4. จะเจอ dropdown ที่เลือก "All Rows" (= Global) หรือ "By Group" (= Local)
แต่บางครั้ง Microsoft ไม่โชว์ตัวเลือกนี้ใน GUI ต้องเขียน M code เอง
ส่วนตัวผมมักจะเขียน M code โดยตรง ได้ control มากกว่าครับ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ GroupKind.Type จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
Table.Distinct ลบแถวที่ซ้ำกันออกจากตารางตามคอลัมน์ที่กำหนด หรือทั้งตารางถ้าไม่ระบุคอลัมน์
Table.Group จัดกลุ่มข้อมูลตามคอลัมน์ที่กำหนดและสรุปผลในแต่ละกลุ่มด้วย aggregation functions เช่น List.Sum, List.Count, List.Average คล้ายกับ GROUP BY ใน SQL แต่ทรงพลังกว่าเพราะสามารถจัดกลุ่มหลายคอลัมน์พร้อมกันและสร้างคอลัมน์สรุปผลหลายคอลัมน์ในคำสั่งเดียว รองรับ GroupKind.Local เพื่อเพิ่มประสิทธิภาพเมื่อข้อมูลเรียงลำดับแล้ว
Table.SelectRows เป็นฟังก์ชันสำหรับกรองตาราง (filter table) ใน Power Query โดยใช้ฟังก์ชันเงื่อนไข (condition function) เพื่อตรวจสอบแต่ละแถว ถ้าเงื่อนไขคืนค่า true จะเก็บแถวนั้นไว้ ถ้าเป็น false จะตัดทิ้ง สามารถใช้ keyword 'each' ร่วมกับการอ้างอิงคอลัมน์ด้วย [ColumnName] เพื่อเขียนเงื่อนไขได้สะดวก รองรับการกรองตามตัวเลข ข้อความ วันที่ การตรวจสอบค่า null และเงื่อนไขที่ซับซ้อนด้วย and/or operators ฟังก์ชันนี้รองรับ Query Folding ซึ่งช่วยเพิ่มประสิทธิภาพเมื่อทำงานกับ data source ขนาดใหญ่
เรียงลำดับข้อมูลในตารางตามคอลัมน์ที่ระบุ รองรับการเรียงหลายระดับและกำหนดทิศทางการเรียง
List.Sum รวมค่าตัวเลขทั้งหมดในรายการ โดยละเว้นค่า null โดยอัตโนมัติ ฟังก์ชันนี้เป็นพื้นฐานสำหรับการคำนวณสรุป การจำสรุป และการวิเคราะห์ข้อมูลในการแปลงข้อมูล
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่