Thep Excel

JoinAlgorithm.Typeระบุอัลกอริทึมที่ใช้ในการ Join

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

fx
={{ JoinAlgorithm.Dynamic | JoinAlgorithm.PairwiseHash | JoinAlgorithm.SortMerge | JoinAlgorithm.LeftHash | JoinAlgorithm.RightHash | JoinAlgorithm.LeftIndex | JoinAlgorithm.RightIndex }}

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

อัปเดต 4 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
[JoinAlgorithm.Dynamic]ไม่บังคับ number (0) ปล่อยให้ Power Query เลือกอัลกอริทึมที่เหมาะสมเอง โดยดูจากลักษณะของข้อมูลและตาราง (ค่าเริ่มต้น)
[JoinAlgorithm.PairwiseHash]ไม่บังคับ number (1) เก็บข้อมูลของทั้งสองตารางไว้ในหน่วยความจำก่อน แล้วค่อย Join ทีหลัง ใช้ได้ดีถ้าข้อมูลน้อยเท่านั้น
[JoinAlgorithm.SortMerge]ไม่บังคับ number (2) Join โดยถือว่าทั้งสองตารางถูกเรียงลำดับแล้ว เร็วและประหยัดหน่วยความจำ แต่ต้องแน่ใจว่าข้อมูลเรียงตาม Join Key จริงๆ
[JoinAlgorithm.LeftHash]ไม่บังคับ number (3) เก็บข้อมูลตารางซ้ายไว้เป็น Lookup Table แล้ว Stream ข้อมูลตารางขวา เหมาะเวลาตารางซ้ายเล็กกว่า
[JoinAlgorithm.RightHash]ไม่บังคับ number (4) เก็บข้อมูลตารางขวาไว้เป็น Lookup Table แล้ว Stream ข้อมูลตารางซ้าย เหมาะเวลาตารางขวาเล็กกว่า
[JoinAlgorithm.LeftIndex]ไม่บังคับ number (5) ใช้ Key จากตารางซ้ายเพื่อ Query ตารางขวา เหมาะตารางขวาใหญ่ที่รองรับ Query Folding
[JoinAlgorithm.RightIndex]ไม่บังคับ number (6) ใช้ Key จากตารางขวาเพื่อ Query ตารางซ้าย เหมาะตารางซ้ายใหญ่ที่รองรับ Query Folding

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

Additional Notes

เวลาที่เราทำ Join ข้อมูลจากตารางสองตางในตัวกำหนด Power Query ด้านหลังส่วนใหญ่คนไม่เห็นอัลกอริทึมที่ใช้คำนวณ แต่ผมบอกให้ฟังนะ อัลกอริทึมที่ถูกเลือกมันส่งผลกับความเร็วและการใช้หน่วยความจำเยอะเลยครับ

ที่เจ๋งคือ JoinAlgorithm.Type มันให้คุณเลือกใช้อัลกอริทึมที่เหมาะสมเอง ไม่ว่าจะเป็น Dynamic (ปล่อยให้ Power Query เลือก) LeftHash RightHash SortMerge หรือ Index-based ต่างๆ แต่ละตัวมีจุดเด่นที่แตกต่างกันครับ

ส่วนตัวผมตรวจสอบชนิดข้อมูลและขนาดตารางก่อนเลือกอัลกอริทึม ถ้าตารางเล็กกว่าก็ใช้ Hash ถ้าตารางใหญ่ก็ลองใช้ Index หรือ SortMerge แล้วดูว่าไหนเร็วกว่า 😎

Examples

