JoinKind.Type คือ enum ที่ระบุประเภทของการ Join (Inner, Outer, Anti, Semi) เมื่อรวมตารางข้อมูลสองตาราง ใช้กับ Table.Join เพื่อควบคุมว่าแถวไหนจะปรากฏในผลลัพธ์
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| [JoinKind.Inner]ไม่บังคับ | JoinKind Enum | แสดงแถวที่ key ตรงกันในทั้งสองตาราง |
| [JoinKind.LeftOuter]ไม่บังคับ | JoinKind Enum | เก็บแถวทั้งหมดจากตารางแรก แถวที่ไม่ตรงกันจากตารางที่สองจะ null |
| [JoinKind.RightOuter]ไม่บังคับ | JoinKind Enum | เก็บแถวทั้งหมดจากตารางที่สอง แถวที่ไม่ตรงกันจากตารางแรกจะ null |
| [JoinKind.FullOuter]ไม่บังคับ | JoinKind Enum | เก็บแถวทั้งหมดจากทั้งสองตาราง แถวที่ไม่ตรงกันจะมี null ในคอลัมน์ที่ไม่เกี่ยวข้อง |
| [JoinKind.LeftAnti]ไม่บังคับ | JoinKind Enum | แสดงแถวจากตารางแรกที่ไม่มี key ตรงกันในตารางที่สอง |
| [JoinKind.RightAnti]ไม่บังคับ | JoinKind Enum | แสดงแถวจากตารางที่สองที่ไม่มี key ตรงกันในตารางแรก |
| [JoinKind.LeftSemi]ไม่บังคับ | JoinKind Enum | แสดงแถวจากตารางแรกที่มี key ตรงกันในตารางที่สอง (ไม่เพิ่มคอลัมน์จากตารางที่สอง) |
| [JoinKind.RightSemi]ไม่บังคับ | JoinKind Enum | แสดงแถวจากตารางที่สองที่มี key ตรงกันในตารางแรก (ไม่เพิ่มคอลัมน์จากตารางแรก) |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
JoinKind.Type เป็น enumeration ที่ใช้ในฟังก์ชัน Table.Join เพื่อระบุประเภทของการ Join ว่าจะรวมแถวจากตารางสองตารางแบบไหน ตั้งแต่ Inner Join ที่เอาแค่ข้อมูลที่ตรงกัน ไปจนถึง Anti/Semi Join ที่ใช้สำหรับการกรองและวิเคราะห์ข้อมูล
ที่เจ๋งคือ JoinKind.Type มี 8 ประเภท (0-7) ครอบคลุมทุกสถานการณ์การรวมตาราง ตั้งแต่ต้องการเก็บข้อมูลทั้งหมดหรือแค่ข้อมูลที่ตรงกัน ถึงการหาข้อมูลที่ไม่ตรงกัน ซึ่งช่วยให้ผม สามารถแก้ปัญหาข้อมูลซ้ำหรือหายโดยไม่ต้องใช้ฟังก์ชันเพิ่มเติม
ส่วนตัวผม มักใช้ JoinKind.LeftOuter บ่อยที่สุด เพราะมักจะอยากเก็บข้อมูลจากตารางหลักไว้ทั้งหมด แล้วเพิ่มข้อมูลเสริมจากตารางอื่น ส่วน JoinKind.LeftAnti และ JoinKind.RightAnti ใช้เมื่อต้องการหาข้อมูลที่ “ไม่ตรงกัน” ซึ่งมีประโยชน์ในการตรวจสอบข้อมูล 😎
Inner Join แสดงเฉพาะแถวที่ ID ตรงกันในทั้งสองตาราง (Alice และ Bob) ข้ามี Charlie (ID=3) และ City Phuket (ID=4) ออกไปเพราะไม่มี ID ตรงกัน
LeftOuter Join เก็บแถวทั้งหมดจากตารางแรก (Table1) แถวของ Charlie (ID=3) คงอยู่ แต่ City เป็น null เพราะไม่มีข้อมูลตรงกันในตารางที่สอง
LeftAnti Join แสดงแถวจากตารางแรกที่ไม่มี ID ตรงกันในตารางที่สอง เฉพาะ Charlie (ID=3) เท่านั้น ที่ไม่มีข้อมูล City
FullOuter Join เก็บข้อมูลทั้งหมดจากทั้งสองตาราง Charlie และ Phuket (ID=4) ไม่มีการจับคู่จึงมี null
ใช้ JoinKind.LeftOuter ค่ะ มันเก็บแถวทั้งหมดจากตารางแรก (ตารางหลัก) แล้วเพิ่มข้อมูลจากตารางที่สอง ถ้าไม่มีข้อมูลตรงกันก็จะ null ซึ่งผมใช้วิธีนี้บ่อยที่สุดในงานประจำวัน
ผมอธิบายแบบง่ายๆ ค่ะ: LeftAnti คือหาแถวที่ "ไม่ตรงกัน" (ข้อมูลที่หาย) ส่วน LeftSemi คือหาแถวที่ "ตรงกัน" (ข้อมูลที่มี) ทั้งสองแบบไม่ได้เพิ่มคอลัมน์จากตารางที่สอง เลย เอาไว้กรองข้อมูลเท่านั้น
ส่วนตัวผม มีวิธีง่ายๆ: ถ้าอยากเก็บข้อมูลจากตารางไหนไว้ทั้งหมด ให้ใช้ LeftOuter (ตารางแรก) หรือ RightOuter (ตารางที่สอง) ถ้าอยากรวมทั้งหมด ใช้ FullOuter ถ้าอยากหาข้อมูลที่ไม่ตรงกัน ใช้ Anti
ฟังก์ชันที่ผู้เขียนโยงไว้กับ JoinKind.Type จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
Table.AddColumn เพิ่มคอลัมน์ใหม่ลงในตารางโดยคำนวณค่าจากฟังก์ชันที่กำหนด ใช้คำสั่ง each เพื่ออ้างอิงข้อมูลในแต่ละแถว เช่น each [Price] * [Quantity] สามารถระบุชนิดข้อมูลได้เพื่อเพิ่มประสิทธิภาพและป้องกันข้อผิดพลาดจากการคาดเดาชนิดข้อมูล ทำงานแบบทีละแถวและเหมาะสำหรับสร้างคอลัมน์คำนวณ รวมข้อมูล ใช้เงื่อนไข และการแปลงข้อมูลต่างๆ ใช้ร่วมกับฟังก์ชัน Table.TransformColumns สำหรับแก้ไขคอลัมน์เดิม Table.AddIndexColumn สำหรับเพิ่มหมายเลขลำดับ Table.SelectRows สำหรับกรองแถว Table.FromRecords สำหรับสร้างตารางจากข้อมูล Text.Combine สำหรับรวมข้อความ Number.Round สำหรับปัดเศษ Date.Year สำหรับดึงค่าปี และ Text.Upper สำหรับแปลงเป็นตัวพิมพ์ใหญ่ เพื่อสร้างกระบวนการแปลงข้อมูลที่สมบูรณ์
Table.Group จัดกลุ่มข้อมูลตามคอลัมน์ที่กำหนดและสรุปผลในแต่ละกลุ่มด้วย aggregation functions เช่น List.Sum, List.Count, List.Average คล้ายกับ GROUP BY ใน SQL แต่ทรงพลังกว่าเพราะสามารถจัดกลุ่มหลายคอลัมน์พร้อมกันและสร้างคอลัมน์สรุปผลหลายคอลัมน์ในคำสั่งเดียว รองรับ GroupKind.Local เพื่อเพิ่มประสิทธิภาพเมื่อข้อมูลเรียงลำดับแล้ว
Table.Join ใช้รวมตารางสองตารางโดยจับคู่ค่าในคอลัมน์กำหนด สนับสนุนทุกประเภท join (Inner, Left Outer, Right Outer, Full Outer, Anti, Semi) เหมือน SQL Join
Table.SelectRows เป็นฟังก์ชันสำหรับกรองตาราง (filter table) ใน Power Query โดยใช้ฟังก์ชันเงื่อนไข (condition function) เพื่อตรวจสอบแต่ละแถว ถ้าเงื่อนไขคืนค่า true จะเก็บแถวนั้นไว้ ถ้าเป็น false จะตัดทิ้ง สามารถใช้ keyword 'each' ร่วมกับการอ้างอิงคอลัมน์ด้วย [ColumnName] เพื่อเขียนเงื่อนไขได้สะดวก รองรับการกรองตามตัวเลข ข้อความ วันที่ การตรวจสอบค่า null และเงื่อนไขที่ซับซ้อนด้วย and/or operators ฟังก์ชันนี้รองรับ Query Folding ซึ่งช่วยเพิ่มประสิทธิภาพเมื่อทำงานกับ data source ขนาดใหญ่
ระบุอัลกอริทึมที่ใช้ในการ Join ข้อมูลจากสองตาราง ช่วยให้คุณควบคุมประสิทธิภาพการทำงานได้ดีขึ้น
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่