---
title: DATESMTD – ชุดวันที่ตั้งแต่ต้นเดือนถึงปัจจุบัน (MTD)
url: https://www.thepexcel.com/functions/dax/time-intelligence/datesmtd-dax/
type: function-explainer
program: DAX
syntax: "DATESMTD(<Dates>)"
date: 2025-12-13
updated: 2025-12-20
scores:
  popularity: 5
  difficulty: 4
  usefulness: 6
---

# DATESMTD – ชุดวันที่ตั้งแต่ต้นเดือนถึงปัจจุบัน (MTD)

> คืนชุดวันที่ตั้งแต่ต้นเดือนถึงวันที่ล่าสุดใน filter context เพื่อคำนวณยอด MTD

## คำอธิบาย

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

## Syntax

```excel
DATESMTD(&lt;Dates&gt;)
```

**Variant**

```excel
DATESMTD(&lt;Dates&gt;)
```

รูปแบบพื้นฐาน - คืนตารางวันที่ตั้งแต่ต้นเดือนถึงวันที่ล่าสุดใน filter context

**Variant**

```excel
CALCULATE(&lt;Expression&gt;, DATESMTD(&lt;Dates&gt;))
```

ใช้เป็น filter argument ใน CALCULATE เพื่อคำนวณยอด MTD

**Variant**

```excel
IF([ShowValueForDates], CALCULATE(&lt;Expression&gt;, DATESMTD(&lt;Dates&gt;)))
```

รูปแบบที่แนะนำ - รวม ShowValueForDates pattern เพื่อไม่แสดงค่าในวันที่ยังไม่มีข้อมูล

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| Dates | Yes | column |  | คอลัมน์วันที่จากตารางวันที่ (Date table) ที่ถูก mark เป็น Date table แล้ว ต้องเป็นคอลัมน์ที่มีวันที่ครบถ้วนตั้งแต่ 1 ม.ค. ถึง 31 ธ.ค. ของทุกปีที่มีข้อมูล |

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

### คำนวณยอดขายสะสมตั้งแต่ต้นเดือน

ใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อให้ Measure คำนวณเฉพาะช่วง MTD สำหรับติดตามเป้าหมายรายเดือน

_เหมาะกับ:_ mtd-sales

### เปรียบเทียบ MTD กับ MTD เดือนก่อน

ใช้ร่วมกับ DATEADD เพื่อเปรียบเทียบยอด MTD ปัจจุบันกับยอด MTD ของเดือนก่อนหน้า

_เหมาะกับ:_ mtd-comparison

### ติดตาม KPI รายเดือน

เช่น จำนวนออเดอร์สะสม หรือจำนวนลูกค้าใหม่สะสมตั้งแต่ต้นเดือน เพื่อดูความคืบหน้าระหว่างเดือน

_เหมาะกับ:_ monthly-kpi

### สร้างยอดสะสมรายเดือนที่ซ่อนวันที่ในอนาคต

ใช้ร่วมกับ ShowValueForDates pattern เพื่อไม่แสดงค่าในวันที่ที่ยังไม่มีข้อมูลจริง

_เหมาะกับ:_ mtd-with-showvalue

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ยอดขายสะสมตั้งแต่ต้นเดือน (พื้นฐาน)

```excel
Sales MTD =
CALCULATE(
    [Sales Amount],
    DATESMTD('Date'[Date])
)
```

**ผลลัพธ์:** `ถ้าวันที่ใน filter context คือ 15 มิ.ย. 2024 จะคืนยอดขายรวมตั้งแต่ 1-15 มิ.ย. 2024`

DATESMTD สร้างตารางวันที่ตั้งแต่วันที่ 1 ของเดือนจนถึงวันที่ล่าสุดใน filter context แล้ว CALCULATE ใช้ตารางนี้เป็นตัวกรองเพื่อคำนวณ Sales Amount เฉพาะช่วงนั้น ถ้าเลือกวันที่ 15 มิ.ย. ก็จะได้ยอดรวม 15 วันแรกของเดือน

### 2. ตัวอย่างที่ 2: Sales MTD พร้อม ShowValueForDates Pattern

