---
title: TOTALYTD – ยอดสะสมตั้งแต่ต้นปี (Year-to-Date)
url: https://www.thepexcel.com/functions/dax/time-intelligence/totalytd-dax/
type: function-explainer
program: DAX
syntax: "TOTALYTD(<Expression>, <Dates> [, <Filter>] [, <YearEndDate>])"
date: 2025-12-19
scores:
  popularity: 8
  difficulty: 4
  usefulness: 9
---

# TOTALYTD – ยอดสะสมตั้งแต่ต้นปี (Year-to-Date)

> คำนวณยอดสะสมตั้งแต่ต้นปี (Year-to-Date) ของ expression

## คำอธิบาย

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

## Syntax

```excel
TOTALYTD(&lt;Expression&gt;, &lt;Dates&gt; [, &lt;Filter&gt;] [, &lt;YearEndDate&gt;])
```

**Variant**

```excel
TOTALYTD(&lt;Expression&gt;, &lt;Dates&gt;)
```

รูปแบบพื้นฐาน - คำนวณ YTD ตามปีปฏิทิน (สิ้นสุด 31 ธันวาคม)

**Variant**

```excel
TOTALYTD(&lt;Expression&gt;, &lt;Dates&gt;, &lt;Filter&gt;)
```

รูปแบบที่มีเงื่อนไขเพิ่มเติม - กรองข้อมูลก่อนคำนวณ YTD

**Variant**

```excel
TOTALYTD(&lt;Expression&gt;, &lt;Dates&gt;, , &lt;YearEndDate&gt;)
```

รูปแบบ fiscal year - ระบุวันสิ้นปีงบประมาณเช่น "06/30"

**Variant**

```excel
TOTALYTD(&lt;Expression&gt;, &lt;Dates&gt;, &lt;Filter&gt;, &lt;YearEndDate&gt;)
```

รูปแบบเต็ม - ใช้ทั้ง filter และ fiscal year end date

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| Expression | Yes | expression |  | Expression ที่ต้องการคำนวณยอดสะสม YTD เช่น SUM(Sales[Amount]) หรือ [Total Sales] สามารถเป็น measure reference หรือ aggregation expression ใดๆ ที่ return scalar value |
| Dates | Yes | column |  | Column ที่เก็บวันที่จาก Date table ที่มีวันที่ต่อเนื่องครบถ้วนตลอดทั้งปี เช่น 'Date'[Date] หรือ DateTime[DateKey] ต้อง mark as date table ในโมเดลเพื่อให้ time intelligence ทำงานถูกต้อง |
| Filter | No | expression | ไม่มีการกรองเพิ่มเติม | Boolean expression หรือ table expression ที่ใช้กรองข้อมูลเพิ่มเติมก่อนคำนวณ YTD เช่น Products[Category] = "Electronics" ทำงานภายใน CALCULATE context ตาม CALCULATE function rules |
| YearEndDate | No | text | "12/31" (ปีปฏิทิน) | String literal ที่ระบุวันสิ้นปีงบประมาณในรูปแบบ "MM/DD" เช่น "06/30" สำหรับปีงบประมาณที่สิ้นสุด 30 มิถุนายน หรือ "03/31" สำหรับสิ้นสุด 31 มีนาคม ไม่ต้องระบุปี (ปีจะถูกละเว้น) ต้องเป็นข้อความคงที่ไม่สามารถใช้ column หรือ variable ได้ |

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

### ยอดขาย YTD สำหรับ KPI Dashboard

สร้าง measure ยอดขายสะสมตั้งแต่ต้นปีเพื่อแสดงใน dashboard และเปรียบเทียบกับเป้าหมายรายปี ช่วยให้เห็นความก้าวหน้าของยอดขายตลอดทั้งปีได้ชัดเจน

_เหมาะกับ:_ ytd-sales-kpi

### รายงานการเงินแบบ Fiscal Year

