Thep Excel

FIRSTNONBLANKVALUE – ค่าแรกที่ไม่ว่างตามลำดับของคอลัมน์

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

=FIRSTNONBLANKVALUE(<Column>, <Expression>)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
5/10

Difficulty
4/10

Usefulness
5/10

Syntax & Arguments

=FIRSTNONBLANKVALUE(<Column>, <Expression>)

Argument Type Required Default Description
Column column Yes คอลัมน์ที่ใช้เป็นลำดับในการไล่ค่า มักจะเป็นวันที่ (Date Column) หรือคอลัมน์ที่มีค่าสามารถเรียงลำดับได้ ฟังก์ชันจะวิ่งตามลำดับจากน้อยไปมากของคอลัมน์นี้
Expression expression Yes นิพจน์หรือ Measure ที่ต้องการคืนค่าแรกที่ไม่เป็น BLANK อาจเป็น SUM(), COUNT(), Measure ชื่อที่สร้างไว้แล้ว หรือสูตรใดๆ ที่คืนค่าเดี่ยว (Scalar)

How it works

ยอดขายวันแรกที่มียอด (คืนค่าเป็นยอดขาย)

หา “ยอดขาย” ของวันแรกที่ [Total Sales] ไม่เป็น BLANK

ค่าแรกของสถานะ/ข้อความที่ไม่ว่างตามเวลา

คืนค่าสถานะครั้งแรกที่มีข้อมูลในช่วงเวลาที่เลือก

ค่าแรกที่เกิดขึ้นในกลุ่ม

ใช้กับการกรองตามลูกค้า/สินค้า เพื่อหา “ค่าแรกที่มีข้อมูล” ภายในกลุ่มนั้น

Examples

ตัวอย่างที่ 1: หายอดขายของวันแรกที่มีข้อมูล
ยอดขายวันแรก = FIRSTNONBLANKVALUE( 'Date'[Date], [Total Sales] )
ฟังก์ชันเข้าไปไล่วันที่ตั้งแต่วันแรกของ Date table แล้วดูว่าในแต่ละวัน [Total Sales] มีค่ามั้ย ถ้าวันแรกไม่มี BLANK ก็ได้ค่านั้นเลย แต่ถ้า BLANK ก็เข้าไปดูวันถัดไป จนเจอค่าที่ไม่ใช่ BLANK
DAX Formula:

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

Result:

ได้ยอดขายของวันแรก (ตามลำดับ 'Date'[Date]) ที่มีค่า Total Sales ไม่เป็น BLANK

