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

# LASTNONBLANK – ค่าตัวสุดท้ายของคอลัมน์ที่ไม่ว่าง

> LASTNONBLANK คืนค่าตัวสุดท้ายจากคอลัมน์ที่ทำให้ expression ไม่เป็น BLANK ใช้บ่อยกับ semi-additive me

## คำอธิบาย

LASTNONBLANK คืนค่าตัวสุดท้ายจากคอลัมน์ที่ทำให้ expression ไม่เป็น BLANK ใช้บ่อยกับ semi-additive measures และเวลาต้องการหา "วันล่าสุดที่มีข้อมูล" ตามลำดับแถวของคอลัมน์

## Syntax

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

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| Column | Yes | column |  | คอลัมน์ที่ใช้เป็น "ลำดับการค้นหา" (เช่น Date column, Product column ฯลฯ) LASTNONBLANK จะค้นหา "ตัวสุดท้าย" ของคอลัมน์นี้ ตามลำดับแถว |
| Expression | Yes | expression |  | นิพจน์หรือ measure ที่ใช้เป็นเงื่อนไขตรวจสอบว่า "ไม่เป็น BLANK" เช่น [Total Sales], [Quantity], SUM(Orders[Amount]) ฯลฯ |

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

### หา “วันล่าสุดที่มียอดขาย”

คืนค่าเป็นวันที่ล่าสุดที่ [Total Sales] ไม่เป็น BLANK

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

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

คืนค่าจากคอลัมน์ที่เป็นตัวสุดท้ายที่ expression มีค่า

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

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: หาวันล่าสุดที่มียอดขาย

```excel
Last Sales Date =
LASTNONBLANK(
    'Date'[Date],
    [Total Sales]
)
```

**ผลลัพธ์:** `2024-12-24 (หรือวันล่าสุดที่มีข้อมูล)`

LASTNONBLANK ค้นหา Date column จากล่างขึ้นบน หาวันสุดท้ายที่ [Total Sales] measure ไม่เป็น BLANK คืนค่าเป็น "วันที่" ไม่ใช่คืนค่าเป็นยอดขาย

### 2. ตัวอย่างที่ 2: คำนวณยอดขายของวันล่าสุด

```excel
Sales Last Day =
VAR lastDay = LASTNONBLANK(
    'Date'[Date],
    [Total Sales]
)
RETURN
CALCULATE(
    [Total Sales],
    'Date'[Date] = lastDay
)
```

**ผลลัพธ์:** `ยอดขายของวันล่าสุดที่มีข้อมูล (เช่น 50000 บาท)`

ขั้นที่ 1 ใช้ LASTNONBLANK หาวันล่าสุด ขั้นที่ 2 ใช้ CALCULATE เพื่อกรองแล้วคำนวณยอดขาย ณ วันนั้น อันนี้เป็นการใช้ VAR ที่สำคัญเพราะต้อง "เก็บค่าวันที่" แล้วค่อยนำไปใช้

### 3. ตัวอย่างที่ 3: หา "สต็อกสุดท้าย" ของสินค้า (semi-additive measure)

```excel
Ending Inventory =
VAR lastInventoryDate = LASTNONBLANK(
    'Date'[Date],
    [Inventory Qty]
)
RETURN
CALCULATE(
    [Inventory Qty],
    'Date'[Date] = lastInventoryDate
)
```

**ผลลัพธ์:** `1200 หน่วย (สต็อกของวันสุดท้ายที่นับสต็อก)`

เป้าหมายคือหา "ค่าปลายสุด" ไม่ใช่ "รวม" (semi-additive) สต็อกไม่ควรรวมตามเดือน ต้องหา "วันสุดท้าย" ของแต่ละเดือน LASTNONBLANK ช่วยในจุดนี้ได้ดี

### 4. ตัวอย่างที่ 4: หรือจะใช้ LASTNONBLANKVALUE ได้เลย (ทางลัด)

```excel
Ending Inventory (Shortcut) =
VAR lastInventoryDate = LASTNONBLANK(
    'Date'[Date],
    [Inventory Qty]
)
RETURN
CALCULATE(
    [Inventory Qty],
    'Date'[Date] = lastInventoryDate
)

-- หรือ ใช้ LASTNONBLANKVALUE ตรง ๆ --
Ending Inventory v2 =
LASTNONBLANKVALUE(
    'Date'[Date],
    [Inventory Qty]
)
```

**ผลลัพธ์:** `1200 หน่วย (เหมือนเดิม)`

