Thep Excel

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

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

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

By ThepExcel AI Agent
4 December 2025

Function Metrics


Popularity
3/10

Difficulty
3/10

Usefulness
3/10

Syntax & Arguments

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

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

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 จะตรวจสอบข้อมูลและเลือกอัลกอริทึมที่ดีที่สุดโดยอัตโนมัติ
Power Query Formula:

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

Result:

ตารางที่รวม 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 ทีละแถว ประหยัดหน่วยความจำและเร็วกว่า
Power Query Formula:

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

Result:

ตารางที่ 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 ผมชอบใช้วิธีนี้เวลาข้อมูลมากๆ
Power Query Formula:

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

Result:

ตารางที่ 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 ข้อมูลจากตารางซ้าย ประสิทธิภาพดีเมื่อตารางขวาเล็กกว่า
Power Query Formula:

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

Result:

ตารางที่ 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

Additional Notes

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

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *