---
title: OPENINGBALANCEMONTH – คำนวณค่า ณ วันเปิดเดือน
url: https://www.thepexcel.com/functions/dax/time-intelligence/openingbalancemonth-dax/
type: function-explainer
program: DAX
syntax: "OPENINGBALANCEMONTH(<Expression>, <Dates>)"
date: 2025-12-13
updated: 2025-12-25
scores:
  popularity: 5
  difficulty: 5
  usefulness: 5
---

# OPENINGBALANCEMONTH – คำนวณค่า ณ วันเปิดเดือน

> OPENINGBALANCEMONTH ประเมิน Expression ณ จุดเปิดเดือน (วันสิ้นเดือนก่อนหน้า) เหมาะสำหรับหา opening b

## คำอธิบาย

OPENINGBALANCEMONTH ประเมิน Expression ณ จุดเปิดเดือน (วันสิ้นเดือนก่อนหน้า) เหมาะสำหรับหา opening balance ของยอดคงเหลือ สต็อก หรือสถิติ ณ จุดเริ่มเดือน

## Syntax

```excel
OPENINGBALANCEMONTH(&lt;Expression&gt;, &lt;Dates&gt;)
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| Expression | Yes | expression |  | นิพจน์หรือ measure ที่ต้องการประเมิน ณ จุดเปิดเดือน โดยมักจะเป็น measure ที่หา balance/ยอดคงเหลือ |
| Dates | Yes | column (date/time) |  | คอลัมน์วันที่จากตารางวันที่ (Date table) ที่ใช้เป็นตัวอ้างอิง หรือ table expression ที่ให้คอลัมน์วันที่ |

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

### ยอดคงเหลือเปิดเดือน

หายอดคงเหลือ ณ จุดเริ่มเดือน เพื่อเทียบกับค่าปิดเดือน

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

### สต็อกเปิดเดือน/จำนวนคงค้าง

ใช้กับ measure คงค้างที่ต้องการอ่าน ณ จุดเวลา

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

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: Opening Balance ของยอดสต็อก

```excel
Opening Inventory Balance =
OPENINGBALANCEMONTH(
    [Current Inventory Value],
    'Date'[Date]
)
```

**ผลลัพธ์:** `ได้ค่ายอดสต็อก ณ วันสิ้นเดือนก่อนหน้า (วันเปิดเดือนปัจจุบัน)`

สมมุติว่า [Current Inventory Value] เป็น measure หาค่าเก็บสต็อกปัจจุบัน ตอนที่ filter โดย 'Date'[Date] = 2024-02-15 มันจะส่งกลับค่ายอดสต็อก ณ 2024-01-31 (วันสิ้นเดือนมกราคม) ซึ่งคือ opening balance ของเดือนกุมภาพันธ์

### 2. ตัวอย่างที่ 2: เปรียบเทียบเปิด-ปิด (Movement Analysis)

```excel
Monthly Movement =
[Closing Month Balance] - [Opening Month Balance]

