---
title: FIRSTNONBLANKVALUE – ค่าแรกที่ไม่ว่างตามลำดับของคอลัมน์
url: https://www.thepexcel.com/functions/dax/time-intelligence/firstnonblankvalue-dax/
type: function-explainer
program: DAX
syntax: "FIRSTNONBLANKVALUE(<Column>, <Expression>)"
date: 2025-12-13
updated: 2025-12-25
scores:
  popularity: 5
  difficulty: 4
  usefulness: 5
---

# FIRSTNONBLANKVALUE – ค่าแรกที่ไม่ว่างตามลำดับของคอลัมน์

> FIRSTNONBLANKVALUE คืนค่าแรกที่ไม่เป็น BLANK ของ Expression เมื่อประเมินตามลำดับของ Column ซึ่งมีประ

## คำอธิบาย

FIRSTNONBLANKVALUE คืนค่าแรกที่ไม่เป็น BLANK ของ Expression เมื่อประเมินตามลำดับของ Column ซึ่งมีประโยชน์ในการหาค่าเริ่มต้นหรือค่าแรกที่มีข้อมูลจริง เช่นยอดขายของวันแรกที่มีการขาย

## Syntax

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

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| Column | Yes | column |  | คอลัมน์ที่ใช้เป็นลำดับในการไล่ค่า มักจะเป็นวันที่ (Date Column) หรือคอลัมน์ที่มีค่าสามารถเรียงลำดับได้ ฟังก์ชันจะวิ่งตามลำดับจากน้อยไปมากของคอลัมน์นี้ |
| Expression | Yes | expression |  | นิพจน์หรือ Measure ที่ต้องการคืนค่าแรกที่ไม่เป็น BLANK อาจเป็น SUM(), COUNT(), Measure ชื่อที่สร้างไว้แล้ว หรือสูตรใดๆ ที่คืนค่าเดี่ยว (Scalar) |

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

### ยอดขายวันแรกที่มียอด (คืนค่าเป็นยอดขาย)

หา “ยอดขาย” ของวันแรกที่ [Total Sales] ไม่เป็น BLANK

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

### ค่าแรกของสถานะ/ข้อความที่ไม่ว่างตามเวลา

คืนค่าสถานะครั้งแรกที่มีข้อมูลในช่วงเวลาที่เลือก

_เหมาะกับ:_ first-nonblank-status

### ค่าแรกที่เกิดขึ้นในกลุ่ม

ใช้กับการกรองตามลูกค้า/สินค้า เพื่อหา “ค่าแรกที่มีข้อมูล” ภายในกลุ่มนั้น

_เหมาะกับ:_ first-value-by-group

## ตัวอย่าง

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

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

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

ฟังก์ชันเข้าไปไล่วันที่ตั้งแต่วันแรกของ Date table แล้วดูว่าในแต่ละวัน [Total Sales] มีค่ามั้ย ถ้าวันแรกไม่มี BLANK ก็ได้ค่านั้นเลย แต่ถ้า BLANK ก็เข้าไปดูวันถัดไป จนเจอค่าที่ไม่ใช่ BLANK

### 2. ตัวอย่างที่ 2: หาค่าคงคลัง (Inventory) ของวันแรกเมื่อเปิดบัญชี

```excel
ค่าคงคลังเปิดบัญชี =
VAR ProductKey = SELECTEDVALUE('Product'[ProductKey])
RETURN
FIRSTNONBLANKVALUE(
    'Date'[Date],
    CALCULATE(
        SUM('Inventory'[Qty]),
        'Product'[ProductKey] = ProductKey
    )
)
```

**ผลลัพธ์:** `ได้ปริมาณสินค้าของวันแรกที่สินค้านั้นมีบันทึกในระบบ`

ใช้ VAR เก็บ ProductKey ที่เลือก แล้ว FIRSTNONBLANKVALUE ไล่วันที่เพื่อหาจำนวนสินค้าในวันแรกที่มีข้อมูล นี่คือการทำ Opening Balance แบบหลาวครับ

### 3. ตัวอย่างที่ 3: ใช้กับการกรองของรายงาน (ร่วมกับ ALLSELECTED)

```excel
ยอดขายวันแรก (ในช่วงที่เลือก) =
CALCULATE(
    FIRSTNONBLANKVALUE(
        'Date'[Date],
        [Total Sales]
    ),
    ALLSELECTED('Date')
)
```

**ผลลัพธ์:** `ได้ยอดขายวันแรกที่ไม่ว่าง แต่ยังคำนึงถึงช่วงวันที่ผู้ใช้เลือกในรายงาน`

ALLSELECTED ช่วยให้การไล่ค่าอิงตามช่วงที่ผู้ใช้เลือก (เช่นเลือกเฉพาะปี 2024) มากกว่าถูกจำกัดโดย Filter Context อื่นๆ ใช้เวลาต้องการให้ผู้ใช้มีความยืดหยุ่นในการกรองข้อมูล

### 4. ตัวอย่างที่ 4: หาสถานะแรกที่ไม่ว่างของเหตุการณ์

```excel
สถานะแรก (ไม่ว่าง) =
FIRSTNONBLANKVALUE(
    'EventLog'[EventDate],
    SELECTEDVALUE('EventLog'[Status], "ไม่มีข้อมูล")
)
```

**ผลลัพธ์:** `ได้สถานะแรกของเหตุการณ์ตามลำดับวันที่`

เมื่อมีการบันทึกเหตุการณ์หลายครั้ง แต่บางครั้งเก็บสถานะไว้หลังจากทำงาน ฟังก์ชันนี้ช่วยหาสถานะที่บันทึกครั้งแรกที่ไม่ว่าง

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

