---
title: ENDOFMONTH – หาวันสิ้นเดือนสำหรับ Time Intelligence
url: https://www.thepexcel.com/functions/dax/time-intelligence/endofmonth-dax/
type: function-explainer
program: DAX
syntax: "ENDOFMONTH(<Dates>)"
date: 2025-12-13
updated: 2025-12-20
scores:
  popularity: 6
  difficulty: 3
  usefulness: 6
---

# ENDOFMONTH – หาวันสิ้นเดือนสำหรับ Time Intelligence

> คืนตารางวันที่ของวันสิ้นเดือนตามปฏิทิน

## คำอธิบาย

ENDOFMONTH คืนตารางวันที่ของวันสิ้นเดือนตามปฏิทิน เหมาะกับ Semi-Additive Calculations เช่น ยอดคงเหลือ, Inventory, หรือ Closing Balance ที่ต้องการ snapshot ณ สิ้นเดือน ไม่ว่าจะมีข้อมูลจริงในวันนั้นหรือไม่

## Syntax

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

**Variant**

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

คืนวันสิ้นเดือนจากคอลัมน์วันที่

**Variant**

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

ประเมิน Expression ที่วันสิ้นเดือน (Closing Balance Pattern)

**Variant**

```excel
ENDOFMONTH(&lt;Calendar&gt;)
```

ใช้กับ Calendar Reference สำหรับ Fiscal Calendar

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| Dates | Yes | column |  | คอลัมน์วันที่จากตารางวันที่/ปฏิทิน หรือ Table Expression ที่คืนค่าวันที่คอลัมน์เดียว |

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

### Closing Balance / ยอดคงเหลือสิ้นเดือน

ดูยอดเงินในบัญชี สินค้าคงคลัง หรือค่าใดๆ ณ วันสิ้นเดือน

_เหมาะกับ:_ closing-balance

### Semi-Additive Calculations

ค่าที่ไม่ควรรวมข้ามเวลา เช่น Balance, Headcount, Inventory ต้องดูเป็น snapshot

_เหมาะกับ:_ semi-additive

### Monthly Snapshot Reporting

รายงานที่ต้องการค่า ณ สิ้นเดือนทุกเดือน เช่น Financial Statement

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

### Opening vs Closing Balance Comparison

เปรียบเทียบยอดต้นเดือน-ปลายเดือนเพื่อหา Growth หรือ Movement

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

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: Closing Balance พื้นฐาน

```excel
Closing Balance =
CALCULATE(
    SUM(Balances[Amount]),
    ENDOFMONTH('Date'[Date])
)
```

**ผลลัพธ์:** `ยอดคงเหลือ ณ วันสิ้นเดือนของบริบทปัจจุบัน`

สมมติเลือกเดือน มกราคม 2024 → ENDOFMONTH จะคืน 31 ม.ค. 2024
.
CALCULATE จะกรองให้เหลือเฉพาะแถวที่ตรงกับวันที่ 31 ม.ค. แล้วรวม Amount
.
Pattern นี้เหมาะกับข้อมูลที่บันทึกยอดคงเหลือทุกวัน เช่น Bank Balance, Stock Level

### 2. ตัวอย่างที่ 2: Inventory at Month End

```excel
Inventory Month End =
CALCULATE(
    SUM(Inventory[Quantity]),
    ENDOFMONTH('Date'[Date])
)
```

**ผลลัพธ์:** `จำนวนสินค้าคงคลัง ณ วันสิ้นเดือน`

สมมติตาราง Inventory มี Quantity ทุกวัน:
- 28 ม.ค.: 100 ชิ้น
- 29 ม.ค.: 95 ชิ้น
- 30 ม.ค.: 88 ชิ้น
- 31 ม.ค.: 92 ชิ้น
.
ผลลัพธ์ = 92 ชิ้น (เฉพาะวันที่ 31)
.
ที่ต้องระวังคือ ถ้าไม่มีข้อมูลวันที่ 31 ผลลัพธ์จะเป็น BLANK เพราะ ENDOFMONTH คืนวันปฏิทินเสมอ

### 3. ตัวอย่างที่ 3: LASTDATE vs ENDOFMONTH (ความแตกต่างสำคัญ!)

