Thep Excel

FIRSTDATEวันที่แรกในบริบทตัวกรองปัจจุบัน

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

fx
=FIRSTDATE(<Dates>)

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

อัปเดต 13 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
Dates column | table expression คอลัมน์วันที่หรือ table expression ที่คืนค่าคอลัมน์วันที่เดี่ยว

Additional Notes

FIRSTDATE เป็นฟังก์ชัน time intelligence ที่คืนค่าตาราง (table) ที่มีวันที่แรกในบริบทตัวกรองปัจจุบัน ใช้บ่อยมากกับ CALCULATE เพื่อคำนวณ measure ที่ “เฉพาะวันแรกของช่วง” เช่นยอดขายของวันแรกของเดือน หรือ opening balance ของไตรมาส

ที่เจ๋งคือ FIRSTDATE ทำงานคู่กับ time intelligence ได้ดี เมื่อคุณมี date table ที่ถูกทำเครื่องหมายเป็น Date table แล้ว FIRSTDATE จะรู้ว่าต้องหาวันที่แรก “ของช่วงที่ถูกกรองอยู่” (เช่นวันแรกของเดือนที่เลือก ไม่ใช่วันแรกของปีทั้งปี) เพราะมันพิจารณา filter context ด้วย

ส่วนตัวผมมักใช้ FIRSTDATE กับ CALCULATE เพื่อสร้าง opening balance measure หรือหาค่าเมื่อต้นไตรมาส ส่วนถ้าแค่อยากได้วันที่แรกเป็นค่าเดี่ยว (scalar) ผมอาจใช้ MIN ที่ง่ายกว่า ขึ้นอยู่กับบริบท แต่ FIRSTDATE ดีกว่าเมื่อต้องการ table เพื่อเป็นตัวกรอง

How it works

ยอดขายของวันแรกในช่วงที่เลือก

คำนวณ [Total Sales] เฉพาะวันแรกของช่วงที่ถูกกรอง

หา “วันที่แรก” เป็นค่าเดี่ยว

แปลงผลลัพธ์จากตารางให้เป็น scalar date เพื่อใช้แสดงผล

เปรียบเทียบวันแรกและวันสุดท้าย

ใช้คู่กับ LASTDATE เพื่อคำนวณความต่างของช่วงเวลา

Examples

หายอดขายของวันแรกในช่วงยอดขายวันแรก = VAR FirstDateInContext = FIRSTDATE('Date'[Date]) RETURN CALCULATE( [Total Sales], FirstDateInContext )

ใช้ VAR เก็บ FIRSTDATE ไว้ก่อน แล้วใส่เข้าไปใน CALCULATE เป็นตัวกรอง ผลจะได้ยอดขายของวันแรกในบริบท

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

ผลลัพธ์ได้ยอดขายเฉพาะวันแรกของช่วงที่ถูกกรอง
ดึงวันที่แรกออกมาเป็นค่า (scalar date)วันที่แรก (Scalar) = MINX( FIRSTDATE('Date'[Date]), 'Date'[Date] )

FIRSTDATE คืนตาราง ถ้าต้องการค่าเดี่ยวให้ใช้ MINX (หรือ MAX) วนบนตารางนั้น ค่อนข้างไม่เอาไหนแต่บางครั้งต้องการแบบนี้

fx
=วันที่แรก (Scalar) =
MINX(
FIRSTDATE('Date'[Date]),
'Date'[Date]
)

ผลลัพธ์ได้วันที่แรกเป็นค่าเดี่ยว (date/datetime) เช่น 2025-01-01
Opening Balance – ยอดคงคลัง ต้นไตรมาสOpening Balance Quarter = CALCULATE( [Total Stock], FIRSTDATE( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER('Date'[Date]), MAX('Date'[Date]) ) ) )

ตัวอย่างสำคัญ – opening balance กำหนด date range เป็นต้นไตรมาส แล้วหา FIRSTDATE ของช่วงนั้น ใช้ FIRSTDATE แบบนี้บ่อยมากในการวิเคราะห์คลังสินค้า/ทางการเงิน

fx
Opening Balance Quarter =
CALCULATE(
[Total Stock],
FIRSTDATE(
DATESBETWEEN(
'Date'[Date],
STARTOFQUARTER('Date'[Date]),
MAX('Date'[Date])
)
)
)

ผลลัพธ์ได้ยอดคงคลังของวันแรกของไตรมาส
หาจำนวนวันในช่วงที่เลือกจำนวนวันในช่วง = DATEDIFF( MINX(FIRSTDATE('Date'[Date]), 'Date'[Date]), MAX('Date'[Date]), DAY ) + 1

ใช้ FIRSTDATE ดึงวันแรก (แปลงเป็น scalar ด้วย MINX) แล้วเปรียบเทียบกับ MAX ของวันสุดท้าย DATEDIFF หาความต่าง

fx
จำนวนวันในช่วง =
DATEDIFF(
MINX(FIRSTDATE('Date'[Date]), 'Date'[Date]),
MAX('Date'[Date]),
DAY
) + 1

ผลลัพธ์ได้จำนวนวันระหว่างวันแรกและวันสุดท้าย

