---
title: CALENDARAUTO – สร้างตารางวันที่อัตโนมัติจากช่วงวันที่ในโมเดล
url: https://www.thepexcel.com/functions/dax/date-and-time/calendarauto-dax/
type: function-explainer
program: DAX
syntax: "CALENDARAUTO([<FiscalYearEndMonth>])"
date: 2025-12-13
updated: 2025-12-24
scores:
  popularity: 6
  difficulty: 3
  usefulness: 7
---

# CALENDARAUTO – สร้างตารางวันที่อัตโนมัติจากช่วงวันที่ในโมเดล

> CALENDARAUTO สร้างตารางวันที่อัตโนมัติโดยอิงช่วงวันที่ที่พบในโมเดล และสามารถกำหนดเดือนสิ้นสุดปีบัญชี

## คำอธิบาย

CALENDARAUTO สร้างตารางวันที่อัตโนมัติโดยอิงช่วงวันที่ที่พบในโมเดล และสามารถกำหนดเดือนสิ้นสุดปีบัญชีได้ เหมาะกับการสร้าง Date table แบบเร็ว ๆ แต่ควรระวังค่าวันที่ผิดปกติในข้อมูล

## Syntax

```excel
CALENDARAUTO([&lt;FiscalYearEndMonth&gt;])
```

**Variant**

```excel
CALENDARAUTO()
```

สร้างตารางวันที่แบบอัตโนมัติตามปีปฏิทิน

**Variant**

```excel
CALENDARAUTO(&lt;FiscalYearEndMonth&gt;)
```

กำหนดเดือนสิ้นสุดปีบัญชี (1-12) เพื่อให้ช่วงปีอิงปีบัญชี

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| FiscalYearEndMonth | No | number | 12 | เดือนสิ้นสุดปีบัญชี (1-12) เช่น 3 หมายถึงสิ้นสุดมีนาคม หากไม่ระบุจะใช้ค่า 12 (ธันวาคม) หรือตัวตั้งค่าเริ่มต้นของแม่แบบปฏิทิน |

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

### สร้าง Date table แบบรวดเร็ว

เริ่มต้นทำโมเดลเวลาโดยไม่ต้องระบุช่วงเอง

_เหมาะกับ:_ quick-date-table

### รองรับปีบัญชี

กำหนดเดือนสิ้นสุดปีบัญชีเพื่อให้ตารางครอบคลุมช่วงปีบัญชีครบ

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

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: สร้างตารางวันที่อัตโนมัติ (ปฏิทินปกติ)

```excel
Date Table =
CALENDARAUTO()
```

**ผลลัพธ์:** `ตารางวันที่ที่ครอบคลุมตั้งแต่ 1 มกราคม ของปีแรกจนถึง 31 ธันวาคม ของปีสุดท้าย ตามข้อมูลในโมเดล`

เรียก CALENDARAUTO() โดยไม่ระบุ FiscalYearEndMonth จึงใช้ค่าเริ่มต้น 12 (ธันวาคม) ฟังก์ชันจะสแกนคอลัมน์วันที่ทั้งหมดในโมเดล หาค่า Min/Max แล้อสร้างตารางครอบคลุมปีเต็มดั้งเดิม

### 2. ตัวอย่างที่ 2: ปีบัญชีสิ้นสุดมีนาคม

```excel
Date Table (Fiscal) =
CALENDARAUTO(3)
```

**ผลลัพธ์:** `ตารางวันที่ที่ครอบคลุมตั้งแต่ 1 เมษายน ของปีแรกจนถึง 31 มีนาคม ของปีสุดท้าย`

กำหนด FiscalYearEndMonth = 3 เพื่อให้ช่วงปี (fiscal year) เริ่มต้นเมษายนและสิ้นสุดมีนาคม สำหรับองค์กรที่ใช้ปีบัญชีไม่ตรงกับปฏิทิน

### 3. ตัวอย่างที่ 3: เพิ่มคอลัมน์วิเคราะห์ด้วย ADDCOLUMNS

```excel
Date Table (With Year) =
VAR BaseCalendar = CALENDARAUTO()
RETURN
ADDCOLUMNS(
    BaseCalendar,
    "Year", YEAR([Date]),
    "Month", MONTH([Date]),
    "Quarter", ROUNDUP(MONTH([Date])/3, 0)
)
```

**ผลลัพธ์:** `ตารางวันที่พร้อมคอลัมน์ Year, Month, Quarter สำหรับใช้งานการวิเคราะห์`

CALENDARAUTO ส่งคืนตารางที่มีคอลัมน์ Date เพียงอย่างเดียว ใช้ ADDCOLUMNS เพิ่มคอลัมน์ช่วย (Year/Month/Quarter) สำหรับสนับสนุนรายงาน Time Intelligence

