Thep Excel

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

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

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

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

อัปเดต 13 December 2025

Syntax & Arguments

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

Additional Notes

FIRSTNONBLANK คืน “ค่าตัวแรก” ของคอลัมน์ที่ระบุ ซึ่งทำให้ expression ที่ให้มา ไม่เป็น BLANK ตามลำดับของคอลัมน์นั้น มักใช้หา “วันแรกที่มีข้อมูล” (คืนค่าเป็นวันที่) หรือ “รายการแรกที่มีข้อมูล” ตามลำดับที่กำหนด

ส่วนตัวผม คิดว่า FIRSTNONBLANK เป็นฟังก์ชันที่ทำให้ DAX developers หลายคนสับสน เพราะมันคืนค่า “จากคอลัมน์” (column value) ไม่ใช่ “ค่าของ expression” ถ้าอยากได้ค่า expression โดยตรง ต้องใช้ FIRSTNONBLANKVALUE แทน นี่คือความแตกต่างที่ CRITICAL และหลายคนพลาดไป 😎

ข้อสำคัญอีกอย่าง: ฟังก์ชันนี้มีปัญหาเกี่ยวกับ Performance ตามเอกสาร Microsoft ถ้า Column มีแถวมากๆ ต้องระวัง อาจลดความเร็วของรายงาน

ถ้าต้องการคืน “ค่าของ expression” ของรายการแรกที่ไม่ว่าง ให้ดู FIRSTNONBLANKVALUE แทน

How it works

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

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

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

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

Examples

ตัวอย่างที่ 1: วันแรกที่มีข้อมูลยอดขายวันแรกที่มียอด = FIRSTNONBLANK( 'Date'[Date], [Total Sales] )

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

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

ผลลัพธ์ได้วันที่แรก (ตามลำดับ 'Date'[Date]) ที่ [Total Sales] ไม่เป็น BLANK
ตัวอย่างที่ 2: ยอดขายของวันแรก (ใช้คู่กับ CALCULATE)ยอดขายวันแรก = VAR firstDay = FIRSTNONBLANK('Date'[Date], [Total Sales]) RETURN CALCULATE( [Total Sales], 'Date'[Date] = firstDay )

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

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

ผลลัพธ์ได้ยอดขายของวันแรกที่มีข้อมูล
ตัวอย่างที่ 3: ถ้าต้องการคืนค่า expression โดยตรง (ใช้ FIRSTNONBLANKVALUE)ยอดขายวันแรก (ทางลัด) = FIRSTNONBLANKVALUE('Date'[Date], [Total Sales])

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

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

ผลลัพธ์ได้ยอดขายของวันแรกที่มีข้อมูล โดยตรง
ตัวอย่างที่ 4: หาคนแรกที่มีการสั่งซื้อลูกค้าแรก = FIRSTNONBLANK( Customers[CustomerID], CALCULATE(COUNTA(Orders[OrderID])) )

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

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

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

FAQs

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

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

ต่างกับ FIRSTNONBLANKVALUE ยังไง?+

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

ควรใช้ FIRSTDATE แทนได้ไหม?+

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

Performance มีปัญหาจริงหรือ?+

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

ใช้บริบทอะไรได้บ้าง?+

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

Resources & Related

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

ฟังก์ชันนี้FIRSTNONBLANKTime Intelligence
Time Intelligence (4)
FIRSTDATE

FIRSTDATE คืนค่าวันที่แรกในบริบทตัวกรองปัจจุบัน เหมาะใช้เป็นตัวกรองให้ CALCULATE เพื่อหายอดขาย/จำนวนของวันแรกในช่วงที่เลือก

FIRSTNONBLANKVALUE

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

LASTDATE

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

LASTNONBLANK

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

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

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