Thep Excel

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

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

=CALENDARAUTO([<FiscalYearEndMonth>])

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
6/10

Difficulty
3/10

Usefulness
7/10

Syntax & Arguments

=CALENDARAUTO([<FiscalYearEndMonth>])

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

How it works

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

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

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

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

Examples

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

Date Table =
CALENDARAUTO()

Result:

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

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

=Date Table (Fiscal) =
CALENDARAUTO(3)

Result:

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

ตัวอย่างที่ 3: เพิ่มคอลัมน์วิเคราะห์ด้วย ADDCOLUMNS
Date Table (With Year) = VAR BaseCalendar = CALENDARAUTO() RETURN ADDCOLUMNS( BaseCalendar, "Year", YEAR([Date]), "Month", MONTH([Date]), "Quarter", ROUNDUP(MON…
CALENDARAUTO ส่งคืนตารางที่มีคอลัมน์ Date เพียงอย่างเดียว ใช้ ADDCOLUMNS เพิ่มคอลัมน์ช่วย (Year/Month/Quarter) สำหรับสนับสนุนรายงาน Time Intelligence
DAX Formula:

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

Result:

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

ตัวอย่างที่ 4: จัดการเมื่อมี Outlier วันที่
Date Table (Safe) = VAR MinValidDate = DATE(2015, 1, 1) VAR MaxValidDate = TODAY() RETURN CALENDAR(MinValidDate, MaxValidDate)
เมื่อข้อมูลมีค่าวันที่ผิดปกติ ให้ใช้ CALENDAR แทน CALENDARAUTO เพื่อควบคุมช่วงเวลาให้เหมาะสม
DAX Formula:

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

Result:

ตารางวันที่ที่ถูกควบคุม ตั้งแต่ 1 มกราคม 2015 ถึง วันนี้

FAQs

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

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

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

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

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

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

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

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

Resources & Related

Additional Notes

CALENDARAUTO ใช้สร้างตารางวันที่แบบอัตโนมัติ โดยสแกนคอลัมน์วันที่ในโมเดล (ไม่รวม calculated columns/tables) เพื่อหาช่วงปีที่ครอบคลุมข้อมูล แล้วสร้างตารางวันที่ให้ครอบคลุมตั้งแต่วันแรกของปีบัญชีที่บรรจุ MinDate จนถึงวันสุดท้ายของปีบัญชีที่บรรจุ MaxDate เหมาะกับการเริ่มต้นทำ Time Intelligence แบบรวดเร็ว

ส่วนตัวผม CALENDARAUTO เป็นเหมือน “smart default” ของ DAX – เอาแล้วสร้างให้อย่างรวดเร็ว ปัญหาคือถ้าข้อมูลมี outlier วันที่ (เช่น ปีเก่ามากไม่คาดคิด) ตารางจะยาวเกินจำเป็น และสิ้นเปลือง storage ได้ 😎 เลยต้องตรวจสอบข้อมูลก่อน

ส่วนที่เจ๋งคือฟังก์ชันนี้เรียก CALENDAR ภายในตัว โดยคำนวณ MinDate/MaxDate อัตโนมัติจากข้อมูลที่นำเข้า ถ้าข้อมูลสะอาดก็ได้ตารางที่ดีในไม่กี่วินาที

Leave a Reply

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