```excel
-- ถ้าข้อมูลมีถึงแค่วันที่ 28 ม.ค.

-- LASTDATE จะคืน 28 ม.ค. (วันสุดท้ายที่มีข้อมูล)
Balance LastDate =
CALCULATE(
    SUM(Balances[Amount]),
    LASTDATE('Date'[Date])
)

-- ENDOFMONTH จะคืน 31 ม.ค. (วันสิ้นเดือนปฏิทิน)
Balance EndOfMonth =
CALCULATE(
    SUM(Balances[Amount]),
    ENDOFMONTH('Date'[Date])
)
```

**ผลลัพธ์:** `LASTDATE = ยอด ณ 28 ม.ค.
ENDOFMONTH = BLANK (ไม่มีข้อมูลวันที่ 31)`

นี่คือความแตกต่างสำคัญมาก!
.
🔹 LASTDATE = วันสุดท้ายที่มีข้อมูลจริง (Last Date with Data)
🔹 ENDOFMONTH = วันสิ้นเดือนตามปฏิทิน (Calendar Month End)
.
ใช้ LASTDATE เมื่อ: ข้อมูลอาจไม่ครบทุกวัน แต่ต้องการยอดล่าสุด
ใช้ ENDOFMONTH เมื่อ: ต้องการยอด ณ วันสิ้นเดือนจริงๆ เท่านั้น 💡

### 4. ตัวอย่างที่ 4: Opening vs Closing Balance

```excel
-- Closing Balance (ยอดปลายเดือน)
Closing Balance =
CALCULATE(
    SUM(Balances[Amount]),
    ENDOFMONTH('Date'[Date])
)

-- Opening Balance (ยอดต้นเดือน = ยอดปลายเดือนก่อน)
Opening Balance =
VAR PreviousMonthEnd =
    DATEADD(STARTOFMONTH('Date'[Date]), -1, DAY)
RETURN
CALCULATE(
    SUM(Balances[Amount]),
    PreviousMonthEnd
)

-- หรือใช้ Built-in Function
Opening Balance v2 =
OPENINGBALANCEMONTH(
    SUM(Balances[Amount]),
    'Date'[Date]
)
```

**ผลลัพธ์:** `Closing = ยอด ณ 31 ม.ค.
Opening = ยอด ณ 31 ธ.ค. (เดือนก่อน)`

Pattern สำคัญสำหรับ Financial Reporting:
.
🔹 Closing Balance = ENDOFMONTH ของเดือนปัจจุบัน
🔹 Opening Balance = ENDOFMONTH ของเดือนก่อน = วันก่อน STARTOFMONTH
.
DAXPatterns.com แนะนำ: ใช้ DATEADD(FIRSTDATE/STARTOFMONTH, -1, DAY) เพื่อหา Opening Balance
.
หรือใช้ OPENINGBALANCEMONTH / CLOSINGBALANCEMONTH ที่ Microsoft สร้างมาให้แล้ว 😎

### 5. ตัวอย่างที่ 5: Monthly Snapshot Report

```excel
Monthly Snapshot =
VAR ClosingBalance = 
    CALCULATE(
        SUM(Accounts[Balance]),
        ENDOFMONTH('Date'[Date])
    )
VAR OpeningBalance =
    CALCULATE(
        SUM(Accounts[Balance]),
        DATEADD(STARTOFMONTH('Date'[Date]), -1, DAY)
    )
VAR Movement = ClosingBalance - OpeningBalance
RETURN
    ClosingBalance
```

**ผลลัพธ์:** `ยอดคงเหลือ ณ สิ้นเดือน พร้อม Movement ที่คำนวณได้`

Pattern ครบสำหรับ Monthly Financial Report:
.
1. Closing Balance = ENDOFMONTH
2. Opening Balance = วันก่อน STARTOFMONTH (= สิ้นเดือนก่อน)
3. Movement = Closing - Opening
.
ใช้ VAR เพื่อคำนวณค่ากลางก่อน แล้ว RETURN ค่าที่ต้องการ
.
ส่วนตัวผมใช้ Pattern นี้ทำ Cash Flow Statement และ Balance Sheet Movement Analysis 💡

### 6. ตัวอย่างที่ 6: Growth Calculation

