---
title: DATESINPERIOD – สร้างช่วงวันที่แบบเคลื่อนที่ (Rolling Period)
url: https://www.thepexcel.com/functions/dax/time-intelligence/datesinperiod-dax/
type: function-explainer
program: DAX
syntax: "DATESINPERIOD(<Dates>, <StartDate>, <NumberOfIntervals>, <Interval>[, <EndBehavior>])"
date: 2025-12-13
updated: 2025-12-23
scores:
  popularity: 6
  difficulty: 5
  usefulness: 6
---

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

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

## คำอธิบาย

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

## Syntax

```excel
DATESINPERIOD(&lt;Dates&gt;, &lt;StartDate&gt;, &lt;NumberOfIntervals&gt;, &lt;Interval&gt;[, &lt;EndBehavior&gt;])
```

**Variant**

```excel
DATESINPERIOD(&lt;Dates&gt;, &lt;StartDate&gt;, &lt;NumberOfIntervals&gt;, &lt;Interval&gt;)
```

คืนตารางวันที่ในช่วงแบบเคลื่อนที่ตามที่กำหนด

## Arguments

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

## เคสการใช้งาน

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

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

_เหมาะกับ:_ rolling-months

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

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

_เหมาะกับ:_ rolling-days

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ยอดขายย้อนหลัง 3 เดือน (Rolling 3-Month Sales)

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

**ผลลัพธ์:** `ยอดขายรวม 3 เดือนย้อนหลังจากวันล่าสุด (รวมวันนั้นด้วย)`

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

### 2. ตัวอย่างที่ 2: ยอดขาย 14 วันหลังสุด (Rolling 14-Day Sales)

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

**ผลลัพธ์:** `ยอดขายรวม 14 วันล่าสุด`

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

### 3. ตัวอย่างที่ 3: เปรียบเทียบยอดขายปีนี้กับปีที่แล้ว (Prior Year YoY)

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

**ผลลัพธ์:** `ยอดขายปีที่แล้ว (ช่วงเดียวกับปีปัจจุบัน)`

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

### 4. ตัวอย่างที่ 4: ใช้ EndBehavior สำหรับการจับกลุ่มแบบช่วงเต็ม (ENDALIGNED)

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

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

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

## หมายเหตุเพิ่มเติม

- ใช้ MAX('DimDate'[Date]) เป็น StartDate เพื่อให้ช่วงเคลื่อนที่แบบอัตโนมัติตามวันในบริบท

- สำหรับ rolling average ให้รวม DATESINPERIOD กับ AVERAGEX หรือ CALCULATE+SUM+DISTINCTCOUNT

- หากต้องการช่วงเต็ม (เช่น ไตรมาสเต็มเสมอ) ให้ใช้ EndBehavior = ENDALIGNED

- ตรวจสอบว่า date table ได้รับการทำเครื่องหมายและมีข้อมูลวันที่ที่ต่อเนื่องไม่มีช่องว่าง

## คำถามที่พบบ่อย

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

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

**Q: DATESINPERIOD ต่างจาก DATESBETWEEN อย่างไร?**

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

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

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

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

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

**Q: 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

## แหล่งข้อมูลเพิ่มเติม

- [Microsoft Learn: DATESINPERIOD](https://learn.microsoft.com/en-us/dax/datesinperiod-function-dax) _(official)_
- [DAX.guide: DATESINPERIOD](https://dax.guide/datesinperiod/) _(guide)_
- [SQLBI: Time Intelligence Functions](https://www.sqlbi.com/articles/time-intelligence-in-dax/) _(guide)_

---

_Source: [https://www.thepexcel.com/functions/dax/time-intelligence/datesinperiod-dax/](https://www.thepexcel.com/functions/dax/time-intelligence/datesinperiod-dax/)_