FAQs

FIRSTDATE คืนค่าเป็นตารางหรือค่าเดี่ยว?+

FIRSTDATE คืนค่าเป็น **ตารางหนึ่งแถว** (single-row table) ไม่ใช่ scalar date ถ้าต้องการค่าเดี่ยว ให้ใช้ iterator เช่น MINX() หรือ MAX() วนบนตารางนั้น หรือใช้ MIN() เลยถ้าแค่อยากได้ scalar โดยตรง

ควรใช้ MIN('Date'[Date]) แทน FIRSTDATE ได้ไหม?+

**ได้บ่อยมาก** MIN ให้ scalar โดยตรงแต่หากคุณต้องการใช้เป็นตัวกรองกับ CALCULATE (เพื่อให้ filter context ถูกต้อง) ให้ใช้ FIRSTDATE เพราะมัน return table ที่สามารถถูกใช้เป็นตัวกรองได้ ผมแนะนำให้ลองทั้งสองวิธี แล้วเลือกตามที่ให้ผลถูกต้อง

FIRSTDATE กับ FIRSTNONBLANK ต่างกันอย่างไร?+

FIRSTDATE หาวันที่แรก (first date in chronological order) ส่วน FIRSTNONBLANK หาค่าแรกที่ไม่ว่าง (first non-blank value in a column) ใช้โลจิกต่างกัน FIRSTNONBLANK ใช้ได้กับ column ใดก็ได้ ไม่ใช่แค่ date

ต้องมี Date table ไหม?+

ไม่ **ต้อง** มี Date table แต่ถ้ามี และทำเครื่องหมายเป็น Date table แล้ว time intelligence (FIRSTDATE, LASTDATE, เป็นต้น) จะทำงานได้ดีและถูกต้องมากขึ้น หากไม่มี Date table FIRSTDATE ยังคงทำงาน แต่อาจให้ผลลัพธ์ที่ไม่คาดหวังได้

FIRSTDATE ใช้กับ DirectQuery ได้ไหม?+

**ไม่ได้** FIRSTDATE ไม่รองรับ DirectQuery mode สำหรับ calculated column หรือ RLS rule หากต้องใช้ DirectQuery ต้องหา alternative

Resources & Related

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

ฟังก์ชันนี้FIRSTDATETime Intelligence
Time Intelligence (9)
CLOSINGBALANCEMONTH

CLOSINGBALANCEMONTH ประเมิน Expression ณ วันสิ้นเดือนของบริบทวันที่ปัจจุบัน เหมาะกับการทำมาตรวัดยอดคงเหลือปลายเดือน และรองรับการใส่ตัวกรองเพิ่มเติม

DATEADD

DATEADD คืนค่าตารางวันที่ ที่ถูกเลื่อนออกไปจากช่วงวันที่ใน Context ปัจจุบัน ตามจำนวน (NumberOfIntervals) และหน่วย (Interval) ที่กำหนด เช่น เลื่อนย้อนหลัง 1 เดือน หรือเลื่อนไปข้างหน้า 1 ปี

DATESBETWEEN

DATESBETWEEN คืนตารางวันที่ที่อยู่ระหว่าง StartDate และ EndDate (รวมวันเริ่ม/วันจบ) เหมาะกับการใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อคำนวณตามช่วงวันที่ที่กำหนดเอง

ENDOFMONTH

ENDOFMONTH คืนตารางวันที่ของวันสิ้นเดือนตามปฏิทิน เหมาะกับ Semi-Additive Calculations เช่น ยอดคงเหลือ, Inventory, หรือ Closing Balance ที่ต้องการ snapshot ณ สิ้นเดือน ไม่ว่าจะมีข้อมูลจริงในวันนั้นหรือไม่

FIRSTNONBLANK

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

FIRSTNONBLANKVALUE

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

LASTDATE

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

PREVIOUSQUARTER

PREVIOUSQUARTER คืนตารางวันที่ของไตรมาสก่อนหน้า ตามวันที่แรกในบริบทปัจจุบัน ใช้สำหรับสร้าง Measure เปรียบเทียบ Quarter-over-Quarter (QoQ) โดยคืนวันที่ครบทั้งไตรมาสเสมอ ไม่ว่าจะเลือกวันที่ใดก็ตาม ภายในใช้ PARALLELPERIOD(FIRSTDATE(dates), -1, QUARTER)

STARTOFMONTH

STARTOFMONTH คืนวันแรกของเดือนเป็นตาราง 1 แถว ใช้กับการวัดที่ขึ้นต่อจุดเวลา เช่น ยอดคงเหลือ บัญชี หรือสินค้าคงคลัง

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

Date and Time (1)
DATEDIFF

DATEDIFF คำนวณจำนวนช่วงเวลา (วัน, สัปดาห์, เดือน, ปี ฯลฯ) ระหว่างสองวันที่ด้วยการนับจำนวนครั้งที่ข้ามขอบเขตของช่วงเวลา เป็นฟังก์ชันพื้นฐานสำหรับการคำนวณอายุ, ระยะเวลา, และการวิเคราะห์เวลา

Comments

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