---
title: PREVIOUSMONTH – ตารางวันที่ของเดือนก่อนหน้า
url: https://www.thepexcel.com/functions/dax/time-intelligence/previousmonth-dax/
type: function-explainer
program: DAX
syntax: "PREVIOUSMONTH(<dates>)"
date: 2025-12-13
updated: 2025-12-20
scores:
  popularity: 6
  difficulty: 3
  usefulness: 6
---

# PREVIOUSMONTH – ตารางวันที่ของเดือนก่อนหน้า

> คืนตารางวันที่ทั้งหมดของเดือนก่อนหน้า สำหรับ Time Intelligence

## คำอธิบาย

PREVIOUSMONTH คืนตารางวันที่ทั้งหมดของเดือนก่อนหน้า โดยอ้างอิงจากวันแรกของบริบทปัจจุบัน เหมาะกับการทำ Measure เปรียบเทียบ Month-over-Month เช่น ยอดขายเดือนก่อนหน้า ข้อแตกต่างสำคัญกับ DATEADD คือ PREVIOUSMONTH คืนทั้งเดือนเสมอ ไม่ว่าจะเลือกวันไหนก็ตาม

## Syntax

```excel
PREVIOUSMONTH(&lt;dates&gt;)
```

**Variant**

```excel
PREVIOUSMONTH(&lt;dates&gt;)
```

คืนตารางวันที่ของเดือนก่อนหน้า จากคอลัมน์วันที่ที่ระบุ

**Variant**

```excel
CALCULATE(&lt;expression&gt;, PREVIOUSMONTH(&lt;dates&gt;))
```

รูปแบบมาตรฐานที่ใช้บ่อยที่สุด ใช้ PREVIOUSMONTH เป็น Filter ใน CALCULATE

**Variant**

```excel
IF([ShowValueForDates], CALCULATE(&lt;expression&gt;, PREVIOUSMONTH(&lt;dates&gt;)))
```

Pattern แนะนำจาก DAXPatterns.com ป้องกันการแสดงค่าสำหรับวันที่ในอนาคต

**Variant**

```excel
CALCULATE(&lt;expression&gt;, CALCULATETABLE(PREVIOUSMONTH(&lt;dates&gt;), 'Date'[DateWithSales] = TRUE))
```

Advanced Pattern สำหรับเปรียบเทียบเฉพาะวันที่มียอดขายจริง ใช้กับ Incomplete Period

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| dates | Yes | column |  | คอลัมน์วันที่จากตาราง Date ต้องเป็น DateTime หรือ Date ที่มีค่า Unique และครอบคลุมทั้งปี (1 ม.ค. - 31 ธ.ค.) |

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

### ยอดขายเดือนก่อนหน้า (Month-over-Month)

ทำ Measure เปรียบเทียบยอดขายเดือนปัจจุบันกับเดือนก่อนหน้า สำหรับ Dashboard ที่แสดง Trend

_เหมาะกับ:_ mom-compare

### คำนวณ % Growth เทียบเดือนก่อน

คำนวณ % การเติบโต (Growth Rate) เทียบกับเดือนก่อนหน้า เช่น ยอดขายโตขึ้น 15% จากเดือนก่อน

_เหมาะกับ:_ growth-calculation

### KPI Dashboard รายเดือน

แสดง KPI หลายตัวพร้อมกันโดยเปรียบเทียบกับเดือนก่อนหน้า เช่น ยอดขาย, จำนวนออเดอร์, จำนวนลูกค้า

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

## ตัวอย่าง

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

```excel
Sales Previous Month =
CALCULATE(
    [Sales Amount],
    PREVIOUSMONTH('Date'[Date])
)
```

**ผลลัพธ์:** `ถ้าบริบทปัจจุบันคือเดือนสิงหาคม 2024 จะได้ยอดขายของกรกฎาคม 2024 ทั้งเดือน`