```excel
Balance Growth =
VAR Opening =
    CALCULATE(
        SUM(Balances[Amount]),
        DATEADD(STARTOFMONTH('Date'[Date]), -1, DAY)
    )
VAR Closing =
    CALCULATE(
        SUM(Balances[Amount]),
        ENDOFMONTH('Date'[Date])
    )
VAR Delta =
    IF(
        NOT ISBLANK(Opening) && NOT ISBLANK(Closing),
        Closing - Opening
    )
RETURN
    IF(Delta <> 0, Delta)
```

**ผลลัพธ์:** `ส่วนต่างระหว่างยอดต้นเดือน-ปลายเดือน`

Pattern จาก DAXPatterns.com สำหรับหา Growth:
.
1. คำนวณ Opening และ Closing
2. เช็คว่าทั้งสองค่าไม่เป็น BLANK
3. คำนวณ Delta (Closing - Opening)
4. Return เฉพาะเมื่อ Delta ไม่เท่ากับ 0
.
ที่เจ๋งคือ Pattern นี้ handle edge case ได้ดี ไม่ return ค่าผิดๆ เมื่อข้อมูลไม่ครบ

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

💡 **เลือก Function ให้เหมาะ:**
.
🔹 ENDOFMONTH = วันสิ้นเดือนปฏิทิน (Calendar End)
🔹 LASTDATE = วันสุดท้ายที่มีข้อมูล (Last with Data)
🔹 EOMONTH = scalar date ของสิ้นเดือน (ไม่ใช่ table)
🔹 CLOSINGBALANCEMONTH = Built-in สำหรับ Closing Balance
.
⚠️ **Performance Tip:**
ถ้าต้องการแค่ค่าวันที่ (scalar) ใช้ MAX/EOMONTH จะเร็วกว่า ENDOFMONTH เพราะไม่ต้องสร้างตารางกลาง

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

**Q: ENDOFMONTH vs LASTDATE ต่างกันยังไง?**

ENDOFMONTH คืนวันสิ้นเดือนตามปฏิทินเสมอ (เช่น 31, 30, 28/29) ไม่ว่าจะมีข้อมูลหรือไม่
.
LASTDATE คืนวันสุดท้ายที่มีข้อมูลจริงใน filter context
.
ตัวอย่าง: ถ้าข้อมูลมกราคมมีถึงแค่วันที่ 25
- ENDOFMONTH → 31 ม.ค. (อาจได้ BLANK ถ้าไม่มีข้อมูล)
- LASTDATE → 25 ม.ค. (ได้ยอดวันสุดท้ายที่มี)
.
ใช้ ENDOFMONTH เมื่อต้องการวันปฏิทินแน่นอน
ใช้ LASTDATE เมื่อต้องการยอดล่าสุดที่มีจริงๆ

**Q: ทำไม ENDOFMONTH คืนค่าเป็นตาราง ไม่ใช่วันที่?**

ENDOFMONTH ถูกออกแบบมาเพื่อใช้เป็น filter argument ใน CALCULATE โดยคืนตาราง 1 แถว 1 คอลัมน์
.
DAX จะแปลงเป็น scalar อัตโนมัติเมื่อต้องการ แต่ถ้าต้องการแค่ค่าวันที่ ใช้ EOMONTH หรือ MAX + EOMONTH จะเร็วกว่า
.
ตาม SQLBI แนะนำ: ใช้ ENDOFMONTH/LASTDATE เป็น filter ใน CALCULATE เท่านั้น ถ้าต้องการค่า scalar ให้ใช้ MAX/MIN แทน 💡

**Q: Semi-Additive Calculation คืออะไร?**

ค่าที่ไม่ควรรวมข้ามเวลา เช่น:
.
- Bank Balance: ยอด 1 ม.ค. = 1000, ยอด 2 ม.ค. = 1200 → รวมแล้วได้ 2200 ซึ่งไม่มีความหมาย!
- Inventory: จำนวนสินค้าในคลังแต่ละวัน รวมกันไม่ได้
- Headcount: จำนวนพนักงานแต่ละวัน
.
ค่าพวกนี้ต้องดูเป็น "snapshot" ณ จุดใดจุดหนึ่ง ไม่ใช่รวมกัน
.
Pattern: ใช้ ENDOFMONTH/LASTDATE เพื่อดูค่า ณ จุดเวลาที่ต้องการ 😎