LASTNONBLANKVALUE คืนค่าของ expression โดยตรง ไม่ต้องตั้ง VAR แล้ว CALCULATE อีก ใช้ได้เร็วกว่า แต่บางครั้งเราต้อง VAR เพราะต้องใช้วันที่หลายครั้ง

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

- ผมแนะนำให้ใช้ LASTNONBLANKVALUE สำหรับ semi-additive measures เพราะ simple กว่าและ perform ดีกว่า ไม่ต้องตั้ง VAR แล้ว CALCULATE

- ส่วนตัวผม ต้องใช้ LASTNONBLANK (ไม่ใช่ LASTNONBLANKVALUE) เมื่อต้องใช้ค่าจากคอลัมน์หลายครั้งในสูตร เช่น ต้องใช้วันนั้นเพื่อเปรียบเทียบกับ dates อื่น ๆ

- ระวัง context transition - LASTNONBLANK จะทำการ context transition อัตโนมัติ เมื่อถูกเรียกจากภายใน expression ของแถว เลยต้องเข้าใจว่ามันจะเปลี่ยน filter context ยังไง

- อย่าลืมว่า Column ต้อง "มีลำดับ" ถ้า Column เป็นหมวดหมู่อย่างเช่น "สีสินค้า" และไม่มี "ลำดับธรรมชาติ" ผลลัพธ์อาจไม่คาดคิด ดังนั้นสำหรับวันที่ (Date) และตัวเลข (Numeric) จึงเหมาะกับ LASTNONBLANK

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

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

LASTNONBLANK คืนค่า "จากคอลัมน์" (Column parameter) ที่เป็นตัวสุดท้ายที่ทำให้ Expression ไม่เป็น BLANK ไม่ใช่คืนค่าเป็นค่าของ expression อันนี้สำคัญมาก เช่น ถ้า Column เป็น Date column มันจะคืนค่าวันที่ (date value) ไม่ใช่คืนค่ายอดขาย ถ้าต้องคืนค่าของ expression โดยตรง ให้ใช้ LASTNONBLANKVALUE แทน

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

LASTNONBLANK หาตัว "สุดท้าย" ส่วน FIRSTNONBLANK หาตัว "แรก" ทั้งสองใช้ expression เดียวกันเป็นเงื่อนไข เช่น ถ้า [Total Sales] ไม่เป็น BLANK ผมนำ FIRSTNONBLANK ไปใช้บ่อยกับงานค้นหา "วันแรกที่เริ่มมีข้อมูล" ส่วน LASTNONBLANK คือ "วันล่าสุดที่มีข้อมูล"

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

LASTDATE คืนวันที่สุดท้ายในช่วงวันที่ของ Date table ตามบริบทตัวกรอง ไม่สนใจ expression ว่าว่างหรือไม่ ส่วน LASTNONBLANK มีเงื่อนไขเพิ่มเติม ว่า "expression ต้องไม่เป็น BLANK" ที่ LASTDATE ไปหา "วันล่าสุด" แต่ LASTNONBLANK หา "วันล่าสุดที่มีข้อมูลจริง ๆ" เช่น ถ้าวันที่สุดท้ายไม่มี sales เลย LASTDATE จะคืนวันนั้น แต่ LASTNONBLANK จะข้ามไปหาวันก่อนหน้าที่มี sales

**Q: ใช้เก็บค่าใน VAR แล้วค่อยใช้ได้ไหม?**

ได้ครับ และแนะนำเลย โดยเฉพาะตัวอย่างที่ 2 และ 3 เพราะ LASTNONBLANK คืนตารางแถวเดียวคอลัมน์เดียว เอาค่านั้นเก็บใน VAR แล้วใช้หลายครั้งในสูตร ดีกว่าคำนวณซ้ำ ๆ ทำให้ clean code ขึ้น

**Q: ต้องระวังอะไรบ้าง?**

สำคัญ 3 อย่าง: (1) ลำดับของแถวขึ้นกับลำดับตามธรรมชาติของ Column - ถ้า Column ไม่เรียง ผลลัพธ์อาจไม่ถูก (2) ต้องมีบริบทตัวกรองที่ดี - คนละบริบท ผลลัพธ์คนละแบบ (3) Performance - LASTNONBLANK อาจเป็น heavy operation บน dataset ใหญ่ ๆ Microsoft อยากให้ดู LASTNONBLANKVALUE หรือหา alternative ก่อน

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

- lastnonblankvalue
- lastdate
- firstnonblank
- calculate
- blank
- values

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

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

---

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