ABS คืนค่าสัมบูรณ์ของตัวเลข โดยลบเครื่องหมายบวกหรือลบออก ตัวเลขบวกจะคืนค่าเดิม ตัวเลขลบจะกลายเป็นบวก ศูนย์ยังคงเป็นศูนย์
.
ที่เจ๋งคือฟังก์ชันนี้รักษาชนิดข้อมูลเดิม (currency, decimal, integer) และรองรับค่า infinity ด้วย ส่วนตัวผมใช้บ่อยมากตอนต้องคำนวณความแตกต่างระหว่างค่า โดยไม่สนใจว่าค่าไหนมากกว่าหรือน้อยกว่าครับ 💡
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| Number | decimal, currency, or integer | ตัวเลขที่ต้องการหาค่าสัมบูรณ์ สามารถเป็นตัวเลขโดยตรง ค่าจากคอลัมน์ หรือผลลัพธ์จากนิพจน์ทางคณิตศาสตร์ เช่น -15, Column[Amount], Revenue – Expense |
ABS เป็นฟังก์ชันคณิตศาสตร์พื้นฐานใน DAX ที่ทำหน้าที่คืนค่าสัมบูรณ์ของตัวเลข ง่ายๆ คือมันจะลบเครื่องหมายลบออก ทำให้ผลลัพธ์เป็นตัวเลขบวกเสมอ
.
ตัวอย่างเช่น ABS(-150) จะได้ 150 และ ABS(150) ก็ยังได้ 150 เหมือนเดิม ส่วน ABS(0) ก็ยังคงเป็น 0
.
ส่วนตัวผมใช้บ่อยมากตอนทำ variance analysis หรือตอนหา outliers ครับ มันช่วยให้เราเห็นขนาดของความแตกต่างได้ชัดเจนโดยไม่ต้องสนใจว่าเป็นบวกหรือลบ 😎
คำนวณความเบี่ยงเบนของยอดขายหรือกำไรจากค่าเป้าหมาย โดยไม่สนใจว่าเกินหรือต่ำกว่า ตัวอย่าง: ABS(ActualSales – TargetSales)
หาความแตกต่างของยอดขายหรือค่าใช้จ่าย ระหว่างปีปัจจุบันกับปีที่แล้ว เพื่อมีความเข้าใจว่าเปลี่ยนแปลงไปเท่าไร
หาระยะห่างของข้อมูลจากค่าเฉลี่ยหรือมัธยฐาน เพื่อระบุค่าที่แปลกออกไป เช่น ลูกค้าที่มีการซื้อเป็นจำนวนมากหรือน้อยเป็นพิเศษ
หาจำนวนเงินที่ต้องชำระเพิ่มเติมหรือเงินคืน โดยใช้ ABS เพื่อตรวจสอบความแตกต่าง เช่น ABS(InvoiceAmount – PaymentReceived)
ค่าลบ -150 ถูกแปลงเป็นค่าบวก 150 โดย ABS ลบเครื่องหมายลบออก
ง่ายมากครับ ไม่ว่าจะเป็นเลขบวกหรือลบ ผลลัพธ์จะเป็นบวกเสมอ 😎
ถ้า ActualSales คือ 225,000 และ TargetSales คือ 250,000 ผลต่างคือ -25,000 แต่ ABS จะลบเครื่องหมายให้เป็น 25,000
วิธีนี้ทำให้เราเห็นขนาดของความเบี่ยงเบนได้ชัดเจน โดยไม่สนใจว่าขายได้มากกว่าหรือน้อยกว่าเป้าครับ 💡
ถ้ายอดขายปีนี้ 345,000 และปีที่แล้ว 300,000 ผลต่างคือ 45,000
ABS จะคืนค่า 45,000 เสมอ ไม่ว่ายอดปีนี้จะมากกว่าหรือน้อยกว่าปีที่แล้วก็ตาม เราจะได้เห็นแค่ว่ามันเปลี่ยนไปเท่าไรครับ
คำนวณว่า SalesAmount ห่างจากค่าเฉลี่ยเท่าไร โดยไม่สนใจว่าสูงหรือต่ำกว่า
วิธีนี้เจ๋งมากตอนหา outliers ครับ จะได้เห็นว่าแถวไหนที่แปลกไปจากปกติ ส่วนตัวผมใช้บ่อยมากตอนทำ data quality check 😎
ใช้ SUMX กับ FILTER เพื่อเลือกเฉพาะแถวที่มีความแตกต่างระหว่าง Budget กับ Actual มากกว่า 100,000 บาท (ไม่ว่าบวกหรือลบ)
แล้วค่อยรวม Amount ของแถวที่ผ่านเงื่อนไข เทคนิคนี้ใช้ได้ดีตอนต้องการมองหาแค่รายการที่เบี่ยงเบนมากๆ ครับ 💡
หาความแตกต่างระหว่างจำนวนใบแจ้งหนี้กับจำนวนที่ชำระแล้ว โดยใช้ ABS เพื่อหาจำนวนที่ยังค้างชำระ
แล้วกรองเฉพาะรายการที่ Status ไม่ใช่ "Paid" เพื่อดูแค่หนี้ที่ยังค้างอยู่ ส่วนตัวผมชอบใช้วิธีนี้ตอนทำ reconciliation ครับ
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 เสมอเมื่อต้องการลบเครื่องหมายครับ 😎
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่