DATEDIFF คำนวณจำนวนช่วงเวลา (วัน, สัปดาห์, เดือน, ปี ฯลฯ) ระหว่างสองวันที่ด้วยการนับจำนวนครั้งที่ข้ามขอบเขตของช่วงเวลา เป็นฟังก์ชันพื้นฐานสำหรับการคำนวณอายุ, ระยะเวลา, และการวิเคราะห์เวลา
=DATEDIFF(<Date1>, <Date2>, <Interval>)
=DATEDIFF(<Date1>, <Date2>, <Interval>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Date1 | DateTime | Yes | วันที่เริ่มต้น (start date) สามารถเป็นคอลัมน์ที่มีค่าวันที่ หรือค่าวันที่แบบ scalar | |
| Date2 | DateTime | Yes | วันที่สิ้นสุด (end date) สามารถเป็นคอลัมน์ที่มีค่าวันที่ หรือค่าวันที่แบบ scalar | |
| Interval | Text | Yes | หน่วยของช่วงเวลา: SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR – ใช้เป็นข้อความอักษรพิมพ์ใหญ่ เช่น “DAY” หรือ “MONTH” |
ใช้วัด lead time หรือ SLA
เช่น ระยะเวลาตั้งแต่เริ่มงานถึงวันนี้
DATEDIFF(DATE(2024, 1, 1), DATE(2024, 12, 31), "DAY")= DATEDIFF(DATE(2024, 1, 1), DATE(2024, 12, 31), "DAY")
364
Age in Years = VAR BirthDate = DATE(1990, 5, 15) VAR Today = TODAY() RETURN DATEDIFF(BirthDate, Today, "YEAR")Age in Years =
VAR BirthDate = DATE(1990, 5, 15)
VAR Today = TODAY()
RETURN
DATEDIFF(BirthDate, Today, "YEAR")
34
Months Since Order = DATEDIFF([Order Date], TODAY(), "MONTH")Months Since Order =
DATEDIFF([Order Date], TODAY(), "MONTH")
3
DATEDIFF(DATE(2025, 1, 1), DATE(2024, 1, 1), "MONTH")= DATEDIFF(DATE(2025, 1, 1), DATE(2024, 1, 1), "MONTH")
-12
{ ("Years", DATEDIFF(DATE(2020, 1, 1), DATE(2024, 12, 31), "YEAR")), ("Months", DATEDIFF(DATE(2020, 1, 1), DATE(2024, 12, 31), "MONTH")), ("Weeks", DATEDIFF(DAT…= {
("Years", DATEDIFF(DATE(2020, 1, 1), DATE(2024, 12, 31), "YEAR")),
("Months", DATEDIFF(DATE(2020, 1, 1), DATE(2024, 12, 31), "MONTH")),
("Weeks", DATEDIFF(DATE(2020, 1, 1), DATE(2024, 12, 31), "WEEK")),
("Days", DATEDIFF(DATE(2020, 1, 1), DATE(2024, 12, 31), "DAY"))
}
Years=4, Months=59, Weeks=260, Days=1825
DATEDIFF นับจำนวนครั้งที่ข้ามขอบเขตของช่วงเวลา (ส่งคืนเลขจำนวนเต็ม) เช่น DATEDIFF(1/1/2000, 2/1/2000, YEAR) = 1 ปี แม้ว่าจะผ่านไป 1 เดือน ส่วน YEARFRAC จะคำนวณสัดส่วนจริง เช่น YEARFRAC(1/1/2000, 2/1/2000) = 0.083 ปี ใช้ DATEDIFF สำหรับงานคิดค้นวิยุ (เช่นอายุ) และ YEARFRAC สำหรับค่าเศษส่วน (เช่นดอกเบี้ย)
DATEDIFF จะพิจารณาเพียงส่วน “วันที่” และปฏิบัติต่อส่วน “เวลา” ว่าเป็น 00:00:00 ตัวอย่างเช่น DATEDIFF(2024/1/1 15:30:00, 2024/1/1 23:45:00, DAY) ยังคงให้ผลลัพธ์เป็น 0 เพราะอยู่ในวันเดียวกัน
ได้ครับ DATEDIFF ทำงานได้ดีกับทั้ง calculated column และ measure เมื่อใช้กับ calculated column มันจะมี row context ดังนั้นคุณสามารถอ้างอิงคอลัมน์ได้โดยตรง เมื่อใช้กับ measure คุณต้องใช้ CALCULATE เพื่อกำหนด filter context
DATEDIFF จะส่งคืน BLANK() ถ้าข้อมูลใดข้อมูลหนึ่งเป็น BLANK() เสมอ ดังนั้นคุณต้องจัดการค่า BLANK() ไว้ล่วงหน้า เช่นใช้ IFERROR หรือ IF เพื่อให้ได้ผลลัพธ์ที่สมเหตุสมผล
ได้ครับ Interval สามารถเป็นตัวแปร (variable) ได้ เช่น VAR MyInterval = “MONTH” จากนั้น DATEDIFF(Date1, Date2, MyInterval) แต่ต้องแน่ใจว่าค่า variable เป็นข้อความที่ถูกต้อง (SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR)
DATEDIFF เป็นฟังก์ชันแกนสำคัญของ DAX ที่ช่วยให้คุณวัดระยะเวลาระหว่างวันที่สองวันได้ง่าย ๆ
ที่เจ๋งคือ DATEDIFF นับ “ขอบเขตของช่วงเวลา” ไม่ใช่ “จำนวนช่วงเวลาสมบูรณ์” ตัวอย่างเช่น ถ้าคุณเกิดวันที่ 1 มกราคม 2000 และวันนี้คือ 2 มกราคม 2000 DATEDIFF จะบอกว่าผ่านไป 1 ปี (เพราะข้ามขอบเขตปีของ 2001 แม้ว่าจะผ่านไปแค่ 1 วัน) ส่วน YEARFRAC จะบอกว่าผ่านไปประมาณ 0.003 ปี
ส่วนตัวผม ถ้าจะเก่งการคำนวณเวลาใน DAX ต้องเข้าใจความแตกต่างนี้ให้ลึกซึ้ง เพราะมันจะเปลี่ยนวิธีที่เราดำเนินการบางอย่าง เช่น การคำนวณอายุ การวิเคราะห์ระยะเวลาโครงการ และการรายงาน SLA ต้องใช้ DATEDIFF หรือ YEARFRAC นั้นขึ้นอยู่กับสิ่งที่คุณต้องการเก็บเอาไว้