คำนวณรายได้หรือกำไรสะสมตามรอบปีงบประมาณที่เริ่มต้นไม่ใช่วันที่ 1 มกราคม เช่น องค์กรที่ใช้ปีงบประมาณเริ่ม 1 ก.ค. - 30 มิ.ย. สามารถระบุ YearEndDate เป็น "06/30"

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

### เปรียบเทียบยอดสะสมแต่ละหมวดหมู่

วิเคราะห์ยอดขายสะสม YTD ของแต่ละหมวดสินค้าหรือแต่ละภูมิภาค เพื่อเปรียบเทียบประสิทธิภาพการขายระหว่าง category หรือ region ต่างๆ

_เหมาะกับ:_ ytd-comparison

### Cumulative Metrics สำหรับ Time Series Analysis

แสดงกราฟเส้นของยอดสะสม YTD เทียบกับเดือนต่างๆ เพื่อดู trend การเติบโตของตัวเลขสำคัญตลอดทั้งปี เช่น ยอดขาย ลูกค้าใหม่ หรือ revenue

_เหมาะกับ:_ ytd-trend-analysis

### YTD with Filtering สำหรับ Product Category Analysis

คำนวณยอดสะสม YTD เฉพาะหมวดสินค้าหรือเฉพาะช่องทางการขายบางช่องทาง โดยใช้ Filter argument เพื่อจำกัดขอบเขตข้อมูลที่ต้องการวิเคราะห์

_เหมาะกับ:_ filtered-ytd

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ยอดขาย YTD พื้นฐาน (Foundation)

```excel
Sales YTD = 
TOTALYTD(
    SUM(Sales[Amount]),
    'Date'[Date]
)
```

**ผลลัพธ์:** `ยอดขายสะสมตั้งแต่ 1 มกราคมจนถึงวันที่ล่าสุดใน filter context`

ตัวอย่างพื้นฐานที่สุดของการใช้ TOTALYTD โดยรวมยอดขายทั้งหมดตั้งแต่วันแรกของปี (1 มกราคม) จนถึงวันที่ปัจจุบันใน context
.
สมมติว่าวันนี้เป็นวันที่ 31 มีนาคม 2024 measure นี้จะรวมยอดขายตั้งแต่ 1 ม.ค. - 31 มี.ค. 2024 ส่วนตัวผมใช้แบบนี้ใน KPI card บ่อยมากครับ 😎

### 2. ตัวอย่างที่ 2: YTD แบบปีงบประมาณ (Practical - Fiscal Year)

```excel
Sales YTD Fiscal = 
TOTALYTD(
    SUM(Sales[Amount]),
    'Date'[Date],
    ,
    "06/30"
)
```

**ผลลัพธ์:** `ยอดขายสะสมตามรอบปีงบประมาณที่สิ้นสุด 30 มิถุนายน`

สำหรับองค์กรที่มีปีงบประมาณเริ่มต้น 1 กรกฎาคม และสิ้นสุด 30 มิถุนายน โดยระบุ YearEndDate เป็น "06/30" เพื่อให้ระบบรู้ว่าต้นปีคือ 1 ก.ค.
.
สมมติว่าวันนี้เป็น 31 ตุลาคม 2024 measure นี้จะรวมยอดขายตั้งแต่ 1 ก.ค. 2024 - 31 ต.ค. 2024 ซึ่งเป็น fiscal YTD ที่ถูกต้องตามรอบปีงบประมาณครับ 💡

### 3. ตัวอย่างที่ 3: YTD พร้อม Filter (Advanced - With Filtering)

```excel
Electronics YTD = 
TOTALYTD(
    SUM(Sales[Amount]),
    'Date'[Date],
    Products[Category] = "Electronics"
)
```

**ผลลัพธ์:** `ยอดขายสะสม YTD เฉพาะหมวด Electronics`