PREVIOUSMONTH('Date'[Date]) คืนตารางวันที่ 1-31 กรกฎาคม 2024 แล้ว CALCULATE ใช้ตารางนี้เป็น Filter Context ในการคำนวณ [Sales Amount]

### 2. ตัวอย่างที่ 2: ใช้ ShowValueForDates Pattern

```excel
-- Measure ช่วย: ตรวจสอบว่ามีข้อมูลจริงหรือยัง
ShowValueForDates =
VAR LastDateWithData =
    CALCULATE( MAX( Sales[OrderDate] ), REMOVEFILTERS() )
VAR FirstDateVisible = MIN( 'Date'[Date] )
RETURN
    FirstDateVisible <= LastDateWithData

-- Measure หลัก: ซ่อนค่าสำหรับวันที่ในอนาคต
Sales PM =
IF(
    [ShowValueForDates],
    CALCULATE( [Sales Amount], PREVIOUSMONTH( 'Date'[Date] ) )
)
```

**ผลลัพธ์:** `ถ้าวันที่เลือกอยู่ในอนาคต (ยังไม่มีข้อมูล) จะแสดง BLANK แทนที่จะแสดง 0`

Pattern นี้จาก DAXPatterns.com ป้องกัน Dashboard แสดงค่าศูนย์สำหรับเดือนที่ยังไม่มียอดขาย ทำให้ Trend Line ไม่ตกลงไปที่ศูนย์กลางเดือน

### 3. ตัวอย่างที่ 3: Month-over-Month Growth (VAR...RETURN)

```excel
Sales MoM Growth =
VAR CurrentMonth = [Sales Amount]
VAR PreviousMonth =
    CALCULATE(
        [Sales Amount],
        PREVIOUSMONTH('Date'[Date])
    )
VAR Growth = CurrentMonth - PreviousMonth
RETURN
    IF(
        NOT ISBLANK(CurrentMonth) && NOT ISBLANK(PreviousMonth),
        Growth
    )
```

**ผลลัพธ์:** `สมมติยอดขายสิงหาคม = 150,000 และกรกฎาคม = 120,000 ได้ผลลัพธ์ = 30,000`

ใช้ VAR เก็บค่าแต่ละเดือน แล้วคำนวณผลต่าง IF ช่วยป้องกันไม่ให้แสดงค่าเมื่อเดือนใดเดือนหนึ่งไม่มีข้อมูล

### 4. ตัวอย่างที่ 4: % Growth เดือนต่อเดือน

```excel
Sales MoM % =
VAR CurrentMonth = [Sales Amount]
VAR PreviousMonth =
    CALCULATE(
        [Sales Amount],
        PREVIOUSMONTH('Date'[Date])
    )
RETURN
    IF(
        NOT ISBLANK(CurrentMonth) && NOT ISBLANK(PreviousMonth),
        DIVIDE(CurrentMonth - PreviousMonth, PreviousMonth)
    )
```

**ผลลัพธ์:** `สมมติยอดขายสิงหาคม = 150,000 และกรกฎาคม = 120,000 ได้ผลลัพธ์ = 0.25 (25%)`

DIVIDE ช่วยป้องกัน Error กรณีหารด้วยศูนย์ ผลลัพธ์ 0.25 หมายถึงยอดขายเพิ่มขึ้น 25% จากเดือนก่อน

### 5. ตัวอย่างที่ 5: เปรียบเทียบ PREVIOUSMONTH vs DATEADD

```excel
-- PREVIOUSMONTH: คืนทั้งเดือนก่อนหน้า
Sales PM Full Month =
CALCULATE(
    [Sales Amount],
    PREVIOUSMONTH('Date'[Date])
)

-- DATEADD: เลื่อนวันถอยหลัง 1 เดือน (รักษาช่วงวันที่)
Sales PM Same Days =
CALCULATE(
    [Sales Amount],
    DATEADD('Date'[Date], -1, MONTH)
)
```