// หรือในรูปแบบ VAR
Monthly Movement (VAR) =
VAR OpenBalance = OPENINGBALANCEMONTH([Balance], 'Date'[Date])
VAR CloseBalance = CLOSINGBALANCEMONTH([Balance], 'Date'[Date])
RETURN CloseBalance - OpenBalance
```

**ผลลัพธ์:** `ได้ค่าการเปลี่ยนแปลง (movement) ของยอดคงเหลือในช่วงเดือน`

ใช้เปรียบเทียบระหว่าง [Opening Month Balance] (OPENINGBALANCEMONTH) และ [Closing Month Balance] (CLOSINGBALANCEMONTH) เพื่อดู movement โดยค่า positive หมายถึง "เพิ่มขึ้น" ค่า negative หมายถึง "ลดลง" เหมาะสำหรับ KPI Dashboard ที่ต้องแสดงการเปลี่ยนแปลง

### 3. ตัวอย่างที่ 3: CALCULATE + Filter เพิ่มเติม

```excel
Opening Balance (ประเภท A เท่านั้น) =
CALCULATE(
    OPENINGBALANCEMONTH(
        [Total Balance],
        'Date'[Date]
    ),
    Product[Category] = "A"
)
```

**ผลลัพธ์:** `ได้ค่า Opening Balance ของประเภท A เท่านั้น`

OPENINGBALANCEMONTH นั้นเคารพ filter context จาก CALCULATE ดังนั้นโดยการใส่ boolean filter Product[Category] = "A" มันจะประเมิน [Total Balance] ณ วันเปิดเดือน เฉพาะขอบเขตประเภท A เท่านั้น

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

- ผมแนะนำให้ใช้ OPENINGBALANCEMONTH กับ measure ที่เป็น balance/ยอดคงเหลือเท่านั้น (สินค้า, บัญชี, สมาชิก) ไม่ใช่ measure ที่เป็นผลรวมของช่วง (revenue, cost) เพราะค่า opening balance ของเดือนควรมีค่าเดี่ยว ณ จุดเวลานั้น ไม่ใช่ผลรวมของหลายวัน

- หากต้องการ opening balance ของประเภทสินค้า/ส่วนงาน เฉพาะ ให้ใช้ CALCULATE ห่อ OPENINGBALANCEMONTH และใส่ filter เพิ่มเติม เช่น CALCULATE(OPENINGBALANCEMONTH(...), Product[Category] = "Electronics")

- ส่วนตัวผมมักใช้ VAR เพื่อเก็บค่า Opening, Closing, Movement ไว้ก่อน แล้วค่อย RETURN เพื่อให้ measure อ่านง่ายและ debug ได้ สำเร็จ เช่น สร้าง measure ชื่อ "Opening Month", "Closing Month" แล้ว combine ใน measure อื่นที่ต้องการ

- ระวัง context transition เวลาใช้ OPENINGBALANCEMONTH กับ iterator เช่น SUMX มันจะแปลง row context เป็น filter context ซึ่งอาจทำให้ filter condition หลุดได้ ถ้าสงสัย ให้ใช้ CALCULATE เพื่อ preserve context ให้ชัดเจน

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

**Q: OPENINGBALANCEMONTH กับ PREVIOUSMONTH ต่างกันอย่างไร?**

PREVIOUSMONTH คืนค่าตารางวันที่ของเดือนก่อนหน้า เพื่อใช้กรองข้อมูล ส่วน OPENINGBALANCEMONTH คือการประเมิน Expression เอง ณ จุดเวลา "วันสิ้นเดือนก่อนหน้า" (ซึ่งคือ opening ของเดือนปัจจุบัน) โดยคืนค่าเดี่ยว (scalar) ไม่ใช่ตาราง หากต้องการใช้ PREVIOUSMONTH ให้ filter ต้องเขียน VAR PrevMonth = PREVIOUSMONTH('Date'[Date]) แล้วใช้กับ CALCULATE

**Q: ทำไมถึงบอกว่าคืนค่า ณ วันสิ้นเดือนก่อนหน้า ไม่ใช่วันเปิดเดือนปัจจุบัน?**

เพราะจากมุมมองการบัญชี/ทางการเงิน วันสิ้นเดือนเดือนที่ 1 (2024-01-31) = วันเปิดเดือนที่ 2 (2024-02-01) ซึ่งคือเวลาเดียวกัน ดังนั้นค่าคงเหลือ ณ จุดเวลานี้คือ "opening balance" ของเดือนที่ 2 และ "closing balance" ของเดือนที่ 1 พูดแบบเรียบง่าย OPENINGBALANCEMONTH ไปดึงค่า "สิ้นเดือนก่อนหน้า" ซึ่งก็คือ opening ของเดือนปัจจุบัน ครับ

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

ไม่ได้ครับ OPENINGBALANCEMONTH เป็น Time Intelligence function ที่ต้องใช้กับ Import Mode เท่านั้น ถ้าลองใช้กับ DirectQuery model จะ error ตัว function นี้คำนวณ context transition อยู่ในหน่วยความจำจาก Power BI/Excel ไม่ได้ translate เป็น SQL/DAX ที่ backend รองรับ

**Q: ต้องกำหนด date table ไหม? หรือใช้คอลัมน์วันที่ตามปกติได้?**

ดีที่สุดคือ ให้มี date table ที่ mark เป็น "Date Table" ใน Power BI model ถึงแม้ว่า OPENINGBALANCEMONTH จะใช้คอลัมน์ date column ตามธรรมชาติได้ แต่เมื่อ mark ให้เป็น date table อย่างเป็นทางการ Power BI จะประมวลผลความสัมพันธ์และ filter context ได้ดีขึ้น นอกจากนั้นก็ยังช่วยให้ฟังก์ชัน Time Intelligence อื่น ๆ เช่น YTD, MTD ทำงานได้อย่างถูกต้อง

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

- closingbalancemonth
- openingbalancequarter
- previousmonth
- calculate
- datesmtd
- endofmonth
- lastdate

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

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

---

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