Thep Excel

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

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

=FIRSTNONBLANK(<Column>, <Expression>)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
6/10

Difficulty
4/10

Usefulness
6/10

Syntax & Arguments

=FIRSTNONBLANK(<Column>, <Expression>)

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

How it works

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

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

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

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

Examples

ตัวอย่างที่ 1: วันแรกที่มีข้อมูลยอดขาย
วันแรกที่มียอด = FIRSTNONBLANK( 'Date'[Date], [Total Sales] )
คืนค่าเป็น "วันที่" (ค่าจาก Column) ไม่ใช่ยอดขาย ถ้า Date table มี 3650 วัน แล้ววันแรกที่มีข้อมูลขายคือวันที่ 2020-01-15 ก็จะคืนค่านั้นมา
DAX Formula:

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

Result:

ได้วันที่แรก (ตามลำดับ '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]
DAX Formula:

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

Result:

ได้ยอดขายของวันแรกที่มีข้อมูล

ตัวอย่างที่ 3: ถ้าต้องการคืนค่า expression โดยตรง (ใช้ FIRSTNONBLANKVALUE)
ยอดขายวันแรก (ทางลัด) = FIRSTNONBLANKVALUE('Date'[Date], [Total Sales])
FIRSTNONBLANKVALUE ถูกออกแบบมาเพื่อคืนค่าของ Expression สำหรับตัวแรกที่ไม่ว่าง ไม่ต้องคู่กับ CALCULATE
DAX Formula:

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

Result:

ได้ยอดขายของวันแรกที่มีข้อมูล โดยตรง

ตัวอย่างที่ 4: หาคนแรกที่มีการสั่งซื้อ
ลูกค้าแรก = FIRSTNONBLANK( Customers[CustomerID], CALCULATE(COUNTA(Orders[OrderID])) )
วน Loop ไปในแต่ละ CustomerID ตามลำดับ แล้วตรวจว่า Order count ไม่เป็น BLANK คืนค่า CustomerID แรกที่พบ
DAX Formula:

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

Result:

ได้ 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

Additional Notes

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

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

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

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

Leave a Reply

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