Thep Excel

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

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

fx
=STARTOFMONTH(<Dates>)

ความนิยม6/10
ความยาก3/10
ประโยชน์6/10

อัปเดต 13 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
Dates dates (table/column expression) คอลัมน์วันที่ หรือ table expression ที่ให้คอลัมน์วันที่ เช่น ‘Date'[DateKey] หรือ FILTER(Dates, …)

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 ดีจึงเป็นกุญแจ

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 กลับออกมา

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

ผลลัพธ์ได้วันที่เดียว เช่น 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 เท่านั้น

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

ผลลัพธ์ได้ยอดคงเหลือต้นเดือนในบริบทปัจจุบัน เช่น 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 ส่วนต่างออกมา ทำให้เห็นว่ายอดเปลี่ยนแปลงเท่าไหร่ตั้งแต่ต้นเดือนมา

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

ผลลัพธ์ได้ผลต่างระหว่างวันปัจจุบันกับต้นเดือน เช่น +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 ทำงานได้

fx
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

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

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

ฟังก์ชันที่ผู้เขียนโยงไว้กับ STARTOFMONTH จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้STARTOFMONTHTime Intelligence
Time Intelligence (12)
DATEADD

DATEADD คืนค่าตารางวันที่ ที่ถูกเลื่อนออกไปจากช่วงวันที่ใน Context ปัจจุบัน ตามจำนวน (NumberOfIntervals) และหน่วย (Interval) ที่กำหนด เช่น เลื่อนย้อนหลัง 1 เดือน หรือเลื่อนไปข้างหน้า 1 ปี

DATESBETWEEN

DATESBETWEEN คืนตารางวันที่ที่อยู่ระหว่าง StartDate และ EndDate (รวมวันเริ่ม/วันจบ) เหมาะกับการใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อคำนวณตามช่วงวันที่ที่กำหนดเอง

DATESMTD

DATESMTD คืนตารางวันที่ของช่วงตั้งแต่ต้นเดือนถึงวันที่ล่าสุดใน filter context เหมาะกับการทำยอดสะสมตั้งแต่ต้นเดือน (MTD) โดยใช้ร่วมกับ CALCULATE และควรใช้คู่กับ ShowValueForDates pattern เพื่อไม่ให้แสดงค่าในวันที่ยังไม่มีข้อมูล

DATESQTD

DATESQTD คืนตารางวันที่ของช่วงตั้งแต่ต้นไตรมาสถึงวันที่ล่าสุดในบริบทปัจจุบัน เหมาะสำหรับสร้างมาตรวัด QTD ใน CALCULATE โดยทำงานร่วมกับ Time Intelligence Functions ตัวอื่นๆ ได้ดี และควรใช้คู่กับ ShowValueForDates pattern เพื่อป้องกันการแสดงค่าในอนาคต

ENDOFMONTH

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

FIRSTDATE

FIRSTDATE คืนค่าวันที่แรกในบริบทตัวกรองปัจจุบัน เหมาะใช้เป็นตัวกรองให้ CALCULATE เพื่อหายอดขาย/จำนวนของวันแรกในช่วงที่เลือก

LASTDATE

LASTDATE คืนค่าตารางที่มีวันที่สุดท้ายในบริบทตัวกรองปัจจุบัน มักใช้เป็นตารางตัวกรองให้ CALCULATE เพื่อคำนวณ measure ณ วันสุดท้ายของช่วงที่เลือก และสามารถใช้ MAXX เพื่อแปลงผลเป็น scalar date ได้

OPENINGBALANCEMONTH

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

STARTOFQUARTER

STARTOFQUARTER คืนตารางวันที่ที่มีวันแรกของไตรมาสในบริบทตัวกรองปัจจุบัน (single-row table) ใช้เป็นตารางตัวกรองใน CALCULATE หรือใช้ MINX เพื่อแปลงเป็น scalar date

STARTOFWEEK

STARTOFWEEK คืนตารางที่มีวันแรกของสัปดาห์ตามปฏิทินที่กำหนด ใช้เป็นตัวกรองใน CALCULATE หรือดึงค่าสเกลาร์ด้วย MINX ฟังก์ชันนี้จำเป็นต้องมีตารางวันที่ที่ถูกกำหนดไว้เป็น Date Table

STARTOFYEAR

STARTOFYEAR คืนตาราง 1 แถวที่มีวันที่วันแรกของปีในบริบทปัจจุบัน ใช้สำหรับ semi-additive measure เช่น inventory balance หรือเปรียบเทียบ year-to-date

TOTALMTD

คำนวณยอดสะสมตั้งแต่ต้นเดือน (Month-to-Date) ของ Expression ตามคอลัมน์วันที่ที่กำหนด เป็นทางลัดของ CALCULATE + DATESMTD

Filter (1)
CALCULATE

CALCULATE เป็นฟังก์ชันหลักที่สำคัญที่สุดใน DAX ใช้สำหรับ evaluate expression ภายใต้ filter context ที่ถูกปรับเปลี่ยน สามารถเพิ่มตัวกรองใหม่ ลบตัวกรองเดิม หรือแทนที่ filter ที่มีอยู่ได้ รองรับทั้ง Boolean expression และ table expression เป็น filter arguments พร้อม filter modifier functions เช่น REMOVEFILTERS, ALL, ALLEXCEPT, KEEPFILTERS เพื่อควบคุมการกรองอย่างละเอียด มีพฤติกรรมพิเศษคือ context transition ที่เปลี่ยน row context เป็น filter context โดยอัตโนมัติ ทำให้เป็นเครื่องมือหลักในการสร้าง measure ที่ซับซ้อนและ calculated column ที่ต้องใช้ aggregation

Aggregation (1)
MINX

MINX ประเมินนิพจน์สำหรับทุกแถวของตาราง แล้วคืนค่าที่น้อยที่สุด ต่างจาก MIN ที่ใช้กับคอลัมน์โดยตรง MINX เหมาะกับการหาค่าต่ำสุดจากค่าที่คำนวณต่อแถว เช่น (Quantity × UnitPrice)

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่