**Q: Opening Balance หาอย่างไร?**

Opening Balance ของเดือนปัจจุบัน = Closing Balance ของเดือนก่อน
.
วิธีที่ 1: ใช้ DATEADD
Opening = CALCULATE([Balance], DATEADD(STARTOFMONTH('Date'[Date]), -1, DAY))
.
วิธีที่ 2: ใช้ Built-in Function
Opening = OPENINGBALANCEMONTH(SUM(Balances[Amount]), 'Date'[Date])
.
ทั้งสองวิธีให้ผลเหมือนกัน วิธีที่ 2 อ่านง่ายกว่า 💡

**Q: ENDOFMONTH ทำงานกับ Fiscal Calendar ได้ไหม?**

ได้ครับ! ใช้กับ Calendar Reference:
.
ENDOFMONTH(FiscalCalendar)
.
จะคืน tagged primary columns ที่ตรงกับสิ้นเดือนของ Fiscal Calendar
.
แต่ต้องตั้งค่า Calendar ให้ถูกต้องก่อนนะครับ

**Q: ใช้ ENDOFMONTH ใน Visual Calculation ได้ไหม?**

ทำได้ แต่ Microsoft แนะนำว่าไม่ควรใช้ เพราะ "likely returns meaningless results" ในบริบทของ Visual Calculation
.
Time Intelligence functions ควรใช้ใน Measure เท่านั้นครับ 😅

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

- [CALCULATE – ฟังก์ชันหลักของ DAX ที่ควบคุม Filter Context](https://www.thepexcel.com/functions/dax/filter/calculate-dax/)
- [LASTDATE – วันที่สุดท้ายในบริบทตัวกรองปัจจุบัน](https://www.thepexcel.com/functions/dax/time-intelligence/lastdate-dax/)
- [FIRSTDATE – วันที่แรกในบริบทตัวกรองปัจจุบัน](https://www.thepexcel.com/functions/dax/time-intelligence/firstdate-dax/)
- [EOMONTH – หาวันสิ้นเดือนจากวันที่เริ่มต้นและจำนวนเดือนที่เลื่อน](https://www.thepexcel.com/functions/dax/date-and-time/eomonth-dax/)
- [STARTOFMONTH – วันแรกของเดือนในบริบทปัจจุบัน](https://www.thepexcel.com/functions/dax/time-intelligence/startofmonth-dax/)
- [ENDOFQUARTER – ชุดวันที่ของวันสิ้นไตรมาสในบริบทปัจจุบัน](https://www.thepexcel.com/functions/dax/time-intelligence/endofquarter-dax/)
- [ENDOFYEAR – ชุดวันที่ของวันสิ้นปีในบริบทปัจจุบัน](https://www.thepexcel.com/functions/dax/time-intelligence/endofyear-dax/)
- [CLOSINGBALANCEMONTH – ค่ายอดคงเหลือ ณ วันสิ้นเดือนในบริบทปัจจุบัน](https://www.thepexcel.com/functions/dax/time-intelligence/closingbalancemonth-dax/)
- [OPENINGBALANCEMONTH – คำนวณค่า ณ วันเปิดเดือน](https://www.thepexcel.com/functions/dax/time-intelligence/openingbalancemonth-dax/)
- [DATEADD – เลื่อนช่วงเวลาไปข้างหน้าหรือย้อนหลัง (Shift Dates)](https://www.thepexcel.com/functions/dax/time-intelligence/dateadd-dax/)
- [DATESMTD – ชุดวันที่ตั้งแต่ต้นเดือนถึงปัจจุบัน (MTD)](https://www.thepexcel.com/functions/dax/time-intelligence/datesmtd-dax/)

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

- [DAX Guide: ENDOFMONTH](https://dax.guide/endofmonth/) _(documentation)_
- [Microsoft Learn: ENDOFMONTH](https://learn.microsoft.com/en-us/dax/endofmonth-function-dax) _(documentation)_
- [DAX Patterns: Semi-Additive Calculations](https://www.daxpatterns.com/semi-additive-calculations/) _(guide)_
- [SQLBI: LASTDATE vs MAX](https://www.sqlbi.com/articles/understanding-the-difference-between-lastdate-and-max-in-dax/) _(guide)_

---

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