ใช้ Filter argument เพื่อคำนวณ YTD เฉพาะหมวดสินค้า Electronics โดยกรองข้อมูลก่อนคำนวณยอดสะสม
.
เหมือนกับการเขียน CALCULATE(SUM(Sales[Amount]), DATESYTD('Date'[Date]), Products[Category] = "Electronics") สมมติว่าใน Q1 2024 มียอดขาย Electronics 3 เดือน (ม.ค. 5,000 / ก.พ. 7,000 / มี.ค. 8,000) ผลลัพธ์ ณ วันที่ 31 มี.ค. จะเป็น 20,000 ครับ

### 4. ตัวอย่างที่ 4: YTD เปรียบเทียบกับ Previous Year (Complex - Multi-Step)

```excel
YTD vs PY = 
VAR CurrentYTD = 
    TOTALYTD(SUM(Sales[Amount]), 'Date'[Date])
VAR PreviousYTD = 
    CALCULATE(
        TOTALYTD(SUM(Sales[Amount]), 'Date'[Date]),
        SAMEPERIODLASTYEAR('Date'[Date])
    )
VAR Growth = CurrentYTD - PreviousYTD
RETURN
    DIVIDE(Growth, PreviousYTD, 0)
```

**ผลลัพธ์:** `อัตราการเติบโตของยอดสะสม YTD เทียบกับปีก่อนหน้า (เปอร์เซ็นต์)`

ใช้ VAR...RETURN pattern เพื่อสร้าง measure ที่ซับซ้อน โดยคำนวณ CurrentYTD ด้วย TOTALYTD จากนั้นคำนวณ PreviousYTD โดยใช้ CALCULATE ร่วมกับ SAMEPERIODLASTYEAR เพื่อเลื่อน context ไปปีก่อนหน้า
.
แล้วคำนวณ Growth และ return เป็นเปอร์เซ็นต์การเติบโต สมมติ CurrentYTD = 150,000 และ PreviousYTD = 120,000 ผลลัพธ์จะเป็น 0.25 หรือ 25% growth ส่วนตัวผมใช้ pattern นี้บ่อยมากตอน year-over-year analysis ครับ 😎

### 5. ตัวอย่างที่ 5: YTD แบบ Fiscal Year พร้อม Filter (Real-World Complex)

```excel
Active Customers YTD Fiscal = 
VAR ActiveCustomers = 
    DISTINCTCOUNT(Sales[CustomerID])
VAR Result = 
    TOTALYTD(
        ActiveCustomers,
        'Date'[Date],
        Customers[Status] = "Active",
        "03/31"
    )
RETURN
    Result
```

**ผลลัพธ์:** `จำนวน Active Customers สะสม YTD ตามปีงบประมาณ (สิ้นสุด 31 มีนาคม)`

ตัวอย่าง real-world ที่ใช้ทั้ง VAR, TOTALYTD, fiscal year และ filter ร่วมกัน เพื่อนับจำนวนลูกค้าที่ active สะสมตั้งแต่ต้นปีงบประมาณ (1 เมษายน) จนถึงปัจจุบัน
.
โดยกรองเฉพาะลูกค้าที่มี Status = "Active" และใช้ YearEndDate = "03/31" เพื่อให้ระบบรู้ว่าปีงบประมาณเริ่มต้น 1 เมษายนและสิ้นสุด 31 มีนาคม เหมาะสำหรับองค์กรที่ใช้ fiscal year แบบญี่ปุ่นหรืออินเดียครับ 💡

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

⚠️ ต้องมี Date table ที่ต่อเนื่องและถูก mark as date table ในโมเดลเพื่อให้ time intelligence function ทำงานถูกต้อง
.
💡 TOTALYTD เทียบเท่ากับ CALCULATE(expression, DATESYTD(dates)) ช่วยลดความซับซ้อนในการเขียน formula
.
🔍 สำหรับ fiscal year ที่ซับซ้อน (เช่น 4-4-5 calendar) แนะนำให้ใช้ calendar-based time intelligence แทน
.
⚡ Performance tip: ใช้ใน measure เท่านั้น หลีกเลี่ยงการใช้ใน calculated column เพื่อประหยัด memory และเพิ่มความเร็ว
.
ส่วนตัวผมใช้ TOTALYTD บ่อยมากตอนทำ financial reporting ครับ ที่เจ๋งคือมันทำงานได้เร็วและอ่านง่ายกว่าการเขียน CALCULATE ยาวๆ 😎

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

