Thep Excel

ABSฟังก์ชันหาค่าสัมบูรณ์ (Absolute Value)

ABS คืนค่าสัมบูรณ์ของตัวเลข โดยลบเครื่องหมายบวกหรือลบออก ตัวเลขบวกจะคืนค่าเดิม ตัวเลขลบจะกลายเป็นบวก ศูนย์ยังคงเป็นศูนย์
.
ที่เจ๋งคือฟังก์ชันนี้รักษาชนิดข้อมูลเดิม (currency, decimal, integer) และรองรับค่า infinity ด้วย ส่วนตัวผมใช้บ่อยมากตอนต้องคำนวณความแตกต่างระหว่างค่า โดยไม่สนใจว่าค่าไหนมากกว่าหรือน้อยกว่าครับ 💡

fx
=ABS(Number)

ความนิยม7/10
ความยาก2/10
ประโยชน์7/10

อัปเดต 19 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
Number decimal, currency, or integer ตัวเลขที่ต้องการหาค่าสัมบูรณ์ สามารถเป็นตัวเลขโดยตรง ค่าจากคอลัมน์ หรือผลลัพธ์จากนิพจน์ทางคณิตศาสตร์ เช่น -15, Column[Amount], Revenue – Expense

Additional Notes

ABS เป็นฟังก์ชันคณิตศาสตร์พื้นฐานใน DAX ที่ทำหน้าที่คืนค่าสัมบูรณ์ของตัวเลข ง่ายๆ คือมันจะลบเครื่องหมายลบออก ทำให้ผลลัพธ์เป็นตัวเลขบวกเสมอ
.
ตัวอย่างเช่น ABS(-150) จะได้ 150 และ ABS(150) ก็ยังได้ 150 เหมือนเดิม ส่วน ABS(0) ก็ยังคงเป็น 0
.
ส่วนตัวผมใช้บ่อยมากตอนทำ variance analysis หรือตอนหา outliers ครับ มันช่วยให้เราเห็นขนาดของความแตกต่างได้ชัดเจนโดยไม่ต้องสนใจว่าเป็นบวกหรือลบ 😎

How it works

หาระยะห่างจากค่าเป้าหมาย

คำนวณความเบี่ยงเบนของยอดขายหรือกำไรจากค่าเป้าหมาย โดยไม่สนใจว่าเกินหรือต่ำกว่า ตัวอย่าง: ABS(ActualSales – TargetSales)

คำนวณการเปลี่ยนแปลงจากปีที่แล้ว

หาความแตกต่างของยอดขายหรือค่าใช้จ่าย ระหว่างปีปัจจุบันกับปีที่แล้ว เพื่อมีความเข้าใจว่าเปลี่ยนแปลงไปเท่าไร

หาระยะห่างของค่านอกแนว (Outliers)

หาระยะห่างของข้อมูลจากค่าเฉลี่ยหรือมัธยฐาน เพื่อระบุค่าที่แปลกออกไป เช่น ลูกค้าที่มีการซื้อเป็นจำนวนมากหรือน้อยเป็นพิเศษ

คำนวณค่าใช้จ่ายเพิ่มเติมหรือเงินคืน

หาจำนวนเงินที่ต้องชำระเพิ่มเติมหรือเงินคืน โดยใช้ ABS เพื่อตรวจสอบความแตกต่าง เช่น ABS(InvoiceAmount – PaymentReceived)

Examples

ตัวอย่างที่ 1: หาค่าสัมบูรณ์ของตัวเลขลบAbsolute Value = ABS(-150)

ค่าลบ -150 ถูกแปลงเป็นค่าบวก 150 โดย ABS ลบเครื่องหมายลบออก

ง่ายมากครับ ไม่ว่าจะเป็นเลขบวกหรือลบ ผลลัพธ์จะเป็นบวกเสมอ 😎

fx
Absolute Value = ABS(-150)

ผลลัพธ์150
ตัวอย่างที่ 2: หาความแตกต่างของยอดขายSales Variance = ABS([ActualSales] – [TargetSales])

ถ้า ActualSales คือ 225,000 และ TargetSales คือ 250,000 ผลต่างคือ -25,000 แต่ ABS จะลบเครื่องหมายให้เป็น 25,000