```excel
-- Measure ช่วยเช็ควันที่มีข้อมูล (ซ่อนไว้)
ShowValueForDates =
VAR LastDateWithData =
    CALCULATE(
        MAX(Sales[OrderDate]),
        REMOVEFILTERS()
    )
VAR FirstDateVisible = MIN('Date'[Date])
RETURN
    FirstDateVisible <= LastDateWithData

-- Measure หลักที่ใช้แสดงผล
Sales MTD =
IF(
    [ShowValueForDates],
    CALCULATE(
        [Sales Amount],
        DATESMTD('Date'[Date])
    )
)
```

**ผลลัพธ์:** `แสดงยอด MTD เฉพาะวันที่มีข้อมูลจริง วันที่ในอนาคตจะแสดงเป็น BLANK`

ShowValueForDates ตรวจสอบว่าวันที่แรกที่มองเห็นใน filter context อยู่ก่อนหรือเท่ากับวันที่มีข้อมูลล่าสุดหรือไม่ ถ้าใช่จึงคำนวณ MTD ถ้าไม่ใช่จะคืน BLANK Pattern นี้มาจาก DAXPatterns.com ซึ่งช่วยให้รายงานดูเป็นมืออาชีพมากขึ้นครับ 💡

### 3. ตัวอย่างที่ 3: เปรียบเทียบ MTD vs Previous MTD

```excel
-- MTD ปัจจุบัน
Sales MTD =
CALCULATE(
    [Sales Amount],
    DATESMTD('Date'[Date])
)

-- MTD เดือนก่อน (PMTD)
Sales PMTD =
CALCULATE(
    [Sales MTD],
    DATEADD('Date'[Date], -1, MONTH)
)
```

**ผลลัพธ์:** `ถ้าวันที่ปัจจุบันคือ 15 มิ.ย. 2024 - Sales MTD = ยอด 1-15 มิ.ย. 2024 และ Sales PMTD = ยอด 1-15 พ.ค. 2024`

ที่เจ๋งคือ DATEADD shift วันที่กลับไป 1 เดือน แต่ยังคง range เดิมไว้ ทำให้เปรียบเทียบได้ยุติธรรม เช่น ถ้าเดือนนี้มีข้อมูลแค่ 15 วัน ก็จะเทียบกับ 15 วันแรกของเดือนก่อนเท่านั้น ไม่ใช่เทียบกับทั้งเดือน 😎

### 4. ตัวอย่างที่ 4: คำนวณ MTD Growth %

```excel
MTD Growth % =
VAR CurrentMTD = [Sales MTD]
VAR PreviousMTD = [Sales PMTD]
VAR Growth =
    DIVIDE(
        CurrentMTD - PreviousMTD,
        PreviousMTD,
        BLANK()
    )
RETURN
    Growth
```

**ผลลัพธ์:** `ถ้า Sales MTD = 150,000 และ Sales PMTD = 120,000 จะได้ 25% (เพิ่มขึ้น 25%)`

ใช้ VAR เก็บค่า MTD ปัจจุบันและเดือนก่อน แล้วคำนวณ % การเติบโต DIVIDE ช่วยจัดการกรณีหารด้วยศูนย์โดยคืน BLANK แทน Error ส่วนตัวผมชอบใช้ pattern นี้มากเพราะอ่านง่ายและแก้ไขง่ายครับ

### 5. ตัวอย่างที่ 5: MTD กับ Fiscal Calendar

```excel
Sales MTD Fiscal =
CALCULATE(
    [Sales Amount],
    DATESMTD(FiscalCalendar)
)
```

**ผลลัพธ์:** `คำนวณยอด MTD ตาม Fiscal Calendar ที่กำหนด`

DATESMTD รองรับ Calendar reference (ไม่ใช่แค่ Date column) ทำให้สามารถใช้กับ Fiscal Calendar ที่เริ่มเดือนไม่ตรงกับปฏิทินปกติได้ เช่น ปีงบประมาณที่เริ่ม 1 ตุลาคม

### 6. ตัวอย่างที่ 6: ใช้ DATESMTD เพื่อดูตารางวันที่ (Debug)

```excel
MTD Dates Debug =
DATESMTD('Date'[Date])
```

