---
title: MONTH (DAX) – ดึงเลขเดือนจากค่า datetime
url: https://www.thepexcel.com/functions/dax/date-and-time/month-dax/
type: function-explainer
program: DAX
syntax: "MONTH(<Date>)"
date: 2025-12-18
scores:
  popularity: 9
  difficulty: 2
  usefulness: 9
---

# MONTH (DAX) – ดึงเลขเดือนจากค่า datetime

> ดึงเลขเดือน 1-12 จากค่า datetime ตาม Gregorian calendar

## คำอธิบาย

MONTH ดึงเลขเดือน (integer 1-12) จากค่า datetime โดยรับ input เป็น datetime value, column reference, หรือ text representation ของวันที่ และคืนค่าตั้งแต่ 1 (มกราคม) ถึง 12 (ธันวาคม) ตาม Gregorian calendar ใช้สร้าง calculated column ใน Date table เพื่อเป็น sort column สำหรับชื่อเดือน และใช้ใน measure เพื่อสร้าง conditional logic กับ custom time intelligence calculations

## Syntax

```excel
MONTH(&lt;Date&gt;)
```

**Variant**

```excel
MONTH(&lt;Date&gt;)
```

รูปแบบพื้นฐาน - รับค่า datetime เดียวและคืนเลขเดือน

**Variant**

```excel
MONTH(Table[DateColumn])
```

Column reference ใน calculated column - ทำงานใน row context

**Variant**

```excel
MONTH(TODAY())
```

ใช้กับ expression ที่คืนค่าเป็น datetime (TODAY, NOW, DATE)

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| Date | Yes | datetime |  | ค่า datetime ที่ต้องการ extract เลขเดือน รับได้ทั้ง datetime value, column reference (Table[Column]), หรือ expression ที่คืนค่าเป็น datetime (เช่น TODAY(), DATE(2024,3,15)) สามารถใช้ text representation ได้แต่ต้องระวังเรื่อง locale settings (M/D/Y vs D/M/Y) ที่อาจทำให้การแปลงให้ผลต่างกัน ทำงานใน row context เมื่อใช้กับ column reference |

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

### Date Table Enhancement

สร้าง Month Number column ใน Date table เพื่อใช้เป็น sort column สำหรับ Month Name และใช้ใน slicer/filter

_เหมาะกับ:_ date-table-calculated-column

### Seasonal Business Logic

สร้าง measure ที่มี conditional calculation ตามเดือน เช่น seasonal pricing, monthly targets, promotion periods

_เหมาะกับ:_ conditional-measure

### Custom Time Intelligence

ใช้ประกอบการสร้าง MTD, same month last year, หรือ month-over-month measures แบบ custom logic

_เหมาะกับ:_ time-intelligence

### Month-Based Aggregation

จัดกลุ่มและรวมข้อมูลตามเดือนโดยไม่ขึ้นกับปี เพื่อวิเคราะห์ seasonal patterns ของธุรกิจ

_เหมาะกับ:_ month-grouping

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: Month Number Column (Calculated Column พื้นฐาน)

```excel
Month Number = 
MONTH('Date'[Date])
```

**ผลลัพธ์:** `วันที่ 2024-01-15 → คืนค่า 1, วันที่ 2024-03-20 → คืนค่า 3, วันที่ 2024-12-31 → คืนค่า 12`

สร้าง calculated column ในตาราง Date โดยใช้ MONTH เพื่อดึงเลขเดือนจากคอลัมน์ Date
.
**Context:** Date table มีคอลัมน์ Date เป็น datetime
.
**การทำงาน:** ทำงานใน row context (คำนวณทีละแถว) โดย MONTH อ่านค่าจาก Date[Date] ของแต่ละ row และคืนเลขเดือน
.
**ผลลัพธ์:** คอลัมน์ใหม่ที่มีค่า 1-12 สำหรับทุกวันที่ใน Date table
.
**การใช้งาน:**
• ใช้เป็น sort column สำหรับคอลัมน์ชื่อเดือน เพื่อให้ sort ตามลำดับเวลาไม่ใช่ตามตัวอักษร 😎
• ใช้ใน slicer/filter เพื่อให้ user เลือกเดือนได้
• ใช้ใน visual axis เพื่อ group ข้อมูลตามเดือน
.
ส่วนตัวผมทำแบบนี้ทุก Date table เลยครับ ประหยัดเวลาแก้ปัญหาชื่อเดือน sort ผิดทีหลัง 😅