วิธีนี้ทำให้เราเห็นขนาดของความเบี่ยงเบนได้ชัดเจน โดยไม่สนใจว่าขายได้มากกว่าหรือน้อยกว่าเป้าครับ 💡

fx
Sales Variance = ABS([ActualSales] – [TargetSales])

ผลลัพธ์25000 (เบี่ยงเบนไป 25,000 บาท)
ตัวอย่างที่ 3: หาการเปลี่ยนแปลงจากปีที่แล้วYoY Change = ABS([CurrentYear] – [PreviousYear])

ถ้ายอดขายปีนี้ 345,000 และปีที่แล้ว 300,000 ผลต่างคือ 45,000

ABS จะคืนค่า 45,000 เสมอ ไม่ว่ายอดปีนี้จะมากกว่าหรือน้อยกว่าปีที่แล้วก็ตาม เราจะได้เห็นแค่ว่ามันเปลี่ยนไปเท่าไรครับ

fx
YoY Change = ABS([CurrentYear] – [PreviousYear])

ผลลัพธ์45000 (เพิ่มขึ้น 45,000 บาท)
ตัวอย่างที่ 4: หาความเบี่ยงเบนจากค่าเฉลี่ยDeviation = ABS([SalesAmount] – AVERAGE([SalesAmount]))

คำนวณว่า SalesAmount ห่างจากค่าเฉลี่ยเท่าไร โดยไม่สนใจว่าสูงหรือต่ำกว่า

วิธีนี้เจ๋งมากตอนหา outliers ครับ จะได้เห็นว่าแถวไหนที่แปลกไปจากปกติ ส่วนตัวผมใช้บ่อยมากตอนทำ data quality check 😎

fx
Deviation = ABS([SalesAmount] – AVERAGE([SalesAmount]))

ผลลัพธ์15000 (ห่างจากค่าเฉลี่ย 15,000 บาท)
ตัวอย่างที่ 5: รวมยอดที่มีความแตกต่างสูงLarge Variances = SUMX(FILTER(Budget, ABS([Budget] – [Actual]) > 100000), [Amount])

ใช้ SUMX กับ FILTER เพื่อเลือกเฉพาะแถวที่มีความแตกต่างระหว่าง Budget กับ Actual มากกว่า 100,000 บาท (ไม่ว่าบวกหรือลบ)

แล้วค่อยรวม Amount ของแถวที่ผ่านเงื่อนไข เทคนิคนี้ใช้ได้ดีตอนต้องการมองหาแค่รายการที่เบี่ยงเบนมากๆ ครับ 💡

fx
Large Variances = SUMX(FILTER(Budget, ABS([Budget] – [Actual]) > 100000), [Amount])

ผลลัพธ์2500000 (รวมยอดที่เบี่ยงเบนสูงกว่า 100,000 บาท)
ตัวอย่างที่ 6: ใช้ในสูตรเพื่อหารายการที่ไม่มีหนี้Outstanding Balance = CALCULATE(SUMX(Invoices, ABS([InvoiceAmount] – [PaidAmount])), [Status] "Paid")

หาความแตกต่างระหว่างจำนวนใบแจ้งหนี้กับจำนวนที่ชำระแล้ว โดยใช้ ABS เพื่อหาจำนวนที่ยังค้างชำระ

แล้วกรองเฉพาะรายการที่ Status ไม่ใช่ "Paid" เพื่อดูแค่หนี้ที่ยังค้างอยู่ ส่วนตัวผมชอบใช้วิธีนี้ตอนทำ reconciliation ครับ

fx
Outstanding Balance = CALCULATE(SUMX(Invoices, ABS([InvoiceAmount] – [PaidAmount])), [Status] <> "Paid")

ผลลัพธ์125000 (ยังค้างชำระ 125,000 บาท)

FAQs

ความแตกต่างระหว่าง ABS กับ SIGN คืออะไร?+

ABS หาค่าสัมบูรณ์ (ลบเครื่องหมายออก) เช่น ABS(-5) = 5

ส่วน SIGN คืนเครื่องหมาย: +1 สำหรับบวก, -1 สำหรับลบ, 0 สำหรับศูนย์ เช่น SIGN(-5) = -1

