---
title: PARTITIONBY – แบ่งกลุ่มก่อนคำนวณใน Window Functions
url: https://www.thepexcel.com/functions/dax/filter/partitionby-dax/
type: function-explainer
program: DAX
syntax: "PARTITIONBY(<Column>[, <Column>])"
date: 2025-12-13
updated: 2025-12-17
scores:
  popularity: 4
  difficulty: 5
  usefulness: 4
---

# PARTITIONBY – แบ่งกลุ่มก่อนคำนวณใน Window Functions

> แบ่งกลุ่มก่อนคำนวณตำแหน่งใน window functions

## คำอธิบาย

PARTITIONBY ระบุคอลัมน์ที่ใช้แบ่งกลุ่มสำหรับ window functions เพื่อให้การเลื่อน/เลือกตำแหน่งเกิดขึ้น “ภายในกลุ่ม” ตามที่กำหนด มักใช้ร่วมกับ ORDERBY และ MATCHBY

## Syntax

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

**Variant**

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

แบ่งกลุ่มด้วยคอลัมน์เดียว

**Variant**

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

แบ่งกลุ่มด้วยหลายคอลัมน์

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| Column | Yes | column |  | คอลัมน์ที่ใช้แบ่งกลุ่ม (partition) ก่อนทำ window calculation |
| Column2 | No | column | ไม่ระบุ | คอลัมน์เพิ่มเติมสำหรับแบ่งกลุ่ม |

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

### ดึงอันดับที่ N ภายในแต่ละกลุ่ม

เช่นดึงสินค้าขายดีอันดับ 1 ภายในแต่ละหมวด

_เหมาะกับ:_ nth-row-per-group

### เลื่อนแถวก่อนหน้า/ถัดไปภายในกลุ่ม

เช่นเทียบยอดขายกับแถวก่อนหน้าในหมวดเดียวกัน

_เหมาะกับ:_ offset-within-group

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: INDEX อันดับ 1 ต่อหมวด (แนวคิด)

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

**ผลลัพธ์:** `ได้ตาราง 1 แถวต่อหมวด (ตามบริบทที่เหมาะสม)`

PARTITIONBY ทำให้ INDEX เลือกตำแหน่งภายในแต่ละหมวด แทนที่จะเลือกจากทั้งตารางรวมกัน

### 2. ตัวอย่างที่ 2: ใช้กับ OFFSET ภายในกลุ่ม (แนวคิด)

```excel
แถวก่อนหน้าในหมวด (แนวคิด) =
OFFSET(
    -1,
    SUMMARIZECOLUMNS(Product[Category], Product[ProductKey], "Sales", [Total Sales]),
    ORDERBY([Sales], DESC),
    PARTITIONBY(Product[Category])
)
```

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

OFFSET จะเลื่อนตำแหน่งโดยไม่ข้ามไปข้ามหมวด เพราะมีการแบ่งกลุ่มไว้ก่อน

### 3. ตัวอย่างที่ 3: ใช้คู่กับ MATCHBY เมื่อมีค่าซ้ำ (แนวคิด)

```excel
แนวคิด: PARTITIONBY แบ่งกลุ่ม, ORDERBY เรียง, MATCHBY ระบุแถวเมื่อค่าซ้ำ
```

**ผลลัพธ์:** `ช่วยให้ผลลัพธ์นิ่งและกำหนดได้ชัดเจน`

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

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

การกำหนด PARTITIONBY ที่ถูกต้องจะช่วยให้ window functions ทำงานตามตรรกะของธุรกิจ เช่นการหาลำดับ/การเลื่อนภายในกลุ่มที่ต้องการ

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

**Q: PARTITIONBY ใช้เดี่ยว ๆ ได้ไหม?**

โดยหลักใช้ภายใน window functions (OFFSET/INDEX/WINDOW) เพื่อกำหนดการแบ่งกลุ่ม

**Q: ถ้าไม่ใช้ PARTITIONBY จะเกิดอะไรขึ้น?**

การคำนวณตำแหน่ง/การเลื่อนแถวจะทำบนชุดข้อมูลรวมทั้งหมด (ไม่แบ่งกลุ่ม) ซึ่งอาจไม่ตรงกับสิ่งที่ต้องการ

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

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

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

- [DAX Guide: PARTITIONBY](https://dax.guide/partitionby/) _(documentation)_

---

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