**ผลลัพธ์:** `ได้ตารางวันที่ในช่วง MTD เพื่อตรวจสอบว่า filter ทำงานถูกต้อง`

เนื่องจาก DATESMTD คืนค่าเป็นตาราง จึงใช้ดูว่าช่วงวันที่ที่ถูกเลือกคืออะไรได้ ซึ่งมีประโยชน์ตอน debug หรือตรวจสอบว่า filter context ทำงานตามที่คาดไว้หรือไม่

### 7. ตัวอย่างที่ 7: Running Total ภายในเดือน

```excel
Daily Running Total (Month) =
CALCULATE(
    [Sales Amount],
    DATESMTD('Date'[Date])
)
```

**ผลลัพธ์:** `แต่ละวันจะแสดงยอดสะสมตั้งแต่ต้นเดือนจนถึงวันนั้นๆ`

เมื่อใช้ใน Matrix หรือ Table ที่มี Date อยู่ใน row แต่ละแถวจะแสดงยอดสะสมตั้งแต่ต้นเดือนถึงวันที่ในแถวนั้น ซึ่งเป็น Running Total ที่ reset ทุกต้นเดือน Pattern นี้มีประโยชน์มากสำหรับการติดตามเป้าหมายรายเดือนครับ 💡

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

💡 **Tip สำคัญ:**
.
DATESMTD ต้องใช้กับ Date table ที่มีวันที่ครบถ้วน (ทุกวันตั้งแต่ 1 ม.ค. ถึง 31 ธ.ค.) และต้อง Mark as Date Table ใน Power BI แล้ว
.
ถ้าต้องการช่วงสะสมอื่นๆ ให้ดู DATESWTD (สัปดาห์), DATESQTD (ไตรมาส), DATESYTD (ปี)
.
สำหรับการใช้งานจริง ส่วนตัวผมแนะนำให้ใช้ ShowValueForDates pattern เสมอ เพื่อไม่ให้แสดงค่าในวันที่ยังไม่มีข้อมูลครับ 😎

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

**Q: DATESMTD คืนค่าเป็นตารางหรือค่าสเกลาร์?**

คืนค่าเป็นตารางของวันที่ (Table) จึงมักใช้เป็นตัวกรองภายใน CALCULATE เพื่อให้ได้ค่าสเกลาร์จาก Measure ถ้าใช้เดี่ยวๆ จะได้ตารางที่มีคอลัมน์เดียวคือวันที่ในช่วง MTD

**Q: ทำไม DATESMTD แล้วได้ค่า BLANK?**

ปัญหานี้เจอบ่อยครับ 😅 สาเหตุหลักๆ คือ: 1) ตาราง Date ไม่ได้ถูก mark เป็น Date table 2) คอลัมน์วันที่มีวันที่ไม่ต่อเนื่อง (ต้องมีทุกวันตั้งแต่ 1 ม.ค. ถึง 31 ธ.ค.) 3) มี relationship ไม่ถูกต้องระหว่าง Date table กับ Fact table

**Q: DATESMTD ต่างจาก TOTALMTD อย่างไร?**

DATESMTD คืนตารางวันที่ ส่วน TOTALMTD คืนค่าผลลัพธ์เลย ใช้ DATESMTD เมื่อต้องการความยืดหยุ่นมากกว่า เช่น ใช้ร่วมกับ IF หรือ filter อื่นๆ ใน CALCULATE ส่วน TOTALMTD เหมาะกับการใช้งานง่ายๆ ที่ต้องการผลลัพธ์ตรงๆ

**Q: ทำไมต้องใช้ ShowValueForDates pattern?**

เพื่อไม่ให้แสดงค่าในวันที่ที่ยังไม่มีข้อมูลจริง เช่น ถ้าวันนี้คือ 15 มิ.ย. แต่รายงานแสดงทั้งเดือน วันที่ 16-30 ยังไม่มีข้อมูล ถ้าไม่ใช้ pattern นี้อาจแสดงค่า 0 หรือค่าผิดพลาด ซึ่งทำให้รายงานดูไม่เป็นมืออาชีพครับ

**Q: เปรียบเทียบ MTD vs Previous MTD ต้องใช้ DATEADD หรือ PARALLELPERIOD?**

