CALENDAR ใช้สำหรับสร้างตารางวันที่ครบถ้วนตั้งแต่วันเริ่มต้นถึงวันสิ้นสุดโดยไม่มีช่องว่าง เหมาะสำหรับสร้างตารางวันที่โครงสร้างพื้นฐาน (Date Dimension) ที่ใช้ร่วมกับ Time Intelligence Function
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| start_date | DateTime | วันที่เริ่มต้น ตัวอักษร หรือ expression ที่คืนค่า datetime |
| end_date | DateTime | วันที่สิ้นสุด ตัวอักษร หรือ expression ที่คืนค่า datetime |
CALENDAR เป็นฟังก์ชันที่ทำงานเรียบง่ายแต่มีประโยชน์มากในการสร้างโครงสร้างข้อมูลเวลา คุณส่งวันที่เริ่มต้นและสิ้นสุด มันจะคืนตารางที่มีคอลัมน์เดียวชื่อ “Date” พร้อมวันที่ทุกวันในช่วงนั้น
ที่เจ๋งคือมันสร้างวันที่ที่ต่อเนื่องกันอย่างสมบูรณ์ ไม่มีช่องว่างเลย ซึ่งสำคัญมากสำหรับฟังก์ชัน Time Intelligence เช่น SAMEPERIODLASTYEAR ที่ต้องการให้ Date Table มีวันที่ครบถ้วน
ส่วนตัวผมใช้ CALENDAR ในเกือบทุกโปรเจคเพื่อสร้างตารางวันที่พื้นฐาน แล้วเพิ่มคอลัมน์อื่นๆ เช่น Year, Month, Quarter ด้วย ADDCOLUMNS หรือ Calculated Column 😎
เช่น ต้องการให้ครอบคลุมปี 2020-2030 โดยไม่ขึ้นกับข้อมูลธุรกรรม
เช่น ใช้วันแรกสุด/วันสุดท้ายสุดจากคอลัมน์วันที่ในข้อมูลธุรกรรม
สร้างตารางวันที่สำหรับปีทั้งปี 2024 โดยตรง ตารางที่ได้จะมี 1 คอลัมน์ชื่อ Date และ 365 แถว (ปี 2024 เป็นปีอธิกสุรทิน)
ค้นหาปีที่น้อยที่สุดจาก Sales[OrderDate] และปีที่มากที่สุดจาก Forecast[ForecastDate] แล้วสร้างตารางวันที่ที่ครอบคลุมทั้งสองข้อมูล วิธีนี้มี flexibility สูง ถ้าข้อมูลเปลี่ยนตารางวันที่ก็จะปรับตัวอัตโนมัติ
เริ่มจากสร้างตารางวันที่ด้วย CALENDAR แล้วใช้ ADDCOLUMNS เพิ่มคอลัมน์ที่มีประโยชน์ เช่น ปี เดือน ชื่อเดือน และไตรมาส ส่วนตัวผมชอบเพิ่ม MonthName เพราะมันสะดวกสำหรับใช้ใน Visual หรือ Slicer 😎
ใช้ VAR เพื่อหาวันที่เริ่มต้นและสิ้นสุด จากนั้นส่ง VAR ทั้งสองไปให้ CALENDAR นี่คือวิธีที่ดีที่สุดเพราะสามารถ reuse VAR ได้ หรือเพิ่มตรรกะเพิ่มเติมได้ง่าย
กรณีที่ต้องการให้ Date Table ครอบคลุมปีเต็ม (จากวันที่ 1 ม.ค. ถึง 31 ธ.ค.) วิธีนี้ทำให้ Time Intelligence Function ทำงานได้ถูกต้อง เพราะจะมีวันที่ครบถ้วนตั้งแต่ต้นปีถึงปลายปี
CALENDAR ทำงานกับ Date แต่ GENERATESERIES ทำงานกับตัวเลข ผลลัพธ์เหมือนกันแต่ CALENDAR ส่งคืน Date type ส่วน GENERATESERIES ส่งคืน Numeric ส่วนตัวผมชอบ CALENDAR สำหรับ Date Table เพราะมันเสร็จสรรค์กว่า
วิธีนี้ดีเพราะ Time Intelligence Function ทำงานได้เร็วกว่า และ Slicer ใน Visual ง่ายต่อการใช้งาน เช่นลักษณ์ "Dec 2024" ชัดเจนกว่า "2024-12-31 00:00:00"
ไม่มีข้อจำกัด แต่ถ้าช่วงวันที่ยาวเกินไป (เช่น 100 ปี) อาจส่งผลต่อ Performance เล็กน้อย ส่วนตัวผมแนะนำสร้าง Date Table ให้ครอบคลุมข้อมูลเท่านั้น ไม่ต้อง Overkill
มันจะคืนค่า Error เจอบ่อยครับ 😅 ต้องระวังให้ start_date น้อยกว่า end_date เสมอ หากไม่แน่ใจให้ใช้ MIN() กับ MAX() ก่อน
ไม่รองรับในโหมด DirectQuery สำหรับ Calculated Column หรือ RLS แต่ใช้ได้ใน Calculated Table ปกติ นี่เป็นข้อจำกัด ส่วนตัวผมแนะนำใช้ Import Mode แทน
ฟังก์ชันที่ผู้เขียนโยงไว้กับ CALENDAR จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
CALENDARAUTO สร้างตารางวันที่อัตโนมัติโดยอิงช่วงวันที่ที่พบในโมเดล และสามารถกำหนดเดือนสิ้นสุดปีบัญชีได้ เหมาะกับการสร้าง Date table แบบเร็ว ๆ แต่ควรระวังค่าวันที่ผิดปกติในข้อมูล
DATE สร้างค่าวันที่จากตัวเลข Year/Month/Day แล้วคืนค่าเป็นชนิด datetime เหมาะกับการประกอบวันที่จากคอลัมน์แยกส่วนหรือสร้างวันที่อ้างอิง เช่น วันแรกของเดือน วันตัดยอด
DATEVALUE แปลงข้อความวันที่ (text) ให้เป็น datetime โดยอ้างอิงตามการตั้งค่า locale ของ model เหมาะกับข้อมูลวันที่ที่เก็บเป็นข้อความและต้องแปลงเป็นวันที่จริงเพื่อการคำนวณตามเวลา
DATEADD คืนค่าตารางวันที่ ที่ถูกเลื่อนออกไปจากช่วงวันที่ใน Context ปัจจุบัน ตามจำนวน (NumberOfIntervals) และหน่วย (Interval) ที่กำหนด เช่น เลื่อนย้อนหลัง 1 เดือน หรือเลื่อนไปข้างหน้า 1 ปี
DATESYTD คืนตารางวันที่ของช่วงตั้งแต่ต้นปีถึงวันที่สุดท้ายที่มองเห็นใน Filter Context ใช้เป็นตัวกรองเวลาใน CALCULATE สำหรับการคำนวณยอดสะสมตั้งแต่ต้นปี รองรับทั้งปีปฏิทินและปีบัญชี (Fiscal Year) ด้วย YearEndDate argument
SAMEPERIODLASTYEAR คืน table ของวันที่ที่เลื่อนย้อนกลับไป 1 ปีจากช่วงวันที่ใน filter context ปัจจุบัน ใช้สำหรับการเปรียบเทียบ Year-over-Year (YoY) โดยต้องการ date table ที่ครบถ้วนต่อเนื่องและควร mark เป็น date table ในโมเดล
.
มักใช้ร่วมกับ CALCULATE เพื่อคำนวณค่าของปีก่อนหน้าในช่วงเดียวกัน ทำให้ได้ผลลัพธ์แบบ apples-to-apples comparison ที่แม่นยำโดยไม่ต้อง hard-code ช่วงวันที่ เหมาะสำหรับ measures และ calculated columns แต่ไม่รองรับ DirectQuery mode และไม่แนะนำสำหรับ visual calculations
ADDCOLUMNS เป็นฟังก์ชัน table transformation ที่ใช้สำหรับเพิ่มคอลัมน์ใหม่ (Calculated Columns) เข้าไปในตารางที่มีอยู่เดิม โดยคำนวณค่าในแต่ละแถวผ่าน Row Context และส่งคืนตารางเดิมพร้อมคอลัมน์ใหม่ต่อท้าย
GENERATESERIES สร้างตารางคอลัมน์เดียวที่เป็นลำดับตัวเลขจาก StartValue ถึง EndValue ด้วย increment ที่กำหนดได้ เหมาะกับตารางช่วย parameter table หรือสร้างชุดตัวเลขสำหรับ what-if analysis
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่