---
title: NATURALJOINUSAGE – ใช้ตารางแบบ Natural Join ในตัวกรอง
url: https://www.thepexcel.com/functions/dax/table-manipulation/naturaljoinusage-dax/
type: function-explainer
program: DAX
syntax: "NATURALJOINUSAGE(<Table>)"
date: 2025-12-13
updated: 2025-12-25
scores:
  popularity: 5
  difficulty: 5
  usefulness: 5
---

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

> NATURALJOINUSAGE ทำให้ table expression ถูกเพิ่มเข้าไปในตัวกรอง (filter context) แบบ natural join โด

## คำอธิบาย

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

## Syntax

```excel
NATURALJOINUSAGE(&lt;Table&gt;)
```

## Arguments

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

## เคสการใช้งาน

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

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

_เหมาะกับ:_ join-like-filter

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

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

_เหมาะกับ:_ calculate-with-join-filter

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ใช้ NATURALJOINUSAGE ใน SUMMARIZECOLUMNS (แนวคิดขั้นสูง)

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

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

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

### 2. ตัวอย่างที่ 2: NATURALJOINUSAGE กับ VALUES

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

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

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

### 3. ตัวอย่างที่ 3: เปรียบเทียบกับ NATURALINNERJOIN

```excel
-- 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 เป็นตัวกรอง`

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

## หมายเหตุเพิ่มเติม

- ผมแนะนำให้ตรวจสอบชื่อคอลัมน์ก่อนใช้ NATURALJOINUSAGE แน่ใจว่าตารางทั้งสองมีคอลัมน์ชื่อเดียวกันที่ต้องการให้จับคู่ ไม่เช่นนั้น natural join จะได้ผลลัพธ์ที่ไม่คาดหวัง

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

- ส่วนตัวผม มักจะเลือกใช้ TREATAS ก่อน เพราะมันใช้งานได้กว้างขวางกว่า ถ้า TREATAS ไม่ได้ผล (เช่น ชื่อคอลัมน์แตกต่างกัน) นั่นคือช่วงเวลาที่ NATURALJOINUSAGE อาจช่วยได้

## คำถามที่พบบ่อย

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

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

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

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

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

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

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

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

## ฟังก์ชันที่เกี่ยวข้อง

- calculate
- values
- selectcolumns
- naturalinnerjoin
- naturalleftouterjoin
- treatas
- [FILTER – กรองตารางด้วยเงื่อนไขที่ซับซ้อน (Iterator Function)](https://www.thepexcel.com/functions/dax/filter/filter-dax/)

## แหล่งข้อมูลเพิ่มเติม

- [DAX Guide: NATURALJOINUSAGE](https://dax.guide/naturaljoinusage/) _(guide)_
- [DAX Guide: SUMMARIZECOLUMNS](https://dax.guide/summarizecolumns/) _(guide)_
- [DAX Guide: NATURALINNERJOIN](https://dax.guide/naturalinnerjoin/) _(guide)_
- [DAX Guide: TREATAS](https://dax.guide/treatas/) _(guide)_

---

_Source: [https://www.thepexcel.com/functions/dax/table-manipulation/naturaljoinusage-dax/](https://www.thepexcel.com/functions/dax/table-manipulation/naturaljoinusage-dax/)_
