FIRSTDATE คืนค่าวันที่แรกในบริบทตัวกรองปัจจุบัน เหมาะใช้เป็นตัวกรองให้ CALCULATE เพื่อหายอดขาย/จำนวนของวันแรกในช่วงที่เลือก
=FIRSTDATE(<Dates>)
=FIRSTDATE(<Dates>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Dates | column | table expression | Yes | คอลัมน์วันที่หรือ table expression ที่คืนค่าคอลัมน์วันที่เดี่ยว |
คำนวณ [Total Sales] เฉพาะวันแรกของช่วงที่ถูกกรอง
แปลงผลลัพธ์จากตารางให้เป็น scalar date เพื่อใช้แสดงผล
ใช้คู่กับ LASTDATE เพื่อคำนวณความต่างของช่วงเวลา
ยอดขายวันแรก = VAR FirstDateInContext = FIRSTDATE('Date'[Date]) RETURN CALCULATE( [Total Sales], FirstDateInContext )ยอดขายวันแรก =
VAR FirstDateInContext = FIRSTDATE('Date'[Date])
RETURN
CALCULATE(
[Total Sales],
FirstDateInContext
)
ได้ยอดขายเฉพาะวันแรกของช่วงที่ถูกกรอง
วันที่แรก (Scalar) = MINX( FIRSTDATE('Date'[Date]), 'Date'[Date] )=วันที่แรก (Scalar) =
MINX(
FIRSTDATE('Date'[Date]),
'Date'[Date]
)
ได้วันที่แรกเป็นค่าเดี่ยว (date/datetime) เช่น 2025-01-01
Opening Balance Quarter = CALCULATE( [Total Stock], FIRSTDATE( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER('Date'[Date]), MAX('Date'[Date]) ) ) )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จำนวนวันในช่วง =
DATEDIFF(
MINX(FIRSTDATE('Date'[Date]), 'Date'[Date]),
MAX('Date'[Date]),
DAY
) + 1
ได้จำนวนวันระหว่างวันแรกและวันสุดท้าย
FIRSTDATE คืนค่าเป็น **ตารางหนึ่งแถว** (single-row table) ไม่ใช่ scalar date ถ้าต้องการค่าเดี่ยว ให้ใช้ iterator เช่น MINX() หรือ MAX() วนบนตารางนั้น หรือใช้ MIN() เลยถ้าแค่อยากได้ scalar โดยตรง
**ได้บ่อยมาก** MIN ให้ scalar โดยตรงแต่หากคุณต้องการใช้เป็นตัวกรองกับ CALCULATE (เพื่อให้ filter context ถูกต้อง) ให้ใช้ FIRSTDATE เพราะมัน return table ที่สามารถถูกใช้เป็นตัวกรองได้ ผมแนะนำให้ลองทั้งสองวิธี แล้วเลือกตามที่ให้ผลถูกต้อง
FIRSTDATE หาวันที่แรก (first date in chronological order) ส่วน FIRSTNONBLANK หาค่าแรกที่ไม่ว่าง (first non-blank value in a column) ใช้โลจิกต่างกัน FIRSTNONBLANK ใช้ได้กับ column ใดก็ได้ ไม่ใช่แค่ date
ไม่ **ต้อง** มี Date table แต่ถ้ามี และทำเครื่องหมายเป็น Date table แล้ว time intelligence (FIRSTDATE, LASTDATE, เป็นต้น) จะทำงานได้ดีและถูกต้องมากขึ้น หากไม่มี Date table FIRSTDATE ยังคงทำงาน แต่อาจให้ผลลัพธ์ที่ไม่คาดหวังได้
**ไม่ได้** FIRSTDATE ไม่รองรับ DirectQuery mode สำหรับ calculated column หรือ RLS rule หากต้องใช้ DirectQuery ต้องหา alternative
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 เพื่อเป็นตัวกรอง