### 2. ตัวอย่างที่ 2: Quarterly Sales Filter (CALCULATE + MONTH)

```excel
Q1 Sales = 
CALCULATE(
    SUM(Sales[Amount]),
    MONTH('Date'[Date]) >= 1,
    MONTH('Date'[Date]) <= 3
)
```

**ผลลัพธ์:** `ถ้ามียอดขาย Jan=150K, Feb=160K, Mar=140K, Apr=180K → คืนค่า 450,000 (รวมเฉพาะ Q1)`

ใช้ MONTH ภายใน CALCULATE เพื่อ filter ยอดขายเฉพาะ quarter แรก (มกราคม-มีนาคม)
.
**Context:** Sales table มีคอลัมน์ Amount และมี relationship กับ Date table ผ่าน Date column
.
**การทำงาน:**
1. CALCULATE เปลี่ยน filter context โดยเพิ่ม filter condition
2. MONTH('Date'[Date]) >= 1 AND

### 3. ตัวอย่างที่ 3: Seasonal Discount (SWITCH + MONTH)

```excel
Seasonal Discount = 
VAR CurrentMonth = MONTH(TODAY())
RETURN
    SWITCH(
        CurrentMonth,
        12, 0.15,  -- ธ.ค. ลด 15%
        1, 0.10,   -- ม.ค. ลด 10%
        2, 0.10,   -- ก.พ. ลด 10%
        0.05       -- เดือนอื่นๆ ลด 5%
    )
```

**ผลลัพธ์:** `เดือนธันวาคม → 0.15 (15%), มกราคม-กุมภาพันธ์ → 0.10 (10%), เดือนอื่นๆ → 0.05 (5%)`

สร้าง seasonal discount measure โดยใช้ VAR + SWITCH + MONTH เพื่อกำหนด discount rate ที่แตกต่างกันตามเดือน
.
**Context:** ไม่ต้องอ้างถึง table ใดๆ เพราะใช้ TODAY() ดึงวันที่ปัจจุบัน
.
**การทำงาน:**
1. VAR CurrentMonth = MONTH(TODAY()) เก็บเลขเดือนปัจจุบัน
2. SWITCH รับ CurrentMonth เป็น input แล้วคืนค่า discount ตามเงื่อนไข
3. ค่า default (0.05) ใช้กับเดือนที่ไม่ได้ระบุไว้ (3-11)
.
**ผลลัพธ์:** Measure ที่คืนค่า discount rate ตามเดือนที่ใช้งาน report
.
💡 **การใช้งาน:** เหมาะสำหรับ seasonal business rules เช่น high season pricing, holiday promotions, quarterly campaigns - สามารถนำไปคูณกับราคาเพื่อคำนวณราคาหลัง discount
.
ส่วนตัวผมใช้ pattern นี้บ่อยมากครับ โดยเฉพาะธุรกิจที่มี seasonal fluctuation เช่น ร้านอาหาร (high season ท่องเที่ยว) หรือ retail (ช่วงเทศกาล) 😎

### 4. ตัวอย่างที่ 4: Custom Month-to-Date (CALCULATE + FILTER + MONTH + YEAR)

```excel
MTD Sales = 
VAR CurrentDate = MAX('Date'[Date])
VAR CurrentMonth = MONTH(CurrentDate)
VAR CurrentYear = YEAR(CurrentDate)
RETURN
    CALCULATE(
        SUM(Sales[Amount]),
        FILTER(
            ALL('Date'),
            MONTH('Date'[Date]) = CurrentMonth &&
            YEAR('Date'[Date]) = CurrentYear &&
            'Date'[Date] <= CurrentDate
        )
    )
```

**ผลลัพธ์:** `ถ้าวันนี้ 2024-03-15 และมียอดขาย 1-15 มี.ค. รวม 125,000 → คืนค่า 125,000`

