Thep Excel

DATESINPERIODสร้างช่วงวันที่แบบเคลื่อนที่ (Rolling Period)

DATESINPERIOD คืนตารางวันที่แบบเคลื่อนที่ โดยเริ่มจาก StartDate และขยายไปตามจำนวนช่วงและหน่วยที่กำหนด เหมาะกับการทำคำนวณแบบ rolling YTD, rolling average, ย้อนหลัง หรือล่วงหน้าแบบยืดหยุ่น

fx
=DATESINPERIOD(<Dates>, <StartDate>, <NumberOfIntervals>, <Interval>[, <EndBehavior>])

ความนิยม6/10
ความยาก5/10
ประโยชน์6/10

อัปเดต 13 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
Dates column คอลัมน์วันที่จากตารางวันที่ที่มีการทำเครื่องหมาย (marked date table) หรือปฏิทิน
StartDate date/datetime วันอ้างอิงเริ่มต้นของช่วง (มักเป็น MAX(‘DimDate'[Date]) ในบริบทปัจจุบัน) ถ้า BLANK จะใช้ MIN(Dates)
NumberOfIntervals number จำนวนช่วงที่ต้องการ (ค่าติดลบ=ย้อนหลัง, ค่าบวก=ล่วงหน้า)
Interval text หน่วยของช่วง: DAY, WEEK, MONTH, QUARTER, หรือ YEAR
[EndBehavior]ไม่บังคับ enum PRECISE PRECISE (default) = จบบนวันที่กำหนด, ENDALIGNED = จบบนสิ้นสุดของช่วง (เช่นสิ้นสุดเดือน)

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

DATESINPERIOD คืนค่าเป็น ‘ตารางของวันที่’ ในช่วงแบบเคลื่อนที่ โดยเริ่มจาก StartDate แล้วขยายช่วงไปตามจำนวนช่วง (NumberOfIntervals) และหน่วย (Interval) ที่กำหนด เช่น DAY/WEEK/MONTH/QUARTER/YEAR

ที่เจ๋งคือมันคืนตาราง ไม่ใช่ค่าเดียว ดังนั้นใช้กับ CALCULATE เพื่อกรองข้อมูลในช่วงที่ต้องการได้ สะดวกกว่า DATESBETWEEN ตรงที่ไม่ต้องระบุวันจบแบบชัดเจน

ส่วนตัวผมชอบใช้สำหรับคำนวณ YTD, rolling 30-day sales, หรือเปรียบเทียบกับปีที่แล้ว (Prior Year) เพราะค่อยการแสดงนอน ได้อย่างยืดหยุ่น 😎

How it works

ทำยอดย้อนหลัง N เดือน

เช่น ยอดย้อนหลัง 3 เดือนจากวันล่าสุดในบริบท

ทำยอดย้อนหลัง N วัน

เช่น ยอดย้อนหลัง 14 วันเพื่อดูแนวโน้มระยะสั้น

Examples

ตัวอย่างที่ 1: ยอดขายย้อนหลัง 3 เดือน (Rolling 3-Month Sales)Sales Last 3 Months = CALCULATE( SUM(Sales[Amount]), DATESINPERIOD( 'DimDate'[Date], MAX('DimDate'[Date]), -3, MONTH ) )

ใช้ MAX('DimDate'[Date]) เป็นจุดอ้างอิง แล้วกำหนด -3 เพื่อให้เป็นช่วง 3 เดือนย้อนหลัง DATESINPERIOD จะคืนตารางวันที่ 3 เดือนนั้น แล้ว CALCULATE เอามาใช้เป็นตัวกรองให้ SUM

fx
Sales Last 3 Months =
CALCULATE(
SUM(Sales[Amount]),
DATESINPERIOD(
'DimDate'[Date],
MAX('DimDate'[Date]),
-3,
MONTH
)
)

ผลลัพธ์ยอดขายรวม 3 เดือนย้อนหลังจากวันล่าสุด (รวมวันนั้นด้วย)
ตัวอย่างที่ 2: ยอดขาย 14 วันหลังสุด (Rolling 14-Day Sales)Sales Last 14 Days = CALCULATE( SUM(Sales[Amount]), DATESINPERIOD( 'DimDate'[Date], MAX('DimDate'[Date]), -14, DAY ) )

เหมาะกับการดูแนวโน้มระยะสั้น (Short-term trend) ของยอดขาย ใช้ DAY แทน MONTH เพื่อความละเอียดมากขึ้น

fx
Sales Last 14 Days =
CALCULATE(
SUM(Sales[Amount]),
DATESINPERIOD(
'DimDate'[Date],
MAX('DimDate'[Date]),
-14,
DAY
)
)

ผลลัพธ์ยอดขายรวม 14 วันล่าสุด
ตัวอย่างที่ 3: เปรียบเทียบยอดขายปีนี้กับปีที่แล้ว (Prior Year YoY)Revenue Prior Year = CALCULATE( SUM(Sales[Amount]), DATESINPERIOD( 'DimDate'[Date], MAX('DimDate'[Date]), -1, YEAR ) )

ด้วย -1 YEAR DATESINPERIOD จะเลื่อนกลับไปปีก่อนหน้า โดยปกติหากกรองข้อมูล 2025 DATESINPERIOD จะคืนข้อมูล 2024 ที่ตรงกับช่วงเดียวกัน

fx
Revenue Prior Year =
CALCULATE(
SUM(Sales[Amount]),
DATESINPERIOD(
'DimDate'[Date],
MAX('DimDate'[Date]),
-1,
YEAR
)
)

ผลลัพธ์ยอดขายปีที่แล้ว (ช่วงเดียวกับปีปัจจุบัน)
ตัวอย่างที่ 4: ใช้ EndBehavior สำหรับการจับกลุ่มแบบช่วงเต็ม (ENDALIGNED)Revenue This Quarter (Full) = CALCULATE( SUM(Sales[Amount]), DATESINPERIOD( 'DimDate'[Date], MAX('DimDate'[Date]), -1, QUARTER, ENDALIGNED ) )

ENDALIGNED ทำให้ช่วงวันที่จบลงในตำแหน่งที่ 'เหมาะสม' เช่น สิ้นสุดไตรมาส เหมาะสำหรับรายงานแบบ fiscal period

fx
=Revenue This Quarter (Full) =
CALCULATE(
SUM(Sales[Amount]),
DATESINPERIOD(
'DimDate'[Date],
MAX('DimDate'[Date]),
-1,
QUARTER,
ENDALIGNED
)
)

ผลลัพธ์ยอดขายไตรมาสเต็ม โดยปลายสุดจะมีเพียง 30, 31 มกราคม ฯลฯ ขึ้นอยู่กับขอบเขตไตรมาส

FAQs

ค่าติดลบและค่าบวกของ NumberOfIntervals ต่างกันอย่างไร?+

ค่าติดลบ (เช่น -3) หมายถึงย้อนหลังจาก StartDate ส่วนค่าบวก (เช่น +3) หมายถึงล่วงหน้าไปจาก StartDate ตัวอย่าง: -3 MONTH จาก 2025-12-31 จะได้ข้อมูล 2025-10-01 ถึง 2025-12-31

DATESINPERIOD ต่างจาก DATESBETWEEN อย่างไร?+

DATESBETWEEN ต้องระบุวันเริ่มและวันจบแบบชัดเจน: DATESBETWEEN(Dates, StartDate, EndDate) ส่วน DATESINPERIOD ใช้จำนวนช่วง + หน่วยแทน: DATESINPERIOD(Dates, StartDate, NumberOfIntervals, Interval) DATESINPERIOD ยืดหยุ่นมากกว่าสำหรับการคำนวณแบบ rolling

ถ้า StartDate เป็น BLANK จะเกิดอะไร?+

DATESINPERIOD จะใช้ MIN(Dates) เป็นค่า StartDate แทน อาจไม่ได้ผลลัพธ์ที่คาดหวัง ดังนั้นแนะนำให้ระบุ StartDate ชัดเจน เช่น MAX('DimDate'[Date])

DATESINPERIOD ใช้ได้กับ DirectQuery หรือไม่?+

ไม่แนะนำใช้กับ DirectQuery mode สำหรับ RLS rules หรือ Calculated Columns อาจมีปัญหาประสิทธิภาพ ควรใช้ Import mode หรือ Aggregations

PRECISE กับ ENDALIGNED ต่างกันอย่างไร?+

PRECISE (default): ช่วงจบลงบนวันที่ StartDate ตรงๆ เช่น -1 QUARTER จาก 2025-12-25 = 2025-09-26 ถึง 2025-12-25 | ENDALIGNED: ช่วงจบลงที่ปลายสุดของช่วงที่กำหนด เช่น -1 QUARTER จาก 2025-12-25 = 2025-09-30 ถึง 2025-12-31

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ DATESINPERIOD จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้DATESINPERIODTime Intelligence
Time Intelligence (7)
DATEADD

DATEADD คืนค่าตารางวันที่ ที่ถูกเลื่อนออกไปจากช่วงวันที่ใน Context ปัจจุบัน ตามจำนวน (NumberOfIntervals) และหน่วย (Interval) ที่กำหนด เช่น เลื่อนย้อนหลัง 1 เดือน หรือเลื่อนไปข้างหน้า 1 ปี

DATESBETWEEN

DATESBETWEEN คืนตารางวันที่ที่อยู่ระหว่าง StartDate และ EndDate (รวมวันเริ่ม/วันจบ) เหมาะกับการใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อคำนวณตามช่วงวันที่ที่กำหนดเอง

DATESMTD

DATESMTD คืนตารางวันที่ของช่วงตั้งแต่ต้นเดือนถึงวันที่ล่าสุดใน filter context เหมาะกับการทำยอดสะสมตั้งแต่ต้นเดือน (MTD) โดยใช้ร่วมกับ CALCULATE และควรใช้คู่กับ ShowValueForDates pattern เพื่อไม่ให้แสดงค่าในวันที่ยังไม่มีข้อมูล

DATESYTD

DATESYTD คืนตารางวันที่ของช่วงตั้งแต่ต้นปีถึงวันที่สุดท้ายที่มองเห็นใน Filter Context ใช้เป็นตัวกรองเวลาใน CALCULATE สำหรับการคำนวณยอดสะสมตั้งแต่ต้นปี รองรับทั้งปีปฏิทินและปีบัญชี (Fiscal Year) ด้วย YearEndDate argument

ENDOFQUARTER

ENDOFQUARTER คืนตารางวันที่ของวันสิ้นไตรมาสตามบริบทวันที่ปัจจุบัน เหมาะกับการใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อประเมินมาตรวัด ณ วันสิ้นไตรมาส

NEXTMONTH

NEXTMONTH คืนตารางวันที่ของเดือนถัดไปจากบริบทวันที่ปัจจุบัน มักใช้เป็นตารางตัวกรองใน CALCULATE เพื่อคำนวณค่าแบบ “เดือนถัดไป” ตามช่วงวันที่ที่ถูกเลือก/กรอง

PARALLELPERIOD

PARALLELPERIOD คืนตารางวันที่ที่ขนานกับช่วงเวลาปัจจุบัน แต่เลื่อนไปข้างหน้าหรือย้อนหลัง และขยายขอบเขตให้ครอบคลุมทั้งหน่วยเวลาที่ระบุ (MONTH/QUARTER/YEAR) เสมอ เหมาะกับการเทียบยอดรวมทั้งเดือน/ไตรมาส/ปี

Filter (1)
CALCULATE

CALCULATE เป็นฟังก์ชันหลักที่สำคัญที่สุดใน DAX ใช้สำหรับ evaluate expression ภายใต้ filter context ที่ถูกปรับเปลี่ยน สามารถเพิ่มตัวกรองใหม่ ลบตัวกรองเดิม หรือแทนที่ filter ที่มีอยู่ได้ รองรับทั้ง Boolean expression และ table expression เป็น filter arguments พร้อม filter modifier functions เช่น REMOVEFILTERS, ALL, ALLEXCEPT, KEEPFILTERS เพื่อควบคุมการกรองอย่างละเอียด มีพฤติกรรมพิเศษคือ context transition ที่เปลี่ยน row context เป็น filter context โดยอัตโนมัติ ทำให้เป็นเครื่องมือหลักในการสร้าง measure ที่ซับซ้อนและ calculated column ที่ต้องใช้ aggregation

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่