**ผลลัพธ์:** `ถ้าเลือกวันที่ 1-15 สิงหาคม:
- PREVIOUSMONTH ได้: 1-31 กรกฎาคม (ทั้งเดือน)
- DATEADD ได้: 1-15 กรกฎาคม (เฉพาะ 15 วันแรก)`

ความแตกต่างนี้สำคัญมาก PREVIOUSMONTH เหมาะเมื่อต้องการเปรียบเทียบทั้งเดือน ส่วน DATEADD เหมาะสำหรับ Month-to-Date หรือเปรียบเทียบช่วงวันที่เดียวกัน

### 6. ตัวอย่างที่ 6: ใช้ DateWithSales Pattern (Advanced)

```excel
-- Calculated Column ในตาราง Date
DateWithSales = 'Date'[Date] <= MAX( Sales[OrderDate] )

-- Measure: เปรียบเทียบเฉพาะวันที่มียอดขายจริง
Sales PM Comparable =
IF(
    [ShowValueForDates],
    CALCULATE(
        [Sales Amount],
        CALCULATETABLE(
            PREVIOUSMONTH( 'Date'[Date] ),
            'Date'[DateWithSales] = TRUE
        )
    )
)
```

**ผลลัพธ์:** `เปรียบเทียบได้แม่นยำสำหรับ Incomplete Period`

Pattern จาก DAXPatterns.com สำหรับกรณีที่เดือนปัจจุบันยังไม่จบ (เช่น วันที่ 15 ของเดือน) และต้องการเปรียบเทียบกับ 15 วันแรกของเดือนก่อนอย่างยุติธรรม

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

**PREVIOUSMONTH vs DATEADD - เลือกให้ถูก:**
.
- PREVIOUSMONTH = ได้ "ทั้งเดือน" ก่อนหน้าเสมอ (31 วัน หรือ 30/28 วันแล้วแต่เดือน)
- DATEADD(-1, MONTH) = เลื่อน "แต่ละวัน" ถอยหลัง 1 เดือน (รักษาช่วงวันที่)
.
**ShowValueForDates Pattern:**
.
แนะนำให้ใช้ IF([ShowValueForDates], ...) ครอบทุก Time Intelligence Measure เพื่อป้องกันการแสดงค่าสำหรับวันที่ในอนาคต
.
**DateWithSales Column:**
.
สำหรับ Incomplete Period Comparison ให้สร้าง Calculated Column: DateWithSales = 'Date'[Date] <= MAX(Sales[OrderDate]) แล้วใช้ใน CALCULATETABLE เพื่อเปรียบเทียบอย่างยุติธรรม

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

**Q: ทำไมบางเดือนผลลัพธ์เป็น BLANK?**

มักเกิดจาก 2 สาเหตุครับ: (1) ไม่มีข้อมูลของเดือนก่อนหน้าในตาราง Date เช่น ถ้าข้อมูลเริ่มที่มกราคม 2024 แล้วเลือกเดือนมกราคม จะไม่มีธันวาคม 2023 (2) บริบทวันที่ไม่ชัดเจน เช่น เลือกหลายเดือนปนกัน ทำให้ไม่รู้ว่าเดือนก่อนหน้าคือเดือนไหน

**Q: PREVIOUSMONTH กับ DATEADD(-1, MONTH) ต่างกันอย่างไร?**

ต่างกันมากครับ! PREVIOUSMONTH คืน "ทั้งเดือน" ก่อนหน้าเสมอ ไม่ว่าบริบทปัจจุบันจะเลือกกี่วันก็ตาม ส่วน DATEADD เลื่อนแต่ละวันถอยหลัง 1 เดือน ถ้าเลือก 10 วัน ก็จะได้ 10 วันของเดือนก่อน ใช้ PREVIOUSMONTH เมื่อต้องการเปรียบเทียบ "เดือนต่อเดือน" ใช้ DATEADD เมื่อต้องการเปรียบเทียบ "ช่วงวันที่เดียวกัน"

