STARTOFMONTH คืนวันแรกของเดือนเป็นตาราง 1 แถว ใช้กับการวัดที่ขึ้นต่อจุดเวลา เช่น ยอดคงเหลือ บัญชี หรือสินค้าคงคลัง
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| Dates | dates (table/column expression) | คอลัมน์วันที่ หรือ table expression ที่ให้คอลัมน์วันที่ เช่น ‘Date'[DateKey] หรือ FILTER(Dates, …) |
STARTOFMONTH คืนตารางวันที่ที่มีวันแรกของเดือนในบริบทตัวกรองปัจจุบัน ผลลัพธ์เป็นตาราง 1 แถว (single-row table) ซึ่งมักใช้เป็นตัวกรองใน CALCULATE
ที่เจ๋งคือ STARTOFMONTH ทำให้ตรรกะการวัดที่ขึ้นต่อจุดเวลา (point-in-time measures) ง่ายขึ้น โดยส่วนใหญ่ใช้กับยอดคงเหลือ (balance) บัญชี (account status) หรือสินค้าคงคลัง (inventory) ซึ่งต้องวัดค่า ณ สิ้นหรือต้นเดือน แล้ว STARTOFMONTH จะช่วยกำหนดจุดอ้างอิงนั้นให้แม่นยำ
ส่วนตัวผม พบว่าหลายคน confuse ระหว่าง STARTOFMONTH กับ ENDOFMONTH ผมมักใช้ STARTOFMONTH เมื่อต้อง snapshot ยอดต้นเดือน และ ENDOFMONTH สำหรับยอดสิ้นเดือน ทั้ง 2 ฟังก์ชันต้องจับคู่กับ CALCULATE เพื่อใช้เป็นตัวกรอง จึงเข้าใจ context transition ดีจึงเป็นกุญแจ
ใช้เป็นตัวกรองเพื่อคำนวณ measure ณ จุดเริ่มเดือน
แปลงเป็นค่าเดี่ยวเพื่อใช้แสดงผล/ทำตรรกะต่อ
STARTOFMONTH คืนตาราง 1 แถว ต้องใช้ MINX หรือ SELECTEDVALUE เพื่อดึงค่า scalar ออกมา ตัวอย่างนี้ใช้ VAR เพื่อเก็บค่าแล้ว RETURN กลับออกมา
STARTOFMONTH ทำ context transition จาก row context เป็น filter context ที่จำกัดวันที่เป็นต้นเดือนเท่านั้น จึงใช้ CALCULATE เพื่อใช้ STARTOFMONTH เป็นตัวกรอง ถ้าเดือน January ก็จะเลือกวันที่ 1/1 เท่านั้น
ใช้ VAR ที่ 2 ตัว เพื่อเก็บค่าปัจจุบันและค่าต้นเดือน แล้ว RETURN ส่วนต่างออกมา ทำให้เห็นว่ายอดเปลี่ยนแปลงเท่าไหร่ตั้งแต่ต้นเดือนมา
ใช้ STARTOFMONTH กับ DATEADD ร่วมกัน เพื่อหา start of month ในปีที่แล้ว โปรดสังเกต DATEADD เป็น row context function ที่ได้ผล ต้องใช้ CALCULATE เพื่อแปลง context ให้ DATEADD ทำงานได้
คืนค่าเป็นตาราง 1 แถว (single-row table) ซึ่งมีคอลัมน์วันที่ 1 คอลัมน์ ถ้าต้องการค่าเดี่ยว ให้ใช้ MINX หรือ SELECTEDVALUE เพื่อดึงออกมา ส่วนตัวผม มักใช้ MINX ที่ดึงค่าจากคอลัมน์วันที่ออกมาเป็น scalar
เพราะ STARTOFMONTH คืนตาราง ต้องใช้ CALCULATE เพื่อแปลงตาราง 1 แถวนั้นเป็น filter context แล้วใช้เป็นตัวกรองในการคำนวณ measure ถ้าไม่ใช้ CALCULATE ผลลัพธ์จะไม่มีความหมายหรือ error ได้
ทั้งสองมีพฤติกรรมเหมือนกัน แต่ STARTOFMONTH ให้วันแรก (ที่ 1) ของเดือน ส่วน ENDOFMONTH ให้วันสุดท้ายของเดือน (28, 29, 30 หรือ 31 ขึ้นกับเดือน) ใช้ STARTOFMONTH ถ้าต้อง snapshot ต้นเดือน ใช้ ENDOFMONTH ถ้าต้อง snapshot สิ้นเดือน
STARTOFMONTH จะขึ้น error หรือ blank ได้ ต้องให้ Date table ที่สมบูรณ์ มีวันทุกวันตั้งแต่วันแรกถึงวันสุดท้ายของปีที่ต้อง ถ้า Date table ไม่ครบก็ทำให้เกิดปัญหา context ได้ง่าย
ไม่สนับสนุน DirectQuery สำหรับ calculated columns หรือ RLS rules เพราะ STARTOFMONTH ต้องใช้เวลาในการประมวลผล ต้องใช้ Import mode หรือ Dual mode แทน
ฟังก์ชันที่ผู้เขียนโยงไว้กับ STARTOFMONTH จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
DATEADD คืนค่าตารางวันที่ ที่ถูกเลื่อนออกไปจากช่วงวันที่ใน Context ปัจจุบัน ตามจำนวน (NumberOfIntervals) และหน่วย (Interval) ที่กำหนด เช่น เลื่อนย้อนหลัง 1 เดือน หรือเลื่อนไปข้างหน้า 1 ปี
DATESBETWEEN คืนตารางวันที่ที่อยู่ระหว่าง StartDate และ EndDate (รวมวันเริ่ม/วันจบ) เหมาะกับการใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อคำนวณตามช่วงวันที่ที่กำหนดเอง
DATESMTD คืนตารางวันที่ของช่วงตั้งแต่ต้นเดือนถึงวันที่ล่าสุดใน filter context เหมาะกับการทำยอดสะสมตั้งแต่ต้นเดือน (MTD) โดยใช้ร่วมกับ CALCULATE และควรใช้คู่กับ ShowValueForDates pattern เพื่อไม่ให้แสดงค่าในวันที่ยังไม่มีข้อมูล
DATESQTD คืนตารางวันที่ของช่วงตั้งแต่ต้นไตรมาสถึงวันที่ล่าสุดในบริบทปัจจุบัน เหมาะสำหรับสร้างมาตรวัด QTD ใน CALCULATE โดยทำงานร่วมกับ Time Intelligence Functions ตัวอื่นๆ ได้ดี และควรใช้คู่กับ ShowValueForDates pattern เพื่อป้องกันการแสดงค่าในอนาคต
ENDOFMONTH คืนตารางวันที่ของวันสิ้นเดือนตามปฏิทิน เหมาะกับ Semi-Additive Calculations เช่น ยอดคงเหลือ, Inventory, หรือ Closing Balance ที่ต้องการ snapshot ณ สิ้นเดือน ไม่ว่าจะมีข้อมูลจริงในวันนั้นหรือไม่
FIRSTDATE คืนค่าวันที่แรกในบริบทตัวกรองปัจจุบัน เหมาะใช้เป็นตัวกรองให้ CALCULATE เพื่อหายอดขาย/จำนวนของวันแรกในช่วงที่เลือก
LASTDATE คืนค่าตารางที่มีวันที่สุดท้ายในบริบทตัวกรองปัจจุบัน มักใช้เป็นตารางตัวกรองให้ CALCULATE เพื่อคำนวณ measure ณ วันสุดท้ายของช่วงที่เลือก และสามารถใช้ MAXX เพื่อแปลงผลเป็น scalar date ได้
OPENINGBALANCEMONTH ประเมิน Expression ณ จุดเปิดเดือน (วันสิ้นเดือนก่อนหน้า) เหมาะสำหรับหา opening balance ของยอดคงเหลือ สต็อก หรือสถิติ ณ จุดเริ่มเดือน
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
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
MINX ประเมินนิพจน์สำหรับทุกแถวของตาราง แล้วคืนค่าที่น้อยที่สุด ต่างจาก MIN ที่ใช้กับคอลัมน์โดยตรง MINX เหมาะกับการหาค่าต่ำสุดจากค่าที่คำนวณต่อแถว เช่น (Quantity × UnitPrice)
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่