Thep Excel

NATURALJOINUSAGEใช้ตารางแบบ Natural Join ในตัวกรอง

NATURALJOINUSAGE ทำให้ table expression ถูกเพิ่มเข้าไปในตัวกรอง (filter context) แบบ natural join โดยจับคู่ตามคอลัมน์ชื่อเดียวกัน เป็นฟังก์ชันที่ออกแบบสำหรับการใช้งานขั้นสูงในโมเดลแบบประกอบ (composite models) และ SUMMARIZECOLUMNS

fx
=NATURALJOINUSAGE(<Table>)

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

อัปเดต 13 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
Table table ตารางหรือ table expression ที่จะเพิ่มเข้าไปในตัวกรองแบบ natural join หลักใช้ร่วมกับ SUMMARIZECOLUMNS ในโมเดลแบบประกอบ

Additional Notes

NATURALJOINUSAGE เป็นฟังก์ชันที่เพิ่ม table expression เข้าไปในตัวกรองแบบ natural join ซึ่งหมายความว่ามันจะจับคู่คอลัมน์โดยยึงตามชื่อเดียวกันแทนที่จะระบุความสัมพันธ์ได้อย่างชัดเจน บ่อยครั้งที่ผู้ใช้ DAX ทั่วไปจะไม่ต้องสัมผัสฟังก์ชันนี้โดยตรง เพราะมันถูกออกแบบมาสำหรับสถานการณ์ขั้นสูง โดยเฉพาะในโมเดลแบบประกอบ (composite models) ที่ต้องเขียน SUMMARIZECOLUMNS ไปยังแหล่งข้อมูลอื่น

ที่เจ๋งคือ NATURALJOINUSAGE ทำให้คุณบอก Power BI ได้ว่า “ฉันต้องการให้จับคู่ตามชื่อเดียวกัน ไม่ใช่ความสัมพันธ์ที่กำหนดไว้” เหมาะสำหรับปัญหาที่ชั้นสูงเช่นการทำงานข้ามโมเดล หรือเมื่อคุณต้องการควบคุมวิธีการจับคู่ข้อมูลอย่างแม่นยำ

ส่วนตัวผม มักพูดว่า NATURALJOINUSAGE เป็นเครื่องมือ “นำได้” (opt-in) ไม่ใช่เครื่องมือที่ส่วนใหญ่ต้องใช้ทุกวัน ถ้าคุณกำลังเขียน SUMMARIZECOLUMNS ในโมเดลแบบประกอบ และพบว่าการจับคู่ไม่ถูกต้อง นั่นคือช่วงเวลาที่ NATURALJOINUSAGE อาจช่วยได้

How it works

ใช้ตารางเงื่อนไขเป็นตัวกรองแบบ join

ทำให้ table expression ไปกรองตารางอื่นผ่านคีย์ชื่อเดียวกัน

ทำงานร่วมกับการคำนวณที่รับ table filter

ใช้เป็นตัวกรองใน CALCULATE เพื่อเปลี่ยนบริบทตัวกรองด้วย semantics แบบ natural join

Examples