ใช้ Dynamic Algorithm (ค่าเริ่มต้น)let LeftTable = Table.FromRecords({[ID = 1, Name = "Alice"], [ID = 2, Name = "Bob"]}), RightTable = Table.FromRecords({[ID = 1, Salary = 50000], [ID = 2, Salary…

ใช้ JoinAlgorithm.Dynamic เป็นตัวเลือกเริ่มต้นที่ปลอดภัยที่สุด Power Query จะตรวจสอบข้อมูลและเลือกอัลกอริทึมที่ดีที่สุดโดยอัตโนมัติ

fx
let
LeftTable = Table.FromRecords({[ID = 1, Name = "Alice"], [ID = 2, Name = "Bob"]}),
RightTable = Table.FromRecords({[ID = 1, Salary = 50000], [ID = 2, Salary = 60000]}),
Joined = Table.Join(LeftTable, {"ID"}, RightTable, {"ID"}, JoinKind.Inner, JoinAlgorithm.Dynamic)
in
Joined

ผลลัพธ์ตารางที่รวม ID, Name, และ Salary โดยให้ Power Query เลือกวิธี Join เอง
ใช้ LeftHash เมื่อตารางซ้ายเล็กlet SmallTable = Table.FromRecords({[ProductID = 1, ProductName = "Laptop"], [ProductID = 2, ProductName = "Phone"]}), LargeTable = Table.FromRecords({[ProductI…

เมื่อตารางซ้ายมีจำนวนแถวน้อย (SmallTable) ให้ใช้ LeftHash มันจะเก็บ SmallTable ไว้ในหน่วยความจำแล้ว Stream ข้อมูลจาก LargeTable ทีละแถว ประหยัดหน่วยความจำและเร็วกว่า

fx
let
SmallTable = Table.FromRecords({[ProductID = 1, ProductName = "Laptop"], [ProductID = 2, ProductName = "Phone"]}),
LargeTable = Table.FromRecords({[ProductID = 1, Quantity = 100], [ProductID = 2, Quantity = 200], [ProductID = 1, Quantity = 50]}),
Joined = Table.Join(SmallTable, {"ProductID"}, LargeTable, {"ProductID"}, JoinKind.Inner, JoinAlgorithm.LeftHash)
in
Joined

ผลลัพธ์ตารางที่ Join ProductID Name และ Quantity โดยเก็บ SmallTable ไว้ในหน่วยความจำ
ใช้ SortMerge เมื่อข้อมูลเรียงลำดับแล้วlet SortedLeft = Table.Sort(Table.FromRecords({[ID = 2, Value = "B"], [ID = 1, Value = "A"]}), {{"ID", Order.Ascending}}), SortedRight = Table.Sort(Table.FromRe…

ถ้าข้อมูลเรียงลำดับแล้ว SortMerge เป็นตัวเลือกที่ดีที่สุด มันเร็วมากและใช้หน่วยความจำน้อยกว่า Hash algorithms ผมชอบใช้วิธีนี้เวลาข้อมูลมากๆ

fx
let
SortedLeft = Table.Sort(Table.FromRecords({[ID = 2, Value = "B"], [ID = 1, Value = "A"]}), {{"ID", Order.Ascending}}),
SortedRight = Table.Sort(Table.FromRecords({[ID = 1, Amount = 100], [ID = 2, Amount = 200]}), {{"ID", Order.Ascending}}),
Joined = Table.Join(SortedLeft, {"ID"}, SortedRight, {"ID"}, JoinKind.Inner, JoinAlgorithm.SortMerge)
in
Joined

ผลลัพธ์ตารางที่ Join ID Value และ Amount โดยใช้ SortMerge ซึ่งเร็วและประหยัด
ใช้ RightHash เมื่อตารางขวาเล็กlet LargeTable = Table.FromRecords({[ID = 1, Name = "A"], [ID = 2, Name = "B"]}), SmallTable = Table.FromRecords({[ID = 1, Category = "X"], [ID = 2, Category =…

เมื่อตารางขวามีจำนวนแถวน้อย (SmallTable) ให้ใช้ RightHash มันจะเก็บตารางขวาไว้ในหน่วยความจำแล้ว Stream ข้อมูลจากตารางซ้าย ประสิทธิภาพดีเมื่อตารางขวาเล็กกว่า

fx
let
LargeTable = Table.FromRecords({[ID = 1, Name = "A"], [ID = 2, Name = "B"]}),
SmallTable = Table.FromRecords({[ID = 1, Category = "X"], [ID = 2, Category = "Y"]}),
Joined = Table.Join(LargeTable, {"ID"}, SmallTable, {"ID"}, JoinKind.Inner, JoinAlgorithm.RightHash)
in
Joined

ผลลัพธ์ตารางที่ Join ID Name และ Category โดยเก็บ SmallTable ไว้ในหน่วยความจำ

FAQs

JoinAlgorithm.Type คืออะไร และทำไมผมต้องใส่ใจ?+

JoinAlgorithm.Type นั่นแหละคือตัวควบคุมว่า Power Query จะใช้อัลกอริทึมไหนในการ Join ข้อมูลครับ ผมเห็นมาหลายครั้งที่คนเขียน M code ลืมใส่ใจเรื่องนี้ แล้วได้ผลลัพธ์ที่ช้ามากๆ เลือกอัลกอริทึมที่เหมาะสมกับข้อมูลของคุณแล้วเร็วเลย

ความแตกต่างระหว่าง LeftHash กับ RightHash คืออะไร?+

LeftHash เก็บตารางซ้ายไว้ในหน่วยความจำ Stream ตารางขวา ใช้เวลาตารางซ้ายเล็กกว่า RightHash เก็บตารางขวาไว้ในหน่วยความจำ Stream ตารางซ้าย ใช้เวลาตารางขวาเล็กกว่า ผมมักตรวจสอบว่าตารางไหนเล็กกว่าแล้วเลือกให้เหมาะสม

SortMerge ต้องใช้เมื่อไหร่?+

ผมแนะนำให้ใช้ SortMerge เมื่อข้อมูลเรียงลำดับแล้วตามพื้นฐาน Join Key แล้วครับ มันเร็วมากและประหยัดหน่วยความจำ แต่ต้องแน่ใจจริงๆ ว่าข้อมูลเรียงแล้ว ถ้าไม่เรียงผลลัพธ์จะผิดแน่ๆ

LeftIndex กับ RightIndex ต่างกันยังไง?+

LeftIndex ใช้ Key จากตารางซ้ายเพื่อ Query ตารางขวา เหมาะตารางขวาใหญ่ที่รองรับ Query Folding (เช่น SQL database) RightIndex ใช้ Key จากตารางขวาเพื่อ Query ตารางซ้าย เหมาะตารางซ้ายใหญ่ ผมใช้มากเวลาทำงานกับ Database ที่รองรับ Folding

ผมควรเลือก Dynamic หรือที่อื่น?+

ส่วนตัวผมแนะนำให้เริ่มด้วย Dynamic (ค่าเริ่มต้น) ปล่อยให้ Power Query เลือกเอง แต่ถ้า Performance ไม่ดีหรือคุณรู้ลักษณะข้อมูลได้ดีก็ให้ระบุอัลกอริทึมเฉพาะครับ

Resources & Related

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

ฟังก์ชันนี้JoinAlgorithm.Typeenumerations
Table functions (3)
Table.Join

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

Table.NestedJoin

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

Table.Sort

เรียงลำดับข้อมูลในตารางตามคอลัมน์ที่ระบุ รองรับการเรียงหลายระดับและกำหนดทิศทางการเรียง

enumerations (1)
JoinKind.Type

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

Comments

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