ตัวอย่างที่ 2: หาค่าคงคลัง (Inventory) ของวันแรกเมื่อเปิดบัญชี
ค่าคงคลังเปิดบัญชี = VAR ProductKey = SELECTEDVALUE('Product'[ProductKey]) RETURN FIRSTNONBLANKVALUE( 'Date'[Date], CALCULATE( SUM('Inventory'[Qty]), 'Product'[…
ใช้ VAR เก็บ ProductKey ที่เลือก แล้ว FIRSTNONBLANKVALUE ไล่วันที่เพื่อหาจำนวนสินค้าในวันแรกที่มีข้อมูล นี่คือการทำ Opening Balance แบบหลาวครับ
DAX Formula:

ค่าคงคลังเปิดบัญชี =
VAR ProductKey = SELECTEDVALUE('Product'[ProductKey])
RETURN
FIRSTNONBLANKVALUE(
    'Date'[Date],
    CALCULATE(
        SUM('Inventory'[Qty]),
        'Product'[ProductKey] = ProductKey
    )
)

Result:

ได้ปริมาณสินค้าของวันแรกที่สินค้านั้นมีบันทึกในระบบ

ตัวอย่างที่ 3: ใช้กับการกรองของรายงาน (ร่วมกับ ALLSELECTED)
ยอดขายวันแรก (ในช่วงที่เลือก) = CALCULATE( FIRSTNONBLANKVALUE( 'Date'[Date], [Total Sales] ), ALLSELECTED('Date') )
ALLSELECTED ช่วยให้การไล่ค่าอิงตามช่วงที่ผู้ใช้เลือก (เช่นเลือกเฉพาะปี 2024) มากกว่าถูกจำกัดโดย Filter Context อื่นๆ ใช้เวลาต้องการให้ผู้ใช้มีความยืดหยุ่นในการกรองข้อมูล
DAX Formula:

=ยอดขายวันแรก (ในช่วงที่เลือก) =
CALCULATE(
    FIRSTNONBLANKVALUE(
        'Date'[Date],
        [Total Sales]
    ),
    ALLSELECTED('Date')
)

Result:

ได้ยอดขายวันแรกที่ไม่ว่าง แต่ยังคำนึงถึงช่วงวันที่ผู้ใช้เลือกในรายงาน

ตัวอย่างที่ 4: หาสถานะแรกที่ไม่ว่างของเหตุการณ์
สถานะแรก (ไม่ว่าง) = FIRSTNONBLANKVALUE( 'EventLog'[EventDate], SELECTEDVALUE('EventLog'[Status], "ไม่มีข้อมูล") )
เมื่อมีการบันทึกเหตุการณ์หลายครั้ง แต่บางครั้งเก็บสถานะไว้หลังจากทำงาน ฟังก์ชันนี้ช่วยหาสถานะที่บันทึกครั้งแรกที่ไม่ว่าง
DAX Formula:

=สถานะแรก (ไม่ว่าง) =
FIRSTNONBLANKVALUE(
    'EventLog'[EventDate],
    SELECTEDVALUE('EventLog'[Status], "ไม่มีข้อมูล")
)

Result:

ได้สถานะแรกของเหตุการณ์ตามลำดับวันที่

FAQs

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

เรื่องสำคัญที่ต้องเข้าใจ: FIRSTNONBLANK คืน “ตารางแรก” ที่สามารถใช้กับ CALCULATE เช่น CALCULATE(SUM(…), FIRSTNONBLANK(…)) ส่วน FIRSTNONBLANKVALUE คืน “ค่าเดี่ยว (Scalar)” โดยตรง ที่ได้จากการประเมิน Expression ในแถวแรกที่ไม่ว่าง ถ้าคุณต้องได้ตารางให้ใช้ FIRSTNONBLANK แต่ถ้าต้องได้ค่า (เลข, ข้อความ) ก็ใช้ FIRSTNONBLANKVALUE

ลำดับการไล่ค่า (Natural Ascending Order) มาจากไหน?

ขึ้นกับการเรียงลำดับของคอลัมน์ที่ระบุ (Column Argument) ในบริบทตัวกรองปัจจุบัน โดยทั่วไปคือลำดับจากน้อยไปมาก (Ascending) เช่นถ้าใช้วันที่ก็จะเรียงจากวันเก่าสุดไปวันใหม่ ถ้าใช้ ID ตัวเลขก็จะเรียงจากน้อยไปมาก ถ้าต้องการคืนค่าจากส่วนท้าย ให้ใช้ LASTNONBLANKVALUE แทน

ทำไมบางครั้งฟังก์ชันนี้ช้าหรือ Error?

FIRSTNONBLANKVALUE มีข้อเตือนเกี่ยวกับประสิทธิภาพในเอกสาร Microsoft ด้วย เนื่องจากมันต้องไล่ค่าของคอลัมน์ทีละค่า (Iterator) จึงอาจใช้หน่วยความจำและเวลาในการประเมินมากถ้าคอลัมน์มีค่าที่ไม่ซ้ำมากๆ (High Cardinality) วิธีแก้คือ: 1) ตรวจสอบ Expression ว่ากำหนด Cardinality ของ Column ให้แคบลง (ใช้ FILTER ก่อน) 2) ประเมินว่าจำเป็นต้องใช้ FIRSTNONBLANKVALUE จริงๆ หรือเขียนเป็น CALCULATE + FIRSTNONBLANK + SUMMARIZE ก็ได้ผล

ใช้ได้กับ DirectQuery หรือเปล่า?

ตามเอกสาร Microsoft ฟังก์ชันนี้ \”ไม่สนับสนุน\” (Not Supported) ใน DirectQuery Mode เมื่อใช้ในการคำนวณคอลัมน์หรือ Row-Level Security (RLS) ถ้าโมเดลของคุณใช้ DirectQuery ลองเปลี่ยนเป็นโหมด Import หรือใช้ FIRSTNONBLANK + CALCULATETABLE แทน

ต้องมี Date Table มั้ย?

ไม่บังคับว่าต้องเป็น Date Table เฉพาะว่า Column ที่ใช้ (Argument แรก) ต้องเป็นคอลัมน์ที่มีค่าสามารถเรียงลำดับได้ เช่นวันที่, ตัวเลข, ข้อความ (แต่ลำดับอักษรไม่เข้าใจธุรกิจส่วนมาก) ลองใช้คอลัมน์ใดก็ได้ตามที่มี แต่ค่อนข้างจะเหมาะกับคอลัมน์ที่มีลำดับหมายความ เช่นวันที่หรือลำดับเวลา

Resources & Related

Additional Notes

FIRSTNONBLANKVALUE เป็นฟังก์ชันที่ใช้หา ‘ค่าแรกที่ไม่ว่าง’ ของนิพจน์ (Expression) โดยไล่ตามลำดับของค่าในคอลัมน์ที่ระบุ มันวิ่งเข้าไปในแต่ละค่าของคอลัมน์ตามลำดับจากน้อยไปมาก (Natural Ascending Order) แล้วประเมิน Expression จนเจอผลลัพธ์ที่ไม่ใช่ BLANK จากนั้นให้หยุดและคืนค่านั้นกลับมา

ที่เจ๋งคือฟังก์ชันนี้ทำให้หาค่าแรกที่มีข้อมูลจริงได้ง่ายมาก เช่นอยากรู้ว่าในเดือนนี้วันแรกที่มียอดขายเป็นวันไหน และยอดขายนั้นเป็นเท่าไหร่? FIRSTNONBLANKVALUE ตอบได้พอดี โดยที่คุณไม่ต้องเขียน FILTER + MIN/MAX หรือโค้ดยุ่งๆ

ส่วนตัวผมชอบใช้ FIRSTNONBLANKVALUE ในการสร้าง Semi-Additive Measures (ยอดขายเปิดบัญชี, ค่าคงคลัง ณ วันแรก) หรือเมื่อต้องการ Opening Balance ตามลำดับวันที่ มันช่วยให้โค้ด DAX อ่านง่ายและประสิทธิภาพดีกว่าการเขียน CALCULATE+FILTER แบบซ้อนๆ ครับ

Leave a Reply

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