สร้าง custom month-to-date measure โดยใช้ MONTH และ YEAR ประกอบกับ CALCULATE + FILTER
.
**Context:** Sales table มี Amount และ relationship กับ Date table
.
**การทำงาน:**
1. VAR CurrentDate = MAX('Date'[Date]) → ดึงวันที่ล่าสุดใน current filter context
2. VAR CurrentMonth = MONTH(CurrentDate) → ดึงเลขเดือน
3. VAR CurrentYear = YEAR(CurrentDate) → ดึงปี
4. FILTER(ALL('Date'), ...) → ลบ filter context เดิมของ Date table แล้วใส่เงื่อนไขใหม่
5. เงื่อนไข: (a) MONTH = เดือนปัจจุบัน, (b) YEAR = ปีปัจจุบัน, (c) วันที่

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

💡 **Best Practice สำหรับ Date Table:**
.
ส่วนตัวผมแนะนำให้สร้างคอลัมน์สองตัวเสมอครับ:
1. **Month Number** = MONTH('Date'[Date]) → 1, 2, 3, ..., 12
2. **Month Name** = FORMAT('Date'[Date], "MMMM") → January, February, March...
.
แล้วตั้ง Sort by Column ให้ Month Name sort ตาม Month Number
.
**ทำไมต้องทำแบบนี้?** เพราะถ้าใช้แค่ชื่อเดือน visual จะ sort ตาม alphabetical order (April, August, December...) ซึ่งผิดไปจากลำดับจริง 😅
.
ผมทำแบบนี้ทุก Date table เลย ช่วยประหยัดเวลาแก้ปัญหาทีหลังมากครับ 😎
.
⚠️ **Gregorian Calendar Only:**
.
MONTH คืนค่า Gregorian calendar เสมอ แม้ว่าจะแสดงผลใน format อื่น (Hijri, Buddhist) ถ้าต้องการทำงานกับ non-Gregorian calendar ต้องสร้าง custom date table แยกต่างหาก
.
🔍 **Fiscal Year Tip:**
.
สำหรับองค์กรที่ใช้ fiscal year ไม่เริ่มมกราคม (เช่น เริ่มเดือนเมษายน) ผมแนะนำสร้าง fiscal month column แบบนี้:
.
```
Fiscal Month = 
VAR FiscalStartMonth = 4  -- ปรับตามที่ต้องการ
RETURN
    MOD(MONTH('Date'[Date]) - FiscalStartMonth + 12, 12) + 1
```
.
สูตรนี้ยืดหยุ่นมากครับ แค่เปลี่ยนตัวเลข FiscalStartMonth ก็ใช้ได้กับทุก fiscal year แล้ว 😎
.
⚡ **Performance Tip:**
.
MONTH ทำงานเร็วมากใน calculated column (คำนวณครั้งเดียวตอน refresh แล้วเก็บไว้) แต่ถ้าใช้ใน measure ซ้ำๆ หลายที่ จะ recalculate ทุกครั้งที่มี interaction
.
ถ้าเจอว่า report ช้า ลองเช็คดูว่ามี MONTH ใน measure ที่ซับซ้อนมั้ย อาจจะย้ายไปเป็น calculated column แทนเพื่อประสิทธิภาพที่ดีกว่า

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

**Q: MONTH คืนค่าเป็นตัวเลขหรือข้อความ?**

MONTH คืนค่าเป็น integer (ตัวเลขจำนวนเต็ม) ตั้งแต่ 1 ถึง 12 ไม่ใช่ข้อความครับ ถ้าต้องการชื่อเดือนเป็นข้อความ ให้ใช้ FORMAT แทน:
.
• FORMAT([Date], "MMMM") → "January", "February", "March"
• FORMAT([Date], "MMM") → "Jan", "Feb", "Mar"
• FORMAT([Date], "MM") → "01", "02", "03" (มีศูนย์นำหน้า)
• FORMAT([Date], "M") → "1", "2", "3" (ไม่มีศูนย์นำหน้า)
.
💡 **กฎทั่วไป:** ใช้ MONTH สำหรับ logic/calculation, ใช้ FORMAT สำหรับ display/labels

**Q: ใช้ MONTH กับข้อความวันที่ (text date) ได้ไหม?**

