Thep Excel

Table.NestedJoinรวมตารางพร้อมสร้างคอลัมน์ตารางย่อย

Table.NestedJoin เชื่อมตารางสองตารางด้วยคีย์ที่กำหนด และสร้างคอลัมน์ใหม่ที่เก็บตารางย่อยของแถวที่จับคู่ได้ เหมาะกับงาน Merge ที่ต้องการเก็บรายละเอียดฝั่งขวาไว้เป็น nested table ก่อนจะ Expand หรือทำขั้นตอนต่อ

fx
=Table.NestedJoin(table1, key1, table2, key2, newColumnName, [joinKind], [keyEqualityComparers]) as table

ความนิยม8/10
ความยาก5/10
ประโยชน์9/10

อัปเดต 3 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
table1 table ตารางหลัก (ฝั่งซ้าย) ที่ต้องการคงแถวไว้ตามชนิดการ join
key1 any คอลัมน์คีย์ของ table1 ระบุเป็นชื่อคอลัมน์หรือ list ของชื่อคอลัมน์
table2 any ตารางที่ต้องการเชื่อม (ฝั่งขวา) ซึ่งจะถูกจับคู่แล้วเก็บเป็นตารางย่อย
key2 any คอลัมน์คีย์ของ table2 ให้ตรงกับ key1 (จำนวนคอลัมน์ต้องเท่ากัน)
newColumnName text ชื่อคอลัมน์ใหม่ที่จะเก็บตารางย่อยของข้อมูลที่เชื่อมได้
[joinKind]ไม่บังคับ nullable number JoinKind.LeftOuter ชนิดการเชื่อม เช่น JoinKind.LeftOuter, JoinKind.Inner, JoinKind.FullOuter ค่าเริ่มต้นคือ LeftOuter
[keyEqualityComparers]ไม่บังคับ nullable list null รายการ comparer สำหรับเทียบคีย์แต่ละคอลัมน์ ใช้เฉพาะกรณีพิเศษ เช่น case-insensitive

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

Additional Notes

Table.NestedJoin ใช้เชื่อมตารางสองตารางด้วยคีย์ที่กำหนด แล้วสร้างคอลัมน์ใหม่เป็นตารางย่อย (nested table) ของข้อมูลที่จับคู่กันได้ ผลลัพธ์คล้ายการ Merge Queries ใน Power Query แต่จุดเด่นคือได้คอลัมน์ที่ยังเป็นตารางอยู่ เพื่อให้คุณเลือกว่าจะขยาย (Expand) หรือทำขั้นตอนต่อได้ยืดหยุ่น

สิ่งที่ควรรู้ก่อนใช้

  • คีย์ที่ใช้เชื่อมสามารถเป็นคอลัมน์เดียวหรือหลายคอลัมน์ (ส่งเป็น list)
  • ผลลัพธ์จะได้คอลัมน์ตารางย่อย ต้องใช้ Table.ExpandTableColumn เพื่อกระจายคอลัมน์
  • ค่าเริ่มต้นของ joinKind คือ JoinKind.LeftOuter
  • keyEqualityComparers ใช้กำหนดวิธีเทียบคีย์ (มักใช้เฉพาะกรณีพิเศษ)

ขั้นตอนการใช้งานทั่วไป

  1. เตรียมตารางหลักและตารางที่ต้องการเชื่อม
  2. กำหนดคอลัมน์คีย์ทั้งสองฝั่งให้ตรงกัน
  3. ตั้งชื่อคอลัมน์ผลลัพธ์ (newColumnName)
  4. ถ้าต้องการผลลัพธ์แบบแบน ให้ใช้ Table.ExpandTableColumn ต่อ

How it works

Merge ตารางอ้างอิงเพื่อเติมรายละเอียด

เชื่อมตารางธุรกรรมกับตารางอ้างอิง (เช่น สินค้า ลูกค้า) แล้วค่อย Expand เพื่อดึงข้อมูลเพิ่ม

เก็บข้อมูลฝั่งขวาเป็นตารางย่อย

