---
title: EARLIEST – ฟังก์ชัน DAX
url: https://www.thepexcel.com/functions/dax/other/earliest-dax/
type: function-explainer
program: DAX
syntax: "EARLIEST(<column>)"
date: 2025-12-14
updated: 2025-12-17
scores:
  popularity: 4
  difficulty: 4
  usefulness: 4
---

# EARLIEST – ฟังก์ชัน DAX

> ดึงค่าคอลัมน์จาก row context ชั้นนอกสุดเมื่อมีการซ้อน

## คำอธิบาย

EARLIEST ดึงค่าคอลัมน์จาก row context ชั้นนอกสุดเมื่อสูตรสร้าง row context ซ้อน (เช่น FILTER, RANKX, SUMX ในคอลัมน์คำนวณ) ทำให้ยังเข้าถึงค่าดั้งเดิมของแถวที่กำลังประเมินได้แม้จะเข้าสู่บริบทใหม่

## Syntax

```excel
EARLIEST(&lt;column&gt;)
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| column | Yes | column |  | คอลัมน์ที่ต้องการดึงค่าจาก row context ชั้นนอกสุด |

## ตัวอย่าง

### 1. ลำดับยอดขายภายใน Category (Calculated Column)

```excel
Category Position =
CALCULATE(
    RANKX(
        FILTER( Sales, Sales[Category] = EARLIEST(Sales[Category]) ),
        Sales[Amount]
    ),
    ALL( Sales )
)
```

**ผลลัพธ์:** `ลำดับยอดขายต่อหมวดหมู่ของแต่ละแถวใน Sales`

FILTER สร้าง row context ใหม่ภายใน CALCULATE แต่ EARLIEST ดึง Category จาก row context ชั้นนอกสุดของคอลัมน์คำนวณ ทำให้ RANKX จัดอันดับในกลุ่มเดียวกันได้ถูกต้อง

### 2. หาสัดส่วนยอดขายเทียบยอดรวม Category

```excel
Category Share =
VAR CategoryFromOuter = EARLIEST(Sales[Category])
RETURN
DIVIDE(
    SUMX( FILTER(Sales, Sales[Category] = CategoryFromOuter), Sales[Amount] ),
    CALCULATE( SUM(Sales[Amount]), Sales[Category] = CategoryFromOuter )
)
```

**ผลลัพธ์:** `เปอร์เซ็นต์ยอดขายของแถวปัจจุบันเทียบกับยอดรวมใน Category เดียวกัน`

เก็บ Category จาก row context ดั้งเดิมด้วย EARLIEST ก่อน SUMX จะวนในกลุ่มเดียวกัน แล้วใช้ DIVIDE แบ่งยอดขายปัจจุบันกับยอดรวมของหมวดหมู่เดียวกัน

### 3. ใช้ใน iterator ซ้อนเพื่อตรวจจับค่าต้นทาง

```excel
Match Outer Value =
SUMX(
    FILTER( Sales, Sales[Customer] = EARLIEST(Sales[Customer]) ),
    IF( Sales[Amount] = EARLIEST(Sales[Amount]), 1, 0 )
)
```

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

FILTER และ SUMX สร้าง row context เพิ่มเติม แต่ EARLIEST ดึง Customer และ Amount จาก row context ชั้นนอกสุด ช่วยให้ตรวจจับค่าดั้งเดิมแม้อยู่ในลูปซ้อน

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

ใช้ในคอลัมน์คำนวณหรือ iterator ที่สร้าง row context ซ้อนกัน หากต้องอ้างอิงบริบทใกล้กว่าชั้นนอกสุดสามารถใช้ EARLIER แทน

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

**Q: ควรใช้เมื่อไร**

ใช้เมื่อสูตรสร้าง row context ซ้อน เช่น คอลัมน์คำนวณที่ใช้ FILTER, SUMX, RANKX แล้วต้องอ้างอิงค่าของแถวต้นทาง

**Q: ใช้กับ Measure ได้หรือไม่**

EARLIEST ออกแบบมาสำหรับคอลัมน์คำนวณที่มี row context หากใช้ใน Measure (ไม่มี row context) จะไม่ทำงานและควรใช้การอ้างอิงแบบอื่นแทน

**Q: ใช้งานใน DirectQuery ได้หรือไม่**

ไม่รองรับในโหมด DirectQuery สำหรับคอลัมน์คำนวณหรือ RLS ตามข้อจำกัดของ Microsoft

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

- [EARLIER – ดึงค่าจากบริบทแถวด้านนอก (Outer Row Context)](https://www.thepexcel.com/functions/dax/other/earlier-dax/)
- [CALCULATE – ฟังก์ชันหลักของ DAX ที่ควบคุม Filter Context](https://www.thepexcel.com/functions/dax/filter/calculate-dax/)
- [FILTER – กรองตารางด้วยเงื่อนไขที่ซับซ้อน (Iterator Function)](https://www.thepexcel.com/functions/dax/filter/filter-dax/)
- [RANKX – จัดอันดับด้วย Iterator Pattern (รองรับการจัดการอันดับเสมอ)](https://www.thepexcel.com/functions/dax/statistical/rankx-dax/)
- [SUMX – Iterator Function สำหรับคำนวณผลรวมแบบ Row-by-Row ใน DAX](https://www.thepexcel.com/functions/dax/aggregation/sumx-dax/)
- [DIVIDE – ฟังก์ชัน DAX](https://www.thepexcel.com/functions/dax/math-and-trig/divide-dax/)
- [ALL – ลบ Filter หรือคืนค่าทุกแถว](https://www.thepexcel.com/functions/dax/filter/all-dax/)

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

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

---

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