Iterator ใน DAX (SUMX)
SUMX และตระกูล X คำนวณนิพจน์ทีละแถวก่อนรวม — งานคูณก่อนบวก เช่น ราคา×จำนวน ต้องใช้เสมอ.
เริ่มอ่านตรงนี้ก่อน
อธิบายแบบง่าย
Iterator ใน DAX (SUMX) คือเรื่องที่ช่วยให้เราใช้ทำรายงานและ dashboard จากข้อมูลได้ถูกทางขึ้น
ระดับ
เหมาะกับคนที่เริ่มลงมือทำแล้ว
ใช้เมื่อไหร่
ยอดขาย = ราคา × จำนวน ต่อแถว แล้วค่อยรวม — SUM เฉยๆ ทำไม่ได้
อ่านแล้วทำอะไรต่อ
แต่ละแถวมีส่วนลดต่างกัน ต้องคิดทีละแถวก่อนรวม
เห็นภาพ: ทริคนี้เป็นยังไง
- 1แถว 1: 10 × 15 = 150Quantity × UnitPrice
- 2แถว 2: 3 × 80 = 240
- 3แถว 3: 5 × 22 = 110
- 4รวมทั้งหมด = 500ค่อยบวกหลังคูณครบทุกแถว
▶ เล่นอัตโนมัติ · ชี้เมาส์เพื่อหยุด · กดแถบด้านบนเพื่อข้ามขั้น
ใช้ตอนไหน?
- ยอดขาย = ราคา × จำนวน ต่อแถว แล้วค่อยรวม — 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]))