---
title: FIRSTNONBLANK – ค่าตัวแรกของคอลัมน์ที่ทำให้ expression ไม่เป็น BLANK
url: https://www.thepexcel.com/functions/dax/time-intelligence/firstnonblank-dax/
type: function-explainer
program: DAX
syntax: "FIRSTNONBLANK(<Column>, <Expression>)"
date: 2025-12-13
updated: 2025-12-24
scores:
  popularity: 6
  difficulty: 4
  usefulness: 6
---

# FIRSTNONBLANK – ค่าตัวแรกของคอลัมน์ที่ทำให้ expression ไม่เป็น BLANK

> FIRSTNONBLANK คืนค่าตัวแรกของ Column ที่ทำให้ Expression ไม่เป็น BLANK ใช้บ่อยเพื่อหา "ค่าแรกที่มีข้

## คำอธิบาย

FIRSTNONBLANK คืนค่าตัวแรกของ Column ที่ทำให้ Expression ไม่เป็น BLANK ใช้บ่อยเพื่อหา "ค่าแรกที่มีข้อมูล" เช่นวันแรกที่มียอดขาย (คืนค่าเป็นวันที่) และมักใช้ร่วมกับ time intelligence

## Syntax

```excel
FIRSTNONBLANK(&lt;Column&gt;, &lt;Expression&gt;)
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| Column | Yes | column |  | คอลัมน์ที่ใช้เป็นลำดับในการหา "ตัวแรก" (เช่นคอลัมน์วันที่) ถ้าคอลัมน์มีแถวหลายพันแถว Performance อาจช้าลง |
| Expression | Yes | expression |  | นิพจน์/Measure ที่ใช้ตรวจว่าแถวนั้นไม่เป็น BLANK เช่น [Total Sales] หรือ SUM(Sales[Amount]) |

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

### หา “วันแรกที่มียอดขาย”

คืนค่าเป็นวันที่แรกที่ [Total Sales] ไม่เป็น BLANK

_เหมาะกับ:_ first-date-with-sales

### หา “รายการแรกที่มีข้อมูล” ตามลำดับคอลัมน์

คืนค่าจากคอลัมน์ (เช่นลูกค้า/สินค้า) ที่เป็นตัวแรกที่ expression มีค่า

_เหมาะกับ:_ first-item-with-value

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: วันแรกที่มีข้อมูลยอดขาย

```excel
วันแรกที่มียอด =
FIRSTNONBLANK(
    'Date'[Date],
    [Total Sales]
)
```

**ผลลัพธ์:** `ได้วันที่แรก (ตามลำดับ 'Date'[Date]) ที่ [Total Sales] ไม่เป็น BLANK`

คืนค่าเป็น "วันที่" (ค่าจาก Column) ไม่ใช่ยอดขาย ถ้า Date table มี 3650 วัน แล้ววันแรกที่มีข้อมูลขายคือวันที่ 2020-01-15 ก็จะคืนค่านั้นมา

### 2. ตัวอย่างที่ 2: ยอดขายของวันแรก (ใช้คู่กับ CALCULATE)

```excel
ยอดขายวันแรก =
VAR firstDay = FIRSTNONBLANK('Date'[Date], [Total Sales])
RETURN
CALCULATE(
    [Total Sales],
    'Date'[Date] = firstDay
)
```

**ผลลัพธ์:** `ได้ยอดขายของวันแรกที่มีข้อมูล`

FIRSTNONBLANK คืนค่าเป็นวันที่ แล้วบันทึกไว้ใน VAR ชื่อ firstDay จากนั้นใช้ CALCULATE เพื่อกรองข้อมูลเฉพาะวันนั้นแล้วหา [Total Sales]

### 3. ตัวอย่างที่ 3: ถ้าต้องการคืนค่า expression โดยตรง (ใช้ FIRSTNONBLANKVALUE)

```excel
ยอดขายวันแรก (ทางลัด) =
FIRSTNONBLANKVALUE('Date'[Date], [Total Sales])
```

**ผลลัพธ์:** `ได้ยอดขายของวันแรกที่มีข้อมูล โดยตรง`

FIRSTNONBLANKVALUE ถูกออกแบบมาเพื่อคืนค่าของ Expression สำหรับตัวแรกที่ไม่ว่าง ไม่ต้องคู่กับ CALCULATE

### 4. ตัวอย่างที่ 4: หาคนแรกที่มีการสั่งซื้อ

```excel
ลูกค้าแรก =
FIRSTNONBLANK(
    Customers[CustomerID],
    CALCULATE(COUNTA(Orders[OrderID]))
)
```

**ผลลัพธ์:** `ได้ CustomerID แรก ที่มีอย่างน้อย 1 Order`

วน Loop ไปในแต่ละ CustomerID ตามลำดับ แล้วตรวจว่า Order count ไม่เป็น BLANK คืนค่า CustomerID แรกที่พบ

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

- ใช้ VAR บันทึกผลจาก FIRSTNONBLANK แล้วนำไปใช้กับ CALCULATE เพื่อคำนวณต่อ

- ถ้า Column ไม่เรียงลำดับตามที่ต้องการ ให้พิจารณา ORDERBY หรือจัดเรียง Column ก่อน

- เมื่อใช้กับเวลา ต้องแน่ใจว่า Date table เรียงลำดับวันแบบถูกต้อง

- ถ้า Performance ช้า ให้ลองใช้ FIRSTNONBLANKVALUE หรือทางเลือกอื่นแทน

- Context Transition มีผล: ฟังก์ชันจะแปลง Column reference เป็น CALCULATETABLE(DISTINCT(Column))

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

**Q: FIRSTNONBLANK คืนค่าเป็นอะไร?**

คืนค่า "จากคอลัมน์" (Column) ที่เป็นตัวแรกที่ทำให้ Expression ไม่เป็น BLANK เช่นคืนค่าเป็นวันที่ ไม่ใช่คืนค่าเป็นยอดขาย ถ้าต้องการคืนค่า Expression ให้ใช้ FIRSTNONBLANKVALUE

**Q: ต่างกับ FIRSTNONBLANKVALUE ยังไง?**

FIRSTNONBLANK: คืนค่า "จากคอลัมน์" (ตัวแรกที่ไม่ว่าง)
FIRSTNONBLANKVALUE: คืนค่า "ของ Expression" (ค่าคำนวณของตัวแรกที่ไม่ว่าง)
คิดง่ายๆ: FIRSTNONBLANK = return the date, FIRSTNONBLANKVALUE = return the sales amount

**Q: ควรใช้ FIRSTDATE แทนได้ไหม?**

ไม่เหมือนกัน FIRSTDATE คืนค่าเป็น "ตารางวันที่แรกในบริบทเวลา" ส่วน FIRSTNONBLANK คืนค่าเป็น "ค่าจากคอลัมน์" ที่ทำให้ Expression ไม่เป็น BLANK ใช้ FIRSTNONBLANK เมื่อต้องพิจารณาเงื่อนไขเพิ่มเติม

**Q: Performance มีปัญหาจริงหรือ?**

ใช่ Microsoft ออกมาเตือนว่า FIRSTNONBLANK สามารถ "cause performance and memory issues" พอดี ถ้า Column มีแถวมากๆ (เช่น 1 ล้านแถว) ให้ระวัง หรือจะต้อง optimize ด้วยวิธีอื่น

**Q: ใช้บริบทอะไรได้บ้าง?**

ใช้ได้ใน Measure, Calculated Column, และ Calculated Table
แต่ใช้ไม่ได้ใน DirectQuery Calculated Column และ RLS rules

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

- firstnonblankvalue
- firstdate
- lastdate
- calculate
- blank
- values

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

- [DAX Guide: FIRSTNONBLANK](https://dax.guide/firstnonblank/) _(guide)_
- [Microsoft Learn: FIRSTNONBLANK](https://learn.microsoft.com/en-us/dax/firstnonblank-function-dax) _(official)_

---

_Source: [https://www.thepexcel.com/functions/dax/time-intelligence/firstnonblank-dax/](https://www.thepexcel.com/functions/dax/time-intelligence/firstnonblank-dax/)_
