Thep Excel

STARTOFMONTH – วันแรกของเดือนในบริบทปัจจุบัน

STARTOFMONTH คืนวันแรกของเดือนเป็นตาราง 1 แถว ใช้กับการวัดที่ขึ้นต่อจุดเวลา เช่น ยอดคงเหลือ บัญชี หรือสินค้าคงคลัง

=STARTOFMONTH(<Dates>)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
6/10

Difficulty
3/10

Usefulness
6/10

Syntax & Arguments

=STARTOFMONTH(<Dates>)

Argument Type Required Default Description
Dates dates (table/column expression) Yes คอลัมน์วันที่ หรือ table expression ที่ให้คอลัมน์วันที่ เช่น ‘Date'[DateKey] หรือ FILTER(Dates, …)

How it works

คำนวณค่า ณ วันแรกของเดือน

ใช้เป็นตัวกรองเพื่อคำนวณ measure ณ จุดเริ่มเดือน

แสดงวันที่เริ่มเดือนในรายงาน

แปลงเป็นค่าเดี่ยวเพื่อใช้แสดงผล/ทำตรรกะต่อ

Examples

ตัวอย่างที่ 1: ดึงวันแรกของเดือนเป็นค่าเดี่ยว
Start of Month (Scalar) = VAR StartDate = MINX(STARTOFMONTH('Date'[Date]), 'Date'[Date]) RETURN StartDate
STARTOFMONTH คืนตาราง 1 แถว ต้องใช้ MINX หรือ SELECTEDVALUE เพื่อดึงค่า scalar ออกมา ตัวอย่างนี้ใช้ VAR เพื่อเก็บค่าแล้ว RETURN กลับออกมา
DAX Formula:

=Start of Month (Scalar) =
VAR StartDate = MINX(STARTOFMONTH('Date'[Date]), 'Date'[Date])
RETURN
    StartDate

Result:

ได้วันที่เดียว เช่น 1/1/2024 (สมมติบริบทปัจจุบันคือ January 2024)

ตัวอย่างที่ 2: ยอดคงเหลือต้นเดือน (Opening Balance)
Opening Balance = CALCULATE( [Total Amount], STARTOFMONTH('Date'[Date]) )
STARTOFMONTH ทำ context transition จาก row context เป็น filter context ที่จำกัดวันที่เป็นต้นเดือนเท่านั้น จึงใช้ CALCULATE เพื่อใช้ STARTOFMONTH เป็นตัวกรอง ถ้าเดือน January ก็จะเลือกวันที่ 1/1 เท่านั้น
DAX Formula:

Opening Balance =
CALCULATE(
    [Total Amount],
    STARTOFMONTH('Date'[Date])
)

Result:

ได้ยอดคงเหลือต้นเดือนในบริบทปัจจุบัน เช่น 50,000 บาท

ตัวอย่างที่ 3: ใช้เปรียบเทียบต้นเดือนกับปัจจุบัน
Change from Start of Month = VAR CurrentValue = [Total Amount] VAR StartOfMonthValue = CALCULATE([Total Amount], STARTOFMONTH('Date'[Date])) RETURN CurrentValue…
ใช้ VAR ที่ 2 ตัว เพื่อเก็บค่าปัจจุบันและค่าต้นเดือน แล้ว RETURN ส่วนต่างออกมา ทำให้เห็นว่ายอดเปลี่ยนแปลงเท่าไหร่ตั้งแต่ต้นเดือนมา
DAX Formula:

Change from Start of Month =
VAR CurrentValue = [Total Amount]
VAR StartOfMonthValue = CALCULATE([Total Amount], STARTOFMONTH('Date'[Date]))
RETURN
    CurrentValue - StartOfMonthValue

Result:

ได้ผลต่างระหว่างวันปัจจุบันกับต้นเดือน เช่น +5,000 บาท