ได้ครับ แต่ต้องระวัง MONTH จะพยายามแปลง text เป็น datetime โดยอัตโนมัติตามกฎเดียวกับ DATEVALUE
.
⚠️ **ปัญหา:** ผลลัพธ์ขึ้นกับ locale settings ของระบบ
• Locale M/D/Y: "1/8/2024" → 8 มกราคม (January 8) → MONTH คืนค่า 1
• Locale D/M/Y: "1/8/2024" → 1 สิงหาคม (August 1) → MONTH คืนค่า 8
.
เจอปัญหานี้บ่อยมากครับ 😅 วันเดียวกันแต่ต่างคนได้ผลต่างกัน
.
💡 **แนะนำ:**
1. แปลง text เป็น date type ที่คอลัมน์ใน Power Query ก่อน
2. หรือใช้ DATE/DATEVALUE ให้ชัดเจน เช่น MONTH(DATE(2024,8,1)) เพื่อป้องกัน ambiguity

**Q: MONTH ใช้ใน measure หรือ calculated column?**

ใช้ได้ทั้งสองแบบครับ แต่มี use case ต่างกัน:
.
**Calculated Column** (แนะนำสำหรับ Date table):
• ทำงานใน row context (คำนวณทีละแถว)
• สร้างคอลัมน์เลขเดือนถาวรใน Date table
• ใช้เป็น sort column สำหรับชื่อเดือน
• ใช้ใน slicer/filter/visual axis ได้โดยตรง
• ประหยัดทรัพยากร (คำนวณครั้งเดียวตอน refresh) 😎
.
**Measure** (สำหรับ dynamic calculation):
• ทำงานใน filter context
• ใช้ใน conditional logic เช่น CALCULATE(SUM(...), MONTH([Date]) = 3)
• ใช้สร้าง custom time intelligence measures
• คำนวณทุกครั้งที่มีการ interact กับ visual
.
💡 **กฎทั่วไป:** ใน Date table ควรสร้างเป็น calculated column, ใน business logic ใช้เป็น measure

**Q: MONTH ต่างจาก FORMAT([Date], "M") อย่างไร?**

ต่างกันที่ data type และวัตถุประสงค์การใช้งานครับ:
.
**MONTH** (data type = number):
• คืนค่า integer: 1, 2, 3, ..., 12
• ใช้ในการคำนวณและ filter logic
• ตัวอย่าง: MONTH([Date]) >= 4 (fiscal year)
.
**FORMAT** (data type = text):
• FORMAT([Date], "M") → "1", "2", "3", ..., "12" (text)
• FORMAT([Date], "MM") → "01", "02", "03" (มีศูนย์นำหน้า)
• FORMAT([Date], "MMM") → "Jan", "Feb", "Mar" (ชื่อย่อ)
• FORMAT([Date], "MMMM") → "January", "February", "March" (ชื่อเต็ม)
• ใช้สำหรับการแสดงผลและ labels
.
✨ **Golden Rule:** MONTH → logic/calculation, FORMAT → display/presentation

**Q: ทำไมต้องมีคอลัมน์เลขเดือนแยกต่างหากจากชื่อเดือน?**

เพราะต้องการ sort ชื่อเดือนให้ถูกต้องตามลำดับเวลา ไม่ใช่ตามตัวอักษรครับ
.
⚠️ **ปัญหา:** ถ้าใช้ชื่อเดือนอย่างเดียว จะ sort ตาม alphabetical order:
• Alphabetical: April, August, December, February, January...
• ไม่ตรงกับลำดับจริง: January, February, March, April...
.
เจอปัญหานี้ตอนแรกๆ ที่เริ่มใช้ DAX ก็งงมาก 😅
.
💡 **วิธีแก้ (Best Practice):**
1. สร้างคอลัมน์ Month Number = MONTH('Date'[Date]) → 1, 2, 3, ..., 12
2. สร้างคอลัมน์ Month Name = FORMAT('Date'[Date], "MMMM") → January, February...
3. ตั้งค่า Sort by Column: ให้ Month Name sort ตาม Month Number
.
**ผลลัพธ์:** Visual จะแสดงชื่อเดือน แต่ sort ตามเลขเดือนโดยอัตโนมัติ → January, February, March... (ถูกต้อง) 😎

**Q: MONTH ใช้กับ fiscal year ที่ไม่เริ่มมกราคมได้ไหม?**

