Thep Excel

STARTOFYEAR – วันแรกของปีในบริบทตัวกรองปัจจุบัน

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

=STARTOFYEAR(<Dates> [, <YearEndDate>])

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
6/10

Difficulty
3/10

Usefulness
6/10

Syntax & Arguments

=STARTOFYEAR(<Dates> [, <YearEndDate>])

Argument Type Required Default Description
Dates column or table Yes คอลัมน์วันที่ หรือ table expression ที่มีคอลัมน์วันที่ต่อเนื่อง ปกติจะมาจากตาราง Date Table ที่มีการกำหนดให้เป็น Date Table แล้ว
YearEndDate text Optional "12/31" ระบุวันสิ้นปี (fiscal year end) ในรูปแบบ “MM/DD” เช่น “06/30” สำหรับปีงบประมาณที่จบ 30 มิ.ย. ถ้าไม่ระบุ ค่าเริ่มต้นคือ “12/31” (ปีปฏิทิน)

How it works

คำนวณค่า ณ วันแรกของปี

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

รองรับปีงบประมาณที่สิ้นสุดไม่ใช่ 31 ธ.ค.

กำหนด YearEndDate เพื่อให้วันเริ่มปีถูกต้องตามรอบปีงบประมาณ

Examples

ตัวอย่างที่ 1: ดึงวันเริ่มปีเป็นค่าเดี่ยว (Scalar)
วันแรกของปี = MINX(STARTOFYEAR('Date'[Date]), 'Date'[Date])
STARTOFYEAR คืนตาราง 1 แถว ใช้ MINX ดึงค่าวันที่ออกมาเป็นค่าเดี่ยว เหมาะสำหรับแสดงหรือเปรียบเทียบ
DAX Formula:

วันแรกของปี = MINX(STARTOFYEAR('Date'[Date]), 'Date'[Date])

Result:

ผลลัพธ์: วันที่วันแรกของปีตามบริบท filter ปัจจุบัน เช่น 2024-01-01

ตัวอย่างที่ 2: Inventory Balance ณ วันแรกปี
Inventory Start of Year = VAR CurrentYear = SELECTEDVALUE('Date'[Year], YEAR(TODAY())) RETURN CALCULATE( SUM('Inventory'[Quantity]), STARTOFYEAR('Date'[Date]) )
ฟังก์ชัน time intelligence STARTOFYEAR ทำการ context transition เปลี่ยน row context เป็น filter context ที่จุด start of year ทำให้ measure คำนวณค่าที่วันแรกปี
DAX Formula:

Inventory Start of Year =
VAR CurrentYear = SELECTEDVALUE('Date'[Year], YEAR(TODAY()))
RETURN
CALCULATE(
    SUM('Inventory'[Quantity]),
    STARTOFYEAR('Date'[Date])
)

Result:

ผลลัพธ์: จำนวน inventory ณ วันแรกของปี ไม่ได้รวมข้ามเวลา เหมาะกับ semi-additive

