---
title: SUBSTITUTEWITHINDEX – แทนคอลัมน์ร่วมด้วยดัชนี (0-based) เพื่อทำ mapping
url: https://www.thepexcel.com/functions/dax/table-manipulation/substitutewithindex-dax/
type: function-explainer
program: DAX
syntax: "SUBSTITUTEWITHINDEX(<Table>, <Name>, <SemiJoinIndexTable>, <Expression> [, [<Order>] [, <Expression> [, [<Order>]]]])"
date: 2025-12-13
updated: 2025-12-17
scores:
  popularity: 2
  difficulty: 5
  usefulness: 2
---

# SUBSTITUTEWITHINDEX – แทนคอลัมน์ร่วมด้วยดัชนี (0-based) เพื่อทำ mapping

> สร้างดัชนี 0-based เพื่อแทนคอลัมน์ที่ใช้จับคู่

## คำอธิบาย

คืนตารางที่เป็นผลแบบ semi-join ระหว่าง 2 ตาราง พร้อมแทนคอลัมน์ร่วมด้วยดัชนี 0-based ซึ่งคำนวณจากลำดับแถวของตารางอ้างอิงหลังจัดเรียง

## Syntax

```excel
SUBSTITUTEWITHINDEX(&lt;Table&gt;, &lt;Name&gt;, &lt;SemiJoinIndexTable&gt;, &lt;Expression&gt; [, [&lt;Order&gt;] [, &lt;Expression&gt; [, [&lt;Order&gt;]]]])
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| Table | Yes | table |  | ตารางหลักที่ต้องการปรับ โดยจะถูกคืนกลับมาในรูปแบบตารางผลลัพธ์ |
| Name | Yes | string |  | ชื่อคอลัมน์ดัชนีใหม่ที่จะถูกเพิ่มลงในผลลัพธ์ |
| SemiJoinIndexTable | Yes | table |  | ตารางอ้างอิงสำหรับสร้างดัชนีและใช้จับคู่กับ Table (หลังจัดเรียงตาม Expression/Order ที่ระบุ) |
| Expression | Yes | expression |  | นิพจน์สำหรับ “จัดลำดับ” ตารางอ้างอิง (SemiJoinIndexTable); สามารถระบุได้หลายตัว |
| Order | No | keyword | ASC | ทิศทางการจัดเรียงของแต่ละ Expression เช่น ASC หรือ DESC |

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

### ทำ mapping ค่าไปยังแกนคอลัมน์ใน matrix/visual

ใช้สร้าง “หมายเลขคอลัมน์” จากรายการหัวคอลัมน์ที่จัดลำดับแล้ว เพื่อวางค่าลงตำแหน่งที่ถูกต้อง

_เหมาะกับ:_ visual-column-mapping

### แทนคีย์หลายคอลัมน์ด้วยดัชนีเพื่อทำงานต่อ

เมื่อมีคอลัมน์ร่วมหลายตัว การสร้างดัชนีช่วยให้การจัดรูปตาราง/ส่งต่อข้อมูลทำได้ง่ายขึ้น

_เหมาะกับ:_ replace-join-keys-with-index

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: แนวคิดสร้างคอลัมน์ดัชนีจากตารางอ้างอิง

```excel
แนวคิด (โครง) =
SUBSTITUTEWITHINDEX(
    &lt;ResultTable&gt;,
    "ColIndex",
    &lt;IndexTable&gt;,
    &lt;SortExpression&gt;,
    ASC
)
```

**ผลลัพธ์:** `ได้ตารางที่มีคอลัมน์ "ColIndex" เป็นเลข 0,1,2,... ตามลำดับของตารางอ้างอิง`

จุดสำคัญคือ IndexTable ต้องเป็นชุดค่าที่กำหนดลำดับไว้ชัดเจน แล้วจึงนำไปแทนคอลัมน์ร่วมด้วยดัชนี

### 2. ตัวอย่างที่ 2: ใช้ร่วมกับ SUMMARIZECOLUMNS เพื่อเตรียม ResultTable (แนวคิด)

```excel
R (แนวคิด) =
SUMMARIZECOLUMNS(
    'Product'[แบรนด์],
    'Date'[ปี],
    "Amount", [Sales Amount]
)

Result (แนวคิด) =
SUBSTITUTEWITHINDEX(
    R,
    "ColIndex",
    &lt;IndexTable&gt;,
    'Date'[ปี],
    ASC
)
```

**ผลลัพธ์:** `สร้างตารางผลรวมแล้วแทนคอลัมน์ปีด้วยดัชนีตามลำดับปี`

มักใช้ในงาน mapping ค่าไปวางตามลำดับหัวคอลัมน์ที่กำหนด

### 3. ตัวอย่างที่ 3: ระวังเรื่อง data lineage/ชื่อคอลัมน์

```excel
แนวคิด: ถ้าตารางอ้างอิงมีคอลัมน์ชื่อชนกับคอลัมน์ที่มี lineage อาจเกิดข้อผิดพลาด
ให้พิจารณาใช้ SELECTCOLUMNS เพื่อสร้างคอลัมน์ใหม่จากนิพจน์แทน
```

**ผลลัพธ์:** `ลดโอกาสชนกันของ metadata ทำให้จับคู่ได้ตามที่ต้องการ`

ในงานจริงมักต้องจัดรูปคอลัมน์ให้ชัดเจนก่อนทำการจับคู่/แทนดัชนี

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

การจับคู่ระหว่าง 2 ตารางอาศัยชื่อคอลัมน์/lineage ของคอลัมน์ร่วม; ถ้าจับคู่ไม่ติด ให้ตรวจว่า column names/ชนิดข้อมูล และการสร้างตารางด้วย SELECTCOLUMNS ทำให้ lineage เปลี่ยนไปหรือไม่

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

**Q: SUBSTITUTEWITHINDEX เริ่มดัชนีที่เลขอะไร?**

เริ่มที่ 0 (0-based index) เช่น 0, 1, 2, ...

**Q: ฟังก์ชันนี้เหมาะกับการเขียน measure ทั่วไปไหม?**

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

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

- summarizecolumns
- summarize
- selectcolumns
- treatas
- addcolumns
- values
- [INDEX – ดึงแถวตามตำแหน่งภายในเพาร์ติชัน](https://www.thepexcel.com/functions/dax/filter/index-dax/)
- naturalinnerjoin
- naturalleftouterjoin

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

- [DAX Guide: SUBSTITUTEWITHINDEX](https://dax.guide/substitutewithindex/) _(documentation)_

---

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