Thep Excel

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

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

=LASTNONBLANK(<Column>, <Expression>)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
5/10

Difficulty
4/10

Usefulness
5/10

Syntax & Arguments

=LASTNONBLANK(<Column>, <Expression>)

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

How it works

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

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

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

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

Examples

ตัวอย่างที่ 1: หาวันล่าสุดที่มียอดขาย
Last Sales Date = LASTNONBLANK( 'Date'[Date], [Total Sales] )
LASTNONBLANK ค้นหา Date column จากล่างขึ้นบน หาวันสุดท้ายที่ [Total Sales] measure ไม่เป็น BLANK คืนค่าเป็น "วันที่" ไม่ใช่คืนค่าเป็นยอดขาย
DAX Formula:

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

Result:

2024-12-24 (หรือวันล่าสุดที่มีข้อมูล)

ตัวอย่างที่ 2: คำนวณยอดขายของวันล่าสุด
Sales Last Day = VAR lastDay = LASTNONBLANK( 'Date'[Date], [Total Sales] ) RETURN CALCULATE( [Total Sales], 'Date'[Date] = lastDay )
ขั้นที่ 1 ใช้ LASTNONBLANK หาวันล่าสุด ขั้นที่ 2 ใช้ CALCULATE เพื่อกรองแล้วคำนวณยอดขาย ณ วันนั้น อันนี้เป็นการใช้ VAR ที่สำคัญเพราะต้อง "เก็บค่าวันที่" แล้วค่อยนำไปใช้
DAX Formula:

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

Result:

ยอดขายของวันล่าสุดที่มีข้อมูล (เช่น 50000 บาท)

ตัวอย่างที่ 3: หา "สต็อกสุดท้าย" ของสินค้า (semi-additive measure)
Ending Inventory = VAR lastInventoryDate = LASTNONBLANK( 'Date'[Date], [Inventory Qty] ) RETURN CALCULATE( [Inventory Qty], 'Date'[Date] = lastInventoryDate )
เป้าหมายคือหา "ค่าปลายสุด" ไม่ใช่ "รวม" (semi-additive) สต็อกไม่ควรรวมตามเดือน ต้องหา "วันสุดท้าย" ของแต่ละเดือน LASTNONBLANK ช่วยในจุดนี้ได้ดี
DAX Formula:

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

Result:

1200 หน่วย (สต็อกของวันสุดท้ายที่นับสต็อก)

ตัวอย่างที่ 4: หรือจะใช้ LASTNONBLANKVALUE ได้เลย (ทางลัด)
Ending Inventory (Shortcut) = VAR lastInventoryDate = LASTNONBLANK( 'Date'[Date], [Inventory Qty] ) RETURN CALCULATE( [Inventory Qty], 'Date'[Date] = lastInvent…
LASTNONBLANKVALUE คืนค่าของ expression โดยตรง ไม่ต้องตั้ง VAR แล้ว CALCULATE อีก ใช้ได้เร็วกว่า แต่บางครั้งเราต้อง VAR เพราะต้องใช้วันที่หลายครั้ง
DAX Formula:

=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]
)

Result:

1200 หน่วย (เหมือนเดิม)

FAQs

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

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

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

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

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

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

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

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

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

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

Resources & Related

Additional Notes

LASTNONBLANK เป็นฟังก์ชัน time intelligence ที่ค้นหาตัวสุดท้ายของคอลัมน์ที่ระบุ ซึ่งทำให้ expression ที่ให้มา “ไม่เป็น BLANK” ตามลำดับของแถวในบริบทตัวกรองปัจจุบัน เวลาบอกว่า “ไม่เป็น BLANK” มันหมายความว่า expression นั้นคำนวณได้ค่าออกมา ไม่ใช่ว่าง ๆ หรือ NULL ใช้บ่อยในสถานการณ์ เช่น “วันล่าสุดที่ขายของ” “วันสุดท้ายที่มียอดขาย” หรือ “วันสุดท้ายที่มีข้อมูลจริง ๆ”

ที่เจ๋งคือ LASTNONBLANK ต่างจาก LASTDATE ตรงที่ LASTDATE มันแค่หา “วันล่าสุด” ตามลำดับวันทั่ว ๆ ไป แต่ LASTNONBLANK จะมีเงื่อนไขเพิ่มเติมว่า “ต้องจะบ่อยที่ expression นั้นไม่เป็น BLANK” ถ้า product ไหนไม่มีข้อมูลขายในบางวัน LASTNONBLANK จะข้ามไปหาวันล่าสุดที่มีข้อมูลจริง ๆ แบบนี้เหมาะมากกับสถานการณ์ที่ข้อมูลไม่ต่อเนื่อง

ส่วนตัวผมถือว่า LASTNONBLANK เป็น “นักสืบของ DAX” ที่ไปหาข้อมูลล่าสุดจริง ๆ ที่มีอยู่ไม่ใช่หาวันล่าสุดทั้งหมด ใช้ยุ่งกับแบบชุดข้อมูลแบบขาด ๆ หายๆ (sparse data) ผมแนะนำให้เข้าใจ CALCULATE กับ filter context ก่อน เพราะ LASTNONBLANK ทำงาน “ใจดี” เมื่อมี context transition เกิดขึ้น

Leave a Reply

Your email address will not be published. Required fields are marked *