---
title: MATCHBY – กำหนดคอลัมน์สำหรับระบุแถวปัจจุบัน (Window Functions)
url: https://www.thepexcel.com/functions/dax/filter/matchby-dax/
type: function-explainer
program: DAX
syntax: "MATCHBY(<Column>[, <Column>])"
date: 2025-12-13
updated: 2025-12-17
scores:
  popularity: 3
  difficulty: 5
  usefulness: 3
---

# MATCHBY – กำหนดคอลัมน์สำหรับระบุแถวปัจจุบัน (Window Functions)

> กำหนดคอลัมน์เพื่อระบุแถวปัจจุบันใน window functions

## คำอธิบาย

MATCHBY ระบุคอลัมน์ที่ใช้จับคู่และระบุแถวปัจจุบันใน window functions เพื่อให้การเลื่อน/เลือกตำแหน่งแถวทำงานถูกต้องเมื่อมีค่า ORDERBY ซ้ำ หรือเมื่อจำเป็นต้องกำหนดเอกลักษณ์ของแถว

## Syntax

```excel
MATCHBY(&lt;Column&gt;[, &lt;Column&gt;])
```

**Variant**

```excel
MATCHBY(&lt;Column&gt;)
```

ระบุคอลัมน์เดียวเพื่อใช้ระบุแถว

**Variant**

```excel
MATCHBY(&lt;Column1&gt;, &lt;Column2&gt;)
```

ระบุหลายคอลัมน์ (แนวคิด composite key)

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| Column | Yes | column |  | คอลัมน์ที่ใช้ระบุและจับคู่แถวปัจจุบันภายในกลุ่ม |
| Column2 | No | column | ไม่ระบุ | คอลัมน์เพิ่มเติมเพื่อช่วยระบุเอกลักษณ์ของแถว |

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

### ทำให้ผลของ OFFSET/INDEX นิ่งขึ้นเมื่อ ORDERBY มีค่าซ้ำ

ถ้าหลายแถวมีค่าที่ใช้เรียงเท่ากัน ให้เพิ่ม MATCHBY เพื่อระบุแถวให้ชัด

_เหมาะกับ:_ stable-window-result

### ใช้คีย์หลายคอลัมน์เพื่อระบุแถว

เช่นใช้ ProductKey + Date เพื่อให้แถวมีเอกลักษณ์

_เหมาะกับ:_ composite-key-row-id

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ใช้ MATCHBY กับ OFFSET (แนวคิด)

```excel
ยอดขายแถวก่อนหน้า (แนวคิด) =
VAR t =
    OFFSET(
        -1,
        SUMMARIZECOLUMNS(Product[ProductKey], "Sales", [Total Sales]),
        ORDERBY([Sales], DESC),
        MATCHBY(Product[ProductKey])
    )
RETURN
MINX(t, [Sales])
```

**ผลลัพธ์:** `ได้ค่ายอดขายของแถวก่อนหน้าตามลำดับที่กำหนด`

MATCHBY ช่วยให้การระบุแถวปัจจุบันชัดเจนขึ้นเมื่อ [Sales] มีค่าซ้ำ

### 2. ตัวอย่างที่ 2: ใช้ MATCHBY กับ INDEX (แนวคิด)

```excel
แถวอันดับ 1 ต่อหมวด (แนวคิด) =
INDEX(
    1,
    SUMMARIZECOLUMNS(Product[Category], Product[ProductKey], "Sales", [Total Sales]),
    ORDERBY([Sales], DESC),
    PARTITIONBY(Product[Category]),
    MATCHBY(Product[ProductKey])
)
```

**ผลลัพธ์:** `ได้ตาราง 1 แถวตามตำแหน่งที่เลือก`

ตัวอย่างนี้สื่อแนวคิด: MATCHBY ใช้เพื่อระบุเอกลักษณ์ของแถวใน window functions

### 3. ตัวอย่างที่ 3: ใช้หลายคอลัมน์เพื่อระบุแถว (แนวคิด)

```excel
MATCHBY หลายคีย์ (แนวคิด) =
MATCHBY(Sales[ProductKey], Sales[OrderDate])
```

**ผลลัพธ์:** `กำหนดคีย์ผสมเพื่อระบุแถว`

เหมาะเมื่อคอลัมน์เดียวไม่พอทำให้แถวมีเอกลักษณ์

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

Window functions ต้องพึ่งการกำหนดลำดับ/กลุ่มให้ชัดเจน (ORDERBY/PARTITIONBY) และ MATCHBY เป็นตัวช่วยสำคัญเมื่อคุณต้องควบคุมการระบุแถวปัจจุบันอย่างแม่นยำ

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

**Q: MATCHBY ใช้ได้กับฟังก์ชันอะไร?**

ใช้กับกลุ่ม window functions เช่น OFFSET, INDEX, WINDOW และมักใช้ร่วมกับ ORDERBY/PARTITIONBY

**Q: จำเป็นต้องใช้ MATCHBY ทุกครั้งไหม?**

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

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

- offset-dax
- [INDEX – ดึงแถวตามตำแหน่งภายในเพาร์ติชัน](https://www.thepexcel.com/functions/dax/filter/index-dax/)
- window
- orderby
- partitionby
- summarizecolumns
- minx

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

- [DAX Guide: MATCHBY](https://dax.guide/matchby/) _(documentation)_

---

_Source: [https://www.thepexcel.com/functions/dax/filter/matchby-dax/](https://www.thepexcel.com/functions/dax/filter/matchby-dax/)_