ใช้ DATEADD ครับ เพราะ DATEADD จะ shift วันที่แบบ day-by-day ทำให้ช่วงวันที่ตรงกัน เช่น 1-15 มิ.ย. เทียบกับ 1-15 พ.ค. ส่วน PARALLELPERIOD จะคืนทั้งเดือนก่อนหน้า ซึ่งไม่เหมาะกับการเปรียบเทียบ MTD vs PMTD

**Q: DATESMTD ใช้กับ DirectQuery ได้ไหม?**

ได้ครับ แต่มีข้อจำกัด: ไม่รองรับใน calculated columns หรือ Row-Level Security (RLS) rules ใน DirectQuery mode ใช้ได้เฉพาะใน Measures และ Calculated tables

## ฟังก์ชันที่เกี่ยวข้อง

- [CALCULATE – ฟังก์ชันหลักของ DAX ที่ควบคุม Filter Context](https://www.thepexcel.com/functions/dax/filter/calculate-dax/)
- [TOTALMTD – ยอดสะสมตั้งแต่ต้นเดือน (MTD)](https://www.thepexcel.com/functions/dax/time-intelligence/totalmtd-dax/)
- [DATESQTD – ชุดวันที่ตั้งแต่ต้นไตรมาสถึงปัจจุบัน (QTD)](https://www.thepexcel.com/functions/dax/time-intelligence/datesqtd-dax/)
- [DATESWTD – ฟังก์ชันหาช่วงวันที่ตั้งแต่ต้นสัปดาห์ (Week-to-Date)](https://www.thepexcel.com/functions/dax/time-intelligence/dateswtd-dax/)
- [DATESYTD – ชุดวันที่ตั้งแต่ต้นปี (YTD) เพื่อใช้เป็นตัวกรองเวลา](https://www.thepexcel.com/functions/dax/time-intelligence/datesytd-dax/)
- [DATEADD – เลื่อนช่วงเวลาไปข้างหน้าหรือย้อนหลัง (Shift Dates)](https://www.thepexcel.com/functions/dax/time-intelligence/dateadd-dax/)
- [SAMEPERIODLASTYEAR – คืนช่วงเวลาเดียวกันของปีก่อนหน้า (Year-over-Year)](https://www.thepexcel.com/functions/dax/time-intelligence/sameperiodlastyear-dax/)
- [PARALLELPERIOD – เลื่อนช่วงเวลาแบบเต็มเดือน/ไตรมาส/ปี (Full Period Shift)](https://www.thepexcel.com/functions/dax/time-intelligence/parallelperiod-dax/)
- [DATESBETWEEN – สร้างช่วงวันที่ระหว่างวันเริ่มและวันสิ้นสุด](https://www.thepexcel.com/functions/dax/time-intelligence/datesbetween-dax/)
- [STARTOFMONTH – วันแรกของเดือนในบริบทปัจจุบัน](https://www.thepexcel.com/functions/dax/time-intelligence/startofmonth-dax/)
- [ENDOFMONTH – หาวันสิ้นเดือนสำหรับ Time Intelligence](https://www.thepexcel.com/functions/dax/time-intelligence/endofmonth-dax/)
- [LASTDATE – วันที่สุดท้ายในบริบทตัวกรองปัจจุบัน](https://www.thepexcel.com/functions/dax/time-intelligence/lastdate-dax/)

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

- [DAX Guide: DATESMTD](https://dax.guide/datesmtd/) _(documentation)_
- [Microsoft Learn: DATESMTD function](https://learn.microsoft.com/en-us/dax/datesmtd-function-dax) _(documentation)_
- [DAXPatterns: Standard Time-Related Calculations](https://www.daxpatterns.com/standard-time-related-calculations/) _(guide)_
- [SQLBI: Computing MTD, QTD, YTD for the Current Period](https://www.sqlbi.com/articles/computing-mtd-qtd-ytd-in-power-bi-for-the-current-period/) _(guide)_
- [RADACAD: Previous MTD, QTD, YTD Calculations](https://radacad.com/power-bi-dax-previous-month-to-date-quarter-to-date-and-year-to-date-calculations/) _(guide)_

---

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