ง่ายๆ คือ ใช้ ABS เมื่อต้องการ "ขนาด" (magnitude) ใช้ SIGN เมื่อต้องการ "ทิศทาง" (direction) ครับ 😎

ABS สามารถใช้กับตัวเลขบวกได้หรือไม่?+

ได้ครับ ABS ทำงานกับตัวเลขทุกแบบ

ตัวเลขบวก → คืนค่าเดิม เช่น ABS(150) = 150
ตัวเลขลบ → กลายเป็นบวก เช่น ABS(-150) = 150
ศูนย์ → ยังคงเป็นศูนย์ ABS(0) = 0

ง่ายมากครับ ไม่มีอะไรซับซ้อน 😎

ABS เก็บรักษาชนิดข้อมูลหรือไม่?+

ใช่ครับ ABS รักษา data type เดิมไว้

ส่ง decimal → ได้ decimal กลับมา
ส่ง currency → ได้ currency กลับมา
ส่ง integer → ได้ integer กลับมา

นี่ดีมาก เพราะแตกต่างจากบางฟังก์ชันที่อาจเปลี่ยน type โดยไม่บอกครับ ทำให้ผลลัพธ์ชัดเจนและปลอดภัย 💡

ABS รองรับค่า infinity หรือไม่?+

ใช่ครับ ABS รองรับ positive infinity และ negative infinity ด้วย

เช่น ABS(-∞) = ∞ และ ABS(∞) = ∞

แม้ว่าจะไม่ค่อยได้ใช้บ่อย แต่มีประโยชน์ในการคำนวณทางคณิตศาสตร์ขั้นสูงหรือ edge cases ที่ซับซ้อนครับ

ความแตกต่างระหว่าง ABS กับ SQRT(Power(x,2)) คืออะไร?+

ทั้งคู่ให้ผลลัพธ์เดียวกัน (ค่าสัมบูรณ์) แต่ ABS ง่ายกว่าและเร็วกว่ามากครับ

ABS(-5) = 5 ✅ (กระชับ ชัดเจน)
SQRT(POWER(-5,2)) = 5 ❌ (ยาว ซับซ้อน)

ส่วนตัวผมแนะนำให้ใช้ ABS เสมอ เพราะง่าย อ่านเข้าใจได้ทันที และ engine ก็ optimize ได้ดีกว่า 😎

ABS สามารถใช้ในคำนวณแถว (Calculated Column) ได้หรือไม่?+

ได้ครับ ABS ใช้ได้ทั้งใน Measure และ Calculated Column โดยไม่มีข้อจำกัดใดๆ

**Calculated Column:** `[Absolute Amount] = ABS([Amount])`
**Measure:** `[Variance] = ABS([Budget] – [Actual])`

เลือกใช้ตามความเหมาะสมของงานครับ ถ้าต้องการค่าคงที่ใช้ calculated column ถ้าต้องการให้ยืดหยุ่นตาม filter context ใช้ measure

สามารถใช้ ABS ร่วมกับ FILTER ได้หรือไม่?+

ได้ครับ ABS ใช้คู่กับ FILTER ได้ดีมาก

ตัวอย่าง: `FILTER(Sales, ABS([Amount]) > 1000)` จะเลือกเฉพาะแถวที่มีขนาดสัมบูรณ์มากกว่า 1,000 (ไม่ว่าบวกหรือลบ)

ส่วนตัวผมใช้บ่อยมากตอนต้องหาความแตกต่างหรือการเปลี่ยนแปลงที่มีนัยสำคัญครับ เช่น หา variance ที่มากกว่า threshold ที่กำหนด 💡

ทำไมต้องใช้ ABS แทนการเขียน IF เพื่อตรวจสอบเครื่องหมาย?+

ABS ง่ายกว่า สั้นกว่า และเร็วกว่ามากครับ

เปรียบเทียบ:
– `ABS(x)` ✅ (กระชับ ชัดเจน)
– `IF(x < 0, -x, x)` ❌ (ยาว เสี่ยง logic error)

นอกจากนี้ ABS ยังอ่านเข้าใจได้ทันทีว่าต้องการหาขนาด (magnitude) ส่วนตัวผมแนะนำให้ใช้ ABS เสมอเมื่อต้องการลบเครื่องหมายครับ 😎

Resources & Related

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่