**Q: TOTALYTD ต่างจาก DATESYTD อย่างไร?**

DATESYTD เป็น table function ที่ return ตารางของวันที่ในช่วง year-to-date (เช่น 1 ม.ค. - 31 มี.ค.) ซึ่งต้องใช้ร่วมกับ CALCULATE เพื่อคำนวณค่า expression
.
ส่วน TOTALYTD เป็น syntax sugar ที่รวมทั้งสองอย่างเข้าด้วยกัน คือ return ค่าผลลัพธ์ของ expression ที่คำนวณแล้วโดยตรง ส่วนตัวผมชอบใช้ TOTALYTD มากกว่าครับ เพราะอ่านง่ายและเขียนสั้นกว่า 😎

**Q: YearEndDate ต้องใส่รูปแบบอะไร? ต้องระบุปีหรือไม่?**

YearEndDate เป็น string literal ที่ใส่เป็นรูปแบบ "MM/DD" เช่น "06/30" หรือ "03/31" โดยไม่ต้องระบุปี เพราะ DAX จะละเว้นปีโดยอัตโนมัติ
.
สามารถเขียนได้หลายรูปแบบเช่น "6/30", "Jun 30", "30 June" ตาม locale ของ workbook แต่แนะนำให้ใช้ "MM/DD" เพื่อความชัดเจนครับ

**Q: ถ้า Date table ไม่มีวันที่บางวัน TOTALYTD จะทำงานถูกต้องไหม?**

Date table ต้องมีวันที่ต่อเนื่องครบถ้วนตลอดทั้งปี (ไม่มีวันที่ขาดหาย) เพื่อให้ time intelligence function เช่น TOTALYTD, DATESYTD และ CALCULATE ทำงานได้ถูกต้อง
.
หากวันที่ขาดหายหรือไม่ต่อเนื่อง ผลลัพธ์อาจคำนวณผิดพลาดหรือข้ามช่วงเวลาไป ควร mark as date table ในโมเดลเพื่อให้ DAX engine ตรวจสอบ continuity ได้ครับ 💡

**Q: สามารถใช้ TOTALYTD ร่วมกับ CALCULATE ได้หรือไม่?**

ได้ แต่ไม่แนะนำให้ nest TOTALYTD ภายใน CALCULATE เพราะ TOTALYTD เองก็เป็น wrapper ของ CALCULATE อยู่แล้ว
.
การ nest อาจทำให้เกิด filter context ที่ซับซ้อนและผลลัพธ์ผิดพลาด ถ้าต้องการ filter เพิ่มเติม แนะนำให้ใช้ Filter argument ของ TOTALYTD แทน หรือใช้ CALCULATE ร่วมกับ DATESYTD โดยตรงครับ

**Q: TOTALYTD ใช้กับ calculated column ได้หรือไม่?**

สามารถใช้ได้ แต่ไม่แนะนำเพราะ calculated column คำนวณที่ row context และจะคำนวณ YTD สำหรับทุกแถว ซึ่งอาจไม่ได้ผลลัพธ์ตามที่ต้องการและใช้ memory มาก
.
แนะนำให้ใช้ TOTALYTD ใน measure เท่านั้น เพื่อให้คำนวณ dynamic ตาม filter context และประหยัด memory ครับ 😎

**Q: ถ้าต้องการ YTD สำหรับปีที่แล้วต้องทำอย่างไร?**

