ABS คืนค่าสัมบูรณ์ของตัวเลข โดยลบเครื่องหมายบวกหรือลบออก ตัวเลขบวกจะคืนค่าเดิม ตัวเลขลบจะกลายเป็นบวก ศูนย์ยังคงเป็นศูนย์
.
ที่เจ๋งคือฟังก์ชันนี้รักษาชนิดข้อมูลเดิม (currency, decimal, integer) และรองรับค่า infinity ด้วย ส่วนตัวผมใช้บ่อยมากตอนต้องคำนวณความแตกต่างระหว่างค่า โดยไม่สนใจว่าค่าไหนมากกว่าหรือน้อยกว่าครับ 💡
=ABS( Number )
=ABS( Number )
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Number | decimal, currency, or integer | Yes | ตัวเลขที่ต้องการหาค่าสัมบูรณ์ สามารถเป็นตัวเลขโดยตรง ค่าจากคอลัมน์ หรือผลลัพธ์จากนิพจน์ทางคณิตศาสตร์ เช่น -15, Column[Amount], Revenue – Expense |
คำนวณความเบี่ยงเบนของยอดขายหรือกำไรจากค่าเป้าหมาย โดยไม่สนใจว่าเกินหรือต่ำกว่า ตัวอย่าง: ABS(ActualSales – TargetSales)
หาความแตกต่างของยอดขายหรือค่าใช้จ่าย ระหว่างปีปัจจุบันกับปีที่แล้ว เพื่อมีความเข้าใจว่าเปลี่ยนแปลงไปเท่าไร
หาระยะห่างของข้อมูลจากค่าเฉลี่ยหรือมัธยฐาน เพื่อระบุค่าที่แปลกออกไป เช่น ลูกค้าที่มีการซื้อเป็นจำนวนมากหรือน้อยเป็นพิเศษ
หาจำนวนเงินที่ต้องชำระเพิ่มเติมหรือเงินคืน โดยใช้ ABS เพื่อตรวจสอบความแตกต่าง เช่น ABS(InvoiceAmount – PaymentReceived)
Absolute Value = ABS(-150)Absolute Value = ABS(-150)
150
Sales Variance = ABS([ActualSales] - [TargetSales])Sales Variance = ABS([ActualSales] - [TargetSales])
25000 (เบี่ยงเบนไป 25,000 บาท)
YoY Change = ABS([CurrentYear] - [PreviousYear])YoY Change = ABS([CurrentYear] - [PreviousYear])
45000 (เพิ่มขึ้น 45,000 บาท)
Deviation = ABS([SalesAmount] - AVERAGE([SalesAmount]))Deviation = ABS([SalesAmount] - AVERAGE([SalesAmount]))
15000 (ห่างจากค่าเฉลี่ย 15,000 บาท)
Large Variances = SUMX(FILTER(Budget, ABS([Budget] - [Actual]) > 100000), [Amount])Large Variances = SUMX(FILTER(Budget, ABS([Budget] - [Actual]) > 100000), [Amount])
2500000 (รวมยอดที่เบี่ยงเบนสูงกว่า 100,000 บาท)
Outstanding Balance = CALCULATE(SUMX(Invoices, ABS([InvoiceAmount] - [PaidAmount])), [Status] "Paid")Outstanding Balance = CALCULATE(SUMX(Invoices, ABS([InvoiceAmount] - [PaidAmount])), [Status] <> "Paid")
125000 (ยังค้างชำระ 125,000 บาท)
ABS หาค่าสัมบูรณ์ (ลบเครื่องหมายออก) เช่น ABS(-5) = 5
.
ส่วน SIGN คืนเครื่องหมาย: +1 สำหรับบวก, -1 สำหรับลบ, 0 สำหรับศูนย์ เช่น SIGN(-5) = -1
.
ง่ายๆ คือ ใช้ ABS เมื่อต้องการ “ขนาด” (magnitude) ใช้ SIGN เมื่อต้องการ “ทิศทาง” (direction) ครับ 😎
ได้ครับ ABS ทำงานกับตัวเลขทุกแบบ
.
ตัวเลขบวก → คืนค่าเดิม เช่น ABS(150) = 150
ตัวเลขลบ → กลายเป็นบวก เช่น ABS(-150) = 150
ศูนย์ → ยังคงเป็นศูนย์ ABS(0) = 0
.
ง่ายมากครับ ไม่มีอะไรซับซ้อน 😎
ใช่ครับ ABS รักษา data type เดิมไว้
.
ส่ง decimal → ได้ decimal กลับมา
ส่ง currency → ได้ currency กลับมา
ส่ง integer → ได้ integer กลับมา
.
นี่ดีมาก เพราะแตกต่างจากบางฟังก์ชันที่อาจเปลี่ยน type โดยไม่บอกครับ ทำให้ผลลัพธ์ชัดเจนและปลอดภัย 💡
ใช่ครับ ABS รองรับ positive infinity และ negative infinity ด้วย
.
เช่น ABS(-∞) = ∞ และ ABS(∞) = ∞
.
แม้ว่าจะไม่ค่อยได้ใช้บ่อย แต่มีประโยชน์ในการคำนวณทางคณิตศาสตร์ขั้นสูงหรือ edge cases ที่ซับซ้อนครับ
ทั้งคู่ให้ผลลัพธ์เดียวกัน (ค่าสัมบูรณ์) แต่ ABS ง่ายกว่าและเร็วกว่ามากครับ
.
ABS(-5) = 5 ✅ (กระชับ ชัดเจน)
SQRT(POWER(-5,2)) = 5 ❌ (ยาว ซับซ้อน)
.
ส่วนตัวผมแนะนำให้ใช้ ABS เสมอ เพราะง่าย อ่านเข้าใจได้ทันที และ engine ก็ optimize ได้ดีกว่า 😎
ได้ครับ ABS ใช้ได้ทั้งใน Measure และ Calculated Column โดยไม่มีข้อจำกัดใดๆ
.
**Calculated Column:** `[Absolute Amount] = ABS([Amount])`
**Measure:** `[Variance] = ABS([Budget] – [Actual])`
.
เลือกใช้ตามความเหมาะสมของงานครับ ถ้าต้องการค่าคงที่ใช้ calculated column ถ้าต้องการให้ยืดหยุ่นตาม filter context ใช้ measure
ได้ครับ ABS ใช้คู่กับ FILTER ได้ดีมาก
.
ตัวอย่าง: `FILTER(Sales, ABS([Amount]) > 1000)` จะเลือกเฉพาะแถวที่มีขนาดสัมบูรณ์มากกว่า 1,000 (ไม่ว่าบวกหรือลบ)
.
ส่วนตัวผมใช้บ่อยมากตอนต้องหาความแตกต่างหรือการเปลี่ยนแปลงที่มีนัยสำคัญครับ เช่น หา variance ที่มากกว่า threshold ที่กำหนด 💡
ABS ง่ายกว่า สั้นกว่า และเร็วกว่ามากครับ
.
เปรียบเทียบ:
– `ABS(x)` ✅ (กระชับ ชัดเจน)
– `IF(x < 0, -x, x)` ❌ (ยาว เสี่ยง logic error)
.
นอกจากนี้ ABS ยังอ่านเข้าใจได้ทันทีว่าต้องการหาขนาด (magnitude) ส่วนตัวผมแนะนำให้ใช้ ABS เสมอเมื่อต้องการลบเครื่องหมายครับ 😎
ABS เป็นฟังก์ชันคณิตศาสตร์พื้นฐานใน DAX ที่ทำหน้าที่คืนค่าสัมบูรณ์ของตัวเลข ง่ายๆ คือมันจะลบเครื่องหมายลบออก ทำให้ผลลัพธ์เป็นตัวเลขบวกเสมอ
.
ตัวอย่างเช่น ABS(-150) จะได้ 150 และ ABS(150) ก็ยังได้ 150 เหมือนเดิม ส่วน ABS(0) ก็ยังคงเป็น 0
.
ส่วนตัวผมใช้บ่อยมากตอนทำ variance analysis หรือตอนหา outliers ครับ มันช่วยให้เราเห็นขนาดของความแตกต่างได้ชัดเจนโดยไม่ต้องสนใจว่าเป็นบวกหรือลบ 😎