ตัวอย่างที่ 4: การเปรียบเทียบกับเดือนที่แล้ว
Start of Month YoY Comparison = VAR CurrentMonthStart = CALCULATE( [Total Amount], STARTOFMONTH('Date'[Date]) ) VAR PreviousYearStart = CALCULATE( [Total Amount…
ใช้ STARTOFMONTH กับ DATEADD ร่วมกัน เพื่อหา start of month ในปีที่แล้ว โปรดสังเกต DATEADD เป็น row context function ที่ได้ผล ต้องใช้ CALCULATE เพื่อแปลง context ให้ DATEADD ทำงานได้
DAX Formula:

Start of Month YoY Comparison =
VAR CurrentMonthStart = CALCULATE(
    [Total Amount],
    STARTOFMONTH('Date'[Date])
)
VAR PreviousYearStart = CALCULATE(
    [Total Amount],
    STARTOFMONTH('Date'[Date]),
    DATEADD('Date'[Date], -1, YEAR)
)
RETURN
    CurrentMonthStart - PreviousYearStart

Result:

ได้ผลต่างยอดต้นเดือนเทียบกับปีที่แล้ว

FAQs

STARTOFMONTH คืนค่าเป็นตารางหรือค่าเดี่ยว?

คืนค่าเป็นตาราง 1 แถว (single-row table) ซึ่งมีคอลัมน์วันที่ 1 คอลัมน์ ถ้าต้องการค่าเดี่ยว ให้ใช้ MINX หรือ SELECTEDVALUE เพื่อดึงออกมา ส่วนตัวผม มักใช้ MINX ที่ดึงค่าจากคอลัมน์วันที่ออกมาเป็น scalar

ทำไมต้อง CALCULATE กับ STARTOFMONTH?

เพราะ STARTOFMONTH คืนตาราง ต้องใช้ CALCULATE เพื่อแปลงตาราง 1 แถวนั้นเป็น filter context แล้วใช้เป็นตัวกรองในการคำนวณ measure ถ้าไม่ใช้ CALCULATE ผลลัพธ์จะไม่มีความหมายหรือ error ได้

STARTOFMONTH กับ ENDOFMONTH ต่างกันอย่างไร?

ทั้งสองมีพฤติกรรมเหมือนกัน แต่ STARTOFMONTH ให้วันแรก (ที่ 1) ของเดือน ส่วน ENDOFMONTH ให้วันสุดท้ายของเดือน (28, 29, 30 หรือ 31 ขึ้นกับเดือน) ใช้ STARTOFMONTH ถ้าต้อง snapshot ต้นเดือน ใช้ ENDOFMONTH ถ้าต้อง snapshot สิ้นเดือน

ถ้า Date column ไม่มี 1 ม.ค. ใน filter context จะเกิดอะไร?

STARTOFMONTH จะขึ้น error หรือ blank ได้ ต้องให้ Date table ที่สมบูรณ์ มีวันทุกวันตั้งแต่วันแรกถึงวันสุดท้ายของปีที่ต้อง ถ้า Date table ไม่ครบก็ทำให้เกิดปัญหา context ได้ง่าย

STARTOFMONTH ใช้ได้กับ DirectQuery mode หรือ?

ไม่สนับสนุน DirectQuery สำหรับ calculated columns หรือ RLS rules เพราะ STARTOFMONTH ต้องใช้เวลาในการประมวลผล ต้องใช้ Import mode หรือ Dual mode แทน

Resources & Related

Related functions

Additional Notes

STARTOFMONTH คืนตารางวันที่ที่มีวันแรกของเดือนในบริบทตัวกรองปัจจุบัน ผลลัพธ์เป็นตาราง 1 แถว (single-row table) ซึ่งมักใช้เป็นตัวกรองใน CALCULATE

ที่เจ๋งคือ STARTOFMONTH ทำให้ตรรกะการวัดที่ขึ้นต่อจุดเวลา (point-in-time measures) ง่ายขึ้น โดยส่วนใหญ่ใช้กับยอดคงเหลือ (balance) บัญชี (account status) หรือสินค้าคงคลัง (inventory) ซึ่งต้องวัดค่า ณ สิ้นหรือต้นเดือน แล้ว STARTOFMONTH จะช่วยกำหนดจุดอ้างอิงนั้นให้แม่นยำ

ส่วนตัวผม พบว่าหลายคน confuse ระหว่าง STARTOFMONTH กับ ENDOFMONTH ผมมักใช้ STARTOFMONTH เมื่อต้อง snapshot ยอดต้นเดือน และ ENDOFMONTH สำหรับยอดสิ้นเดือน ทั้ง 2 ฟังก์ชันต้องจับคู่กับ CALCULATE เพื่อใช้เป็นตัวกรอง จึงเข้าใจ context transition ดีจึงเป็นกุญแจ

Leave a Reply

Your email address will not be published. Required fields are marked *