DATESINPERIOD คืนตารางวันที่แบบเคลื่อนที่ โดยเริ่มจาก StartDate และขยายไปตามจำนวนช่วงและหน่วยที่กำหนด เหมาะกับการทำคำนวณแบบ rolling YTD, rolling average, ย้อนหลัง หรือล่วงหน้าแบบยืดหยุ่น
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| Dates | column | คอลัมน์วันที่จากตารางวันที่ที่มีการทำเครื่องหมาย (marked date table) หรือปฏิทิน | |
| StartDate | date/datetime | วันอ้างอิงเริ่มต้นของช่วง (มักเป็น MAX(‘DimDate'[Date]) ในบริบทปัจจุบัน) ถ้า BLANK จะใช้ MIN(Dates) | |
| NumberOfIntervals | number | จำนวนช่วงที่ต้องการ (ค่าติดลบ=ย้อนหลัง, ค่าบวก=ล่วงหน้า) | |
| Interval | text | หน่วยของช่วง: DAY, WEEK, MONTH, QUARTER, หรือ YEAR | |
| [EndBehavior]ไม่บังคับ | enum | PRECISE | PRECISE (default) = จบบนวันที่กำหนด, ENDALIGNED = จบบนสิ้นสุดของช่วง (เช่นสิ้นสุดเดือน) |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
DATESINPERIOD คืนค่าเป็น ‘ตารางของวันที่’ ในช่วงแบบเคลื่อนที่ โดยเริ่มจาก StartDate แล้วขยายช่วงไปตามจำนวนช่วง (NumberOfIntervals) และหน่วย (Interval) ที่กำหนด เช่น DAY/WEEK/MONTH/QUARTER/YEAR
ที่เจ๋งคือมันคืนตาราง ไม่ใช่ค่าเดียว ดังนั้นใช้กับ CALCULATE เพื่อกรองข้อมูลในช่วงที่ต้องการได้ สะดวกกว่า DATESBETWEEN ตรงที่ไม่ต้องระบุวันจบแบบชัดเจน
ส่วนตัวผมชอบใช้สำหรับคำนวณ YTD, rolling 30-day sales, หรือเปรียบเทียบกับปีที่แล้ว (Prior Year) เพราะค่อยการแสดงนอน ได้อย่างยืดหยุ่น 😎
เช่น ยอดย้อนหลัง 3 เดือนจากวันล่าสุดในบริบท
เช่น ยอดย้อนหลัง 14 วันเพื่อดูแนวโน้มระยะสั้น
ใช้ MAX('DimDate'[Date]) เป็นจุดอ้างอิง แล้วกำหนด -3 เพื่อให้เป็นช่วง 3 เดือนย้อนหลัง DATESINPERIOD จะคืนตารางวันที่ 3 เดือนนั้น แล้ว CALCULATE เอามาใช้เป็นตัวกรองให้ SUM
เหมาะกับการดูแนวโน้มระยะสั้น (Short-term trend) ของยอดขาย ใช้ DAY แทน MONTH เพื่อความละเอียดมากขึ้น
ด้วย -1 YEAR DATESINPERIOD จะเลื่อนกลับไปปีก่อนหน้า โดยปกติหากกรองข้อมูล 2025 DATESINPERIOD จะคืนข้อมูล 2024 ที่ตรงกับช่วงเดียวกัน
ENDALIGNED ทำให้ช่วงวันที่จบลงในตำแหน่งที่ 'เหมาะสม' เช่น สิ้นสุดไตรมาส เหมาะสำหรับรายงานแบบ fiscal period
ค่าติดลบ (เช่น -3) หมายถึงย้อนหลังจาก StartDate ส่วนค่าบวก (เช่น +3) หมายถึงล่วงหน้าไปจาก StartDate ตัวอย่าง: -3 MONTH จาก 2025-12-31 จะได้ข้อมูล 2025-10-01 ถึง 2025-12-31
DATESBETWEEN ต้องระบุวันเริ่มและวันจบแบบชัดเจน: DATESBETWEEN(Dates, StartDate, EndDate) ส่วน DATESINPERIOD ใช้จำนวนช่วง + หน่วยแทน: DATESINPERIOD(Dates, StartDate, NumberOfIntervals, Interval) DATESINPERIOD ยืดหยุ่นมากกว่าสำหรับการคำนวณแบบ rolling
DATESINPERIOD จะใช้ MIN(Dates) เป็นค่า StartDate แทน อาจไม่ได้ผลลัพธ์ที่คาดหวัง ดังนั้นแนะนำให้ระบุ StartDate ชัดเจน เช่น MAX('DimDate'[Date])
ไม่แนะนำใช้กับ DirectQuery mode สำหรับ RLS rules หรือ Calculated Columns อาจมีปัญหาประสิทธิภาพ ควรใช้ Import mode หรือ Aggregations
PRECISE (default): ช่วงจบลงบนวันที่ StartDate ตรงๆ เช่น -1 QUARTER จาก 2025-12-25 = 2025-09-26 ถึง 2025-12-25 | ENDALIGNED: ช่วงจบลงที่ปลายสุดของช่วงที่กำหนด เช่น -1 QUARTER จาก 2025-12-25 = 2025-09-30 ถึง 2025-12-31
ฟังก์ชันที่ผู้เขียนโยงไว้กับ DATESINPERIOD จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
DATEADD คืนค่าตารางวันที่ ที่ถูกเลื่อนออกไปจากช่วงวันที่ใน Context ปัจจุบัน ตามจำนวน (NumberOfIntervals) และหน่วย (Interval) ที่กำหนด เช่น เลื่อนย้อนหลัง 1 เดือน หรือเลื่อนไปข้างหน้า 1 ปี
DATESBETWEEN คืนตารางวันที่ที่อยู่ระหว่าง StartDate และ EndDate (รวมวันเริ่ม/วันจบ) เหมาะกับการใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อคำนวณตามช่วงวันที่ที่กำหนดเอง
DATESMTD คืนตารางวันที่ของช่วงตั้งแต่ต้นเดือนถึงวันที่ล่าสุดใน filter context เหมาะกับการทำยอดสะสมตั้งแต่ต้นเดือน (MTD) โดยใช้ร่วมกับ CALCULATE และควรใช้คู่กับ ShowValueForDates pattern เพื่อไม่ให้แสดงค่าในวันที่ยังไม่มีข้อมูล
DATESYTD คืนตารางวันที่ของช่วงตั้งแต่ต้นปีถึงวันที่สุดท้ายที่มองเห็นใน Filter Context ใช้เป็นตัวกรองเวลาใน CALCULATE สำหรับการคำนวณยอดสะสมตั้งแต่ต้นปี รองรับทั้งปีปฏิทินและปีบัญชี (Fiscal Year) ด้วย YearEndDate argument
ENDOFQUARTER คืนตารางวันที่ของวันสิ้นไตรมาสตามบริบทวันที่ปัจจุบัน เหมาะกับการใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อประเมินมาตรวัด ณ วันสิ้นไตรมาส
NEXTMONTH คืนตารางวันที่ของเดือนถัดไปจากบริบทวันที่ปัจจุบัน มักใช้เป็นตารางตัวกรองใน CALCULATE เพื่อคำนวณค่าแบบ “เดือนถัดไป” ตามช่วงวันที่ที่ถูกเลือก/กรอง
PARALLELPERIOD คืนตารางวันที่ที่ขนานกับช่วงเวลาปัจจุบัน แต่เลื่อนไปข้างหน้าหรือย้อนหลัง และขยายขอบเขตให้ครอบคลุมทั้งหน่วยเวลาที่ระบุ (MONTH/QUARTER/YEAR) เสมอ เหมาะกับการเทียบยอดรวมทั้งเดือน/ไตรมาส/ปี
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
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่