ใช้ CALCULATE ร่วมกับ SAMEPERIODLASTYEAR เพื่อเลื่อน filter context ไปปีที่แล้ว เช่น CALCULATE(TOTALYTD(SUM(Sales[Amount]), 'Date'[Date]), SAMEPERIODLASTYEAR('Date'[Date]))
.
จะได้ยอดสะสม YTD ของปีที่แล้วในช่วงเดือนเดียวกัน ส่วนตัวผมใช้บ่อยมากตอนต้องเปรียบเทียบ year-over-year growth ครับ 💡

**Q: TOTALYTD สามารถใช้กับ fiscal quarter ที่เริ่มไม่ใช่วันแรกของเดือนได้หรือไม่?**

YearEndDate ของ TOTALYTD รองรับเฉพาะการกำหนดวันสิ้นปี ไม่รองรับการกำหนด fiscal quarter start date ที่ไม่ใช่วันแรกของเดือน
.
ถ้าต้องการใช้ fiscal calendar แบบ 4-4-5 หรือ ISO calendar แนะนำให้สร้าง custom calendar table และใช้ CALCULATE ร่วมกับ DATESBETWEEN หรือใช้ calendar-based time intelligence functions แทนครับ

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

- [DATESYTD – ชุดวันที่ตั้งแต่ต้นปี (YTD) เพื่อใช้เป็นตัวกรองเวลา](https://www.thepexcel.com/functions/dax/time-intelligence/datesytd-dax/)
- [TOTALMTD – ยอดสะสมตั้งแต่ต้นเดือน (MTD)](https://www.thepexcel.com/functions/dax/time-intelligence/totalmtd-dax/)
- [TOTALQTD – ยอดสะสมตั้งแต่ต้นไตรมาส (Quarter-to-Date)](https://www.thepexcel.com/functions/dax/time-intelligence/totalqtd-dax/)
- [CALCULATE – ฟังก์ชันหลักของ DAX ที่ควบคุม Filter Context](https://www.thepexcel.com/functions/dax/filter/calculate-dax/)
- [STARTOFYEAR – วันแรกของปีในบริบทตัวกรองปัจจุบัน](https://www.thepexcel.com/functions/dax/time-intelligence/startofyear-dax/)
- [ENDOFYEAR – ชุดวันที่ของวันสิ้นปีในบริบทปัจจุบัน](https://www.thepexcel.com/functions/dax/time-intelligence/endofyear-dax/)
- [DATESBETWEEN – สร้างช่วงวันที่ระหว่างวันเริ่มและวันสิ้นสุด](https://www.thepexcel.com/functions/dax/time-intelligence/datesbetween-dax/)
- [SAMEPERIODLASTYEAR – คืนช่วงเวลาเดียวกันของปีก่อนหน้า (Year-over-Year)](https://www.thepexcel.com/functions/dax/time-intelligence/sameperiodlastyear-dax/)
- [FILTER – กรองตารางด้วยเงื่อนไขที่ซับซ้อน (Iterator Function)](https://www.thepexcel.com/functions/dax/filter/filter-dax/)
- [ALL – ลบ Filter หรือคืนค่าทุกแถว](https://www.thepexcel.com/functions/dax/filter/all-dax/)
- [DIVIDE – ฟังก์ชัน DAX](https://www.thepexcel.com/functions/dax/math-and-trig/divide-dax/)
- [DISTINCTCOUNT – นับจำนวนค่าเอกลักษณ์ในคอลัมน์](https://www.thepexcel.com/functions/dax/aggregation/distinctcount-dax/)

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

- [Microsoft Learn: TOTALYTD function](https://learn.microsoft.com/en-us/dax/totalytd-function-dax) _(documentation)_
- [DAX Guide: TOTALYTD](https://dax.guide/totalytd/) _(documentation)_
- [SQLBI: Introducing calendar-based time intelligence in DAX](https://www.sqlbi.com/articles/introducing-calendar-based-time-intelligence-in-dax/) _(guide)_
- [SQLBI: Time Intelligence in DAX](https://www.sqlbi.com/topics/time-intelligence/) _(guide)_

---

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