**Q: ต้องใช้ตาราง Date แยกหรือเปล่า?**

ควรมากครับ เพราะ Time Intelligence Functions ต้องการตาราง Date ที่ (1) มีวันที่ครบทุกวันตลอดทั้งปี (2) ไม่มีวันซ้ำ (3) ถูก Mark เป็น Date Table ใน Data Model ถ้าใช้คอลัมน์วันที่จาก Fact Table โดยตรง อาจมีวันที่ขาดหายและทำให้ผลลัพธ์ผิดพลาด

**Q: ShowValueForDates Pattern คืออะไร ทำไมต้องใช้?**

เป็น Pattern จาก DAXPatterns.com สำหรับซ่อนค่าของวันที่ในอนาคต ถ้าไม่ใช้ Dashboard อาจแสดงค่า 0 หรือ BLANK สำหรับเดือนที่ยังไม่มีข้อมูล ทำให้ Trend Line ตกลงไปที่ศูนย์กลางเดือน ดูไม่สวยและเข้าใจผิดได้

**Q: ใช้ PREVIOUSMONTH ซ้อนกันได้ไหม เช่น 2 เดือนก่อน?**

ได้ครับ เช่น PREVIOUSMONTH(PREVIOUSMONTH('Date'[Date])) แต่ไม่แนะนำเพราะอ่านยากและช้ากว่า ถ้าต้องการถอยหลังหลายเดือน แนะนำใช้ DATEADD('Date'[Date], -2, MONTH) หรือ PARALLELPERIOD แทนครับ

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

- [CALCULATE – ฟังก์ชันหลักของ DAX ที่ควบคุม Filter Context](https://www.thepexcel.com/functions/dax/filter/calculate-dax/)
- [DATEADD – เลื่อนช่วงเวลาไปข้างหน้าหรือย้อนหลัง (Shift Dates)](https://www.thepexcel.com/functions/dax/time-intelligence/dateadd-dax/)
- [PARALLELPERIOD – เลื่อนช่วงเวลาแบบเต็มเดือน/ไตรมาส/ปี (Full Period Shift)](https://www.thepexcel.com/functions/dax/time-intelligence/parallelperiod-dax/)
- [PREVIOUSDAY – ตารางวันที่ของวันก่อนหน้า](https://www.thepexcel.com/functions/dax/time-intelligence/previousday-dax/)
- [PREVIOUSQUARTER – ตารางวันที่ของไตรมาสก่อนหน้า](https://www.thepexcel.com/functions/dax/time-intelligence/previousquarter-dax/)
- [PREVIOUSYEAR – ตารางวันที่ของปีก่อนหน้า](https://www.thepexcel.com/functions/dax/time-intelligence/previousyear-dax/)
- [SAMEPERIODLASTYEAR – คืนช่วงเวลาเดียวกันของปีก่อนหน้า (Year-over-Year)](https://www.thepexcel.com/functions/dax/time-intelligence/sameperiodlastyear-dax/)
- [REMOVEFILTERS – ลบตัวกรองออกจากตาราง/คอลัมน์](https://www.thepexcel.com/functions/dax/filter/removefilters-dax/)
- [DIVIDE – ฟังก์ชัน DAX](https://www.thepexcel.com/functions/dax/math-and-trig/divide-dax/)
- isblank-dax

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

- [DAXPatterns.com: Standard Time-Related Calculations](https://www.daxpatterns.com/standard-time-related-calculations/) _(guide)_
- [DAX Guide: PREVIOUSMONTH](https://dax.guide/previousmonth/) _(documentation)_
- [Microsoft Learn: PREVIOUSMONTH](https://learn.microsoft.com/en-us/dax/previousmonth-function-dax) _(documentation)_
- [SQLBI: Differences between DATEADD and PARALLELPERIOD](https://www.sqlbi.com/articles/differences-between-dateadd-and-parallelperiod-in-dax/) _(guide)_

---

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