---
title: STARTOFYEAR – วันแรกของปีในบริบทตัวกรองปัจจุบัน
url: https://www.thepexcel.com/functions/dax/time-intelligence/startofyear-dax/
type: function-explainer
program: DAX
syntax: "STARTOFYEAR(<Dates> [, <YearEndDate>])"
date: 2025-12-13
updated: 2025-12-25
scores:
  popularity: 6
  difficulty: 3
  usefulness: 6
---

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

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

## คำอธิบาย

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

## Syntax

```excel
STARTOFYEAR(&lt;Dates&gt; [, &lt;YearEndDate&gt;])
```

## Arguments

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

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

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

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

_เหมาะกับ:_ value-at-year-start

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

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

_เหมาะกับ:_ fiscal-year-start

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ดึงวันเริ่มปีเป็นค่าเดี่ยว (Scalar)

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

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

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

### 2. ตัวอย่างที่ 2: Inventory Balance ณ วันแรกปี

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

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

ฟังก์ชัน time intelligence STARTOFYEAR ทำการ context transition เปลี่ยน row context เป็น filter context ที่จุด start of year ทำให้ measure คำนวณค่าที่วันแรกปี

### 3. ตัวอย่างที่ 3: Fiscal Year (ปีงบประมาณ สิ้น 30 มิ.ย.)

```excel
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 ณ จุดนั้น`

YearEndDate "06/30" บอกให้ DAX รู้ว่าปีงบประมาณจบ 30 มิ.ย. จึงคำนวณหา start ของปีนั้นเป็น 1 มี.ค. ของปีที่แล้ว

### 4. ตัวอย่างที่ 4: Year-to-Date Growth (เทียบกับ Start of Year)

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

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

ใช้ VAR เก็บค่า balance ที่ start of year แล้วเปรียบเทียบกับค่า current นี่คือ pattern ทั่วไปสำหรับ year-to-date analysis

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

- ผมแนะนำให้ตรวจสอบ Date Table ให้ครบถ้วน มี column วันที่ที่เป็น Data Type "Date" และกำหนดเป็น Date Table แล้ว ต้อง Mark as Date Table ใน Power BI นะ ไม่งั้นฟังก์ชัน time intelligence จะไม่ทำงาน

- เมื่อใช้ YearEndDate สำหรับ fiscal year ให้แน่ใจว่า Date Table ครอบคลุมทั้ง fiscal year ด้วย เช่น fiscal year 1 มี.ค. 2024 - 29 กุมพ. 2025 Date Table ต้องมีวันตั้งแต่ 1 มี.ค. 2024 เป็นต้นไป

- ถ้าผลลัพธ์ blank หรือไม่ถูกต้อง ให้ใช้ MINX ดึงค่าออกมาเป็น scalar ก่อน แล้ว debug ค่า relationship ทั้งหมด บ่อยครั้ง relationship ระหว่าง fact table กับ Date Table ขาดหรือไม่ถูกต้อง

- ส่วนตัวผมชอบใช้ VAR กับ STARTOFYEAR เพื่อความชัดเจน เช่น VAR StartDate = MINX(STARTOFYEAR(...), ...) แล้ว RETURN ทำให้ debug ง่ายกว่า

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

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

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

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

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

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

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

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

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

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

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

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

- endofyear
- startofquarter
- startofmonth
- datesytd
- calculate
- minx
- lastdate
- datesbetween

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

- [DAX.guide - STARTOFYEAR](https://dax.guide/startofyear/) _(guide)_
- [SQLBI - Time Intelligence Functions](https://www.sqlbi.com/articles/time-intelligence-functions-in-dax/) _(guide)_
- [Microsoft Learn - Date and Time Functions](https://learn.microsoft.com/en-us/dax/date-and-time-functions-dax) _(official)_

---

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