Thep Excel

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

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

=NATURALJOINUSAGE(<Table>)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
5/10

Difficulty
5/10

Usefulness
5/10

Syntax & Arguments

=NATURALJOINUSAGE(<Table>)

Argument Type Required Default Description
Table table Yes ตารางหรือ table expression ที่จะเพิ่มเข้าไปในตัวกรองแบบ natural join หลักใช้ร่วมกับ SUMMARIZECOLUMNS ในโมเดลแบบประกอบ

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 จับคู่ตามชื่อเดียวกัน ไม่ใช่ความสัมพันธ์
DAX Formula:

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

Result:

ตารางที่ก็อปรวม sales จากแหล่งข้อมูลภายนอก และใช้ natural join เพื่อจับคู่กับผลิตภัณฑ์ที่ใช้งานอยู่ในโมเดลภายใน

ตัวอย่างที่ 2: NATURALJOINUSAGE กับ VALUES
VAR FilteredCategories = VALUES(Product[Category]) VAR ResultTable = SUMMARIZECOLUMNS( ExternalTable[Category], NATURALJOINUSAGE(FilteredCategories), "Count", C…
ใช้ VALUES() เพื่อสร้าง table ของหมวดหมู่ที่เลือก แล้วปล่อยให้ NATURALJOINUSAGE จับคู่ตามชื่อ [Category]
DAX Formula:

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

Result:

ตารางที่นับรายการใน ExternalTable โดยกรองให้เหลือเฉพาะหมวดหมู่ที่มีอยู่ในโมเดลปัจจุบัน

ตัวอย่างที่ 3: เปรียบเทียบกับ NATURALINNERJOIN
-- NATURALINNERJOIN: คืนค่าเป็นตารางข้อมูล VAR JoinedTable = NATURALINNERJOIN( SELECTCOLUMNS(TableA, "ID", TableA[ID], "Name", TableA[Name]), SELECTCOLUMNS(Tabl…
เลือกฟังก์ชันตามว่าคุณต้องการตารางข้อมูล (NATURALINNERJOIN) หรือตัวกรองสำหรับการคำนวณ (NATURALJOINUSAGE)
DAX Formula:

-- 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

Result:

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

Additional Notes

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

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

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

Leave a Reply

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