STARTOFYEAR คืนตาราง 1 แถวที่มีวันที่วันแรกของปีในบริบทปัจจุบัน ใช้สำหรับ semi-additive measure เช่น inventory balance หรือเปรียบเทียบ year-to-date
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| Dates | column or table | คอลัมน์วันที่ หรือ table expression ที่มีคอลัมน์วันที่ต่อเนื่อง ปกติจะมาจากตาราง Date Table ที่มีการกำหนดให้เป็น Date Table แล้ว | |
| [YearEndDate]ไม่บังคับ | text | "12/31" | ระบุวันสิ้นปี (fiscal year end) ในรูปแบบ “MM/DD” เช่น “06/30” สำหรับปีงบประมาณที่จบ 30 มิ.ย. ถ้าไม่ระบุ ค่าเริ่มต้นคือ “12/31” (ปีปฏิทิน) |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
STARTOFYEAR คือฟังก์ชันที่ค้นหาวันเริ่มต้นของปี โดยคืนค่าเป็นตาราง 1 แถว (single-row table) มีคอลัมน์วันที่ที่เป็นวันแรกของปีในบริบท filter ปัจจุบัน อันที่จริง มันหักออกตัวกรองทั้งหมดจากคอลัมน์วันที่ แล้วหาวันเริ่มปีของช่วงที่เหลือ
ที่เจ๋งคือ STARTOFYEAR จัดการกับ fiscal year ได้ด้วย ถ้างบประมาณจบ 30 มิ.ย. แทน 31 ธ.ค. ก็ใส่ YearEndDate = “06/30” มันจะหาวันเริ่มปีงบประมาณให้ ผมเห็นมันใช้บ่อยสำหรับ semi-additive measure เช่น Inventory Balance หรือ Account Balance ณ วันแรกปี ซึ่งไม่สามารถรวมข้ามเวลาได้
ส่วนตัวผมมองว่า STARTOFYEAR เป็นอีกฟังก์ชัน time intelligence ที่ต้องใช้กับ Date Table ที่ถูกต้อง ถ้า Date Table ไม่ครบถ้วน หรือไม่มี relationship กับตารางอื่น มันจะให้ผลลัพธ์ที่ผิด ต้องระวังเรื่องนี้
ใช้เป็นตัวกรองเพื่อคำนวณ measure ณ จุดเริ่มปี
กำหนด YearEndDate เพื่อให้วันเริ่มปีถูกต้องตามรอบปีงบประมาณ
STARTOFYEAR คืนตาราง 1 แถว ใช้ MINX ดึงค่าวันที่ออกมาเป็นค่าเดี่ยว เหมาะสำหรับแสดงหรือเปรียบเทียบ
ฟังก์ชัน time intelligence STARTOFYEAR ทำการ context transition เปลี่ยน row context เป็น filter context ที่จุด start of year ทำให้ measure คำนวณค่าที่วันแรกปี
YearEndDate "06/30" บอกให้ DAX รู้ว่าปีงบประมาณจบ 30 มิ.ย. จึงคำนวณหา start ของปีนั้นเป็น 1 มี.ค. ของปีที่แล้ว
ใช้ VAR เก็บค่า balance ที่ start of year แล้วเปรียบเทียบกับค่า current นี่คือ pattern ทั่วไปสำหรับ year-to-date analysis
พวกมันต่างกันแค่ช่วงเวลา ครับ STARTOFMONTH หาวันแรกของเดือนในบริบท filter ปัจจุบัน STARTOFQUARTER หาวันแรกของไตรมาส ส่วน STARTOFYEAR หาวันแรกของปี โครงสร้างและการทำงานเหมือนกันหมด ใช้ VAR กับ MINX ได้เหมือนกัน
คืนค่าเป็นตาราง 1 แถว (single-row table) ถ้าต้องการค่าเดี่ยว (scalar) ให้ใช้ MINX หรือ MAXX ดึงออกมา เช่น MINX(STARTOFYEAR('Date'[Date]), 'Date'[Date]) ในที่สุดได้วันที่เป็นค่าเดี่ยว
เพราะ STARTOFYEAR ค้นหาวันแรกของปี ถ้า Date Table ไม่มีวันแรกปี DAX ไม่สามารถหาจุดเริ่มได้ ผลลัพธ์อาจจะ blank หรือไม่ถูกต้อง ฉันเสมอให้สร้าง Date Table ตั้งแต่ 1 มค. ของปีแรก ถึง 31 ธ.ค. ของปีสุดท้าย
ใช้ "MM/DD" เช่น "06/30" สำหรับสิ้นปี 30 มิ.ย. หรือ "03/31" สำหรับสิ้นปี 31 มี.ค. ม.ค. คือ 01 ธ.ค. คือ 12 ลำดับเดือนแบบสากล (1-12)
ใช้ได้ครับ เป็น time intelligence function ที่ใช้ได้ใน Power BI Desktop, Power Pivot, และ Analysis Services ตราบใดที่มี Date Table ที่ถูกกำหนดให้เป็น Date Table
ฟังก์ชันที่ผู้เขียนโยงไว้กับ STARTOFYEAR จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
DATESBETWEEN คืนตารางวันที่ที่อยู่ระหว่าง StartDate และ EndDate (รวมวันเริ่ม/วันจบ) เหมาะกับการใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อคำนวณตามช่วงวันที่ที่กำหนดเอง
DATESYTD คืนตารางวันที่ของช่วงตั้งแต่ต้นปีถึงวันที่สุดท้ายที่มองเห็นใน Filter Context ใช้เป็นตัวกรองเวลาใน CALCULATE สำหรับการคำนวณยอดสะสมตั้งแต่ต้นปี รองรับทั้งปีปฏิทินและปีบัญชี (Fiscal Year) ด้วย YearEndDate argument
ENDOFYEAR คืนตารางวันที่ของวันสิ้นปีตามบริบทวันที่ปัจจุบัน และรองรับการกำหนดวันสิ้นปีบัญชี เหมาะกับการใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อประเมินมาตรวัดที่วันสิ้นปี
LASTDATE คืนค่าตารางที่มีวันที่สุดท้ายในบริบทตัวกรองปัจจุบัน มักใช้เป็นตารางตัวกรองให้ CALCULATE เพื่อคำนวณ measure ณ วันสุดท้ายของช่วงที่เลือก และสามารถใช้ MAXX เพื่อแปลงผลเป็น scalar date ได้
OPENINGBALANCEYEAR คำนวณค่า Expression ณ วันแรกของปี โดยดึงค่าจากวันสิ้นปีปีก่อนหน้า เหมาะสำหรับการหา opening balance ของคงเหลือ บัญชี สต็อก และค่าที่วัดได้แค่ที่จุดเวลาเดียว
STARTOFMONTH คืนวันแรกของเดือนเป็นตาราง 1 แถว ใช้กับการวัดที่ขึ้นต่อจุดเวลา เช่น ยอดคงเหลือ บัญชี หรือสินค้าคงคลัง
STARTOFQUARTER คืนตารางวันที่ที่มีวันแรกของไตรมาสในบริบทตัวกรองปัจจุบัน (single-row table) ใช้เป็นตารางตัวกรองใน CALCULATE หรือใช้ MINX เพื่อแปลงเป็น scalar date
STARTOFWEEK คืนตารางที่มีวันแรกของสัปดาห์ตามปฏิทินที่กำหนด ใช้เป็นตัวกรองใน CALCULATE หรือดึงค่าสเกลาร์ด้วย MINX ฟังก์ชันนี้จำเป็นต้องมีตารางวันที่ที่ถูกกำหนดไว้เป็น Date Table
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
MINX ประเมินนิพจน์สำหรับทุกแถวของตาราง แล้วคืนค่าที่น้อยที่สุด ต่างจาก MIN ที่ใช้กับคอลัมน์โดยตรง MINX เหมาะกับการหาค่าต่ำสุดจากค่าที่คำนวณต่อแถว เช่น (Quantity × UnitPrice)
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่