ตัวอย่างที่ 3: Fiscal Year (ปีงบประมาณ สิ้น 30 มิ.ย.)
Account Balance FY Start = MINX( STARTOFYEAR('Date'[Date], "06/30"), 'Date'[Date] ) หรือใช้ใน CALCULATE: Account Balance FY Start (Measure) = CALCULATE( [Accoun…
YearEndDate "06/30" บอกให้ DAX รู้ว่าปีงบประมาณจบ 30 มิ.ย. จึงคำนวณหา start ของปีนั้นเป็น 1 มี.ค. ของปีที่แล้ว
DAX Formula:

Account Balance FY Start =
MINX(
    STARTOFYEAR('Date'[Date], "06/30"),
    'Date'[Date]
)

หรือใช้ใน CALCULATE:
Account Balance FY Start (Measure) =
CALCULATE(
    [Account Balance],
    STARTOFYEAR('Date'[Date], "06/30")
)

Result:

ผลลัพธ์: วันแรกของปีงบประมาณ (1 มี.ค. ในกรณีนี้) หรือค่า Account Balance ณ จุดนั้น

ตัวอย่างที่ 4: Year-to-Date Growth (เทียบกับ Start of Year)
YTD Growth Amount = VAR StartYearBalance = CALCULATE( [Balance], STARTOFYEAR('Date'[Date]) ) VAR CurrentBalance = [Balance] RETURN CurrentBalance - StartYearBal…
ใช้ VAR เก็บค่า balance ที่ start of year แล้วเปรียบเทียบกับค่า current นี่คือ pattern ทั่วไปสำหรับ year-to-date analysis
DAX Formula:

YTD Growth Amount =
VAR StartYearBalance = 
    CALCULATE(
        [Balance],
        STARTOFYEAR('Date'[Date])
    )
VAR CurrentBalance = [Balance]
RETURN
CurrentBalance - StartYearBalance

Result:

ผลลัพธ์: ความเพิ่มขึ้นของ balance จากต้นปีถึงวันปัจจุบัน

FAQs

STARTOFYEAR ต่างจาก STARTOFMONTH, STARTOFQUARTER อย่างไร?

พวกมันต่างกันแค่ช่วงเวลา ครับ STARTOFMONTH หาวันแรกของเดือนในบริบท filter ปัจจุบัน STARTOFQUARTER หาวันแรกของไตรมาส ส่วน STARTOFYEAR หาวันแรกของปี โครงสร้างและการทำงานเหมือนกันหมด ใช้ VAR กับ MINX ได้เหมือนกัน

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

คืนค่าเป็นตาราง 1 แถว (single-row table) ถ้าต้องการค่าเดี่ยว (scalar) ให้ใช้ MINX หรือ MAXX ดึงออกมา เช่น MINX(STARTOFYEAR(‘Date'[Date]), ‘Date'[Date]) ในที่สุดได้วันที่เป็นค่าเดี่ยว

ทำไม Date Table ต้องครบถ้วนถึง 1 มค. ของแต่ละปี?

เพราะ STARTOFYEAR ค้นหาวันแรกของปี ถ้า Date Table ไม่มีวันแรกปี DAX ไม่สามารถหาจุดเริ่มได้ ผลลัพธ์อาจจะ blank หรือไม่ถูกต้อง ฉันเสมอให้สร้าง Date Table ตั้งแต่ 1 มค. ของปีแรก ถึง 31 ธ.ค. ของปีสุดท้าย

YearEndDate รูปแบบ "MM/DD" ตัวอักษรหลังสุดมี "00" หรือไม่?

ใช้ “MM/DD” เช่น “06/30” สำหรับสิ้นปี 30 มิ.ย. หรือ “03/31” สำหรับสิ้นปี 31 มี.ค. ม.ค. คือ 01 ธ.ค. คือ 12 ลำดับเดือนแบบสากล (1-12)

STARTOFYEAR ใช้ได้กับ Power BI Desktop และ Analysis Services ไหม?

ใช้ได้ครับ เป็น time intelligence function ที่ใช้ได้ใน Power BI Desktop, Power Pivot, และ Analysis Services ตราบใดที่มี Date Table ที่ถูกกำหนดให้เป็น Date Table

Resources & Related

Additional Notes

STARTOFYEAR คือฟังก์ชันที่ค้นหาวันเริ่มต้นของปี โดยคืนค่าเป็นตาราง 1 แถว (single-row table) มีคอลัมน์วันที่ที่เป็นวันแรกของปีในบริบท filter ปัจจุบัน อันที่จริง มันหักออกตัวกรองทั้งหมดจากคอลัมน์วันที่ แล้วหาวันเริ่มปีของช่วงที่เหลือ

ที่เจ๋งคือ STARTOFYEAR จัดการกับ fiscal year ได้ด้วย ถ้างบประมาณจบ 30 มิ.ย. แทน 31 ธ.ค. ก็ใส่ YearEndDate = “06/30” มันจะหาวันเริ่มปีงบประมาณให้ ผมเห็นมันใช้บ่อยสำหรับ semi-additive measure เช่น Inventory Balance หรือ Account Balance ณ วันแรกปี ซึ่งไม่สามารถรวมข้ามเวลาได้

ส่วนตัวผมมองว่า STARTOFYEAR เป็นอีกฟังก์ชัน time intelligence ที่ต้องใช้กับ Date Table ที่ถูกต้อง ถ้า Date Table ไม่ครบถ้วน หรือไม่มี relationship กับตารางอื่น มันจะให้ผลลัพธ์ที่ผิด ต้องระวังเรื่องนี้

Leave a Reply

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