กลับไปหน้า Power BI
ทริคPower BI

Iterator ใน DAX (SUMX)

SUMX และตระกูล X คำนวณนิพจน์ทีละแถวก่อนรวม — งานคูณก่อนบวก เช่น ราคา×จำนวน ต้องใช้เสมอ.

เริ่มอ่านตรงนี้ก่อน

อธิบายแบบง่าย

Iterator ใน DAX (SUMX) คือเรื่องที่ช่วยให้เราใช้ทำรายงานและ dashboard จากข้อมูลได้ถูกทางขึ้น

ระดับ

เหมาะกับคนที่เริ่มลงมือทำแล้ว

ใช้เมื่อไหร่

ยอดขาย = ราคา × จำนวน ต่อแถว แล้วค่อยรวม — SUM เฉยๆ ทำไม่ได้

อ่านแล้วทำอะไรต่อ

แต่ละแถวมีส่วนลดต่างกัน ต้องคิดทีละแถวก่อนรวม

เห็นภาพ: ทริคนี้เป็นยังไง

  1. 1แถว 1: 10 × 15 = 150Quantity × UnitPrice
  2. 2แถว 2: 3 × 80 = 240
  3. 3แถว 3: 5 × 22 = 110
  4. 4รวมทั้งหมด = 500ค่อยบวกหลังคูณครบทุกแถว

▶ เล่นอัตโนมัติ · ชี้เมาส์เพื่อหยุด · กดแถบด้านบนเพื่อข้ามขั้น

SUMX วนคำนวณทีละแถว แล้วค่อยรวมผล

ใช้ตอนไหน?

  • ยอดขาย = ราคา × จำนวน ต่อแถว แล้วค่อยรวม — SUM เฉยๆ ทำไม่ได้
  • ต้องคำนวณ margin หรือส่วนลดเป็นรายแถวก่อนสรุป
  • อยากได้ค่าเฉลี่ย/สูงสุดของนิพจน์ที่คำนวณต่อแถว ไม่ใช่ของคอลัมน์เดียว

ความหมาย

iterator คือฟังก์ชัน DAX ที่ลงท้ายด้วย X (SUMX, AVERAGEX, MAXX ฯลฯ) ซึ่งวนคำนวณนิพจน์ทีละแถวของตารางที่ระบุ แล้วค่อยสรุปผลรวม ต่างจาก SUM ธรรมดาที่บวกค่าในคอลัมน์เดียวตรงๆ — งานแบบ "คูณก่อนแล้วค่อยบวก" ต้องใช้ iterator เสมอ

รูปแบบ SUMX

ตัวแรกคือตารางที่จะวน ตัวที่สองคือนิพจน์ที่คำนวณต่อแถว

Total Sales =
SUMX(
  Sales,
  Sales[Quantity] * Sales[UnitPrice]
)

ตัวอย่างการใช้

ยอดหลังหักส่วนลดรายแถว

แต่ละแถวมีส่วนลดต่างกัน ต้องคิดทีละแถวก่อนรวม

SUMX(Sales, Sales[Qty] * Sales[Price] * (1 - Sales[Discount]))