OPENINGBALANCEYEAR คำนวณค่า Expression ณ วันแรกของปี โดยดึงค่าจากวันสิ้นปีปีก่อนหน้า เหมาะสำหรับการหา opening balance ของคงเหลือ บัญชี สต็อก และค่าที่วัดได้แค่ที่จุดเวลาเดียว
=OPENINGBALANCEYEAR(<Expression>, <Dates>)
=OPENINGBALANCEYEAR(<Expression>, <Dates>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Expression | expression | Yes | นิพจน์หรือ Measure ที่ต้องการประเมิน ณ วันแรกของปี ส่วนใหญ่เป็น Measure ประเภท Balance (คงเหลือ) เช่น Inventory, Accounts Receivable, Cash Balance | |
| Dates | column (Date) | Yes | คอลัมน์วันที่จากตารางวันที่ (Date Table) ที่มีการทำเครื่องหมายว่าเป็น Date Table และมีวันที่ต่อเนื่อง ทั้งปีจนครบ |
ใช้ทำรายงานเปลี่ยนแปลงยอดคงเหลือรายปี
เทียบ opening balance กับตัวชี้วัดสะสมระหว่างปี
Inventory Opening = OPENINGBALANCEYEAR( [Inventory Balance], 'Date'[Date] )Inventory Opening =
OPENINGBALANCEYEAR(
[Inventory Balance],
'Date'[Date]
)
ได้ค่า Inventory Balance ณ วันแรกของปี (เทียบเท่าคุณสต็อก 31 ธันวาคม ปีที่แล้ว)
Net Change (Year) = VAR OpenBal = OPENINGBALANCEYEAR( [Account Balance], 'Date'[Date] ) VAR CloseBal = CLOSINGBALANCEYEAR( [Account Balance], 'Date'[Date] ) RET…=Net Change (Year) =
VAR OpenBal = OPENINGBALANCEYEAR(
[Account Balance],
'Date'[Date]
)
VAR CloseBal = CLOSINGBALANCEYEAR(
[Account Balance],
'Date'[Date]
)
RETURN
CloseBal - OpenBal
ได้ส่วนต่างระหว่างยอดเงินปิดปีและเปิดปี (ได้ผลสำเร็จขึ้น/ลง)
YTD Inventory Growth = VAR CurrentBal = [Inventory Balance] VAR OpeningBal = OPENINGBALANCEYEAR( [Inventory Balance], 'Date'[Date] ) RETURN IF( OpeningBal = 0,…YTD Inventory Growth =
VAR CurrentBal = [Inventory Balance]
VAR OpeningBal = OPENINGBALANCEYEAR(
[Inventory Balance],
'Date'[Date]
)
RETURN
IF(
OpeningBal = 0,
BLANK(),
DIVIDE(CurrentBal - OpeningBal, OpeningBal, 0)
)
ได้ร้อยละการเปลี่ยนแปลงจากเปิดปีจนถึงปัจจุบัน (ในบริบท filter ปัจจุบัน)
Comparison: Opening This Year vs Last Year = VAR ThisYearOpening = OPENINGBALANCEYEAR( [Balance], 'Date'[Date] ) VAR LastYearOpening = OPENINGBALANCEYEAR( [Bala…Comparison: Opening This Year vs Last Year =
VAR ThisYearOpening = OPENINGBALANCEYEAR(
[Balance],
'Date'[Date]
)
VAR LastYearOpening = OPENINGBALANCEYEAR(
[Balance],
DATEADD('Date'[Date], -1, YEAR)
)
RETURN
THISYEAROpening - LastYearOpening
ได้ความต่างของ opening balance ระหว่างปีนี้กับปีที่แล้ว
OPENINGBALANCEYEAR ประเมินจากวันแรก (First Day) ของปี โดยดึงค่าจากวันสิ้นปีปีก่อนหน้า (Last Day of Previous Year) เสมือน CALCULATE(Expression, PREVIOUSDAY(STARTOFYEAR(Dates))) ดังนั้น ถ้าปีเริ่ม 1 มกราคม ฟังก์ชันจะหาค่า ณ 31 ธันวาคม ปีก่อน
PREVIOUSYEAR คืนตารางวันที่ (ทั้งปีที่แล้ว) เพื่อใช้เป็นตัวกรองสำหรับ CALCULATE ส่วน OPENINGBALANCEYEAR คืนค่า scalar (เลขตัวเดียว) ของ Expression ณ จุดเปิดปี เหตุผลง่ายๆ PREVIOUSYEAR = table, OPENINGBALANCEYEAR = value
เหมาะกับ semi-additive measures ที่เป็น Balance, Inventory, Quantity, Accounts Receivable ที่วัดได้แค่ณ จุดเวลาเดียว (point-in-time snapshot) แต่ไม่เหมาะกับ Sales, Revenue, Cost ที่เป็นยอดรวมของช่วง เพราะวัดค่าได้ตลอดช่วงเวลา
ลองหา Opening + Closing Balance แล้วลบออก ผลที่ได้ควรตรงกับการเปลี่ยนแปลงเบื้องต้น (First Principles Check) เช่น Opening Inventory 100 + Purchases 50 – Sales 30 = Closing Inventory 120 ถ้าตรง แสดงว่า measure ของคุณ semi-additive และ OPENINGBALANCEYEAR ใช้ได้
ยังใช้ได้ แต่ต้องให้ Date Table และ Data Model สอดคล้องกับปีงบประมาณ ถ้าปีงบประมาณเริ่มเดือน เมษายน ให้ตรวจว่า Dates column ในฟังก์ชันสาย “ปีพิษฐ์” อย่างถูกต้อง บ้างก็เพิ่มคอลัมน์ Fiscal Year แล้วใช้ logic สอดคล้อง
ใช่ ทำ context transition จาก row context → filter context เหมือน CALCULATE ฉะนั้น ถ้าใช้ใน row context (เช่น calculated column) มันจะแปลง context อย่างชาญฉลาด ระวังบ้างว่า filter context ที่เกิดขึ้นจริงๆ มันเป็นแบบไหน
OPENINGBALANCEYEAR เป็น Time Intelligence Function ที่ประเมิน Expression ณ วันแรกของปีภายใต้ตัวกรองปัจจุบัน โดยจะสำเร็จเสมือนประเมินค่า “ณ วันสิ้นปีปีก่อนหน้า” ซึ่งเทียบเท่ากับ CALCULATE(Expression, PREVIOUSDAY(STARTOFYEAR(Dates)))
ที่เจ๋งคือ ฟังก์ชันนี้คำนึงถึง “semi-additive” measures แบบ Balance, Inventory, Quantity on Hand ที่หนึ่ง ในขณะที่ Sales หรือ Revenue นั้นสรุป/รวมได้ Balance ไม่ได้ – มันเป็นค่า ณ จุดเวลา พอมี OPENINGBALANCEYEAR ก็หา “ค่าเปิดปี” เพื่อเทียบกับ “ค่าปิดปี” หรือวิเคราะห์การเปลี่ยนแปลง
ส่วนตัวผมคิดว่า Time Intelligence Functions (OPENINGBALANCEYEAR, CLOSINGBALANCEYEAR, CLOSINGBALANCEMONTH) เป็น “hidden gems” ที่จริงจริง มันช่วยการวิเคราะห์ข้อมูลทางการเงินและสินค้าคงคลัง จริงๆ ที่เข้าใจจังหวะเวลา แล้วคุณเข้าใจ DAX ระดับหนึ่งแล้ว