STARTOFYEAR คืนตาราง 1 แถวที่มีวันที่วันแรกของปีในบริบทปัจจุบัน ใช้สำหรับ semi-additive measure เช่น inventory balance หรือเปรียบเทียบ year-to-date
=STARTOFYEAR(<Dates> [, <YearEndDate>])
=STARTOFYEAR(<Dates> [, <YearEndDate>])
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Dates | column or table | Yes | คอลัมน์วันที่ หรือ table expression ที่มีคอลัมน์วันที่ต่อเนื่อง ปกติจะมาจากตาราง Date Table ที่มีการกำหนดให้เป็น Date Table แล้ว | |
| YearEndDate | text | Optional | "12/31" | ระบุวันสิ้นปี (fiscal year end) ในรูปแบบ “MM/DD” เช่น “06/30” สำหรับปีงบประมาณที่จบ 30 มิ.ย. ถ้าไม่ระบุ ค่าเริ่มต้นคือ “12/31” (ปีปฏิทิน) |
ใช้เป็นตัวกรองเพื่อคำนวณ measure ณ จุดเริ่มปี
กำหนด YearEndDate เพื่อให้วันเริ่มปีถูกต้องตามรอบปีงบประมาณ
วันแรกของปี = MINX(STARTOFYEAR('Date'[Date]), 'Date'[Date])วันแรกของปี = MINX(STARTOFYEAR('Date'[Date]), 'Date'[Date])
ผลลัพธ์: วันที่วันแรกของปีตามบริบท filter ปัจจุบัน เช่น 2024-01-01
Inventory Start of Year = VAR CurrentYear = SELECTEDVALUE('Date'[Year], YEAR(TODAY())) RETURN CALCULATE( SUM('Inventory'[Quantity]), STARTOFYEAR('Date'[Date]) )Inventory Start of Year =
VAR CurrentYear = SELECTEDVALUE('Date'[Year], YEAR(TODAY()))
RETURN
CALCULATE(
SUM('Inventory'[Quantity]),
STARTOFYEAR('Date'[Date])
)
ผลลัพธ์: จำนวน inventory ณ วันแรกของปี ไม่ได้รวมข้ามเวลา เหมาะกับ semi-additive
Account Balance FY Start = MINX( STARTOFYEAR('Date'[Date], "06/30"), 'Date'[Date] ) หรือใช้ใน CALCULATE: Account Balance FY Start (Measure) = CALCULATE( [Accoun…Account Balance FY Start =
MINX(
STARTOFYEAR('Date'[Date], "06/30"),
'Date'[Date]
)
หรือใช้ใน CALCULATE:
Account Balance FY Start (Measure) =
CALCULATE(
[Account Balance],
STARTOFYEAR('Date'[Date], "06/30")
)
ผลลัพธ์: วันแรกของปีงบประมาณ (1 มี.ค. ในกรณีนี้) หรือค่า Account Balance ณ จุดนั้น
YTD Growth Amount = VAR StartYearBalance = CALCULATE( [Balance], STARTOFYEAR('Date'[Date]) ) VAR CurrentBalance = [Balance] RETURN CurrentBalance - StartYearBal…YTD Growth Amount =
VAR StartYearBalance =
CALCULATE(
[Balance],
STARTOFYEAR('Date'[Date])
)
VAR CurrentBalance = [Balance]
RETURN
CurrentBalance - StartYearBalance
ผลลัพธ์: ความเพิ่มขึ้นของ balance จากต้นปีถึงวันปัจจุบัน
พวกมันต่างกันแค่ช่วงเวลา ครับ 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 คือฟังก์ชันที่ค้นหาวันเริ่มต้นของปี โดยคืนค่าเป็นตาราง 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 กับตารางอื่น มันจะให้ผลลัพธ์ที่ผิด ต้องระวังเรื่องนี้