ตัวอย่างที่ 1: คำนวณยอดขายรวม (Total Sales)
Total Sales = SUMX( Sales, Sales[Quantity] * Sales[UnitPrice] )
ผลรวมยอดขายทั้งหมด
วนลูปคำนวณสูตรในแต่ละแถว แล้วนำผลรวมมารวมกัน
SUMX เป็นฟังก์ชัน Iterator ที่จะวนลูปไปในตารางทีละแถว เพื่อประเมินค่า Expression ที่กำหนด (เช่น การคูณกันระหว่างคอลัมน์) แล้วนำผลลัพธ์ทั้งหมดมารวมกัน เหมาะสำหรับการคำนวณที่ต้องทำในระดับแถวก่อนหาผลรวม
=SUMX(Table, Expression)
=SUMX(Table, Expression)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Table | table | Yes | ตารางที่ต้องการให้ฟังก์ชันเข้าไปวนลูป (อาจเป็นชื่อตาราง หรือฟังก์ชันที่คืนค่าเป็นตาราง เช่น FILTER) | |
| Expression | scalar | Yes | สูตรหรือนิพจน์ที่ต้องการให้คำนวณในแต่ละแถว (เช่น [Price] * [Quantity]) |
คำนวณยอดขายโดยเอา ราคาคูณจำนวน ในแต่ละแถวก่อน แล้วค่อยรวม ซึ่ง SUM ปกติทำไม่ได้ถ้าไม่มีคอลัมน์ผลลัพธ์ค้างไว้
ใช้ร่วมกับ FILTER เพื่อหาผลรวมเฉพาะข้อมูลที่ตรงเงื่อนไขซับซ้อน
ใช้ SUMX คำนวณผลรวมของ (ค่า x น้ำหนัก) เพื่อนำไปหารด้วยผลรวมน้ำหนัก
Total Sales = SUMX( Sales, Sales[Quantity] * Sales[UnitPrice] )
ผลรวมยอดขายทั้งหมด
Red Sales = SUMX(
FILTER(Sales, RELATED('Product'[Color]) = "Red"),
Sales[Quantity] * Sales[UnitPrice]
)
ยอดขายรวมเฉพาะสินค้าสีแดง
Total Margin = SUMX( Sales, [Total Sales] - [Total Cost] )
ผลรวมกำไร
ถ้าคุณมีคอลัมน์ Amount (ยอดเงิน) อยู่แล้ว การใช้ SUM จะเร็วกว่า แต่ถ้าคุณมีแค่คอลัมน์ Quantity และ Price แยกกัน คุณต้องใช้ SUMX เพื่อคูณกันก่อนรวม หรือไม่ก็ต้องสร้าง Calculated Column ใหม่ซึ่งจะเปลืองพื้นที่ไฟล์
โดยทั่วไป SUMX จะใช้ทรัพยากรมากกว่า SUM เล็กน้อยเพราะต้องประมวลผลทีละแถว แต่ถ้าใช้อย่างถูกวิธี (เช่น ไม่ใช้ IF ซ้อนกันเยอะๆ ใน Expression) ประสิทธิภาพจะไม่ต่างกันมากใน Data Model ทั่วไป
SUMX คือฟังก์ชันประเภท Iterator ที่ทรงพลังมากใน DAX มันไม่ได้แค่หาผลรวมของคอลัมน์เหมือน SUM ปกติ แต่จะ “วนลูป” ไปทีละแถวในตารางที่กำหนด เพื่อคำนวณสูตร (Expression) ในแต่ละแถวก่อน แล้วค่อยนำผลลัพธ์ทั้งหมดมารวมกัน
SUM: ใช้รวมค่าใน 1 คอลัมน์เท่านั้น (ทำงานในระดับคอลัมน์)
SUMX: ใช้เมื่อต้องการคำนวณสูตรที่ซับซ้อนในระดับแถว (Row Context) ก่อนที่จะรวมผลลัพธ์ เช่น การเอา ราคา x จำนวน ในแต่ละแถวก่อน แล้วค่อยรวมยอดเงินทั้งหมด