DATEVALUE แปลงข้อความวันที่ (text) ให้เป็น datetime โดยอ้างอิงตามการตั้งค่า locale ของ model เหมาะกับข้อมูลวันที่ที่เก็บเป็นข้อความและต้องแปลงเป็นวันที่จริงเพื่อการคำนวณตามเวลา
=DATEVALUE(<DateText>)
=DATEVALUE(<DateText>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| DateText | Text | Yes | ข้อความที่เป็นวันที่ เช่น “2025-12-31”, “31/12/2025”, “12/31/2025” ระบบจะตีความตามรูปแบบ locale ของ model |
เช่น วันที่ถูกนำเข้ามาเป็น string ต้องแปลงเพื่อทำ Time Intelligence
แปลงข้อความวันที่ให้เป็นวันที่จริงก่อนใช้กับสูตรวัดระยะเวลา
Parsed Date = DATEVALUE("2025-12-31")Parsed Date =
DATEVALUE("2025-12-31")
31/12/2025 (datetime type)
Order Date (Parsed) = DATEVALUE(Orders[OrderDateText])=Order Date (Parsed) =
DATEVALUE(Orders[OrderDateText])
ได้คอลัมน์ datetime ที่สามารถใช้ link กับ Date Table
Days Between (Parsed) = DATEDIFF( DATEVALUE(Orders[StartDateText]), DATEVALUE(Orders[EndDateText]), DAY )=Days Between (Parsed) =
DATEDIFF(
DATEVALUE(Orders[StartDateText]),
DATEVALUE(Orders[EndDateText]),
DAY
)
จำนวนวันระหว่างวันที่ที่เคยเป็นข้อความ (เช่น 10)
Test Dates = DATEVALUE("5/4/2018") → ถูกตีความ May 4 DATEVALUE("20/4/2018") → ถูกตีความ April 20 (intelligent fallback) DATEVALUE("4-5-2018") → ยอนหนี้ไปใช้รูปแ…Test Dates =
DATEVALUE("5/4/2018") → ถูกตีความ May 4
DATEVALUE("20/4/2018") → ถูกตีความ April 20 (intelligent fallback)
DATEVALUE("4-5-2018") → ยอนหนี้ไปใช้รูปแบบ M-D-Y ก็ได้
วันที่ datetime แต่ละอันแม้รูปแบบไม่ตรงกับ locale
Sales Until Date = VAR TargetDate = DATEVALUE("2025-12-31") RETURN CALCULATE( SUM(Sales[Amount]), Sales[OrderDate]Sales Until Date =
VAR TargetDate = DATEVALUE("2025-12-31")
RETURN
CALCULATE(
SUM(Sales[Amount]),
Sales[OrderDate] <= TargetDate
)
ยอด Sales สำหรับ orders ที่วันที่ <= 2025-12-31
This Year Date = DATEVALUE("12/25") // ไม่มีปีThis Year Date =
DATEVALUE("12/25") // ไม่มีปี
25/12/[Current Year] (system current year)
มักเกิดจากข้อความไม่ใช่รูปแบบวันที่ที่ถูกต้อง (เช่น “abc”, “13/32/2025”) หรือรูปแบบไม่สามารถตีความได้แม้ว่า fallback ก็ตาม ควรตรวจสอบข้อมูล input และใช้ IFERROR เพื่อจัดการ error หรือข้อมูลที่ไม่ชัดเจน
DATEVALUE แปลงจากข้อความ (text) ส่วน DATE สร้างวันที่จากตัวเลข Year/Month/Day ถ้าข้อมูลต้นฉบับเป็นข้อความใช้ DATEVALUE ถ้าเป็นตัวเลขแยกกันใช้ DATE
Locale คือการตั้งค่าภูมิศาสตร์/ภาษาของ model เช่น en-US (M/D/Y), en-GB (D/M/Y), th-TH เป็นต้น DATEVALUE ใช้ locale นี้เพื่อตีความรูปแบบวันที่ “1/2/2025” อาจเป็น January 2 หรือ February 1 ขึ้นอยู่ locale ดังนั้นถ้าข้อมูลมาจากนอกประเทศต้องระวัง
DATEVALUE แปลงข้อความเป็นวันที่ส่วน TIMEVALUE แปลงข้อความเป็นเวลา (time only) ถ้าต้องการ timestamp เต็มควรใช้ DATEVALUE
DATEVALUE จะเพิกเฉยต่อส่วนเวลา ดังนั้น “2025-12-31 14:30:00” จะแปลงเป็น 31/12/2025 (เลิกไปส่วน 14:30:00) ถ้าต้องเวลาด้วยต้องใช้ DATETIMEVALUE หรือ TIMEVALUE แยกต่างหาก
ใช่ DAX รองรับ literal date syntax เช่น dt”2025-12-31″ ซึ่งชัดเจนกว่าและไม่ต้องใช้ DATEVALUE สำหรับวันที่คงที่ แต่สำหรับข้อมูลจากคอลัมน์ยังต้องใช้ DATEVALUE
ใช่ DATEVALUE รองรับ DirectQuery สำหรับ measures และ calculated columns ในทุกโหมด Power BI, Excel, SSAS Tabular, Azure Analysis Services
DATEVALUE ใช้แปลงข้อความที่เป็นวันที่ (text string) ให้เป็นค่า datetime ที่สามารถนำไปใช้ในการคำนวณตามเวลา
ที่เจ๋งของ DATEVALUE คือมันมีฟังก์ชันการยอนหนี้อัจฉริยะ (intelligent fallback) – ถ้าตีความวันที่ตามรูปแบบ locale ไม่สำเร็จ มันจะลองตีความในรูปแบบอื่นเองโดยไม่ error ทำให้ข้อมูลที่ “ไม่บริสุทธิ์” ยังสามารถแปลงได้ สำคัญอย่างไร คือ DATEVALUE มี locale-dependent behavior – “1/8/2009” อาจเป็น January 8 หรือ August 1 ขึ้นอยู่ว่า model ตั้งค่า M/D/Y (US) หรือ D/M/Y (EU)
ส่วนตัวผมคิดว่า DATEVALUE มีประโยชน์สุดเมื่อ import ข้อมูลจากระบบอื่น (CSV, Excel, API) ที่วันที่ถูกเก็บเป็นข้อความ แล้วต้องการให้สามารถคำนวณตามเวลาได้ หรือสร้าง relationship กับ Date Table โดยไม่ต้องไปแก้ไขที่ source 😎