DATEDIFF คำนวณจำนวนช่วงเวลา (วัน, สัปดาห์, เดือน, ปี ฯลฯ) ระหว่างสองวันที่ด้วยการนับจำนวนครั้งที่ข้ามขอบเขตของช่วงเวลา เป็นฟังก์ชันพื้นฐานสำหรับการคำนวณอายุ, ระยะเวลา, และการวิเคราะห์เวลา
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| Date1 | DateTime | วันที่เริ่มต้น (start date) สามารถเป็นคอลัมน์ที่มีค่าวันที่ หรือค่าวันที่แบบ scalar |
| Date2 | DateTime | วันที่สิ้นสุด (end date) สามารถเป็นคอลัมน์ที่มีค่าวันที่ หรือค่าวันที่แบบ scalar |
| Interval | Text | หน่วยของช่วงเวลา: SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR – ใช้เป็นข้อความอักษรพิมพ์ใหญ่ เช่น “DAY” หรือ “MONTH” |
DATEDIFF เป็นฟังก์ชันแกนสำคัญของ DAX ที่ช่วยให้คุณวัดระยะเวลาระหว่างวันที่สองวันได้ง่าย ๆ
ที่เจ๋งคือ DATEDIFF นับ “ขอบเขตของช่วงเวลา” ไม่ใช่ “จำนวนช่วงเวลาสมบูรณ์” ตัวอย่างเช่น ถ้าคุณเกิดวันที่ 1 มกราคม 2000 และวันนี้คือ 2 มกราคม 2000 DATEDIFF จะบอกว่าผ่านไป 1 ปี (เพราะข้ามขอบเขตปีของ 2001 แม้ว่าจะผ่านไปแค่ 1 วัน) ส่วน YEARFRAC จะบอกว่าผ่านไปประมาณ 0.003 ปี
ส่วนตัวผม ถ้าจะเก่งการคำนวณเวลาใน DAX ต้องเข้าใจความแตกต่างนี้ให้ลึกซึ้ง เพราะมันจะเปลี่ยนวิธีที่เราดำเนินการบางอย่าง เช่น การคำนวณอายุ การวิเคราะห์ระยะเวลาโครงการ และการรายงาน SLA ต้องใช้ DATEDIFF หรือ YEARFRAC นั้นขึ้นอยู่กับสิ่งที่คุณต้องการเก็บเอาไว้
ใช้วัด lead time หรือ SLA
เช่น ระยะเวลาตั้งแต่เริ่มงานถึงวันนี้
คำนวณจำนวนวันระหว่าง 1 มกราคม 2024 ถึง 31 ธันวาคม 2024 ได้ 364 วัน
ถ้าวันเกิดคือ 15 พฤษภาคม 1990 และวันนี้คือ 20 ธันวาคม 2024 อายุจะเป็น 34 ปี (นับจำนวนครั้งที่ข้ามขอบเขตปี)
ในตาราง Sales ใช้คอลัมน์ Order Date และคำนวณว่าผ่านไปกี่เดือนจากวันสั่งซื้อมาถึงวันนี้ (สมมติว่าผ่านไป 3 เดือน)
เมื่อ Date1 มากกว่า Date2 ผลลัพธ์จะเป็นลบ ในที่นี้ 1 มกราคม 2025 มากกว่า 1 มกราคม 2024 ดังนั้นจึงได้ -12 เดือน
ใช้ table constructor เพื่อคำนวณระยะเวลาระหว่าง 1 มกราคม 2020 ถึง 31 ธันวาคม 2024 ในหลายหน่วยพร้อมกัน
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 จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
DATE สร้างค่าวันที่จากตัวเลข Year/Month/Day แล้วคืนค่าเป็นชนิด datetime เหมาะกับการประกอบวันที่จากคอลัมน์แยกส่วนหรือสร้างวันที่อ้างอิง เช่น วันแรกของเดือน วันตัดยอด
DATEVALUE แปลงข้อความวันที่ (text) ให้เป็น datetime โดยอ้างอิงตามการตั้งค่า locale ของ model เหมาะกับข้อมูลวันที่ที่เก็บเป็นข้อความและต้องแปลงเป็นวันที่จริงเพื่อการคำนวณตามเวลา
EDATE รับวันที่เริ่มต้นและจำนวนเดือนที่ต้องการเลื่อนไปข้างหน้า/ย้อนกลับ แล้วคืนวันที่ใหม่ที่รักษาวันเดิม (หรือวันสุดท้ายของเดือนถัดไปถ้าวันเดิมเกิน) เหมาะสำหรับวันครบกำหนดชำระ บันทึกงวด และตารางผ่อน
YEARFRAC คืนค่าสัดส่วนของปีระหว่าง StartDate และ EndDate โดยเลือกวิธีนับวัน (Basis) ได้ เหมาะกับการวัดช่วงเวลาที่ต้องการผลลัพธ์เป็นจำนวนปีแบบทศนิยม
FIRSTDATE คืนค่าวันที่แรกในบริบทตัวกรองปัจจุบัน เหมาะใช้เป็นตัวกรองให้ CALCULATE เพื่อหายอดขาย/จำนวนของวันแรกในช่วงที่เลือก
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่