Thep Excel

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

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

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

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

อัปเดต 13 December 2025

Syntax & Arguments

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

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

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 กับตารางอื่น มันจะให้ผลลัพธ์ที่ผิด ต้องระวังเรื่องนี้

How it works

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

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

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

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

Examples

ตัวอย่างที่ 1: ดึงวันเริ่มปีเป็นค่าเดี่ยว (Scalar)วันแรกของปี = MINX(STARTOFYEAR('Date'[Date]), 'Date'[Date])

STARTOFYEAR คืนตาราง 1 แถว ใช้ MINX ดึงค่าวันที่ออกมาเป็นค่าเดี่ยว เหมาะสำหรับแสดงหรือเปรียบเทียบ

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

ผลลัพธ์ผลลัพธ์: วันที่วันแรกของปีตามบริบท 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 คำนวณค่าที่วันแรกปี

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

ผลลัพธ์ผลลัพธ์: จำนวน 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 มี.ค. ของปีที่แล้ว

fx
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")
)

ผลลัพธ์ผลลัพธ์: วันแรกของปีงบประมาณ (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

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

ผลลัพธ์ผลลัพธ์: ความเพิ่มขึ้นของ 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

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

ฟังก์ชันนี้STARTOFYEARTime Intelligence
Time Intelligence (9)
DATESBETWEEN

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

DATESYTD

DATESYTD คืนตารางวันที่ของช่วงตั้งแต่ต้นปีถึงวันที่สุดท้ายที่มองเห็นใน Filter Context ใช้เป็นตัวกรองเวลาใน CALCULATE สำหรับการคำนวณยอดสะสมตั้งแต่ต้นปี รองรับทั้งปีปฏิทินและปีบัญชี (Fiscal Year) ด้วย YearEndDate argument

ENDOFYEAR

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

LASTDATE

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

OPENINGBALANCEYEAR

OPENINGBALANCEYEAR คำนวณค่า Expression ณ วันแรกของปี โดยดึงค่าจากวันสิ้นปีปีก่อนหน้า เหมาะสำหรับการหา opening balance ของคงเหลือ บัญชี สต็อก และค่าที่วัดได้แค่ที่จุดเวลาเดียว

STARTOFMONTH

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

STARTOFQUARTER

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

STARTOFWEEK

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

TOTALYTD

TOTALYTD คำนวณยอดสะสมตั้งแต่ต้นปี (Year-to-Date) ของ expression ใดๆ โดยอิงจาก Date table และสามารถกำหนด fiscal year end date เพื่อรองรับปีงบประมาณที่ไม่ตรงกับปีปฏิทินได้
.
ส่วนตัวผมใช้บ่อยมากตอนต้องวิเคราะห์ยอดขาย KPI และรายงานทางการเงินที่ต้องการติดตามความก้าวหน้าตลอดทั้งปีครับ

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

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