Table.AddMatchColumn เพิ่มคอลัมน์ใหม่ที่มีค่าจากการแมตช์แถวในตารางอื่น โดยค้นหาค่าที่ตรงกับคีย์ เหมือน VLOOKUP แต่ทำงานโดยตรงบนตารางทั้งหมด
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| table | table | ตารางที่ต้องการเพิ่มคอลัมน์ใหม่ | |
| newColumnName | text | ชื่อของคอลัมน์ใหม่ที่จะสร้าง | |
| tableColumnPairs | list | รายการคู่ตารางและคอลัมน์สำหรับการแมตช์ โครงสร้าง: {ตารางที่ต้องการหา, {{“คอลัมน์จากตารางแรก”, “คอลัมน์จากตารางที่สอง”}}} | |
| [joinKind]ไม่บังคับ | JoinKind | JoinKind.LeftOuter | ประเภทของการเข้าร่วม: JoinKind.LeftOuter (ค่าเริ่มต้น), JoinKind.RightOuter, JoinKind.Inner, JoinKind.FullOuter |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
Table.AddMatchColumn ใช้สำหรับการเพิ่มคอลัมน์ใหม่ลงในตารางโดยการจับคู่ (match) แถวจากตารางอื่น ตามความเหมือนของค่าในคอลัมน์กำหนด ฟังก์ชันนี้คล้ายกับ VLOOKUP ใน Excel แต่ทำงานอย่างเรียบง่าย ไม่ต้องระบุคอลัมน์ที่ต้องการแบบซ้ายไปขวา ใช้ความสำหรับการวนลูปหรือสร้าง custom function ที่รับชื่อ field เป็น parameter
ที่เจ๋งคือ สามารถแมตช์ได้หลายคอลัมน์พร้อมกัน (composite key) และควบคุมได้ว่าจะเก็บแถวที่ไม่มีการแมตช์ (LeftOuter) หรือเอาเฉพาะที่แมตช์ทั้งสองตาราง (Inner) อย่างชัดเจนด้วย JoinKind
ส่วนตัวผมชอบใช้ Table.AddMatchColumn เมื่อต้องการเพิ่มข้อมูลจากตารางอื่นโดยอ้างอิงตามค่ากุญแจ (key) ทำให้โค้ด M ชัดเจนและตรงไปตรงมา มีความปลอดภัยสูงเพราะจะยังคง row context ได้ดี 😎
เพิ่มชื่อลูกค้า (CustomerName) เข้าไปในตาราง OrdersTable โดยการแมตช์ CustomerID จากทั้งสองตาราง เมื่อหา CustomerID = 101 ในตาราง Customers จะได้ชื่อ "Alice" และใส่เข้าไปในแถวที่ OrderID = 1 และ 3
JoinKind.Inner ทำให้เหลือเฉพาะแถวที่มีการแมตช์ในทั้งสองตาราง ใช้เวลาต้องการ data quality หรือลบ orphan records ออก
เมื่อต้องการแมตช์โดยใช้หลายคอลัมน์เป็นเกณฑ์ (composite key) ให้ระบุหลายคู่ใน tableColumnPairs ในตัวอย่างนี้ OrderID = 1 จะได้ Discount = 0.10 เพราะตรงกับ CustomerID = 101 AND Year = 2024
JoinKind.LeftOuter (ค่าเริ่มต้น) ทำให้เก็บแถวทั้งหมดจากตารางแรก และถ้าไม่พบการแมตช์จะใส่ null ลงไป ใช้กรณีที่อยากเห็นข้อมูลที่ไม่มีตัวจับ (orphan records)
ผม้บอกว่า ต่างกันนะครับ 😅 Table.AddJoinColumn ให้ผลลัพธ์ที่ซ้อนกัน (nested record/table) ในคอลัมน์เดียว คุณต้องขยาย (expand) มันหลังจากนั้น ส่วน Table.AddMatchColumn หรือบางครั้งก็ใช้ชื่อว่า Table.AddMergeColumn นั้น ให้เพิ่มคอลัมน์ตรง ๆ ที่เลือกจากตารางอื่น ทำให้ไม่ต้องขยายเพิ่มเติม
มันขึ้นอยู่กับ JoinKind ที่คุณระบุครับ ถ้าใช้ LeftOuter (ค่าเริ่มต้น) แถวเดิมจะยังคงอยู่พร้อมค่า null ในคอลัมน์ใหม่ ถ้าใช้ Inner จะลบแถวนั้นออก ผมแนะนำให้ตรวจสอบว่า key column มีค่าที่ไม่ซ้ำกันหรือมีความเหมาะสม ก่อนรัน
ได้แน่นอนครับ! นั่นคือสิ่งที่เรียกว่า composite key เพียงแค่ระบุหลายคู่ใน tableColumnPairs เช่น {{"Key1", "Col1"}, {"Key2", "Col2"}}
ผม้บอกว่า ต้องดูว่าคุณต้องการอะไรครับ Table.Join ทำให้ได้ผลลัพธ์ที่ขยายออกมา คล้ายกับ SQL INNER JOIN หรือ LEFT JOIN ส่วน Table.AddMatchColumn คือเพิ่มคอลัมน์เข้าไปในตารางเดิม มันดูง่ายกว่า และผมชอบใช้มากขึ้นเพราะโค้ดชัดเจน
ต่างกับ Table.Join ครับ Table.AddMatchColumn ใช้ exact match เท่านั้น ถ้าต้องการ fuzzy match หรือ LIKE ต้องใช้ Table.AddColumn ร่วมกับ List.Find หรือ Table.SelectRows แต่นั่นจะช้ากว่า
ฟังก์ชันที่ผู้เขียนโยงไว้กับ Table.AddMatchColumn จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
Table.AddColumn เพิ่มคอลัมน์ใหม่ลงในตารางโดยคำนวณค่าจากฟังก์ชันที่กำหนด ใช้คำสั่ง each เพื่ออ้างอิงข้อมูลในแต่ละแถว เช่น each [Price] * [Quantity] สามารถระบุชนิดข้อมูลได้เพื่อเพิ่มประสิทธิภาพและป้องกันข้อผิดพลาดจากการคาดเดาชนิดข้อมูล ทำงานแบบทีละแถวและเหมาะสำหรับสร้างคอลัมน์คำนวณ รวมข้อมูล ใช้เงื่อนไข และการแปลงข้อมูลต่างๆ ใช้ร่วมกับฟังก์ชัน Table.TransformColumns สำหรับแก้ไขคอลัมน์เดิม Table.AddIndexColumn สำหรับเพิ่มหมายเลขลำดับ Table.SelectRows สำหรับกรองแถว Table.FromRecords สำหรับสร้างตารางจากข้อมูล Text.Combine สำหรับรวมข้อความ Number.Round สำหรับปัดเศษ Date.Year สำหรับดึงค่าปี และ Text.Upper สำหรับแปลงเป็นตัวพิมพ์ใหญ่ เพื่อสร้างกระบวนการแปลงข้อมูลที่สมบูรณ์
Table.AddJoinColumn เชื่อมต่อข้อมูลจากสองตารางตามคีย์ที่ตรงกัน โดยเก็บผลลัพธ์ในคอลัมน์ใหม่เป็นตารางแบบ nested แทนการขยายแนวนอน
Table.Join ใช้รวมตารางสองตารางโดยจับคู่ค่าในคอลัมน์กำหนด สนับสนุนทุกประเภท join (Inner, Left Outer, Right Outer, Full Outer, Anti, Semi) เหมือน SQL Join
Table.NestedJoin เชื่อมตารางสองตารางด้วยคีย์ที่กำหนด และสร้างคอลัมน์ใหม่ที่เก็บตารางย่อยของแถวที่จับคู่ได้ เหมาะกับงาน Merge ที่ต้องการเก็บรายละเอียดฝั่งขวาไว้เป็น nested table ก่อนจะ Expand หรือทำขั้นตอนต่อ
Table.SelectRows เป็นฟังก์ชันสำหรับกรองตาราง (filter table) ใน Power Query โดยใช้ฟังก์ชันเงื่อนไข (condition function) เพื่อตรวจสอบแต่ละแถว ถ้าเงื่อนไขคืนค่า true จะเก็บแถวนั้นไว้ ถ้าเป็น false จะตัดทิ้ง สามารถใช้ keyword 'each' ร่วมกับการอ้างอิงคอลัมน์ด้วย [ColumnName] เพื่อเขียนเงื่อนไขได้สะดวก รองรับการกรองตามตัวเลข ข้อความ วันที่ การตรวจสอบค่า null และเงื่อนไขที่ซับซ้อนด้วย and/or operators ฟังก์ชันนี้รองรับ Query Folding ซึ่งช่วยเพิ่มประสิทธิภาพเมื่อทำงานกับ data source ขนาดใหญ่
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่