Table.NestedJoin เชื่อมตารางสองตารางด้วยคีย์ที่กำหนด และสร้างคอลัมน์ใหม่ที่เก็บตารางย่อยของแถวที่จับคู่ได้ เหมาะกับงาน Merge ที่ต้องการเก็บรายละเอียดฝั่งขวาไว้เป็น nested table ก่อนจะ Expand หรือทำขั้นตอนต่อ
=Table.NestedJoin(table1 as table, key1 as any, table2 as any, key2 as any, newColumnName as text, optional joinKind as nullable number, optional keyEqualityComparers as nullable list) as table
=Table.NestedJoin(table1 as table, key1 as any, table2 as any, key2 as any, newColumnName as text, optional joinKind as nullable number, optional keyEqualityComparers as nullable list) as table
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| table1 | table | Yes | ตารางหลัก (ฝั่งซ้าย) ที่ต้องการคงแถวไว้ตามชนิดการ join | |
| key1 | any | Yes | คอลัมน์คีย์ของ table1 ระบุเป็นชื่อคอลัมน์หรือ list ของชื่อคอลัมน์ | |
| table2 | any | Yes | ตารางที่ต้องการเชื่อม (ฝั่งขวา) ซึ่งจะถูกจับคู่แล้วเก็บเป็นตารางย่อย | |
| key2 | any | Yes | คอลัมน์คีย์ของ table2 ให้ตรงกับ key1 (จำนวนคอลัมน์ต้องเท่ากัน) | |
| newColumnName | text | Yes | ชื่อคอลัมน์ใหม่ที่จะเก็บตารางย่อยของข้อมูลที่เชื่อมได้ | |
| joinKind | nullable number | Optional | JoinKind.LeftOuter | ชนิดการเชื่อม เช่น JoinKind.LeftOuter, JoinKind.Inner, JoinKind.FullOuter ค่าเริ่มต้นคือ LeftOuter |
| keyEqualityComparers | nullable list | Optional | null | รายการ comparer สำหรับเทียบคีย์แต่ละคอลัมน์ ใช้เฉพาะกรณีพิเศษ เช่น case-insensitive |
เชื่อมตารางธุรกรรมกับตารางอ้างอิง (เช่น สินค้า ลูกค้า) แล้วค่อย Expand เพื่อดึงข้อมูลเพิ่ม
เหมาะเมื่ออยากเก็บหลายรายการที่จับคู่กันไว้ในคอลัมน์เดียวก่อน แล้วค่อยเลือกวิธีจัดการภายหลัง
กำหนด joinKind เพื่อเลือกผลลัพธ์แบบ Inner/Left/Right/Full ให้ตรงกับโจทย์
let Calls = Table.FromRecords({ [CustomerToCall = 1], [CustomerToCall = 3] }), Customers = Table.FromRecords({ [CustomerID = 1, Name = "Bob", Phone = "123-4567"…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 เป็นตารางย่อยของข้อมูลที่จับคู่ได้
let Orders = Table.FromRecords({ [OrderID = 1, CustomerID = 10], [OrderID = 2, CustomerID = 20] }), Customers = Table.FromRecords({ [CustomerID = 10, Name = "An…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 ตรงกัน
let Sales = Table.FromRecords({ [Region = "North", StoreID = 1, Amount = 100], [Region = "South", StoreID = 2, Amount = 200] }), StoreInfo = Table.FromRecords({…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 ตรงกัน
let Left = Table.FromRecords({ [Code = "ab-01"], [Code = "CD-02"] }), Right = Table.FromRecords({ [Code = "AB-01", Value = 10], [Code = "cd-02", Value = 20] }),…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 ได้แม้ตัวพิมพ์ใหญ่เล็กไม่ตรงกัน
Table.NestedJoin คืนคอลัมน์เป็นตารางย่อย ส่วน Table.Join จะขยายคอลัมน์จากอีกตารางทันที เหมาะคนละสถานการณ์
ใช้ Table.ExpandTableColumn เพื่อเลือกคอลัมน์จากตารางย่อยมาแสดงในตารางหลัก
ตารางย่อยในคอลัมน์ผลลัพธ์จะเก็บทุกแถวที่จับคู่ได้ ไม่ได้จำกัดแค่แถวแรก
ถ้าไม่ระบุ joinKind จะใช้ JoinKind.LeftOuter ซึ่งเก็บทุกแถวจากตารางซ้ายไว้
Table.NestedJoin ใช้เชื่อมตารางสองตารางด้วยคีย์ที่กำหนด แล้วสร้างคอลัมน์ใหม่เป็นตารางย่อย (nested table) ของข้อมูลที่จับคู่กันได้ ผลลัพธ์คล้ายการ Merge Queries ใน Power Query แต่จุดเด่นคือได้คอลัมน์ที่ยังเป็นตารางอยู่ เพื่อให้คุณเลือกว่าจะขยาย (Expand) หรือทำขั้นตอนต่อได้ยืดหยุ่น