DATESBETWEEN คืนตารางวันที่ที่อยู่ระหว่าง StartDate และ EndDate (รวมวันเริ่ม/วันจบ) เหมาะกับการใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อคำนวณตามช่วงวันที่ที่กำหนดเอง
=DATESBETWEEN(<Dates>, <StartDate>, <EndDate>)
=DATESBETWEEN(<Dates>, <StartDate>, <EndDate>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Dates | column | Yes | คอลัมน์วันที่จากตารางวันที่/ปฏิทิน ต้องเป็นคอลัมน์ที่มีข้อมูลวันที่ต่อเนื่องจริง | |
| StartDate | date/datetime/expression | Yes | วันเริ่มต้นของช่วง (รวมในผลลัพธ์) สามารถเป็นค่า DATE, วันที่จากตัวแปร หรือ BLANK() ถ้า BLANK จะใช้วันที่แรกสุดในคอลัมน์ Dates | |
| EndDate | date/datetime/expression | Yes | วันสิ้นสุดของช่วง (รวมในผลลัพธ์) สามารถเป็นค่า DATE, วันที่จากตัวแปร หรือ BLANK() ถ้า BLANK จะใช้วันที่สุดท้ายในคอลัมน์ Dates |
เช่น ช่วงโปรโมชั่นหรือแคมเปญ
เช่น สะสมยอดตั้งแต่วันเริ่มต้นที่กำหนดจนถึงวันนี้
Sales (Campaign) = CALCULATE( [Sales Amount], DATESBETWEEN( 'DimDate'[Date], DATE(2025, 11, 1), DATE(2025, 11, 30) ) )=Sales (Campaign) =
CALCULATE(
[Sales Amount],
DATESBETWEEN(
'DimDate'[Date],
DATE(2025, 11, 1),
DATE(2025, 11, 30)
)
)
ยอดขายในช่วง 1–30 พ.ย. 2025 เฉพาะ
Sales (Since Launch) = CALCULATE( [Sales Amount], DATESBETWEEN( 'DimDate'[Date], DATE(2025, 1, 15), TODAY() ) )=Sales (Since Launch) =
CALCULATE(
[Sales Amount],
DATESBETWEEN(
'DimDate'[Date],
DATE(2025, 1, 15),
TODAY()
)
)
ยอดขายสะสมตั้งแต่ 15 ม.ค. 2025 ถึงวันนี้
Sales (Cumulative) = CALCULATE( [Sales Amount], DATESBETWEEN( 'DimDate'[Date], BLANK(), MAX('DimDate'[Date]) ) )=Sales (Cumulative) =
CALCULATE(
[Sales Amount],
DATESBETWEEN(
'DimDate'[Date],
BLANK(),
MAX('DimDate'[Date])
)
)
ยอดขายสะสมตั้งแต่วันแรกของข้อมูลจนถึงวันล่าสุด
Custom Dates = DATESBETWEEN( 'DimDate'[Date], DATE(2025, 6, 1), DATE(2025, 6, 15) )Custom Dates =
DATESBETWEEN(
'DimDate'[Date],
DATE(2025, 6, 1),
DATE(2025, 6, 15)
)
ตารางวันที่ของช่วง 1–15 มิ.ย. 2025 (15 แถว)
คืนค่าเป็นตารางของวันที่ (Table) จึงมักใช้เป็นตัวกรองภายใน CALCULATE เพื่อให้มาตรวัด (Measure) คืนค่าสเกลาร์ ไม่ใช่ตารางสำเร็จรูป
ควรใช้คอลัมน์วันที่จากตารางวันที่ที่ต่อเนื่องและกำหนดเป็นตารางวันที่ของโมเดล (Date Table) เพื่อให้ผลการคำนวณช่วงเวลาถูกต้องและมีประสิทธิภาพ
DATESBETWEEN ยังคงรวมวันเหล่านั้นในตารางผลลัพธ์ แม้ว่าอาจไม่มีข้อมูลการขาย หากต้องการรวมเฉพาะวันที่มีข้อมูล อาจต้องใช้ FILTER ร่วมกับ DATESBETWEEN
DATESBETWEEN ใช้กับช่วงวันที่ที่กำหนดตายตัว (Fixed) เช่น 1-30 พ.ย. ส่วน DATESINPERIOD เหมาะกับช่วง Relative หรือ Offset เช่น ย้อนหลัง 3 เดือนจากวันปัจจุบัน
DATESBETWEEN ใช้สร้าง ‘ตารางของวันที่’ ในช่วงที่กำหนด โดยระบุวันเริ่มต้น (StartDate) และวันสิ้นสุด (EndDate) แล้วคืนวันที่ทั้งหมดที่อยู่ในช่วงนั้น (รวมวันเริ่มและวันจบ)
สิ่งที่เจ๋งของ DATESBETWEEN คือมันช่วยให้เราสร้างตัวกรองเวลาแบบยืดหยุ่น ไม่ต้องพึ่งพาช่วง Fixed Time Intelligence ที่มีอยู่แล้ว ใช้งานได้กับช่วงแคมเปญ, ช่วงสะสมตั้งแต่วันเริ่มโครงการ, หรือช่วงการวิเคราะห์แบบ Custom ได้
ส่วนตัวผม ถ้าต้องทำ Life-to-Date (ยอดสะสมตั้งแต่แรกจนถึงปัจจุบัน) มักใช้ DATESBETWEEN กับ BLANK() และ TODAY() จึงสะดวกและอ่านเข้าใจง่ายมาก 😎