- ผมแนะนำให้ใช้ FIRSTNONBLANKVALUE เมื่อต้องการค่าแรกตามลำดับ (เช่น Opening Balance, First Sold Amount, First Status) แต่อย่าลืมว่ามันมีข้อเตือนเรื่องประสิทธิภาพ ลองประเมินว่า Column ที่ใช้มี Cardinality สูงหรือต่ำ

- ส่วนตัวผมชอบใช้ VAR เก็บ SELECTEDVALUE() หรือค่าที่ต้องการไว้ก่อน แล้วค่อยใส่เข้า FIRSTNONBLANKVALUE ด้วยเพราะว่า CALCULATE ในโค้ด DAX ซ้อนลึกอาจมี Row Context ที่ซับซ้อน ใช้ VAR ช่วยให้ Debug ได้ง่ายกว่า

- ถ้า FIRSTNONBLANKVALUE ใช้ช้า ลองใช้ ALLSELECTED() ร่วมกับ CALCULATE เพื่อจำกัด Filter Context ให้เล็กลง หรือลอง FIRSTNONBLANK + SUMMARIZE เป็นตัวเลือกอื่น

- เมื่อ Expression ใช้ Measure ชื่อ อย่าลืมว่า Measure นั้นอยู่ใน Row Context ของแต่ละค่าของ Column ตรงนี้เป็น Context Transition ที่สำคัญ ถ้าไม่เข้าใจ อาจได้ผลลัพธ์ที่ไม่คาดหวัง

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

**Q: ต่างจาก FIRSTNONBLANK อย่างไร?**

เรื่องสำคัญที่ต้องเข้าใจ: FIRSTNONBLANK คืน "ตารางแรก" ที่สามารถใช้กับ CALCULATE เช่น CALCULATE(SUM(...), FIRSTNONBLANK(...)) ส่วน FIRSTNONBLANKVALUE คืน "ค่าเดี่ยว (Scalar)" โดยตรง ที่ได้จากการประเมิน Expression ในแถวแรกที่ไม่ว่าง ถ้าคุณต้องได้ตารางให้ใช้ FIRSTNONBLANK แต่ถ้าต้องได้ค่า (เลข, ข้อความ) ก็ใช้ FIRSTNONBLANKVALUE

**Q: ลำดับการไล่ค่า (Natural Ascending Order) มาจากไหน?**

ขึ้นกับการเรียงลำดับของคอลัมน์ที่ระบุ (Column Argument) ในบริบทตัวกรองปัจจุบัน โดยทั่วไปคือลำดับจากน้อยไปมาก (Ascending) เช่นถ้าใช้วันที่ก็จะเรียงจากวันเก่าสุดไปวันใหม่ ถ้าใช้ ID ตัวเลขก็จะเรียงจากน้อยไปมาก ถ้าต้องการคืนค่าจากส่วนท้าย ให้ใช้ LASTNONBLANKVALUE แทน

**Q: ทำไมบางครั้งฟังก์ชันนี้ช้าหรือ Error?**

FIRSTNONBLANKVALUE มีข้อเตือนเกี่ยวกับประสิทธิภาพในเอกสาร Microsoft ด้วย เนื่องจากมันต้องไล่ค่าของคอลัมน์ทีละค่า (Iterator) จึงอาจใช้หน่วยความจำและเวลาในการประเมินมากถ้าคอลัมน์มีค่าที่ไม่ซ้ำมากๆ (High Cardinality) วิธีแก้คือ: 1) ตรวจสอบ Expression ว่ากำหนด Cardinality ของ Column ให้แคบลง (ใช้ FILTER ก่อน) 2) ประเมินว่าจำเป็นต้องใช้ FIRSTNONBLANKVALUE จริงๆ หรือเขียนเป็น CALCULATE + FIRSTNONBLANK + SUMMARIZE ก็ได้ผล

**Q: ใช้ได้กับ DirectQuery หรือเปล่า?**

ตามเอกสาร Microsoft ฟังก์ชันนี้ \"ไม่สนับสนุน\" (Not Supported) ใน DirectQuery Mode เมื่อใช้ในการคำนวณคอลัมน์หรือ Row-Level Security (RLS) ถ้าโมเดลของคุณใช้ DirectQuery ลองเปลี่ยนเป็นโหมด Import หรือใช้ FIRSTNONBLANK + CALCULATETABLE แทน

**Q: ต้องมี Date Table มั้ย?**

ไม่บังคับว่าต้องเป็น Date Table เฉพาะว่า Column ที่ใช้ (Argument แรก) ต้องเป็นคอลัมน์ที่มีค่าสามารถเรียงลำดับได้ เช่นวันที่, ตัวเลข, ข้อความ (แต่ลำดับอักษรไม่เข้าใจธุรกิจส่วนมาก) ลองใช้คอลัมน์ใดก็ได้ตามที่มี แต่ค่อนข้างจะเหมาะกับคอลัมน์ที่มีลำดับหมายความ เช่นวันที่หรือลำดับเวลา

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

- firstnonblank
- firstdate
- lastdate
- selectedvalue
- allselected
- blank
- calculate

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

- [DAX.guide: FIRSTNONBLANKVALUE](https://dax.guide/firstnonblankvalue/) _(guide)_
- [Microsoft Learn: FIRSTNONBLANKVALUE function](https://learn.microsoft.com/en-us/dax/firstnonblankvalue-function-dax) _(official)_
- [SQLBI - DAX Pattern: Semi-Additive Measures](https://www.sqlbi.com/articles/semi-additive-measures-in-dax/) _(guide)_

---

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