ตัวอย่างที่ 1: ใช้ NATURALJOINUSAGE ใน SUMMARIZECOLUMNS (แนวคิดขั้นสูง)VAR ResultTable = SUMMARIZECOLUMNS( ExternalTable[Category], ExternalTable[Year], NATURALJOINUSAGE(FILTER(LocalProducts, LocalProducts[Active] = TRUE)), "Sales"…

ตัวอย่างนี้สมมติว่า ExternalTable มีคอลัมน์ชื่อเดียวกับ LocalProducts เช่น [Category] NATURALJOINUSAGE บอกให้ SUMMARIZECOLUMNS จับคู่ตามชื่อเดียวกัน ไม่ใช่ความสัมพันธ์

fx
VAR ResultTable =
SUMMARIZECOLUMNS(
ExternalTable[Category],
ExternalTable[Year],
NATURALJOINUSAGE(FILTER(LocalProducts, LocalProducts[Active] = TRUE)),
"Sales", [TotalSales]
)
RETURN ResultTable

ผลลัพธ์ตารางที่ก็อปรวม sales จากแหล่งข้อมูลภายนอก และใช้ natural join เพื่อจับคู่กับผลิตภัณฑ์ที่ใช้งานอยู่ในโมเดลภายใน
ตัวอย่างที่ 2: NATURALJOINUSAGE กับ VALUESVAR FilteredCategories = VALUES(Product[Category]) VAR ResultTable = SUMMARIZECOLUMNS( ExternalTable[Category], NATURALJOINUSAGE(FilteredCategories), "Count", C…

ใช้ VALUES() เพื่อสร้าง table ของหมวดหมู่ที่เลือก แล้วปล่อยให้ NATURALJOINUSAGE จับคู่ตามชื่อ [Category]

fx
VAR FilteredCategories = VALUES(Product[Category])
VAR ResultTable =
SUMMARIZECOLUMNS(
ExternalTable[Category],
NATURALJOINUSAGE(FilteredCategories),
"Count", COUNTA(ExternalTable[ID])
)
RETURN ResultTable

ผลลัพธ์ตารางที่นับรายการใน ExternalTable โดยกรองให้เหลือเฉพาะหมวดหมู่ที่มีอยู่ในโมเดลปัจจุบัน
ตัวอย่างที่ 3: เปรียบเทียบกับ NATURALINNERJOIN— NATURALINNERJOIN: คืนค่าเป็นตารางข้อมูล VAR JoinedTable = NATURALINNERJOIN( SELECTCOLUMNS(TableA, "ID", TableA[ID], "Name", TableA[Name]), SELECTCOLUMNS(Tabl…

เลือกฟังก์ชันตามว่าคุณต้องการตารางข้อมูล (NATURALINNERJOIN) หรือตัวกรองสำหรับการคำนวณ (NATURALJOINUSAGE)

fx
— NATURALINNERJOIN: คืนค่าเป็นตารางข้อมูล
VAR JoinedTable =
NATURALINNERJOIN(
SELECTCOLUMNS(TableA, "ID", TableA[ID], "Name", TableA[Name]),
SELECTCOLUMNS(TableB, "ID", TableB[ID], "Value", TableB[Value])
)

— NATURALJOINUSAGE: ใช้เป็นตัวกรองใน SUMMARIZECOLUMNS
VAR FilteredResult =
SUMMARIZECOLUMNS(
TableA[ID],
NATURALJOINUSAGE(SELECTCOLUMNS(TableB, "ID", TableB[ID])),
"Total", SUMX(TableA, TableA[Value])
)
RETURN FilteredResult

ผลลัพธ์NATURALINNERJOIN ให้ตารางผลลัพธ์ของการ join แต่ NATURALJOINUSAGE ใช้ table expression เป็นตัวกรอง

FAQs

NATURALJOINUSAGE ใช้ได้กับฟังก์ชันไหนบ้าง?+

NATURALJOINUSAGE ถูกออกแบบให้ใช้เป็นตัวกรองใน SUMMARIZECOLUMNS เท่านั้น โดยเฉพาะเมื่อ SUMMARIZECOLUMNS ส่งคำค้นหาไปยังโมเดลอื่นในโมเดลแบบประกอบ (composite models) ถ้าคุณพยายามใช้กับฟังก์ชันอื่น มันอาจไม่ได้ผลตามที่คาดหวัง

ต่างกันระหว่าง NATURALJOINUSAGE กับ TREATAS ยังไง?+

TREATAS ใช้เพื่อจับคู่ค่าโดยตำแหน่ง (positional matching) โดยไม่สำคัญชื่อคอลัมน์ ส่วน NATURALJOINUSAGE จับคู่ตามชื่อคอลัมน์เดียวกัน (semantic matching) TREATAS มีประโยชน์มากกว่าในการใช้งานทั่วไป ส่วน NATURALJOINUSAGE เป็นตัวเลือกสำหรับสถานการณ์ขั้นสูง

ฉันต้อง NATURALJOINUSAGE จริงหรือใช้ NATURALINNERJOIN แล้วก็ได้?+

ขึ้นอยู่กับสิ่งที่คุณต้องการ ถ้าคุณต้องการตารางที่ join แล้ว ให้ใช้ NATURALINNERJOIN ถ้าคุณกำลังเขียน SUMMARIZECOLUMNS ในสภาพแวดล้อมโมเดลแบบประกอบและต้องการควบคุมวิธีการจับคู่ระหว่างแหล่งข้อมูล ให้ใช้ NATURALJOINUSAGE

NATURALJOINUSAGE ใช้สำหรับ row context ได้ไหม?+

ไม่ แนะนำให้ใช้ NATURALJOINUSAGE กับ row context ฟังก์ชันนี้ออกแบบมาสำหรับ filter context ของ SUMMARIZECOLUMNS โดยเฉพาะในโมเดลแบบประกอบ

Resources & Related

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

ฟังก์ชันนี้NATURALJOINUSAGETable manipulation
Table manipulation (6)
NATURALINNERJOIN

NATURALINNERJOIN ทำ inner join ระหว่าง LeftTable และ RightTable โดยใช้คอลัมน์ชื่อเดียวกันเป็นคีย์การจับคู่ คืนผลลัพธ์เฉพาะแถวที่จับคู่ได้ทั้งสองตาราง และมักใช้ร่วมกับ SELECTCOLUMNS เพื่อจัดชื่อคอลัมน์ให้ตรงกัน

NATURALLEFTOUTERJOIN

NATURALLEFTOUTERJOIN ทำ left outer join ระหว่าง LeftTable และ RightTable โดยใช้คอลัมน์ชื่อเดียวกันเป็นคีย์ เก็บทุกแถวของตารางซ้ายไว้ทั้งหมด และเติมคอลัมน์จากตารางขวาเมื่อจับคู่ได้ (ไม่จับคู่จะเป็น BLANK)

SELECTCOLUMNS

สร้างตารางใหม่โดยเลือกเฉพาะคอลัมน์ที่ต้องการจากตารางต้นฉบับและเพิ่มคอลัมน์ที่คำนวณได้ ต่างจาก ADDCOLUMNS ตรงที่ SELECTCOLUMNS เริ่มจากตารางว่างแล้วเพิ่มเฉพาะคอลัมน์ที่ระบุ ทำให้สามารถปรับโครงสร้างตารางและเลือกข้อมูลที่จำเป็นได้อย่างยืดหยุ่น

SUMMARIZECOLUMNS

SUMMARIZECOLUMNS เป็นฟังก์ชันหลักสำหรับสร้างตารางสรุปผล โดยจัดกลุ่มตามคอลัมน์ที่กำหนด พร้อมเพิ่มคอลัมน์คำนวณจากเมเชอร์ และสามารถใส่เงื่อนไขกรองได้ทันที

TREATAS

TREATAS เป็นเสมือนการสร้าง "virtual relationship" โดยไม่ต้องแก้โมเดล ช่วยให้ส่งเงื่อนไขข้ามตารางที่ไม่เชื่อมกัน หรือเมื่อต้องการส่งหลายคีย์พร้อมกัน

VALUES

VALUES ดึงค่าที่ไม่ซ้ำจากคอลัมน์ หรือดึงแถวทั้งหมดจากตาราง โดยรวมแถว BLANK ที่เกิดจากข้อผิดพลาดของความสัมพันธ์ (Referential Integrity Violations) ส่วน DISTINCT จะไม่รวมแถว BLANK นี้

Filter (1)
FILTER

FILTER ใช้กรองแถวในตารางตามเงื่อนไขที่ซับซ้อน โดยวนลูปทุกแถวและประเมินเงื่อนไข เหมาะกับการกรองด้วย Measure หรือ Expression ซึ่ง Boolean Expression ทำไม่ได้ แต่ต้องระวังเรื่อง Performance เพราะเป็น Iterator Function ที่ช้ากว่า Boolean Expression ดังนั้นควรใช้เฉพาะเมื่อจำเป็น และอย่าใช้ FILTER กับ RELATED เพื่อกรองข้ามตาราง ให้กรองที่ Dimension Table โดยตรงแทน

Comments

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