OPENINGBALANCEMONTH ประเมิน Expression ณ จุดเปิดเดือน (วันสิ้นเดือนก่อนหน้า) เหมาะสำหรับหา opening balance ของยอดคงเหลือ สต็อก หรือสถิติ ณ จุดเริ่มเดือน
=OPENINGBALANCEMONTH(<Expression>, <Dates>)
=OPENINGBALANCEMONTH(<Expression>, <Dates>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Expression | expression | Yes | นิพจน์หรือ measure ที่ต้องการประเมิน ณ จุดเปิดเดือน โดยมักจะเป็น measure ที่หา balance/ยอดคงเหลือ | |
| Dates | column (date/time) | Yes | คอลัมน์วันที่จากตารางวันที่ (Date table) ที่ใช้เป็นตัวอ้างอิง หรือ table expression ที่ให้คอลัมน์วันที่ |
หายอดคงเหลือ ณ จุดเริ่มเดือน เพื่อเทียบกับค่าปิดเดือน
ใช้กับ measure คงค้างที่ต้องการอ่าน ณ จุดเวลา
Opening Inventory Balance = OPENINGBALANCEMONTH( [Current Inventory Value], 'Date'[Date] )Opening Inventory Balance =
OPENINGBALANCEMONTH(
[Current Inventory Value],
'Date'[Date]
)
ได้ค่ายอดสต็อก ณ วันสิ้นเดือนก่อนหน้า (วันเปิดเดือนปัจจุบัน)
Monthly Movement = [Closing Month Balance] - [Opening Month Balance] // หรือในรูปแบบ VAR Monthly Movement (VAR) = VAR OpenBalance = OPENINGBALANCEMONTH([Balance…Monthly Movement =
[Closing Month Balance] - [Opening Month Balance]
// หรือในรูปแบบ VAR
Monthly Movement (VAR) =
VAR OpenBalance = OPENINGBALANCEMONTH([Balance], 'Date'[Date])
VAR CloseBalance = CLOSINGBALANCEMONTH([Balance], 'Date'[Date])
RETURN CloseBalance - OpenBalance
ได้ค่าการเปลี่ยนแปลง (movement) ของยอดคงเหลือในช่วงเดือน
Opening Balance (ประเภท A เท่านั้น) = CALCULATE( OPENINGBALANCEMONTH( [Total Balance], 'Date'[Date] ), Product[Category] = "A" )=Opening Balance (ประเภท A เท่านั้น) =
CALCULATE(
OPENINGBALANCEMONTH(
[Total Balance],
'Date'[Date]
),
Product[Category] = "A"
)
ได้ค่า Opening Balance ของประเภท A เท่านั้น
PREVIOUSMONTH คืนค่าตารางวันที่ของเดือนก่อนหน้า เพื่อใช้กรองข้อมูล ส่วน OPENINGBALANCEMONTH คือการประเมิน Expression เอง ณ จุดเวลา “วันสิ้นเดือนก่อนหน้า” (ซึ่งคือ opening ของเดือนปัจจุบัน) โดยคืนค่าเดี่ยว (scalar) ไม่ใช่ตาราง หากต้องการใช้ PREVIOUSMONTH ให้ filter ต้องเขียน VAR PrevMonth = PREVIOUSMONTH(‘Date'[Date]) แล้วใช้กับ CALCULATE
เพราะจากมุมมองการบัญชี/ทางการเงิน วันสิ้นเดือนเดือนที่ 1 (2024-01-31) = วันเปิดเดือนที่ 2 (2024-02-01) ซึ่งคือเวลาเดียวกัน ดังนั้นค่าคงเหลือ ณ จุดเวลานี้คือ “opening balance” ของเดือนที่ 2 และ “closing balance” ของเดือนที่ 1 พูดแบบเรียบง่าย OPENINGBALANCEMONTH ไปดึงค่า “สิ้นเดือนก่อนหน้า” ซึ่งก็คือ opening ของเดือนปัจจุบัน ครับ
ไม่ได้ครับ OPENINGBALANCEMONTH เป็น Time Intelligence function ที่ต้องใช้กับ Import Mode เท่านั้น ถ้าลองใช้กับ DirectQuery model จะ error ตัว function นี้คำนวณ context transition อยู่ในหน่วยความจำจาก Power BI/Excel ไม่ได้ translate เป็น SQL/DAX ที่ backend รองรับ
ดีที่สุดคือ ให้มี date table ที่ mark เป็น “Date Table” ใน Power BI model ถึงแม้ว่า OPENINGBALANCEMONTH จะใช้คอลัมน์ date column ตามธรรมชาติได้ แต่เมื่อ mark ให้เป็น date table อย่างเป็นทางการ Power BI จะประมวลผลความสัมพันธ์และ filter context ได้ดีขึ้น นอกจากนั้นก็ยังช่วยให้ฟังก์ชัน Time Intelligence อื่น ๆ เช่น YTD, MTD ทำงานได้อย่างถูกต้อง
OPENINGBALANCEMONTH เป็นฟังก์ชัน Time Intelligence ของ DAX ที่ทำหน้าที่ประเมิน Expression ณ “วันที่เทียบเท่ากับวันสิ้นเดือนก่อนหน้า” ตามบริบท Filter Context ที่กำหนด มันอยู่ในกลุ่มฟังก์ชันสำหรับจัดการ opening/closing balance ที่มักใช้กับ measure แบบ semi-additive (ยอดคงเหลือ ไม่ใช่ยอดสะสม)
ที่เจ๋งคือ OPENINGBALANCEMONTH ประหยัดเวลาเมื่อต้องหา “ค่าเปิดงวด” โดยไม่ต้องเขียน CALCULATE + PREVIOUSDAY + STARTOFMONTH เอง มันทำงานดี ๆ กับ measure เชิงสต็อก เช่น inventory balance, bank account balance, หรือจำนวนพนักงาน ณ วันเฉพาะ ซึ่งต้องใช้ “ค่าสุดท้ายของช่วงเวลา” มากกว่าการ summarize ทั้งช่วง
ส่วนตัวผมมักใช้ OPENINGBALANCEMONTH คู่กับ CLOSINGBALANCEMONTH เพื่อวิเคราะห์การเปลี่ยนแปลง (movement) ของยอดคงเหลือในแต่ละเดือน แล้วนำไปใช้ในรายงาน KPI หรือ Dashboard เพื่อให้เห็นภาพรวมของการเปลี่ยนแปลง ครับ