### 4. ตัวอย่างที่ 4: จัดการเมื่อมี Outlier วันที่

```excel
Date Table (Safe) =
VAR MinValidDate = DATE(2015, 1, 1)
VAR MaxValidDate = TODAY()
RETURN
CALENDAR(MinValidDate, MaxValidDate)
```

**ผลลัพธ์:** `ตารางวันที่ที่ถูกควบคุม ตั้งแต่ 1 มกราคม 2015 ถึง วันนี้`

เมื่อข้อมูลมีค่าวันที่ผิดปกติ ให้ใช้ CALENDAR แทน CALENDARAUTO เพื่อควบคุมช่วงเวลาให้เหมาะสม

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

- หลังสร้างตารางวันที่ด้วย CALENDARAUTO แล้ว ให้ Mark as Date Table ในโมเดล (Power BI: Model view) เพื่อให้ฟังก์ชัน Time Intelligence เช่น DATESYTD, SAMEPERIODLASTYEAR ทำงานได้

- ใช้ VAR เพื่อเก็บผลลัพธ์ CALENDARAUTO ถ้าต้องสร้างคอลัมน์หลายคอลัมน์ จะช่วยอ่านโค้ดได้ชัดเจนและลดการคำนวณซ้ำ

- ตรวจสอบข้อมูลวันที่ด้วย MIN() และ MAX() ก่อนเลือกใช้ CALENDARAUTO เพื่อมั่นใจว่าไม่มี outlier ที่ไม่คาดคิด

- ถ้าต้องการปีบัญชีไม่ตรงกับปฏิทิน ให้ระบุ FiscalYearEndMonth อย่างชัดเจน เช่น CALENDARAUTO(6) สำหรับปีบัญชีสิ้นสุดมิถุนายน

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

**Q: ทำไม CALENDARAUTO บางครั้งสร้างตารางยาวมาก?**

มักเกิดจากข้อมูลมีค่าวันที่หลุดช่วง (outlier) เช่น ปีเก่ามากไม่คาดคิด หรือมีข้อมูลทดสอบในอดีต ทำให้ช่วง MinDate/MaxDate ที่สแกนได้กว้างเกินจำเป็น ตรวจสอบข้อมูลด้วย MIN/MAX ก่อน หรือใช้ CALENDAR กับ hardcoded dates เพื่อควบคุมให้เหมาะสม

**Q: ควรใช้ CALENDAR หรือ CALENDARAUTO ดี?**

ถ้าต้องการควบคุมช่วงเวลาให้แน่นอนให้ใช้ CALENDAR (ระบุ start/end date โดยชัดเจน) แต่ถ้าต้องการเริ่มเร็วและข้อมูลวันที่ในโมเดลสะอาด CALENDARAUTO จะสะดวกกว่า โดยควรตรวจสอบช่วงเวลาที่สร้างขึ้นหลังจาก Load Model

**Q: ใช้ CALENDARAUTO ใน Calculated Column ได้หรือไม่?**

ทำได้ แต่ไม่แนะนำ เพราะ Calculated Column มี row context และ CALENDARAUTO ส่งคืนตารางที่ใช้ filter context ถ้าต้องหาค่า Date ในแต่ละแถวให้ใช้ฟังก์ชันอื่น เช่น [Date] หรือ RELATED()

**Q: CALENDARAUTO รองรับ DirectQuery หรือไม่?**

ไม่ รองรับเฉพาะ Import Mode เท่านั้น ใน DirectQuery ต้องสร้าง Date table จากแหล่งข้อมูลหรือใช้ CALENDAR ด้วย hardcoded dates

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

- calendar
- addcolumns
- [ฟังก์ชัน YEAR ใน DAX](https://www.thepexcel.com/functions/dax/date-and-time/year-dax/)
- [MONTH (DAX) – ดึงเลขเดือนจากค่า datetime](https://www.thepexcel.com/functions/dax/date-and-time/month-dax/)
- datesytd
- [DATE – สร้างวันที่จากปี เดือน วัน](https://www.thepexcel.com/functions/dax/date-and-time/date-dax/)

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

- [Microsoft Learn: CALENDARAUTO](https://learn.microsoft.com/en-us/dax/calendarauto-function-dax) _(official)_
- [DAX Guide: CALENDARAUTO](https://dax.guide/calendarauto/) _(guide)_
- [Microsoft Learn: CALENDAR](https://learn.microsoft.com/en-us/dax/calendar-function-dax) _(official)_
- [SQLBI: Time Intelligence in DAX](https://www.sqlbi.com/articles/time-intelligence-in-dax/) _(guide)_

---

_Source: [https://www.thepexcel.com/functions/dax/date-and-time/calendarauto-dax/](https://www.thepexcel.com/functions/dax/date-and-time/calendarauto-dax/)_
