---
title: EARLIER – ดึงค่าจากบริบทแถวด้านนอก (Outer Row Context)
url: https://www.thepexcel.com/functions/dax/other/earlier-dax/
type: function-explainer
program: DAX
syntax: "EARLIER(<Column>[, <Number>])"
date: 2025-12-13
updated: 2025-12-17
scores:
  popularity: 4
  difficulty: 4
  usefulness: 4
---

# EARLIER – ดึงค่าจากบริบทแถวด้านนอก (Outer Row Context)

> อ้างอิงค่าคอลัมน์จากบริบทแถวชั้นนอกใน Calculated Column

## คำอธิบาย

EARLIER คืนค่าของคอลัมน์ใน Row Context ชั้นนอก (Outer Row Context) เพื่อให้คอลัมน์คำนวณสามารถอ้างอิงค่า “ของแถวปัจจุบัน” ระหว่างการวนซ้อน (เช่น FILTER ภายใน Calculated Column) ได้

## Syntax

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

**Variant**

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

อ้างอิง Row Context ชั้นนอก 1 ระดับ

**Variant**

```excel
EARLIER(&lt;Column&gt;, &lt;Number&gt;)
```

อ้างอิง Row Context ชั้นนอกตามระดับที่กำหนด

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| Column | Yes | column |  | คอลัมน์ที่ต้องการดึงค่าจาก Row Context ชั้นนอก |
| Number | No | number | 1 | ระดับของ Row Context ชั้นนอกที่จะอ้างอิง (1 = ชั้นนอกถัดไป) |

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

### ทำยอดสะสมใน Calculated Column

คำนวณยอดสะสมต่อสินค้า โดยเทียบวันที่ของแถวอื่น ๆ กับวันที่ของแถวปัจจุบัน

_เหมาะกับ:_ running-total-calculated-column

### ทำอันดับใน Calculated Column

หาลำดับของแถวโดยนับจำนวนแถวที่มีค่ามากกว่า/น้อยกว่าแถวปัจจุบัน

_เหมาะกับ:_ ranking-calculated-column

### นับจำนวนรายการในกลุ่มเดียวกัน

นับจำนวนแถวที่มีคีย์/หมวดหมู่เดียวกับแถวปัจจุบัน

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

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ยอดสะสมต่อสินค้า (Calculated Column)

```excel
ยอดสะสม =
SUMX(
    FILTER(
        Sales,
        Sales[ProductKey] = EARLIER(Sales[ProductKey])
            && Sales[OrderDate] <= EARLIER(Sales[OrderDate])
    ),
    Sales[SalesAmount]
)
```

**ผลลัพธ์:** `ได้ยอดขายสะสมต่อ ProductKey เรียงตามวันที่ภายในตาราง Sales`

FILTER วนในตาราง Sales และใช้ EARLIER เพื่อดึงค่า ProductKey/OrderDate ของ “แถวปัจจุบัน” ที่เป็น Row Context ชั้นนอก เพื่อกำหนดเงื่อนไขรวมยอด

### 2. ตัวอย่างที่ 2: อันดับราคาสินค้า (Calculated Column)

```excel
อันดับราคา =
COUNTROWS(
    FILTER(
        Product,
        Product[Price] > EARLIER(Product[Price])
    )
) + 1
```

**ผลลัพธ์:** `ได้อันดับ 1, 2, 3,... โดย 1 คือราคาสูงสุด (ตามตรรกะตัวอย่างนี้)`

นับจำนวนสินค้าที่มีราคา “มากกว่า” ราคาแถวปัจจุบัน แล้วบวก 1 เพื่อได้อันดับของแถวปัจจุบัน

### 3. ตัวอย่างที่ 3: นับจำนวนรายการในหมวดเดียวกัน

```excel
จำนวนในหมวด =
COUNTROWS(
    FILTER(
        Product,
        Product[Category] = EARLIER(Product[Category])
    )
)
```

**ผลลัพธ์:** `ได้จำนวนแถวของ Product ที่อยู่ใน Category เดียวกับแถวปัจจุบัน`

ใช้ EARLIER เพื่ออ้างอิง Category ของแถวปัจจุบัน แล้วให้ FILTER นับแถวที่อยู่หมวดเดียวกัน

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

สำหรับงานใหม่ ๆ มักแนะนำให้ใช้ VAR/ตัวแปร เพื่อทำให้สูตรอ่านง่ายขึ้น แต่ถ้าคุณต้องเขียน Calculated Column ที่มีการวนซ้อนและต้องอ้างอิงค่าแถวปัจจุบันระหว่างการวน EARLIER คือเครื่องมือหลัก

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

**Q: EARLIER กับ EARLIEST ต่างกันอย่างไร?**

EARLIER อ้างอิง Row Context ชั้นนอก “ตามระดับที่กำหนด” ส่วน EARLIEST ใช้เพื่ออ้างอิง Row Context ชั้นนอกสุด (บนสุด) เมื่อมีการวนซ้อนหลายชั้น

**Q: ทำไมบางครั้งใช้ EARLIER แล้วเกิด error?**

เพราะ EARLIER ต้องมี Row Context ชั้นนอกให้ย้อนกลับไปอ้างอิง ถ้าใช้ใน Measure หรือบริบทที่ไม่มีการสร้าง Row Context ซ้อนกัน จะไม่มี “ชั้นนอก” ให้ดึงค่า

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

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

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

- [DAX Guide: EARLIER](https://dax.guide/earlier/) _(documentation)_
- [Microsoft Learn: EARLIER](https://learn.microsoft.com/en-us/dax/earlier-function-dax) _(documentation)_

---

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