Thep Excel

JoinKind.Typeระบุประเภทของการ Join ในตารางข้อมูล

JoinKind.Type คือ enum ที่ระบุประเภทของการ Join (Inner, Outer, Anti, Semi) เมื่อรวมตารางข้อมูลสองตาราง ใช้กับ Table.Join เพื่อควบคุมว่าแถวไหนจะปรากฏในผลลัพธ์

fx
=JoinKind.Inner | JoinKind.LeftOuter | JoinKind.RightOuter | JoinKind.FullOuter | JoinKind.LeftAnti | JoinKind.RightAnti | JoinKind.LeftSemi | JoinKind.RightSemi

ความนิยม6/10
ความยาก2/10
ประโยชน์6/10

อัปเดต 4 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
[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 ตรงกันในตารางแรก (ไม่เพิ่มคอลัมน์จากตารางแรก)

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

JoinKind.Type เป็น enumeration ที่ใช้ในฟังก์ชัน Table.Join เพื่อระบุประเภทของการ Join ว่าจะรวมแถวจากตารางสองตารางแบบไหน ตั้งแต่ Inner Join ที่เอาแค่ข้อมูลที่ตรงกัน ไปจนถึง Anti/Semi Join ที่ใช้สำหรับการกรองและวิเคราะห์ข้อมูล

ที่เจ๋งคือ JoinKind.Type มี 8 ประเภท (0-7) ครอบคลุมทุกสถานการณ์การรวมตาราง ตั้งแต่ต้องการเก็บข้อมูลทั้งหมดหรือแค่ข้อมูลที่ตรงกัน ถึงการหาข้อมูลที่ไม่ตรงกัน ซึ่งช่วยให้ผม สามารถแก้ปัญหาข้อมูลซ้ำหรือหายโดยไม่ต้องใช้ฟังก์ชันเพิ่มเติม

ส่วนตัวผม มักใช้ JoinKind.LeftOuter บ่อยที่สุด เพราะมักจะอยากเก็บข้อมูลจากตารางหลักไว้ทั้งหมด แล้วเพิ่มข้อมูลเสริมจากตารางอื่น ส่วน JoinKind.LeftAnti และ JoinKind.RightAnti ใช้เมื่อต้องการหาข้อมูลที่ “ไม่ตรงกัน” ซึ่งมีประโยชน์ในการตรวจสอบข้อมูล 😎

Examples

ใช้ JoinKind.Inner เพื่อรวมเฉพาะข้อมูลที่ตรงกันlet Table1 = Table.FromRecords({[ID=1, Name="Alice"], [ID=2, Name="Bob"], [ID=3, Name="Charlie"]}), Table2 = Table.FromRecords({[ID=1, City="Bangkok"], [ID=2, C…

Inner Join แสดงเฉพาะแถวที่ ID ตรงกันในทั้งสองตาราง (Alice และ Bob) ข้ามี Charlie (ID=3) และ City Phuket (ID=4) ออกไปเพราะไม่มี ID ตรงกัน

fx
let
Table1 = Table.FromRecords({[ID=1, Name="Alice"], [ID=2, Name="Bob"], [ID=3, Name="Charlie"]}),
Table2 = Table.FromRecords({[ID=1, City="Bangkok"], [ID=2, City="Chiang Mai"], [ID=4, City="Phuket"]}),
Joined = Table.Join(Table1, {"ID"}, Table2, {"ID"}, JoinKind.Inner)
in
Joined

ผลลัพธ์| ID | Name | City |
|—-|———|———–|
| 1 | Alice | Bangkok |
| 2 | Bob | Chiang Mai|
ใช้ JoinKind.LeftOuter เพื่อเก็บข้อมูลจากตารางแรกlet Table1 = Table.FromRecords({[ID=1, Name="Alice"], [ID=2, Name="Bob"], [ID=3, Name="Charlie"]}), Table2 = Table.FromRecords({[ID=1, City="Bangkok"], [ID=2, C…

LeftOuter Join เก็บแถวทั้งหมดจากตารางแรก (Table1) แถวของ Charlie (ID=3) คงอยู่ แต่ City เป็น null เพราะไม่มีข้อมูลตรงกันในตารางที่สอง

fx
let
Table1 = Table.FromRecords({[ID=1, Name="Alice"], [ID=2, Name="Bob"], [ID=3, Name="Charlie"]}),
Table2 = Table.FromRecords({[ID=1, City="Bangkok"], [ID=2, City="Chiang Mai"], [ID=4, City="Phuket"]}),
Joined = Table.Join(Table1, {"ID"}, Table2, {"ID"}, JoinKind.LeftOuter)
in
Joined

ผลลัพธ์| ID | Name | City |
|—-|———|————-|
| 1 | Alice | Bangkok |
| 2 | Bob | Chiang Mai |
| 3 | Charlie | null |
ใช้ JoinKind.LeftAnti เพื่อหาข้อมูลที่ไม่ตรงกันlet Table1 = Table.FromRecords({[ID=1, Name="Alice"], [ID=2, Name="Bob"], [ID=3, Name="Charlie"]}), Table2 = Table.FromRecords({[ID=1, City="Bangkok"], [ID=2, C…

LeftAnti Join แสดงแถวจากตารางแรกที่ไม่มี ID ตรงกันในตารางที่สอง เฉพาะ Charlie (ID=3) เท่านั้น ที่ไม่มีข้อมูล City

fx
let
Table1 = Table.FromRecords({[ID=1, Name="Alice"], [ID=2, Name="Bob"], [ID=3, Name="Charlie"]}),
Table2 = Table.FromRecords({[ID=1, City="Bangkok"], [ID=2, City="Chiang Mai"], [ID=4, City="Phuket"]}),
Joined = Table.Join(Table1, {"ID"}, Table2, {"ID"}, JoinKind.LeftAnti)
in
Joined

ผลลัพธ์| ID | Name |
|—-|———-|
| 3 | Charlie |
ใช้ JoinKind.FullOuter เพื่อรวมข้อมูลทั้งหมดlet Table1 = Table.FromRecords({[ID=1, Name="Alice"], [ID=2, Name="Bob"], [ID=3, Name="Charlie"]}), Table2 = Table.FromRecords({[ID=1, City="Bangkok"], [ID=2, C…

FullOuter Join เก็บข้อมูลทั้งหมดจากทั้งสองตาราง Charlie และ Phuket (ID=4) ไม่มีการจับคู่จึงมี null

fx
let
Table1 = Table.FromRecords({[ID=1, Name="Alice"], [ID=2, Name="Bob"], [ID=3, Name="Charlie"]}),
Table2 = Table.FromRecords({[ID=1, City="Bangkok"], [ID=2, City="Chiang Mai"], [ID=4, City="Phuket"]}),
Joined = Table.Join(Table1, {"ID"}, Table2, {"ID"}, JoinKind.FullOuter)
in
Joined

ผลลัพธ์| ID | Name | City |
|—-|———|————-|
| 1 | Alice | Bangkok |
| 2 | Bob | Chiang Mai |
| 3 | Charlie | null |
| 4 | null | Phuket |

FAQs

ผมต้องใช้ JoinKind ประเภทไหนเวลาต้องการเก็บข้อมูลจากตารางหลักไว้ทั้งหมด?+

ใช้ JoinKind.LeftOuter ค่ะ มันเก็บแถวทั้งหมดจากตารางแรก (ตารางหลัก) แล้วเพิ่มข้อมูลจากตารางที่สอง ถ้าไม่มีข้อมูลตรงกันก็จะ null ซึ่งผมใช้วิธีนี้บ่อยที่สุดในงานประจำวัน

ความแตกต่างระหว่าง JoinKind.LeftAnti และ JoinKind.LeftSemi คืออะไร?+

ผมอธิบายแบบง่ายๆ ค่ะ: LeftAnti คือหาแถวที่ "ไม่ตรงกัน" (ข้อมูลที่หาย) ส่วน LeftSemi คือหาแถวที่ "ตรงกัน" (ข้อมูลที่มี) ทั้งสองแบบไม่ได้เพิ่มคอลัมน์จากตารางที่สอง เลย เอาไว้กรองข้อมูลเท่านั้น

ผมจะรู้ได้ยังไงว่าต้องใช้ JoinKind ประเภไหน?+

ส่วนตัวผม มีวิธีง่ายๆ: ถ้าอยากเก็บข้อมูลจากตารางไหนไว้ทั้งหมด ให้ใช้ LeftOuter (ตารางแรก) หรือ RightOuter (ตารางที่สอง) ถ้าอยากรวมทั้งหมด ใช้ FullOuter ถ้าอยากหาข้อมูลที่ไม่ตรงกัน ใช้ Anti

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ JoinKind.Type จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้JoinKind.Typeenumerations
Table functions (4)
Table.AddColumn

Table.AddColumn เพิ่มคอลัมน์ใหม่ลงในตารางโดยคำนวณค่าจากฟังก์ชันที่กำหนด ใช้คำสั่ง each เพื่ออ้างอิงข้อมูลในแต่ละแถว เช่น each [Price] * [Quantity] สามารถระบุชนิดข้อมูลได้เพื่อเพิ่มประสิทธิภาพและป้องกันข้อผิดพลาดจากการคาดเดาชนิดข้อมูล ทำงานแบบทีละแถวและเหมาะสำหรับสร้างคอลัมน์คำนวณ รวมข้อมูล ใช้เงื่อนไข และการแปลงข้อมูลต่างๆ ใช้ร่วมกับฟังก์ชัน Table.TransformColumns สำหรับแก้ไขคอลัมน์เดิม Table.AddIndexColumn สำหรับเพิ่มหมายเลขลำดับ Table.SelectRows สำหรับกรองแถว Table.FromRecords สำหรับสร้างตารางจากข้อมูล Text.Combine สำหรับรวมข้อความ Number.Round สำหรับปัดเศษ Date.Year สำหรับดึงค่าปี และ Text.Upper สำหรับแปลงเป็นตัวพิมพ์ใหญ่ เพื่อสร้างกระบวนการแปลงข้อมูลที่สมบูรณ์

Table.Group

Table.Group จัดกลุ่มข้อมูลตามคอลัมน์ที่กำหนดและสรุปผลในแต่ละกลุ่มด้วย aggregation functions เช่น List.Sum, List.Count, List.Average คล้ายกับ GROUP BY ใน SQL แต่ทรงพลังกว่าเพราะสามารถจัดกลุ่มหลายคอลัมน์พร้อมกันและสร้างคอลัมน์สรุปผลหลายคอลัมน์ในคำสั่งเดียว รองรับ GroupKind.Local เพื่อเพิ่มประสิทธิภาพเมื่อข้อมูลเรียงลำดับแล้ว

Table.Join

Table.Join ใช้รวมตารางสองตารางโดยจับคู่ค่าในคอลัมน์กำหนด สนับสนุนทุกประเภท join (Inner, Left Outer, Right Outer, Full Outer, Anti, Semi) เหมือน SQL Join

Table.SelectRows

Table.SelectRows เป็นฟังก์ชันสำหรับกรองตาราง (filter table) ใน Power Query โดยใช้ฟังก์ชันเงื่อนไข (condition function) เพื่อตรวจสอบแต่ละแถว ถ้าเงื่อนไขคืนค่า true จะเก็บแถวนั้นไว้ ถ้าเป็น false จะตัดทิ้ง สามารถใช้ keyword 'each' ร่วมกับการอ้างอิงคอลัมน์ด้วย [ColumnName] เพื่อเขียนเงื่อนไขได้สะดวก รองรับการกรองตามตัวเลข ข้อความ วันที่ การตรวจสอบค่า null และเงื่อนไขที่ซับซ้อนด้วย and/or operators ฟังก์ชันนี้รองรับ Query Folding ซึ่งช่วยเพิ่มประสิทธิภาพเมื่อทำงานกับ data source ขนาดใหญ่

enumerations (1)
JoinAlgorithm.Type

ระบุอัลกอริทึมที่ใช้ในการ Join ข้อมูลจากสองตาราง ช่วยให้คุณควบคุมประสิทธิภาพการทำงานได้ดีขึ้น

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่