เหมาะเมื่ออยากเก็บหลายรายการที่จับคู่กันไว้ในคอลัมน์เดียวก่อน แล้วค่อยเลือกวิธีจัดการภายหลัง

ควบคุมชนิดการเชื่อมอย่างชัดเจน

กำหนด joinKind เพื่อเลือกผลลัพธ์แบบ Inner/Left/Right/Full ให้ตรงกับโจทย์

Examples

ตัวอย่างที่ 1: Left Outer Join (ค่าเริ่มต้น)let Calls = Table.FromRecords({ [CustomerToCall = 1], [CustomerToCall = 3] }), Customers = Table.FromRecords({ [CustomerID = 1, Name = "Bob", Phone = "123-4567"…

ไม่ระบุ joinKind จะใช้ LeftOuter อัตโนมัติ ทำให้ทุกแถวของ Calls ถูกเก็บไว้ และ CustomerDetails มีข้อมูลเฉพาะแถวที่จับคู่ได้

fx
let
Calls = Table.FromRecords({
[CustomerToCall = 1],
[CustomerToCall = 3]
}),
Customers = Table.FromRecords({
[CustomerID = 1, Name = "Bob", Phone = "123-4567"],
[CustomerID = 2, Name = "Jim", Phone = "987-6543"],
[CustomerID = 3, Name = "Paul", Phone = "543-7890"]
}),
Joined = Table.NestedJoin(
Calls,
{"CustomerToCall"},
Customers,
{"CustomerID"},
"CustomerDetails"
)
in
Joined

ผลลัพธ์Table ที่มี CustomerToCall และคอลัมน์ CustomerDetails เป็นตารางย่อยของข้อมูลที่จับคู่ได้
ตัวอย่างที่ 2: Inner Joinlet Orders = Table.FromRecords({ [OrderID = 1, CustomerID = 10], [OrderID = 2, CustomerID = 20] }), Customers = Table.FromRecords({ [CustomerID = 10, Name = "An…

Inner Join จะเก็บเฉพาะแถวที่จับคู่ได้ทั้งสองฝั่ง ทำให้ OrderID=2 ถูกตัดออก

fx
let
Orders = Table.FromRecords({
[OrderID = 1, CustomerID = 10],
[OrderID = 2, CustomerID = 20]
}),
Customers = Table.FromRecords({
[CustomerID = 10, Name = "Ann"],
[CustomerID = 30, Name = "Ken"]
}),
Joined = Table.NestedJoin(
Orders,
{"CustomerID"},
Customers,
{"CustomerID"},
"Customer",
JoinKind.Inner
)
in
Joined

ผลลัพธ์Table เหลือเฉพาะ OrderID=1 ที่มี CustomerID ตรงกัน
ตัวอย่างที่ 3: Join ด้วยหลายคอลัมน์let Sales = Table.FromRecords({ [Region = "North", StoreID = 1, Amount = 100], [Region = "South", StoreID = 2, Amount = 200] }), StoreInfo = Table.FromRecords({…

การส่งคีย์เป็น list ช่วยให้ join หลายคอลัมน์ได้แม่นยำขึ้น ป้องกันการจับคู่ผิด

fx
let
Sales = Table.FromRecords({
[Region = "North", StoreID = 1, Amount = 100],
[Region = "South", StoreID = 2, Amount = 200]
}),
StoreInfo = Table.FromRecords({
[Region = "North", StoreID = 1, Manager = "A"],
[Region = "North", StoreID = 2, Manager = "B"]
}),
Joined = Table.NestedJoin(
Sales,
{"Region", "StoreID"},
StoreInfo,
{"Region", "StoreID"},
"StoreDetail",
JoinKind.LeftOuter
)
in
Joined

ผลลัพธ์Table ที่ได้ StoreDetail เป็นตารางย่อยเฉพาะแถวที่ Region และ StoreID ตรงกัน
ตัวอย่างที่ 4: เทียบคีย์แบบไม่สนตัวพิมพ์ใหญ่เล็กlet Left = Table.FromRecords({ [Code = "ab-01"], [Code = "CD-02"] }), Right = Table.FromRecords({ [Code = "AB-01", Value = 10], [Code = "cd-02", Value = 20] }),…

กำหนด keyEqualityComparers เป็น list ของ Comparer เพื่อควบคุมการเทียบคีย์ เช่น case-insensitive ใช้เฉพาะกรณีพิเศษเท่านั้น

fx
let
Left = Table.FromRecords({
[Code = "ab-01"],
[Code = "CD-02"]
}),
Right = Table.FromRecords({
[Code = "AB-01", Value = 10],
[Code = "cd-02", Value = 20]
}),
Joined = Table.NestedJoin(
Left,
{"Code"},
Right,
{"Code"},
"Match",
JoinKind.LeftOuter,
{Comparer.OrdinalIgnoreCase}
)
in
Joined

ผลลัพธ์Table ที่จับคู่ Code ได้แม้ตัวพิมพ์ใหญ่เล็กไม่ตรงกัน

FAQs

Table.NestedJoin ต่างจาก Table.Join อย่างไร?+

Table.NestedJoin คืนคอลัมน์เป็นตารางย่อย ส่วน Table.Join จะขยายคอลัมน์จากอีกตารางทันที เหมาะคนละสถานการณ์

ต้องขยายคอลัมน์ผลลัพธ์อย่างไร?+

ใช้ Table.ExpandTableColumn เพื่อเลือกคอลัมน์จากตารางย่อยมาแสดงในตารางหลัก

ถ้ามีหลายแถวที่จับคู่ได้จะเกิดอะไรขึ้น?+

ตารางย่อยในคอลัมน์ผลลัพธ์จะเก็บทุกแถวที่จับคู่ได้ ไม่ได้จำกัดแค่แถวแรก

ค่าเริ่มต้นของ joinKind คืออะไร?+

ถ้าไม่ระบุ joinKind จะใช้ JoinKind.LeftOuter ซึ่งเก็บทุกแถวจากตารางซ้ายไว้

Resources & Related

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

ฟังก์ชันนี้Table.NestedJoinTable functions
Table functions (8)
Table.AddJoinColumn

Table.AddJoinColumn เชื่อมต่อข้อมูลจากสองตารางตามคีย์ที่ตรงกัน โดยเก็บผลลัพธ์ในคอลัมน์ใหม่เป็นตารางแบบ nested แทนการขยายแนวนอน

Table.AddMatchColumn

Table.AddMatchColumn เพิ่มคอลัมน์ใหม่ที่มีค่าจากการแมตช์แถวในตารางอื่น โดยค้นหาค่าที่ตรงกับคีย์ เหมือน VLOOKUP แต่ทำงานโดยตรงบนตารางทั้งหมด

Table.Buffer

โหลดตารางเข้าสู่หน่วยความจำ (RAM) เพื่อแยกข้อมูลจากแหล่งเดิมและป้องกันไม่ให้ Query Folding ดึงข้อมูลใหม่

Table.Combine

Table.Combine ใช้สำหรับรวม list ของ table เข้าเป็น table เดียว ยับยั้ง append ตัว 1 แถวหลาย ๆ ตารางพร้อมกัน

Table.ExpandListColumn

Table.ExpandListColumn ใช้สำหรับขยายคอลัมน์ที่เก็บข้อมูลแบบ List ให้เป็นแถวแยก โดยแต่ละรายการใน List จะกลายเป็นแถวใหม่ ส่วนข้อมูลในคอลัมน์อื่นจะถูกทำซ้ำตามจำนวน

Table.ExpandTableColumn

Table.ExpandTableColumn ใช้แตกข้อมูลจากคอลัมน์ที่เป็น nested table ออกมาเป็นคอลัมน์และแถวปกติในตารางหลัก โดยรักษาข้อมูลคอลัมน์อื่นไว้ และทำซ้ำแถวหลักสำหรับแต่ละแถวในตารางซ้อน มักใช้คู่กับ Table.NestedJoin หลัง join ตาราง หรือใช้ขยายข้อมูลจากแหล่งที่มีโครงสร้างแบบ hierarchical เช่น JSON หรือ API

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

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