MONTH จะคืนเลขเดือนตาม calendar month (Gregorian) เสมอ ไม่ปรับตาม fiscal year ต้องสร้าง fiscal month column เองครับ
.
**ตัวอย่าง:** Fiscal year เริ่มเดือนเมษายน (เดือนที่ 4)
.
**วิธีที่ 1** - IF statement:
```
Fiscal Month = 
IF(
    MONTH('Date'[Date]) >= 4,
    MONTH('Date'[Date]) - 3,
    MONTH('Date'[Date]) + 9
)
```
.
**วิธีที่ 2** - MOD formula (ยืดหยุ่นกว่า):
```
Fiscal Month = 
VAR FiscalStartMonth = 4  -- เปลี่ยนได้ตามต้องการ
RETURN
    MOD(MONTH('Date'[Date]) - FiscalStartMonth + 12, 12) + 1
```
.
**ผลลัพธ์:** เมษายน (calendar month 4) → fiscal month 1, พฤษภาคม → 2, ..., มีนาคม → 12
.
💡 สำหรับ fiscal calendar ที่ซับซ้อน (เช่น 4-4-5 calendar) ส่วนตัวผมแนะนำสร้าง fiscal date table แยกต่างหากครับ จัดการง่ายกว่า 😎

**Q: MONTH รองรับ datetime ที่มี time component ไหม?**

รองรับเต็มที่ครับ MONTH จะดึงเฉพาะส่วน date และเพิกเฉยส่วน time:
.
**ตัวอย่าง:**
```
MONTH(DATETIME(2024, 3, 15, 14, 30, 0)) → คืนค่า 3
```
• เพราะเป็นเดือนมีนาคม (month = 3)
• เพิกเฉยเวลา 14:30:00
.
💡 **การใช้งาน:**
• เหมาะสำหรับ transaction data ที่มี timestamp
• สามารถ group ตามเดือนได้โดยไม่ต้องแยกส่วน date ออกมาก่อน
• ใช้ได้กับทุก datetime format ที่ DAX รองรับ
.
**ตัวอย่าง measure:**
```
Sales by Month = 
CALCULATE(
    SUM(Transactions[Amount]),
    MONTH(Transactions[Timestamp]) = 3
)
```
→ รวมยอดขายเดือนมีนาคมจากคอลัมน์ timestamp (ไม่สนใจเวลา) 😎

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

- [ฟังก์ชัน YEAR ใน DAX](https://www.thepexcel.com/functions/dax/date-and-time/year-dax/)
- [DAY – ดึงเลขวัน (1–31) จากวันที่](https://www.thepexcel.com/functions/dax/date-and-time/day-dax/)
- [DATE – สร้างวันที่จากปี เดือน วัน](https://www.thepexcel.com/functions/dax/date-and-time/date-dax/)
- today-dax
- [FORMAT – แปลงค่าเป็น Text ตามรูปแบบที่กำหนด](https://www.thepexcel.com/functions/dax/text/format-dax/)
- [DATEVALUE – แปลงข้อความวันที่เป็นชนิด datetime](https://www.thepexcel.com/functions/dax/date-and-time/datevalue-dax/)
- [EDATE – คำนวณวันที่ห่างจากวันเริ่มต้นตามจำนวนเดือน](https://www.thepexcel.com/functions/dax/date-and-time/edate-dax/)
- [EOMONTH – หาวันสิ้นเดือนจากวันที่เริ่มต้นและจำนวนเดือนที่เลื่อน](https://www.thepexcel.com/functions/dax/date-and-time/eomonth-dax/)

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

- [Microsoft Learn: MONTH function (DAX)](https://learn.microsoft.com/en-us/dax/month-function-dax) _(documentation)_
- [DAX Guide: MONTH](https://dax.guide/month/) _(documentation)_
- [SQLBI: Time Intelligence in DAX](https://www.sqlbi.com/articles/time-intelligence-in-dax/) _(guide)_
- [Microsoft Learn: Date and Time Functions (DAX)](https://learn.microsoft.com/en-us/dax/date-and-time-functions-dax) _(documentation)_

---

_Source: [https://www.thepexcel.com/functions/dax/date-and-time/month-dax/](https://www.thepexcel.com/functions/dax/date-and-time/month-dax/)_
