Thep Excel

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

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

fx
=LASTNONBLANK(<Column>, <Expression>)

ความนิยม5/10
ความยาก4/10
ประโยชน์5/10

อัปเดต 13 December 2025

Syntax & Arguments

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

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 เกิดขึ้น

How it works

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

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

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

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

Examples

ตัวอย่างที่ 1: หาวันล่าสุดที่มียอดขายLast Sales Date = LASTNONBLANK( 'Date'[Date], [Total Sales] )

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

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

ผลลัพธ์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 ที่สำคัญเพราะต้อง "เก็บค่าวันที่" แล้วค่อยนำไปใช้

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

ผลลัพธ์ยอดขายของวันล่าสุดที่มีข้อมูล (เช่น 50000 บาท)
ตัวอย่างที่ 3: หา "สต็อกสุดท้าย" ของสินค้า (semi-additive measure)Ending Inventory = VAR lastInventoryDate = LASTNONBLANK( 'Date'[Date], [Inventory Qty] ) RETURN CALCULATE( [Inventory Qty], 'Date'[Date] = lastInventoryDate )

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

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

ผลลัพธ์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 เพราะต้องใช้วันที่หลายครั้ง

fx
=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 หน่วย (เหมือนเดิม)

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

ฟังก์ชันที่ผู้เขียนโยงไว้กับ LASTNONBLANK จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้LASTNONBLANKTime Intelligence
Time Intelligence (3)
FIRSTNONBLANK

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

LASTDATE

LASTDATE คืนค่าตารางที่มีวันที่สุดท้ายในบริบทตัวกรองปัจจุบัน มักใช้เป็นตารางตัวกรองให้ CALCULATE เพื่อคำนวณ measure ณ วันสุดท้ายของช่วงที่เลือก และสามารถใช้ MAXX เพื่อแปลงผลเป็น scalar date ได้

LASTNONBLANKVALUE

LASTNONBLANKVALUE คืนค่าสุดท้ายที่ไม่เป็น BLANK ของ Expression เมื่อประเมินตามลำดับของ Column ในบริบทตัวกรองปัจจุบัน ใช้หา "ค่าล่าสุดที่มีข้อมูล" เช่นยอดขายของวันล่าสุดที่มีค่า

Other (1)
BLANK

BLANK คืนค่าว่างเปล่า (Empty Value) ในDAX ซึ่งแตกต่างจาก 0 หรือ "" โดยใช้สำหรับระบุว่าไม่มีข้อมูล มักใช้ใน IF เพื่อซ่อนผลลัพธ์ที่ไม่ต้องการ

Filter (1)
CALCULATE

CALCULATE เป็นฟังก์ชันหลักที่สำคัญที่สุดใน DAX ใช้สำหรับ evaluate expression ภายใต้ filter context ที่ถูกปรับเปลี่ยน สามารถเพิ่มตัวกรองใหม่ ลบตัวกรองเดิม หรือแทนที่ filter ที่มีอยู่ได้ รองรับทั้ง Boolean expression และ table expression เป็น filter arguments พร้อม filter modifier functions เช่น REMOVEFILTERS, ALL, ALLEXCEPT, KEEPFILTERS เพื่อควบคุมการกรองอย่างละเอียด มีพฤติกรรมพิเศษคือ context transition ที่เปลี่ยน row context เป็น filter context โดยอัตโนมัติ ทำให้เป็นเครื่องมือหลักในการสร้าง measure ที่ซับซ้อนและ calculated column ที่ต้องใช้ aggregation

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่