DATESBETWEEN คืนตารางวันที่ที่อยู่ระหว่าง StartDate และ EndDate (รวมวันเริ่ม/วันจบ) เหมาะกับการใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อคำนวณตามช่วงวันที่ที่กำหนดเอง
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| Dates | column | คอลัมน์วันที่จากตารางวันที่/ปฏิทิน ต้องเป็นคอลัมน์ที่มีข้อมูลวันที่ต่อเนื่องจริง |
| StartDate | date/datetime/expression | วันเริ่มต้นของช่วง (รวมในผลลัพธ์) สามารถเป็นค่า DATE, วันที่จากตัวแปร หรือ BLANK() ถ้า BLANK จะใช้วันที่แรกสุดในคอลัมน์ Dates |
| EndDate | date/datetime/expression | วันสิ้นสุดของช่วง (รวมในผลลัพธ์) สามารถเป็นค่า DATE, วันที่จากตัวแปร หรือ BLANK() ถ้า BLANK จะใช้วันที่สุดท้ายในคอลัมน์ Dates |
DATESBETWEEN ใช้สร้าง ‘ตารางของวันที่’ ในช่วงที่กำหนด โดยระบุวันเริ่มต้น (StartDate) และวันสิ้นสุด (EndDate) แล้วคืนวันที่ทั้งหมดที่อยู่ในช่วงนั้น (รวมวันเริ่มและวันจบ)
สิ่งที่เจ๋งของ DATESBETWEEN คือมันช่วยให้เราสร้างตัวกรองเวลาแบบยืดหยุ่น ไม่ต้องพึ่งพาช่วง Fixed Time Intelligence ที่มีอยู่แล้ว ใช้งานได้กับช่วงแคมเปญ, ช่วงสะสมตั้งแต่วันเริ่มโครงการ, หรือช่วงการวิเคราะห์แบบ Custom ได้
ส่วนตัวผม ถ้าต้องทำ Life-to-Date (ยอดสะสมตั้งแต่แรกจนถึงปัจจุบัน) มักใช้ DATESBETWEEN กับ BLANK() และ TODAY() จึงสะดวกและอ่านเข้าใจง่ายมาก 😎
เช่น ช่วงโปรโมชั่นหรือแคมเปญ
เช่น สะสมยอดตั้งแต่วันเริ่มต้นที่กำหนดจนถึงวันนี้
DATESBETWEEN สร้างชุดวันที่ของช่วงแคมเปญที่ต้องการ (พ.ย. 2025) แล้ว CALCULATE ใช้ชุดวันที่นั้นเป็นตัวกรองเวลา เพื่อให้ [Sales Amount] นับเฉพาะยอดขายในช่วงนั้น
เหมาะกับการคำนวณสะสมตั้งแต่วันเริ่มโครงการ โดยใช้ TODAY() เป็นวันสิ้นสุด ช่วยให้เห็นความก้าวหน้าตั้งแต่เปิดตัว
เมื่อ StartDate เป็น BLANK(), DATESBETWEEN จะใช้วันที่แรกสุดในคอลัมน์ 'DimDate'[Date] เป็นจุดเริ่มต้น ส่วน MAX('DimDate'[Date]) คืนวันที่ล่าสุด เหมาะกับการคำนวณยอดสะสมแบบเต็มที่
DATESBETWEEN คืนค่าเป็นตาราง จึงสามารถใช้ในเมื่อ/คำนวณตารางเพื่อดูช่วงวันที่ที่ได้จริง
คืนค่าเป็นตารางของวันที่ (Table) จึงมักใช้เป็นตัวกรองภายใน CALCULATE เพื่อให้มาตรวัด (Measure) คืนค่าสเกลาร์ ไม่ใช่ตารางสำเร็จรูป
ควรใช้คอลัมน์วันที่จากตารางวันที่ที่ต่อเนื่องและกำหนดเป็นตารางวันที่ของโมเดล (Date Table) เพื่อให้ผลการคำนวณช่วงเวลาถูกต้องและมีประสิทธิภาพ
DATESBETWEEN ยังคงรวมวันเหล่านั้นในตารางผลลัพธ์ แม้ว่าอาจไม่มีข้อมูลการขาย หากต้องการรวมเฉพาะวันที่มีข้อมูล อาจต้องใช้ FILTER ร่วมกับ DATESBETWEEN
DATESBETWEEN ใช้กับช่วงวันที่ที่กำหนดตายตัว (Fixed) เช่น 1-30 พ.ย. ส่วน DATESINPERIOD เหมาะกับช่วง Relative หรือ Offset เช่น ย้อนหลัง 3 เดือนจากวันปัจจุบัน
ฟังก์ชันที่ผู้เขียนโยงไว้กับ DATESBETWEEN จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
DATEADD คืนค่าตารางวันที่ ที่ถูกเลื่อนออกไปจากช่วงวันที่ใน Context ปัจจุบัน ตามจำนวน (NumberOfIntervals) และหน่วย (Interval) ที่กำหนด เช่น เลื่อนย้อนหลัง 1 เดือน หรือเลื่อนไปข้างหน้า 1 ปี
DATESINPERIOD คืนตารางวันที่แบบเคลื่อนที่ โดยเริ่มจาก StartDate และขยายไปตามจำนวนช่วงและหน่วยที่กำหนด เหมาะกับการทำคำนวณแบบ rolling YTD, rolling average, ย้อนหลัง หรือล่วงหน้าแบบยืดหยุ่น
DATESMTD คืนตารางวันที่ของช่วงตั้งแต่ต้นเดือนถึงวันที่ล่าสุดใน filter context เหมาะกับการทำยอดสะสมตั้งแต่ต้นเดือน (MTD) โดยใช้ร่วมกับ CALCULATE และควรใช้คู่กับ ShowValueForDates pattern เพื่อไม่ให้แสดงค่าในวันที่ยังไม่มีข้อมูล
DATESQTD คืนตารางวันที่ของช่วงตั้งแต่ต้นไตรมาสถึงวันที่ล่าสุดในบริบทปัจจุบัน เหมาะสำหรับสร้างมาตรวัด QTD ใน CALCULATE โดยทำงานร่วมกับ Time Intelligence Functions ตัวอื่นๆ ได้ดี และควรใช้คู่กับ ShowValueForDates pattern เพื่อป้องกันการแสดงค่าในอนาคต
DATESWTD คืนตารางวันที่ตั้งแต่ต้นสัปดาห์จนถึงวันที่ในบริบทปัจจุบัน ใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อคำนวณยอดสะสมตั้งแต่ต้นสัปดาห์
DATESYTD คืนตารางวันที่ของช่วงตั้งแต่ต้นปีถึงวันที่สุดท้ายที่มองเห็นใน Filter Context ใช้เป็นตัวกรองเวลาใน CALCULATE สำหรับการคำนวณยอดสะสมตั้งแต่ต้นปี รองรับทั้งปีปฏิทินและปีบัญชี (Fiscal Year) ด้วย YearEndDate argument
FIRSTDATE คืนค่าวันที่แรกในบริบทตัวกรองปัจจุบัน เหมาะใช้เป็นตัวกรองให้ CALCULATE เพื่อหายอดขาย/จำนวนของวันแรกในช่วงที่เลือก
LASTDATE คืนค่าตารางที่มีวันที่สุดท้ายในบริบทตัวกรองปัจจุบัน มักใช้เป็นตารางตัวกรองให้ CALCULATE เพื่อคำนวณ measure ณ วันสุดท้ายของช่วงที่เลือก และสามารถใช้ MAXX เพื่อแปลงผลเป็น scalar date ได้
PARALLELPERIOD คืนตารางวันที่ที่ขนานกับช่วงเวลาปัจจุบัน แต่เลื่อนไปข้างหน้าหรือย้อนหลัง และขยายขอบเขตให้ครอบคลุมทั้งหน่วยเวลาที่ระบุ (MONTH/QUARTER/YEAR) เสมอ เหมาะกับการเทียบยอดรวมทั้งเดือน/ไตรมาส/ปี
STARTOFMONTH คืนวันแรกของเดือนเป็นตาราง 1 แถว ใช้กับการวัดที่ขึ้นต่อจุดเวลา เช่น ยอดคงเหลือ บัญชี หรือสินค้าคงคลัง
STARTOFQUARTER คืนตารางวันที่ที่มีวันแรกของไตรมาสในบริบทตัวกรองปัจจุบัน (single-row table) ใช้เป็นตารางตัวกรองใน CALCULATE หรือใช้ MINX เพื่อแปลงเป็น scalar date
STARTOFWEEK คืนตารางที่มีวันแรกของสัปดาห์ตามปฏิทินที่กำหนด ใช้เป็นตัวกรองใน CALCULATE หรือดึงค่าสเกลาร์ด้วย MINX ฟังก์ชันนี้จำเป็นต้องมีตารางวันที่ที่ถูกกำหนดไว้เป็น Date Table
STARTOFYEAR คืนตาราง 1 แถวที่มีวันที่วันแรกของปีในบริบทปัจจุบัน ใช้สำหรับ semi-additive measure เช่น inventory balance หรือเปรียบเทียบ year-to-date
คำนวณยอดสะสมตั้งแต่ต้นเดือน (Month-to-Date) ของ Expression ตามคอลัมน์วันที่ที่กำหนด เป็นทางลัดของ CALCULATE + DATESMTD
TOTALQTD คำนวณยอดสะสมตั้งแต่วันแรกของไตรมาส (Q1/Q2/Q3/Q4) จนถึงวันที่ล่าสุดใน filter context ปัจจุบัน
.
ส่วนตัวผมใช้บ่อยมากตอน analyze quarterly performance และการวิเคราะห์ KPI รายไตรมาสครับ
คำนวณยอดสะสมตั้งแต่ต้นสัปดาห์ (Week-to-Date) ของ Expression ตามคอลัมน์วันที่ที่กำหนด โดยรวมข้อมูลจากวันแรกของสัปดาห์จนถึงวันปัจจุบันในบริบท
TOTALYTD คำนวณยอดสะสมตั้งแต่ต้นปี (Year-to-Date) ของ expression ใดๆ โดยอิงจาก Date table และสามารถกำหนด fiscal year end date เพื่อรองรับปีงบประมาณที่ไม่ตรงกับปีปฏิทินได้
.
ส่วนตัวผมใช้บ่อยมากตอนต้องวิเคราะห์ยอดขาย KPI และรายงานทางการเงินที่ต้องการติดตามความก้าวหน้าตลอดทั้งปีครับ
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
อีเมลของคุณจะไม่ถูกเผยแพร่